| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523 |
- <template>
- <ele-modal
- custom-class="ele-dialog-form long-dialog-form"
- :centered="true"
- :visible="autogenerateDialogFlag"
- v-if="autogenerateDialogFlag"
- title="生成采购计划"
- append-to-body
- :close-on-click-modal="false"
- :width="isAuto ? '30%' : '50%'"
- :before-close="cancel"
- >
- <el-form ref="form" :model="form" class="el-form-box" v-if="!isAuto">
- <el-row>
- <!-- <headerTitle title="生成采购计划"></headerTitle>-->
- <el-col :span="24">
- <ele-pro-table
- ref="table"
- :needPage="false"
- :columns="generatePurchaseColumns"
- :max-height="300"
- :selection.sync="selection"
- :datasource="form.generatePurchaseTable"
- cache-key="generatePurchaseListTable17"
- class="time-form"
- >
- <!-- 表头工具栏 -->
- <!-- <template v-slot:toolbar>-->
- <!-- <el-form-item-->
- <!-- label="选择产品:"-->
- <!-- prop="generatePurchase"-->
- <!-- style="margin-bottom: 0"-->
- <!-- >-->
- <!-- <el-select-->
- <!-- v-model="generatePurchaseList"-->
- <!-- multiple-->
- <!-- clearable-->
- <!-- filterable-->
- <!-- collapse-tags-->
- <!-- placeholder="请选择"-->
- <!-- >-->
- <!-- <el-option-->
- <!-- v-for="item in commitData.productList"-->
- <!-- :key="item.productCode"-->
- <!-- :label="item.productName"-->
- <!-- :value="item.productCode"-->
- <!-- ></el-option>-->
- <!-- </el-select>-->
- <!-- </el-form-item>-->
- <!-- </template>-->
- <template v-slot:produceCycle="scope">
- <el-form-item
- :prop="
- 'generatePurchaseTable.' + scope.$index + '.produceCycle'
- "
- >
- <el-date-picker
- style="width: 100%"
- v-model="scope.row.produceCycle"
- type="date"
- disabled
- placeholder="选择日期"
- >
- </el-date-picker>
- </el-form-item>
- </template>
- <template v-slot:productionDays="scope">
- <el-form-item
- :prop="
- 'generatePurchaseTable.' + scope.$index + '.productionDays'
- "
- :rules="{
- required: true,
- pattern: positiveIntegerReg(),
- message: '请正确输入数量',
- trigger: ['blur', 'change']
- }"
- >
- <el-input
- @change="handleProduceDays(scope.row, scope.$index)"
- type="number"
- :min="1"
- disabled
- v-model="scope.row.productionDays"
- style="width: 100%"
- >
- <span slot="append">天</span>
- </el-input>
- </el-form-item>
- </template>
- <template v-slot:headerRequired="{ column }">
- <span class="is-required">{{ column.label }}</span>
- </template>
- </ele-pro-table>
- </el-col>
- </el-row>
- <!-- <el-row>-->
- <!-- <headerTitle title="生成生产计划"></headerTitle>-->
- <!-- <el-col :span="24">-->
- <!-- <el-form-item label="自动生成生产计划:" prop="generateProduce">-->
- <!-- <el-select-->
- <!-- v-model="generateProduceList"-->
- <!-- multiple-->
- <!-- clearable-->
- <!-- filterable-->
- <!-- collapse-tags-->
- <!-- placeholder="请选择"-->
- <!-- >-->
- <!-- <el-option-->
- <!-- v-for="item in commitData.productList"-->
- <!-- :key="item.productCode"-->
- <!-- :label="item.productName"-->
- <!-- :value="item.productCode"-->
- <!-- ></el-option>-->
- <!-- </el-select>-->
- <!-- </el-form-item>-->
- <!-- </el-col>-->
- <!-- </el-row>-->
- <!-- <el-row>-->
- <!-- <headerTitle title="生成项目立项"></headerTitle>-->
- <!-- <el-col :span="24">-->
- <!-- <el-form-item label="自动生成项目立项:" prop="generateProject">-->
- <!-- <el-select-->
- <!-- v-model="generateProjectList"-->
- <!-- multiple-->
- <!-- clearable-->
- <!-- filterable-->
- <!-- collapse-tags-->
- <!-- placeholder="请选择"-->
- <!-- >-->
- <!-- <el-option-->
- <!-- v-for="item in commitData.productList"-->
- <!-- :key="item.productCode"-->
- <!-- :label="item.productName"-->
- <!-- :value="item.productCode"-->
- <!-- ></el-option>-->
- <!-- </el-select>-->
- <!-- </el-form-item>-->
- <!-- </el-col>-->
- <!-- </el-row>-->
- </el-form>
- <div slot="footer" v-if="!isAuto">
- <el-button type="primary" @click="save">确定</el-button>
- <el-button @click="cancel">关闭</el-button>
- </div>
- <el-form
- ref="form"
- :model="form"
- :rules="rules"
- label-width="160px"
- class="el-form-box"
- v-if="isAuto"
- >
- <el-row>
- <el-col :span="24">
- <el-form-item label="自动生成采购计划:" prop="generatePurchase">
- <el-radio-group
- v-model="form.generatePurchase"
- @change="handleChange"
- >
- <el-radio :label="1">是</el-radio>
- <el-radio :label="0">否</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="自动生成生产计划:" prop="generateProduce">
- <el-radio-group v-model="form.generateProduce">
- <el-radio :label="1">是</el-radio>
- <el-radio :label="0">否</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="自动生成项目立项:" prop="generateProject">
- <el-radio-group v-model="form.generateProject">
- <el-radio :label="1">是</el-radio>
- <el-radio :label="0">否</el-radio>
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <div slot="footer" v-if="isAuto">
- <el-button type="primary" @click="save">确定</el-button>
- <el-button @click="cancel">关闭</el-button>
- </div>
- </ele-modal>
- </template>
- <script>
- import {
- saleOrderCheckCBomAPI,
- saleOrderGeneratePlanAPI
- } from '@/api/saleOrder';
- import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
- import { positiveIntegerReg } from 'ele-admin';
- export default {
- name: 'autogenerateDialog',
- components: {},
- data() {
- return {
- form: {
- generatePurchase: 0,
- generateProduce: 0,
- generateProject: 0,
- generatePurchaseTable: [],
- generateProduceTable: [],
- generateProjectTable: []
- },
- generatePurchaseList: [],
- generateProduceList: [],
- generateProjectList: [],
- selection: [],
- commitData: {},
- isAuto: false,
- autogenerateDialogFlag: false,
- rules: {}
- };
- },
- watch: {
- generatePurchaseList: {
- handler(newVal, oldVal) {
- if (!newVal.length) {
- return (this.form.generatePurchaseTable = []);
- }
- if (newVal.length > oldVal.length) {
- const set1 = new Set(oldVal);
- let data = newVal.filter((item) => !set1.has(item));
- data.forEach((item) => {
- let find =
- this.commitData?.productList?.find(
- (i) => i.productCode === item
- ) || {};
- find.generatePurchase = 1;
- find.productionDays = find.productionDays || undefined;
- find.produceCycle = '';
- this.form.generatePurchaseTable.push(find);
- });
- } else {
- const set1 = new Set(newVal);
- this.form.generatePurchaseTable =
- this.form.generatePurchaseTable.filter((item) =>
- set1.has(item.productCode)
- );
- }
- },
- deep: true
- },
- generateProduceList: {
- handler(newVal, oldVal) {
- if (!newVal.length) {
- return (this.form.generateProduceTable = []);
- }
- if (newVal.length > oldVal.length) {
- const set1 = new Set(oldVal);
- let data = newVal.filter((item) => !set1.has(item));
- data.forEach((item) => {
- let find =
- this.commitData?.productList?.find(
- (i) => i.productCode === item
- ) || {};
- find.generateProduce = 1;
- this.form.generateProduceTable.push(find);
- });
- } else {
- const set1 = new Set(newVal);
- this.form.generateProduceTable =
- this.form.generateProduceTable.filter((item) =>
- set1.has(item.productCode)
- );
- }
- },
- deep: true
- },
- generateProjectList: {
- handler(newVal, oldVal) {
- if (!newVal.length) {
- return (this.form.generateProjectTable = []);
- }
- if (newVal.length > oldVal.length) {
- const set1 = new Set(oldVal);
- let data = newVal.filter((item) => !set1.has(item));
- data.forEach((item) => {
- let find =
- this.commitData?.productList?.find(
- (i) => i.productCode === item
- ) || {};
- find.generateProject = 1;
- this.form.generateProjectTable.push(find);
- });
- } else {
- const set1 = new Set(newVal);
- this.form.generateProjectTable =
- this.form.generateProjectTable.filter((item) =>
- set1.has(item.productCode)
- );
- }
- },
- deep: true
- }
- },
- computed: {
- generatePurchaseColumns() {
- return [
- {
- width: 45,
- type: 'selection',
- columnKey: 'selection',
- align: 'center'
- },
- {
- minWidth: 150,
- prop: 'productName',
- label: '名称',
- slot: 'productName',
- headerSlot: 'headerProductName',
- align: 'center'
- },
- {
- minWidth: 150,
- prop: 'productCode',
- label: '编码',
- slot: 'productName',
- align: 'center'
- },
- {
- minWidth: 150,
- prop: 'productionDays',
- label: '生产周期',
- slot: 'productionDays',
- headerSlot: 'headerRequired',
- align: 'center'
- },
- {
- minWidth: 170,
- prop: 'produceCycle',
- label: '到货时间',
- slot: 'produceCycle',
- headerSlot: 'headerRequired',
- align: 'center'
- },
- {
- width: 140,
- prop: 'customerExpectDeliveryDeadline',
- label: '客户期望交期',
- align: 'center'
- },
- {
- width: 140,
- prop: 'produceDeliveryDeadline',
- label: '生产交付交期',
- align: 'center'
- }
- ];
- }
- },
- methods: {
- positiveIntegerReg() {
- return positiveIntegerReg;
- },
- init(orderId, isAuto = false) {
- this.isAuto = isAuto;
- this.autogenerateDialogFlag = true;
- this.$nextTick(() => {
- this.getSaleOrderDetail(orderId);
- });
- },
- //获取订单详情
- async getSaleOrderDetail(id) {
- this.commitData = await getSaleOrderDetail(id);
- this.form.generatePurchaseTable = this.commitData.productList;
- this.form.generatePurchaseTable.forEach((item, index) => {
- this.handleProduceDays(item, index);
- });
- },
- handleProduceDays(row, index) {
- let newDate = new Date(row.customerExpectDeliveryDeadline);
- newDate.setDate(newDate.getDate() - row.productionDays);
- newDate = newDate.toISOString().split('T')[0];
- this.$set(
- this.form.generatePurchaseTable[index],
- 'produceCycle',
- newDate
- );
- },
- // async save() {
- // let saleOrderProductUpdatePOList = [
- // ...this.form.generatePurchaseTable,
- // ...this.form.generateProjectTable,
- // ...this.form.generateProduceTable
- // ];
- // if (!saleOrderProductUpdatePOList.length)
- // return this.$message.error('请选择生成数据');
- // if (
- // this.form.generatePurchaseTable.length > 0 &&
- // this.form.generatePurchaseTable.some(
- // (item) => !!item.productionDays == 0 || !item.produceCycle
- // )
- // )
- // return this.$message.error('生产周期和到货时间不能为空');
- // saleOrderProductUpdatePOList = saleOrderProductUpdatePOList.reduce(
- // (acc, curr) => {
- // const found = acc.find(
- // (item) => item.productCode === curr.productCode
- // );
- // if (!found) {
- // acc.push(curr);
- // }
- // return acc;
- // },
- // []
- // );
- // saleOrderProductUpdatePOList.forEach((item) => {
- // //合并生成采购计划
- // let generatePurchaseObj =
- // this.form.generatePurchaseTable.find(
- // (i) => i.productCode === item.productCode
- // ) || {};
- // item.generatePurchase = generatePurchaseObj.generatePurchase || 0;
- // //合并生成生产计划计划
- // let generateProduceObj =
- // this.form.generateProduceTable.find(
- // (i) => i.productCode === item.productCode
- // ) || {};
- // item.generateProduce = generateProduceObj.generateProduce || 0;
- // //合并生成项目数据
- // let generateProjectObj =
- // this.form.generateProjectTable.find(
- // (i) => i.productCode === item.productCode
- // ) || {};
- // item.generateProject = generateProjectObj.generateProject || 0;
- // });
- // let params = {
- // orderId: this.commitData.id,
- // saleOrderProductUpdatePOList
- // };
- // await saleOrderGeneratePlanAPI(params);
- // this.$message.success('操作成功');
- // this.cancel();
- // },
- async handleChange(val) {
- if (val == 1) {
- let ids = this.commitData.productList.map((i) => i.productId);
- try {
- await saleOrderCheckCBomAPI(ids);
- } catch (e) {
- return (this.form.generatePurchase = 0);
- }
- }
- if (
- val == 1 &&
- this.commitData.productList.some((item) => !item.productionDays)
- ) {
- this.$message.warning('生成采购计划生产周期不能为空,请在主数据维护');
- }
- },
- async save() {
- if (this.isAuto) {
- let isHaveProductionDays = true;
- this.commitData.productList.forEach((item) => {
- if (!item.productionDays && this.form.generatePurchase) {
- isHaveProductionDays = false;
- }
- item.generatePurchase = this.form.generatePurchase ? 1 : 0;
- item.generateProduce = this.form.generateProduce ? 1 : 0;
- item.generateProject = this.form.generateProject ? 1 : 0;
- });
- this.selection = this.commitData.productList;
- if (!isHaveProductionDays)
- return this.$message.error(
- '生成采购计划生产周期不能为空,请在主数据维护'
- );
- } else {
- if (!this.selection.length) {
- return this.$message.error('请选择需要生成采购计划的数据');
- }
- if (
- this.selection.some(
- (item) => !!item.productionDays == 0 || !item.produceCycle
- )
- )
- return this.$message.error('生产周期不能为空,请在主数据维护');
- this.selection.forEach((item) => {
- item.generatePurchase = 1;
- });
- }
- let params = {
- orderId: this.commitData.id,
- saleOrderProductUpdatePOList: this.selection
- };
- await saleOrderGeneratePlanAPI(params);
- if (this.isAuto) {
- this.$emit('handleSubmit', this.commitData.id);
- } else {
- this.$message.success('操作成功');
- this.$emit('reload');
- }
- this.cancel();
- },
- cancel() {
- this.autogenerateDialogFlag = false;
- this.form = {
- generatePurchase: 0,
- generateProduce: 0,
- generateProject: 0,
- generatePurchaseTable: [],
- generateProduceTable: [],
- generateProjectTable: []
- };
- this.generatePurchaseList = [];
- this.generateProduceList = [];
- this.generateProjectList = [];
- this.selection = [];
- this.commitData = {};
- }
- }
- };
- </script>
- <style scoped lang="scss"></style>
|