Ver Fonte

Merge branch 'dev' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend into dev

quwangxin há 2 anos atrás
pai
commit
39ce93ec86

+ 18 - 0
src/api/technology/version/version.js

@@ -15,3 +15,21 @@ export async function pageList (params) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+// 获取生产版本详情
+export async function versionDetail(id) {
+  const res = await request.get(`/main/produceversion/getById/${id}`);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
+// 根据工艺路线编码获取工序
+export async function getProcessByRoute(data) {
+  const res = await request.post('/main/producerouting/taskinstance/page', data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 11 - 1
src/enum/dict.js

@@ -31,4 +31,14 @@ export default {
   分类层级: 'bom_level'
 };
 
-export const numberList = ['capacity_cycle', 'target_unit', 'capacity_status'];
+export const numberList = [
+  'capacity_cycle',
+  'target_unit',
+  'capacity_status',
+  'date_unit',
+  'quality_assurance',
+  'schedule_type',
+  'leadtime_unit',
+  'inspection_scheme',
+  'angle', 
+];

+ 10 - 10
src/views/material/manage/components/BoatInfo.vue

@@ -10,33 +10,33 @@
          </div>
          <el-row :gutter="24">
            <el-col :span="8">
-             <el-form-item label="槽数" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="槽数" prop="slotNum">
+                <el-input  v-model="form.slotNum"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="角度" prop="lossRate">
-                <DictSelection dictName="角度" clearable v-model="form.scheduleType">
+             <el-form-item label="角度" prop="angle">
+                <DictSelection dictName="角度" clearable v-model="form.angle">
                 </DictSelection>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="长" prop="fixedNum">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="长" prop="palletLen">
+                <el-input v-model="form.palletLen">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="宽" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="宽" prop="wilde">
+                <el-input v-model="form.wilde">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="高" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="高" prop="hight">
+                <el-input v-model="form.hight">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>

+ 15 - 15
src/views/material/manage/components/MoldInfo.vue

@@ -10,46 +10,46 @@
          </div>
          <el-row :gutter="24">
            <el-col :span="8">
-             <el-form-item label="收缩系数" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="收缩系数" prop="shrinkEffictive">
+                <el-input  v-model="form.shrinkEffictive"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="芯杆数量" prop="lossRate">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="芯杆数量" prop="coreBarNum">
+                <el-input  v-model="form.coreBarNum"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="模孔数量" prop="fixedNum">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="模孔数量" prop="dieHoleNum">
+                <el-input v-model="form.dieHoleNum">
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="上冲头数量" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="上冲头数量" prop="upperPunchNum">
+                <el-input v-model="form.upperPunchNum">
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="下冲头数量" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="下冲头数量" prop="downPunchNum">
+                <el-input v-model="form.downPunchNum">
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="最大冲压次数" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="最大冲压次数" prop="maxCyTimes">
+                <el-input v-model="form.maxCyTimes">
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="大模体型号" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="大模体型号" prop="maxMoldType">
+                <el-input v-model="form.maxMoldType">
                 </el-input>
              </el-form-item>
            </el-col>
-           
+
          </el-row>
       </el-form>
   </div>

+ 12 - 12
src/views/material/manage/components/PlanInfo.vue

@@ -10,36 +10,36 @@
          </div>
          <el-row :gutter="24">
            <el-col :span="8">
-             <el-form-item label="固定提前期" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="固定提前期" prop="fixLeadTime">
+                <el-input  v-model="form.fixLeadTime"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="变动提前期" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="变动提前期" prop="changeLeadTime">
+                <el-input  v-model="form.changeLeadTime"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="检验提前期" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="检验提前期" prop="checkLeadTime">
+                <el-input  v-model="form.checkLeadTime"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="累计提前期" prop="consumeWave">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="累计提前期" prop="cumLeadTime">
+                <el-input  v-model="form.cumLeadTime"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="提前期单位" prop="lossRate">
-                <DictSelection dictName="提前期单位" clearable v-model="form.scheduleType">
+             <el-form-item label="提前期单位" prop="unit">
+                <DictSelection dictName="提前期单位" clearable v-model="form.unit">
                 </DictSelection>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="订货间隔期" prop="scheduleType">
                 <div class="form-line">
-                  <el-input  v-model="form.date"/>
-                  <DictSelection class="line-select" dictName="提前期单位" clearable v-model="form.dateUnit">
+                  <el-input  v-model="form.orderIntervalTime"/>
+                  <DictSelection class="line-select" dictName="提前期单位" clearable v-model="form.orderIntervalUnit">
                   </DictSelection>
                 </div>
              </el-form-item>

+ 25 - 25
src/views/material/manage/components/ProductionInfo.vue

@@ -11,69 +11,69 @@
          <el-row :gutter="24">
            <el-col :span="8">
              <el-form-item label="是否齐套件">
-                <el-radio v-model="form.isComplete" label="1">是</el-radio>
-                <el-radio v-model="form.isComplete" label="0">否</el-radio>
+                <el-radio v-model="form.isCompleteSet" :label="1">是</el-radio>
+                <el-radio v-model="form.isCompleteSet" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="消耗波动" prop="consumeWave">
-                <el-input v-model="form.consumeWave">
+             <el-form-item label="消耗波动" prop="consumWave">
+                <el-input v-model="form.consumWave">
                     <template slot="append">%</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="变动损耗率" prop="lossRate">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="变动损耗率" prop="changeLossRate">
+                <el-input v-model="form.changeLossRate">
                     <template slot="append">%</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="固定损耗数" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="固定损耗数" prop="fixLossNum">
+                <el-input  v-model="form.fixLossNum"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="排程类型" prop="scheduleType">
-                <DictSelection dictName="排程类型" clearable v-model="form.scheduleType">
+             <el-form-item label="排程类型" prop="apsType">
+                <DictSelection dictName="排程类型" clearable v-model="form.apsType">
                 </DictSelection>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="允许改型" prop="isAllow">
-               <el-radio v-model="form.isAllow" label="1">是</el-radio>
-               <el-radio v-model="form.isAllow" label="0">否</el-radio>
+             <el-form-item label="允许改型" prop="isModify">
+               <el-radio v-model="form.isModify" :label="1">是</el-radio>
+               <el-radio v-model="form.isModify" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="允许返工返修" prop="isRework">
-               <el-radio v-model="form.isRework" label="1">是</el-radio>
-               <el-radio v-model="form.isRework" label="0">否</el-radio>
+               <el-radio v-model="form.isRework" :label="1">是</el-radio>
+               <el-radio v-model="form.isRework" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="是否返回料" prop="isReturnMaterial">
-               <el-radio v-model="form.isReturnMaterial" label="1">是</el-radio>
-               <el-radio v-model="form.isReturnMaterial" label="0">否</el-radio>
+             <el-form-item label="是否返回料" prop="isRematerial">
+               <el-radio v-model="form.isRematerial" :label="1">是</el-radio>
+               <el-radio v-model="form.isRematerial" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="是否副产品" prop="isByProduct">
-               <el-radio v-model="form.isByProduct" label="1">是</el-radio>
-               <el-radio v-model="form.isByProduct" label="0">否</el-radio>
+               <el-radio v-model="form.isByProduct" :label="1">是</el-radio>
+               <el-radio v-model="form.isByProduct" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="是否废品" prop="isWaste">
-               <el-radio v-model="form.isWaste" label="1">是</el-radio>
-               <el-radio v-model="form.isWaste" label="0">否</el-radio>
+               <el-radio v-model="form.isWaste" :label="1">是</el-radio>
+               <el-radio v-model="form.isWaste" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="是否不良品" prop="isNotGood">
-               <el-radio v-model="form.isNotGood" label="1">是</el-radio>
-               <el-radio v-model="form.isNotGood" label="0">否</el-radio>
+             <el-form-item label="是否不良品" prop="isDefective">
+               <el-radio v-model="form.isDefective" :label="1">是</el-radio>
+               <el-radio v-model="form.isDefective" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
          </el-row>

+ 19 - 12
src/views/material/manage/components/QualityInfo.vue

@@ -10,27 +10,27 @@
          </div>
          <el-row :gutter="24">
            <el-col :span="8">
-             <el-form-item label="是否来料检验" prop="isCheckout">
-                 <el-radio v-model="form.isCheckout" label="1">是</el-radio>
-                 <el-radio v-model="form.isCheckout" label="0">否</el-radio>
+             <el-form-item label="是否来料检验" prop="isComeCheck">
+                 <el-radio v-model="form.isComeCheck" :label="1">是</el-radio>
+                 <el-radio v-model="form.isComeCheck" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="检验方案" prop="lossRate">
-                <DictSelection dictName="检验方案" clearable v-model="form.scheduleType">
+             <el-form-item label="检验方案" prop="checkFormula">
+                <DictSelection dictName="检验方案" clearable v-model="form.checkFormula">
                 </DictSelection>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="采购组织" prop="procureGroup">
-               <deptSelect v-model="form.procureGroup" @changeGroup="searchDeptNodeClick"/>
+             <el-form-item label="采购组织" prop="checkDepart">
+               <deptSelect v-model="form.checkDepart" @changeGroup="searchDeptNodeClick"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="采购员" prop="purchaserId">
+             <el-form-item label="采购员" prop="checkPerson">
                <personSelect
                  ref="directorRef"
-                 v-model="form.purchaserId"
+                 v-model="form.checkPerson"
                  @selfChange="handleDirectorChange"
                  :init="false"
                />
@@ -54,11 +54,18 @@
     components: { deptSelect , personSelect },
     data() {
       return {
-
-
       };
     },
-
+    watch: {
+      form(data) {
+        if (data.checkDepart) {
+           const params = { executeGroupId: data.checkDepart };
+            this.$nextTick(() => {
+              this.$refs.directorRef.getList(params);
+            });
+        }
+      }
+    },
     methods: {
       // 选择所属部门
       searchDeptNodeClick (id, info) {

+ 2 - 2
src/views/material/manage/components/RemarkInfo.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="other">
-    <!-- <el-form label-width="120px"  ref="form" :model="form">
+    <el-form label-width="120px"  ref="form" :model="form">
          <div class="divider">
            <div class="title">
              <div class="ele-bg-primary"></div>
@@ -20,7 +20,7 @@
              </el-form-item>
            </el-col>
          </el-row>
-      </el-form> -->
+      </el-form>
   </div>
 </template>
 

+ 10 - 10
src/views/material/manage/components/TurnoverInfo.vue

@@ -10,32 +10,32 @@
          </div>
          <el-row :gutter="24">
            <el-col :span="8">
-             <el-form-item label="层数" prop="fixedNum">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="层数" prop="levelNum">
+                <el-input  v-model="form.levelNum"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="材质" prop="lossRate">
-                <el-input  v-model="form.fixedNum"/>
+             <el-form-item label="材质" prop="materialQuality">
+                <el-input  v-model="form.materialQuality"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="长" prop="fixedNum">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="长" prop="vehicleLen">
+                <el-input v-model="form.vehicleLen">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="宽" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="宽" prop="wilde">
+                <el-input v-model="form.wilde">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="高" prop="consumeWave">
-                <el-input v-model="form.lossRate">
+             <el-form-item label="高" prop="hight">
+                <el-input v-model="form.hight">
                     <template slot="append">mm</template>
                 </el-input>
              </el-form-item>

+ 12 - 12
src/views/material/manage/components/WarehouseInfo.vue

@@ -11,18 +11,18 @@
          <el-row :gutter="24">
            <el-col :span="8">
              <el-form-item label="启用库存预警">
-                <el-radio v-model="form.warning" label="1">是</el-radio>
-                <el-radio v-model="form.warning" label="0">否</el-radio>
+                <el-radio v-model="form.isWarn" :label="1">是</el-radio>
+                <el-radio v-model="form.isWarn" :label="0">否</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="允许拆包" prop="isUnpacking">
-                <el-switch v-model="form.isUnpacking"> </el-switch>
+             <el-form-item label="允许拆包" prop="isUnpack">
+                <el-switch v-model="form.isUnpack" :active-value="1" :inactive-value="0"> </el-switch>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="安全库存" prop="safeStock">
-                <el-input  v-model="form.safeStock"/>
+             <el-form-item label="安全库存" prop="secureInventory">
+                <el-input  v-model="form.secureInventory"/>
              </el-form-item>
            </el-col>
            <el-col :span="8">
@@ -37,21 +37,21 @@
            </el-col>
            <el-col :span="8">
              <el-form-item label="盘点模式" prop="inventoryMode">
-               <el-radio v-model="form.inventoryMode" label="1">逐个盘点</el-radio>
-               <el-radio v-model="form.inventoryMode" label="2">批量盘点</el-radio>
+               <el-radio v-model="form.inventoryMode" :label="1">逐个盘点</el-radio>
+               <el-radio v-model="form.inventoryMode" :label="2">批量盘点</el-radio>
              </el-form-item>
            </el-col>
            <el-col :span="8">
-             <el-form-item label="质保预警参考" prop="qualityAssurance">
-                <DictSelection dictName="质保预警参考" clearable v-model="form.qualityAssurance">
+             <el-form-item label="质保预警参考" prop="warrantyWarnRefer">
+                <DictSelection dictName="质保预警参考" clearable v-model="form.warrantyWarnRefer">
                 </DictSelection>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="保质期">
                 <div class="form-line">
-                  <el-input  v-model="form.date"/>
-                  <DictSelection class="line-select" dictName="保质期单位" clearable v-model="form.dateUnit">
+                  <el-input  v-model="form.warrantyPeriod"/>
+                  <DictSelection class="line-select" dictName="保质期单位" clearable v-model="form.warrantyPeriodUnit">
                   </DictSelection>
                 </div>
              </el-form-item>

+ 74 - 21
src/views/material/manage/manageMaterial.vue

@@ -134,23 +134,19 @@
     <!-- 分类选择弹窗 -->
     <CategoryDialog ref="categoryRefs" @chooseCategory='confirmCategory'/>
     <!-- 仓储配置 -->
-    <WarehouseInfo ref="warehouseRefs" :form="form"/>
-   <!-- 采购 -->
-    <ProcureInfo ref="procureRefs" :form="form"/>
+    <WarehouseInfo ref="warehouseRefs" :form="categoryWms"/>
     <!-- 生产信息 -->
-     <ProductionInfo ref="productionRefs" :form="form"/>
+     <ProductionInfo ref="productionRefs" :form="categoryMes"/>
      <!-- 计划 -->
-     <PlanInfo ref="planRefs" :form="form"/>
-     <!-- 销售信息 -->
-     <SalesInfo ref="salesRefs" :form="form"/>
+     <PlanInfo ref="planRefs" :form="categoryAps"/>
      <!-- 质量配置 -->
-     <QualityInfo ref="qualityRefs" :form="form"/>
+     <QualityInfo ref="qualityRefs" :form="categoryQms"/>
      <!-- 舟皿信息 -->
-     <BoatInfo ref="qualityRefs" :form="form"/>
+     <BoatInfo ref="qualityRefs" :form="categoryPallet"/>
      <!-- 周转车信息 -->
-     <TurnoverInfo ref="turnoverRefs" :form="form"/>
+     <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle"/>
      <!-- 模具信息 -->
-     <MoldInfo ref="moldRefs" :form="form"/>
+     <MoldInfo ref="moldRefs" :form="categoryMold"/>
      <!-- 备注信息 -->
      <RemarkInfo ref="remarkRefs" :form="remarkform"/>
   </div>
@@ -160,10 +156,10 @@
   import GroupDialog from './components/GroupDialog.vue';
   import CategoryDialog from './components/CategoryDialog.vue';
   import WarehouseInfo from './components/WarehouseInfo.vue';
-  import ProcureInfo from './components/ProcureInfo.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 SalesInfo from './components/SalesInfo.vue';
   import QualityInfo from './components/QualityInfo.vue';
   import BoatInfo from './components/BoatInfo.vue';
   import TurnoverInfo from './components/TurnoverInfo.vue';
@@ -177,8 +173,8 @@
   export default {
     name: 'ManageMaterial',
     components: {
-      GroupDialog , deptSelect , personSelect , WarehouseInfo , ProcureInfo ,ProductionInfo ,
-      PlanInfo , SalesInfo , QualityInfo , BoatInfo , TurnoverInfo , MoldInfo , RemarkInfo , CategoryDialog
+      GroupDialog , deptSelect , personSelect , WarehouseInfo , ProductionInfo ,
+      PlanInfo , QualityInfo , BoatInfo , TurnoverInfo , MoldInfo , RemarkInfo , CategoryDialog
     },
     data() {
       const defaultForm = {
@@ -188,9 +184,16 @@
       return {
          loading:false,
          form:{...defaultForm},
+         categoryAps:{},
+         categoryMes:{},
+         categoryMold:{},
+         categoryPallet:{},
+         categoryQms:{},
+         categoryVehicle:{},
          remarkform:{
            remarkAttach:[]
          },
+         categoryWms:{},
          chooseItem:null,
          PathInfo:{},
          titileStatus:1
@@ -230,8 +233,9 @@
         getDetailInfo(id).then(res=>{
            const info = deepClone(res)
            this.form = {
-             ...info
+             ...info.category
            }
+           this.judgeSet(info)
            delete this.form.remarkAttach
            delete this.form.remark
            // this.$set(this.remarkform,'remarkAttach',info.remarkAttach)
@@ -243,6 +247,46 @@
            }
         })
       },
+
+      // 判断字段类型并赋值
+      judgeSet(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
+         }
+      },
+
       // 选择所属部门
       searchDeptNodeClick (id, info) {
         // 根据部门获取人员
@@ -311,12 +355,21 @@
           }
           this.loading = true;
           const data = {
-            ...this.form,
-            ...this.remarkform,
-            ...this.PathInfo
+            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
+            }
           };
-          const saveOrUpdate = this.form.id ? editMaterial : addMaterial;
-          saveOrUpdate(data)
+          // const saveOrUpdate = this.form.id ? editMaterial : addMaterial;
+          addMaterial(data)
             .then((msg) => {
               this.loading = false;
               this.$message.success(msg);

+ 93 - 32
src/views/material/product/detail.vue

@@ -141,23 +141,19 @@
     <!-- 分类选择弹窗 -->
     <CategoryDialog ref="categoryRefs" @chooseCategory="confirmCategory" />
     <!-- 仓储配置 -->
-    <WarehouseInfo ref="warehouseRefs" :form="form" />
-    <!-- 采购 -->
-    <ProcureInfo ref="procureRefs" :form="form" />
+    <WarehouseInfo ref="warehouseRefs" :form="categoryWms" />
     <!-- 生产信息 -->
-    <ProductionInfo ref="productionRefs" :form="form" />
+    <ProductionInfo ref="productionRefs" :form="categoryMes" />
     <!-- 计划 -->
-    <PlanInfo ref="planRefs" :form="form" />
-    <!-- 销售信息 -->
-    <SalesInfo ref="salesRefs" :form="form" />
+    <PlanInfo ref="planRefs" :form="categoryAps" />
     <!-- 质量配置 -->
-    <QualityInfo ref="qualityRefs" :form="form" />
+    <QualityInfo ref="qualityRefs" :form="categoryQms" />
     <!-- 舟皿信息 -->
-    <BoatInfo ref="qualityRefs" :form="form" />
+    <BoatInfo ref="qualityRefs" :form="categoryPallet" />
     <!-- 周转车信息 -->
-    <TurnoverInfo ref="turnoverRefs" :form="form" />
+    <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle" />
     <!-- 模具信息 -->
-    <MoldInfo ref="moldRefs" :form="form" />
+    <MoldInfo ref="moldRefs" :form="categoryMold" />
     <!-- 备注信息 -->
     <RemarkInfo ref="remarkRefs" :form="remarkform" />
     <!-- 关联信息 -->
@@ -182,7 +178,8 @@
   import personSelect from '@/components/CommomSelect/person-select.vue';
   import linkMsg from './components/link-msg.vue';
   import { getDetails } from '@/api/classifyManage/itemInformation';
-  import { editMaterial } from '@/api/material/manage.js';
+  import { addMaterial } from '@/api/material/manage.js';
+  import { deepClone } from '@/utils/index';
   export default {
     name: 'ManageMaterial',
     components: {
@@ -209,7 +206,16 @@
           categoryLevelGroupName: '',
           categoryLevelName: ''
         },
-        remarkform: {},
+        remarkform: {
+          remarkAttach:[]
+        },
+        categoryAps:{},
+        categoryMes:{},
+        categoryMold:{},
+        categoryPallet:{},
+        categoryQms:{},
+        categoryVehicle:{},
+        categoryWms:{},
         // 表单验证规则
         rules: {
           categoryLevelGroupName: [
@@ -223,7 +229,8 @@
           measuringUnit: [
             { required: true, message: '请选择计量单位', trigger: 'change' }
           ]
-        }
+        },
+        PathInfo:{},
       };
     },
     created () {
@@ -232,10 +239,51 @@
     methods: {
       async _getDetails () {
         const data = await getDetails(this.$route.query.id);
-        this.form = data;
-
+        const info = deepClone(data)
+        this.form = {
+          ...info.category
+        }
+        this.judgeSet(info)
         this.searchDeptNodeClick(this.form.deptLeaderId);
       },
+      // 判断字段类型并赋值
+      judgeSet(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
+         }
+      },
       // 选择所属部门
       searchDeptNodeClick (id, info) {
         // 根据部门获取人员
@@ -247,7 +295,7 @@
       //选择负责人
       handleDirectorChange (id, info) {},
       // 确定分类
-      confirmCategory (node, title) {
+      confirmCategory (node, title,PathInfo) {
         if (title == '选择产品分类') {
           this.$set(this.form, 'productCategoryLevelName', node.name);
           this.$set(this.form, 'productCategoryLevelId', node.id);
@@ -256,6 +304,7 @@
           this.$set(this.form, 'categoryLevelId', node.id);
           this.$set(this.form, 'categoryLevelPath', node.name);
           this.$set(this.form, 'categoryLevelPathId', node.id);
+          this.PathInfo = PathInfo
         }
       },
       openCategory () {
@@ -272,26 +321,38 @@
             return false;
           }
           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 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 = {
-            ...this.form
+            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
+            }
           };
-          editMaterial(data)
+          addMaterial(data)
             .then((msg) => {
               this.loading = false;
               this.$message.success(msg);
-              this.updateVisible(false);
-              this.$emit('done');
+              finishPageTab()
+              reloadPageTab({ fullPath: '/material/product' });
+              this.$router.go(-1)
             })
             .catch((e) => {
               this.loading = false;

+ 8 - 1
src/views/material/product/index.vue

@@ -26,7 +26,14 @@
           >
             <!-- 表头工具栏 -->
             <template v-slot:action="{ row }">
-              <el-link type="primary" @click="handleEdit(row)">编辑</el-link>
+              <el-link
+                type="primary"
+                :underline="false"
+                icon="el-icon-edit"
+                @click="handleEdit(row)"
+              >
+                修改
+              </el-link>
             </template>
           </ele-pro-table>
         </template>

+ 1 - 2
src/views/material/productLinkMaterial/components/product-search.vue

@@ -28,7 +28,7 @@
         </el-form-item>
       </el-col>
       <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
-        <el-form-item>
+        <el-form-item label-width="0">
           <el-button
             type="primary"
             icon="el-icon-search"
@@ -37,7 +37,6 @@
           >
             查询
           </el-button>
-
           <el-button
             @click="reset"
             icon="el-icon-refresh"

+ 304 - 0
src/views/technology/version/components/link-material-dialog.vue

@@ -0,0 +1,304 @@
+<template>
+  <ele-modal :visible.sync="visible" :title="`给工序【${row.code}${row.name}】分配物料`" width="90%" @close="cancel">
+    <el-row :gutter="40">
+      <el-col :span="12">
+        <headerTitle>
+          <template v-slot:title>
+            可分配
+            <el-button
+              type="primary"
+              class="ml20"
+              size="mini"
+              @click="handleConect"
+              >分配</el-button
+            >
+          </template>
+        </headerTitle>
+        <ele-pro-table
+          ref="table"
+          :columns="columns"
+          :datasource="datasourceShow"
+          :selection.sync="selection"
+          cache-key="link-material-dialog"
+          height="45vh"
+          :initLoad="false"
+          :need-page="false"
+        >
+        </ele-pro-table>
+      </el-col>
+      <el-col :span="12">
+        <headerTitle>
+          <template v-slot:title>
+            已关联
+            <el-button
+              type="primary"
+              class="ml20"
+              size="mini"
+              @click="handleCancelConect"
+              >取消分配</el-button>
+          </template>
+        </headerTitle>
+        <ele-pro-table
+          ref="tableRight"
+          :columns="columnsRight"
+          :datasource="datasourceRightShow"
+          :selection.sync="selectionRight"
+          height="45vh"
+          :initLoad="false"
+          :need-page="false"
+          cache-key="link-material-dialog-right"
+        >
+          <template v-slot:capacity="{ row }">
+            <el-row>
+              <el-col :span="8">
+                <el-input v-model="row.quantity"></el-input
+              ></el-col>
+              <el-col :span="8">
+                <DictSelection
+                  class="line-select"
+                  dictName="重量单位"
+                  clearable
+                  v-model="row.quantityUnitId"
+                >
+                </DictSelection
+              ></el-col>
+              <el-col :span="8">
+                <DictSelection
+                  class="line-select"
+                  dictName="提前期单位"
+                  clearable
+                  v-model="row.timeUnit"
+                >
+                </DictSelection
+              ></el-col>
+            </el-row>
+          </template>
+          <template v-slot:angle="{ row }">
+            <DictSelection dictName="角度" clearable v-model="row.angle">
+            </DictSelection>
+          </template> </ele-pro-table
+      ></el-col>
+    </el-row>
+
+    <div slot="footer" class="footer">
+      <el-button type="primary" @click="save">保存</el-button>
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+  import {
+    getRelatesInformationList,
+    unassociated,
+    productTieUpMaterial
+  } from '@/api/material/product.js';
+  import dictMixins from '@/mixins/dictMixins';
+  import categorySelect from '@/components/CommomSelect/category-select.vue';
+  export default {
+    mixins: [dictMixins],
+    components: { categorySelect },
+    data () {
+      return {
+        visible: false,
+        row: {},
+        datasource: [],
+        datasourceShow: [],
+        datasourceRightShow: [],
+        datasourceRight: [],
+        selectionRight: [],
+        selection: [],
+        whereRight: {},
+        where: {},
+        type: '',
+        idMap: {
+          8: '1678278350275198977',
+          4: '1678277959244431361',
+          5: '1678277781556936705'
+        }
+      };
+    },
+    created () {
+      // this.requestDict('类型用途');
+    },
+    computed: {
+      // catogaryName () {
+      //   return this.getDictValue('类型用途', this.type);
+      // },
+      dict () {},
+      columns () {
+        return [
+          {
+            type: 'selection',
+            align: 'center'
+          },
+          {
+            label: '子项编号',
+            prop: 'categoryLevelGroupName'
+          },
+          {
+            label: '子项物料编码',
+            prop: 'code'
+          },
+          {
+            label: '子项物料名称',
+            prop: 'name'
+          },
+          {
+            label: '基本数量',
+            prop: 'modelType'
+          },
+          {
+            label: '单位',
+            prop: 'unit'
+          }
+        ];
+      },
+      columnsRight () {
+        return [
+          {
+            type: 'selection',
+            align: 'center'
+          },
+          {
+            label: '子项编号',
+            prop: 'categoryLevelGroupName'
+          },
+          {
+            label: '子项物料编码',
+            prop: 'code'
+          },
+          {
+            label: '子项物料名称',
+            prop: 'name'
+          },
+          {
+            label: '基本数量',
+            prop: 'modelType'
+          },
+          {
+            label: '单位',
+            prop: 'unit'
+          }
+        ];
+      }
+    },
+    methods: {
+      open (row) {
+        this.row = row;
+        this.getDatasource();
+        this.getDatasourceRight();
+        this.visible = true;
+      },
+      cancel () {
+        this.visible = false;
+      },
+      async save () {
+        if (!this.datasourceRightShow.length) {
+          return this.$message.error('请添加关联数据');
+        }
+        const params = {
+          mainCategoryId: this.row.categoryLevelId,
+          mainCategoryLevelRootId: this.row.categoryLevelGroupId,
+          materialDetailsPOList: this.datasourceRightShow.map((i) => ({
+            ...i,
+            categoryLevelRootId: this.type
+          }))
+        };
+        await productTieUpMaterial(params);
+        this.cancel();
+
+        this.$message.success('操作成功!');
+        this.$emit('success');
+      },
+      handleConect () {
+        if (!this.selection.length) {
+          return this.$message.error('请选择关联数据');
+        }
+        this.datasource = this.datasource.filter((i) =>
+          this.selection.find((t) => t.categoryId != i.categoryId)
+        );
+        this.datasourceShow = this.datasourceShow.filter((i) =>
+          this.selection.find((t) => t.categoryId != i.categoryId)
+        );
+
+        this.datasourceRightShow.push(...this.selection);
+        this.datasourceRight.push(...this.selection);
+
+        this.selection = [];
+      },
+      handleCancelConect () {
+        if (!this.selectionRight.length) {
+          return this.$message.error('请选择取消关联数据');
+        }
+
+        this.datasourceRight = this.datasourceRight.filter((i) =>
+          this.selectionRight.find((t) => t.categoryId != i.categoryId)
+        );
+        this.datasourceRightShow = this.datasourceRightShow.filter((i) =>
+          this.selectionRight.find((t) => t.categoryId != i.categoryId)
+        );
+
+        this.datasourceShow.push(...this.selectionRight);
+        this.datasource.push(...this.selectionRight);
+
+        this.selectionRight = [];
+      },
+      reload () {
+        this.datasourceShow = this.datasource.filter((item) => {
+          return (
+            (!this.where.categoryLevelGroupId ||
+              item.categoryLevelGroupId.includes(
+                this.where.categoryLevelGroupId
+              )) &&
+            (!this.where.code || item.code.includes(this.where.code)) &&
+            (!this.where.name || item.name.includes(this.where.name)) &&
+            (!this.where.modelType ||
+              item.modelType.includes(this.where.modelType))
+          );
+        });
+      },
+      reloadRight () {
+        this.datasourceRightShow = this.datasourceRight.filter((item) => {
+          return (
+            (!this.whereRight.categoryLevelGroupId ||
+              item.categoryLevelGroupId.includes(
+                this.whereRight.categoryLevelGroupId
+              )) &&
+            (!this.whereRight.code ||
+              item.code.includes(this.whereRight.code)) &&
+            (!this.whereRight.name ||
+              item.name.includes(this.whereRight.name)) &&
+            (!this.whereRight.modelType ||
+              item.modelType.includes(this.whereRight.modelType))
+          );
+        });
+      },
+      async getDatasource () {
+        const data = await unassociated({
+          categoryLevelGroupId: this.idMap[this.type]
+        });
+        this.datasource = data.slice(0);
+        this.datasourceShow = data.slice(0);
+      },
+      async getDatasourceRight () {
+        const data = await getRelatesInformationList({
+          mainCategoryId: this.row.categoryLevelId,
+          // categoryLevelGroupId: this.idMap[this.type],
+          categoryLevelRootId: this.type
+        });
+        this.datasourceRight = data.slice(0);
+        this.datasourceRightShow = data.slice(0);
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .ml20 {
+    margin-left: 20px;
+  }
+  .footer {
+    text-align: right;
+  }
+</style>

+ 66 - 66
src/views/technology/version/details.vue

@@ -11,28 +11,27 @@
            <el-row>
              <el-col :span="8">
                <el-form-item label="版本号">
-                 <span>  </span>
+                 <span> {{infoData.code}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="版本名称">
-                 <span>  </span>
+                 <span> {{infoData.name}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="所属工厂">
-                 <span>
-                 </span>
+                 <span> {{infoData.factoryName}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="产品编码">
-
+                   <span> {{infoData.categoryCode}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="产品名称">
-                 <span> </span>
+                 <span> {{infoData.categoryName}} </span>
                </el-form-item>
              </el-col>
            </el-row>
@@ -42,109 +41,110 @@
            <el-row>
              <el-col :span="8">
                <el-form-item label="工艺路线编码">
-                 <span>  </span>
+                 <span> {{infoData.routingCode}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="工艺路线名称">
-                 <span>  </span>
+                 <span> {{infoData.categoryName}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="工艺路线版本">
-                 <span>
-                 </span>
+                 <span> {{infoData.routingName}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="产品BOM编码">
+                  <span> {{infoData.bomCode}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="产品BOM名称">
-                 <span> </span>
+                 <span> {{infoData.bomName}} </span>
                </el-form-item>
              </el-col>
              <el-col :span="8">
                <el-form-item label="产品BOM版本">
-                 <span> </span>
+                 <span> {{infoData.bomVersion}} </span>
                </el-form-item>
              </el-col>
            </el-row>
-           <ele-pro-table
-             ref="table"
-             :columns="columns"
-             :datasource="datasource"
-             row-key="id"
+           <el-table
+             ref="multipleTable"
+             :data="tableData"
+             tooltip-effect="dark"
+             style="width: 100%"
+             border
+             :header-cell-style="{ background: '#F0F3F3' }"
            >
-           </ele-pro-table>
+             <el-table-column prop="code" label="工序编号"/>
+             <el-table-column prop="name" label="工序名称" />
+             <el-table-column prop="controlName" label="工序控制码" />
+             <el-table-column prop="workCenterName" label="工作中心" />
+             <el-table-column label="操作">
+                <template slot-scope="{row}">
+                  <el-link
+                    type="primary"
+                    :underline="false"
+                    icon="el-icon-edit"
+                    @click="allocateMaterials(row)"
+                  >
+                    分配物料
+                  </el-link>
+                </template>
+             </el-table-column>
+           </el-table>
        </el-form>
     </el-card>
+    <linkMaterialDialog ref="linkMaterialDialogRef" @success="success" />
   </div>
 </template>
 <script>
   import dictMixins from '@/mixins/dictMixins';
-  import {  getDetail  } from '@/api/ruleManagement/matter'
-  import route from '@/api/technology/route';
+  import { versionDetail , getProcessByRoute } from '@/api/technology/version/version.js';
+  import linkMaterialDialog from './components/link-material-dialog.vue';
 export default {
   mixins: [dictMixins],
-  components: {  },
+  components: { linkMaterialDialog },
   data () {
     return {
-       // 表格列配置
-       columns: [
-         {
-           prop: 'code',
-           label: '工序编号',
-           showOverflowTooltip: true,
-           align: 'center',
-           minWidth: 110
-         },
-         {
-           prop: 'name',
-           label: '工序名称',
-           showOverflowTooltip: true,
-           align: 'center',
-           minWidth: 110
-         },
-         {
-           align: 'center',
-           prop: 'categoryCode',
-           label: '工序控制码',
-           showOverflowTooltip: true,
-           minWidth: 110
-         },
-         {
-           prop: 'categoryName',
-           label: '工作中心',
-           align: 'center',
-           showOverflowTooltip: true,
-           minWidth: 110
-         }
-       ],
+      infoData:{},
+      tableData:[]
     }
   },
   async created () {
-  //   this.getInfo()
-	 // this.requestDict('规则类型');
+    this.getInfo()
   },
   methods: {
-    /* 表格数据源 */
-    async datasource({ page, limit, where, order }) {
-      const res = await route.list({
-        ...where,
-        ...order,
-        pageNum: page,
-        size: limit
-      });
-      return res;
-    },
     async getInfo () {
-      const data = await getDetail(this.$route.query.id)
-        this.tableData = data.ruleItems
+      const data = await versionDetail(this.$route.query.id)
         this.infoData = data
+        if(data.routingId){
+            this.getProcessList()
+        }
+    },
+
+    getProcessList(){
+       let params = {
+          isDetail: false,
+          pageNum: 1,
+          routingId: this.infoData.routingId,
+          size: -1
+       }
+       getProcessByRoute(params).then(res=>{
+           this.tableData = res.list
+       })
     },
 
+    success () {
+      this.getProcessList()
+    },
+
+    // 点击分配物料
+    allocateMaterials(row){
+       this.$refs.linkMaterialDialogRef.open(row);
+    },
     goBack(){
       this.$router.go(-1)
     }