yusheng 1 سال پیش
والد
کامیت
2d82bf3270

+ 6 - 2
src/views/purchasingManage/purchaseNeedManage/components/inventoryTable.vue

@@ -749,12 +749,16 @@
           this.$set(parasm, 'remark', '');
           this.$set(parasm, 'imgCode', item.imgCode);
           this.$set(parasm, 'produceType', item.produceType);
-          this.$set(parasm, 'approvalNumber', item.extField.approvalNumber);
+          this.$set(parasm, 'approvalNumber', item.extField?.approvalNumber);
           this.$set(
             parasm,
             'packingSpecification',
-            item.extField.packingSpecification
+            item.extField?.packingSpecification
           );
+          if(item.purchaseOrigins?.length>0){
+            item.purchaseOrigins=item.purchaseOrigins.map(val=>val+'')
+          }
+          this.$set(parasm, 'provenance', item.purchaseOrigins || []);
           if (idx == -1) {
             this.form.datasource.push(row);
           }

+ 3 - 0
src/views/purchasingManage/purchaseOrder/components/inventoryTable.vue

@@ -1190,6 +1190,9 @@
           );
           this.$set(parasm, 'supplierMark', this.supplierMark);
           this.$set(parasm, 'batchNo', await getCode('1900101420390125570'));
+          if(item.purchaseOrigins?.length>0){
+            item.purchaseOrigins=item.purchaseOrigins.map(val=>val+'')
+          }
           this.$set(parasm, 'provenance', item.purchaseOrigins || []);
           if (idx == -1) {
             this.form.datasource.push(row);

+ 251 - 172
src/views/purchasingManage/purchaseOrder/components/supplierGoodsListDialog.vue

@@ -9,190 +9,269 @@
     width="70%"
     :before-close="cancel"
   >
-    <ele-pro-table ref="supplyRef" :columns="supplyColumns" :need-page="false"
-                   :selection.sync="selection"
-                   :datasource="supplyList"
-                   :toolkit="[]" height="350px">
-
+    <ele-pro-table
+      ref="supplyRef"
+      :columns="supplyColumns"
+      :need-page="false"
+      :selection.sync="selection"
+      :datasource="supplyList"
+      :toolkit="[]"
+      height="350px"
+    >
+      <template v-slot:toolbar>
+        <el-button type="primary" @click="handSelectSupply">新增</el-button>
+      </template>
+      <!-- 操作栏 -->
+      <template v-slot:action="scope">
+        <el-popconfirm
+          class="ele-action"
+          title="确定要删除此物品吗?"
+          @confirm="handleRemoveSupply(scope.$index)"
+        >
+          <template v-slot:reference>
+            <el-link type="danger" :underline="false" icon="el-icon-delete">
+              删除
+            </el-link>
+          </template>
+        </el-popconfirm>
+      </template>
     </ele-pro-table>
+
     <div slot="footer" class="footer">
       <el-button type="primary" size="small" @click="selected">选择</el-button>
       <el-button @click="cancel">返回</el-button>
     </div>
+    <product-list
+      ref="productListRef"
+      :data="supplyList"
+      @changeParent="getSupplyList"
+    ></product-list>
   </ele-modal>
-
 </template>
 <script>
-
-import {contactDetail} from "@/api/saleManage/contact";
-import {getInventoryTotalAPI} from "@/api/wms";
-
-export default {
-  name: "generateContractsDialog",
-  props: {
-    supplierGoodsListDialogFlag: {
-      type: Boolean,
-      default: false,
+  import { contactDetail, contactUpdate } from '@/api/saleManage/contact';
+  import { getInventoryTotalAPI } from '@/api/wms';
+  import productList from '@/BIZComponents/product-list.vue';
+  export default {
+    name: 'generateContractsDialog',
+    props: {
+      supplierGoodsListDialogFlag: {
+        type: Boolean,
+        default: false
+      }
     },
-  },
-  data() {
-    return {
-      supplyList:[],
-      selection:[],
-      supplyColumns: [
-        {
-          label: '选择',
-          width: 45,
-          type: 'selection',
-          columnKey: 'selection',
-          align: 'center'
-        },
-        {
-          columnKey: 'index',
-          type: 'index',
-          width: 50,
-          align: 'center',
-          showOverflowTooltip: true,
-          label: '序号'
-        },
-        {
-          prop: 'productCode',
-          label: '编码',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'productName',
-          label: '名称',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'imgCode',
-          align: 'center',
-          label: '图号/件号',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'produceType',
-          align: 'center',
-          label: '生产类型',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'approvalNumber',
-          align: 'center',
-          label: '批准文号',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'packingSpecification',
-          align: 'center',
-          label: '包装规格',
-          showOverflowTooltip: true,
-          minWidth: 110
-        },
-        {
-          prop: 'brandNum',
-          align: 'center',
-          label: '牌号',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'modelType',
-          label: '型号',
-          align: 'center',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'specification',
-          label: '规格',
-          align: 'center',
-          showOverflowTooltip: true
-        },
-        {
-          prop: 'measuringUnit',
-          label: '计量单位',
-          showOverflowTooltip: true,
-          align: 'center',
-          minWidth: 90
-        },
+    components: {
+      productList
+    },
+    data() {
+      return {
+        supplyList: [],
+        selection: [],
+        form: {},
+        supplyColumns: [
+          {
+            label: '选择',
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center'
+          },
+          {
+            columnKey: 'index',
+            type: 'index',
+            width: 50,
+            align: 'center',
+            showOverflowTooltip: true,
+            label: '序号'
+          },
+          {
+            prop: 'productCode',
+            label: '编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'productName',
+            label: '名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'imgCode',
+            align: 'center',
+            label: '图号/件号',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'produceType',
+            align: 'center',
+            label: '生产类型',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'approvalNumber',
+            align: 'center',
+            label: '批准文号',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'packingSpecification',
+            align: 'center',
+            label: '包装规格',
+            showOverflowTooltip: true,
+            minWidth: 110
+          },
+          {
+            prop: 'brandNum',
+            align: 'center',
+            label: '牌号',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'modelType',
+            label: '型号',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'specification',
+            label: '规格',
+            align: 'center',
+            showOverflowTooltip: true
+          },
+          {
+            prop: 'measuringUnit',
+            label: '计量单位',
+            showOverflowTooltip: true,
+            align: 'center',
+            minWidth: 90
+          },
+          {
+            action: 'action',
+            slot: 'action',
+            label: '操作',
+            align: 'center',
+            width: 130
+          }
 
-        // {
-        //   prop: 'weightUnit',
-        //   label: '重量单位',
-        //   showOverflowTooltip: true,
-        //   align: 'center',
-        //   minWidth: 90
-        // },
-        //
-        // {
-        //   prop: 'roughWeight',
-        //   label: '毛重',
-        //   showOverflowTooltip: true,
-        //   align: 'center',
-        //   minWidth: 90
-        // },
-        //
-        // {
-        //   prop: 'netWeight',
-        //   label: '净重',
-        //   showOverflowTooltip: true,
-        //   align: 'center',
-        //   minWidth: 90
-        // },
-        //
-        // {
-        //   prop: 'packingUnit',
-        //   align: 'center',
-        //   label: '包装单位',
-        //   showOverflowTooltip: true
-        // },
-        // {
-        //   prop: 'categoryLevelPath',
-        //   label: '分类',
-        //   align: 'center',
-        //   showOverflowTooltip: true
-        // },
-      ],
-    };
-  },
-  methods: {
-    async open(id) {
-      const data = await contactDetail(id);
-      this.supplyList = data.productList || [];
+          // {
+          //   prop: 'weightUnit',
+          //   label: '重量单位',
+          //   showOverflowTooltip: true,
+          //   align: 'center',
+          //   minWidth: 90
+          // },
+          //
+          // {
+          //   prop: 'roughWeight',
+          //   label: '毛重',
+          //   showOverflowTooltip: true,
+          //   align: 'center',
+          //   minWidth: 90
+          // },
+          //
+          // {
+          //   prop: 'netWeight',
+          //   label: '净重',
+          //   showOverflowTooltip: true,
+          //   align: 'center',
+          //   minWidth: 90
+          // },
+          //
+          // {
+          //   prop: 'packingUnit',
+          //   align: 'center',
+          //   label: '包装单位',
+          //   showOverflowTooltip: true
+          // },
+          // {
+          //   prop: 'categoryLevelPath',
+          //   label: '分类',
+          //   align: 'center',
+          //   showOverflowTooltip: true
+          // },
+        ]
+      };
     },
-    async selected() {
-      if (!this.selection.length) {
-        return this.$message.warning('请至少选择一条数据');
-      }
-      let codeList = [];
-      let list = this.selection;
-      //获取仓库库存
-      if (this.isGetInventoryTotal) {
-        codeList = list.map((item) => item.code);
-        let inventoryTotalList = await getInventoryTotalAPI(codeList);
-        list.forEach((item) => {
-          let find =
-            inventoryTotalList.find((key) => key.code == item.code) || {};
-          item.availableCountBase = find.availableCountBase;
+    methods: {
+      async open(id) {
+        this.form = await contactDetail(id);
+        this.supplyList = this.form.productList || [];
+      },
+      //选择产品
+      handSelectSupply() {
+        this.$refs.productListRef.open(this.supplyList, -1);
+      },
+      getSupplyList(obj) {
+        obj.forEach((item, index) => {
+          let params = {};
+          this.$set(params, 'contactId', this.form?.base?.id);
+          this.$set(params, 'productId', item.id);
+          this.$set(params, 'categoryName', item.name);
+          this.$set(params, 'productCategoryId', item.categoryLevelId);
+          this.$set(params, 'productBrand', item.brandNum);
+          this.$set(params, 'productCategoryName', item.categoryLevelPath);
+          this.$set(params, 'productCode', item.code);
+          this.$set(params, 'productName', item.name);
+          this.$set(params, 'modelType', item.modelType);
+          this.$set(params, 'availableCountBase', item.availableCountBase);
+          this.$set(params, 'measuringUnit', item.measuringUnit);
+          this.$set(params, 'specification', item.specification);
+          this.$set(params, 'weightUnit', item.weightUnit);
+          this.$set(params, 'imgCode', item.imgCode);
+          this.$set(params, 'produceType', item.produceType);
+          this.$set(params, 'approvalNumber', item.approvalNumber);
+          this.$set(params, 'packingSpecification', item.packingSpecification);
+          if (item.purchaseOrigins?.length) {
+            item.purchaseOrigins = item.purchaseOrigins.map((val) => val + '');
+          }
+          this.$set(params, 'provenance', item.purchaseOrigins || []);
+          this.supplyList.push(params);
         });
+        this.contactUpdate()
+        this.$forceUpdate();
+      },
+      //删除供货产品
+      handleRemoveSupply(index) {
+        this.supplyList.splice(index, 1);
+        this.contactUpdate()
+      },
+      contactUpdate() {
+        this.form.productList = this.supplyList;
+        const data = {
+          ...this.form
+        };
+        contactUpdate(data);
+      },
+      async selected() {
+        if (!this.selection.length) {
+          return this.$message.warning('请至少选择一条数据');
+        }
+        let codeList = [];
+        let list = this.selection;
+        //获取仓库库存
+        if (this.isGetInventoryTotal) {
+          codeList = list.map((item) => item.code);
+          let inventoryTotalList = await getInventoryTotalAPI(codeList);
+          list.forEach((item) => {
+            let find =
+              inventoryTotalList.find((key) => key.code == item.code) || {};
+            item.availableCountBase = find.availableCountBase;
+          });
+        }
+        this.$emit('changeParent', list);
+        this.cancel();
+      },
+      cancel() {
+        this.$emit('update:supplierGoodsListDialogFlag', false);
       }
-      this.$emit('changeParent', list);
-      this.cancel();
-    },
-    cancel() {
-      this.$emit("update:supplierGoodsListDialogFlag", false);
-    },
-  }
-}
+    }
+  };
 </script>
 
-<style scoped lang="scss">
-
-</style>
+<style scoped lang="scss"></style>

+ 3 - 3
src/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog.vue

@@ -318,9 +318,9 @@ export default {
             productList,
             pricingWay,
           });
-          if(sourceType==1){
-            this.form.isQmsCheck=1
-          }
+          // if(sourceType==1){
+          //   this.form.isQmsCheck=1
+          // }
           console.log(data,'productList')
           this.$refs.inventoryTableref &&
           this.$refs.inventoryTableref.putTableValue(productList);

+ 313 - 273
src/views/purchasingManage/purchaseOrder/invoice/components/detailDialog.vue

@@ -155,30 +155,30 @@
       <ele-pro-table
         ref="table"
         :needPage="false"
-        :columns="columns"
+        :columns="columns(1)"
         :toolkit="[]"
         :datasource="detailData.productList"
         row-key="id"
       >
-        <!-- <template v-slot:toolbar>
-        <div class="headbox">
-        <span class="amount">总计:{{detailData.totalAmount}}元</span>
-        <span class="amount">应付金额:{{detailData.payAmount}}元</span>
-      </div>
-      </template> -->
         <template v-slot:technicalDrawings="{ row }">
           <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
-          <!--          <div v-if="row.technicalDrawings && row.technicalDrawings?.length">-->
-          <!--            <el-link-->
-          <!--              v-for="link in row.technicalDrawings"-->
-          <!--              :key="link.id"-->
-          <!--              type="primary"-->
-          <!--              :underline="false"-->
-          <!--              @click="downloadFile(link)"-->
-          <!--            >-->
-          <!--              {{ link.name }}</el-link-->
-          <!--            >-->
-          <!--          </div>-->
+        </template>
+      </ele-pro-table>
+      <headerTitle
+        title="质检清单"
+        v-if="detailData.resultList.length > 0"
+      ></headerTitle>
+      <ele-pro-table
+        v-if="detailData.resultList.length > 0"
+        ref="table"
+        :needPage="false"
+        :columns="columns(2)"
+        :toolkit="[]"
+        :datasource="detailData.resultList"
+        row-key="id"
+      >
+        <template v-slot:technicalDrawings="{ row }">
+          <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
         </template>
       </ele-pro-table>
     </div>
@@ -238,265 +238,305 @@
           orderFiles: [{ name: '222' }]
         },
         rules: {},
-        detailData: {},
-        columns: [
-          {
-            width: 45,
-            type: 'index',
-            columnKey: 'index',
-            align: 'center',
-            fixed: 'left'
-          },
-          {
-            width: 200,
-            prop: 'productName',
-            label: '名称',
-            slot: 'productName',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'productCode',
-            label: '编码',
-            slot: 'productCode',
-            align: 'center'
-          },
-          {
-            width: 200,
-            prop: 'productCategoryName',
-            label: '类型',
-            slot: 'productCategoryName',
-            align: 'center'
-          },
-          {
-            minWidth: 150,
-            prop: 'taskName',
-            label: '工序',
-            slot: 'taskName',
-            align: 'center'
-          },
-          {
-            width: 110,
-            prop: 'batchNo',
-            label: '批次号',
-            slot: 'batchNo',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'productBrand',
-            label: '牌号',
-            slot: 'productBrand',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'modelType',
-            label: '型号',
-            slot: 'modelType',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'supplierMark',
-            label: '供应商代号',
-            slot: 'supplierMark',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'specification',
-            label: '规格',
-            slot: 'specification',
-            align: 'center'
-          },
-          {
-            width: 200,
-            prop: 'warehouseName',
-            label: '仓库名称',
-            slot: 'warehouseName',
-            align: 'center'
-          },
-          {
-            width: 80,
-            prop: 'totalCount',
-            label: '收货数量',
-            slot: 'totalCount',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'orderTotalCount',
-            label: '采购总数',
-            slot: 'orderTotalCount',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'receiveTotalCount',
-            label: '已收货总数',
-            slot: 'receiveTotalCount',
-            align: 'center'
-          },
-          {
-            width: 80,
-            prop: 'measuringUnit',
-            label: '计量单位',
-            slot: 'measuringUnit',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'singleWeight',
-            label: '单重',
-            slot: 'singleWeight',
-            align: 'center'
-          },
-          {
-            width: 200,
-            prop: 'sendTotalWeight',
-            label: '发货总重',
-            slot: 'sendTotalWeight',
-            align: 'center',
-            headerSlot: 'headerTotalCount'
-          },
-          {
-            width: 100,
-            prop: 'receiveTotalWeight',
-            label: '收货总重',
-            slot: 'receiveTotalWeight',
-            align: 'center'
-          },
-          {
-            width: 100,
-            prop: 'increaseTotalWeight',
-            label: '增重重量',
-            slot: 'increaseTotalWeight',
-            align: 'center'
-          },
-          {
-            width: 100,
-            prop: 'weightUnit',
-            label: '重量单位',
-            slot: 'weightUnit',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'pricingWay',
-            label: '计价方式',
-            slot: 'pricingWay',
-            align: 'center',
-            formatter: (row, column) => {
-              return row.pricingWay == 1 ? '按数量计费' : row.pricingWay == 2 ? '按重量计费':'';
-
-            }
-          },
-          {
-            width: 160,
-            prop: 'singlePrice',
-            label: '单价',
-            slot: 'singlePrice',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'discountSinglePrice',
-            label: '折后单价',
-            slot: 'discountSinglePrice',
-            align: 'center'
-          },
-          {
-            width: 120,
-            prop: 'totalPrice',
-            label: '合计',
-            slot: 'totalPrice',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'discountTotalPrice',
-            label: '折后合计',
-            slot: 'discountTotalPrice',
-            align: 'center'
-          },
-          {
-            prop: 'provenance',
-            label: '产地',
-            slot: 'provenance',
-            align: 'center',
-            minWidth: 200,
-            showOverflowTooltip: true,
-            formatter: (row, column) => {
-              return row.provenance && row.provenance.length
-                ? row.provenance
-                    .map((item) => this.getDictValue('产地', item))
-                    .join(',')
-                : '';
-            }
-          },
-          {
-            width: 80,
-            prop: 'deliveryDays',
-            label: '交期(天)',
-            slot: 'deliveryDays',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'deliveryDeadline',
-            label: '交期截止日期',
-            slot: 'deliveryDeadline',
-            align: 'center'
-          },
-          {
-            width: 200,
-            prop: 'guaranteePeriod',
-            label: '质保期',
-            slot: 'guaranteePeriod',
-            align: 'center'
-          },
-          {
-            width: 160,
-            prop: 'guaranteePeriodDeadline',
-            label: '质保截止日期',
-            slot: 'guaranteePeriodDeadline',
-            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: 220,
-            prop: 'remark',
-            label: '备注',
-            slot: 'remark',
-            align: 'center'
-          }
-        ]
+        detailData: {}
       };
     },
-    created(){
+    created() {
       this.requestDict('产地');
     },
+    computed: {
+      columns() {
+        return (v) => {
+          console.log(v)
+          return [
+            {
+              width: 45,
+              type: 'index',
+              columnKey: 'index',
+              align: 'center',
+              fixed: 'left'
+            },
+            {
+              width: 200,
+              prop: 'productName',
+              label: '名称',
+              slot: 'productName',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'productCode',
+              label: '编码',
+              slot: 'productCode',
+              align: 'center'
+            },
+            {
+              width: 200,
+              prop: 'productCategoryName',
+              label: '类型',
+              slot: 'productCategoryName',
+              align: 'center'
+            },
+            {
+              minWidth: 150,
+              prop: 'taskName',
+              label: '工序',
+              slot: 'taskName',
+              align: 'center'
+            },
+            {
+              width: 110,
+              prop: 'batchNo',
+              label: '批次号',
+              slot: 'batchNo',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'productBrand',
+              label: '牌号',
+              slot: 'productBrand',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'modelType',
+              label: '型号',
+              slot: 'modelType',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'supplierMark',
+              label: '供应商代号',
+              slot: 'supplierMark',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'specification',
+              label: '规格',
+              slot: 'specification',
+              align: 'center'
+            },
+            {
+              width: 200,
+              prop: 'warehouseName',
+              label: '仓库名称',
+              slot: 'warehouseName',
+              align: 'center'
+            },
+            {
+              width: 80,
+              prop: 'totalCount',
+              label: '收货数量',
+              slot: 'totalCount',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'orderTotalCount',
+              label: '采购总数',
+              slot: 'orderTotalCount',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'receiveTotalCount',
+              label: '已收货总数',
+              slot: 'receiveTotalCount',
+              align: 'center'
+            },
+            {
+              width: 80,
+              prop: 'measuringUnit',
+              label: '计量单位',
+              slot: 'measuringUnit',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'singleWeight',
+              label: '单重',
+              slot: 'singleWeight',
+              align: 'center'
+            },
+            {
+              width: 200,
+              prop: 'sendTotalWeight',
+              label: '发货总重',
+              slot: 'sendTotalWeight',
+              align: 'center',
+              headerSlot: 'headerTotalCount'
+            },
+            {
+              width: 100,
+              prop: 'receiveTotalWeight',
+              label: '收货总重',
+              slot: 'receiveTotalWeight',
+              align: 'center'
+            },
+            {
+              width: 100,
+              prop: 'increaseTotalWeight',
+              label: '增重重量',
+              slot: 'increaseTotalWeight',
+              align: 'center'
+            },
+            {
+              width: 100,
+              prop: 'weightUnit',
+              label: '重量单位',
+              slot: 'weightUnit',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'pricingWay',
+              label: '计价方式',
+              slot: 'pricingWay',
+              align: 'center',
+              formatter: (row, column) => {
+                return row.pricingWay == 1
+                  ? '按数量计费'
+                  : row.pricingWay == 2
+                  ? '按重量计费'
+                  : '';
+              }
+            },
+            {
+              width: 160,
+              prop: 'singlePrice',
+              label: '单价',
+              slot: 'singlePrice',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'discountSinglePrice',
+              label: '折后单价',
+              slot: 'discountSinglePrice',
+              align: 'center'
+            },
+            {
+              width: 120,
+              prop: 'totalPrice',
+              label: '合计',
+              slot: 'totalPrice',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'discountTotalPrice',
+              label: '折后合计',
+              slot: 'discountTotalPrice',
+              align: 'center'
+            },
+            {
+              prop: 'provenance',
+              label: '产地',
+              slot: 'provenance',
+              align: 'center',
+              minWidth: 200,
+              showOverflowTooltip: true,
+              formatter: (row, column) => {
+                return row.provenance && row.provenance.length
+                  ? row.provenance
+                      .map((item) => this.getDictValue('产地', item))
+                      .join(',')
+                  : '';
+              }
+            },
+            {
+              width: 80,
+              prop: 'deliveryDays',
+              label: '交期(天)',
+              slot: 'deliveryDays',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'deliveryDeadline',
+              label: '交期截止日期',
+              slot: 'deliveryDeadline',
+              align: 'center'
+            },
+            {
+              width: 200,
+              prop: 'guaranteePeriod',
+              label: '质保期',
+              slot: 'guaranteePeriod',
+              align: 'center'
+            },
+            {
+              width: 160,
+              prop: 'guaranteePeriodDeadline',
+              label: '质保截止日期',
+              slot: 'guaranteePeriodDeadline',
+              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: 220,
+              prop: 'remark',
+              label: '备注',
+              slot: 'remark',
+              align: 'center'
+            },
+            {
+              width: 130,
+              prop: 'qmsStatus',
+              label: '质检状态',
+              align: 'center',
+              fixed:'right',
+              show:v==2,
+              formatter: (row, column) => {
+                return row.qmsStatus==1?'已检':row.qmsStatus==2?'待检':'未检'
+              }
+            },
+            {
+              width: 150,
+              prop: 'qmsDate',
+              label: '质检完成日期',
+              show:v==2,
+              align: 'center',
+              fixed:'right',
+            },
+            {
+              width: 150,
+              prop: 'qmsResult',
+              label: '质检结果',
+              show:v==2,
+              align: 'center',
+              fixed:'right',
+              formatter: (row, column) => {
+                return row.qmsStatus==1?'合格':row.qmsStatus==2?'不合格':row.qmsStatus==3?'让步接收':''
+              }
+            }
+          ];
+        };
+      }
+    },
     methods: {
       async open(row) {
         this.form = row;

+ 7 - 1
src/views/purchasingManage/purchaseOrder/invoice/components/inventoryTable.vue

@@ -831,7 +831,13 @@
 
       validateForm(callback) {
         //开始表单校验
-        this.$refs.form.validate((valid) => {
+        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);
         });
       }

+ 2 - 2
src/views/purchasingManage/purchaseOrder/invoice/index.vue

@@ -105,14 +105,14 @@
             >
               创建退货单
             </el-link>
-            <el-link
+            <!-- <el-link
               type="primary"
               :underline="false"
               icon="el-icon-edit"
               @click="creatQualityPlan(row)"
               v-if="[2].includes(row.reviewStatus)">
               创建质检计划
-            </el-link>
+            </el-link> -->
           </template>
         </ele-pro-table>
       </div>

+ 4 - 0
src/views/purchasingManage/purchasePlanManage/components/inventoryTable.vue

@@ -914,6 +914,10 @@
             'packingSpecification',
             item.extField.packingSpecification
           );
+          if(item.purchaseOrigins?.length>0){
+            item.purchaseOrigins=item.purchaseOrigins.map(val=>val+'')
+          }
+          this.$set(parasm, 'provenance', item.purchaseOrigins || []);
           if (idx == -1) {
             this.form.datasource.push(row);
           }

+ 3 - 0
src/views/saleManage/contact/components/addContactDialog.vue

@@ -1825,6 +1825,9 @@
           this.$set(params, 'produceType', item.produceType);
           this.$set(params, 'approvalNumber', item.approvalNumber);
           this.$set(params, 'packingSpecification', item.packingSpecification);
+          if(item.purchaseOrigins?.length){
+            item.purchaseOrigins=item.purchaseOrigins.map(val=>val+'')
+          }
           this.$set(params, 'provenance', item.purchaseOrigins||[]);
           this.supplyList.push(params);
         });

+ 12 - 15
src/views/saleManage/saleOrder/customerReturnOrder/addOrEditDialog.vue

@@ -48,19 +48,6 @@
         cache-key="customerReturnOrderDialog"
         class="time-form"
       >
-        <!-- 表头工具栏 -->
-        <!-- <template v-slot:toolbar>
-          <el-button
-            size="small"
-            type="primary"
-            icon="el-icon-plus"
-            class="ele-btn-icon"
-            @click="handleSelectGoods"
-            v-if="dialogType !== 'view' && form.returnNo"
-          >
-            选择退货物品
-          </el-button>
-        </template> -->
         <template v-slot:action="{ row, $index }">
           <el-popconfirm
             class="ele-action"
@@ -200,7 +187,16 @@
             <div v-else>{{ row.sendDate }}</div>
           </el-form-item>
         </template>
-        <!--////-->
+        <template v-slot:headerReason="{ column }">
+        <span class="is-required">{{ column.label }}</span>
+      </template>
+      <template v-slot:headerFeedbackDate="{ column }">
+        <span class="is-required">{{ column.label }}</span>
+      </template>
+      <template v-slot:headerSendDate="{ column }">
+        <span class="is-required">{{ column.label }}</span>
+      </template>
+      
       </ele-pro-table>
     </el-form>
     <div slot="footer" v-if="dialogType !== 'view'">
@@ -469,7 +465,8 @@
             prop: 'feedbackDate',
             label: '客户反馈日期',
             align: 'center',
-            slot: 'feedbackDate'
+            slot: 'feedbackDate',
+            headerSlot: 'headerFeedbackDate'
           },
           {
             minWidth: 180,