yijing 1 anno fa
parent
commit
4da2890449

+ 14 - 21
src/views/cuttingPlan/components/plan-edit-dialog.vue

@@ -175,7 +175,7 @@
                   clearable
                   v-model="row.requireDeliveryTime"
                   type="date"
-                  v-if="row.deliveryMethod == 1"
+                  v-show="row.deliveryMethod == 1"
                   value-format="yyyy-MM-dd"
                   placeholder="请选择日期"
                 >
@@ -184,7 +184,7 @@
                 <el-link
                   type="primary"
                   :underline="false"
-                  v-if="row.deliveryMethod == 2"
+                  v-show="row.deliveryMethod == 2"
                   @click.native="handleMethod(row)"
                 >
                   设置分批时间
@@ -517,7 +517,7 @@
       async open(type, row) {
         this.type = type;
         this.visible = true;
-
+        this.formData.orderType = 1;
         if (row) {
           this.getDetail(row.id);
         } else {
@@ -550,28 +550,21 @@
               this.$message.info('请添加销售订单');
               return false;
             }
-            let _arr2 = [];
-
-            _arr2 = _arr.map((m) => {
+            const salesOrderList = data.map((item) => {
               if (
-                Object.prototype.hasOwnProperty.call(m, 'salesOrderId') &&
-                m.salesOrderId
+                !Object.prototype.hasOwnProperty.call(item, 'salesOrderId') ||
+                !item.salesOrderId
               ) {
-              } else {
-                m.salesOrderId = m.id;
-                m.salesOrderCode = m.code;
-                delete m.id;
-                delete m.code;
+                item.salesOrderId = item.id;
+                item.salesOrderCode = item.code;
+                delete item.id;
+                delete item.code;
               }
-
-              return {
-                ...m
-              };
+              return item;
             });
-
-            this.formData['type'] = 1;
-            this.formData['baitingType'] = 1;
-            this.formData['salesOrderList'] = _arr2;
+            this.formData.type = 1;
+            this.formData.baitingType = 1;
+            this.formData.salesOrderList = salesOrderList;
             await save(this.formData);
             this.$message.success('保存成功!');
             this.$emit('success');

+ 1 - 1
src/views/cuttingPlan/components/producePlan.vue

@@ -517,7 +517,7 @@
     methods: {
       async open(type, row) {
         this.type = type;
-
+        this.formData.orderType = 2;
         this.visible = true;
 
         if (row) {

+ 9 - 11
src/views/cuttingPlan/index.vue

@@ -80,13 +80,12 @@
             删除
           </el-link>
         </template>
-       
       </ele-pro-table>
     </el-card>
     <detail ref="detailRef"></detail>
 
     <planEditDialog ref="planEditDialogRef" @success="reload" />
-    <producePlan ref="produceRef"></producePlan @success="reload">
+    <producePlan ref="produceRef" @success="reload"></producePlan>
   </div>
 </template>
 
@@ -95,20 +94,19 @@
 
   import planEditDialog from './components/plan-edit-dialog.vue';
 
-  import producePlan from './components/producePlan.vue'
+  import producePlan from './components/producePlan.vue';
 
   import detail from '@/views/materialPlan/components/detail.vue';
 
-  import { getList,del,submit } from '@/api/cuttingPlan/index.js';
-  
+  import { getList, del, submit } from '@/api/cuttingPlan/index.js';
+
   export default {
     components: {
       cuttingPlanSearch,
 
       detail,
       planEditDialog,
-      producePlan,
-
+      producePlan
     },
 
     data() {
@@ -253,9 +251,9 @@
         }
       },
       handleEdit(type, row) {
-        if(row.orderType == 1) {
+        if (row.orderType == 1) {
           this.$refs.planEditDialogRef.open(type, row);
-        } else  if(row.orderType == 2) {
+        } else if (row.orderType == 2) {
           this.$refs.produceRef.open(type, row);
         }
       },
@@ -266,7 +264,7 @@
           this.reload();
         });
       },
-     
+
       todo(row) {
         submit({ businessId: row.id }).then((res) => {
           if (res) {
@@ -274,7 +272,7 @@
             this.reload();
           }
         });
-      },
+      }
     }
   };
 </script>

+ 17 - 21
src/views/materialPlan/components/plan-edit-dialog.vue

@@ -19,7 +19,6 @@
       <el-row :gutter="24">
         <el-col :span="8">
           <el-form-item label="需求类型" prop="demandType">
-          
             <el-select
               v-model="formData.demandType"
               placeholder="请选择"
@@ -194,7 +193,7 @@
                   clearable
                   v-model="row.requireDeliveryTime"
                   type="date"
-                  v-if="row.deliveryMethod == 1"
+                  v-show="row.deliveryMethod == 1"
                   value-format="yyyy-MM-dd"
                   placeholder="请选择日期"
                 >
@@ -203,7 +202,7 @@
                 <el-link
                   type="primary"
                   :underline="false"
-                  v-if="row.deliveryMethod == 2"
+                  v-show="row.deliveryMethod == 2"
                   @click.native="handleMethod(row)"
                 >
                   设置分批时间
@@ -534,25 +533,21 @@
           detailRemoveIds: [],
           materialRemoveIds: [],
           orderType: 1
-
         },
         demandTypeList: [
-      
-            {
-              dictCode: '1',
-              dictValue: '生产性物资采购'
-            },
-            {
-              dictCode: '6',
-              dictValue: '外协自供料采购'
-            },
-            {
-              dictCode: '7',
-              dictValue: '外协客供料采购'
-            }
-       
+          {
+            dictCode: '1',
+            dictValue: '生产性物资采购'
+          },
+          {
+            dictCode: '6',
+            dictValue: '外协自供料采购'
+          },
+          {
+            dictCode: '7',
+            dictValue: '外协客供料采购'
+          }
         ]
-   
       };
     },
     created() {},
@@ -560,6 +555,7 @@
     methods: {
       async open(type, row) {
         this.type = type;
+        this.formData.orderType = 1;
         this.typeList();
         this.visible = true;
 
@@ -582,14 +578,14 @@
           //     this.demandTypeList.push(f);
           //   }
           // });
- 
+
           // this.$forceUpdate();
         });
       },
 
       getDetail(id) {
         getById(id).then((res) => {
-          this.$set(this.formData, 'demandType',  res.demandType);
+          this.$set(this.formData, 'demandType', res.demandType);
           this.$set(this.formData, 'name', res.name);
           this.$set(this.formData, 'remark', res.remark);
           this.formData['id'] = res.id;

File diff suppressed because it is too large
+ 554 - 554
src/views/materialPlan/components/producePlan.vue


+ 14 - 2
src/views/materialPlan/components/saleOrder-search.vue

@@ -1,7 +1,7 @@
 <!-- 搜索表单 -->
 <template>
   <el-form
-    label-width="120px"
+    label-width="100px"
     class="ele-form-search"
     @keyup.enter.native="search"
     @submit.native.prevent
@@ -18,7 +18,7 @@
         </el-form-item>
       </el-col>
 
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
         <el-form-item label="订单类型:">
           <DictSelection
             dictName="订单类型"
@@ -27,6 +27,18 @@
           >
           </DictSelection>
         </el-form-item>
+      </el-col> -->
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="采购类型:">
+          <el-select
+            v-model="where.purchaseType"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option label="未采购" value="1"></el-option>
+            <el-option label="已采购" value="2"></el-option>
+          </el-select>
+        </el-form-item>
       </el-col>
 
       <el-col v-bind="styleResponsive ? { sm: 4 } : { span: 4 }">

+ 14 - 5
src/views/materialPlan/components/saleOrderPop.vue

@@ -49,14 +49,23 @@
             type: 'selection',
             width: 45,
             align: 'center',
-            selectable: (row, index) => {
-              return !this.tableData.some(
-                (it) => it.id == row.id || it.salesOrderId == row.id
-              );
-            },
+            // selectable: (row, index) => {
+            //   return !this.tableData.some(
+            //     (it) => it.id == row.id || it.salesOrderId == row.id
+            //   );
+            // },
             reserveSelection: true,
             fixed: 'left'
           },
+          {
+            prop: 'purchaseType',
+            label: '采购类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 120,
+            slot: 'code',
+            sortable: true
+          },
           {
             prop: 'code',
             label: '销售订单号',

+ 34 - 19
src/views/materialPlan/index.vue

@@ -18,17 +18,13 @@
         cache-key="`materialPlanTable`"
       >
         <template v-slot:toolbar>
-
-
           <el-dropdown trigger="click" @command="handleClick">
             <el-link type="primary" icon="el-icon-plus">创建采购计划</el-link>
             <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item   command="1">来源销售计划</el-dropdown-item>
-              <el-dropdown-item  command="2">来源生产计划</el-dropdown-item>
+              <el-dropdown-item command="1">来源销售计划</el-dropdown-item>
+              <el-dropdown-item command="2">来源生产计划</el-dropdown-item>
             </el-dropdown-menu>
           </el-dropdown>
-
-
         </template>
 
         <template v-slot:status="{ row }">
@@ -38,12 +34,17 @@
         </template>
 
         <template v-slot:orderType="{ row }">
-          <span >
-            {{ row.orderType == 1 ? '销售计划' : row.orderType ==  2  ?'生产计划' : '' }}
+          <span>
+            {{
+              row.orderType == 1
+                ? '销售计划'
+                : row.orderType == 2
+                ? '生产计划'
+                : ''
+            }}
           </span>
         </template>
 
-
         <template v-slot:approvalStatus="{ row }">
           <el-link
             type="primary"
@@ -84,7 +85,7 @@
       </ele-pro-table>
     </el-card>
     <planEditDialog ref="planEditDialogRef" @success="reload" />
-    <producePlan ref="produceRef"></producePlan @success="reload">
+    <producePlan ref="produceRef" @success="reload"></producePlan>
 
     <detail ref="detailRef"></detail>
   </div>
@@ -156,6 +157,24 @@
             label: '计划编号',
             align: 'center'
           },
+          {
+            prop: 'planStr',
+            label: '生产计划编码',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'orderStr',
+            label: '销售订单号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'serialNoStr',
+            label: '客户代号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
 
           {
             columnKey: 'status',
@@ -229,12 +248,11 @@
         });
       },
       handleEdit(type, row) {
-        if(row.orderType == 1) {
+        if (row.orderType == 1) {
           this.$refs.planEditDialogRef.open(type, row);
-        } else  if(row.orderType == 2) {
+        } else if (row.orderType == 2) {
           this.$refs.produceRef.open(type, row);
         }
-        
       },
       handleDel({ id }) {
         this.$confirm('确认删除当前数据!', '提示').then(async () => {
@@ -245,11 +263,9 @@
       },
 
       handleClick(tab) {
-        if(tab == 1) {
+        if (tab == 1) {
           this.$refs.planEditDialogRef.open('add');
-        
-        }
-        else if(tab == 2){
+        } else if (tab == 2) {
           this.$refs.produceRef.open('add');
         }
       },
@@ -267,14 +283,13 @@
         this.$refs.searchRef.reset();
       },
 
-    
-
       /* 刷新表格 */
       reload(where = {}) {
         if (where.statusList) {
           console.log(where.statusList);
           where.statusList = where.statusList.split(',');
         }
+        console.log(44444);
         this.$nextTick(() => {
           this.$refs.table.reload({ page: 1, where });
         });

+ 757 - 749
src/views/saleOrder/salesToProduction.vue

@@ -2,12 +2,12 @@
   <div class="ele-body">
     <el-card shadow="never">
       <div class="body-title">
-        <div class="title-left">{{type == 'edit' ? '计划修改' : '销售订单转生产计划'}}</div>
+        <div class="title-left">{{
+          type == 'edit' ? '计划修改' : '销售订单转生产计划'
+        }}</div>
         <div class="title-right">
           <el-button @click="cancel">取消</el-button>
-          <el-button type="primary" @click="toSubmit" :loading="loading">
-            提交计划
-          </el-button>
+          <el-button type="primary"> 生成生产计划 </el-button>
         </div>
       </div>
       <el-form
@@ -32,51 +32,91 @@
 
           <el-col v-bind="styleResponsive ? { lg: 4, md: 8 } : { span: 4 }">
             <el-form-item label="加工方式:" prop="produceType">
-              <el-select v-model="form.produceType" style="width: 100%"   @change="changeProduceType" >
-                  <el-option
-                    v-for="item of producedList"
-                    :key="item.code"
-                    :label="item.name"
-                    :value="item.code"
-                  ></el-option>
-                </el-select>
+              <el-select
+                v-model="form.produceType"
+                style="width: 100%"
+                @change="changeProduceType"
+              >
+                <el-option
+                  v-for="item of producedList"
+                  :key="item.code"
+                  :label="item.name"
+                  :value="item.code"
+                ></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
 
-          <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }" v-if="clientEnvironmentId != 4">
+          <el-col
+            v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }"
+            v-if="clientEnvironmentId != 4"
+          >
             <el-form-item label="BOM版本:" prop="bomCategoryId">
-              <el-select v-model="form.bomCategoryId" style="width: 100%"  @change="changeBomId" >
-                  <el-option
-                    v-for="item of bomVersionList"
-                    :key="item.id"
-                    :label="item.name + '(V' + item.versions + '.0)'"
-                    :value="item.id"
-                  ></el-option>
-                </el-select>
+              <el-select
+                v-model="form.bomCategoryId"
+                style="width: 100%"
+                @change="changeBomId"
+              >
+                <el-option
+                  v-for="item of bomVersionList"
+                  :key="item.id"
+                  :label="item.name + '(V' + item.versions + '.0)'"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col v-bind="styleResponsive ? { lg: 4, md: 8 } : { span: 4 }">
+            <el-form-item label="余量系数:" prop="marginCoefficient">
+              <el-select
+                v-model="form.marginCoefficient"
+                filterable
+                allow-create
+                @change="itemChange"
+              >
+                <el-option
+                  v-for="(item, index) in marginList"
+                  :key="index"
+                  :label="item.name"
+                  :value="item.value"
+                />
+              </el-select>
             </el-form-item>
           </el-col>
 
-          <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }" v-if="clientEnvironmentId != 4">
+          <!-- <el-col
+            v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }"
+            v-if="clientEnvironmentId != 4"
+          >
             <el-form-item label="工艺路线:" prop="produceRoutingId">
-              <!--  @click.native="openVersion"   -->
-              <el-select v-model="form.produceRoutingId" style="width: 100%" @change="changeRoute">
-                  <el-option
-                    v-for="item of routingList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                  ></el-option>
-                </el-select>
+              <el-select
+                v-model="form.produceRoutingId"
+                style="width: 100%"
+                @change="changeRoute"
+              >
+                <el-option
+                  v-for="item of routingList"
+                  :key="item.id"
+                  :label="item.name"
+                  :value="item.id"
+                ></el-option>
+              </el-select>
             </el-form-item>
-          </el-col>
+          </el-col> -->
 
-          <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }" v-if="clientEnvironmentId == 4">
+          <el-col
+            v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }"
+            v-if="clientEnvironmentId == 4"
+          >
             <el-form-item label="工艺路线:" prop="produceRoutingId">
-              <el-input v-model="form.produceRoutingName" style="width: 100%"  readonly ></el-input>
+              <el-input
+                v-model="form.produceRoutingName"
+                style="width: 100%"
+                readonly
+              ></el-input>
             </el-form-item>
           </el-col>
 
-
           <!-- <el-col v-bind="styleResponsive ? { lg: 3, md: 6 } : { span: 3 }">
             <el-form-item label="使用改型:" prop="modification">
               <el-checkbox
@@ -86,31 +126,8 @@
               ></el-checkbox>
             </el-form-item>
           </el-col> -->
-
-
-
-
         </el-row>
         <el-row :gutter="24">
-
-          <el-col v-bind="styleResponsive ? { lg: 4, md: 8 } : { span: 4 }">
-            <el-form-item label="余量系数:" prop="marginCoefficient">
-              <el-select
-                v-model="form.marginCoefficient"
-                filterable
-                allow-create
-                @change="itemChange"
-              >
-                <el-option
-                  v-for="(item, index) in marginList"
-                  :key="index"
-                  :label="item.name"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-
           <el-col v-bind="styleResponsive ? { lg: 4, md: 8 } : { span: 4 }">
             <el-form-item label="批次号:" prop="batchNo">
               <el-input
@@ -119,50 +136,46 @@
               ></el-input>
             </el-form-item>
           </el-col>
-
-
-          <el-col v-bind="styleResponsive ?  { lg: 5, md: 10 } : { span: 5 }">
+          <!-- 
+          <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
             <el-form-item label="计划开始日期:" prop="startTime">
               <el-date-picker
-                  style="width: 100%"
-                  v-model="form.startTime"
-                  :pickerOptions="{
-                    disabledDate: (time) =>
-                      time.getTime() <
-                      new Date(new Date().setHours(0, 0, 0, 0)).getTime()
-                  }"
-                  type="date"
-                  placeholder="选择日期"
-                  value-format="yyyy-MM-dd"
-                >
-                </el-date-picker>
-
+                style="width: 100%"
+                v-model="form.startTime"
+                :pickerOptions="{
+                  disabledDate: (time) =>
+                    time.getTime() <
+                    new Date(new Date().setHours(0, 0, 0, 0)).getTime()
+                }"
+                type="date"
+                placeholder="选择日期"
+                value-format="yyyy-MM-dd"
+              >
+              </el-date-picker>
             </el-form-item>
-          </el-col>
-
+          </el-col> -->
 
-          <el-col v-bind="styleResponsive ?  { lg: 5, md: 10 } : { span: 5 }">
+          <!-- <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
             <el-form-item label="计划结束日期:" prop="endTime">
               <el-date-picker
-                  style="width: 100%"
-                  v-model="form.endTime"
-                  :pickerOptions="{
-                    disabledDate: (time) =>
-                      time.getTime() <
-                      new Date(new Date().setHours(0, 0, 0, 0)).getTime()
-                  }"
-                  type="date"
-                  placeholder="选择日期"
-                  value-format="yyyy-MM-dd"
-                >
-                </el-date-picker>
-
+                style="width: 100%"
+                v-model="form.endTime"
+                :pickerOptions="{
+                  disabledDate: (time) =>
+                    time.getTime() <
+                    new Date(new Date().setHours(0, 0, 0, 0)).getTime()
+                }"
+                type="date"
+                placeholder="选择日期"
+                value-format="yyyy-MM-dd"
+              >
+              </el-date-picker>
             </el-form-item>
-          </el-col>
+          </el-col> -->
 
           <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5 }">
             <el-form-item label="所属工厂:" prop="factoriesId">
-              <el-select v-model="form.factoriesId" style="width: 100%" >
+              <el-select v-model="form.factoriesId" style="width: 100%">
                 <el-option
                   v-for="item of factoryList"
                   :key="item.id"
@@ -172,16 +185,6 @@
               </el-select>
             </el-form-item>
           </el-col>
-
-
-
-
-
-
-        </el-row>
-
-        <el-row>
-
         </el-row>
 
         <el-row :gutter="24" class="row-intro">
@@ -210,16 +213,20 @@
             <el-form-item label="型号:">{{ form.model }}</el-form-item>
           </el-col>
 
-          <el-col v-bind="styleResponsive ?  { lg: 4, md: 12 } : { span: 3 }">
+          <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 3 }">
             <el-form-item label="规格:">{{ form.specification }}</el-form-item>
           </el-col>
-<!--
+          <!--
           <el-col v-bind="styleResponsive ? { lg: 3, md: 12 } : { span: 3 }">
             <el-form-item label="库存数量:">{{
               form.stockCountBase
             }}</el-form-item>
           </el-col> -->
         </el-row>
+
+        <div class="add-product" @click="addEquipment" v-if="type != 'edit'">
+          <i class="el-icon-circle-plus-outline"></i>
+        </div>
         <el-table :data="form.salesOrders" border>
           <el-table-column label="序号" align="center" width="60">
             <template slot-scope="scope">
@@ -249,10 +256,10 @@
             :label="'订单数量' + (clientEnvironmentId == '4' ? '(方)' : '')"
             align="center"
             prop="contractNum"
-               width="120"
+            width="120"
           >
-          <template slot-scope="scope">
-              {{ scope.row.contractNum }} {{scope.row.measuringUnit }}
+            <template slot-scope="scope">
+              {{ scope.row.contractNum }} {{ scope.row.measuringUnit }}
             </template>
           </el-table-column>
           <el-table-column
@@ -485,21 +492,16 @@
                     disabledDate: (time) =>
                       time.getTime() <
                       new Date(new Date().setHours(0, 0, 0, 0)).getTime()
-
                   }"
                   type="date"
                   placeholder="选择日期"
                   value-format="yyyy-MM-dd"
                 >
                 </el-date-picker>
-
               </el-form-item>
             </template>
           </el-table-column>
 
-
-
-
           <el-table-column label="客户名称" align="center" prop="customerName">
           </el-table-column>
           <el-table-column label="业务员" align="center" prop="salesman">
@@ -521,43 +523,50 @@
           >
             <template slot-scope="{ row, $index }">
               <div style="display: flex">
-              <el-input
-                v-if="$index == 0"
-                v-model="row.priority"
-                type="number"
-                size="mini"
-                :min="0"
-                :max="10"
-                @change="priorityChange(row)"
-                   style="width: 80px"
-              ></el-input>
-              <el-popover
-                v-if="$index == 0"
-                placement="right"
-                width="200"
-                trigger="hover"
-                content="数值越大优先级越高(0-3普通, 4-6优先, 7-10紧急)"
-              >
-                <div class="sort-wrap" slot="reference">
-                  <i class="el-icon-caret-top" @click="sortTop(row)"></i>
-                  <i class="el-icon-caret-bottom" @click="sortBottom(row)"></i>
-                </div>
-              </el-popover>
-            </div>
+                <el-input
+                  v-if="$index == 0"
+                  v-model="row.priority"
+                  type="number"
+                  size="mini"
+                  :min="0"
+                  :max="10"
+                  @change="priorityChange(row)"
+                  style="width: 80px"
+                ></el-input>
+                <el-popover
+                  v-if="$index == 0"
+                  placement="right"
+                  width="200"
+                  trigger="hover"
+                  content="数值越大优先级越高(0-3普通, 4-6优先, 7-10紧急)"
+                >
+                  <div class="sort-wrap" slot="reference">
+                    <i class="el-icon-caret-top" @click="sortTop(row)"></i>
+                    <i
+                      class="el-icon-caret-bottom"
+                      @click="sortBottom(row)"
+                    ></i>
+                  </div>
+                </el-popover>
+              </div>
             </template>
           </el-table-column>
 
           <el-table-column label="操作" align="center" width="70" fixed="right">
             <template slot-scope="scope">
-              <el-button type="text" @click="handleDeleteItem(scope.$index)" v-if="type != 'edit'"
+              <el-button
+                type="text"
+                @click="handleDeleteItem(scope.$index)"
+                v-if="type != 'edit'"
                 >删除</el-button
               >
             </template>
           </el-table-column>
         </el-table>
-        <div class="add-product" @click="addEquipment" v-if="type != 'edit'">
-          <i class="el-icon-circle-plus-outline"></i>
-        </div>
+
+        <el-row>
+          <div class="title-left">生产计划列表</div>
+        </el-row>
         <el-row :gutter="24">
           <el-col v-bind="styleResponsive ? { lg: 24, md: 24 } : { span: 24 }">
             <el-form-item label="计划备注:">
@@ -570,6 +579,12 @@
             </el-form-item>
           </el-col>
         </el-row>
+
+        <el-row :gutter="24" style="text-align: right">
+          <el-button type="primary" @click="toSubmit" :loading="loading">
+            提交生产计划
+          </el-button>
+        </el-row>
       </el-form>
       <AdditionalOrder
         ref="additionalRefs"
@@ -591,669 +606,662 @@
   </div>
 </template>
 <script>
-import AdditionalOrder from './components/AdditionalOrder.vue';
-import PlanSubmit from './components/plan-submit.vue';
-import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
-import {
-  productionToPlan,
-  saveSaleToPlan,
-  updateSaleToPlan,
-  releaseSave,
-  getInventory,
-  getUpdateInfoById,
-  bomRoutingList,
-  bomListByPlan,
-  getFactoryList,
-} from '@/api/saleOrder';
-
-import { getByCode } from '@/api/system/dictionary-data';
-
-import dictMixins from '@/mixins/dictMixins';
-import { deepClone } from '@/utils/index';
-import { getRouteTabKey, removePageTab } from '@/utils/page-tab-util';
-import { getCode } from '@/api/codeManagement';
-import dayjs from 'dayjs';
-import { debounce } from 'lodash';
-export default {
-  mixins: [dictMixins],
-  components: {
-    AdditionalOrder,
-    ProductionVersion,
-    PlanSubmit
-  },
-  data() {
-    return {
-      type: this.$route.query.type,
-      weightList: [
-        { code: 1, name: 'A' },
-        { code: 2, name: 'B' },
-        { code: 3, name: 'C' }
-      ],
-      isSlotting: [
-        { code: 1, name: '是' },
-        { code: 2, name: '否' }
-      ], //是否开槽
-
-
-      producedList: [
-      { code: 2, name: '加工(MBOM)' },
-      { code: 3, name: '装配(ABOM)' }
-      ],
-
-
-      form: {
-        planType: 1,
-        produceRoutingId: '',
-
-        stockCountBase: '',
-        salesOrders: [],
-        produceRoutingName: '',
-        marginCoefficient: '1.0',
-        batchNo: null,
-        produceType: 2,
-        bomCategoryId: '',
-        factoriesId: '',
-      },
-
-      marginList: [],
-
-      bomVersionList: [],
-      routingList: [],
-      factoryList: [],
-
-      // 表单验证规则
-      rules: {
-
-        produceRoutingId: [
-          { required: true, message: '请选择工艺路线', trigger: 'blur' }
-        ],
-
-        produceType: [
-        { required: true, message: '请选择加工方式', trigger: 'blur' }
-        ],
-        bomCategoryId: [
-          { required: true, message: '请选择BOM版本', trigger: 'blur' }
+  import AdditionalOrder from './components/AdditionalOrder.vue';
+  import PlanSubmit from './components/plan-submit.vue';
+  import ProductionVersion from '@/components/CreatePlan/ProductionVersion2.vue';
+  import {
+    productionToPlan,
+    saveSaleToPlan,
+    updateSaleToPlan,
+    releaseSave,
+    getInventory,
+    getUpdateInfoById,
+    bomRoutingList,
+    bomListByPlan,
+    getFactoryList
+  } from '@/api/saleOrder';
+
+  import { getByCode } from '@/api/system/dictionary-data';
+
+  import dictMixins from '@/mixins/dictMixins';
+  import { deepClone } from '@/utils/index';
+  import { getRouteTabKey, removePageTab } from '@/utils/page-tab-util';
+  import { getCode } from '@/api/codeManagement';
+  import dayjs from 'dayjs';
+  import { debounce } from 'lodash';
+  export default {
+    mixins: [dictMixins],
+    components: {
+      AdditionalOrder,
+      ProductionVersion,
+      PlanSubmit
+    },
+    data() {
+      return {
+        type: this.$route.query.type,
+        weightList: [
+          { code: 1, name: 'A' },
+          { code: 2, name: 'B' },
+          { code: 3, name: 'C' }
         ],
-        factoriesId: [
-          { required: true, message: '请选择所属工厂', trigger: 'blur' }
+        isSlotting: [
+          { code: 1, name: '是' },
+          { code: 2, name: '否' }
+        ], //是否开槽
+
+        producedList: [
+          { code: 1, name: 'PBOM()' },
+          { code: 2, name: '加工(MBOM)' },
+          { code: 3, name: '装配(ABOM)' }
         ],
-      },
-      // selection: [],
-      loading: false
-    };
-  },
-  computed: {
-    clientEnvironmentId() {
-      return this.$store.state.user.info.clientEnvironmentId;
-    },
-    // 是否开启响应式布局
-    styleResponsive() {
-      return this.$store.state.theme.styleResponsive;
-    }
-  },
-  created() {
-
-    this.requestDict('按单按库');
-    this.requestDict('订单类型');
-    this.requestDict('交付要求');
-    this.getByCodeFn();
-    this.getFactoryList();
-    if (this.type == 'edit') {
-      this.getPlanInfo(this.$route.query.id);
-
-    } else {
-      this.getSaleInfo();
 
-    }
-  },
-  methods: {
-    async getFactoryList(){
-      this.factoryList = await getFactoryList();
+        form: {
+          planType: 1,
+          produceRoutingId: '',
+
+          stockCountBase: '',
+          salesOrders: [],
+          produceRoutingName: '',
+          marginCoefficient: '1.0',
+          batchNo: null,
+          produceType: 1,
+          bomCategoryId: '',
+          factoriesId: ''
+        },
+
+        marginList: [],
+
+        bomVersionList: [],
+        routingList: [],
+        factoryList: [],
+
+        // 表单验证规则
+        rules: {
+          produceRoutingId: [
+            { required: true, message: '请选择工艺路线', trigger: 'blur' }
+          ],
+
+          produceType: [
+            { required: true, message: '请选择加工方式', trigger: 'blur' }
+          ],
+          bomCategoryId: [
+            { required: true, message: '请选择BOM版本', trigger: 'blur' }
+          ],
+          factoriesId: [
+            { required: true, message: '请选择所属工厂', trigger: 'blur' }
+          ]
+        },
+        // selection: [],
+        loading: false
+      };
     },
-    async getPlanInfo(id) {
-      const data = await getUpdateInfoById(id);
-      this.form = data;
-
-      if(this.clientEnvironmentId != 4) {
-        this.bomListVersion()
-        this.getPlanRouting()
+    computed: {
+      clientEnvironmentId() {
+        return this.$store.state.user.info.clientEnvironmentId;
+      },
+      // 是否开启响应式布局
+      styleResponsive() {
+        return this.$store.state.theme.styleResponsive;
       }
-
-
-
-    },
-    async _getInventory() {
-      const res = await getInventory(this.form.productCode, this.form.planType);
-
-      this.form.stockCountBase = res;
-    },
-
-    getByCodeFn() {
-      getByCode('margin_code').then((res) => {
-        let _arr = [];
-        res.data.map((item) => {
-          const key = Object.keys(item)[0];
-          const value = item[key];
-
-          _arr.push({ name: key, value: value });
-        });
-        this.marginList = _arr;
-      });
-    },
-
-
-    getPlanRouting() {
-      bomRoutingList(this.form.bomCategoryId).then((res) => {
-        this.routingList = res || []
-      })
     },
-
-    bomListVersion() {
-      let param = {
-        bomType:  this.form.produceType,
-        categoryId: this.form.salesOrders[0].categoryId
+    created() {
+      this.requestDict('按单按库');
+      this.requestDict('订单类型');
+      this.requestDict('交付要求');
+      this.getByCodeFn();
+      this.getFactoryList();
+      if (this.type == 'edit') {
+        this.getPlanInfo(this.$route.query.id);
+      } else {
+        this.getSaleInfo();
       }
-      bomListByPlan(param).then(res => {
-        this.bomVersionList = res || []
-      })
+      this.bomListVersion();
     },
+    methods: {
+      async getFactoryList() {
+        this.factoryList = await getFactoryList();
+      },
+      async getPlanInfo(id) {
+        const data = await getUpdateInfoById(id);
+        this.form = data;
 
+        if (this.clientEnvironmentId != 4) {
+          this.getPlanRouting();
+        }
+      },
+      async _getInventory() {
+        const res = await getInventory(
+          this.form.productCode,
+          this.form.planType
+        );
 
-    changeProduceType() {
-      if(this.clientEnvironmentId == 4) {
-        return false
-      }
-      this.form.bomCategoryId = ''
-      this.form['bomCategoryName'] = ''
-      this.form['bomCategoryVersions'] = ''
-
+        this.form.stockCountBase = res;
+      },
 
-      this.bomVersionList  = []
+      getByCodeFn() {
+        getByCode('margin_code').then((res) => {
+          let _arr = [];
+          res.data.map((item) => {
+            const key = Object.keys(item)[0];
+            const value = item[key];
 
-      this.routingList  = []
-       this.form.produceRoutingId = ''
-       this.form.produceRoutingName = ''
-        this.form.produceVersionName = ''
-        this.bomListVersion()
+            _arr.push({ name: key, value: value });
+          });
+          this.marginList = _arr;
+        });
+      },
 
-    },
+      getPlanRouting() {
+        bomRoutingList(this.form.bomCategoryId).then((res) => {
+          this.routingList = res || [];
+        });
+      },
 
-    changeBomId() {
-      this.routingList  = []
-      this.form.produceRoutingId = ''
-       this.form.produceRoutingName = ''
-        this.form.produceVersionName = ''
+      bomListVersion() {
+        let param = {
+          bomType: this.form.produceType,
+          categoryId: this.form.salesOrders[0].categoryId
+        };
+        bomListByPlan(param).then((res) => {
+          this.bomVersionList = res || [];
+        });
+      },
 
-        this.bomVersionList.forEach((f) => {
-        if(f.id == this.form.bomCategoryId) {
-          this.$set(this.form, 'bomCategoryName', f.name);
-          this.$set(this.form, 'bomCategoryVersions', f.versions);
+      changeProduceType() {
+        if (this.clientEnvironmentId == 4) {
+          return false;
         }
+        this.form.bomCategoryId = '';
+        this.form['bomCategoryName'] = '';
+        this.form['bomCategoryVersions'] = '';
 
-      })
+        this.bomVersionList = [];
 
-       this.getPlanRouting()
-    },
+        this.routingList = [];
+        this.form.produceRoutingId = '';
+        this.form.produceRoutingName = '';
+        this.form.produceVersionName = '';
+        this.bomListVersion();
+      },
 
+      changeBomId() {
+        this.routingList = [];
+        this.form.produceRoutingId = '';
+        this.form.produceRoutingName = '';
+        this.form.produceVersionName = '';
 
+        this.bomVersionList.forEach((f) => {
+          if (f.id == this.form.bomCategoryId) {
+            this.$set(this.form, 'bomCategoryName', f.name);
+            this.$set(this.form, 'bomCategoryVersions', f.versions);
+          }
+        });
 
-    changeRoute() {
-      this.routingList.forEach((f) => {
-        if(f.id == this.form.produceRoutingId) {
-          this.$set(this.form, 'produceRoutingName', f.name);
-          this.$set(this.form, 'produceVersionName', f.version);
-        }
+        this.getPlanRouting();
+      },
 
-      })
-    },
+      changeRoute() {
+        this.routingList.forEach((f) => {
+          if (f.id == this.form.produceRoutingId) {
+            this.$set(this.form, 'produceRoutingName', f.name);
+            this.$set(this.form, 'produceVersionName', f.version);
+          }
+        });
+      },
 
-    getSaleInfo() {
-      let params = JSON.parse(this.$route.query.selection);
-      productionToPlan(params).then((res) => {
-        console.log(res);
-        this.form = deepClone(res);
-        if(!this.form.produceType) {
-          this.form.produceType = 2;
-          this.bomListVersion()
-         }
-        this.form.produceRoutingName =
-          res.produceRoutingName || this.$route.query.produceRoutingName;
-        this.form.produceRoutingId =
-          res.produceRoutingId || this.$route.query.produceRoutingId;
-        this.form.factoriesId =
-          res.factoriesId || this.$route.query.factoriesId;
-        console.log(this.form.factoriesId)
-        if (this.clientEnvironmentId == '4') {
-          if (this.form.salesOrders[0].productName.includes('板材')) {
-            this.changeProduct({
-              id: '1856970794952372226',
-              name: '板材',
-              produceVersionName: '板材'
-            });
-          } else {
-            this.changeProduct({
-              id: '1857313733642596353',
-              name: '砌块',
-              produceVersionName: '砌块'
-            });
+      getSaleInfo() {
+        let params = JSON.parse(this.$route.query.selection);
+        productionToPlan(params).then((res) => {
+          console.log(res);
+          this.form = deepClone(res);
+          if (!this.form.produceType) {
+            this.form.produceType = 1;
+            this.bomListVersion();
           }
-        }
-        this.form.salesOrders.map((item, index) => {
+          this.form.produceRoutingName =
+            res.produceRoutingName || this.$route.query.produceRoutingName;
+          this.form.produceRoutingId =
+            res.produceRoutingId || this.$route.query.produceRoutingId;
+          this.form.factoriesId =
+            res.factoriesId || this.$route.query.factoriesId;
+          console.log(this.form.factoriesId);
           if (this.clientEnvironmentId == '4') {
-            this.tableHandleKeyUp(item, '', item.lackNum, 'sum');
+            if (this.form.salesOrders[0].productName.includes('板材')) {
+              this.changeProduct({
+                id: '1856970794952372226',
+                name: '板材',
+                produceVersionName: '板材'
+              });
+            } else {
+              this.changeProduct({
+                id: '1857313733642596353',
+                name: '砌块',
+                produceVersionName: '砌块'
+              });
+            }
+          }
+          this.form.salesOrders.map((item, index) => {
+            if (this.clientEnvironmentId == '4') {
+              this.tableHandleKeyUp(item, '', item.lackNum, 'sum');
+            } else {
+              item.planProductNum = item.lackNum;
+              item.requiredFormingNum = item.lackNum;
+            }
+            item.slottingType = item.slottingType && item.slottingType + '';
+            item.priority = index + 1;
+
+            item.reqMoldTime = dayjs(
+              new Date(item.deliveryTime).getTime() - 3600 * 1000 * 24 * 10
+            ).format('YYYY-MM-DD');
+          });
+          if (this.form.salesOrders.every((itm) => itm.orderType == 2)) {
+            this.form.planType = 2;
+          } else if (this.form.salesOrders.every((itm) => itm.orderType == 1)) {
+            this.form.planType = 1;
           } else {
-            item.planProductNum = item.lackNum;
-            item.requiredFormingNum = item.lackNum;
+            this.form.planType = 3;
           }
-          item.slottingType = item.slottingType && item.slottingType + '';
-          item.priority = index + 1;
+          this._getInventory();
+        });
+        this.$forceUpdate();
+      },
 
-          item.reqMoldTime = dayjs(
-            new Date(item.deliveryTime).getTime() - 3600 * 1000 * 24 * 10
-          ).format('YYYY-MM-DD');
+      itemChange() {
+        this.form.salesOrders.map((item, index) => {
+          this.$set(
+            item,
+            'requiredFormingNum',
+            item.planProductNum * (this.form.marginCoefficient || 1)
+          );
         });
-        if (this.form.salesOrders.every((itm) => itm.orderType == 2)) {
-          this.form.planType = 2;
-        } else if (this.form.salesOrders.every((itm) => itm.orderType == 1)) {
-          this.form.planType = 1;
-        } else {
-          this.form.planType = 3;
-        }
-        this._getInventory();
-      });
-      this.$forceUpdate();
-    },
+      },
 
-    itemChange() {
-      this.form.salesOrders.map((item, index) => {
-        this.$set(
-          item,
-          'requiredFormingNum',
-          item.planProductNum * (this.form.marginCoefficient || 1)
-        );
-      });
-    },
+      toInt(planProductNum) {
+        return planProductNum * (this.form.marginCoefficient || 1);
+      },
 
-    toInt(planProductNum) {
-      return planProductNum * (this.form.marginCoefficient || 1);
-    },
+      cancel() {
+        const key = getRouteTabKey();
+        this.$router.go(-1);
+        removePageTab({ key });
+      },
+      toSubmit() {
+        this.$refs.form.validate((valid) => {
+          if (valid) {
+            this.mapList();
+            this.$refs.submitRefs.open();
+          }
+        });
+      },
+      // 对比日期,计算要求生产重量
+      mapList() {
+        var _sumOrderWeight = 0;
+        var requiredFormingNum = 0;
+        var productNum = 0;
+        this.form.salesOrders.map((item, index) => {
+          requiredFormingNum =
+            Number(requiredFormingNum) + Number(item.requiredFormingNum);
+
+          if (
+            this.form.weightUnit == 'G' ||
+            this.form.weightUnit == 'g' ||
+            this.form.weightUnit == '克'
+          ) {
+            this.form.newWeightUnit = 'kg';
+            _sumOrderWeight =
+              (this.form.sumOrderWeight *
+                Number(this.form.marginCoefficient || 1)) /
+              1000;
+          } else {
+            this.form.newWeightUnit = this.form.weightUnit;
+            _sumOrderWeight =
+              this.form.sumOrderWeight *
+              Number(this.form.marginCoefficient || 1);
+          }
 
-    cancel() {
-      const key = getRouteTabKey();
-      this.$router.go(-1);
-      removePageTab({ key });
-    },
-    toSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          this.mapList();
-          this.$refs.submitRefs.open();
-        }
-      });
-    },
-    // 对比日期,计算要求生产重量
-    mapList() {
-      var _sumOrderWeight = 0;
-      var requiredFormingNum = 0;
-      var productNum = 0;
-      this.form.salesOrders.map((item, index) => {
-        requiredFormingNum =
-          Number(requiredFormingNum) + Number(item.requiredFormingNum);
-
-        if (
-          this.form.weightUnit == 'G' ||
-          this.form.weightUnit == 'g' ||
-          this.form.weightUnit == '克'
-        ) {
-          this.form.newWeightUnit = 'kg';
-          _sumOrderWeight =
-            (this.form.sumOrderWeight *
-              Number(this.form.marginCoefficient || 1)) /
-            1000;
-        } else {
-          this.form.newWeightUnit = this.form.weightUnit;
-          _sumOrderWeight =
-            this.form.sumOrderWeight * Number(this.form.marginCoefficient || 1);
+          productNum += Number(item.planProductNum);
+        });
+        this.form.productNum = productNum;
+        this.form.productUnitWeight =
+          this.form.salesOrders[0]?.productUnitWeight;
+        this.form.newSumOrderWeight = _sumOrderWeight.toFixed(2);
+        this.form.requiredFormingNum = requiredFormingNum;
+        const collection = deepClone(this.form.salesOrders);
+        const sortedCollection = collection.sort(
+          (a, b) => new Date(b.reqMoldTime) - new Date(a.reqMoldTime)
+        );
+        let latestData = {};
+        for (let i = 0; i < sortedCollection.length; i++) {
+          const data = sortedCollection[i];
+          if (
+            !latestData.reqMoldTime ||
+            new Date(data.reqMoldTime) >= new Date(latestData.reqMoldTime)
+          ) {
+            latestData = data;
+          }
         }
+        this.form.reqMoldTime = latestData.reqMoldTime;
+      },
 
-        productNum += Number(item.planProductNum);
-      });
-      this.form.productNum = productNum;
-      this.form.productUnitWeight = this.form.salesOrders[0]?.productUnitWeight;
-      this.form.newSumOrderWeight = _sumOrderWeight.toFixed(2);
-      this.form.requiredFormingNum = requiredFormingNum;
-      const collection = deepClone(this.form.salesOrders);
-      const sortedCollection = collection.sort(
-        (a, b) => new Date(b.reqMoldTime) - new Date(a.reqMoldTime)
-      );
-      let latestData = {};
-      for (let i = 0; i < sortedCollection.length; i++) {
-        const data = sortedCollection[i];
-        if (
-          !latestData.reqMoldTime ||
-          new Date(data.reqMoldTime) >= new Date(latestData.reqMoldTime)
-        ) {
-          latestData = data;
+      sortTop(row) {
+        row.priority = Number(row.priority) + 1;
+        this.priorityChange(row);
+      },
+      sortBottom(row) {
+        if (row.priority <= 1) {
+          return;
         }
-      }
-      this.form.reqMoldTime = latestData.reqMoldTime;
-    },
-
-    sortTop(row) {
-      row.priority = Number(row.priority) + 1;
-      this.priorityChange(row);
-    },
-    sortBottom(row) {
-      if (row.priority <= 1) {
-        return;
-      }
-      row.priority = Number(row.priority) - 1;
-      this.priorityChange(row);
-    },
+        row.priority = Number(row.priority) - 1;
+        this.priorityChange(row);
+      },
 
-    priorityChange(row) {
-      if (row.priority > 10) {
-        row.priority = 10; // 如果大于 10,则设置为 10
-      } else if (row.priority < 0) {
-        row.priority = 0; // 如果小于 0,则设置为 0
-      }
+      priorityChange(row) {
+        if (row.priority > 10) {
+          row.priority = 10; // 如果大于 10,则设置为 10
+        } else if (row.priority < 0) {
+          row.priority = 0; // 如果小于 0,则设置为 0
+        }
 
-      this.priorityFn(row);
-    },
+        this.priorityFn(row);
+      },
 
-    priorityFn: debounce(function (row) {}, 800),
+      priorityFn: debounce(function (row) {}, 800),
 
-    // 删除产品
-    handleDeleteItem(index) {
-      this.form.salesOrders.splice(index, 1);
-    },
-    addEquipment() {
-      this.$refs.additionalRefs.open(this.form.planType);
-    },
-    openVersion() {
-      this.$refs.versionRefs.open();
-    },
-    changeProduct(data) {
-      this.$set(this.form, 'produceRoutingName', data.name);
-      this.$set(this.form, 'produceRoutingId', data.id);
-      this.$set(this.form, 'produceVersionName', data.produceVersionName);
-    },
-    // 表格:模数、数量(方)、块数输入框 输入事件
-    tableHandleKeyUp(row, index, e, name) {
-      if (row.specification && this.clientEnvironmentId == '4') {
-        let modelArr = row.specification.split('*');
-        let modelLong = modelArr[0]; // model规格长度
-        let modeWide = modelArr[1]; // model规格宽度
-        let modeHight = modelArr[2].substr(0, modelArr[2].indexOf('cm')); // model规格高度
-        modeHight = Number(modeHight);
-        if (name === 'moCount') {
-          // 模数
-          row.moCount = e;
-          // 计算块数的公式:
-          // (一模6米长度 / model规格长度) * (一模1.2米宽度 / model规格宽度) = 每一模的块数
-          // 每一模的块数*模数moCount = 总块数
-          if (row.productName.includes('板材')) {
-            row.blockCount =
-              Math.floor(600 / modelLong) *
-              Math.floor(120 / modeHight) *
-              Math.floor(60 / modeWide) *
-              row.moCount;
-          } else if (row.productName.includes('砌块')) {
-            let modelLongFixed = (600 / modelLong).toFixed(2);
-            modelLongFixed = modelLongFixed.substring(
-              0,
-              modelLongFixed.length - 1
-            );
-            let modeWideFixed = (120 / modeWide).toFixed(2);
-            modeWideFixed = modeWideFixed.substring(
-              0,
-              modeWideFixed.length - 1
-            );
-            let modeHightFixed = (60 / modeHight).toFixed(2);
-            modeHightFixed = modeHightFixed.substring(
-              0,
-              modeHightFixed.length - 1
+      // 删除产品
+      handleDeleteItem(index) {
+        this.form.salesOrders.splice(index, 1);
+      },
+      addEquipment() {
+        this.$refs.additionalRefs.open(this.form.planType);
+      },
+      openVersion() {
+        this.$refs.versionRefs.open();
+      },
+      changeProduct(data) {
+        this.$set(this.form, 'produceRoutingName', data.name);
+        this.$set(this.form, 'produceRoutingId', data.id);
+        this.$set(this.form, 'produceVersionName', data.produceVersionName);
+      },
+      // 表格:模数、数量(方)、块数输入框 输入事件
+      tableHandleKeyUp(row, index, e, name) {
+        if (row.specification && this.clientEnvironmentId == '4') {
+          let modelArr = row.specification.split('*');
+          let modelLong = modelArr[0]; // model规格长度
+          let modeWide = modelArr[1]; // model规格宽度
+          let modeHight = modelArr[2].substr(0, modelArr[2].indexOf('cm')); // model规格高度
+          modeHight = Number(modeHight);
+          if (name === 'moCount') {
+            // 模数
+            row.moCount = e;
+            // 计算块数的公式:
+            // (一模6米长度 / model规格长度) * (一模1.2米宽度 / model规格宽度) = 每一模的块数
+            // 每一模的块数*模数moCount = 总块数
+            if (row.productName.includes('板材')) {
+              row.blockCount =
+                Math.floor(600 / modelLong) *
+                Math.floor(120 / modeHight) *
+                Math.floor(60 / modeWide) *
+                row.moCount;
+            } else if (row.productName.includes('砌块')) {
+              let modelLongFixed = (600 / modelLong).toFixed(2);
+              modelLongFixed = modelLongFixed.substring(
+                0,
+                modelLongFixed.length - 1
+              );
+              let modeWideFixed = (120 / modeWide).toFixed(2);
+              modeWideFixed = modeWideFixed.substring(
+                0,
+                modeWideFixed.length - 1
+              );
+              let modeHightFixed = (60 / modeHight).toFixed(2);
+              modeHightFixed = modeHightFixed.substring(
+                0,
+                modeHightFixed.length - 1
+              );
+              row.blockCount =
+                Math.floor(modelLongFixed * modeWideFixed * modeHightFixed) *
+                row.moCount;
+            }
+
+            row.planProductNum =
+              Nu((modelLong * modeWide * modeHight) / 1000000).toFixed(5) *
+              row.blockCount;
+          } else if (name === 'sum') {
+            //方数
+            row.planProductNum = e;
+
+            row.blockCount = Math.floor(
+              e / ((modelLong * modeWide * modeHight) / 1000000)
             );
-            row.blockCount =
-              Math.floor(modelLongFixed * modeWideFixed * modeHightFixed) *
-              row.moCount;
+            if (row.productName.includes('板材')) {
+              row.moCount = Math.ceil(
+                row.blockCount /
+                  (Math.floor(600 / modelLong) *
+                    Math.floor(120 / modeHight) *
+                    Math.floor(60 / modeWide))
+              );
+            } else if (row.productName.includes('砌块')) {
+              row.moCount = Math.ceil(
+                row.blockCount /
+                  Math.floor(
+                    (600 / modelLong) * (120 / modeHight) * (60 / modeWide)
+                  )
+              );
+            }
+          } else if (name === 'blockCount') {
+            //块数
+            row.blockCount = e;
+
+            if (row.productName.includes('板材')) {
+              row.moCount = Math.ceil(
+                row.blockCount /
+                  (Math.floor(600 / modelLong) *
+                    Math.floor(120 / modeHight) *
+                    Math.floor(60 / modeWide))
+              );
+            } else if (row.productName.includes('砌块')) {
+              row.moCount = Math.ceil(
+                row.blockCount /
+                  Math.floor(
+                    (600 / modelLong) * (120 / modeHight) * (60 / modeWide)
+                  )
+              );
+            }
+
+            row.planProductNum =
+              (Number(e) * modelLong * modeWide * modeHight) / 1000000;
           }
+        }
 
-          row.planProductNum =
-            Nu((modelLong * modeWide * modeHight) / 1000000).toFixed(5) *
-            row.blockCount;
-        } else if (name === 'sum') {
-          //方数
-          row.planProductNum = e;
-
-          row.blockCount = Math.floor(
-            e / ((modelLong * modeWide * modeHight) / 1000000)
-          );
-          if (row.productName.includes('板材')) {
-            row.moCount = Math.ceil(
-              row.blockCount /
-                (Math.floor(600 / modelLong) *
-                  Math.floor(120 / modeHight) *
-                  Math.floor(60 / modeWide))
-            );
-          } else if (row.productName.includes('砌块')) {
-            row.moCount = Math.ceil(
-              row.blockCount /
-                Math.floor(
-                  (600 / modelLong) * (120 / modeHight) * (60 / modeWide)
-                )
-            );
-          }
-        } else if (name === 'blockCount') {
-          //块数
-          row.blockCount = e;
-
-          if (row.productName.includes('板材')) {
-            row.moCount = Math.ceil(
-              row.blockCount /
-                (Math.floor(600 / modelLong) *
-                  Math.floor(120 / modeHight) *
-                  Math.floor(60 / modeWide))
-            );
-          } else if (row.productName.includes('砌块')) {
-            row.moCount = Math.ceil(
-              row.blockCount /
-                Math.floor(
-                  (600 / modelLong) * (120 / modeHight) * (60 / modeWide)
-                )
-            );
+        row.requiredFormingNum = Number(
+          row.planProductNum * (this.form.marginCoefficient || 1)
+        ).toFixed(5);
+      },
+      confirmChoose(list) {
+        // 取出在弹窗中选中并且不在表格中的数据
+        const result = list.filter(
+          (i) => this.form.salesOrders.findIndex((p) => p.id === i.id) === -1
+        );
+        // 取出在表格中并且不在弹窗中选中的数据 即取消选中的数据
+        const del = this.form.salesOrders.filter(
+          (i) => list.findIndex((p) => p.id === i.id) === -1
+        );
+        for (let i = this.form.salesOrders.length - 1; i >= 0; i--) {
+          for (let j in del) {
+            if (this.form.salesOrders[i].id === del[j].id) {
+              this.form.salesOrders.splice(i, 1);
+            }
           }
-
-          row.planProductNum =
-            (Number(e) * modelLong * modeWide * modeHight) / 1000000;
         }
-      }
+        let priority =
+          this.form.salesOrders[this.form.salesOrders.length - 1]?.priority ||
+          0;
+        this.form.salesOrders = this.form.salesOrders.concat(
+          result.map((item, index) => {
+            item.priority = ++priority;
 
-      row.requiredFormingNum =Number(row.planProductNum *  (this.form.marginCoefficient || 1)).toFixed(5);
+            item.planProductNum = item.lackNum;
+            item.requiredFormingNum = item.lackNum;
+            item.reqMoldTime = dayjs(
+              new Date(item.deliveryTime).getTime() - 3600 * 1000 * 24 * 10
+            ).format('YYYY-MM-DD');
+            return item;
+          })
+        );
+        this.changeData();
+      },
+      changeData() {
+        var planProductNum = 0;
+        var productWeight = 0;
 
-    },
-    confirmChoose(list) {
-      // 取出在弹窗中选中并且不在表格中的数据
-      const result = list.filter(
-        (i) => this.form.salesOrders.findIndex((p) => p.id === i.id) === -1
-      );
-      // 取出在表格中并且不在弹窗中选中的数据 即取消选中的数据
-      const del = this.form.salesOrders.filter(
-        (i) => list.findIndex((p) => p.id === i.id) === -1
-      );
-      for (let i = this.form.salesOrders.length - 1; i >= 0; i--) {
-        for (let j in del) {
-          if (this.form.salesOrders[i].id === del[j].id) {
-            this.form.salesOrders.splice(i, 1);
-          }
-        }
-      }
-      let priority =
-        this.form.salesOrders[this.form.salesOrders.length - 1]?.priority || 0;
-      this.form.salesOrders = this.form.salesOrders.concat(
-        result.map((item, index) => {
-          item.priority = ++priority;
-
-          item.planProductNum = item.lackNum;
-          item.requiredFormingNum = item.lackNum;
-          item.reqMoldTime = dayjs(
-            new Date(item.deliveryTime).getTime() - 3600 * 1000 * 24 * 10
-          ).format('YYYY-MM-DD');
-          return item;
-        })
-      );
-      this.changeData();
-    },
-    changeData() {
-      var planProductNum = 0;
-      var productWeight = 0;
-
-      this.form.salesOrders.map((item, index) => {
-        item.priority = index + 1;
-        planProductNum = planProductNum + item.requiredFormingNum;
-        productWeight = productWeight + Number(item.productSumWeight);
-      });
-      this.$set(this.form, 'codeNum', this.form.salesOrders.length);
-      this.$set(this.form, 'contractNum', planProductNum);
-      this.$set(this.form, 'sumOrderWeight', productWeight.toFixed(2));
-    },
+        this.form.salesOrders.map((item, index) => {
+          item.priority = index + 1;
+          planProductNum = planProductNum + item.requiredFormingNum;
+          productWeight = productWeight + Number(item.productSumWeight);
+        });
+        this.$set(this.form, 'codeNum', this.form.salesOrders.length);
+        this.$set(this.form, 'contractNum', planProductNum);
+        this.$set(this.form, 'sumOrderWeight', productWeight.toFixed(2));
+      },
 
-    async publishData(type) {
-      const key = getRouteTabKey();
-      let params = deepClone(this.form);
-      params.categoryId = params.salesOrders[0]?.categoryId;
-      if (this.$route.query.type != 'edit') {
-        delete params.id;
-      }
+      async publishData(type) {
+        const key = getRouteTabKey();
+        let params = deepClone(this.form);
+        params.categoryId = params.salesOrders[0]?.categoryId;
+        if (this.$route.query.type != 'edit') {
+          delete params.id;
+        }
 
-      if (type === 2) {
-        this.$confirm('发布工单后不可撤回,确定发布吗?', '发布确认').then(
-          async () => {
-            const loading = this.$loading({
-              lock: true,
-              fullscreen: true,
-              text: '工单发布中...'
-            });
-            try {
-              const code = await getCode('product_order_code');
-              const data = {
-                productionPlan: params,
-                workOrder: {
-                  productionPlanCode: params.code,
-                  code: code,
-                  // formingNum: params.contractNum,
-                  formingNum: this.form.requiredFormingNum,
-                  formingWeight: params.sumOrderWeight,
-                  produceRoutingId: params.produceRoutingId,
-                  status: 4,
-                  model: params.model,
-                  brandNo: params.brandNo,
-                  categoryId: params.categoryId,
-                  productCode: params.productCode,
-                  productName: params.productName,
-
-                  newWeightUnit: this.form.newWeightUnit,
-                  newSumOrderWeight: this.form.newSumOrderWeight
+        if (type === 2) {
+          this.$confirm('发布工单后不可撤回,确定发布吗?', '发布确认').then(
+            async () => {
+              const loading = this.$loading({
+                lock: true,
+                fullscreen: true,
+                text: '工单发布中...'
+              });
+              try {
+                const code = await getCode('product_order_code');
+                const data = {
+                  productionPlan: params,
+                  workOrder: {
+                    productionPlanCode: params.code,
+                    code: code,
+                    // formingNum: params.contractNum,
+                    formingNum: this.form.requiredFormingNum,
+                    formingWeight: params.sumOrderWeight,
+                    produceRoutingId: params.produceRoutingId,
+                    status: 4,
+                    model: params.model,
+                    brandNo: params.brandNo,
+                    categoryId: params.categoryId,
+                    productCode: params.productCode,
+                    productName: params.productName,
+
+                    newWeightUnit: this.form.newWeightUnit,
+                    newSumOrderWeight: this.form.newSumOrderWeight
+                  }
+                };
+                if (this.$route.query.type == 'edit') {
+                  data.workOrder.productionPlanId = params.id;
                 }
-              };
-              if (this.$route.query.type == 'edit') {
-                data.workOrder.productionPlanId = params.id;
-              }
-              console.log(data);
-              await releaseSave(data)
-                .then((res) => {
-                  if (res === 1) {
-                    this.$message.success('工单已发布!');
-                    this.$router.push({
-                      path: '/productionPlan'
-                    });
-                  } else {
-                    this.$confirm(
-                      '生产计划创建成功,但工单发布失败。请前往【生产计划】列表【重新发布】工单',
-                      '提示',
-                      {
-                        confirmButtonText: '返回',
-                        cancelButtonText: '立即前往',
-                        type: 'warning'
-                      }
-                    )
-                      .then(() => {
-                        this.$router.push({
-                          path: '/productionPlan'
-                        });
-                      })
-                      .catch(() => {
-                        this.$router.go(-1);
+                console.log(data);
+                await releaseSave(data)
+                  .then((res) => {
+                    if (res === 1) {
+                      this.$message.success('工单已发布!');
+                      this.$router.push({
+                        path: '/productionPlan'
                       });
-                  }
-                  removePageTab({ key });
-                })
-                .catch(() => {
-                  this.$message.error('发布失败,请重新发布!');
-                });
-            } catch (error) {}
-
-            loading.close();
-          }
-        );
-      } else {
-        let request =
-          this.$route.query.type == 'edit' ? updateSaleToPlan : saveSaleToPlan;
-
-        request(params)
-          .then(async (res) => {
-            // 提交
-            this.$router.push({
-              path: '/productionPlan'
+                    } else {
+                      this.$confirm(
+                        '生产计划创建成功,但工单发布失败。请前往【生产计划】列表【重新发布】工单',
+                        '提示',
+                        {
+                          confirmButtonText: '返回',
+                          cancelButtonText: '立即前往',
+                          type: 'warning'
+                        }
+                      )
+                        .then(() => {
+                          this.$router.push({
+                            path: '/productionPlan'
+                          });
+                        })
+                        .catch(() => {
+                          this.$router.go(-1);
+                        });
+                    }
+                    removePageTab({ key });
+                  })
+                  .catch(() => {
+                    this.$message.error('发布失败,请重新发布!');
+                  });
+              } catch (error) {}
+
+              loading.close();
+            }
+          );
+        } else {
+          let request =
+            this.$route.query.type == 'edit'
+              ? updateSaleToPlan
+              : saveSaleToPlan;
+
+          request(params)
+            .then(async (res) => {
+              // 提交
+              this.$router.push({
+                path: '/productionPlan'
+              });
+              removePageTab({ key });
+            })
+            .catch(() => {
+              this.$message.error('提交失败,请重新提交!');
             });
-            removePageTab({ key });
-          })
-          .catch(() => {
-            this.$message.error('提交失败,请重新提交!');
-          });
+        }
       }
     }
-  }
-};
+  };
 </script>
 <style lang="scss" scoped>
-.ele-body {
-  background: #fff;
-}
-
-.body-title {
-  width: 100%;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-
-.title-left {
-  font-size: 20px;
-  color: #333;
-}
-
-.formbox {
-  margin: 20px auto;
-}
-
-.row-intro {
-  border-bottom: 1px dashed #ccc;
-  margin-bottom: 20px;
-}
-
-.add-product {
-  width: 100%;
-  display: flex;
-  align-items: center;
-  justify-content: flex-end;
-  font-size: 30px;
-  color: #1890ff;
-  margin: 10px 0;
-  cursor: pointer;
-}
-
-.table-item {
-  margin-bottom: 0;
-}
+  .ele-body {
+    background: #fff;
+  }
+
+  .body-title {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
+
+  .title-left {
+    font-size: 20px;
+    color: #333;
+  }
+
+  .formbox {
+    margin: 20px auto;
+  }
+
+  .row-intro {
+    border-bottom: 1px dashed #ccc;
+    margin-bottom: 20px;
+  }
+
+  .add-product {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: flex-end;
+    font-size: 30px;
+    color: #1890ff;
+    margin: 10px 0;
+    cursor: pointer;
+  }
+
+  .table-item {
+    margin-bottom: 0;
+  }
 </style>

Some files were not shown because too many files changed in this diff