Procházet zdrojové kódy

客户退货产品处理 出入库流程

Z před 2 roky
rodič
revize
eb275740a7

+ 144 - 123
src/views/bpm/handleTask/components/saleOrder/customerReturnGoods/customerReturnOrderDialog.vue

@@ -16,8 +16,17 @@
         </div>
       </div>
     </el-card>
+    <template v-if="this.activeComp=='zzz'">
+      <repair-tabs-page
+        :isShowReturnOrder="isShowReturnOrder"
+        :taskDefinitionKey="taskDefinitionKey"
+        :activeComp="activeComp"
+        :businessId="businessId"
+        :permissionType="permissionType"></repair-tabs-page>
+    </template>
     <component
-      :is="customerReturnOrder"
+      v-else
+      :is="pageName"
       :key="key"
       ref="componentRef"
       :isShowReturnOrder="isShowReturnOrder"
@@ -30,134 +39,146 @@
 </template>
 
 <script>
-  import { EventBus } from './eventBus.js';
+import {EventBus} from './eventBus.js';
 
-  export default {
-    name: 'customerReturnOrderDialog',
-    props: {
-      taskDefinitionKey: {
-        type: String,
-        default: 'stater'
-      },
-      businessId: {
-        type: String,
-        default: ''
-      }
-    },
-    components: {
-      customerReturnOrder: () => import('./customerReturnOrder')
+export default {
+  name: 'customerReturnOrderDialog',
+  props: {
+    taskDefinitionKey: {
+      type: String,
+      default: 'stater'
     },
+    businessId: {
+      type: String,
+      default: ''
+    }
+  },
+  components: {
+    RepairTabsPage: () => import('./repair-tabs-page'),
+    customerReturnOrder: () => import('./customerReturnOrder')
+  },
 
-    data() {
-      //innerOuterBoth 1 只有内部  2 只有外部 9 都有
-      return {
-        dialogType: 'add',
-        customerReturnOrder: 'customerReturnOrder',
-        tabOptions: [
-          {
-            key: 'stater',
-            permissionType: 'update',
-            isShowReturnOrder: false,
-            name: '发起人申请'
-          },
-          {
-            key: 'deptLeader',
-            permissionType: 'view',
-            isShowReturnOrder: false,
-            name: '销售主管审批'
-          },
-          {
-            key: 'storeman',
-            permissionType: 'update',
-            isShowReturnOrder: true,
-            name: '仓管入库'
-          },
-          {
-            key: 'QCLeader',
-            permissionType: 'view',
-            isShowReturnOrder: false,
-            name: '质量部主管指派'
-          },
-          {
-            key: 'QCApprove',
-            permissionType: 'update',
-            isShowReturnOrder: false,
-            name: '质检员审核'
-          },
-          {
-            key: 'techLeader',
-            permissionType: 'view',
-            isShowReturnOrder: false,
-            name: '技术部主管指派'
-          },
-          {
-            key: 'techApprove',
-            permissionType: 'update',
-            isShowReturnOrder: false,
-            name: '技术员审核'
-          },
-          {
-            key: 'produceLeader',
-            permissionType: 'view',
-            isShowReturnOrder: false,
-            name: '生产部主管指派'
-          },
-          {
-            key: 'produceApprove',
-            permissionType: 'update',
-            isShowReturnOrder: false,
-            name: '生产员审核'
-          },
-          // { key: 'outerStoremanOut', permissionType: 'view',  name: '物品出库给外协' },
-          // { key: 'innerStoremanIn', permissionType: 'view', name: '内部生产物品入库' },
-          {
-            key: 'QCApprove2',
-            permissionType: 'update',
-            isShowReturnOrder: false,
-            name: '质检员反馈'
-          }
-        ],
-        activeComp: '',
-        permissionType: '',
-        loading: false,
-        key: 1
-      };
+  data() {
+    //innerOuterBoth 1 只有内部  2 只有外部 9 都有
+    return {
+      dialogType: 'add',
+      pageName: 'customerReturnOrder',
+      tabOptions: [
+        {
+          key: 'stater',
+          permissionType: 'update',
+          isShowReturnOrder: false,
+          name: '发起人申请'
+        },
+        {
+          key: 'deptLeader',
+          permissionType: 'view',
+          isShowReturnOrder: false,
+          name: '销售主管审批'
+        },
+        {
+          key: 'storeman',
+          permissionType: 'update',
+          isShowReturnOrder: true,
+          name: '仓管入库'
+        },
+        {
+          key: 'QCLeader',
+          permissionType: 'view',
+          isShowReturnOrder: false,
+          name: '质量部主管指派'
+        },
+        {
+          key: 'QCApprove',
+          permissionType: 'update',
+          isShowReturnOrder: false,
+          name: '质检员审核'
+        },
+        {
+          key: 'techLeader',
+          permissionType: 'view',
+          isShowReturnOrder: false,
+          name: '技术部主管指派'
+        },
+        {
+          key: 'techApprove',
+          permissionType: 'update',
+          isShowReturnOrder: false,
+          name: '技术员审核'
+        },
+        {
+          key: 'produceLeader',
+          permissionType: 'view',
+          isShowReturnOrder: false,
+          name: '生产部主管指派'
+        },
+        {
+          key: 'produceApprove',
+          permissionType: 'update',
+          isShowReturnOrder: false,
+          name: '生产员审核'
+        },
+        {key: 'zzz', permissionType: 'view', name: '返修'},
+        {
+          key: 'QCApprove2',
+          permissionType: 'update',
+          isShowReturnOrder: false,
+          name: '质检员反馈'
+        }
+      ],
+      repairTabsOptions: [
+        {key: 'outerStoremanOut', isOutOrIn: 'out', name: '物品出库给外协'},
+        {key: 'outerStoremanIn', isOutOrIn: 'out', name: '外协返修物品入库'},
+        {key: 'outerInQC', isOutOrIn: 'out', name: '外协返修入库质检'},
+        {key: 'innerStoremanIn', isOutOrIn: 'view', name: '内部生产物品入库'},
+        {key: 'innerInQC', isOutOrIn: 'update', name: '内部生产入库质检'}
+      ],
+      activeComp: '',
+      permissionType: '',
+      isShowReturnOrder: '',
+      loading: false,
+      key: 1
+    };
+  },
+  computed: {},
+  created() {
+    //返修节点中有可能多流程
+    let find = this.repairTabsOptions.find(item => item.key == this.taskDefinitionKey)?.key || '';
+    let optionKey = find ? 'zzz' : this.taskDefinitionKey
+    this.activeComp = optionKey || 'stater';
+    this.permissionType = this.tabOptions.find(
+      (item) => item.key == this.activeComp
+    )?.permissionType;
+  },
+  mounted() {
+    setTimeout(() => {
+      this.getActiveCompValue();
+    }, 400);
+  },
+  methods: {
+    getTableValue() {
+      return this.$refs.componentRef.getTableValue();
+    },
+    getReturnStorage() {
+      return this.$refs.componentRef.getReturnStorage();
     },
-    computed: {},
-    created() {
-      this.activeComp = this.taskDefinitionKey || 'stater';
-      this.permissionType = this.tabOptions.find(
-        (item) => item.key == this.activeComp
-      ).permissionType;
+    handleCard(val) {
+      this.activeComp = val.key
+      this.pageName = this.activeComp == 'zzz' ? 'RepairTabsPage' : 'customerReturnOrder';
+      this.permissionType = val.permissionType;
+      this.isShowReturnOrder = val.isShowReturnOrder;
+      this.key++;
+      this.getActiveCompValue();
     },
-    mounted() {
-      setTimeout(() => {
-        this.getActiveCompValue();
-      }, 400);
+    getActiveCompValue() {
+      EventBus.$emit('getActiveCompValue', {
+        activeComp: this.activeComp,
+        permissionType: this.permissionType
+      });
     },
-    methods: {
-      getTableValue() {
-        return this.$refs.componentRef.getTableValue();
-      },
-      getReturnStorage() {
-        return this.$refs.componentRef.getReturnStorage();
-      },
-      handleCard(val) {
-        this.activeComp = val.key;
-        this.permissionType = val.permissionType;
-        this.isShowReturnOrder = val.isShowReturnOrder;
-        this.key++;
-        this.getActiveCompValue();
-      },
-      getActiveCompValue() {
-        console.log(1111);
-        EventBus.$emit('getActiveCompValue', {
-          activeComp: this.activeComp,
-          permissionType: this.permissionType
-        });
-      },
-      async getInfo() {}
+    async getInfo() {
     }
-  };
+  }
+};
 </script>
 <style scoped lang="scss"></style>

+ 13 - 0
src/views/bpm/handleTask/components/saleOrder/customerReturnGoods/page1.vue

@@ -0,0 +1,13 @@
+<script setup>
+
+</script>
+
+<template>
+<div>
+  11111111
+</div>
+</template>
+
+<style scoped lang="scss">
+
+</style>

+ 13 - 0
src/views/bpm/handleTask/components/saleOrder/customerReturnGoods/page2.vue

@@ -0,0 +1,13 @@
+<script setup>
+
+</script>
+
+<template>
+  <div>
+    22222
+  </div>
+</template>
+
+<style scoped lang="scss">
+
+</style>

+ 275 - 0
src/views/bpm/handleTask/components/saleOrder/customerReturnGoods/repair-tabs-page.vue

@@ -0,0 +1,275 @@
+<template>
+  <div>
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane v-for="item in tabOption" :label="item.label" :name="item.name">
+        <el-tabs v-if="childrenActiveName" v-model="childrenActiveName" @tab-click="handleChildrenClick">
+          <el-tab-pane v-for="i in item.children" :label="i.label" :name="i.name">
+          </el-tab-pane>
+        </el-tabs>
+      </el-tab-pane>
+    </el-tabs>
+
+    <component
+      :is="childrenActiveName"
+      :form="form"
+      ref="componentRef"
+      :taskDefinitionKey="taskDefinitionKey"
+      :activeComp="activeName"
+      :businessId="businessId"
+      :permissionType="childrenActiveName"
+    />
+  </div>
+</template>
+
+
+<script>
+import {getOutInByIdAPI, saleReturnGetByIdAPI} from "@/api/bpm/components/saleManage/saleorder";
+import {deepClone} from "@/utils";
+
+export default {
+  name: 'repairTabsPage',
+  components: {
+    outerStoremanOut: () => import('./page1.vue'),
+    outerStoremanIn: () => import('./page2.vue'),
+    outerInQC: () => import('./page1.vue'),
+    innerStoremanIn: () => import('./page2.vue'),
+    innerInQC: () => import('./page1.vue'),
+  },
+  props: {
+    taskDefinitionKey: {
+      type: String,
+      default: ''
+    },
+    activeComp: {
+      type: String,
+      default: ''
+    },
+    permissionType: {
+      type: String,
+      default: 'view'
+    },
+    businessId: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+      activeName: '',
+      childrenActiveName: '',
+      warehousingMaterialList: [],
+      materialCodeReqList: [],
+      metaList: [],
+      form: {
+        detailList: []
+      },
+    }
+  },
+  computed: {
+    tabOption() {
+      let list = []
+      let params = {
+        '1': [
+          {
+            label: '内部',
+            name: '1',
+            childrenActiveName: ['innerStoremanIn', 'innerInQC'],
+            children: [
+              {
+                label: '内部生产物品入库',
+                name: 'innerStoremanIn',
+              },
+              {
+                label: '内部生产入库质检',
+                name: 'innerInQC',
+              },
+            ]
+          }
+        ],
+        '2': [
+          {
+            label: '外部',
+            name: '2',
+            childrenActiveName: ['outerStoremanOut', 'outerStoremanIn', 'outerInQC'],
+            children: [
+              {
+                label: '物品出库给外协',
+                name: 'outerStoremanOut',
+              },
+              {
+                label: '外协返修物品入库',
+                name: 'outerStoremanIn',
+              },
+              {
+                label: '外协返修入库质检',
+                name: 'outerInQC',
+              },
+            ],
+          }
+        ],
+
+        '9': [
+          {
+            label: '内部',
+            name: '1',
+            childrenActiveName: ['innerStoremanIn', 'innerInQC'],
+            children: [
+              {
+                label: '内部生产物品入库',
+                name: 'innerStoremanIn',
+              },
+              {
+                label: '内部生产入库质检',
+                name: 'innerInQC',
+              },
+            ]
+          },
+          {
+            label: '外部',
+            name: '2',
+            childrenActiveName: ['outerStoremanOut', 'outerStoremanIn', 'outerInQC'],
+            children: [
+              {
+                label: '物品出库给外协',
+                name: 'outerStoremanOut',
+              },
+              {
+                label: '外协返修物品入库',
+                name: 'outerStoremanIn',
+              },
+              {
+                label: '外协返修入库质检',
+                name: 'outerInQC',
+              },
+            ],
+          },
+
+        ],
+      }
+      this.form.innerOuterBoth && params[this.form.innerOuterBoth] && list.push(...params[this.form.innerOuterBoth])
+      let find = list.find(item => item.childrenActiveName.includes(this.taskDefinitionKey))?.name
+      this.activeName = find ? find + '' : ''
+      return list
+    }
+  },
+  async created() {
+    await this.getReturnInfo(this.businessId)
+    this.childrenActiveName = this.taskDefinitionKey
+  },
+  methods: {
+    async getReturnInfo(businessId) {
+      this.form = await saleReturnGetByIdAPI(businessId);
+      let outInIds = [
+        ...new Set(this.form?.detailList?.map((item) => item.outInId))
+      ];
+      for (const outInId of outInIds) {
+        //拼接信息
+        const data = await getOutInByIdAPI(outInId);
+        this.infoData = deepClone(data);
+        //出库物料明细
+        this.warehousingMaterialList = this.infoData?.outInDetailVOList || [];
+        //出库包装明细
+        if (this.warehousingMaterialList.length) {
+          this.materialCodeReqList = [];
+          this.warehousingMaterialList.forEach((item) => {
+            if (item.outInDetailRecordVOList?.length) {
+              item.outInDetailRecordVOList = item.outInDetailRecordVOList.map(
+                (i) => {
+                  return {
+                    ...i,
+                    outInCode: this.infoData.bizNo,
+                    outInId: item.outInId,
+                    measurementCount: i.totalCount,
+                    outboundDetailId: i.id,
+                    outboundType: 1,
+                    packageCount: i.packingCount,
+                    packingUnit: i.packingUnit,
+                    weight: i.weight,
+                    specification: item.specification,
+                    name: i.name,
+                    categoryCode: i.categoryCode,
+                    id: ''
+                  };
+                }
+              );
+              this.materialCodeReqList.push(...item.outInDetailRecordVOList);
+            }
+          });
+          //出库物料明细
+          if (this.materialCodeReqList.length) {
+            this.metaList = [];
+            this.materialCodeReqList.forEach((item) => {
+              if (item.outInDetailRecordMaterialDetailVOList?.length) {
+                item.outInDetailRecordMaterialDetailVOList =
+                  item.outInDetailRecordMaterialDetailVOList.map((i) => {
+                    return {
+                      ...i,
+                      outInId: item.outInId,
+                      outInCode: item.outInCode,
+                      measurementCount: 1,
+                      outboundDetailId: i.id,
+                      outboundType: 2,
+                      packageCount: i.packingCount,
+                      packingUnit: i.packingUnit,
+                      weight: i.weight,
+                      weightUtil: i.weightUnit,
+                      specification: item.specification,
+                      categoryCode: i.assetCode,
+                      name: i.assetName,
+                      id: ''
+                    };
+                  });
+                this.metaList.push(
+                  ...item.outInDetailRecordMaterialDetailVOList
+                );
+              }
+            });
+          }
+        }
+        this.form.detailList.forEach((item) => {
+          if (item.outboundType == 1) {
+            let find =
+              this.materialCodeReqList.find(
+                (i) => i.outboundDetailId == item.outboundDetailId
+              ) || {};
+            item.name = find.name;
+            item.categoryCode = find.categoryCode;
+            item.specification = find.specification;
+            item.weightUtil = find.weightUtil;
+            item.packingUnit = find.packingUnit;
+            item.measuringUnit = find.measuringUnit;
+          } else {
+            let find =
+              this.metaList.find(
+                (i) => i.outboundDetailId == item.outboundDetailId
+              ) || {};
+            item.name = find.name;
+            item.categoryCode = find.categoryCode;
+            item.specification = find.specification;
+            item.weightUtil = find.weightUtil;
+            item.packingUnit = find.packingUnit;
+            item.measuringUnit = find.measuringUnit;
+          }
+          item.unqualifiedTypeList = item.unqualifiedType
+            ? item.unqualifiedType?.split(',')
+            : [];
+        });
+      }
+      // console.log(this.form);
+      // this.$nextTick(() => {
+      //   this.$refs.table.reRenderTable();
+      // });
+    },
+    handleClick(val) {
+      this.activeName = val.name
+      this.childrenActiveName = this.tabOption.find(item => item.name == val.name).children[0].name
+    },
+    handleChildrenClick(val) {
+
+    }
+  }
+}
+</script>
+<style scoped lang="scss">
+
+</style>