Jelajahi Sumber

退货单组件优化:新增选择列及相关处理逻辑,完善来源类型条件渲染和表格数据合并

yusheng 9 bulan lalu
induk
melakukan
dc8cbd4c6f

+ 60 - 8
src/BIZComponents/innerdetails.vue

@@ -99,9 +99,17 @@
             border
             :max-height="300"
             :header-cell-style="rowClass"
+            @selection-change="handleSelectionProductChange"
           >
             <el-table-column label="序号" type="index" width="50">
             </el-table-column>
+            <el-table-column
+              type="selection"
+              width="55"
+              align="center"
+              :selectable="selectable"
+            >
+            </el-table-column>
             <el-table-column
               label="编码"
               prop="categoryCode"
@@ -166,11 +174,7 @@
               </template>
             </el-table-column> -->
 
-            <el-table-column
-              label="数量"
-              prop="packingQuantity"
-              align="center"
-            >
+            <el-table-column label="数量" prop="packingQuantity" align="center">
               <template slot-scope="{ row, $index }">
                 {{ row.packingQuantity }} {{ row.packingUnit }}
               </template>
@@ -269,7 +273,12 @@
           >
             <el-table-column label="序号" type="index" width="50">
             </el-table-column>
-            <el-table-column type="selection" width="55" align="center">
+            <el-table-column
+              type="selection"
+              width="55"
+              align="center"
+              :selectable="selectablePick"
+            >
             </el-table-column>
 
             <el-table-column
@@ -516,6 +525,8 @@
         pageSize: 20,
         pickingPageNum: 1,
         materielPageNum: 1,
+        productSelection: [],
+        multipleSelection: [],
         codeList: [],
         infoData: {},
         // stepsTitle: '已完成',
@@ -557,6 +568,19 @@
       this._getInfo();
     },
     methods: {
+      selectable(row, index) {
+        let arr = this.multipleSelection.map((item) => {
+          return item.batchNo + item.categoryId;
+        });
+        return !arr.includes(row.batchNo + row.categoryId);
+      },
+      selectablePick(row, index) {
+        let arr = this.productSelection.map((item) => {
+          return item.batchNo + item.categoryId;
+        });
+        return !arr.includes(row.batchNo + row.categoryId);
+      },
+
       // 获取动态表头
       getFieldModel() {
         fieldModelAPI({ fieldModel: 't_main_category' }).then((res) => {
@@ -742,7 +766,11 @@
       handleSelectionChange(val) {
         this.multipleSelection = val;
       },
-      getValue() {
+      handleSelectionProductChange(val) {
+        this.productSelection = val;
+      },
+
+      setMultipleSelection() {
         return this.multipleSelection.map((item) => {
           item['packageId'] = item.id;
           item['outInCode'] = item.bizNo;
@@ -762,7 +790,31 @@
 
           item.id = '';
           return item;
-        });
+        })||[]
+      },
+      setProductSelection() {
+        return (
+          this.productSelection.map((item) => {
+            item['outInCode'] = item.bizNo;
+            item['wmsOutId'] = item.outInId;
+            item['wmsOutNo'] = item.bizNo;
+            item['outboundType'] = item.outType;
+            // item['outboundDetailId'] = item.id;
+            item['productName'] = item.categoryName;
+            item['productCode'] = item.categoryCode;
+            item['measuringUnit'] = item.measureUnit;
+            item['productId'] = item.categoryId;
+            item['receiveTotalWeight'] = item.weight;
+            item['provenance'] = item['provenance'] || [];
+
+            item.id = '';
+            return item;
+          }) || []
+        );
+      },
+
+      getValue() {
+        return [...this.setMultipleSelection(), ...this.setProductSelection()];
       },
       download(row) {
         if (row.storePath) {

+ 6 - 1
src/views/saleManage/saleOrder/returnGoods/components/addReturnGoodsDialog.vue

@@ -509,6 +509,7 @@
             return;
           }
 
+        this.getOrderOption(data);
           this.$nextTick(() => {
             let { code, id, productList, contactId, contactName } = data;
             if (productList && productList.length > 0) {
@@ -529,9 +530,13 @@
               entrustedReceiveCode: code
             });
             this.handleSelectGoods();
+          
             this.$refs.inventoryTableDetailsRef &&
               this.$refs.inventoryTableDetailsRef.putTableValue(
-                data.productList
+                data.productList.map(item=>{
+                  item['extField']=item.extField||[]
+                  return item
+                })
               );
           });
         }

+ 38 - 26
src/views/saleManage/saleOrder/returnGoods/components/detailDialog.vue

@@ -15,14 +15,16 @@
     <div class="switch">
       <div class="switch_left">
         <ul>
-          <li
-            v-for="item in tabOptions"
-            :key="item.key"
-            :class="{ active: activeComp == item.key }"
-            @click="handleTag(item.key)"
-          >
-            {{ item.name }}
-          </li>
+          <template v-for="item in tabOptions">
+            <li
+            v-if="item.key"
+              :key="item.key"
+              :class="{ active: activeComp == item.key }"
+              @click="handleTag(item.key)"
+            >
+              {{ item.name }}
+            </li>
+          </template>
         </ul>
       </div>
     </div>
@@ -132,7 +134,7 @@
       <ele-pro-table
         ref="table"
         @columns-change="handleColumnChange"
-         :cache-key="cacheKeyUrl"
+        :cache-key="cacheKeyUrl"
         :needPage="false"
         :columns="columns"
         :maxHeight="250"
@@ -199,25 +201,19 @@
   import { levelList } from '@/enum/dict.js';
 
   export default {
-    mixins: [dictMixins,tabMixins],
+    mixins: [dictMixins, tabMixins],
     components: {
       outBoundDetails,
       bpmDetail,
       inventoryTabledetail,
       customerReturnOrderDetail,
-      inventorySaleOrderTableDetails,
+      inventorySaleOrderTableDetails
       // fileMain
     },
     data() {
       return {
         activeComp: 'main',
-        tabOptions: [
-          { key: 'main', name: '退货单详情' },
-          { key: 'bpm', name: '流程详情' },
-          // {key: 'store', name: '出库单详情'},
-          { key: 'cMain', name: '退货处理单详情' },
-          { key: 'cBpm', name: '退货处理单流程详情' }
-        ],
+
         fullscreen: false, //全屏
         cacheKeyUrl: 'eos-saleManage-returnorder-inventoryTable',
         reviewStatusEnum,
@@ -451,14 +447,24 @@
     created() {
       this.requestDict('产地');
       this.requestDict('商品价格类型');
-
+    },
+    computed: {
+      tabOptions() {
+        return [
+          { key: 'main', name: '退货单详情' },
+          { key: 'bpm', name: '流程详情' },
+          this.form?.reviewStatus == 2 && this.form?.returnSourceType != 1
+            ? { key: 'store', name: '出库单详情' }
+            : '',
+          { key: 'cMain', name: '退货处理单详情' },
+          { key: 'cBpm', name: '退货处理单流程详情' }
+        ];
+      }
     },
     methods: {
-
       async open(row) {
         //this.form = row;
-        this.activeComp='main',
-        this.visible = true;
+        (this.activeComp = 'main'), (this.visible = true);
         this.getDetailData(row.id);
         this.detailId = row.id;
         if (row.handleReceiptId) {
@@ -474,10 +480,9 @@
         this.activeComp = val;
         if (val == 'store') {
           this.$nextTick(() => {
-            this.$refs.outBoundDetailsRef._getInfo(this.form.orderNo);
+            this.$refs.outBoundDetailsRef._getInfo(this.form.returnNo);
           });
         }
-    
       },
       cancel() {
         this.$nextTick(() => {
@@ -497,7 +502,9 @@
         const data = await getSendSaleOrderrecordDetailSplit(id);
         this.$nextTick(() => {
           this.$refs.inventorySaleOrderTableDetailsRef &&
-            this.$refs.inventorySaleOrderTableDetailsRef.putTableValue(data.productList);
+            this.$refs.inventorySaleOrderTableDetailsRef.putTableValue(
+              data.productList
+            );
         });
       },
       //受托收货单详情
@@ -505,7 +512,12 @@
         const data = await getPSaleEntrustedReceiveDetailAPI(id);
         this.$nextTick(() => {
           this.$refs.inventorySaleOrderTableDetailsRef &&
-            this.$refs.inventorySaleOrderTableDetailsRef.putTableValue(data.productList);
+            this.$refs.inventorySaleOrderTableDetailsRef.putTableValue(
+              data.productList.map((item) => {
+                item['extField'] = item.extField || [];
+                return item;
+              })
+            );
         });
       },
 

+ 6 - 12
src/views/saleManage/saleOrder/returnGoods/components/inventoryTable.vue

@@ -9,7 +9,6 @@
       :cache-key="cacheKeyUrl"
       class="time-form"
       :maxHeight="250"
-
     >
       <!-- 表头工具栏 -->
       <template v-slot:toolbar>
@@ -586,17 +585,12 @@
       totalAmount() {
         let num = 0;
         this.form.datasource.forEach((item, index) => {
-          if (item.pricingWay == 1) {
-            this.$set(
-              this.form.datasource[index],
-              'totalPrice',
-              item.singlePrice * item.totalCount || 0
-            );
-          }
-
-          if (item.totalPrice) {
-            num += Number(item.totalPrice);
-          }
+          this.$set(
+            this.form.datasource[index],
+            'totalPrice',
+            item.singlePrice * item.totalCount || 0
+          );
+          num += this.form.datasource[index].totalPrice;
         });
         return num;
       }