Z 1 год назад
Родитель
Сommit
1898797bd8
1 измененных файлов с 470 добавлено и 466 удалено
  1. 470 466
      src/views/material/product/detail.vue

+ 470 - 466
src/views/material/product/detail.vue

@@ -10,7 +10,8 @@
         <headerTitle title="基本信息">
           <el-button @click="cancel">返回</el-button>
           <el-button type="primary" @click="submit" :loading="loading"
-            >保存</el-button
+          >保存
+          </el-button
           >
         </headerTitle>
 
@@ -37,19 +38,19 @@
 
           <el-col :span="8" v-else key="2">
             <el-form-item label="编码" prop="code">
-              <el-input v-model="form.code" :disabled="status == 0" />
+              <el-input v-model="form.code" :disabled="status == 0"/>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="名称" prop="name">
-              <el-input v-model="form.name" />
+              <el-input v-model="form.name"/>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="图号/件号" prop="imgCode">
-              <el-input v-model="form.imgCode" />
+              <el-input v-model="form.imgCode"/>
             </el-form-item>
           </el-col>
 
@@ -89,18 +90,18 @@
 
           <el-col :span="8">
             <el-form-item label="牌号" prop="brandNum">
-              <el-input v-model="form.brandNum" />
+              <el-input v-model="form.brandNum"/>
             </el-form-item>
           </el-col>
           <el-col :span="8">
             <el-form-item label="型号" prop="modelType">
-              <el-input v-model="form.modelType" />
+              <el-input v-model="form.modelType"/>
             </el-form-item>
           </el-col>
 
           <el-col :span="8">
             <el-form-item label="规格" prop="specification">
-              <el-input v-model="form.specification" />
+              <el-input v-model="form.specification"/>
             </el-form-item>
           </el-col>
 
@@ -140,7 +141,7 @@
           <el-col :span="8">
             <el-form-item label="体积">
               <div class="form-line">
-                <el-input v-model="form.volume" />
+                <el-input v-model="form.volume"/>
                 <DictSelection
                   class="line-select"
                   dictName="体积单位"
@@ -155,7 +156,7 @@
           <el-col :span="8">
             <el-form-item label="毛重">
               <div class="form-line">
-                <el-input v-model="form.roughWeight" />
+                <el-input v-model="form.roughWeight"/>
               </div>
             </el-form-item>
           </el-col>
@@ -163,7 +164,7 @@
           <el-col :span="8">
             <el-form-item label="净重">
               <div class="form-line">
-                <el-input v-model="form.netWeight" />
+                <el-input v-model="form.netWeight"/>
               </div>
             </el-form-item>
           </el-col>
@@ -192,21 +193,24 @@
             <el-form-item :label="f.label">
               <template>
                 <div class="form-line">
-                  <div
-                    style="width: 100%"
-                    v-if="f.prop === 'packingSpecification'"
-                  >
-                    <template v-if="form.extField.packingSpecification">
-                      <el-tag
-                        v-for="item in form.extField.packingSpecification.split(
-                          ','
-                        )"
-                        >{{ item }}</el-tag
-                      >
-                    </template>
-                    <el-input v-else disabled v-model="form.extField[f.prop]" />
-                  </div>
-                  <el-input v-else v-model="form.extField[f.prop]" />
+                  <!--                  <div-->
+                  <!--                    style="width: 100%"-->
+                  <!--                    v-if="f.prop === 'packingSpecification'"-->
+                  <!--                  >-->
+                  <!--                    <template v-if="form.extField.packingSpecification">-->
+                  <!--                      <el-tag-->
+                  <!--                        v-for="item in form.extField.packingSpecification.split(-->
+                  <!--                          ','-->
+                  <!--                        )"-->
+                  <!--                        >{{ item }}</el-tag-->
+                  <!--                      >-->
+                  <!--                    </template>-->
+                  <!--                    <el-input v-else disabled v-model="form.extField[f.prop]" />-->
+                  <!--                  </div>-->
+                  <!--                  <[f.tagType] v-model="form.extField[f.prop]" />-->
+                  <component :is="f.tagType" v-model="form.extField[f.prop]" :disabled="f.extAttribute?.disabled"
+                             clearable :isProhibit="f.modelType=='dict'?f.extAttribute?.disabled:false"
+                             :dictName="f.modelType=='dict'?f.label:''"></component>
                 </div>
               </template>
             </el-form-item>
@@ -223,7 +227,7 @@
       @chooseCode="chooseCode"
     ></CodeDialog>
     <!-- 分类选择弹窗 -->
-    <CategoryDialog ref="categoryRefs" @chooseCategory="confirmCategory" />
+    <CategoryDialog ref="categoryRefs" @chooseCategory="confirmCategory"/>
     <!-- 仓储配置 -->
     <WarehouseInfo
       ref="warehouseRefs"
@@ -233,19 +237,19 @@
       @change="changePackagingSpecification"
     />
     <!-- 生产信息 -->
-    <ProductionInfo ref="productionRefs" :form="categoryMes" />
+    <ProductionInfo ref="productionRefs" :form="categoryMes"/>
     <!-- 计划 -->
-    <PlanInfo ref="planRefs" :form="categoryAps" />
+    <PlanInfo ref="planRefs" :form="categoryAps"/>
     <!-- 质量配置 -->
-    <QualityInfo ref="qualityRefs" :form="categoryQms" />
+    <QualityInfo ref="qualityRefs" :form="categoryQms"/>
     <!-- 舟皿信息 -->
-    <BoatInfo ref="qualityRefs" :form="categoryPallet" />
+    <BoatInfo ref="qualityRefs" :form="categoryPallet"/>
     <!-- 周转车信息 -->
-    <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle" />
+    <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle"/>
     <!-- 模具信息 -->
-    <MoldInfo ref="moldRefs" :form="categoryMold" />
+    <MoldInfo ref="moldRefs" :form="categoryMold"/>
     <!-- 备注信息 -->
-    <RemarkInfo ref="remarkRefs" :form="remarkform" />
+    <RemarkInfo ref="remarkRefs" :form="remarkform"/>
     <!-- 关联信息 -->
     <linkMsg
       ref="linkMsgRef"
@@ -257,485 +261,485 @@
 </template>
 
 <script>
-  import GroupDialog from './components/GroupDialog.vue';
-  import CodeDialog from './components/codeDialog.vue';
-  import CategoryDialog from './components/CategoryDialog.vue';
-  import WarehouseInfo from './components/WarehouseInfo.vue';
-  import ProcureInfo from './components/ProcureInfo.vue';
-  import ProductionInfo from './components/ProductionInfo.vue';
-  import PlanInfo from './components/PlanInfo.vue';
-  import SalesInfo from './components/SalesInfo.vue';
-  import QualityInfo from './components/QualityInfo.vue';
-  import BoatInfo from './components/BoatInfo.vue';
-  import TurnoverInfo from './components/TurnoverInfo.vue';
-  import MoldInfo from './components/MoldInfo.vue';
-  import RemarkInfo from './components/RemarkInfo.vue';
-  import deptSelect from '@/components/CommomSelect/dept-select.vue';
-  import personSelect from '@/components/CommomSelect/person-select.vue';
-  import linkMsg from './components/link-msg.vue';
-  import { getDetails } from '@/api/classifyManage/itemInformation';
-  import { getByCode } from '@/api/system/dictionary-data';
-  import { getCode, rootCategoryCode, fieldModel } from '@/api/codeManagement';
-
-  import { addMaterial } from '@/api/material/list.js';
-  import { deepClone } from '@/utils/index';
-  import { finishPageTab, reloadPageTab } from '@/utils/page-tab-util';
-
-  export default {
-    name: 'ManageMaterial',
-    components: {
-      linkMsg,
-      GroupDialog,
-      deptSelect,
-      personSelect,
-      WarehouseInfo,
-      ProcureInfo,
-      ProductionInfo,
-      PlanInfo,
-      SalesInfo,
-      QualityInfo,
-      BoatInfo,
-      TurnoverInfo,
-      MoldInfo,
-      RemarkInfo,
-      CategoryDialog,
-      CodeDialog
-    },
-    data() {
-      return {
-        packagingSpecificationList: [],
-        loading: false,
-        levelOptions: [
-          {
-            label: '特级',
-            value: '特级'
-          },
-          {
-            label: '一级',
-            value: '一级'
-          },
-          {
-            label: '二级',
-            value: '二级'
-          },
-          {
-            label: '三级',
-            value: '三级'
-          }
-        ],
-        form: {
-          categoryLevelGroupName: '',
-          categoryLevelName: '',
-          isConsumable: 1,
-
-          extField: {}
+import GroupDialog from './components/GroupDialog.vue';
+import CodeDialog from './components/codeDialog.vue';
+import CategoryDialog from './components/CategoryDialog.vue';
+import WarehouseInfo from './components/WarehouseInfo.vue';
+import ProcureInfo from './components/ProcureInfo.vue';
+import ProductionInfo from './components/ProductionInfo.vue';
+import PlanInfo from './components/PlanInfo.vue';
+import SalesInfo from './components/SalesInfo.vue';
+import QualityInfo from './components/QualityInfo.vue';
+import BoatInfo from './components/BoatInfo.vue';
+import TurnoverInfo from './components/TurnoverInfo.vue';
+import MoldInfo from './components/MoldInfo.vue';
+import RemarkInfo from './components/RemarkInfo.vue';
+import deptSelect from '@/components/CommomSelect/dept-select.vue';
+import personSelect from '@/components/CommomSelect/person-select.vue';
+import linkMsg from './components/link-msg.vue';
+import {getDetails} from '@/api/classifyManage/itemInformation';
+import {getByCode} from '@/api/system/dictionary-data';
+import {getCode, rootCategoryCode, fieldModel} from '@/api/codeManagement';
+
+import {addMaterial} from '@/api/material/list.js';
+import {deepClone} from '@/utils/index';
+import {finishPageTab, reloadPageTab} from '@/utils/page-tab-util';
+
+export default {
+  name: 'ManageMaterial',
+  components: {
+    linkMsg,
+    GroupDialog,
+    deptSelect,
+    personSelect,
+    WarehouseInfo,
+    ProcureInfo,
+    ProductionInfo,
+    PlanInfo,
+    SalesInfo,
+    QualityInfo,
+    BoatInfo,
+    TurnoverInfo,
+    MoldInfo,
+    RemarkInfo,
+    CategoryDialog,
+    CodeDialog
+  },
+  data() {
+    return {
+      packagingSpecificationList: [],
+      loading: false,
+      levelOptions: [
+        {
+          label: '特级',
+          value: '特级'
         },
-
-        remarkform: {
-          remarkAttach: []
+        {
+          label: '一级',
+          value: '一级'
         },
-        categoryAps: {},
-        categoryMes: {},
-        categoryMold: {},
-        categoryPallet: {},
-        categoryQms: {},
-        categoryVehicle: {},
-        categoryWms: {
-          isUnpack: 1
+        {
+          label: '二级',
+          value: '二级'
         },
-        packageDispositionVOList: [],
-        categoryLevelPathId: null,
-
-        dictList: [],
-
-        fileList: [],
-        // 表单验证规则
-        rules: {
-          categoryLevelGroupName: [
-            { required: true, message: '请选择所属物料组', trigger: 'change' }
-          ],
-          code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
-          name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
-          categoryLevelName: [
-            { required: true, message: '请选择所属分类', trigger: 'change' }
-          ],
-          measuringUnit: [
-            { required: true, message: '请选择计量单位', trigger: 'change' }
-          ],
-
-          weightUnit: [
-            { required: true, message: '请选择重量单位', trigger: 'change' }
-          ],
-
-          packingUnit: [
-            { required: true, message: '请选择包装单位', trigger: 'change' }
-          ],
-
-          netWeight: [
-            { required: true, message: '请输入净重', trigger: 'blur' }
-          ]
-        },
-        PathInfo: {},
-        id: null,
+        {
+          label: '三级',
+          value: '三级'
+        }
+      ],
+      form: {
+        categoryLevelGroupName: '',
+        categoryLevelName: '',
+        isConsumable: 1,
 
-        ruleCode: null,
-        codeShow: false,
+        extField: {}
+      },
 
-        status: null
-      };
-    },
-    watch: {
-      '$route.query.id': {
-        handler(id) {
-          console.log('id-------------', id);
-          if (id) {
-            this._getDetails();
-          }
-        },
-        deep: true,
-        immediate: true
-      }
-    },
-    async created() {
-      this.getFieldModel();
-      this.status = this.$route.query.status;
-      // if (this.$route.query.id) {
-      //   this._getDetails();
-      // }
-      this.getDictList('productionType');
-    },
-    methods: {
-      changePackagingSpecification(val) {
-        this.packagingSpecificationList = val;
+      remarkform: {
+        remarkAttach: []
       },
-      async _getDetails() {
-        const data = await getDetails(this.$route.query.id);
-        const info = deepClone(data);
+      categoryAps: {},
+      categoryMes: {},
+      categoryMold: {},
+      categoryPallet: {},
+      categoryQms: {},
+      categoryVehicle: {},
+      categoryWms: {
+        isUnpack: 1
+      },
+      packageDispositionVOList: [],
+      categoryLevelPathId: null,
 
-        this.form = {
-          ...info.category
-        };
-        let productType_ = this.form.produceType;
-        if (productType_ != undefined && productType_ != null) {
-          let intproductType = [];
-          for (const [index, value] of productType_.entries()) {
-            intproductType.push(value.toString());
-          }
-          this.form.produceType = intproductType;
-        }
+      dictList: [],
+
+      fileList: [],
+      // 表单验证规则
+      rules: {
+        categoryLevelGroupName: [
+          {required: true, message: '请选择所属物料组', trigger: 'change'}
+        ],
+        code: [{required: true, message: '请输入编码', trigger: 'blur'}],
+        name: [{required: true, message: '请输入名称', trigger: 'blur'}],
+        categoryLevelName: [
+          {required: true, message: '请选择所属分类', trigger: 'change'}
+        ],
+        measuringUnit: [
+          {required: true, message: '请选择计量单位', trigger: 'change'}
+        ],
 
-        this.categoryLevelPathId = info.category.categoryLevelPathIdParent;
-        this.judgeSet(info);
+        weightUnit: [
+          {required: true, message: '请选择重量单位', trigger: 'change'}
+        ],
 
-        if (this.status == 1) {
-          rootCategoryCode(this.categoryLevelPathId).then((res) => {
-            this.$set(this.form, 'code', res);
-          });
-        }
+        packingUnit: [
+          {required: true, message: '请选择包装单位', trigger: 'change'}
+        ],
 
-        this.$forceUpdate();
+        netWeight: [
+          {required: true, message: '请输入净重', trigger: 'blur'}
+        ]
       },
-      // 判断字段类型并赋值
-      judgeSet(info) {
-        console.log('info-------', info);
-        if (typeof info.categoryAps == 'string') {
-          this.categoryAps = {};
-        } else {
-          this.categoryAps = info.categoryAps;
-        }
-        if (typeof info.categoryMes == 'string') {
-          this.categoryMes = {};
-        } else {
-          this.categoryMes = info.categoryMes;
-        }
-        if (typeof info.categoryMold == 'string') {
-          this.categoryMold = {};
-        } else {
-          this.categoryMold = info.categoryMold;
-        }
-        if (typeof info.categoryPallet == 'string') {
-          this.categoryPallet = {};
-        } else {
-          this.categoryPallet = info.categoryPallet;
-        }
-        if (typeof info.categoryQms == 'string') {
-          this.categoryQms = {};
-        } else {
-          this.categoryQms = info.categoryQms;
-        }
-        if (typeof info.categoryVehicle == 'string') {
-          this.categoryVehicle = {};
-        } else {
-          this.categoryVehicle = info.categoryVehicle;
-        }
-        if (typeof info.categoryWms == 'string') {
-          this.categoryWms = {};
-        } else {
-          this.categoryWms = info.categoryWms;
-        }
-        if (typeof info.packageDispositionVOList == 'string') {
-          this.packageDispositionVOList = [];
-        } else {
-          this.packageDispositionVOList = info.packageDispositionVOList;
-          console.log(
-            'this.packageDispositionVOList---!!!----',
-            this.packageDispositionVOList
-          );
+      PathInfo: {},
+      id: null,
+
+      ruleCode: null,
+      codeShow: false,
+
+      status: null
+    };
+  },
+  watch: {
+    '$route.query.id': {
+      handler(id) {
+        console.log('id-------------', id);
+        if (id) {
+          this._getDetails();
         }
       },
+      deep: true,
+      immediate: true
+    }
+  },
+  async created() {
+    this.getFieldModel();
+    this.status = this.$route.query.status;
+    // if (this.$route.query.id) {
+    //   this._getDetails();
+    // }
+    this.getDictList('productionType');
+  },
+  methods: {
+    changePackagingSpecification(val) {
+      this.packagingSpecificationList = val;
+    },
+    async _getDetails() {
+      const data = await getDetails(this.$route.query.id);
+      const info = deepClone(data);
 
-      getFieldModel() {
-        fieldModel({ fieldModel: 't_main_category' }).then((res) => {
-          this.fileList = res;
+      this.form = {
+        ...info.category
+      };
+      let productType_ = this.form.produceType;
+      if (productType_ != undefined && productType_ != null) {
+        let intproductType = [];
+        for (const [index, value] of productType_.entries()) {
+          intproductType.push(value.toString());
+        }
+        this.form.produceType = intproductType;
+      }
 
-          this.fileList.forEach((f) => {
-            this.$set(this.form.extField, f.prop, ''); // 初始化动态模型属性
-          });
+      this.categoryLevelPathId = info.category.categoryLevelPathIdParent;
+      this.judgeSet(info);
+
+      if (this.status == 1) {
+        rootCategoryCode(this.categoryLevelPathId).then((res) => {
+          this.$set(this.form, 'code', res);
         });
-      },
+      }
 
-      // 确定分类
-      async confirmCategory(node, title, PathInfo, ruleCode) {
-        if (this.status != 0) {
-          this.$set(this.form, 'code', null);
-        }
-        this.categoryLevelPathId = PathInfo.categoryLevelPathId.split(',')[0];
+      this.$forceUpdate();
+    },
+    // 判断字段类型并赋值
+    judgeSet(info) {
+      console.log('info-------', info);
+      if (typeof info.categoryAps == 'string') {
+        this.categoryAps = {};
+      } else {
+        this.categoryAps = info.categoryAps;
+      }
+      if (typeof info.categoryMes == 'string') {
+        this.categoryMes = {};
+      } else {
+        this.categoryMes = info.categoryMes;
+      }
+      if (typeof info.categoryMold == 'string') {
+        this.categoryMold = {};
+      } else {
+        this.categoryMold = info.categoryMold;
+      }
+      if (typeof info.categoryPallet == 'string') {
+        this.categoryPallet = {};
+      } else {
+        this.categoryPallet = info.categoryPallet;
+      }
+      if (typeof info.categoryQms == 'string') {
+        this.categoryQms = {};
+      } else {
+        this.categoryQms = info.categoryQms;
+      }
+      if (typeof info.categoryVehicle == 'string') {
+        this.categoryVehicle = {};
+      } else {
+        this.categoryVehicle = info.categoryVehicle;
+      }
+      if (typeof info.categoryWms == 'string') {
+        this.categoryWms = {};
+      } else {
+        this.categoryWms = info.categoryWms;
+      }
+      if (typeof info.packageDispositionVOList == 'string') {
+        this.packageDispositionVOList = [];
+      } else {
+        this.packageDispositionVOList = info.packageDispositionVOList;
+        console.log(
+          'this.packageDispositionVOList---!!!----',
+          this.packageDispositionVOList
+        );
+      }
+    },
 
-        if (title == '选择产品分类') {
-          this.$set(this.form, 'productCategoryLevelName', node.name);
-          this.$set(this.form, 'productCategoryLevelId', node.id);
-        } else {
-          this.$set(this.form, 'categoryLevelName', node.name);
-          this.$set(this.form, 'categoryLevelId', node.id);
-          this.$set(this.form, 'categoryLevelPath', node.name);
-          this.$set(this.form, 'categoryLevelPathId', node.id);
-          this.PathInfo = PathInfo;
-
-          this.ruleCode = ruleCode;
-
-          if (ruleCode && ruleCode != '自定义' && this.status != 0) {
-            const code = await getCode(ruleCode);
-            this.$set(this.form, 'code', code);
-          }
+    getFieldModel() {
+      fieldModel({fieldModel: 't_main_category'}).then((res) => {
+        this.fileList = res;
+
+        this.fileList.forEach((f) => {
+          this.$set(this.form.extField, f.prop, ''); // 初始化动态模型属性
+        });
+      });
+    },
+
+    // 确定分类
+    async confirmCategory(node, title, PathInfo, ruleCode) {
+      if (this.status != 0) {
+        this.$set(this.form, 'code', null);
+      }
+      this.categoryLevelPathId = PathInfo.categoryLevelPathId.split(',')[0];
+
+      if (title == '选择产品分类') {
+        this.$set(this.form, 'productCategoryLevelName', node.name);
+        this.$set(this.form, 'productCategoryLevelId', node.id);
+      } else {
+        this.$set(this.form, 'categoryLevelName', node.name);
+        this.$set(this.form, 'categoryLevelId', node.id);
+        this.$set(this.form, 'categoryLevelPath', node.name);
+        this.$set(this.form, 'categoryLevelPathId', node.id);
+        this.PathInfo = PathInfo;
+
+        this.ruleCode = ruleCode;
+
+        if (ruleCode && ruleCode != '自定义' && this.status != 0) {
+          const code = await getCode(ruleCode);
+          this.$set(this.form, 'code', code);
         }
+      }
 
-        this.$forceUpdate();
-      },
+      this.$forceUpdate();
+    },
 
-      async getDictList(code) {
-        let { data: res } = await getByCode(code);
-        this.dictList = res.map((item) => {
-          let values = Object.keys(item);
-          return {
-            value: Number(values[0]),
-            label: item[values[0]]
-          };
-        });
-      },
+    async getDictList(code) {
+      let {data: res} = await getByCode(code);
+      this.dictList = res.map((item) => {
+        let values = Object.keys(item);
+        return {
+          value: Number(values[0]),
+          label: item[values[0]]
+        };
+      });
+    },
 
-      openCategory() {
-        this.$refs.categoryRefs.open();
-      },
+    openCategory() {
+      this.$refs.categoryRefs.open();
+    },
 
-      openCode() {
-        this.codeShow = true;
-      },
+    openCode() {
+      this.codeShow = true;
+    },
 
-      chooseCode(code) {
-        this.$set(this.form, 'code', code);
-        this.codeShow = false;
-        this.$forceUpdate();
-      },
+    chooseCode(code) {
+      this.$set(this.form, 'code', code);
+      this.codeShow = false;
+      this.$forceUpdate();
+    },
 
-      cancel() {
-        finishPageTab();
-        this.$router.go(-1);
-      },
+    cancel() {
+      finishPageTab();
+      this.$router.go(-1);
+    },
 
-      // 保存
-      submit() {
-        this.$refs.manageForm.validate(async (valid) => {
-          let productionValid = await this.$refs.productionRefs.getFormValid();
-          console.log(productionValid);
-          if (!valid || !productionValid) {
-            return false;
-          }
-
-          let packageDispositionVOList = [];
-          if (this.packagingSpecificationList.length > 0) {
-            packageDispositionVOList = this.packagingSpecificationList.map(
-              (item) => {
-                let obj = {
-                  code: item.code,
-                  name: item.name
-                };
-                return [
-                  {
-                    ...obj,
-                    sort: 0,
-                    status: item.status
-                  },
-                  {
-                    ...obj,
-                    sort: 1,
-                    packageCell: item.minPackageCell,
-                    packageUnit: item.packageUnit,
-                    conversionUnit: item.minConversionUnit
-                  },
-                  {
-                    ...obj,
-                    sort: 2,
-                    packageCell: item.inPackageCell,
-                    packageUnit: item.minConversionUnit,
-                    conversionUnit: item.inConversionUnit
-                  },
-                  {
-                    ...obj,
-                    sort: 3,
-                    packageCell: item.outPackageCell,
-                    packageUnit: item.inConversionUnit,
-                    conversionUnit: item.outConversionUnit
-                  }
-                ];
-              }
-            );
-            let packagingSpecificationList =
-              this.packagingSpecificationList.filter(
-                (item) => item.status == 1
-              );
-            this.form.extField.packingSpecification = packagingSpecificationList
-              .map((item) => {
-                return [
-                  `${item.minPackageCell}${item.packageUnit}/${item.minConversionUnit}`,
-                  `${item.inPackageCell}${item.minConversionUnit}/${item.inConversionUnit}`,
-                  `${item.outPackageCell}${item.inConversionUnit}/${item.outConversionUnit}`
-                ];
-              })
-              .flat()
-              .join(',');
-          } else {
-            this.form.extField.packingSpecification = '';
-          }
-
-          this.loading = true;
-          // const imgList = this.remarkform.imgList;
-          // const arr = [];
-          // if (imgList.length) {
-          //   imgList.map((item) => {
-          //     arr.push(item.storePath);
-          //   });
-          //   this.form.remarkAttach = arr.join(',');
-          // }
-          // this.form.remark = this.remarkform.remark
-          //   ? this.remarkform.remark
-          //   : '';
-
-          const data = {
-            categoryWms: this.categoryWms,
-            categoryAps: this.categoryAps,
-            categoryMes: this.categoryMes,
-            categoryMold: this.categoryMold,
-            categoryPallet: this.categoryPallet,
-            categoryQms: this.categoryQms,
-            categoryVehicle: this.categoryVehicle,
-            category: {
-              ...this.form,
-              ...this.remarkform,
-              ...this.PathInfo
-            },
-            packageDispositionVOList: packageDispositionVOList.flat()
-          };
-
-          if (this.$route.query.status == 1) {
-            data.category.id = null;
-            data.categoryWms.id = null;
-            data.categoryAps.id = null;
-            data.categoryMes.id = null;
-            data.categoryMold.id = null;
-            data.categoryPallet.id = null;
-            data.categoryQms.id = null;
-            data.categoryVehicle.id = null;
-            data.packageDispositionVOList = data.packageDispositionVOList.map(
-              (item) => {
-                return {
-                  ...item,
-                  id: null
-                };
-              }
+    // 保存
+    submit() {
+      this.$refs.manageForm.validate(async (valid) => {
+        let productionValid = await this.$refs.productionRefs.getFormValid();
+        console.log(productionValid);
+        if (!valid || !productionValid) {
+          return false;
+        }
+
+        let packageDispositionVOList = [];
+        if (this.packagingSpecificationList.length > 0) {
+          packageDispositionVOList = this.packagingSpecificationList.map(
+            (item) => {
+              let obj = {
+                code: item.code,
+                name: item.name
+              };
+              return [
+                {
+                  ...obj,
+                  sort: 0,
+                  status: item.status
+                },
+                {
+                  ...obj,
+                  sort: 1,
+                  packageCell: item.minPackageCell,
+                  packageUnit: item.packageUnit,
+                  conversionUnit: item.minConversionUnit
+                },
+                {
+                  ...obj,
+                  sort: 2,
+                  packageCell: item.inPackageCell,
+                  packageUnit: item.minConversionUnit,
+                  conversionUnit: item.inConversionUnit
+                },
+                {
+                  ...obj,
+                  sort: 3,
+                  packageCell: item.outPackageCell,
+                  packageUnit: item.inConversionUnit,
+                  conversionUnit: item.outConversionUnit
+                }
+              ];
+            }
+          );
+          let packagingSpecificationList =
+            this.packagingSpecificationList.filter(
+              (item) => item.status == 1
             );
-          }
-
-          addMaterial(data)
-            .then((msg) => {
-              this.loading = false;
-              this.$message.success(msg);
-              reloadPageTab({ fullPath: '/material/product' });
-              this.$router.go(-1);
+          this.form.extField.packingSpecification = packagingSpecificationList
+            .map((item) => {
+              return [
+                `${item.minPackageCell}${item.packageUnit}/${item.minConversionUnit}`,
+                `${item.inPackageCell}${item.minConversionUnit}/${item.inConversionUnit}`,
+                `${item.outPackageCell}${item.inConversionUnit}/${item.outConversionUnit}`
+              ];
             })
-            .catch((e) => {
-              this.loading = false;
-            });
-        });
-      }
+            .flat()
+            .join(',');
+        } else {
+          this.form.extField.packingSpecification = '';
+        }
+
+        this.loading = true;
+        // const imgList = this.remarkform.imgList;
+        // const arr = [];
+        // if (imgList.length) {
+        //   imgList.map((item) => {
+        //     arr.push(item.storePath);
+        //   });
+        //   this.form.remarkAttach = arr.join(',');
+        // }
+        // this.form.remark = this.remarkform.remark
+        //   ? this.remarkform.remark
+        //   : '';
+
+        const data = {
+          categoryWms: this.categoryWms,
+          categoryAps: this.categoryAps,
+          categoryMes: this.categoryMes,
+          categoryMold: this.categoryMold,
+          categoryPallet: this.categoryPallet,
+          categoryQms: this.categoryQms,
+          categoryVehicle: this.categoryVehicle,
+          category: {
+            ...this.form,
+            ...this.remarkform,
+            ...this.PathInfo
+          },
+          packageDispositionVOList: packageDispositionVOList.flat()
+        };
+
+        if (this.$route.query.status == 1) {
+          data.category.id = null;
+          data.categoryWms.id = null;
+          data.categoryAps.id = null;
+          data.categoryMes.id = null;
+          data.categoryMold.id = null;
+          data.categoryPallet.id = null;
+          data.categoryQms.id = null;
+          data.categoryVehicle.id = null;
+          data.packageDispositionVOList = data.packageDispositionVOList.map(
+            (item) => {
+              return {
+                ...item,
+                id: null
+              };
+            }
+          );
+        }
+
+        addMaterial(data)
+          .then((msg) => {
+            this.loading = false;
+            this.$message.success(msg);
+            reloadPageTab({fullPath: '/material/product'});
+            this.$router.go(-1);
+          })
+          .catch((e) => {
+            this.loading = false;
+          });
+      });
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  .ele-page-header {
-    border: none;
-  }
+.ele-page-header {
+  border: none;
+}
+
+.body-top {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  background: #fff;
 
-  .body-top {
+  .top-left {
     display: flex;
     align-items: center;
-    justify-content: space-between;
-    background: #fff;
+    justify-content: flex-start;
+    margin-left: -25px;
 
-    .top-left {
-      display: flex;
-      align-items: center;
-      justify-content: flex-start;
-      margin-left: -25px;
-
-      .el-form-item {
-        margin-bottom: 0;
-      }
+    .el-form-item {
+      margin-bottom: 0;
     }
   }
+}
 
-  .divider {
-    margin: 20px 0;
+.divider {
+  margin: 20px 0;
 
-    .title {
-      display: flex;
-      align-items: center;
-      margin-bottom: 10px;
-
-      div {
-        width: 8px;
-        height: 20px;
-        margin-right: 10px;
-      }
+  .title {
+    display: flex;
+    align-items: center;
+    margin-bottom: 10px;
 
-      span {
-        font-size: 20px;
-      }
+    div {
+      width: 8px;
+      height: 20px;
+      margin-right: 10px;
     }
 
-    .ele-width {
-      width: 100%;
-      height: 2px;
+    span {
+      font-size: 20px;
     }
   }
 
-  .form-line {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
+  .ele-width {
+    width: 100%;
+    height: 2px;
+  }
+}
 
-    .line-select {
-      margin-left: 15px;
-    }
+.form-line {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+
+  .line-select {
+    margin-left: 15px;
   }
+}
 </style>