mlchen 3 недель назад
Родитель
Сommit
78c6840506

+ 31 - 1
src/views/saleManage/saleOrder/invoice/components/addInvoiceDialog.vue

@@ -507,6 +507,24 @@
           ? '不定向订单'
           : '库存式订单';
       },
+      fillProductOrderLockMode(productList, saleOrders) {
+        const orderMap = (saleOrders || []).reduce((result, order) => {
+          result[order.orderNo] = order;
+          return result;
+        }, {});
+        const fallbackOrder = saleOrders?.length === 1 ? saleOrders[0] : null;
+        return (productList || []).map((product) => {
+          const order = orderMap[product.orderNo] || fallbackOrder || {};
+          return {
+            ...product,
+            orderNo: product.orderNo || order.orderNo,
+            needProduce: order.needProduce ?? product.needProduce,
+            hasSendRejectedOrWithdrawn:
+              order.hasSendRejectedOrWithdrawn ??
+              product.hasSendRejectedOrWithdrawn
+          };
+        });
+      },
       //销售发货数量是否限制不能大于采购总数//0否 1是
       parameterGetByCode() {
         parameterGetByCode({
@@ -543,7 +561,10 @@
           isSuspend: res[0]?.isSuspend || 0,
           orderIds: res.map((item) => item.id).toString(),
           orderNo: res.map((item) => item.orderNo).toString(),
-          productList: res.map((item) => item.productList).flat(),
+          productList: this.fillProductOrderLockMode(
+            res.map((item) => item.productList).flat(),
+            res
+          ),
           typedetailIds: res.map((item) => item.typedetailIds).flat(),
           // needProduce: res.map((item) => item.needProduce),
           totalAmount: res.reduce(
@@ -712,6 +733,15 @@
         } else if (data.saleOrder) {
           this.setData([data.saleOrder], 'sendInit');
         }
+        const saleOrders = data.saleOrderList?.length
+          ? data.saleOrderList
+          : data.saleOrder
+          ? [data.saleOrder]
+          : [];
+        data.productList = this.fillProductOrderLockMode(
+          data.productList,
+          saleOrders
+        );
         console.log('data~~~~', data);
         this.loading = false;
         if (data) {

+ 11 - 4
src/views/saleManage/saleOrder/invoice/components/inventoryTable.vue

@@ -93,7 +93,7 @@
         <template v-slot:batchStockId="scope">
           <el-form-item :prop="'datasource.' + scope.$index + '.batchStockId'" :rules="[
               {
-                required: scope.row.isLockSaleOrder == 1 ? true : false,
+                required: scope.row.isLockSaleOrder == 1,
                 message: '请选择批次号',
                 trigger: 'blur'
               }
@@ -103,7 +103,7 @@
               v-model="scope.row.batchStockId"
               clearable
               placeholder="请选择"
-              :disabled="scope.row.isLockSaleOrder == 1"
+              :disabled="isSaleOrderLockReadonly(scope.row)"
               @change="batchNoChange(scope.$index, scope.row)"
             >
               <el-option
@@ -225,7 +225,7 @@
             :prop="'datasource.' + scope.$index + '.warehouseId'"
             :rules="[
               {
-                required: isWarehouseId == 1 || scope.row.isLockSaleOrder == 1 ? true : false,
+                required: isWarehouseId == 1 || scope.row.isLockSaleOrder == 1,
                 message: '请选择仓库',
                 trigger: 'blur'
               }
@@ -234,7 +234,7 @@
             <el-select
               v-model="scope.row.warehouseId"
               clearable
-              :disabled="scope.row.isLockSaleOrder == 1"
+              :disabled="isSaleOrderLockReadonly(scope.row)"
               placeholder="请选择"
               @change="warehouseChange(scope.$index, scope.row, true)"
             >
@@ -1093,6 +1093,13 @@
     },
     methods: {
       formatPrice,
+      isSaleOrderLockReadonly(row) {
+        if (row.hasSendRejectedOrWithdrawn == 1) {
+          return false;
+        }
+        const orderType = row.needProduce ?? this.needProduce;
+        return orderType == 0 || (orderType == 1 && row.isLockSaleOrder == 1);
+      },
       dedupeBatchNoList(list) {
         const seen = new Set();
         return (list || []).filter((item) => {