ysy 1 tahun lalu
induk
melakukan
fa3d8ea5ea

+ 577 - 547
src/views/materialPlan/components/plan-edit-dialog.vue

@@ -1,7 +1,20 @@
 <template>
-  <ele-modal :visible.sync="visible" :closed="cancel" :title="`${type == 'add' ? '创建' : '编辑'}采购配料计划`"
-    custom-class="ele-dialog-form" :close-on-click-modal="true" :close-on-press-escape="false" width="80%">
-    <el-form :model="formData" ref="formRef" label-width="120px" class="ele-body" :rules="rules">
+  <ele-modal
+    :visible.sync="visible"
+    :closed="cancel"
+    :title="`${type == 'add' ? '创建' : '编辑'}采购配料计划`"
+    custom-class="ele-dialog-form"
+    :close-on-click-modal="true"
+    :close-on-press-escape="false"
+    width="80%"
+  >
+    <el-form
+      :model="formData"
+      ref="formRef"
+      label-width="120px"
+      class="ele-body"
+      :rules="rules"
+    >
       <el-row :gutter="32">
         <el-col :span="12">
           <el-form-item label="配料计划名称" prop="name">
@@ -14,47 +27,60 @@
             <el-input placeholder="备注" v-model="formData.remark"></el-input>
           </el-form-item>
         </el-col>
-
-
-
-
-
       </el-row>
     </el-form>
 
     <el-form :model="formData" ref="tableForm">
-
-      <ele-pro-table ref="table" :needPage="false" :columns="columns" row-key="id">
-
-
+      <ele-pro-table
+        ref="table"
+        :needPage="false"
+        :columns="columns"
+        row-key="id"
+      >
         <template v-slot:toolbar>
-          <el-button size="small" type="primary" icon="el-icon-plus" class="ele-btn-icon" @click="showAdd">
+          <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="showAdd"
+          >
             添加销售订单
           </el-button>
         </template>
 
-
-
-
         <template v-slot:code="{ row }">
-          <el-input placeholder="请输入" readonly :value="row.code || row.salesOrderCode"></el-input>
+          <el-input
+            placeholder="请输入"
+            readonly
+            :value="row.code || row.salesOrderCode"
+          ></el-input>
         </template>
 
-
-
         <template v-slot:productionPlanId="{ row }">
-          <el-link type="primary" v-if="!row.productionPlanId" :underline="false"
-            @click.native="openVersion(row)">选择</el-link>
+          <el-link
+            type="primary"
+            v-if="!row.productionPlanId"
+            :underline="false"
+            @click.native="openVersion(row)"
+            >选择</el-link
+          >
         </template>
 
-
-
         <template v-slot:action="{ row, $index }">
           <template>
-            <el-link type="primary" :underline="false" @click="categorySelect(row)">
+            <el-link
+              type="primary"
+              :underline="false"
+              @click="categorySelect(row)"
+            >
               添加物料
             </el-link>
-            <el-popconfirm class="ele-action" title="确定要删除此销售订单吗?" @confirm="remove(row, $index)">
+            <el-popconfirm
+              class="ele-action"
+              title="确定要删除此销售订单吗?"
+              @confirm="remove(row, $index)"
+            >
               <template v-slot:reference>
                 <el-link type="danger" :underline="false" icon="el-icon-delete">
                   删除
@@ -64,650 +90,654 @@
           </template>
         </template>
 
-
         <!-- 展开内容 -->
-        <template v-slot:expand="{ row,  $index }">
-          <div style="width:calc(100% - 95px); min-height: 60px; margin-left: 95px;" v-if="row.materialList.length > 0">
-            <ele-pro-table :toolbar="false" toolsTheme="none" ref="table2" :need-page="false"
-              :datasource="row.materialList" :columns="columns2" :key="row.categoryId + '-'+ $index">
-
-
+        <template v-slot:expand="{ row, $index }">
+          <div
+            style="
+              width: calc(100% - 95px);
+              min-height: 60px;
+              margin-left: 95px;
+            "
+            v-if="row.materialList.length > 0"
+          >
+            <ele-pro-table
+              :toolbar="false"
+              toolsTheme="none"
+              ref="table2"
+              :need-page="false"
+              :datasource="row.materialList"
+              :columns="columns2"
+              :key="row.categoryId + '-' + $index"
+            >
               <template v-slot:sort="{ $index }">
                 {{ $index }}
               </template>
 
               <template v-slot:unit="{ row }">
-              {{  row.unit   }}
+                {{ row.unit }}
               </template>
 
-
               <template v-slot:demandQuantity="{ row }">
-                <el-input v-model="row.demandQuantity" placeholder="请输入" @input="(value) =>
-                (row.demandQuantity = value.replace(
-                  /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
-                  '$1$2.$3'
-                ))
-                  "></el-input>
+                <el-input
+                  v-model="row.demandQuantity"
+                  placeholder="请输入"
+                  @input="
+                    (value) =>
+                      (row.demandQuantity = value.replace(
+                        /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
+                        '$1$2.$3'
+                      ))
+                  "
+                ></el-input>
               </template>
 
-
               <template v-slot:purchaseQuantity="{ row }">
-                <el-input v-model="row.purchaseQuantity" placeholder="请输入" @input="(value) =>
-                (row.purchaseQuantity = value.replace(
-                  /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
-                  '$1$2.$3'
-                ))
-                  "></el-input>
+                <el-input
+                  v-model="row.purchaseQuantity"
+                  placeholder="请输入"
+                  @input="
+                    (value) =>
+                      (row.purchaseQuantity = value.replace(
+                        /^(-)*(\d+)\.(\d\d\d\d\d\d).*$/,
+                        '$1$2.$3'
+                      ))
+                  "
+                ></el-input>
               </template>
 
               <template v-slot:deliveryMethod="{ row }">
-                <el-select clearable class="ele-block"  v-model="row.deliveryMethod" placeholder="请选择">
-                  <el-option label="一次性到货" :value="1" @click.native="row.timeList = null" />
-                  <el-option label="分批到货" :value="2" @click.native="handleMethod(row); row.requireDeliveryTime= null" />
+                <el-select
+                  clearable
+                  class="ele-block"
+                  v-model="row.deliveryMethod"
+                  placeholder="请选择"
+                >
+                  <el-option
+                    label="一次性到货"
+                    :value="1"
+                    @click.native="row.timeList = null"
+                  />
+                  <el-option
+                    label="分批到货"
+                    :value="2"
+                    @click.native="
+                      handleMethod(row);
+                      row.requireDeliveryTime = null;
+                    "
+                  />
                 </el-select>
               </template>
 
-              <template v-slot:requireDeliveryTime="{ row }" >
-                <el-date-picker style="width: 100%" clearable v-model="row.requireDeliveryTime" type="date"
-                  v-if="row.deliveryMethod == 1" value-format="yyyy-MM-dd" placeholder="请选择日期">
+              <template v-slot:requireDeliveryTime="{ row }">
+                <el-date-picker
+                  style="width: 100%"
+                  clearable
+                  v-model="row.requireDeliveryTime"
+                  type="date"
+                  v-if="row.deliveryMethod == 1"
+                  value-format="yyyy-MM-dd"
+                  placeholder="请选择日期"
+                >
                 </el-date-picker>
 
-                <el-link type="primary" :underline="false" v-if="row.deliveryMethod == 2"
-                  @click.native="handleMethod(row)">
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  v-if="row.deliveryMethod == 2"
+                  @click.native="handleMethod(row)"
+                >
                   设置分批时间
                 </el-link>
               </template>
 
-
-
               <template v-slot:imgUrl="{ row }">
-                <fileUpload v-model="row.imgUrl" module="main" :showLib="false" :limit="1" />
+                <fileUpload
+                  v-model="row.imgUrl"
+                  module="main"
+                  :showLib="false"
+                  :limit="1"
+                />
               </template>
 
               <template v-slot:files="{ row }">
-                <fileUpload v-model="row.files" module="main" :showLib="false" :limit="1" />
+                <fileUpload
+                  v-model="row.files"
+                  module="main"
+                  :showLib="false"
+                  :limit="1"
+                />
               </template>
 
-
-
-
-
               <template v-slot:action="{ row }">
-                <el-popconfirm class="ele-action" title="确定要删除当前物料吗?" @confirm="remove2(row)">
+                <el-popconfirm
+                  class="ele-action"
+                  title="确定要删除当前物料吗?"
+                  @confirm="remove2(row)"
+                >
                   <template v-slot:reference>
-                    <el-link type="danger" :underline="false" icon="el-icon-delete">
+                    <el-link
+                      type="danger"
+                      :underline="false"
+                      icon="el-icon-delete"
+                    >
                       删除
                     </el-link>
                   </template>
                 </el-popconfirm>
               </template>
-
             </ele-pro-table>
           </div>
-
         </template>
-
-
       </ele-pro-table>
-
     </el-form>
 
     <div slot="footer">
       <el-button @click="cancel">取消</el-button>
       <el-button type="primary" @click="confirm">保存</el-button>
-   
     </div>
 
-
     <saleOrderPop ref="saleOrderRef" @chooseOrder="chooseOrder"></saleOrderPop>
 
-
-
     <ProductModal ref="productRefs" @chooseModal="chooseModal" />
 
-    <ProductionVersion ref="versionRefs" @changeProduct="changeProduct"></ProductionVersion>
+    <ProductionVersion
+      ref="versionRefs"
+      @changeProduct="changeProduct"
+    ></ProductionVersion>
 
     <timeDialog ref="timeDialogRef" @chooseTime="chooseTime"></timeDialog>
-
   </ele-modal>
 </template>
 
 <script>
+  import saleOrderPop from './saleOrderPop.vue';
+  import ProductModal from './ProductModal.vue';
+  import {
+    listBomBySalesOrderIds,
+    listBomBySalesOrderId,
+    save,
+    getById
+  } from '@/api/materialPlan/index';
+  import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
+  import fileUpload from '@/components/upload/fileUpload';
+  import timeDialog from './timeDialog';
+  export default {
+    components: {
+      saleOrderPop,
+      ProductModal,
+      ProductionVersion,
+      fileUpload,
+      timeDialog
+    },
+    data() {
+      return {
+        visible: false,
+        type: 'add',
 
-import saleOrderPop from './saleOrderPop.vue'
-import ProductModal from './ProductModal.vue'
-import { listBomBySalesOrderIds, listBomBySalesOrderId, save, getById } from '@/api/materialPlan/index';
-import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
-import fileUpload from '@/components/upload/fileUpload';
-import timeDialog from './timeDialog'
-export default {
-  components: {
-    saleOrderPop,
-    ProductModal,
-    ProductionVersion,
-    fileUpload,
-    timeDialog
-
-  },
-  data() {
-
-    return {
-      visible: false,
-      type: 'add',
-
-      tableData: [],
-
-      xsId: null,
-
-
-      // 表格列配置
-      columns: [
-        {
-          width: 45,
-          type: 'expand',
-          columnKey: 'materialList',
-          align: 'center',
-          slot: 'expand'
-        },
-
-        {
-          width: 50,
-          label: '序号',
-          type: 'index',
-          align: 'center',
-          slot: 'index'
-        },
-
-        {
-          prop: 'code',
-          label: '销售订单号',
-          slot: 'code',
-          showOverflowTooltip: true,
-          align: 'center',
-          minWidth: 170,
-          sortable: true
-        },
-        {
-          prop: 'customerName',
-          label: '客户名称',
-          align: 'center',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'deliveryNum',
-          label: '客户代号',
-          align: 'center',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'productCode',
-          label: '产品编码',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 140
-        },
-
-        {
-          prop: 'productName',
-          label: '产品名称',
-          align: 'center',
-          minWidth: 120
-        },
+        tableData: [],
 
-        {
-          prop: 'model',
-          label: '型号',
-          align: 'center',
-          minWidth: 120
-        },
+        xsId: null,
 
-        {
-          prop: 'brandNo',
-          label: '牌号',
-          align: 'center'
-        },
+        // 表格列配置
+        columns: [
+          {
+            width: 45,
+            type: 'expand',
+            columnKey: 'materialList',
+            align: 'center',
+            slot: 'expand'
+          },
 
-        {
-          prop: 'deliveryTime',
-          label: '交付日期',
-          align: 'center',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'contractNum',
-          label: '合同数量',
-          align: 'center'
-        },
-        {
-          prop: 'lackNum',
-          label: '欠交数量',
-          align: 'center'
-        },
+          {
+            width: 50,
+            label: '序号',
+            type: 'index',
+            align: 'center',
+            slot: 'index'
+          },
 
+          {
+            prop: 'code',
+            label: '销售订单号',
+            slot: 'code',
+            showOverflowTooltip: true,
+            align: 'center',
+            minWidth: 170,
+            sortable: true
+          },
+          {
+            prop: 'customerName',
+            label: '客户名称',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'deliveryNum',
+            label: '客户代号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'productCode',
+            label: '产品编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
 
-        {
-          prop: 'productionPlanId',
-          label: '工艺路线',
-          slot: 'productionPlanId',
-          align: 'center',
-          minWidth: 110
-        },
+          {
+            prop: 'productName',
+            label: '产品名称',
+            align: 'center',
+            minWidth: 120
+          },
 
+          {
+            prop: 'model',
+            label: '型号',
+            align: 'center',
+            minWidth: 120
+          },
 
+          {
+            prop: 'brandNo',
+            label: '牌号',
+            align: 'center'
+          },
 
-        {
-          columnKey: 'action',
-          label: '操作',
-          width: 150,
-          align: 'center',
-          resizable: false,
-          slot: 'action',
-          showOverflowTooltip: true
-        }
-      ],
+          {
+            prop: 'deliveryTime',
+            label: '交付日期',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'contractNum',
+            label: '合同数量',
+            align: 'center'
+          },
+          {
+            prop: 'lackNum',
+            label: '欠交数量',
+            align: 'center'
+          },
 
-      columns2: [
+          {
+            prop: 'productionPlanId',
+            label: '工艺路线',
+            slot: 'productionPlanId',
+            align: 'center',
+            minWidth: 110
+          },
 
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 150,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
+          }
+        ],
 
-        {
-          width: 50,
-          label: '序号',
-          prop: 'sort',
-          slot: 'sort',
-          align: 'center',
-        },
+        columns2: [
+          {
+            width: 50,
+            label: '序号',
+            prop: 'sort',
+            slot: 'sort',
+            align: 'center'
+          },
 
-        {
-          label: '物料名称',
-          prop: 'name',
-          align: 'center',
-        },
+          {
+            label: '物料名称',
+            prop: 'name',
+            align: 'center'
+          },
 
-        {
-          label: '物料编码',
-          prop: 'code',
-          align: 'center',
-        },
-        {
-          label: '牌号',
-          prop: 'brandNum',
-          align: 'center',
-        },
-        {
+          {
+            label: '物料编码',
+            prop: 'code',
+            align: 'center'
+          },
+          {
+            label: '牌号',
+            prop: 'brandNum',
+            align: 'center'
+          },
+          {
             prop: 'specification',
             label: '规格',
             align: 'center',
             showOverflowTooltip: true,
             minWidth: 110
-        },
-        {
-          label: '型号',
-          prop: 'modelType',
-          align: 'center',
-        },
-
-        {
-          prop: 'inventoryQuantity',
-          label: '库存',
-          showOverflowTooltip: true,
-
-        },
-
-        {
-          prop: 'unit',
-          label: '计量单位',
-          showOverflowTooltip: true,
-          action: 'unit',
-          slot: 'unit',
-        },
-
-        {
-          label: '需求数量',
-          slot: 'demandQuantity',
-          action: 'demandQuantity',
-          align: 'center',
-        },
-
-        {
-          label: '采购数量',
-          slot: 'purchaseQuantity',
-          action: 'purchaseQuantity',
-          align: 'center',
-        },
-
-        {
-          label: '到货方式',
-          slot: 'deliveryMethod',
-          action: 'deliveryMethod',
-          align: 'center',
-          minWidth: 140
-        },
-
-        {
-          label: '要求到货时间',
-          slot: 'requireDeliveryTime',
-          action: 'requireDeliveryTime',
-          align: 'center',
-          minWidth: 140
-        },
+          },
+          {
+            label: '型号',
+            prop: 'modelType',
+            align: 'center'
+          },
 
+          {
+            prop: 'inventoryQuantity',
+            label: '库存',
+            showOverflowTooltip: true
+          },
 
+          {
+            prop: 'unit',
+            label: '计量单位',
+            showOverflowTooltip: true,
+            action: 'unit',
+            slot: 'unit'
+          },
 
-        {
-          label: '图纸',
-          slot: 'imgUrl',
-          action: ' imgUrl',
-          align: 'center',
-          minWidth: 140
-        },
+          {
+            label: '需求数量',
+            slot: 'demandQuantity',
+            action: 'demandQuantity',
+            align: 'center'
+          },
 
+          {
+            label: '采购数量',
+            slot: 'purchaseQuantity',
+            action: 'purchaseQuantity',
+            align: 'center'
+          },
 
-        {
-          label: '附件',
-          slot: 'files',
-          action: ' files',
-          align: 'center',
-          minWidth: 140
-        },
+          {
+            label: '到货方式',
+            slot: 'deliveryMethod',
+            action: 'deliveryMethod',
+            align: 'center',
+            minWidth: 140
+          },
 
+          {
+            label: '要求到货时间',
+            slot: 'requireDeliveryTime',
+            action: 'requireDeliveryTime',
+            align: 'center',
+            minWidth: 140
+          },
 
+          {
+            label: '图纸',
+            slot: 'imgUrl',
+            action: ' imgUrl',
+            align: 'center',
+            minWidth: 140
+          },
 
-        {
-          columnKey: 'action',
-          label: '操作',
-          width: 70,
-          align: 'center',
-          resizable: false,
-          slot: 'action',
-          showOverflowTooltip: true
-        }
+          {
+            label: '附件',
+            slot: 'files',
+            action: ' files',
+            align: 'center',
+            minWidth: 140
+          },
 
-      ],
-      rules: {
-        name: [
           {
-            required: true,
-            message: '请输入配料计划名称',
-            trigger: ['blur', 'change']
+            columnKey: 'action',
+            label: '操作',
+            width: 70,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true
           }
         ],
-
-
-      },
-      formData: {
-        name: '',
-        remark: '',
-        detailRemoveIds: [],
-        materialRemoveIds: []
-
-      },
-
-
-    };
-  },
-  methods: {
-    async open(type, row) {
-      this.type = type;
-      this.visible = true;
-      if (row) {
-        this.getDetail(row.id)
-      } else {
-        this.$nextTick(() => {
-          this.$refs.table.setData([]);
-        })
-      }
-      
-    },
-
-
-    getDetail(id) {
-      getById(id).then(res => {
-        this.$set(this.formData, 'name', res.name)
-        this.$set(this.formData, 'remark', res.remark)
-        this.formData['id'] = res.id
-        this.$refs.table.setData([...res.salesOrderList]);
-
-        this.$nextTick(() => {
-          this.$refs.table.toggleRowExpansionAll()
-          this.$forceUpdate()
-        })
-
-      })
-    },
-
-    confirm() {
-      this.$refs.formRef.validate(async (value) => {
-        if (value) {
-
-          let _arr = this.$refs.table.getData() ?? []
-
-          if (_arr.length == 0) {
-            this.$message.info('请添加销售订单');
-            return false
-          }
-          let _arr2 = []
-
-          _arr2 = _arr.map(m => {
-            if (Object.prototype.hasOwnProperty.call(m, "salesOrderId") && m.salesOrderId) {
-            } else {
-              m.salesOrderId = m.id
-              m.salesOrderCode = m.code
-              delete m.id
-              delete m.code
-            }
-
-            return {
-              ...m,
+        rules: {
+          name: [
+            {
+              required: true,
+              message: '请输入配料计划名称',
+              trigger: ['blur', 'change']
             }
-          })
-
-          this.formData['type'] = 1
-          this.formData['salesOrderList'] = _arr2
-          await save(this.formData);
-          this.$message.success('保存成功!');
-          this.$emit('success');
-          this.cancel();
+          ]
+        },
+        formData: {
+          name: '',
+          remark: '',
+          detailRemoveIds: [],
+          materialRemoveIds: []
         }
-      });
+      };
     },
-    cancel() {
-      this.visible = false;
-      this.formData = {};
-      this.formData.detailRemoveIds = []
-      this.formData.materialRemoveIds = []
-      this.$refs.table.setData([]);
-      this.$refs.formRef.resetFields();
-    },
-
-    datasource({ }) {
-      return []
-    },
-
-    reload() {
-      this.$refs.table.reload();
-    },
-
-    showAdd() {
-      this.tableData = this.$refs.table.getData();
-
-      this.$refs.saleOrderRef.open(this.tableData)
-    },
-
-    chooseOrder(list) {
-      let salesOrderIds = []
-      list.map((m => {
-        salesOrderIds.push(m.id)
-        return {
-          ...m,
-        }
-      }))
-
-
-
-      if (salesOrderIds.length > 0) {
-        listBomBySalesOrderIds({ salesOrderIds: salesOrderIds }).then((res) => {
-  
-       res.forEach(m => {
-          if(m.materialList.length > 0) {
-            m.materialList.forEach(p => {
-              p.detailId = m.id
-            })
-          }
-        })
-
-
-
-        
-
-          this.$refs.table.setData([...this.tableData, ...res]);
-
+    methods: {
+      async open(type, row) {
+        this.type = type;
+        this.visible = true;
+        if (row) {
+          this.getDetail(row.id);
+        } else {
           this.$nextTick(() => {
-          this.$refs.table.toggleRowExpansionAll()
-          this.$forceUpdate()
-        })
-
-        })
-      }
-    },
-
-    remove(row, index) {
-      this.formData.detailRemoveIds.push(row.id)
-      let _arr = this.$refs.table.getData() || [];
-      _arr.splice(index, 1);
-      this.$refs.table.setData([..._arr]);
-    },
-
-    categorySelect(row) {
-      this.$refs.productRefs.open(row.materialList, row, this.type)
-    },
-
-    chooseModal(data, current) {
-      data.map((m => {
-        m.detailId = current.id
-
-        return {
-          ...m,
+            this.$refs.table.setData([]);
+          });
         }
-      }))
+      },
 
-      let tableList = []
-      tableList = this.$refs.table.getData()
+      getDetail(id) {
+        getById(id).then((res) => {
+          this.$set(this.formData, 'name', res.name);
+          this.$set(this.formData, 'remark', res.remark);
+          this.formData['id'] = res.id;
+          this.$refs.table.setData([...res.salesOrderList]);
 
-      tableList.forEach(e => {
-        if (e.id == current.id) {
+          this.$nextTick(() => {
+            this.$refs.table.toggleRowExpansionAll();
+            this.$forceUpdate();
+          });
+        });
+      },
 
-          if (e.materialList.length == 0) {
-            e.materialList = data
+      confirm() {
+        this.$refs.formRef.validate(async (value) => {
+          if (value) {
+            let _arr = this.$refs.table.getData() ?? [];
 
-          } else {
-            e.materialList = [...e.materialList, ...data]
+            if (_arr.length == 0) {
+              this.$message.info('请添加销售订单');
+              return false;
+            }
+            let _arr2 = [];
+
+            _arr2 = _arr.map((m) => {
+              if (
+                Object.prototype.hasOwnProperty.call(m, 'salesOrderId') &&
+                m.salesOrderId
+              ) {
+              } else {
+                m.salesOrderId = m.id;
+                m.salesOrderCode = m.code;
+                delete m.id;
+                delete m.code;
+              }
 
+              return {
+                ...m
+              };
+            });
+
+            this.formData['type'] = 1;
+            this.formData['salesOrderList'] = _arr2;
+            await save(this.formData);
+            this.$message.success('保存成功!');
+            this.$emit('success');
+            this.cancel();
           }
+        });
+      },
+      cancel() {
+        this.visible = false;
+        this.formData = {};
+        this.formData.detailRemoveIds = [];
+        this.formData.materialRemoveIds = [];
+        this.$refs.table.setData([]);
+        this.$refs.formRef.resetFields();
+      },
 
+      datasource({}) {
+        return [];
+      },
 
-        }
-      })
+      reload() {
+        this.$refs.table.reload();
+      },
 
+      showAdd() {
+        this.tableData = this.$refs.table.getData();
 
-      console.log(tableList);
-      this.$refs.table.setData([...tableList]);
-      this.$forceUpdate()
-    },
+        this.$refs.saleOrderRef.open(this.tableData);
+      },
 
-    remove2(row) {
-      const data = this.$refs.table.getData() ?? [];
-      this.formData.materialRemoveIds.push(row.categoryId)
-      data.forEach((e) => {
-        if (row.detailId == e.id) {
-          e.materialList = e.materialList.filter((d) => d.categoryId !== row.categoryId);
+      chooseOrder(list) {
+        let salesOrderIds = [];
+        list.map((m) => {
+          salesOrderIds.push(m.id);
+          return {
+            ...m
+          };
+        });
+
+        if (salesOrderIds.length > 0) {
+          listBomBySalesOrderIds({ salesOrderIds: salesOrderIds }).then(
+            (res) => {
+              res.forEach((m) => {
+                if (m.materialList.length > 0) {
+                  m.materialList.forEach((p) => {
+                    p.detailId = m.id;
+                  });
+                }
+              });
+
+              this.$refs.table.setData([...this.tableData, ...res]);
+
+              this.$nextTick(() => {
+                this.$refs.table.toggleRowExpansionAll();
+                this.$forceUpdate();
+              });
+            }
+          );
         }
-      })
-
-      this.$refs.table.setData([...data])
-      this.$forceUpdate()
-    },
-
-
-
-
-
-
-
-    openVersion(row) {
-      this.xsId = row.id
-      this.$refs.versionRefs.open();
-    },
-    changeProduct(data) {
-      let param = {
-        salesOrderIds: [this.xsId],
-        produceRoutingId: data.id
-      }
-
-      listBomBySalesOrderId(param).then((res) => {
+      },
 
+      remove(row, index) {
+        this.formData.detailRemoveIds.push(row.id);
+        let _arr = this.$refs.table.getData() || [];
+        _arr.splice(index, 1);
+        this.$refs.table.setData([..._arr]);
+      },
 
-        let tableList = []
-        tableList = this.$refs.table.getData()
+      categorySelect(row) {
+        this.$refs.productRefs.open(row.materialList, row, this.type);
+      },
 
-        tableList.forEach(e => {
-          if (e.id == this.xsId) {
+      chooseModal(data, current) {
+        data.map((m) => {
+          m.detailId = current.id;
 
-            res.map(m => {
-              m.detailId = this.xsId
-              return {
-                ...m,
-              }
-            })
+          return {
+            ...m
+          };
+        });
 
-            e.materialList = res
+        let tableList = [];
+        tableList = this.$refs.table.getData();
 
-            this.$nextTick(() => {
-              this.$refs.table.setData([...tableList]);
-              this.$refs.table.toggleRowExpansionAll()
-            })
+        tableList.forEach((e) => {
+          if (e.id == current.id) {
+            if (e.materialList.length == 0) {
+              e.materialList = data;
+            } else {
+              e.materialList = [...e.materialList, ...data];
+            }
           }
-        })
+        });
 
-      })
-
-    },
-
-
-    handleMethod(row) {
-      this.$refs.timeDialogRef.open(row)
-    },
-    chooseTime(current, timeList) {
+        console.log(tableList);
+        this.$refs.table.setData([...tableList]);
+        this.$forceUpdate();
+      },
 
+      remove2(row) {
+        const data = this.$refs.table.getData() ?? [];
+        this.formData.materialRemoveIds.push(row.categoryId);
+        data.forEach((e) => {
+          if (row.detailId == e.id) {
+            e.materialList = e.materialList.filter(
+              (d) => d.categoryId !== row.categoryId
+            );
+          }
+        });
 
-      let tableList = []
-      tableList = this.$refs.table.getData()
+        this.$refs.table.setData([...data]);
+        this.$forceUpdate();
+      },
 
-      tableList.forEach(e => {
-        if (e.id == current.detailId) {
-          e.materialList.forEach(m => {
-            if (m.categoryId == current.categoryId) {
-              m.timeList = timeList || []
+      openVersion(row) {
+        this.xsId = row.id;
+        this.$refs.versionRefs.open();
+      },
+      changeProduct(data) {
+        let param = {
+          salesOrderIds: [this.xsId],
+          produceRoutingId: data.id
+        };
+
+        listBomBySalesOrderId(param).then((res) => {
+          let tableList = [];
+          tableList = this.$refs.table.getData();
+
+          tableList.forEach((e) => {
+            if (e.id == this.xsId) {
+              res.map((m) => {
+                m.detailId = this.xsId;
+                return {
+                  ...m
+                };
+              });
+
+              e.materialList = res;
+
+              this.$nextTick(() => {
+                this.$refs.table.setData([...tableList]);
+                this.$refs.table.toggleRowExpansionAll();
+              });
             }
-          })
-
-
-        }
-      })
+          });
+        });
+      },
 
-      
+      handleMethod(row) {
+        this.$refs.timeDialogRef.open(row);
+      },
+      chooseTime(current, timeList) {
+        let tableList = [];
+        tableList = this.$refs.table.getData();
+
+        tableList.forEach((e) => {
+          if (e.id == current.detailId) {
+            e.materialList.forEach((m) => {
+              if (m.categoryId == current.categoryId) {
+                m.timeList = timeList || [];
+              }
+            });
+          }
+        });
 
-      this.$refs.table.setData([...tableList]);
-      this.$forceUpdate()
+        this.$refs.table.setData([...tableList]);
+        this.$forceUpdate();
+      }
     }
-  }
-};
+  };
 </script>
 
-
 <style lang="scss" scoped>
-:deep(.el-table__expanded-cell) {
-
-  padding-bottom: 30px !important;
-  border-bottom: 12px solid #CCFFCC !important;
-}
+  :deep(.el-table__expanded-cell) {
+    padding-bottom: 30px !important;
+    border-bottom: 12px solid #ccffcc !important;
+  }
 </style>

+ 5 - 4
src/views/saleOrder/index.vue

@@ -8,7 +8,7 @@
         :activeName="activeName"
       >
       </order-search>
-      <el-tabs v-model="activeName" type="card">
+      <el-tabs v-model="activeName" type="card" >
         <el-tab-pane label="待排产" name="first"></el-tab-pane>
         <el-tab-pane label="已排产" name="second"></el-tab-pane>
       </el-tabs>
@@ -72,7 +72,7 @@
             </el-link>
 
             <el-popconfirm
-              v-if="row.orderSource != 1"
+              v-if="row.orderSource != 1 "
               class="ele-action"
               title="确定要删除此销售订单吗?"
               @confirm="remove(row)"
@@ -107,6 +107,7 @@
   } from '@/api/saleOrder';
   import dictMixins from '@/mixins/dictMixins';
   import { debounce } from 'lodash';
+import { Alert } from 'element-ui';
   export default {
     name: 'saleOrder',
     mixins: [dictMixins],
@@ -346,11 +347,10 @@
             privateColumn.push({
               columnKey: 'action',
               label: '操作',
-              width: 180,
+              width: 130,
               align: 'center',
               resizable: false,
               slot: 'action',
-              showOverflowTooltip: true,
               fixed: 'right'
             });
           } else {
@@ -372,6 +372,7 @@
         });
       },
 
+
       /* 表格数据源 */
       async datasource({ page, limit, where, order }) {
         if (this.activeName == 'first') {