yusheng 11 miesięcy temu
rodzic
commit
6daf66d022

+ 1463 - 1406
src/BIZComponents/inventoryTable.vue

@@ -280,7 +280,9 @@
         </el-form-item>
       </template>
       <template v-slot:quotationSubtotalBeforeTax="{ row, $index }">
-        <el-form-item :prop="'datasource.' + $index + '.quotationSubtotalBeforeTax'">
+        <el-form-item
+          :prop="'datasource.' + $index + '.quotationSubtotalBeforeTax'"
+        >
           {{ calculateSubtotal(row).toFixed(2) }}元
         </el-form-item>
       </template>
@@ -740,6 +742,19 @@
           </DictSelection>
         </el-form-item>
       </template>
+      <template v-slot:productionRequirements="scope">
+        <el-form-item
+          :prop="'datasource.' + scope.$index + '.' + 'productionRequirements'"
+        >
+          <el-input
+            clearable
+            v-model="scope.row.productionRequirements"
+            placeholder="请输入"
+            type="textarea"
+          />
+        </el-form-item>
+      </template>
+
       <!-- 操作列 -->
       <template v-slot:action="scope">
         <el-popconfirm
@@ -791,1521 +806,1563 @@
   </el-form>
 </template>
 <script>
-import { numberReg } from 'ele-admin';
-import productList from '@/BIZComponents/product-list.vue';
-import dictMixins from '@/mixins/dictMixins';
-import fileUpload from '@/components/upload/fileUpload';
-import headList from '@/BIZComponents/user-select/user-select.vue';
-import ProductionVersion from '@/components/ProductionVersion2/index.vue';
-import { getInventoryTotalAPI } from '@/api/wms';
-import { pricingWayList, lbjtList } from '@/enum/dict.js';
-import { changeCount, getAllPrice } from '@/BIZComponents/setProduct.js';
-import { contactQueryByCategoryIdsAPI } from '@/api/saleManage/contact';
-import taskinstanceDialog from '@/BIZComponents/procedure/taskinstanceDialog.vue';
-import timeDialog from '@/components/timeDialog/index.vue';
-import { copyObj } from '@/utils/util';
-import selectStockLedgerDialog from '@/BIZComponents/selectStockLedger/selectStockLedgerDialog.vue'; //库存台账
-import setAllValue from '@/BIZComponents/setAllValue.vue'; //批量修改
-
-import tabMixins from '@/mixins/tableColumnsMixin';
-import commodityPriceListDialog from '@/views/commodityManagement/commodityPriceList/components/commodityPriceListDialog.vue';
-const dayjs = require('dayjs');
-import { levelList } from '@/enum/dict.js';
-import {
-  getGoodsPriceByCondition,
-  getNewsGoodsByCategoryId,
-  getGoodsByCategoryId
-} from '@/api/goodsManage/index';
-import { parameterGetByCode } from '@/api/main/index.js';
-
-export default {
-  mixins: [dictMixins, tabMixins],
-  components: {
-    fileUpload,
-    productList,
-    headList,
-    ProductionVersion,
-    taskinstanceDialog,
-    timeDialog,
-    selectStockLedgerDialog,
-    commodityPriceListDialog,
-    setAllValue
-  },
-  props: {
-    pageName: {
-      default: '',
-      type: String
-    },
-    isDiscountTotalPrice: {
-      default: false,
-      type: Boolean
+  import { numberReg } from 'ele-admin';
+  import productList from '@/BIZComponents/product-list.vue';
+  import dictMixins from '@/mixins/dictMixins';
+  import fileUpload from '@/components/upload/fileUpload';
+  import headList from '@/BIZComponents/user-select/user-select.vue';
+  import ProductionVersion from '@/components/ProductionVersion2/index.vue';
+  import { getInventoryTotalAPI } from '@/api/wms';
+  import { pricingWayList, lbjtList } from '@/enum/dict.js';
+  import { changeCount, getAllPrice } from '@/BIZComponents/setProduct.js';
+  import { contactQueryByCategoryIdsAPI } from '@/api/saleManage/contact';
+  import taskinstanceDialog from '@/BIZComponents/procedure/taskinstanceDialog.vue';
+  import timeDialog from '@/components/timeDialog/index.vue';
+  import { copyObj } from '@/utils/util';
+  import selectStockLedgerDialog from '@/BIZComponents/selectStockLedger/selectStockLedgerDialog.vue'; //库存台账
+  import setAllValue from '@/BIZComponents/setAllValue.vue'; //批量修改
+
+  import tabMixins from '@/mixins/tableColumnsMixin';
+  import commodityPriceListDialog from '@/views/commodityManagement/commodityPriceList/components/commodityPriceListDialog.vue';
+  const dayjs = require('dayjs');
+  import { levelList } from '@/enum/dict.js';
+  import {
+    getGoodsPriceByCondition,
+    getNewsGoodsByCategoryId,
+    getGoodsByCategoryId
+  } from '@/api/goodsManage/index';
+  import { parameterGetByCode } from '@/api/main/index.js';
+
+  export default {
+    mixins: [dictMixins, tabMixins],
+    components: {
+      fileUpload,
+      productList,
+      headList,
+      ProductionVersion,
+      taskinstanceDialog,
+      timeDialog,
+      selectStockLedgerDialog,
+      commodityPriceListDialog,
+      setAllValue
     },
+    props: {
+      pageName: {
+        default: '',
+        type: String
+      },
+      isDiscountTotalPrice: {
+        default: false,
+        type: Boolean
+      },
 
-    isGuaranteePeriod: {
-      default: true,
-      type: Boolean
-    },
+      isGuaranteePeriod: {
+        default: true,
+        type: Boolean
+      },
 
-    customerMark: {
-      default: '',
-      type: String
-    },
+      customerMark: {
+        default: '',
+        type: String
+      },
 
-    isContractId: {
-      type: Boolean,
-      default: false
-    },
+      isContractId: {
+        type: Boolean,
+        default: false
+      },
 
-    isSinglePrice: {
-      //单价必填
-      type: Boolean,
-      default: true
-    },
-    isTotalCount: {
-      //数量必填
-      type: Boolean,
-      default: true
-    },
-    isCustomerMark: {
-      //客户代号必填
-      type: Boolean,
-      default: false
-    },
+      isSinglePrice: {
+        //单价必填
+        type: Boolean,
+        default: true
+      },
+      isTotalCount: {
+        //数量必填
+        type: Boolean,
+        default: true
+      },
+      isCustomerMark: {
+        //客户代号必填
+        type: Boolean,
+        default: false
+      },
 
-    isDiscount: {
-      //折让
-      type: Boolean,
-      default: true
-    },
+      isDiscount: {
+        //折让
+        type: Boolean,
+        default: true
+      },
 
-    isProduceDeliveryDeadline: {
-      //生产交付交期必填
-      type: Boolean,
-      default: false
-    },
+      isProduceDeliveryDeadline: {
+        //生产交付交期必填
+        type: Boolean,
+        default: false
+      },
 
-    isDrawer: {
-      type: Boolean,
-      default: false
-    },
-    isChangeCount: {
-      //默认计算
-      type: Boolean,
-      default: true
-    },
-    contractBookType: {
-      //合同类型 1销售 2采购
-      type: [String, Number],
-      default: 1
-    },
-    isTemporary: {
-      //临时
-      type: Boolean,
-      default: false
-    },
-    isSupplier: {
-      //供应商
-      type: Boolean,
-      default: false
-    },
-    isSalesRecord: {
-      default: ''
-    },
-    isArrivalWay: {
-      //分批到货时间
-      type: Boolean,
-      default: false
-    },
-    //订单类型
-    needProduce: {
-      type: [String, Number],
-      default: 1
-    },
-    cacheKeyUrl: '',
-    //是否显示订单编码
-    isOrderNo: {
-      type: Boolean,
-      default: false
-    },
-    isBatchNo: {
-      type: Boolean, //批次号是否必填
-      default: false
-    },
-    orderOption: {
-      default: () => {
-        return [];
+      isDrawer: {
+        type: Boolean,
+        default: false
+      },
+      isChangeCount: {
+        //默认计算
+        type: Boolean,
+        default: true
+      },
+      contractBookType: {
+        //合同类型 1销售 2采购
+        type: [String, Number],
+        default: 1
+      },
+      isTemporary: {
+        //临时
+        type: Boolean,
+        default: false
+      },
+      isSupplier: {
+        //供应商
+        type: Boolean,
+        default: false
+      },
+      isSalesRecord: {
+        default: ''
+      },
+      isArrivalWay: {
+        //分批到货时间
+        type: Boolean,
+        default: false
+      },
+      //订单类型
+      needProduce: {
+        type: [String, Number],
+        default: 1
+      },
+      cacheKeyUrl: '',
+      //是否显示订单编码
+      isOrderNo: {
+        type: Boolean,
+        default: false
+      },
+      isBatchNo: {
+        type: Boolean, //批次号是否必填
+        default: false
+      },
+      orderOption: {
+        default: () => {
+          return [];
+        }
+      },
+      //是否商品
+      isGoods: {
+        type: Boolean,
+        default: false
+      },
+      // 是否税率必填
+      isTaxRate: {
+        type: [Number, String],
+        default: 0
+      },
+      defTaxRate: {
+        type: Number,
+        default: undefined
+      },
+      countObj: {
+        type: Object,
+        default: () => {
+          return {
+            countKey: 'saleCount',
+            unitKey: 'saleUnit',
+            unitIdKey: 'saleUnitId'
+          };
+        }
+      },
+      //是否显示生产要求
+      isProductionRequirements: {
+        type: Boolean,
+        default: false
       }
     },
-    //是否商品
-    isGoods: {
-      type: Boolean,
-      default: false
-    },
-    // 是否税率必填
-    isTaxRate: {
-      type: [Number, String],
-      default: 0
-    },
-    defTaxRate: {
-      type: Number,
-      default: undefined
+    data() {
+      const defaultForm = {
+        key: null,
+        endTime: '',
+        isFirst: 0,
+        name: '',
+        startTime: '',
+        workHour: '',
+        guaranteePeriodUnitCode: '',
+        technicalDrawings: [],
+        arrivalWay: 1,
+        // 新增字段初始化
+        thickNess: '',
+        squareNumber: '',
+        processingFeeBeforeTax: '',
+        packagingFeeNotTaxed: '',
+        transportationFeeWithoutTax: ''
+      };
+      return {
+        levelList,
+        taskinstanceDialogFlag: false,
+        allPrice: 0,
+        numberReg,
+        defaultForm,
+        form: {
+          datasource: [],
+          discountTotalPrice: 0
+        },
+        isDate: 1,
+        pricingWayList,
+        curIndex: '',
+        rules: {},
+        dictList: {},
+        arrivalWayList: [
+          { label: '一次性到货', value: 1 },
+          { label: '分批到货', value: 2 }
+        ],
+        columnsVersion: 1,
+        selection: []
+      };
     },
-    countObj: {
-      type: Object,
-      default: () => {
-        return {
-          countKey: 'saleCount',
-          unitKey: 'saleUnit',
-          unitIdKey: 'saleUnitId'
-        };
-      }
-    }
-  },
-  data() {
-    const defaultForm = {
-      key: null,
-      endTime: '',
-      isFirst: 0,
-      name: '',
-      startTime: '',
-      workHour: '',
-      guaranteePeriodUnitCode: '',
-      technicalDrawings: [],
-      arrivalWay: 1,
-      // 新增字段初始化
-      thickNess: '',
-      squareNumber: '',
-      processingFeeBeforeTax: '',
-      packagingFeeNotTaxed: '',
-      transportationFeeWithoutTax: ''
-    };
-    return {
-      levelList,
-      taskinstanceDialogFlag: false,
-      allPrice: 0,
-      numberReg,
-      defaultForm,
-      form: {
-        datasource: [],
-        discountTotalPrice: 0
+    computed: {
+      canHandl() {
+        return this.form.datasource.length;
       },
-      isDate: 1,
-      pricingWayList,
-      curIndex: '',
-      rules: {},
-      dictList: {},
-      arrivalWayList: [
-        { label: '一次性到货', value: 1 },
-        { label: '分批到货', value: 2 }
-      ],
-      columnsVersion: 1,
-      selection: []
-    };
-  },
-  computed: {
-    canHandl() {
-      return this.form.datasource.length;
-    },
-    columns() {
-      let columnsVersion = this.columnsVersion;
-      let orderColumn = {
-        width: 1,
-        show: false
-      };
-      if (this.isOrderNo) {
-        orderColumn = {
-          minWidth: 200,
-          prop: 'orderNo',
-          slot: 'orderNo',
-          label: '订单编码',
-          showOverflowTooltip: true,
-          align: 'center'
+      columns() {
+        let columnsVersion = this.columnsVersion;
+        let orderColumn = {
+          width: 1,
+          show: false
         };
-      }
-      return [
-        {
-          width: 45,
-          type: 'index',
-          columnKey: 'index',
-          align: 'center',
-          fixed: 'left'
-        },
-        {
-          width: 45,
-          type: 'selection',
-          columnKey: 'selection',
-          align: 'center',
-          fixed: 'left'
-        },
-        orderColumn,
-        {
-          width: 280,
-          prop: 'productName',
-          label: '名称',
-          slot: 'productName',
-          headerSlot: 'headerProductName',
-          align: 'center',
-          fixed: 'left'
-        },
-        {
-          width: 120,
-          prop: 'productCode',
-          label: '编码',
-          slot: 'productCode',
-          align: 'center'
-        },
-        {
-          width: 200,
-          prop: 'productCategoryName',
-          label: '类型',
-          slot: 'productCategoryName',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'specification',
-          label: '规格',
-          slot: 'specification',
-          align: 'center'
-        },
-        // 新增字段:厚度
-        {
-          width: 150,
-          prop: 'thickNess',
-          label: '厚度',
-          slot: 'thickNess',
-          align: 'center'
-        },
-        // 新增字段:平方数
-        {
-          width: 150,
-          prop: 'squareNumber',
-          label: '平方数',
-          slot: 'squareNumber',
-          align: 'center'
-        },
-        // 新增字段:加工费(未税)
-        {
-          width: 150,
-          prop: 'processingFeeBeforeTax',
-          label: '加工费(未税)',
-          slot: 'processingFeeBeforeTax',
-          align: 'center'
-        },
-        // 新增字段:包装费(未税)
-        {
-          width: 150,
-          prop: 'packagingFeeNotTaxed',
-          label: '包装费(未税)',
-          slot: 'packagingFeeNotTaxed',
-          align: 'center'
-        },
-        // 新增字段:运输费(未税)
-        {
-          width: 150,
-          prop: 'transportationFeeWithoutTax',
-          label: '运输费(未税)',
-          slot: 'transportationFeeWithoutTax',
-          align: 'center'
-        },
-        {
-          width: 150,
-          prop: 'quotationSubtotalBeforeTax',
-          label: '报价小计(未税)',
-          slot: 'quotationSubtotalBeforeTax',
-          align: 'center'
-        },
-        {
-          width: 200,
-          prop: 'customerMark',
-          label: this.contractBookType == 1 ? '客户代号' : '供应商代号',
-          slot: 'customerMark',
-          headerSlot: this.isCustomerMark ? 'headerCustomerMark' : '',
-          align: 'center'
-        },
-        {
-          minWidth: 240,
-          prop: 'taskName',
-          label: '工序',
-          slot: 'taskName',
-          align: 'center'
-        },
-        {
-          minWidth: 160,
-          prop: 'productionCodes',
-          label: '生产编号',
-          align: 'center'
-        },
-
-        this.isCustomerMark
-          ? {
-              minWidth: 120,
-              prop: 'entrustedEnterpriseId',
-              label: '受托企业',
-              slot: 'entrustedEnterpriseId',
-              show: this.isCustomerMark,
-              align: 'center'
-            }
-          : {
-              width: 1
-            },
-        {
-          width: 150,
-          prop: 'saleCount',
-          label: '数量',
-          slot: 'saleCount',
-          headerSlot: this.isTotalCount ? 'headerTotalCount' : '',
-          align: 'center'
-        },
-        {
-          width: 150,
-          prop: 'saleUnit',
-          label: '单位',
-          slot: 'saleUnit',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'packingSpecification',
-          align: 'center',
-          slot: 'packingSpecification',
-          label: '包装规格',
-          showOverflowTooltip: true
-        },
-
-        {
-          width: 150,
-          prop: 'totalCount',
-          label: '计量数量',
-          headerSlot: 'headerTotalCount',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'measuringUnit',
-          label: '计量单位',
-          slot: 'measuringUnit',
-          align: 'center'
-        },
-        {
-          minWidth: 120,
-          prop: 'goodsLevel',
-          label: '物品级别',
-          slot: 'goodsLevel',
-          align: 'center'
-        },
-        {
-          width: 160,
-          prop: 'goodsPriceType',
-          label: '价格类型',
-          slot: 'goodsPriceType',
-          align: 'center'
-        },
-        {
-          width: 200,
-          prop: 'singlePrice',
-          label: '单价',
-          slot: 'singlePrice',
-          headerSlot: this.isSinglePrice ? 'headerSinglePrice' : '',
-          align: 'center'
-        },
-        {
-          width: 160,
-          prop: 'taxRate',
-          label: '税率',
-          slot: 'taxRate',
-          align: 'center',
-          headerSlot: this.isTaxRate == 1 ? 'headerTaxRate' : ''
-        },
-        {
-          width: 180,
-          prop: 'notaxSinglePrice',
-          label: '不含税单价',
-          slot: 'notaxSinglePrice',
-          align: 'center'
-        },
-        this.isDiscount
-          ? {
-              width: 160,
-              prop: 'discountSinglePrice',
-              label: '折让单价',
-              align: 'center',
-              show: this.isDiscount,
-              formatter: (_row, _column, cellValue) => {
-                return _row.discountSinglePrice
-                  ? Number(_row.discountSinglePrice).toFixed(2)
-                  : '';
+        if (this.isOrderNo) {
+          orderColumn = {
+            minWidth: 200,
+            prop: 'orderNo',
+            slot: 'orderNo',
+            label: '订单编码',
+            showOverflowTooltip: true,
+            align: 'center'
+          };
+        }
+        return [
+          {
+            width: 45,
+            type: 'index',
+            columnKey: 'index',
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center',
+            fixed: 'left'
+          },
+          orderColumn,
+          {
+            width: 280,
+            prop: 'productName',
+            label: '名称',
+            slot: 'productName',
+            headerSlot: 'headerProductName',
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            width: 120,
+            prop: 'productCode',
+            label: '编码',
+            slot: 'productCode',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'productCategoryName',
+            label: '类型',
+            slot: 'productCategoryName',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'specification',
+            label: '规格',
+            slot: 'specification',
+            align: 'center'
+          },
+          // 新增字段:厚度
+          {
+            width: 150,
+            prop: 'thickNess',
+            label: '厚度',
+            slot: 'thickNess',
+            align: 'center'
+          },
+          // 新增字段:平方数
+          {
+            width: 150,
+            prop: 'squareNumber',
+            label: '平方数',
+            slot: 'squareNumber',
+            align: 'center'
+          },
+          // 新增字段:加工费(未税)
+          {
+            width: 150,
+            prop: 'processingFeeBeforeTax',
+            label: '加工费(未税)',
+            slot: 'processingFeeBeforeTax',
+            align: 'center'
+          },
+          // 新增字段:包装费(未税)
+          {
+            width: 150,
+            prop: 'packagingFeeNotTaxed',
+            label: '包装费(未税)',
+            slot: 'packagingFeeNotTaxed',
+            align: 'center'
+          },
+          // 新增字段:运输费(未税)
+          {
+            width: 150,
+            prop: 'transportationFeeWithoutTax',
+            label: '运输费(未税)',
+            slot: 'transportationFeeWithoutTax',
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'quotationSubtotalBeforeTax',
+            label: '报价小计(未税)',
+            slot: 'quotationSubtotalBeforeTax',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'customerMark',
+            label: this.contractBookType == 1 ? '客户代号' : '供应商代号',
+            slot: 'customerMark',
+            headerSlot: this.isCustomerMark ? 'headerCustomerMark' : '',
+            align: 'center'
+          },
+          {
+            minWidth: 240,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            minWidth: 160,
+            prop: 'productionCodes',
+            label: '生产编号',
+            align: 'center'
+          },
+
+          this.isProductionRequirements
+            ? {
+                minWidth: 280,
+                prop: 'productionRequirements',
+                label: '生产要求',
+                slot: 'productionRequirements',
+                align: 'center'
               }
-            }
-          : {
-              width: 1
-            },
-        {
-          width: 120,
-          prop: 'totalPrice',
-          label: '合计',
-          slot: 'totalPrice',
-          align: 'center'
-        },
-
-        this.isDiscount
-          ? {
-              width: 160,
-              prop: 'discountTotalPrice',
-              label: '折让合计',
-              align: 'center',
-              show: this.isDiscount,
-              formatter: (_row, _column, cellValue) => {
-                return _row.discountTotalPrice
-                  ? Number(_row.discountTotalPrice).toFixed(2)
-                  : '';
+            : {
+                width: 1
+              },
+          this.isCustomerMark
+            ? {
+                minWidth: 120,
+                prop: 'entrustedEnterpriseId',
+                label: '受托企业',
+                slot: 'entrustedEnterpriseId',
+                show: this.isCustomerMark,
+                align: 'center'
+              }
+            : {
+                width: 1
+              },
+          {
+            width: 150,
+            prop: 'saleCount',
+            label: '数量',
+            slot: 'saleCount',
+            headerSlot: this.isTotalCount ? 'headerTotalCount' : '',
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'saleUnit',
+            label: '单位',
+            slot: 'saleUnit',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'packingSpecification',
+            align: 'center',
+            slot: 'packingSpecification',
+            label: '包装规格',
+            showOverflowTooltip: true
+          },
+
+          {
+            width: 150,
+            prop: 'totalCount',
+            label: '计量数量',
+            headerSlot: 'headerTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'measuringUnit',
+            label: '计量单位',
+            slot: 'measuringUnit',
+            align: 'center'
+          },
+          {
+            minWidth: 120,
+            prop: 'goodsLevel',
+            label: '物品级别',
+            slot: 'goodsLevel',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'goodsPriceType',
+            label: '价格类型',
+            slot: 'goodsPriceType',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'singlePrice',
+            label: '单价',
+            slot: 'singlePrice',
+            headerSlot: this.isSinglePrice ? 'headerSinglePrice' : '',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'taxRate',
+            label: '税率',
+            slot: 'taxRate',
+            align: 'center',
+            headerSlot: this.isTaxRate == 1 ? 'headerTaxRate' : ''
+          },
+          {
+            width: 180,
+            prop: 'notaxSinglePrice',
+            label: '不含税单价',
+            slot: 'notaxSinglePrice',
+            align: 'center'
+          },
+          this.isDiscount
+            ? {
+                width: 160,
+                prop: 'discountSinglePrice',
+                label: '折让单价',
+                align: 'center',
+                show: this.isDiscount,
+                formatter: (_row, _column, cellValue) => {
+                  return _row.discountSinglePrice
+                    ? Number(_row.discountSinglePrice).toFixed(2)
+                    : '';
+                }
+              }
+            : {
+                width: 1
+              },
+          {
+            width: 120,
+            prop: 'totalPrice',
+            label: '合计',
+            slot: 'totalPrice',
+            align: 'center'
+          },
+
+          this.isDiscount
+            ? {
+                width: 160,
+                prop: 'discountTotalPrice',
+                label: '折让合计',
+                align: 'center',
+                show: this.isDiscount,
+                formatter: (_row, _column, cellValue) => {
+                  return _row.discountTotalPrice
+                    ? Number(_row.discountTotalPrice).toFixed(2)
+                    : '';
+                }
+              }
+            : {
+                width: 1
+              },
+
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            headerSlot: this.isBatchNo ? 'headerBatchNo' : '',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'availableCountBase',
+            label: '库存数量',
+            slot: 'availableCountBase',
+            align: 'center'
+          },
+          {
+            prop: 'provenance',
+            label: '产地',
+            slot: 'provenance',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+
+          {
+            width: 120,
+            prop: 'singleWeight',
+            label: '单重',
+            slot: 'singleWeight',
+            headerSlot: 'headerSingleWeight',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'totalWeight',
+            label: '总重',
+            slot: 'totalWeight',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'weightUnit',
+            label: '重量单位',
+            slot: 'weightUnit',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'productBrand',
+            label: '牌号',
+            slot: 'productBrand',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'modelType',
+            label: '型号',
+            slot: 'modelType',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'modelKey',
+            label: '机型',
+            slot: 'modelKey',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'colorKey',
+            label: '颜色',
+            slot: 'colorKey',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'produceType',
+            align: 'center',
+            label: '属性类型',
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+              if (row.produceType) {
+                return row.produceType
+                  .map((item) => {
+                    return lbjtList[item];
+                  })
+                  .toString();
               }
             }
-          : {
-              width: 1
-            },
-
-        {
-          width: 110,
-          prop: 'batchNo',
-          label: '批次号',
-          slot: 'batchNo',
-          headerSlot: this.isBatchNo ? 'headerBatchNo' : '',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'availableCountBase',
-          label: '库存数量',
-          slot: 'availableCountBase',
-          align: 'center'
-        },
-        {
-          prop: 'provenance',
-          label: '产地',
-          slot: 'provenance',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 200
-        },
-
-        {
-          width: 120,
-          prop: 'singleWeight',
-          label: '单重',
-          slot: 'singleWeight',
-          headerSlot: 'headerSingleWeight',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'totalWeight',
-          label: '总重',
-          slot: 'totalWeight',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'weightUnit',
-          label: '重量单位',
-          slot: 'weightUnit',
-          align: 'center'
-        },
-        {
-          width: 160,
-          prop: 'productBrand',
-          label: '牌号',
-          slot: 'productBrand',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'modelType',
-          label: '型号',
-          slot: 'modelType',
-          align: 'center'
-        },
-        {
-          width: 160,
-          prop: 'modelKey',
-          label: '机型',
-          slot: 'modelKey',
-          align: 'center'
-        },
-        {
-          width: 160,
-          prop: 'colorKey',
-          label: '颜色',
-          slot: 'colorKey',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'produceType',
-          align: 'center',
-          label: '属性类型',
-          showOverflowTooltip: true,
-          formatter: (row, column) => {
-            if (row.produceType) {
-              return row.produceType
-                .map((item) => {
-                  return lbjtList[item];
-                })
-                .toString();
-            }
+          },
+
+          this.isArrivalWay
+            ? {
+                width: 160,
+                prop: 'arrivalWay',
+                label: '到货方式',
+                slot: 'arrivalWay',
+                align: 'center',
+                show: this.isArrivalWay
+              }
+            : {
+                width: 1
+              },
+          {
+            width: 160,
+            prop: 'customerExpectDeliveryDeadline',
+            label: this.contractBookType == 1 ? '客户期望交期' : '交付日期',
+            slot: 'customerExpectDeliveryDeadline',
+            headerSlot:
+              this.isDate == 1 ? 'headerCustomerExpectDeliveryDeadline' : '',
+            align: 'center'
+          },
+
+          this.contractBookType == 1
+            ? {
+                width: 160,
+                prop: 'produceDeliveryDeadline',
+                label: '生产交付交期',
+                slot: 'produceDeliveryDeadline',
+                headerSlot:
+                  this.isDate == 1 && this.isProduceDeliveryDeadline
+                    ? 'headerProduceDeliveryDeadline'
+                    : '',
+                show: this.contractBookType == 1,
+                align: 'center'
+              }
+            : {
+                width: 1
+              },
+
+          {
+            width: 200,
+            prop: 'guaranteePeriod',
+            label: '有效期',
+            slot: 'guaranteePeriod',
+            align: 'center'
+          },
+          this.isGuaranteePeriod
+            ? {
+                width: 200,
+                prop: 'guaranteePeriodDeadline',
+                label: '有效期截止日期',
+                slot: 'guaranteePeriodDeadline',
+                show: this.isGuaranteePeriod,
+                align: 'center'
+              }
+            : {
+                width: 1
+              },
+          {
+            width: 120,
+            prop: 'imgCode',
+            align: 'center',
+            label: '图号/件号',
+            showOverflowTooltip: true
+          },
+
+          {
+            width: 220,
+            prop: 'customerReqFiles',
+            label: '客户需求',
+            slot: 'customerReqFiles',
+            align: 'center'
+          },
+          {
+            width: 130,
+            prop: 'technicalAnswerName',
+            label: '技术答疑人',
+            slot: 'technicalAnswerName',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'technicalParams',
+            label: '技术参数',
+            slot: 'technicalParams',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'technicalDrawings',
+            label: '技术图纸',
+            slot: 'technicalDrawings',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'drawingVersion',
+            label: '图纸版本',
+            align: 'center'
+          },
+
+          {
+            width: 240,
+            prop: 'technologyRouteName',
+            label: '工艺路线',
+            slot: 'technologyRouteName',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'industryArtFiles',
+            label: '工艺附件',
+            slot: 'industryArtFiles',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'otherFiles',
+            label: '其他附件',
+            slot: 'otherFiles',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'remark',
+            label: '备注',
+            slot: 'remark',
+            align: 'center'
+          },
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 120,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            fixed: 'right',
+            showOverflowTooltip: true
           }
-        },
-
-        this.isArrivalWay
-          ? {
-              width: 160,
-              prop: 'arrivalWay',
-              label: '到货方式',
-              slot: 'arrivalWay',
-              align: 'center',
-              show: this.isArrivalWay
-            }
-          : {
-              width: 1
-            },
-        {
-          width: 160,
-          prop: 'customerExpectDeliveryDeadline',
-          label: this.contractBookType == 1 ? '客户期望交期' : '交付日期',
-          slot: 'customerExpectDeliveryDeadline',
-          headerSlot:
-            this.isDate == 1 ? 'headerCustomerExpectDeliveryDeadline' : '',
-          align: 'center'
-        },
-
-        this.contractBookType == 1
-          ? {
-              width: 160,
-              prop: 'produceDeliveryDeadline',
-              label: '生产交付交期',
-              slot: 'produceDeliveryDeadline',
-              headerSlot:
-                this.isDate == 1 && this.isProduceDeliveryDeadline
-                  ? 'headerProduceDeliveryDeadline'
-                  : '',
-              show: this.contractBookType == 1,
-              align: 'center'
-            }
-          : {
-              width: 1
-            },
-
-        {
-          width: 200,
-          prop: 'guaranteePeriod',
-          label: '有效期',
-          slot: 'guaranteePeriod',
-          align: 'center'
-        },
-        this.isGuaranteePeriod
-          ? {
-              width: 200,
-              prop: 'guaranteePeriodDeadline',
-              label: '有效期截止日期',
-              slot: 'guaranteePeriodDeadline',
-              show: this.isGuaranteePeriod,
-              align: 'center'
-            }
-          : {
-              width: 1
-            },
-        {
-          width: 120,
-          prop: 'imgCode',
-          align: 'center',
-          label: '图号/件号',
-          showOverflowTooltip: true
-        },
-
-        {
-          width: 220,
-          prop: 'customerReqFiles',
-          label: '客户需求',
-          slot: 'customerReqFiles',
-          align: 'center'
-        },
-        {
-          width: 130,
-          prop: 'technicalAnswerName',
-          label: '技术答疑人',
-          slot: 'technicalAnswerName',
-          align: 'center'
-        },
-        {
-          width: 220,
-          prop: 'technicalParams',
-          label: '技术参数',
-          slot: 'technicalParams',
-          align: 'center'
-        },
-        {
-          width: 240,
-          prop: 'technicalDrawings',
-          label: '技术图纸',
-          slot: 'technicalDrawings',
-          align: 'center'
-        },
-        {
-          width: 120,
-          prop: 'drawingVersion',
-          label: '图纸版本',
-          align: 'center'
-        },
-
-        {
-          width: 240,
-          prop: 'technologyRouteName',
-          label: '工艺路线',
-          slot: 'technologyRouteName',
-          align: 'center'
-        },
-        {
-          width: 240,
-          prop: 'industryArtFiles',
-          label: '工艺附件',
-          slot: 'industryArtFiles',
-          align: 'center'
-        },
-        {
-          width: 240,
-          prop: 'otherFiles',
-          label: '其他附件',
-          slot: 'otherFiles',
-          align: 'center'
-        },
-        {
-          width: 220,
-          prop: 'remark',
-          label: '备注',
-          slot: 'remark',
-          align: 'center'
-        },
-        {
-          columnKey: 'action',
-          label: '操作',
-          width: 120,
-          align: 'center',
-          resizable: false,
-          slot: 'action',
-          fixed: 'right',
-          showOverflowTooltip: true
-        }
-      ];
-    }
-  },
-
-  created() {
-    parameterGetByCode({
-      code: 'eom_inventoryTable_customerExpectDeliveryDeadline'
-    }).then((res) => {
-      if (res.value) {
-        this.isDate = res.value;
+        ];
       }
-    });
-  },
-  methods: {
-    updateSubtotal(row, index) {
-      // this.$set(row, 'quotationSubtotalBeforeTax', this.calculateSubtotal(row));
-      // 触发表格重新渲染
-      this.$set(row, 'quotationSubtotalBeforeTax', this.calculateSubtotal(row));
-    },
-    calculateSubtotal(row) {
-      const processingFee = Number(row.processingFeeBeforeTax) || 0;
-      const packagingFee = Number(row.packagingFeeNotTaxed) || 0;
-      const transportationFee = Number(row.transportationFeeWithoutTax) || 0;
-      return processingFee + packagingFee + transportationFee;
-    },
-    packingChange(item, index) {
-      this.$set(
-        this.form.datasource[index],
-        this.countObj.unitKey,
-        item.conversionUnit
-      );
-    },
-    openVersion(index) {
-      this.$refs.versionRefs.open(index);
-    },
-    //设置分批到货时间
-    handleMethod(row, index) {
-      this.$refs.timeDialogRef.open(row, index);
-    },
-    chooseTime({ arrivalBatch, index }) {
-      this.$set(
-        this.form.datasource[index],
-        'arrivalBatch',
-        copyObj(arrivalBatch)
-      );
     },
-    //工艺路线
-    changeProduct(data, index) {
-      this.$set(this.form.datasource[index], 'technologyRouteName', data.name);
-      this.$set(this.form.datasource[index], 'technologyRouteId', data.id);
-    },
-    handleTaskinstance(row, index) {
-      this.taskinstanceDialogFlag = true;
-      this.$nextTick(() => {
-        this.$refs.taskinstanceDialogRef.open(row, index);
-      });
-    },
-    saveTaskInstance(row = {}) {
-      this.$set(this.form.datasource[row.index], 'taskId', row.id);
-      this.$set(this.form.datasource[row.index], 'taskName', row.name);
-      this.$set(
-        this.form.datasource[row.index],
-        'routingId',
-        row.produceRoutingId
-      );
-    },
-    async getSupplierObj(productList, queryName) {
-      try {
-        let categoryIds = productList
-          .filter((item) => item.productId)
-          .map((item) => item.productId);
-        if (categoryIds.length > 0) {
-          return await contactQueryByCategoryIdsAPI({
-            categoryIds
-          });
-        } else {
-          return Promise.resolve({});
+
+    created() {
+      parameterGetByCode({
+        code: 'eom_inventoryTable_customerExpectDeliveryDeadline'
+      }).then((res) => {
+        if (res.value) {
+          this.isDate = res.value;
         }
-      } catch (e) {
-        return Promise.resolve({});
-      }
+      });
     },
-    setDeliveryDays(row, index, type, isAll) {
-      if (isAll) {
-        this.form.datasource.forEach((item, i) => {
-          let guaranteePeriodUnitName = this.guaranteePeriodUnit(
-            item.guaranteePeriodUnitCode
-          );
-
-          this.$set(
-            this.form.datasource[i],
-            'guaranteePeriodDeadline',
-            guaranteePeriodUnitName != 'second'
-              ? this.setDay(item.guaranteePeriod, guaranteePeriodUnitName, item)
-              : ''
-          );
-        });
-        return;
-      }
-
-      if (type == 'guaranteePeriod') {
-        let guaranteePeriodUnitName = this.guaranteePeriodUnit(
-          row.guaranteePeriodUnitCode
+    methods: {
+      updateSubtotal(row, index) {
+        // this.$set(row, 'quotationSubtotalBeforeTax', this.calculateSubtotal(row));
+        // 触发表格重新渲染
+        this.$set(
+          row,
+          'quotationSubtotalBeforeTax',
+          this.calculateSubtotal(row)
         );
+      },
+      calculateSubtotal(row) {
+        const processingFee = Number(row.processingFeeBeforeTax) || 0;
+        const packagingFee = Number(row.packagingFeeNotTaxed) || 0;
+        const transportationFee = Number(row.transportationFeeWithoutTax) || 0;
+        return processingFee + packagingFee + transportationFee;
+      },
+      packingChange(item, index) {
         this.$set(
           this.form.datasource[index],
-          'guaranteePeriodDeadline',
-          guaranteePeriodUnitName != 'second'
-            ? this.setDay(row.guaranteePeriod, guaranteePeriodUnitName, row)
-            : ''
+          this.countObj.unitKey,
+          item.conversionUnit
         );
-      }
-    },
-    guaranteePeriodUnit(code) {
-      return code == 3
-        ? 'day'
-        : code == 4
-        ? 'month'
-        : code == 5
-        ? 'year'
-        : 'second';
-    },
-    setDay(addDay, dateType = 'day', item) {
-      let tiem =
-        this.contractBookType == 1
-          ? item.produceDeliveryDeadline
-          : item.customerExpectDeliveryDeadline;
-      return dayjs(tiem || new Date())
-        .add(addDay, dateType)
-        .format('YYYY-MM-DD');
-    },
-    // 返回列表数据
-    getTableValue() {
-      let comitDatasource = copyObj(this.form.datasource);
-      if (comitDatasource.length === 0) return [];
-      comitDatasource.forEach((v) => {
-        if (v.guaranteePeriodUnitCode) {
-          v.guaranteePeriodUnitName = this.getDictValue(
-            '保质期单位',
-            v.guaranteePeriodUnitCode
-          );
-        }
-        if (v.modelKey) {
-          v.modelKey = v.modelKey.toString();
-        }
-        if (v.colorKey) {
-          v.colorKey = v.colorKey.toString();
-        }
-        v.technicalDrawings = v.technicalDrawings ? v.technicalDrawings : [];
-        v.customerReqFiles = v.customerReqFiles || [];
-        v.industryArtFiles = v.industryArtFiles || [];
-        v.otherFiles = v.otherFiles || [];
-        // 确保新增字段被正确处理
-        v.thickNess = v.thickNess || '';
-        v.squareNumber = v.squareNumber || '';
-        v.processingFeeBeforeTax = v.processingFeeBeforeTax || '';
-        v.packagingFeeNotTaxed = v.packagingFeeNotTaxed || '';
-        v.transportationFeeWithoutTax = v.transportationFeeWithoutTax || '';
-      });
-      return comitDatasource;
-    },
-    getPrice() {
-      return [this.allPrice, this.form.discountTotalPrice];
-    },
-    //改变数量
-    changeCount(row, index) {
-      if (!row) {
-        this.form.datasource.forEach((item, index) => {
-          this.$set(
-            this.form,
-            'datasource[' + index + ']',
-            changeCount(item, this.countObj)
-          );
-        });
-      } else {
+      },
+      openVersion(index) {
+        this.$refs.versionRefs.open(index);
+      },
+      //设置分批到货时间
+      handleMethod(row, index) {
+        this.$refs.timeDialogRef.open(row, index);
+      },
+      chooseTime({ arrivalBatch, index }) {
         this.$set(
-          this.form,
-          'datasource[' + index + ']',
-          changeCount(row, this.countObj)
+          this.form.datasource[index],
+          'arrivalBatch',
+          copyObj(arrivalBatch)
         );
-      }
-
-      this.getNotaxSinglePrice();
-      this.changeAll();
-      this.$forceUpdate();
-    },
-    changeAll() {
-      this.allPrice = getAllPrice(this.form.datasource) || 0;
-      if (this.isDiscountTotalPrice) {
-        this.form.discountTotalPrice = this.allPrice;
-        this.$emit('setDiscountTotalPrice', this.allPrice);
-      }
-      this.$emit('setCountAmount', this.allPrice);
-    },
-
-    setCustomerMark(customerMark) {
-      this.form.datasource.forEach((item) => {
-        item['customerMark'] = customerMark;
-        this.$forceUpdate();
-      });
-    },
-
-    //计算不含税单价
-    getNotaxSinglePrice() {
-      this.form.datasource.forEach((item, index) => {
-        if (item.singlePrice && item.taxRate) {
-          this.$set(
-            this.form.datasource[index],
-            'notaxSinglePrice',
-            parseFloat((item.singlePrice / (1 + item.taxRate / 100)).toFixed(2))
-          );
-        } else {
-          this.$set(this.form.datasource[index], 'notaxSinglePrice', '');
-        }
-      });
-    },
-    //设置优惠后总金额修改产品单价
-    discountInputByOrder(val) {
-      this.form.discountTotalPrice = val;
-
-      this.form.datasource.forEach((item, index) => {
+      },
+      //工艺路线
+      changeProduct(data, index) {
         this.$set(
           this.form.datasource[index],
-          'discountSinglePrice',
-          this.getDiscountSinglePrice(item)
+          'technologyRouteName',
+          data.name
         );
+        this.$set(this.form.datasource[index], 'technologyRouteId', data.id);
+      },
+      handleTaskinstance(row, index) {
+        this.taskinstanceDialogFlag = true;
+        this.$nextTick(() => {
+          this.$refs.taskinstanceDialogRef.open(row, index);
+        });
+      },
+      saveTaskInstance(row = {}) {
+        this.$set(this.form.datasource[row.index], 'taskId', row.id);
+        this.$set(this.form.datasource[row.index], 'taskName', row.name);
         this.$set(
-          this.form.datasource[index],
-          'discountTotalPrice',
-          this.getDiscountTotalPrice(item)
+          this.form.datasource[row.index],
+          'routingId',
+          row.produceRoutingId
         );
-      });
-      this.$emit('setDiscountTotalPrice', val);
-
-      this.$forceUpdate();
-      this.$refs.table.reRenderTable();
-    },
-    setAllValueChange({ key, value }) {
-      let indexS = this.selection.map((item) => item.key - 1);
-      indexS.forEach((i) => {
-        this.$set(this.form.datasource[i], key, value);
-        this.setDeliveryDays(this.form.datasource[i], i, 'guaranteePeriod');
-      });
-    },
-    //获取折让单价
-    getDiscountSinglePrice(row) {
-      let num =
-        (Number(this.form.discountTotalPrice) / Number(this.allPrice)) *
-        Number(row.singlePrice);
-      return isNaN(num) ? '' : num;
-    },
-
-    //获取折让合计
-    getDiscountTotalPrice(row) {
-      let num = 0;
-      num = Number(row.discountSinglePrice) * Number(row.totalCount);
-      return isNaN(num) ? '' : num.toFixed(2);
-    },
-    orderNoChange(row, item) {
-      row['orderId'] = item.orderId;
-    },
-    //修改回显
-    async putTableValue(data) {
-      let productList =
-        (data &&
-          (data.quoteProductList || data.productList || data.detailList)) ||
-        [];
-      if (productList) {
-        let supplierObj = await this.getSupplierObj(productList, 'productId');
-
-        productList.forEach((item, index) => {
-          item['key'] = index + 1;
-          if (item.modelKey) {
-            item.modelKey = item.modelKey.split(',');
-          }
-          if (item.colorKey) {
-            item.colorKey = item.colorKey.split(',');
+      },
+      async getSupplierObj(productList, queryName) {
+        try {
+          let categoryIds = productList
+            .filter((item) => item.productId)
+            .map((item) => item.productId);
+          if (categoryIds.length > 0) {
+            return await contactQueryByCategoryIdsAPI({
+              categoryIds
+            });
+          } else {
+            return Promise.resolve({});
           }
-          item.pricingWay =
-            item.pricingWay || data.pricingWay || data?.contractVO?.pricingWay;
-
-          item.guaranteePeriodUnitCode = item.guaranteePeriodUnitCode
-            ? item.guaranteePeriodUnitCode + ''
-            : '';
+        } catch (e) {
+          return Promise.resolve({});
+        }
+      },
+      setDeliveryDays(row, index, type, isAll) {
+        if (isAll) {
+          this.form.datasource.forEach((item, i) => {
+            let guaranteePeriodUnitName = this.guaranteePeriodUnit(
+              item.guaranteePeriodUnitCode
+            );
 
-          let guaranteePeriodUnitName = this.guaranteePeriodUnit(
-            item.guaranteePeriodUnitCode
-          );
-          if (item.guaranteePeriod && item.guaranteePeriodUnitCode) {
-            item['guaranteePeriodDeadline'] =
-              item['guaranteePeriodDeadline'] ||
+            this.$set(
+              this.form.datasource[i],
+              'guaranteePeriodDeadline',
               guaranteePeriodUnitName != 'second'
                 ? this.setDay(
                     item.guaranteePeriod,
                     guaranteePeriodUnitName,
                     item
                   )
-                : '';
-          }
-          item.entrustedEnterpriseIdList = supplierObj[item.productId];
-          if (supplierObj[item.productId]?.length === 1) {
-            item.entrustedEnterpriseId = supplierObj[item.productId][0].id;
-          }
-          item['customerMark'] = item.customerMark || this.customerMark;
-          item['arrivalWay'] = item.arrivalWay || 1;
-
-          // 初始化新增字段
+                : ''
+            );
+          });
+          return;
+        }
 
-          this.$set(item, 'thickNess', item.thickNess || '');
-          this.$set(item, 'squareNumber', item.squareNumber || '');
-          this.$set(
-            item,
-            'processingFeeBeforeTax',
-            item.processingFeeBeforeTax || ''
-          );
-          this.$set(
-            item,
-            'packagingFeeNotTaxed',
-            item.packagingFeeNotTaxed || ''
+        if (type == 'guaranteePeriod') {
+          let guaranteePeriodUnitName = this.guaranteePeriodUnit(
+            row.guaranteePeriodUnitCode
           );
           this.$set(
-            item,
-            'transportationFeeWithoutTax',
-            item.transportationFeeWithoutTax || ''
+            this.form.datasource[index],
+            'guaranteePeriodDeadline',
+            guaranteePeriodUnitName != 'second'
+              ? this.setDay(row.guaranteePeriod, guaranteePeriodUnitName, row)
+              : ''
           );
+        }
+      },
+      guaranteePeriodUnit(code) {
+        return code == 3
+          ? 'day'
+          : code == 4
+          ? 'month'
+          : code == 5
+          ? 'year'
+          : 'second';
+      },
+      setDay(addDay, dateType = 'day', item) {
+        let tiem =
+          this.contractBookType == 1
+            ? item.produceDeliveryDeadline
+            : item.customerExpectDeliveryDeadline;
+        return dayjs(tiem || new Date())
+          .add(addDay, dateType)
+          .format('YYYY-MM-DD');
+      },
+      // 返回列表数据
+      getTableValue() {
+        let comitDatasource = copyObj(this.form.datasource);
+        if (comitDatasource.length === 0) return [];
+        comitDatasource.forEach((v) => {
+          if (v.guaranteePeriodUnitCode) {
+            v.guaranteePeriodUnitName = this.getDictValue(
+              '保质期单位',
+              v.guaranteePeriodUnitCode
+            );
+          }
+          if (v.modelKey) {
+            v.modelKey = v.modelKey.toString();
+          }
+          if (v.colorKey) {
+            v.colorKey = v.colorKey.toString();
+          }
+          v.technicalDrawings = v.technicalDrawings ? v.technicalDrawings : [];
+          v.customerReqFiles = v.customerReqFiles || [];
+          v.industryArtFiles = v.industryArtFiles || [];
+          v.otherFiles = v.otherFiles || [];
+          // 确保新增字段被正确处理
+          v.thickNess = v.thickNess || '';
+          v.squareNumber = v.squareNumber || '';
+          v.processingFeeBeforeTax = v.processingFeeBeforeTax || '';
+          v.packagingFeeNotTaxed = v.packagingFeeNotTaxed || '';
+          v.transportationFeeWithoutTax = v.transportationFeeWithoutTax || '';
         });
-        this.form.datasource = productList;
-
-        let codeList = this.form.datasource
-          .filter((item) => item.productCode)
-          .map((item) => item.productCode);
-        //获取仓库库存
-        let inventoryTotalList = await getInventoryTotalAPI(codeList);
-        this.form.datasource
-          .filter((item) => item.productCode)
-          .forEach((item, index) => {
-            let find =
-              inventoryTotalList.find((key) => key.code == item.productCode) ||
-              {};
-            this.form.datasource;
+        return comitDatasource;
+      },
+      getPrice() {
+        return [this.allPrice, this.form.discountTotalPrice];
+      },
+      //改变数量
+      changeCount(row, index) {
+        if (!row) {
+          this.form.datasource.forEach((item, index) => {
             this.$set(
-              this.form.datasource[index],
-              'availableCountBase',
-              find.availableCountBase
+              this.form,
+              'datasource[' + index + ']',
+              changeCount(item, this.countObj)
             );
           });
-        if (this.isChangeCount) {
-          this.changeCount();
         } else {
-          this.allPrice = data.totalAmount || data?.contractVO?.totalPrice;
+          this.$set(
+            this.form,
+            'datasource[' + index + ']',
+            changeCount(row, this.countObj)
+          );
         }
 
+        this.getNotaxSinglePrice();
+        this.changeAll();
+        this.$forceUpdate();
+      },
+      changeAll() {
+        this.allPrice = getAllPrice(this.form.datasource) || 0;
         if (this.isDiscountTotalPrice) {
-          this.form.discountTotalPrice =
-            data.payAmount || data?.contractVO?.discountTotalPrice;
+          this.form.discountTotalPrice = this.allPrice;
+          this.$emit('setDiscountTotalPrice', this.allPrice);
         }
-        this.$refs.table.reload();
-      }
-    },
-
-    //选择产品
-    handParent(row, index) {
-      let item = {
-        id: row?.productCode
-      };
-      if (row?.goodsId) {
-        this.handGoods(index);
-        return;
-      }
-      if (this.needProduce == 1 || this.needProduce == 2) {
-        this.$refs.productListRef.open(item, index);
-      } else {
-        this.$refs.selectStockLedgerDialogRef.open(item, index);
-      }
-    },
-    handGoods(index) {
-      this.$refs.commodityPriceListDialogRef.open(index);
-    },
-    //选择技术人回调
-    changeAnswer(obj, idx) {
-      this.$set(this.form.datasource[idx], 'technicalAnswerId', obj.id);
-      this.$set(this.form.datasource[idx], 'technicalAnswerName', obj.name);
-    },
-    handHead(row, index) {
-      let item = {
-        id: row.technicalAnswerId
-      };
-      this.$refs.headRef.open(item, index);
-    },
-    //选择产品回调
-    async changeParent(obj, idx) {
-      for (const [loopIndex, item] of obj.entries()) {
-        try {
-          let i = idx === -1 ? loopIndex : idx;
-          let row = JSON.parse(JSON.stringify(this.defaultForm));
-          row.key = this.form.datasource.length + 1;
-          let parasm = idx === -1 ? row : this.form.datasource[i];
-          this.$set(parasm, 'productId', item.id);
-          this.$set(parasm, 'categoryName', item.name);
-          this.$set(parasm, 'productCategoryId', item.categoryLevelId);
-          this.$set(parasm, 'productBrand', item.brandNum);
-          this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
-          this.$set(parasm, 'productCode', item.code);
-          this.$set(parasm, 'productName', item.name);
-          this.$set(parasm, 'modelType', item.modelType);
-          this.$set(parasm, 'availableCountBase', item.availableCountBase);
-          this.$set(parasm, 'measuringUnit', item.measuringUnit);
-          this.$set(parasm, 'specification', item.specification);
-          this.$set(parasm, 'weightUnit', item.weightUnit);
-          this.$set(parasm, 'singleWeight', item.netWeight);
-          this.$set(parasm, 'pricingWay', 1);
-          this.$set(parasm, 'goodsLevel', item.goodsLevel);
-          this.$set(parasm, 'guaranteePeriod', item.warrantyPeriod);
-
-          // 处理机型/颜色(数组化)
-          if (item.modelKey) {
-            this.$set(parasm, 'modelKey', item.modelKey.split(','));
-          }
-          if (item.colorKey) {
-            this.$set(parasm, 'colorKey', item.colorKey.split(','));
-          }
+        this.$emit('setCountAmount', this.allPrice);
+      },
 
-          // 设置默认税率
-          if (this.defTaxRate) {
-            this.$set(parasm, 'taxRate', parasm.taxRate || this.defTaxRate);
-          }
+      setCustomerMark(customerMark) {
+        this.form.datasource.forEach((item) => {
+          item['customerMark'] = customerMark;
+          this.$forceUpdate();
+        });
+      },
 
-          // 处理保质期单位和截止日期
-          this.$set(
-            parasm,
-            'guaranteePeriodUnitCode',
-            item.warrantyPeriodUnit ? item.warrantyPeriodUnit + '' : ''
-          );
-          if (item.warrantyPeriod && item.warrantyPeriodUnit) {
+      //计算不含税单价
+      getNotaxSinglePrice() {
+        this.form.datasource.forEach((item, index) => {
+          if (item.singlePrice && item.taxRate) {
             this.$set(
-              parasm,
-              'guaranteePeriodDeadline',
-              this.setDay(
-                item.warrantyPeriod,
-                this.guaranteePeriodUnit(item.warrantyPeriodUnit),
-                {}
+              this.form.datasource[index],
+              'notaxSinglePrice',
+              parseFloat(
+                (item.singlePrice / (1 + item.taxRate / 100)).toFixed(2)
               )
             );
+          } else {
+            this.$set(this.form.datasource[index], 'notaxSinglePrice', '');
           }
+        });
+      },
+      //设置优惠后总金额修改产品单价
+      discountInputByOrder(val) {
+        this.form.discountTotalPrice = val;
 
-          // 处理包装规格
+        this.form.datasource.forEach((item, index) => {
           this.$set(
-            parasm,
-            'packageDispositionList',
-            item.packageDispositionList
+            this.form.datasource[index],
+            'discountSinglePrice',
+            this.getDiscountSinglePrice(item)
           );
-          if (item.packageDispositionList?.length) {
-            this.$set(
-              parasm,
-              this.countObj.unitIdKey,
-              item.packageDispositionList[0].id
-            );
-            this.$set(
-              parasm,
-              this.countObj.unitKey,
-              item.packageDispositionList[0].conversionUnit
-            );
-          }
+          this.$set(
+            this.form.datasource[index],
+            'discountTotalPrice',
+            this.getDiscountTotalPrice(item)
+          );
+        });
+        this.$emit('setDiscountTotalPrice', val);
 
-          // 其他基础信息
-          this.$set(parasm, 'arrivalWay', item.arrivalWay || 1);
-          this.$set(parasm, 'imgCode', item.imgCode);
-          this.$set(parasm, 'produceType', item.componentAttribute);
+        this.$forceUpdate();
+        this.$refs.table.reRenderTable();
+      },
+      setAllValueChange({ key, value }) {
+        let indexS = this.selection.map((item) => item.key - 1);
+        indexS.forEach((i) => {
+          this.$set(this.form.datasource[i], key, value);
+          this.setDeliveryDays(this.form.datasource[i], i, 'guaranteePeriod');
+        });
+      },
+      //获取折让单价
+      getDiscountSinglePrice(row) {
+        let num =
+          (Number(this.form.discountTotalPrice) / Number(this.allPrice)) *
+          Number(row.singlePrice);
+        return isNaN(num) ? '' : num;
+      },
 
-          // 订单编码关联
-          if (this.isOrderNo) {
-            this.$set(parasm, 'orderNo', this.orderOption[0]?.orderNo);
-            this.$set(parasm, 'orderId', this.orderOption[0]?.orderId);
-          }
+      //获取折让合计
+      getDiscountTotalPrice(row) {
+        let num = 0;
+        num = Number(row.discountSinglePrice) * Number(row.totalCount);
+        return isNaN(num) ? '' : num.toFixed(2);
+      },
+      orderNoChange(row, item) {
+        row['orderId'] = item.orderId;
+      },
+      //修改回显
+      async putTableValue(data) {
+        let productList =
+          (data &&
+            (data.quoteProductList || data.productList || data.detailList)) ||
+          [];
+        if (productList) {
+          let supplierObj = await this.getSupplierObj(productList, 'productId');
+
+          productList.forEach((item, index) => {
+            item['key'] = index + 1;
+            if (item.modelKey) {
+              item.modelKey = item.modelKey.split(',');
+            }
+            if (item.colorKey) {
+              item.colorKey = item.colorKey.split(',');
+            }
+            item.pricingWay =
+              item.pricingWay ||
+              data.pricingWay ||
+              data?.contractVO?.pricingWay;
 
-          // 商品价格信息
-          if (this.isGoods && item.goodsId) {
-            this.$set(parasm, 'goodsId', item.goodsId);
-            this.$set(parasm, 'goodsPriceId', item.goodsPriceId);
-            this.$set(parasm, 'goodsPriceType', item.goodsPriceType);
-            this.$set(parasm, 'singlePrice', item.singlePrice);
-            this.$set(parasm, 'notaxSinglePrice', item.notaxSinglePrice);
-            this.$set(parasm, 'taxRate', item.taxRate);
-            this.$set(parasm, 'discountSinglePrice', item.singlePrice);
-            this.$set(parasm, 'totalCount', '');
-          } else {
-            this.$set(parasm, 'singlePrice', parasm.singlePrice || 0);
-          }
+            item.guaranteePeriodUnitCode = item.guaranteePeriodUnitCode
+              ? item.guaranteePeriodUnitCode + ''
+              : '';
 
-          // 供应商信息
-          if (this.isSupplier) {
+            let guaranteePeriodUnitName = this.guaranteePeriodUnit(
+              item.guaranteePeriodUnitCode
+            );
+            if (item.guaranteePeriod && item.guaranteePeriodUnitCode) {
+              item['guaranteePeriodDeadline'] =
+                item['guaranteePeriodDeadline'] ||
+                guaranteePeriodUnitName != 'second'
+                  ? this.setDay(
+                      item.guaranteePeriod,
+                      guaranteePeriodUnitName,
+                      item
+                    )
+                  : '';
+            }
+            item.entrustedEnterpriseIdList = supplierObj[item.productId];
+            if (supplierObj[item.productId]?.length === 1) {
+              item.entrustedEnterpriseId = supplierObj[item.productId][0].id;
+            }
+            item['customerMark'] = item.customerMark || this.customerMark;
+            item['arrivalWay'] = item.arrivalWay || 1;
+
+            // 初始化新增字段
+
+            this.$set(item, 'thickNess', item.thickNess || '');
+            this.$set(item, 'squareNumber', item.squareNumber || '');
             this.$set(
-              parasm,
-              'entrustedEnterpriseIdList',
-              item.entrustedEnterpriseIdList
+              item,
+              'processingFeeBeforeTax',
+              item.processingFeeBeforeTax || ''
             );
             this.$set(
-              parasm,
-              'entrustedEnterpriseId',
-              item.entrustedEnterpriseId
+              item,
+              'packagingFeeNotTaxed',
+              item.packagingFeeNotTaxed || ''
+            );
+            this.$set(
+              item,
+              'transportationFeeWithoutTax',
+              item.transportationFeeWithoutTax || ''
             );
+          });
+          this.form.datasource = productList;
+
+          let codeList = this.form.datasource
+            .filter((item) => item.productCode)
+            .map((item) => item.productCode);
+          //获取仓库库存
+          let inventoryTotalList = await getInventoryTotalAPI(codeList);
+          this.form.datasource
+            .filter((item) => item.productCode)
+            .forEach((item, index) => {
+              let find =
+                inventoryTotalList.find(
+                  (key) => key.code == item.productCode
+                ) || {};
+              this.form.datasource;
+              this.$set(
+                this.form.datasource[index],
+                'availableCountBase',
+                find.availableCountBase
+              );
+            });
+          if (this.isChangeCount) {
+            this.changeCount();
+          } else {
+            this.allPrice = data.totalAmount || data?.contractVO?.totalPrice;
           }
 
-          // 其他扩展信息
-          this.$set(parasm, 'approvalNumber', item.extField?.approvalNumber);
-          this.$set(
-            parasm,
-            'packingSpecification',
-            item.extField.packingSpecification
-          );
-          this.$set(parasm, 'customerMark', this.customerMark);
-          if (item.purchaseOrigins?.length > 0) {
-            item.purchaseOrigins = item.purchaseOrigins.map((val) => val + '');
-          }
-          this.$set(parasm, 'provenance', item.purchaseOrigins || []);
-
-          // 数量初始化
-          this.$set(parasm, this.countObj.countKey, 1);
-          this.$set(parasm, 'totalCount', 1);
-
-          // 初始化新增字段
-          this.$set(parasm, 'thickNess', '');
-          this.$set(parasm, 'squareNumber', '');
-          this.$set(parasm, 'processingFeeBeforeTax', '');
-          this.$set(parasm, 'packagingFeeNotTaxed', '');
-          this.$set(parasm, 'transportationFeeWithoutTax', '');
-
-          if (item.id) {
-            const priceData = await getNewsGoodsByCategoryId(item.id);
-            if (priceData?.unitPrice) {
-              this.$set(parasm, 'singlePrice', priceData.unitPrice);
-            }
+          if (this.isDiscountTotalPrice) {
+            this.form.discountTotalPrice =
+              data.payAmount || data?.contractVO?.discountTotalPrice;
           }
+          this.$refs.table.reload();
+        }
+      },
 
-          if (idx === -1) {
-            this.form.datasource.push(row);
-          }
-        } catch (error) {
-          console.error(`处理第${loopIndex + 1}个产品失败:`, error);
-          this.$message.error(
-            `加载产品信息失败: ${error.message || '未知错误'}`
-          );
+      //选择产品
+      handParent(row, index) {
+        let item = {
+          id: row?.productCode
+        };
+        if (row?.goodsId) {
+          this.handGoods(index);
+          return;
         }
-      }
-      // 重新计算总价
-      this.changeCount();
-    },
-    async replaceTable(obj, idx) {
-      // 遍历对象,使用 for...of 支持 async/await
-      for (const [loopIndex, item] of obj.entries()) {
-        try {
-          // 计算当前行索引
-          let i = idx === -1 ? loopIndex : idx;
-          // 初始化行数据
-          let row = JSON.parse(JSON.stringify(this.defaultForm));
-          row.key = this.form.datasource.length + 1;
-          let parasm = idx === -1 ? row : this.form.datasource[i];
-
-          // 基础信息设置
-          this.$set(parasm, 'customerMark', this.customerMark);
-          this.$set(parasm, 'productId', item.productId);
-          this.$set(parasm, 'categoryName', item.productName);
-          this.$set(parasm, 'productCategoryId', item.categoryLevelId);
-          this.$set(parasm, 'productBrand', item.productBrand);
-          this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
-          this.$set(parasm, 'productCode', item.productCode);
-          this.$set(parasm, 'productName', item.productName);
-          this.$set(parasm, 'modelType', item.categoryModel);
-          this.$set(parasm, 'availableCountBase', item.measureQuantity);
-          this.$set(parasm, 'measuringUnit', item.measuringUnit);
-          this.$set(parasm, 'specification', item.specification);
-          this.$set(parasm, 'weightUnit', item.weightUnit);
-          this.$set(parasm, 'singleWeight', item.weight);
-          this.$set(parasm, 'pricingWay', 1);
-          this.$set(parasm, 'arrivalWay', item.arrivalWay || 1);
-          this.$set(parasm, 'batchNo', item.batchNo);
-          this.$set(parasm, 'imgCode', '');
-          this.$set(parasm, 'produceType', item.componentAttribute);
-
-          // 异步获取商品数据(核心修复:await 正确使用)
-          const goodsData = await getGoodsByCategoryId(item.productId);
-          const validGoods = goodsData.filter((g) => g.approvalStatus === 2);
-
-          if (validGoods.length) {
-            const goodsPrice = validGoods[0].goodsPriceList[0];
-            this.$set(parasm, 'goodsId', validGoods[0].id);
-            this.$set(parasm, 'goodsPriceId', goodsPrice?.id);
-            this.$set(parasm, 'goodsPriceType', goodsPrice?.priceType);
-            this.$set(parasm, 'singlePrice', goodsPrice?.unitPrice || 0);
-            this.$set(parasm, 'notaxSinglePrice', goodsPrice?.excludeTaxPrice);
-            this.$set(parasm, 'taxRate', goodsPrice?.taxRate);
-            this.$set(parasm, 'discountSinglePrice', goodsPrice?.unitPrice);
-            this.$set(parasm, 'totalCount', '');
-          } else {
-            this.$set(parasm, 'singlePrice', 0);
-          }
+        if (this.needProduce == 1 || this.needProduce == 2) {
+          this.$refs.productListRef.open(item, index);
+        } else {
+          this.$refs.selectStockLedgerDialogRef.open(item, index);
+        }
+      },
+      handGoods(index) {
+        this.$refs.commodityPriceListDialogRef.open(index);
+      },
+      //选择技术人回调
+      changeAnswer(obj, idx) {
+        this.$set(this.form.datasource[idx], 'technicalAnswerId', obj.id);
+        this.$set(this.form.datasource[idx], 'technicalAnswerName', obj.name);
+      },
+      handHead(row, index) {
+        let item = {
+          id: row.technicalAnswerId
+        };
+        this.$refs.headRef.open(item, index);
+      },
+      //选择产品回调
+      async changeParent(obj, idx) {
+        for (const [loopIndex, item] of obj.entries()) {
+          try {
+            let i = idx === -1 ? loopIndex : idx;
+            let row = JSON.parse(JSON.stringify(this.defaultForm));
+            row.key = this.form.datasource.length + 1;
+            let parasm = idx === -1 ? row : this.form.datasource[i];
+            this.$set(parasm, 'productId', item.id);
+            this.$set(parasm, 'categoryName', item.name);
+            this.$set(parasm, 'productCategoryId', item.categoryLevelId);
+            this.$set(parasm, 'productBrand', item.brandNum);
+            this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
+            this.$set(parasm, 'productCode', item.code);
+            this.$set(parasm, 'productName', item.name);
+            this.$set(parasm, 'modelType', item.modelType);
+            this.$set(parasm, 'availableCountBase', item.availableCountBase);
+            this.$set(parasm, 'measuringUnit', item.measuringUnit);
+            this.$set(parasm, 'specification', item.specification);
+            this.$set(parasm, 'weightUnit', item.weightUnit);
+            this.$set(parasm, 'singleWeight', item.netWeight);
+            this.$set(parasm, 'pricingWay', 1);
+            this.$set(parasm, 'goodsLevel', item.goodsLevel);
+            this.$set(parasm, 'guaranteePeriod', item.warrantyPeriod);
+
+            // 处理机型/颜色(数组化)
+            if (item.modelKey) {
+              this.$set(parasm, 'modelKey', item.modelKey.split(','));
+            }
+            if (item.colorKey) {
+              this.$set(parasm, 'colorKey', item.colorKey.split(','));
+            }
 
-          // 机型/颜色处理
-          if (item.modelKey) {
-            this.$set(parasm, 'modelKey', item.modelKey.split(','));
-          }
-          if (item.colorKey) {
-            this.$set(parasm, 'colorKey', item.colorKey.split(','));
-          }
+            // 设置默认税率
+            if (this.defTaxRate) {
+              this.$set(parasm, 'taxRate', parasm.taxRate || this.defTaxRate);
+            }
 
-          // 供应商信息
-          if (this.isSupplier) {
+            // 处理保质期单位和截止日期
             this.$set(
               parasm,
-              'entrustedEnterpriseIdList',
-              item.entrustedEnterpriseIdList
+              'guaranteePeriodUnitCode',
+              item.warrantyPeriodUnit ? item.warrantyPeriodUnit + '' : ''
             );
-            this.$set(
-              parasm,
-              'entrustedEnterpriseId',
-              item.entrustedEnterpriseId
-            );
-          }
+            if (item.warrantyPeriod && item.warrantyPeriodUnit) {
+              this.$set(
+                parasm,
+                'guaranteePeriodDeadline',
+                this.setDay(
+                  item.warrantyPeriod,
+                  this.guaranteePeriodUnit(item.warrantyPeriodUnit),
+                  {}
+                )
+              );
+            }
 
-          // 包装规格
-          this.$set(
-            parasm,
-            'packageDispositionList',
-            item.packageDispositionList
-          );
-          if (item.packageDispositionList?.length) {
+            // 处理包装规格
             this.$set(
               parasm,
-              this.countObj.unitIdKey,
-              item.packageDispositionList[0].id
+              'packageDispositionList',
+              item.packageDispositionList
             );
-            this.$set(
-              parasm,
-              this.countObj.unitKey,
-              item.packageDispositionList[0].conversionUnit
-            );
-          }
+            if (item.packageDispositionList?.length) {
+              this.$set(
+                parasm,
+                this.countObj.unitIdKey,
+                item.packageDispositionList[0].id
+              );
+              this.$set(
+                parasm,
+                this.countObj.unitKey,
+                item.packageDispositionList[0].conversionUnit
+              );
+            }
 
-          // 其他信息
-          this.$set(parasm, 'approvalNumber', item.extField?.approvalNumber);
-          this.$set(
-            parasm,
-            'packingSpecification',
-            item.extField.packingSpecification
-          );
-          this.$set(parasm, 'customerMark', this.customerMark);
-          if (item.purchaseOrigins?.length > 0) {
-            item.purchaseOrigins = item.purchaseOrigins.map((val) => val + '');
-          }
-          this.$set(parasm, 'provenance', item.purchaseOrigins || []);
+            // 其他基础信息
+            this.$set(parasm, 'arrivalWay', item.arrivalWay || 1);
+            this.$set(parasm, 'imgCode', item.imgCode);
+            this.$set(parasm, 'produceType', item.componentAttribute);
 
-          // 数量初始化
-          this.$set(parasm, this.countObj.countKey, 1);
-          this.$set(parasm, 'totalCount', 1);
+            // 订单编码关联
+            if (this.isOrderNo) {
+              this.$set(parasm, 'orderNo', this.orderOption[0]?.orderNo);
+              this.$set(parasm, 'orderId', this.orderOption[0]?.orderId);
+            }
+
+            // 商品价格信息
+            if (this.isGoods && item.goodsId) {
+              this.$set(parasm, 'goodsId', item.goodsId);
+              this.$set(parasm, 'goodsPriceId', item.goodsPriceId);
+              this.$set(parasm, 'goodsPriceType', item.goodsPriceType);
+              this.$set(parasm, 'singlePrice', item.singlePrice);
+              this.$set(parasm, 'notaxSinglePrice', item.notaxSinglePrice);
+              this.$set(parasm, 'taxRate', item.taxRate);
+              this.$set(parasm, 'discountSinglePrice', item.singlePrice);
+              this.$set(parasm, 'totalCount', '');
+            } else {
+              this.$set(parasm, 'singlePrice', parasm.singlePrice || 0);
+            }
 
-          // 初始化新增字段
-          this.$set(parasm, 'thickNess', '');
-          this.$set(parasm, 'squareNumber', '');
-          this.$set(parasm, 'processingFeeBeforeTax', '');
-          this.$set(parasm, 'packagingFeeNotTaxed', '');
-          this.$set(parasm, 'transportationFeeWithoutTax', '');
+            // 供应商信息
+            if (this.isSupplier) {
+              this.$set(
+                parasm,
+                'entrustedEnterpriseIdList',
+                item.entrustedEnterpriseIdList
+              );
+              this.$set(
+                parasm,
+                'entrustedEnterpriseId',
+                item.entrustedEnterpriseId
+              );
+            }
 
-          // 交期默认值
-          parasm.customerExpectDeliveryDeadline = dayjs().format('YYYY-MM-DD');
+            // 其他扩展信息
+            this.$set(parasm, 'approvalNumber', item.extField?.approvalNumber);
+            this.$set(
+              parasm,
+              'packingSpecification',
+              item.extField.packingSpecification
+            );
+            this.$set(parasm, 'customerMark', this.customerMark);
+            if (item.purchaseOrigins?.length > 0) {
+              item.purchaseOrigins = item.purchaseOrigins.map(
+                (val) => val + ''
+              );
+            }
+            this.$set(parasm, 'provenance', item.purchaseOrigins || []);
+
+            // 数量初始化
+            this.$set(parasm, this.countObj.countKey, 1);
+            this.$set(parasm, 'totalCount', 1);
+
+            // 初始化新增字段
+            this.$set(parasm, 'thickNess', '');
+            this.$set(parasm, 'squareNumber', '');
+            this.$set(parasm, 'processingFeeBeforeTax', '');
+            this.$set(parasm, 'packagingFeeNotTaxed', '');
+            this.$set(parasm, 'transportationFeeWithoutTax', '');
+
+            if (item.id) {
+              const priceData = await getNewsGoodsByCategoryId(item.id);
+              if (priceData?.unitPrice) {
+                this.$set(parasm, 'singlePrice', priceData.unitPrice);
+              }
+            }
 
-          // 新增行则推入数据源
-          if (idx === -1) {
-            this.form.datasource.push(row);
+            if (idx === -1) {
+              this.form.datasource.push(row);
+            }
+          } catch (error) {
+            console.error(`处理第${loopIndex + 1}个产品失败:`, error);
+            this.$message.error(
+              `加载产品信息失败: ${error.message || '未知错误'}`
+            );
           }
-        } catch (error) {
-          console.error(`处理第${loopIndex + 1}个库存项失败:`, error);
-          this.$message.error(
-            `加载库存信息失败: ${error.message || '未知错误'}`
-          );
         }
-      }
-    },
-    remove(index) {
-      this.form.datasource.splice(index, 1);
-      this.setSort();
-      this.changeAll();
-    },
+        // 重新计算总价
+        this.changeCount();
+      },
+      async replaceTable(obj, idx) {
+        // 遍历对象,使用 for...of 支持 async/await
+        for (const [loopIndex, item] of obj.entries()) {
+          try {
+            // 计算当前行索引
+            let i = idx === -1 ? loopIndex : idx;
+            // 初始化行数据
+            let row = JSON.parse(JSON.stringify(this.defaultForm));
+            row.key = this.form.datasource.length + 1;
+            let parasm = idx === -1 ? row : this.form.datasource[i];
+
+            // 基础信息设置
+            this.$set(parasm, 'customerMark', this.customerMark);
+            this.$set(parasm, 'productId', item.productId);
+            this.$set(parasm, 'categoryName', item.productName);
+            this.$set(parasm, 'productCategoryId', item.categoryLevelId);
+            this.$set(parasm, 'productBrand', item.productBrand);
+            this.$set(parasm, 'productCategoryName', item.categoryLevelPath);
+            this.$set(parasm, 'productCode', item.productCode);
+            this.$set(parasm, 'productName', item.productName);
+            this.$set(parasm, 'modelType', item.categoryModel);
+            this.$set(parasm, 'availableCountBase', item.measureQuantity);
+            this.$set(parasm, 'measuringUnit', item.measuringUnit);
+            this.$set(parasm, 'specification', item.specification);
+            this.$set(parasm, 'weightUnit', item.weightUnit);
+            this.$set(parasm, 'singleWeight', item.weight);
+            this.$set(parasm, 'pricingWay', 1);
+            this.$set(parasm, 'arrivalWay', item.arrivalWay || 1);
+            this.$set(parasm, 'batchNo', item.batchNo);
+            this.$set(parasm, 'imgCode', '');
+            this.$set(parasm, 'produceType', item.componentAttribute);
+
+            // 异步获取商品数据(核心修复:await 正确使用)
+            const goodsData = await getGoodsByCategoryId(item.productId);
+            const validGoods = goodsData.filter((g) => g.approvalStatus === 2);
+
+            if (validGoods.length) {
+              const goodsPrice = validGoods[0].goodsPriceList[0];
+              this.$set(parasm, 'goodsId', validGoods[0].id);
+              this.$set(parasm, 'goodsPriceId', goodsPrice?.id);
+              this.$set(parasm, 'goodsPriceType', goodsPrice?.priceType);
+              this.$set(parasm, 'singlePrice', goodsPrice?.unitPrice || 0);
+              this.$set(
+                parasm,
+                'notaxSinglePrice',
+                goodsPrice?.excludeTaxPrice
+              );
+              this.$set(parasm, 'taxRate', goodsPrice?.taxRate);
+              this.$set(parasm, 'discountSinglePrice', goodsPrice?.unitPrice);
+              this.$set(parasm, 'totalCount', '');
+            } else {
+              this.$set(parasm, 'singlePrice', 0);
+            }
 
-    // 重新排序
-    setSort() {
-      this.form.datasource.forEach((n, index) => {
-        n.key = index + 1;
-      });
-    },
-    // 添加
-    handlAdd() {
-      let item = JSON.parse(JSON.stringify(this.defaultForm));
-      item.key = this.form.datasource.length + 1;
-      item.customerMark = this.customerMark;
-      // 为临时产品初始化可编辑字段
-      item.productName = '';
-      item.productCode = '';
-      item.measuringUnit = '';
-      item.packingSpecification = '';
-      item[this.countObj.countKey] = 1;
-      item.totalCount = 1;
-      item.customerExpectDeliveryDeadline = dayjs().format('YYYY-MM-DD');
-
-      // 初始化新增字段
-      item.thickNess = '';
-      item.squareNumber = '';
-      item.processingFeeBeforeTax = '';
-      item.packagingFeeNotTaxed = '';
-      item.transportationFeeWithoutTax = '';
-
-      this.form.datasource.push(item);
-    },
+            // 机型/颜色处理
+            if (item.modelKey) {
+              this.$set(parasm, 'modelKey', item.modelKey.split(','));
+            }
+            if (item.colorKey) {
+              this.$set(parasm, 'colorKey', item.colorKey.split(','));
+            }
 
-    validateForm(callback) {
-      this.$refs.form.validate((valid, obj) => {
-        if (obj) {
-          let messages = Object.keys(obj).map((key) => obj[key][0]);
-          if (messages.length > 0) {
-            this.$message.warning(messages[0].message);
-          }
-        }
-        callback(valid);
-      });
-    },
-    goodsPriceTypeChange(row, index) {
-      if (row.goodsId) {
-        getGoodsPriceByCondition({
-          id: row.goodsId,
-          priceType: row.goodsPriceType
-        }).then((res) => {
-          if (res.id) {
-            this.$set(this.form.datasource[index], 'goodsPriceId', res.id);
-            this.$set(
-              this.form.datasource[index],
-              'goodsPriceType',
-              res.priceType
-            );
+            // 供应商信息
+            if (this.isSupplier) {
+              this.$set(
+                parasm,
+                'entrustedEnterpriseIdList',
+                item.entrustedEnterpriseIdList
+              );
+              this.$set(
+                parasm,
+                'entrustedEnterpriseId',
+                item.entrustedEnterpriseId
+              );
+            }
+
+            // 包装规格
             this.$set(
-              this.form.datasource[index],
-              'singlePrice',
-              res.unitPrice
+              parasm,
+              'packageDispositionList',
+              item.packageDispositionList
             );
+            if (item.packageDispositionList?.length) {
+              this.$set(
+                parasm,
+                this.countObj.unitIdKey,
+                item.packageDispositionList[0].id
+              );
+              this.$set(
+                parasm,
+                this.countObj.unitKey,
+                item.packageDispositionList[0].conversionUnit
+              );
+            }
+
+            // 其他信息
+            this.$set(parasm, 'approvalNumber', item.extField?.approvalNumber);
             this.$set(
-              this.form.datasource[index],
-              'notaxSinglePrice',
-              res.excludeTaxPrice
+              parasm,
+              'packingSpecification',
+              item.extField.packingSpecification
             );
-            this.$set(this.form.datasource[index], 'taxRate', res.taxRate);
-            this.$set(
-              this.form.datasource[index],
-              'discountSinglePrice',
-              res.unitPrice
+            this.$set(parasm, 'customerMark', this.customerMark);
+            if (item.purchaseOrigins?.length > 0) {
+              item.purchaseOrigins = item.purchaseOrigins.map(
+                (val) => val + ''
+              );
+            }
+            this.$set(parasm, 'provenance', item.purchaseOrigins || []);
+
+            // 数量初始化
+            this.$set(parasm, this.countObj.countKey, 1);
+            this.$set(parasm, 'totalCount', 1);
+
+            // 初始化新增字段
+            this.$set(parasm, 'thickNess', '');
+            this.$set(parasm, 'squareNumber', '');
+            this.$set(parasm, 'processingFeeBeforeTax', '');
+            this.$set(parasm, 'packagingFeeNotTaxed', '');
+            this.$set(parasm, 'transportationFeeWithoutTax', '');
+
+            // 交期默认值
+            parasm.customerExpectDeliveryDeadline =
+              dayjs().format('YYYY-MM-DD');
+
+            // 新增行则推入数据源
+            if (idx === -1) {
+              this.form.datasource.push(row);
+            }
+          } catch (error) {
+            console.error(`处理第${loopIndex + 1}个库存项失败:`, error);
+            this.$message.error(
+              `加载库存信息失败: ${error.message || '未知错误'}`
             );
           }
-          this.changeCount(row, index);
+        }
+      },
+      remove(index) {
+        this.form.datasource.splice(index, 1);
+        this.setSort();
+        this.changeAll();
+      },
+
+      // 重新排序
+      setSort() {
+        this.form.datasource.forEach((n, index) => {
+          n.key = index + 1;
+        });
+      },
+      // 添加
+      handlAdd() {
+        let item = JSON.parse(JSON.stringify(this.defaultForm));
+        item.key = this.form.datasource.length + 1;
+        item.customerMark = this.customerMark;
+        // 为临时产品初始化可编辑字段
+        item.productName = '';
+        item.productCode = '';
+        item.measuringUnit = '';
+        item.packingSpecification = '';
+        item[this.countObj.countKey] = 1;
+        item.totalCount = 1;
+        item.customerExpectDeliveryDeadline = dayjs().format('YYYY-MM-DD');
+
+        // 初始化新增字段
+        item.thickNess = '';
+        item.squareNumber = '';
+        item.processingFeeBeforeTax = '';
+        item.packagingFeeNotTaxed = '';
+        item.transportationFeeWithoutTax = '';
+
+        this.form.datasource.push(item);
+      },
+
+      validateForm(callback) {
+        this.$refs.form.validate((valid, obj) => {
+          if (obj) {
+            let messages = Object.keys(obj).map((key) => obj[key][0]);
+            if (messages.length > 0) {
+              this.$message.warning(messages[0].message);
+            }
+          }
+          callback(valid);
         });
+      },
+      goodsPriceTypeChange(row, index) {
+        if (row.goodsId) {
+          getGoodsPriceByCondition({
+            id: row.goodsId,
+            priceType: row.goodsPriceType
+          }).then((res) => {
+            if (res.id) {
+              this.$set(this.form.datasource[index], 'goodsPriceId', res.id);
+              this.$set(
+                this.form.datasource[index],
+                'goodsPriceType',
+                res.priceType
+              );
+              this.$set(
+                this.form.datasource[index],
+                'singlePrice',
+                res.unitPrice
+              );
+              this.$set(
+                this.form.datasource[index],
+                'notaxSinglePrice',
+                res.excludeTaxPrice
+              );
+              this.$set(this.form.datasource[index], 'taxRate', res.taxRate);
+              this.$set(
+                this.form.datasource[index],
+                'discountSinglePrice',
+                res.unitPrice
+              );
+            }
+            this.changeCount(row, index);
+          });
+        }
+      },
+      save() {
+        this.$emit('save');
       }
-    },
-    save() {
-      this.$emit('save');
     }
-  }
-};
+  };
 </script>
 <style lang="scss" scoped>
-.headbox {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
+  .headbox {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .amount {
+      font-size: 14px;
+      font-weight: bold;
+      padding-right: 30px;
+    }
+  }
 
-  .amount {
-    font-size: 14px;
-    font-weight: bold;
-    padding-right: 30px;
+  .time-form .el-form-item {
+    margin-bottom: 0 !important;
   }
-}
 
-.time-form .el-form-item {
-  margin-bottom: 0 !important;
-}
+  ::v-deep .period {
+    display: flex;
 
-::v-deep .period {
-  display: flex;
+    .borderleftnone {
+      .el-input--medium .el-input__inner {
+        border-top-right-radius: 0;
+        border-bottom-right-radius: 0;
+      }
+    }
 
-  .borderleftnone {
-    .el-input--medium .el-input__inner {
-      border-top-right-radius: 0;
-      border-bottom-right-radius: 0;
+    .borderrightnone {
+      .el-input--medium .el-input__inner {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0;
+      }
     }
   }
 
-  .borderrightnone {
-    .el-input--medium .el-input__inner {
-      border-top-left-radius: 0;
-      border-bottom-left-radius: 0;
-    }
+  ::v-deep .time-form tbody > tr:hover > td {
+    background-color: transparent !important;
+  }
+
+  ::v-deep .time-form .el-table tr {
+    background-color: #ffffff;
+  }
+
+  .pricebox {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    font-weight: bold;
   }
-}
-
-::v-deep .time-form tbody > tr:hover > td {
-  background-color: transparent !important;
-}
-
-::v-deep .time-form .el-table tr {
-  background-color: #ffffff;
-}
-
-.pricebox {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  font-weight: bold;
-}
-</style>
+</style>

+ 43 - 8
src/BIZComponents/inventoryTableDetails.vue

@@ -130,7 +130,14 @@
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.quotationSubtotalBeforeTax'"
         >
-          {{ (Number(scope.row.processingFeeBeforeTax) + Number(scope.row.packagingFeeNotTaxed) + Number(scope.row.transportationFeeWithoutTax)).toFixed(2) }} 元
+          {{
+            (
+              Number(scope.row.processingFeeBeforeTax) +
+              Number(scope.row.packagingFeeNotTaxed) +
+              Number(scope.row.transportationFeeWithoutTax)
+            ).toFixed(2)
+          }}
+          元
         </el-form-item>
       </template>
 
@@ -139,7 +146,13 @@
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.modelKey'"
         >
-          {{ scope.row.modelKey ? (Array.isArray(scope.row.modelKey) ? scope.row.modelKey.join(',') : scope.row.modelKey) : '' }}
+          {{
+            scope.row.modelKey
+              ? Array.isArray(scope.row.modelKey)
+                ? scope.row.modelKey.join(',')
+                : scope.row.modelKey
+              : ''
+          }}
         </el-form-item>
       </template>
 
@@ -148,7 +161,13 @@
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.colorKey'"
         >
-          {{ scope.row.colorKey ? (Array.isArray(scope.row.colorKey) ? scope.row.colorKey.join(',') : scope.row.colorKey) : '' }}
+          {{
+            scope.row.colorKey
+              ? Array.isArray(scope.row.colorKey)
+                ? scope.row.colorKey.join(',')
+                : scope.row.colorKey
+              : ''
+          }}
         </el-form-item>
       </template>
 
@@ -245,6 +264,11 @@
             unitIdKey: 'saleUnitId'
           };
         }
+      },
+      //是否显示生产要求
+      isProductionRequirements: {
+        type: Boolean,
+        default: false
       }
     },
     data() {
@@ -392,6 +416,16 @@
             label: '生产编号',
             align: 'center'
           },
+          this.isProductionRequirements
+            ? {
+                minWidth: 280,
+                prop: 'productionRequirements',
+                label: '生产要求',
+                align: 'center'
+              }
+            : {
+                width: 1
+              },
           this.isCustomerMark
             ? {
                 minWidth: 120,
@@ -886,13 +920,14 @@
           [];
         if (productList) {
           // 处理新增字段
-          productList.forEach(item => {
+          productList.forEach((item) => {
             item.thickNess = item.thickNess || '';
             item.squareNumber = item.squareNumber || '';
             item.processingFeeBeforeTax = item.processingFeeBeforeTax || '';
             item.packagingFeeNotTaxed = item.packagingFeeNotTaxed || '';
-            item.transportationFeeWithoutTax = item.transportationFeeWithoutTax || '';
-            
+            item.transportationFeeWithoutTax =
+              item.transportationFeeWithoutTax || '';
+
             // 处理机型/颜色
             if (item.modelKey && typeof item.modelKey === 'string') {
               item.modelKey = item.modelKey.split(',');
@@ -901,7 +936,7 @@
               item.colorKey = item.colorKey.split(',');
             }
           });
-          
+
           this.form.datasource = productList;
           this.allPrice =
             data.totalAmount || data.totalPrice || data?.contractVO?.totalPrice;
@@ -992,4 +1027,4 @@
     align-items: center;
     font-weight: bold;
   }
-</style>
+</style>

+ 3 - 2
src/views/contractManage/contractBook/components/addDialog.vue

@@ -200,14 +200,14 @@
           <el-form-item prop="contractFile" label="合同附件">
             <fileMain v-model="form.fileId"></fileMain>
           </el-form-item>
-          <el-form-item prop="productionRequirements" label="生产要求">
+          <!-- <el-form-item prop="productionRequirements" label="生产要求">
             <el-input
               clearable
               v-model="form.productionRequirements"
               placeholder="请输入"
               type="textarea"
             />
-          </el-form-item>
+          </el-form-item> -->
         </el-col>
         <el-col :span="12">
           <el-form-item label="合同分类" prop="categoryId" style="width: 100%">
@@ -522,6 +522,7 @@
             :cacheKeyUrl="cacheKeyUrl"
             :isArrivalWay="true"
             :isGoods="true"
+            :isProductionRequirements="form.type == '1'"
             :countObj="{
               countKey: 'contractCount',
               unitKey: 'contractUnit',

+ 165 - 164
src/views/contractManage/contractBook/components/detailDialog.vue

@@ -33,7 +33,7 @@
           <el-col :span="12">
             <el-form-item label="合同类型:" prop="type">
               <el-input v-model="form.categoryName" disabled>
-                <template slot="prepend">{{ form.typeName}}</template>
+                <template slot="prepend">{{ form.typeName }}</template>
               </el-input>
             </el-form-item>
 
@@ -138,9 +138,9 @@
             <el-form-item prop="contractFile" label="合同附件:">
               <fileMain v-model="form.fileId" type="view"></fileMain>
             </el-form-item>
-            <el-form-item prop="productionRequirements" label="生产要求:">
+            <!-- <el-form-item prop="productionRequirements" label="生产要求:">
               <el-input v-model="form.productionRequirements" type="textarea" disabled></el-input>
-            </el-form-item>
+            </el-form-item> -->
           </el-col>
         </el-row>
         <headerTitle title="基本信息"></headerTitle>
@@ -237,6 +237,7 @@
             :pricingWay="form.pricingWay"
             :isChangeCount="false"
             :cacheKeyUrl="cacheKeyUrl"
+            :isProductionRequirements="form.type == '1'"
             :countObj="{
               countKey: 'contractCount',
               unitKey: 'contractUnit',
@@ -289,178 +290,178 @@
 </template>
 
 <script>
-import { getDetail, getExport } from '@/api/contractManage/contractBook';
-import { getFile } from '@/api/system/file';
-import dictMixins from '@/mixins/dictMixins';
-import { copyObj } from '@/utils/util';
-import bpmDetail from '@/views/bpm/processInstance/detail.vue';
-import inventoryTabledetail from '@/BIZComponents/inventoryTableDetails.vue';
-import changeList from './changeList.vue';
-import paymentList from './paymentList.vue';
+  import { getDetail, getExport } from '@/api/contractManage/contractBook';
+  import { getFile } from '@/api/system/file';
+  import dictMixins from '@/mixins/dictMixins';
+  import { copyObj } from '@/utils/util';
+  import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+  import inventoryTabledetail from '@/BIZComponents/inventoryTableDetails.vue';
+  import changeList from './changeList.vue';
+  import paymentList from './paymentList.vue';
 
-export default {
-  mixins: [dictMixins],
-  components: {
-    inventoryTabledetail,
-    bpmDetail,
-    changeList,
-    paymentList
-  },
-  data() {
-    return {
-      fullscreen: false,
-      cacheKeyUrl: 'eos-contractManage-contractBook-inventoryTableDetails',
-      activeName: '1',
-      activeComp: 'main',
-      tabOptions: [
-        { key: 'main', name: '合同详情' },
-        { key: 'bpm', name: '流程详情' },
-        { key: 'changeList', name: '历史版本' }
-        // { key: 'oldMain', name: '变更记录' },
-      ],
-      visible: false,
-      detailId: '',
-      title: '详情',
-      row: {},
-      form: {},
-      rules: {},
-      detailData: {},
-      sourceTypeList: [
-        {
-          code: 1,
-          name: '报价单',
-          parentId: '1'
-        },
-        {
-          code: 2,
-          name: '核价单',
-          parentId: '2'
-        },
-        {
-          code: 3,
-          name: '采购计划',
-          parentId: '2'
-        },
-        {
-          code: 4,
-          name: '商机',
-          parentId: '1'
-        },
-        {
-          code: 5,
-          name: '退货单',
-          parentId: '1'
-        },
-        {
-          code: 6,
-          name: '客户',
-          parentId: '1'
-        },
-        {
-          code: 7,
-          name: '销售订单',
-          parentId: '1'
-        }
-      ]
-    };
-  },
-  methods: {
-    //导出
-    async exportTable() {
-      this.loading = true;
-      const response = await getExport(this.detailId);
+  export default {
+    mixins: [dictMixins],
+    components: {
+      inventoryTabledetail,
+      bpmDetail,
+      changeList,
+      paymentList
     },
-    async open(row) {
-      console.log(row);
-      this.form = row;
-      this.activeComp = 'main';
-      this.visible = true;
-      this.activeName = '1';
-      this.getDetailData(row.id);
-      this.detailId = row.id;
-    },
-    changeK(key) {
-      this.activeComp = key;
-      if (key == 'main') {
-        this.$nextTick(() => {
-          this.$refs.inventoryTabledetailRef &&
-            this.$refs.inventoryTabledetailRef.putTableValue({
-              ...this.detailData,
-              ...this.detailData.contractVO
-            });
-          this.$refs.rawDetailListRef &&
-            this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
-          this.$refs.outputDetailListRef &&
-            this.$refs.outputDetailListRef.putTableValueNew(
-              this.form.outputList
-            );
-        });
-      }
-      if (key == 'changeList') {
-        this.$nextTick(() => {
-          this.$refs.changeList.init(this.form.id);
-        });
-      }
+    data() {
+      return {
+        fullscreen: false,
+        cacheKeyUrl: 'eos-contractManage-contractBook-inventoryTableDetails',
+        activeName: '1',
+        activeComp: 'main',
+        tabOptions: [
+          { key: 'main', name: '合同详情' },
+          { key: 'bpm', name: '流程详情' },
+          { key: 'changeList', name: '历史版本' }
+          // { key: 'oldMain', name: '变更记录' },
+        ],
+        visible: false,
+        detailId: '',
+        title: '详情',
+        row: {},
+        form: {},
+        rules: {},
+        detailData: {},
+        sourceTypeList: [
+          {
+            code: 1,
+            name: '报价单',
+            parentId: '1'
+          },
+          {
+            code: 2,
+            name: '核价单',
+            parentId: '2'
+          },
+          {
+            code: 3,
+            name: '采购计划',
+            parentId: '2'
+          },
+          {
+            code: 4,
+            name: '商机',
+            parentId: '1'
+          },
+          {
+            code: 5,
+            name: '退货单',
+            parentId: '1'
+          },
+          {
+            code: 6,
+            name: '客户',
+            parentId: '1'
+          },
+          {
+            code: 7,
+            name: '销售订单',
+            parentId: '1'
+          }
+        ]
+      };
     },
-    cancel() {
-      this.$nextTick(() => {
-        // 关闭后,销毁所有的表单数据
-        (this.form = copyObj(this.formDef)),
-          (this.otherForm = copyObj(this.otherFormDef)),
-          (this.tableBankData = []);
-        this.tableLinkData = [];
-        this.visible = false;
-      });
-    },
-    downloadFile(file) {
-      getFile({ objectName: file.storePath }, file.name);
-    },
-    async getDetailData(id) {
-      this.loading = true;
-      const data = await getDetail(id);
-      this.loading = false;
-      if (data) {
-        data.productList.forEach((item) => {
-          item['pricingWay'] = item.pricingWay || data.contractVO?.pricingWay;
-        });
-        this.detailData = data;
-        this.form = data.contractVO;
-        this.$refs.paymentListTable &&
-          this.$refs.paymentListTable.putTableValue(data.receiptPaymentList);
+    methods: {
+      //导出
+      async exportTable() {
+        this.loading = true;
+        const response = await getExport(this.detailId);
+      },
+      async open(row) {
+        console.log(row);
+        this.form = row;
+        this.activeComp = 'main';
+        this.visible = true;
+        this.activeName = '1';
+        this.getDetailData(row.id);
+        this.detailId = row.id;
+      },
+      changeK(key) {
+        this.activeComp = key;
+        if (key == 'main') {
+          this.$nextTick(() => {
+            this.$refs.inventoryTabledetailRef &&
+              this.$refs.inventoryTabledetailRef.putTableValue({
+                ...this.detailData,
+                ...this.detailData.contractVO
+              });
+            this.$refs.rawDetailListRef &&
+              this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
+            this.$refs.outputDetailListRef &&
+              this.$refs.outputDetailListRef.putTableValueNew(
+                this.form.outputList
+              );
+          });
+        }
+        if (key == 'changeList') {
+          this.$nextTick(() => {
+            this.$refs.changeList.init(this.form.id);
+          });
+        }
+      },
+      cancel() {
         this.$nextTick(() => {
-          this.$refs.inventoryTabledetailRef &&
-            this.$refs.inventoryTabledetailRef.putTableValue({
-              ...data,
-              ...data.contractVO
-            });
-          this.$refs.rawDetailListRef &&
-            this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
-          this.$refs.outputDetailListRef &&
-            this.$refs.outputDetailListRef.putTableValueNew(
-              this.form.outputList
-            );
+          // 关闭后,销毁所有的表单数据
+          (this.form = copyObj(this.formDef)),
+            (this.otherForm = copyObj(this.otherFormDef)),
+            (this.tableBankData = []);
+          this.tableLinkData = [];
+          this.visible = false;
         });
+      },
+      downloadFile(file) {
+        getFile({ objectName: file.storePath }, file.name);
+      },
+      async getDetailData(id) {
+        this.loading = true;
+        const data = await getDetail(id);
+        this.loading = false;
+        if (data) {
+          data.productList.forEach((item) => {
+            item['pricingWay'] = item.pricingWay || data.contractVO?.pricingWay;
+          });
+          this.detailData = data;
+          this.form = data.contractVO;
+          this.$refs.paymentListTable &&
+            this.$refs.paymentListTable.putTableValue(data.receiptPaymentList);
+          this.$nextTick(() => {
+            this.$refs.inventoryTabledetailRef &&
+              this.$refs.inventoryTabledetailRef.putTableValue({
+                ...data,
+                ...data.contractVO
+              });
+            this.$refs.rawDetailListRef &&
+              this.$refs.rawDetailListRef.putTableValueNew(this.form.rawList); //原料
+            this.$refs.outputDetailListRef &&
+              this.$refs.outputDetailListRef.putTableValueNew(
+                this.form.outputList
+              );
+          });
+        }
       }
     }
-  }
-};
+  };
 </script>
 
 <style scoped lang="scss">
-.ele-dialog-form {
-  .el-form-item {
-    margin-bottom: 10px;
+  .ele-dialog-form {
+    .el-form-item {
+      margin-bottom: 10px;
+    }
   }
-}
 
-.headbox {
-  display: flex;
-  justify-content: flex-start;
-  align-items: center;
-  .amount {
-    font-size: 14px;
-    font-weight: bold;
-    margin-right: 20px;
+  .headbox {
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+    .amount {
+      font-size: 14px;
+      font-weight: bold;
+      margin-right: 20px;
+    }
   }
-}
 </style>

+ 54 - 48
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -167,14 +167,14 @@
           <el-form-item prop="orderFiles" label="订单附件">
             <fileMain v-model="form.orderFiles"></fileMain>
           </el-form-item>
-          <el-form-item prop="productionRequirements" label="生产要求">
+          <!-- <el-form-item prop="productionRequirements" label="生产要求">
             <el-input
               clearable
               v-model="form.productionRequirements"
               placeholder="请输入"
               type="textarea"
             />
-          </el-form-item>
+          </el-form-item> -->
         </el-col>
 
         <el-col :span="12">
@@ -189,8 +189,12 @@
               <el-option :value="1" label="商机"></el-option>
               <el-option :value="2" label="报价"></el-option>
               <el-option :value="3" label="销售合同"></el-option>
-              <el-option :value="4" label="项目"></el-option> 
-              <el-option v-if="form.saleType == 4 || form.saleType == 6" :value="5" label="退货单"></el-option> 
+              <el-option :value="4" label="项目"></el-option>
+              <el-option
+                v-if="form.saleType == 4 || form.saleType == 6"
+                :value="5"
+                label="退货单"
+              ></el-option>
             </el-select>
           </el-form-item>
 
@@ -231,10 +235,7 @@
               </template>
             </el-input>
           </el-form-item>
-          <el-form-item
-            label="发起人所属部门"
-            prop="createDeptName"
-          >
+          <el-form-item label="发起人所属部门" prop="createDeptName">
             <el-input v-model="form.createDeptName" :disabled="true"></el-input>
           </el-form-item>
         </el-col>
@@ -404,6 +405,7 @@
         :isTaxRate="isTaxRate"
         :isSinglePrice="form.needProduce != 2 && isSinglePrice != 0"
         :isBatchNo="isBatchNo == 1 && form.saleTypeName.includes('受托')"
+        :isProductionRequirements="true"
       ></inventoryTable>
       <headerTitle
         title="类型清单"
@@ -553,7 +555,11 @@
       @reload="reload"
       :callBack="callBack"
     ></process-submit-dialog>
-    <bomDialog ref="bomDialogRef" @handleSubmit="bomDialogSuccess" @reload="reload"></bomDialog>
+    <bomDialog
+      ref="bomDialogRef"
+      @handleSubmit="bomDialogSuccess"
+      @reload="reload"
+    ></bomDialog>
     <saleOrderListDialog
       ref="saleOrderListDialogRef"
       :isMy="true"
@@ -613,7 +619,7 @@
   import returnOrderDialog from '@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue';
   import opportunityDialog from '@/views/financialManage/components/opportunityDialog.vue';
   import { mapGetters } from 'vuex';
-import { resetPassword } from '@/api/system/user';
+  import { resetPassword } from '@/api/system/user';
   export default {
     mixins: [dictMixins],
     components: {
@@ -844,7 +850,7 @@ import { resetPassword } from '@/api/system/user';
       }
     },
     created() {
-      console.log('user', this.user.info)
+      console.log('user', this.user.info);
       this.changePersonel();
       this.getGroupAll();
       this.getEnterprisePage();
@@ -867,8 +873,8 @@ import { resetPassword } from '@/api/system/user';
         code: 'eom_saleOrder_single_price'
       }).then((res) => {
         this.isSinglePrice = res.value;
-        console.log('isSinglePrice', this.isSinglePrice)
-      })
+        console.log('isSinglePrice', this.isSinglePrice);
+      });
     },
     methods: {
       setCountAmount(allPrice) {
@@ -941,9 +947,9 @@ import { resetPassword } from '@/api/system/user';
           discountTotalPrice: discountTotalPrice
         });
 
-        if(this.enterprisePage.length === 1) {
+        if (this.enterprisePage.length === 1) {
           this.form.partbName = this.enterprisePage[0].name;
-          this.getEnterprise()
+          this.getEnterprise();
         }
 
         this.$nextTick(() => {
@@ -991,7 +997,6 @@ import { resetPassword } from '@/api/system/user';
           relationId: row.id
         });
         this.getReturnOrderDetail(row);
-
       },
 
       async getReturnOrderDetail(row) {
@@ -1011,34 +1016,34 @@ import { resetPassword } from '@/api/system/user';
         }
         if (res) {
           let {
-              partaAddress,
-              partaEmail,
-              partaFax,
-              partaId,
-              partaLinkId,
-              partaLinkName,
-              partaName,
-              partaTel,
-              partbAddress,
-              partbEmail,
-              partbFax,
-              partbId,
-              partbLinkId,
-              partbLinkName,
-              partbName,
-              partbTel,
-              totalPrice,
-              discountTotalPrice,
-              partaUnifiedSocialCreditCode,
-              partbUnifiedSocialCreditCode,
-              settlementMode,
-              settlementModeName,
-              pricingWay,
-              productList,
-              typedetailList,
-              totalAmount,
-              payAmount
-            } = res;
+            partaAddress,
+            partaEmail,
+            partaFax,
+            partaId,
+            partaLinkId,
+            partaLinkName,
+            partaName,
+            partaTel,
+            partbAddress,
+            partbEmail,
+            partbFax,
+            partbId,
+            partbLinkId,
+            partbLinkName,
+            partbName,
+            partbTel,
+            totalPrice,
+            discountTotalPrice,
+            partaUnifiedSocialCreditCode,
+            partbUnifiedSocialCreditCode,
+            settlementMode,
+            settlementModeName,
+            pricingWay,
+            productList,
+            typedetailList,
+            totalAmount,
+            payAmount
+          } = res;
           this.form = Object.assign({}, this.form, {
             partaAddress,
             partaEmail,
@@ -1370,8 +1375,8 @@ import { resetPassword } from '@/api/system/user';
         this.form = Object.assign({}, this.form, {
           contractId: obj.id,
           contractName: obj.contractName,
-          relationType:3,
-          productionRequirements:obj.productionRequirements,
+          relationType: 3,
+          productionRequirements: obj.productionRequirements
         });
         this.getDetailData(obj.id);
         this.$store.commit('order/setContractId', obj.id);
@@ -1460,7 +1465,8 @@ import { resetPassword } from '@/api/system/user';
       async open(type, row, contactCategoryId) {
         this.businessId = '';
         this.title = type === 'add' ? '新增' : '修改';
-        this.clientEnvironmentId=this.$store.state.user.info.clientEnvironmentId;
+        this.clientEnvironmentId =
+          this.$store.state.user.info.clientEnvironmentId;
         this.row = row;
         if (this.enterprisePage.length == 0) {
           await this.getEnterprisePage();
@@ -1599,7 +1605,7 @@ import { resetPassword } from '@/api/system/user';
           let commitData = Object.assign({}, this.form, {
             productList: this.$refs?.inventoryTable?.getTableValue() || [],
             typedetailList: this.$refs?.typeListRef?.getTableValue() || [],
-            saleTypeName: this.getDictValue('销售类型', this.form.saleType),
+            saleTypeName: this.getDictValue('销售类型', this.form.saleType)
             // progress: this.form.needProduce == 0 ? 700 : 0
           });
           commitData.productList.forEach((item) => {

+ 3 - 2
src/views/saleManage/saleOrder/components/darwerComponents/saleOrderInfo.vue

@@ -126,9 +126,9 @@
           <el-form-item prop="orderFiles" label="订单附件:">
             <fileMain v-model="form.orderFiles" type="view"></fileMain>
           </el-form-item>
-          <el-form-item prop="productionRequirements" label="生产要求:">
+          <!-- <el-form-item prop="productionRequirements" label="生产要求:">
             <el-input v-model="form.productionRequirements" type="textarea" disabled></el-input>
-          </el-form-item>
+          </el-form-item> -->
         </el-col>
       </el-row>
       <el-row>
@@ -221,6 +221,7 @@
       :isArrivalWay="true"
       pageName="send"
       :maxHeight="300"
+      :isProductionRequirements="true"
       :isWms="true"
     ></inventoryTabledetail>
     <headerTitle title="类型清单" v-if="form.needProduce == 4"></headerTitle>

+ 4 - 2
src/views/saleManage/saleOrder/components/detailDialog.vue

@@ -81,9 +81,9 @@
             <el-form-item prop="orderFiles" label="订单附件:">
               <fileMain v-model="form.orderFiles" type="view"></fileMain>
             </el-form-item>
-            <el-form-item prop="productionRequirements" label="生产要求:">
+            <!-- <el-form-item prop="productionRequirements" label="生产要求:">
               <el-input v-model="form.productionRequirements" type="textarea" disabled></el-input>
-            </el-form-item>
+            </el-form-item> -->
           </el-col>
 
           <el-col :span="12">
@@ -259,6 +259,8 @@
         :isArrivalWay="true"
         pageName="send"
         :cacheKeyUrl="cacheKeyUrl"
+        :isProductionRequirements="true"
+
       ></inventoryTabledetail>
       <headerTitle title="类型清单" v-if="form.needProduce == 4"></headerTitle>
       <typeList

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

@@ -147,7 +147,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item prop="productionRequirements" label="生产要求">
+          <!-- <el-form-item prop="productionRequirements" label="生产要求">
             <el-input
               clearable
               v-model="form.productionRequirements"
@@ -155,7 +155,7 @@
               type="textarea"
               disabled
             />
-          </el-form-item>
+          </el-form-item> -->
         </el-col>
       </el-row>
     </el-form>

+ 2 - 2
src/views/saleManage/saleOrder/invoice/components/detailDialog.vue

@@ -63,9 +63,9 @@
             <el-form-item label="回执附件:" prop="sendFiles">
               <fileMain v-model="form.repliedFiles" type="view"></fileMain>
             </el-form-item>
-            <el-form-item prop="productionRequirements" label="生产要求:">
+            <!-- <el-form-item prop="productionRequirements" label="生产要求:">
               <el-input v-model="form.productionRequirements" type="textarea" disabled></el-input>
-            </el-form-item>
+            </el-form-item> -->
           </el-col>
 
           <el-col :span="12">

+ 19 - 26
src/views/saleManage/saleOrder/invoice/components/inventoryTable.vue

@@ -84,7 +84,7 @@
             @change="batchNoChange(scope.$index, scope.row)"
           >
             <el-option
-              v-for="item in (scope.row.batchNoList || [])"
+              v-for="item in scope.row.batchNoList || []"
               :key="item.id"
               :label="item.batchNo"
               :value="item.id"
@@ -598,7 +598,12 @@
             align: 'center',
             slot: 'productionCodes'
           },
-
+          {
+            minWidth: 280,
+            prop: 'productionRequirements',
+            label: '生产要求',
+            align: 'center'
+          },
           {
             minWidth: 120,
             prop: 'goodsLevel',
@@ -1001,7 +1006,6 @@
         const data = row.warehouseList.find(
           (item) => item.warehouseId == row.warehouseId
         );
-        
 
         this.$set(
           this.form.datasource[index],
@@ -1023,17 +1027,9 @@
           warehouseOutStock || 0
         );
 
-        this.$set(
-          this.form.datasource[index],
-          'batchStockId',
-          ''
-        );
+        this.$set(this.form.datasource[index], 'batchStockId', '');
 
-        this.$set(
-          this.form.datasource[index],
-          'batchNo',
-          ''
-        );
+        this.$set(this.form.datasource[index], 'batchNo', '');
       },
 
       //批次号选择
@@ -1041,18 +1037,13 @@
         const data = row.batchNoList.find(
           (item) => item.id == row.batchStockId
         );
-        this.$set(
-          this.form.datasource[index],
-          'batchNo',
-          data.batchNo
-        );
+        this.$set(this.form.datasource[index], 'batchNo', data.batchNo);
 
         this.$set(
           this.form.datasource[index],
           'warehouseNum',
           data.measureQuantity || 0
         );
-
       },
       //改变数量
       changeCount(row, index, isBlockCount = true) {
@@ -1261,11 +1252,15 @@
             })
           );
 
-          this.$set(parasm, 'batchNoList', await getBatchList({
-            categoryCode: item.productCode,
-            warehouseId: item.warehouseId,
-            size: -1
-          }));
+          this.$set(
+            parasm,
+            'batchNoList',
+            await getBatchList({
+              categoryCode: item.productCode,
+              warehouseId: item.warehouseId,
+              size: -1
+            })
+          );
 
           this.$set(
             parasm,
@@ -1406,8 +1401,6 @@
               await this.warehouseChange(index, this.form.datasource[index]);
             }
 
-            
-
             const templist = await getBatchList({
               categoryCode: item.productCode,
               warehouseId: item.warehouseId,

+ 6 - 0
src/views/saleManage/saleOrder/invoice/components/inventoryTableDetails.vue

@@ -146,6 +146,12 @@
             label: '生产编号',
             align: 'center'
           },
+          {
+            minWidth: 280,
+            prop: 'productionRequirements',
+            label: '生产要求',
+            align: 'center'
+          },
           {
             width: 120,
             prop: 'imgCode',