Просмотр исходного кода

Merge branch 'master' of http://110.41.163.243:9980/kd-aiot/kd-aiot-frontend-wt into test

yusheng 1 год назад
Родитель
Сommit
9d9524cc5c
22 измененных файлов с 1319 добавлено и 1417 удалено
  1. 22 1
      src/BIZComponents/inventoryTable.vue
  2. 18 0
      src/BIZComponents/inventoryTableDetails.vue
  3. 2 0
      src/enum/dict.js
  4. 1 1
      src/views/bpm/handleTask/components/inoutBound/detailDialog.vue
  5. 35 0
      src/views/bpm/handleTask/components/inquiryManage/inquiryTable.vue
  6. 32 0
      src/views/bpm/handleTask/components/inquiryManage/inventoryTable.vue
  7. 19 22
      src/views/bpm/handleTask/components/productionWarehousing/detailDialog.vue
  8. 74 13
      src/views/bpm/handleTask/components/purchaseNeedManage/detailDialog.vue
  9. 25 9
      src/views/bpm/handleTask/components/purchaseOrder/detailDialog.vue
  10. 215 578
      src/views/bpm/handleTask/components/purchaseOrder/invoice/detailDialog.vue
  11. 16 0
      src/views/bpm/handleTask/components/purchaseOrder/invoice/inventoryTable.vue
  12. 351 0
      src/views/bpm/handleTask/components/purchaseOrder/invoice/receiptInfo.vue
  13. 16 0
      src/views/bpm/handleTask/components/purchaseOrder/outSourceSend/detailDialog.vue
  14. 17 0
      src/views/bpm/handleTask/components/purchaseOrder/outSourceSend/inventoryTable.vue
  15. 17 0
      src/views/bpm/handleTask/components/purchaseOrder/outsourceSendReturnGoods/detailDialog.vue
  16. 16 0
      src/views/bpm/handleTask/components/purchaseOrder/returnGoods/detailDialog.vue
  17. 16 4
      src/views/bpm/handleTask/components/purchaseOrder/returnGoods/inventoryTable.vue
  18. 96 24
      src/views/bpm/handleTask/components/purchasePlanManage/detailDialog.vue
  19. 117 105
      src/views/bpm/stockManagement/components/WarehousingDialog.vue
  20. 23 3
      src/views/bpm/stockManagement/details.vue
  21. 188 654
      src/views/bpm/stockManagement/storage.vue
  22. 3 3
      vue.config.js

+ 22 - 1
src/BIZComponents/inventoryTable.vue

@@ -318,6 +318,18 @@
           ></el-input>
         </el-form-item>
       </template>
+      <template v-slot:provenance="scope">
+        <el-form-item :prop="'datasource.' + scope.$index + '.provenance'">
+          <DictSelection
+            dictName="产地"
+            clearable
+            :disabled="status == 'Detail'"
+            v-model="scope.row.provenance"
+            multiple
+          >
+          </DictSelection>
+        </el-form-item>
+      </template>
       <template v-slot:technicalDrawings="scope">
         <el-form-item
           style="margin-bottom: 20px"
@@ -735,6 +747,15 @@
             slot: 'availableCountBase',
             align: 'center'
           },
+          {
+            prop: 'provenance',
+            label: '产地',
+            slot: 'provenance',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200,
+            show:this.contractBookType==2
+          },
           {
             width: 120,
             prop: 'measuringUnit',
@@ -1147,7 +1168,7 @@
             item.extField.packingSpecification
           );
           this.$set(parasm, 'customerMark', this.customerMark);
-
+          this.$set(parasm, 'provenance', item.purchaseOrigins || []);
           if (idx == -1) {
             this.form.datasource.push(row);
           }

+ 18 - 0
src/BIZComponents/inventoryTableDetails.vue

@@ -325,6 +325,23 @@
             label: '图号/件号',
             showOverflowTooltip: true
           },
+          {
+            prop: 'provenance',
+            label: '产地',
+            slot: 'provenance',
+            align: 'center',
+            show:this.contractBookType==2,
+            minWidth: 200,
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+       
+              return row.provenance && row.provenance.length
+                ? row.provenance
+                    .map((item) => this.getDictValue('产地', item ))
+                    .join(',')
+                : '';
+            }
+          },
           {
             width: 120,
             prop: 'produceType',
@@ -455,6 +472,7 @@
 
     created() {
       this.requestDict('生产类型');
+      this.requestDict('产地');
       this.requestDict('保质期单位');
     },
     methods: {

+ 2 - 0
src/enum/dict.js

@@ -85,6 +85,8 @@ export default {
   协同办公分类: 'collaborative_type',
   市场活动类型: 'activity_type',
   客户联系人状态: 'contact_link_status',
+  产地:'purchase_origin'
+
 };
 
 export const numberList = [

+ 1 - 1
src/views/bpm/handleTask/components/inoutBound/detailDialog.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="ele-body">
+  <div>
     <detailDialog
       :businessId="businessId"
       :isInterior="true"

+ 35 - 0
src/views/bpm/handleTask/components/inquiryManage/inquiryTable.vue

@@ -320,6 +320,19 @@
           ></el-input>
         </el-form-item>
       </template>
+      <template v-slot:provenance="scope">
+        <el-form-item :prop="'datasource.' + scope.$index + '.provenance'">
+          <DictSelection
+            dictName="产地"
+            clearable
+            :disabled="status == 'Detail'"
+
+            v-model="scope.row.provenance"
+            multiple
+          >
+          </DictSelection>
+        </el-form-item>
+      </template>
       <template v-slot:isRequired="{ column }">
         <span class="is-required">{{ column.label }}</span>
       </template>
@@ -498,6 +511,28 @@
       slot: 'totalPrice',
       align: 'center'
     },
+    {
+      minWidth: 150,
+      prop: 'taskName',
+      label: '工序',
+      slot: 'taskName',
+      align: 'center'
+    },
+    {
+      width: 110,
+      prop: 'batchNo',
+      label: '批次号',
+      slot: 'batchNo',
+      align: 'center'
+    },
+    {
+      prop: 'provenance',
+      label: '产地',
+      slot: 'provenance',
+      align: 'center',
+      showOverflowTooltip: true,
+      minWidth: 200
+    },
     {
       minWidth: 120,
       prop: 'modelType',

+ 32 - 0
src/views/bpm/handleTask/components/inquiryManage/inventoryTable.vue

@@ -407,6 +407,36 @@
             slot: 'totalWeight',
             align: 'center'
           },
+          {
+            minWidth: 220,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            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(',')
+                : '';
+            }
+          },
           {
             minWidth: 80,
             prop: 'measuringUnit',
@@ -508,6 +538,8 @@
       }
     },
     created() {
+      this.requestDict('产地');
+
       this.getDictList('productionType');
     },
     methods: {

+ 19 - 22
src/views/bpm/handleTask/components/productionWarehousing/detailDialog.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div class="switch">
+    <!-- <div class="switch">
       <div class="switch_left">
         <ul>
           <li
@@ -13,29 +13,37 @@
           </li>
         </ul>
       </div>
-    </div>
+    </div> -->
     <div v-show="activeComp == 'main'">
       <el-form ref="form" :model="form" :rules="rules" label-width="120px">
         <headerTitle title="入库单详情"></headerTitle>
         <el-row>
-          <el-col :span="12">
+          <el-col :span="6">
             <el-form-item label="物品名称:" prop="categoryName">
               {{ form.categoryName }}
             </el-form-item>
+          </el-col>
+          <el-col :span="6">
             <el-form-item label="物品编码:" prop="categoryCode">
               {{ form.categoryCode }}
             </el-form-item>
+          </el-col>
+          <el-col :span="6">
             <el-form-item label="物品分类:" prop="categoryLevelName">
               {{ form.categoryLevelName }}
             </el-form-item>
+          </el-col>
+          <el-col :span="6">
             <el-form-item label="包装数量:" prop="totalPackage">
-              {{ form.detailList?.length }}
+              {{ totalPackage }}
             </el-form-item>
+          </el-col>
             <!-- <el-form-item label="单位:" prop="packingUnit">
               {{ form.packingUnit }}
             </el-form-item> -->
+          <el-col :span="6">
             <el-form-item label="计量数量:" prop="totalCount">
-              {{ form.totalCount }}
+              {{ totalCount }}
             </el-form-item>
           </el-col>
           <!-- <el-col :span="12">
@@ -57,16 +65,8 @@
       </el-form>
     </div>
     <keep-alive>
-      <!-- <add
-      ref="add"
-      v-if="activeComp == 'storage'"
-      :inboundType="form.sourceType"
-      type="sourceBizNo"
-      @success="success"
-    ></add> -->
       <add
         ref="add"
-        v-if="activeComp == 'storage'"
         :form="form"
         :bizType="1"
         :sourceBizNo="form.code"
@@ -80,7 +80,7 @@
   import { getStorageDetail } from '@/api/mes/index';
   import dictMixins from '@/mixins/dictMixins';
   import { reviewStatusEnum } from '@/enum/dict';
-  // import add from './productionWarehousing.vue';
+
   import add from '@/views/bpm/stockManagement/storage.vue';
 
   export default {
@@ -109,18 +109,13 @@
         reviewStatusEnum,
         rules: {},
         form: {},
-        detailData: {}
+        detailData: {},
+        totalPackage:'',
+        totalCount:''
       };
     },
     async created() {
       await this.getDetailData(this.businessId);
-      // if (this.taskDefinitionKey == 'storeman') {
-      //   this.activeComp = 'storage';
-      //   this.$emit('activeCompChange', 'storage');
-      //   this.$nextTick(() => {
-      //     this.$refs.add.pickerSuccess(this.form);
-      //   });
-      // }
     },
 
     methods: {
@@ -158,6 +153,8 @@
           );
           data.categoryLevelTopId = filterCategoryLevelTopIds.join(',');
           this.form = data;
+          this.totalPackage = this.form.detailList.length +this.form?.detailList[0]?.packingUnit;
+          this.totalCount = this.form.totalCount +this.form?.detailList[0]?.measuringUnit;
           this.detailData = data;
         }
       }

+ 74 - 13
src/views/bpm/handleTask/components/purchaseNeedManage/detailDialog.vue

@@ -140,7 +140,7 @@
         form: {},
         detailData: {},
         columns: [
-          {
+        {
             width: 45,
             type: 'index',
             columnKey: 'index',
@@ -151,79 +151,140 @@
             width: 150,
             prop: 'productCategoryName',
             label: '分类',
-            slot: 'productCategoryName'
+            slot: 'productCategoryName',
+            align: 'center'
           },
           {
             width: 140,
             prop: 'productCode',
             label: '编码',
-            slot: 'productCode'
+            slot: 'productCode',
+            align: 'center'
           },
           {
             width: 240,
             prop: 'productName',
             label: '名称',
-            slot: 'productName'
+            slot: 'productName',
+            align: 'center'
           },
           {
             width: 150,
             prop: 'productBrand',
             label: '牌号',
-            slot: 'productBrand'
+            slot: 'productBrand',
+            align: 'center'
           },
           {
             width: 80,
             prop: 'totalCount',
             label: '数量',
-            slot: 'totalCount'
+            slot: 'totalCount',
+            align: 'center'
+          },
+
+          {
+            minWidth: 120,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            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: 100,
             prop: 'measuringUnit',
             label: '单位',
-            slot: 'measuringUnit'
+            slot: 'measuringUnit',
+            align: 'center'
           },
           {
             width: 130,
             prop: 'modelType',
             label: '型号',
-            slot: 'modelType'
+            slot: 'modelType',
+            align: 'center'
           },
           {
             width: 120,
             prop: 'specification',
             label: '规格',
-            slot: 'specification'
+            slot: 'specification',
+            align: 'center'
           },
           {
             width: 130,
             prop: 'brand',
             label: '品牌',
-            slot: 'brand'
+            slot: 'brand',
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'arrivalWay',
+            label: '	到货方式',
+            formatter: (row, column, cellValue) => {
+              return cellValue == 1 ? '一次性到货' : '分批到货';
+            },
+            align: 'center'
           },
           {
             width: 170,
             prop: 'expectReceiveDate',
             label: '到货日期',
-            slot: 'expectReceiveDate'
+            slot: 'expectReceiveDate',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'technicalDrawings',
+            label: '图纸附件',
+            slot: 'technicalDrawings',
+            align: 'center'
           },
           {
             width: 140,
             prop: 'files',
             label: '附件',
-            slot: 'files'
+            slot: 'files',
+            align: 'center'
           },
           {
             width: 220,
             prop: 'remark',
             label: '备注',
-            slot: 'remark'
+            slot: 'remark',
+            align: 'center'
           }
         ]
       };
     },
     created() {
+      this.requestDict('产地');
       this.getDetailData(this.businessId);
+      
     },
     methods: {
       downloadFile(file) {

+ 25 - 9
src/views/bpm/handleTask/components/purchaseOrder/detailDialog.vue

@@ -11,6 +11,7 @@
           >
             {{ form.orderNo }}
           </el-form-item>
+          
           <el-form-item
             label="项目名称:"
             prop="projectName"
@@ -32,14 +33,7 @@
           >
             {{ form.sourceTypeName }}
           </el-form-item>
-          <!--          <el-form-item-->
-          <!--            label="采购订单类型:"-->
-          <!--            prop="purchaseTypeName"-->
-          <!--            style="margin-bottom: 16px"-->
-          <!--          >-->
-          <!--            {{ form.purchaseTypeName }}-->
-          <!--          </el-form-item>-->
-
+       
           <el-form-item prop="orderFiles" label="附件:">
             <fileMain v-model="form.orderFiles" type="view"></fileMain>
             <!--            <div-->
@@ -517,7 +511,28 @@
             },
             align: 'center'
           },
-
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            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: 120,
             prop: 'deliveryDays',
@@ -803,6 +818,7 @@
       };
     },
     created() {
+      this.requestDict('产地');
       this.getDetailData(this.businessId);
     },
     methods: {

+ 215 - 578
src/views/bpm/handleTask/components/purchaseOrder/invoice/detailDialog.vue

@@ -1,614 +1,251 @@
 <template>
   <div>
-    <div class="switch">
+    <!-- <div class="switch">
       <div class="switch_left">
         <ul>
-          <li
-            v-for="item in tabOptions"
-            :key="item.key"
-            :class="{ active: activeComp == item.key }"
-            @click="changeActive(item)"
-          >
+          <li v-for="item in tabOptions" :key="item.key" :class="{ active: activeComp == item.key }"
+            @click="changeActive(item)">
             {{ item.name }}
           </li>
         </ul>
       </div>
-    </div>
-    <div v-show="activeComp == 'main'">
-      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
-        <headerTitle title="收货信息"></headerTitle>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item
-              label="供应商名称:"
-              prop="supplierName"
-              style="margin-bottom: 16px"
-            >
-              {{ form.supplierName }}
-            </el-form-item>
-            <el-form-item
-              label="供应商联系人:"
-              prop="linkName"
-              style="margin-bottom: 16px"
-            >
-              {{ form.linkName }}
-            </el-form-item>
-            <el-form-item
-              label="供应商电话:"
-              prop="linkPhone"
-              style="margin-bottom: 16px"
-            >
-              {{ form.linkPhone }}
-            </el-form-item>
-
-            <!-- <el-form-item
-            label="客户地址:"
-            prop="partaAddress"
-            style="margin-bottom: 16px"
-          >
-            {{ form.receiveAddress }}
-          </el-form-item> -->
-            <el-form-item
-              label="车牌号:"
-              prop="carNo"
-              style="margin-bottom: 16px"
-            >
-              {{ form.carNo }}
-            </el-form-item>
-            <el-form-item prop="receiveDate" label="收货日期:">
-              {{ form.receiveDate }}
-            </el-form-item>
-            <el-form-item
-              label="附件:"
-              prop="receiveFiles"
-              style="margin-bottom: 16px"
-            >
-              <fileMain v-model="form.receiveFiles" type="view"></fileMain>
-            </el-form-item>
-          </el-col>
-
-          <el-col :span="12">
-            <el-form-item
-              label="收货单编码:"
-              prop="receiveNo"
-              style="margin-bottom: 16px"
-            >
-              {{ form.receiveNo }}
-            </el-form-item>
-            <el-form-item prop="orderNo" label="订单编码:">
-              {{ form.orderNo }}
-            </el-form-item>
-            <el-form-item prop="outsourceSendCode" label="委外发货单编码:">
-              {{ form.outsourceSendCode }}
-            </el-form-item>
-            <el-form-item prop="pricingWay" label="计价方式:">
-              {{ form.pricingWay == 1 ? '按数量计费' : '按重量计费' }}
-            </el-form-item>
+    </div> -->
 
-            <el-form-item
-              label="制单人:"
-              prop="makerName"
-              style="margin-bottom: 16px"
-            >
-              {{ form.makerName }}
-            </el-form-item>
-            <el-form-item
-              label="审核状态:"
-              prop="reviewStatus"
-              style="margin-bottom: 16px"
-            >
-              {{ reviewStatusEnum[form.reviewStatus]?.label }}
-            </el-form-item>
-            <!-- <el-form-item prop="replied" label="是否回执:">
-            {{ form.replied == 1 ? '是' : '否' }}
-          </el-form-item> -->
-          </el-col>
-        </el-row>
-      </el-form>
-
-      <headerTitle title="产品清单"></headerTitle>
-      <ele-pro-table
-        ref="table"
-        :needPage="false"
-        :columns="columns"
-        :toolkit="[]"
-        :datasource="detailData.productList"
-        row-key="id"
-      >
-        <template v-slot:technicalDrawings="{ row }">
-          <fileMain v-model="row.receiveFiles" type="view"></fileMain>
-        </template>
-      </ele-pro-table>
+    <div>
+      <div v-for="item in tabOptions" :label="item.name" :name="item.name">
+        <headerTitle :title="item.name"></headerTitle>
+        <div v-if="item.key == 'main'">
+          <receiptInfo ref="modalRefs" :businessId="businessId" :form="form" :detailData="detailData">
+          </receiptInfo>
+        </div>
+        <div v-if="item.key == 'inoutBound'">
+          <add ref="modalRefs" :form="form" :sourceBizNo="form.receiveNo" :saleProductList="form.productList"
+            :bizType="2" :detailProductList="detailData.productList"></add>
+        </div>
+        <div v-if="item.key == 'inoutBoundView'">
+          <detailDialog ref="modalRefs" :bizType="2" :businessId="form.receiveNo" :isUpload="isUpload">
+          </detailDialog>
+        </div>
+        <div v-if="item.key == 'inoutBoundEdit'">
+          <procurementWarehousing :businessId="form.receiveNo" :qualityInspectionItems="qualityInspectionItems"
+            ref="modalRefs">
+          </procurementWarehousing>
+        </div>
+      </div>
     </div>
-    <!-- <detailDialog
-      v-if="activeComp == 'inoutBoundView'"
-      :businessId="form.receiveNo"
-      type="sourceBizNo"
-      ref="detailDialog"
-      :taskDefinitionKey="taskDefinitionKey"
-    ></detailDialog> -->
-    <!-- <procurementWarehousing
-      v-if="activeComp == 'inoutBoundEdit'"
-      :businessId="form.receiveNo"
-      type="sourceBizNo"
-      :infoData="form"
-      ref="procurementWarehousing"
-      :taskDefinitionKey="taskDefinitionKey"
-    >
-    </procurementWarehousing> -->
-    <!-- <keep-alive>
-    <add
-      ref="add"
-      v-if="activeComp == 'inoutBound'"
-      :inboundType="form.sourceType"
-      type="sourceBizNo"
-      @success="success"
-    ></add>
-    </keep-alive> -->
-    <keep-alive>
-      <add
-        ref="add"
-        v-if="activeComp == 'inoutBound'"
-        :form="form"
-        :sourceBizNo="form.receiveNo"
-        :saleProductList="form.productList"
-        :bizType="2"
-        :detailProductList="detailData.productList"
-      ></add>
-    </keep-alive>
-    <detailDialog
-      :bizType="2"
-      v-if="activeComp == 'inoutBoundView'"
-      :businessId="form.receiveNo"
-      :isUpload="isUpload"
-      ref="detailDialog"
-    ></detailDialog>
-    <procurementWarehousing
-      v-if="activeComp == 'inoutBoundEdit'"
-      :businessId="form.receiveNo"
-      :qualityInspectionItems="qualityInspectionItems"
-      ref="procurementWarehousing"
-    >
-    </procurementWarehousing>
   </div>
 </template>
 
 <script>
-  import { getFile } from '@/api/system/file';
-  import dictMixins from '@/mixins/dictMixins';
-  import { reviewStatusEnum } from '@/enum/dict';
-  import { getReceiveSaleOrderrecordDetail } from '@/api/bpm/components/purchasingManage/purchaseorderreceive';
-  // import detailDialog from '@/views/bpm/handleTask/components/inoutBound/detailDialog.vue';
-  import detailDialog from '@/views/bpm/stockManagement/details.vue';
-  // import procurementWarehousing from '@/views/bpm/handleTask/components/purchaseOrder/invoice/procurementWarehousing';
-  import procurementWarehousing from '@/views/bpm/stockManagement/quality.vue';
+import dictMixins from '@/mixins/dictMixins';
 
-  // import add from './procurementStorage.vue';
-  import add from '@/views/bpm/stockManagement/storage.vue';
-  // import { getOutInBySourceBizNoOrError } from '@/api/classifyManage';
-  import storageApi from '@/api/warehouseManagement';
-  import fileMain from '@/components/addDoc/index.vue';
+import { getReceiveSaleOrderrecordDetail } from '@/api/bpm/components/purchasingManage/purchaseorderreceive';
 
-  export default {
-    props: {
-      businessId: {
-        default: ''
-      },
-      taskId: {
-        default: ''
-      },
-      taskDefinitionKey: {
-        default: ''
-      }
+import detailDialog from '@/views/bpm/stockManagement/details.vue';
+
+import procurementWarehousing from '@/views/bpm/stockManagement/quality.vue';
+
+
+import receiptInfo from './receiptInfo.vue';
+import add from '@/views/bpm/stockManagement/storage.vue';
+
+import storageApi from '@/api/warehouseManagement';
+import fileMain from '@/components/addDoc/index.vue';
+
+export default {
+  props: {
+    businessId: {
+      default: ''
     },
-    components: {
-      fileMain,
-      detailDialog,
-      procurementWarehousing,
-      add
+    taskId: {
+      default: ''
     },
-    mixins: [dictMixins],
-    data() {
-      return {
-        qualityInspectionItems: [
-          'materielDesignation',
-          'clientCode',
-          'engrave',
-          'weight',
-          'result'
-        ],
-        isUpload: false,
-        activeComp: 'main',
-        tabOptions: [{ key: 'main', name: '收货单详情' }],
-        reviewStatusEnum,
-        visible: false,
-        detailId: '',
-        title: '详情',
-        row: {},
-        activeName: 'base',
-        form: {
-          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'
-          },
-          {
-            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: 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: 120,
-            prop: 'taxRate',
-            label: '税率',
-            slot: 'taxRate',
-            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'
-          },
+    taskDefinitionKey: {
+      default: ''
+    }
+  },
+  components: {
+    fileMain,
+    detailDialog,
+    procurementWarehousing,
+    add,
+    receiptInfo
+  },
+  mixins: [dictMixins],
+  data() {
+    return {
+      qualityInspectionItems: [
+        'materielDesignation',
+        'clientCode',
+        'engrave',
+        'weight',
+        'result'
+      ],
+      isUpload: false,
+      activeComp: 'main',
+      tabOptions: [{ key: 'main', name: '收货单详情' }],
+
+      visible: false,
+      detailId: '',
+      title: '详情',
+      row: {},
+      activeName: 'base',
+      form: {
+        orderFiles: [{ name: '222' }]
+      },
+      detailData: {},
 
-          {
-            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'
+    };
+  },
+  async created() {
+    await this.getDetailData(this.businessId);
+    // getOutInBySourceBizNoOrError(this.form.receiveNo)
+    await storageApi
+      .getInfoBySourceBizNo(this.form.receiveNo)
+      .then((res) => {
+        if (JSON.stringify(res) == '{}') {
+          // 未查询到相关信息(未入库)
+          if (this.taskDefinitionKey == 'storeManagerApprove') {
+            this.tabOptions.push({ key: 'inoutBound', name: '入库单' });
+            this.activeComp = 'inoutBound';
+            this.$emit('activeCompChange', 'inoutBound');
+            // this.$nextTick(() => {
+            //   this.$refs.add.pickerSuccess(this.form);
+            // });
           }
-        ]
-      };
-    },
-    async created() {
-      await this.getDetailData(this.businessId);
-      // getOutInBySourceBizNoOrError(this.form.receiveNo)
-      storageApi
-        .getInfoBySourceBizNo(this.form.receiveNo)
-        .then((res) => {
-          if (JSON.stringify(res) == '{}') {
-            // 未查询到相关信息(未入库)
-            if (this.taskDefinitionKey == 'storeManagerApprove') {
-              this.tabOptions.push({ key: 'inoutBound', name: '入库单' });
-              this.activeComp = 'inoutBound';
-              this.$emit('activeCompChange', 'inoutBound');
-              // this.$nextTick(() => {
-              //   this.$refs.add.pickerSuccess(this.form);
-              // });
-            }
+        } else {
+          if (this.taskDefinitionKey == 'qualityInspection') {
+            this.tabOptions.push({
+              key: 'inoutBoundEdit',
+              name: '入库单详情(已入库)'
+            });
+            this.activeComp = 'inoutBoundEdit';
+          } else if (this.taskDefinitionKey == 'qualityInspectionFeedback') {
+            this.tabOptions.push({
+              key: 'inoutBoundView',
+              name: '入库单详情'
+            });
+            this.isUpload = true;
+            this.activeComp = 'inoutBoundView';
           } else {
-            if (this.taskDefinitionKey == 'qualityInspection') {
-              this.tabOptions.push({
-                key: 'inoutBoundEdit',
-                name: '入库单详情(已入库)'
-              });
-              this.activeComp = 'inoutBoundEdit';
-            } else if (this.taskDefinitionKey == 'qualityInspectionFeedback') {
-              this.tabOptions.push({
-                key: 'inoutBoundView',
-                name: '入库单详情'
-              });
-              this.isUpload = true;
-              this.activeComp = 'inoutBoundView';
-            } else {
-              this.tabOptions.push({
-                key: 'inoutBoundView',
-                name: '入库单详情'
-              });
-              this.isUpload = false;
-              this.activeComp = 'inoutBoundView';
-            }
-            // if (
-            //   ![
-            //     'starter',
-            //     'deptLeaderApprove',
-            //     'storeManagerApprove',
-            //     'qualityInspection'
-            //   ].includes(this.taskDefinitionKey)
-            // ) {
-            //   this.tabOptions.push({
-            //     key: 'inoutBoundView',
-            //     name: '入库单详情'
-            //   });
-            //   this.isUpload = true;
-            //   this.activeComp = 'inoutBoundView';
-            // } else {
-            //   this.tabOptions.push({
-            //     key: 'inoutBoundEdit',
-            //     name: '入库单详情(已入库)'
-            //   });
-            //   this.activeComp = 'inoutBoundEdit';
-            // }
+            this.tabOptions.push({
+              key: 'inoutBoundView',
+              name: '入库单详情'
+            });
+            this.isUpload = false;
+            this.activeComp = 'inoutBoundView';
           }
-        })
-        .catch(() => {
-          this.$message.error('获取入库单详情失败');
-        });
+          // if (
+          //   ![
+          //     'starter',
+          //     'deptLeaderApprove',
+          //     'storeManagerApprove',
+          //     'qualityInspection'
+          //   ].includes(this.taskDefinitionKey)
+          // ) {
+          //   this.tabOptions.push({
+          //     key: 'inoutBoundView',
+          //     name: '入库单详情'
+          //   });
+          //   this.isUpload = true;
+          //   this.activeComp = 'inoutBoundView';
+          // } else {
+          //   this.tabOptions.push({
+          //     key: 'inoutBoundEdit',
+          //     name: '入库单详情(已入库)'
+          //   });
+          //   this.activeComp = 'inoutBoundEdit';
+          // }
+        }
+      })
+      .catch(() => {
+        this.$message.error('获取入库单详情失败');
+      });
+    console.log(this.tabOptions, 'this.tabOptions')
+
+
+  },
+
+  methods: {
+
+    changeActive(item) {
+      this.activeComp = item.key;
+      this.$emit('activeCompChange', item.key);
+      // if (
+      //   this.taskDefinitionKey == 'storeManagerApprove' &&
+      //   item.key == 'inoutBound'
+      // ) {
+      //   this.$nextTick(() => {
+      //     this.$refs.add.pickerSuccess(this.form);
+      //   });
+      // }
     },
+    save(data) {
+      this.$refs.modalRefs[1].handleSave(data);
+    },
+    success() {
+      // this.$parent.handleClose()
 
-    methods: {
-      changeActive(item) {
-        this.activeComp = item.key;
-        this.$emit('activeCompChange', item.key);
-        // if (
-        //   this.taskDefinitionKey == 'storeManagerApprove' &&
-        //   item.key == 'inoutBound'
-        // ) {
-        //   this.$nextTick(() => {
-        //     this.$refs.add.pickerSuccess(this.form);
-        //   });
-        // }
-      },
-      save(data) {
-        this.$refs.add.handleSave(data);
-      },
-      success() {
-        // this.$parent.handleClose()
+      this.$emit('handleClose');
+    },
 
-        this.$emit('handleClose');
-      },
-      downloadFile(file) {
-        getFile({ objectName: file.storePath }, file.name);
-      },
-      // 判断质检状态是否全部已检
-      allListChecked() {
-        return (
-          this.$refs.procurementWarehousing &&
-          this.$refs.procurementWarehousing.getStatus()
-        );
-      },
-      async getTableValue() {
-        return {
-          form: this.form,
-          // packingList: this.$refs.procurementWarehousing &&
-          //   (await this.$refs.procurementWarehousing.getTableValue()),
-          returnStorageData:
-            this.$refs.add && (await this.$refs.add.getReturnStorage()),
-          isAllChecked:
-            this.$refs.procurementWarehousing &&
-            (await this.$refs.procurementWarehousing.getStatus()),
+    // 判断质检状态是否全部已检
+    allListChecked() {
+      return (
+        this.$refs.modalRefs[3] &&
+        this.$refs.modalRefs[3].getStatus()
+      );
+    },
+    async getTableValue() {
+      console.log(this.$refs.modalRefs[1], 'aaaaaaaad')
+      return {
+        form: this.form,
+        returnStorageData: this.$refs.modalRefs[1].getReturnStorage(),
+        isAllChecked:
+          this.$refs.modalRefs[3] &&
+          (await this.$refs.modalRefs[3].getStatus()),
 
-          qualityInspector:
-            (this.$refs.detailDialog &&
-              this.$refs.detailDialog.getQualityFile()) ||
-            {}
-          // qualityInspector:
-          //   (this.$refs.detailDialog &&
-          //     this.$refs.detailDialog.getQualityFile()) ||
-          //   {}
-        };
-      },
-      async getDetailData(id) {
-        this.loading = true;
-        const data = await getReceiveSaleOrderrecordDetail(id);
-        this.loading = false;
-        if (data) {
-          console.log(data, '1111111111111111111111');
+        qualityInspector:
+          (this.$refs.modalRefs[2] &&
+            this.$refs.modalRefs[2].getQualityFile()) ||
+          {}
+        // qualityInspector:
+        //   (this.$refs.detailDialog &&
+        //     this.$refs.detailDialog.getQualityFile()) ||
+        //   {}
+      };
+    },
+    async getDetailData(id) {
+      this.loading = true;
+      const data = await getReceiveSaleOrderrecordDetail(id);
+      this.loading = false;
+      if (data) {
+        console.log(data, '1111111111111111111111');
 
-          this.form = data;
-          this.detailData = data;
-        }
+        this.form = data;
+        this.detailData = data;
       }
     }
-  };
+  }
+};
 </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>

+ 16 - 0
src/views/bpm/handleTask/components/purchaseOrder/invoice/inventoryTable.vue

@@ -372,6 +372,21 @@ export default {
           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',
@@ -445,6 +460,7 @@ export default {
     };
   },
   created() {
+    this.requestDict('产地');
     getWarehouseList().then((res) => {
       this.warehouseList = res;
     });

+ 351 - 0
src/views/bpm/handleTask/components/purchaseOrder/invoice/receiptInfo.vue

@@ -0,0 +1,351 @@
+<template>
+  <div class="ele-body">
+    <!-- <el-card shadow="never"> -->
+    <el-form ref="form" :model="form" label-width="130px">
+      <!-- <headerTitle title="收货信息"></headerTitle> -->
+      <el-row>
+        <el-col :span="8">
+          <el-form-item label="供应商名称:" prop="supplierName">
+            {{ form.supplierName }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="供应商联系人:" prop="linkName">
+            {{ form.linkName }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="供应商电话:" prop="linkPhone">
+            {{ form.linkPhone }}
+          </el-form-item>
+        </el-col>
+        <!-- <el-form-item
+            label="客户地址:"
+            prop="partaAddress"
+            style="margin-bottom: 16px"
+          >
+            {{ form.receiveAddress }}
+          </el-form-item> -->
+        <el-col :span="8">
+          <el-form-item label="车牌号:" prop="carNo">
+            {{ form.carNo }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item prop="receiveDate" label="收货日期:">
+            {{ form.receiveDate }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="收货单编码:" prop="receiveNo">
+            {{ form.receiveNo }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item prop="orderNo" label="订单编码:">
+            {{ form.orderNo }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item prop="outsourceSendCode" label="委外发货单编码:">
+            {{ form.outsourceSendCode }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item prop="pricingWay" label="计价方式:">
+            {{ form.pricingWay == 1 ? '按数量计费' : '按重量计费' }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="制单人:" prop="makerName">
+            {{ form.makerName }}
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="审核状态:" prop="reviewStatus">
+            {{ reviewStatusEnum[form.reviewStatus]?.label }}
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="8">
+          <el-form-item label="附件:" prop="receiveFiles">
+            <fileMain v-model="form.receiveFiles" type="view"></fileMain>
+          </el-form-item>
+        </el-col>
+        <!-- <el-form-item prop="replied" label="是否回执:">
+            {{ form.replied == 1 ? '是' : '否' }}
+          </el-form-item> -->
+      </el-row>
+    </el-form>
+    <div class="fontSize" style="margin-bottom: 12px;">产品清单</div>
+    <ele-pro-table ref="table" :needPage="false" :columns="columns" :toolkit="[]" :datasource="detailData.productList"
+      row-key="id">
+      <template v-slot:technicalDrawings="{ row }">
+        <fileMain v-model="row.receiveFiles" type="view"></fileMain>
+      </template>
+    </ele-pro-table>
+    <!-- </el-card> -->
+
+  </div>
+</template>
+
+<script>
+import { reviewStatusEnum } from '@/enum/dict';
+
+import fileMain from '@/components/addDoc/index.vue';
+export default {
+  components: { fileMain },
+  props: {
+    form: { type: Object, default: () => { } },
+    detailData: { type: Object, default: () => { } },
+  },
+
+  data() {
+    return {
+      reviewStatusEnum,
+      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'
+        },
+        {
+          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: 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: 120,
+          prop: 'taxRate',
+          label: '税率',
+          slot: 'taxRate',
+          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'
+        },
+
+        {
+          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'
+        }
+      ]
+    };
+  },
+  created() {
+    console.log(this.detailData, 'detailData')
+  },
+  methods: {
+
+
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.fontSize {
+  font-size: 14px;
+  font-weight: bold;
+}
+</style>

+ 16 - 0
src/views/bpm/handleTask/components/purchaseOrder/outSourceSend/detailDialog.vue

@@ -314,6 +314,21 @@
             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: 120,
             prop: 'deliveryDays',
@@ -376,6 +391,7 @@
       };
     },
     created() {
+      this.requestDict('产地');
       this.getDetailData(this.businessId);
     },
     methods: {

+ 17 - 0
src/views/bpm/handleTask/components/purchaseOrder/outSourceSend/inventoryTable.vue

@@ -386,6 +386,21 @@
           //   slot: 'deliveryDeadline',
           //   show: this.isDeliveryDeadline
           // },
+          {
+            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(',')
+                : '';
+            }
+          },
           {
             minWidth: 140,
             prop: 'customerExpectDeliveryDeadline',
@@ -482,6 +497,8 @@
       };
     },
     created() {
+      this.requestDict('产地');
+
       getWarehouseList().then((res) => {
         this.warehouseList = res;
       });

+ 17 - 0
src/views/bpm/handleTask/components/purchaseOrder/outsourceSendReturnGoods/detailDialog.vue

@@ -389,6 +389,21 @@
             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: 200,
             prop: 'returnReason',
@@ -453,6 +468,8 @@
       }
     },
     created() {
+      this.requestDict('产地');
+
       this.getDetailData(this.businessId);
       if (this.taskDefinitionKey == 'storeman') {
         this.tabOptions.push({ key: 'inoutBound', name: '入库单' });

+ 16 - 0
src/views/bpm/handleTask/components/purchaseOrder/returnGoods/detailDialog.vue

@@ -390,6 +390,21 @@
             slot: 'returnReason',
             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: 140,
           //   prop: 'returnType',
@@ -447,6 +462,7 @@
       }
     },
     created() {
+      this.requestDict('产地');
       this.getDetailData(this.businessId);
       if (this.taskDefinitionKey == 'storemanApprove') {
         this.tabOptions.push({ key: 'outBound', name: '出库单' });

+ 16 - 4
src/views/bpm/handleTask/components/purchaseOrder/returnGoods/inventoryTable.vue

@@ -440,7 +440,21 @@ export default {
           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: 200,
           prop: 'returnReason',
@@ -512,9 +526,7 @@ export default {
     }
   },
   created() {
-    // getWarehouseList().then((res) => {
-    //   this.warehouseList = res;
-    // });
+    this.requestDict('产地');
   },
   methods: {
     changeNumSinglePrice(val,index){

+ 96 - 24
src/views/bpm/handleTask/components/purchasePlanManage/detailDialog.vue

@@ -85,16 +85,12 @@
         <el-col :span="12">
           <el-form-item prop="files" label="附件:">
             <fileMain v-model="form.files" type="view"></fileMain>
-            <!--            <el-link-->
-            <!--              v-if="form.files && form.files !== ''"-->
-            <!--              type="primary"-->
-            <!--              :underline="false"-->
-            <!--              @click="downloadFile(form.files)"-->
-            <!--            >-->
-            <!--              {{ form.files.name }}-->
-            <!--            </el-link-->
-            <!--            >-->
+
           </el-form-item>
+          
+          <template v-slot:technicalDrawings="{ row }">
+              <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
+            </template>
         </el-col>
       </el-row>
       <headerTitle title="计划清单" style="margin-top: 15px"></headerTitle>
@@ -116,9 +112,27 @@
                 v-model="scope.row.totalCount"
               ></el-input-number>
             </template>
+            <template v-slot:expectReceiveDate="scope">
+              <div v-if="scope.row.arrivalWay == 1">
+                {{ scope.row.expectReceiveDate }}
+              </div>
+              <div v-if="scope.row.arrivalWay == 2">
+                <el-link
+                  type="primary"
+                  :underline="false"
+                 
+                >
+                  {{ scope.row.expectReceiveDate }}
+                </el-link>
+              </div>
+            </template>
           </ele-pro-table>
         </el-tab-pane>
-        <el-tab-pane label="带料清单" name="2" v-if="['3', '4', '5', '6','7'].includes(form.sourceType)">
+        <el-tab-pane
+          label="带料清单"
+          name="2"
+          v-if="['3', '4', '5', '6', '7'].includes(form.sourceType)"
+        >
           <ele-pro-table
             ref="table"
             :needPage="false"
@@ -137,7 +151,11 @@
             </template>
           </ele-pro-table>
         </el-tab-pane>
-        <el-tab-pane label="产出品清单" name="3" v-if="['3', '4', '5', '6','7'].includes(form.sourceType)">
+        <el-tab-pane
+          label="产出品清单"
+          name="3"
+          v-if="['3', '4', '5', '6', '7'].includes(form.sourceType)"
+        >
           <ele-pro-table
             ref="table"
             :needPage="false"
@@ -183,7 +201,7 @@
     },
     data() {
       return {
-        activeName:'1',
+        activeName: '1',
         visible: false,
         detailId: '',
         title: '详情',
@@ -220,7 +238,35 @@
             align: 'center',
             slot: 'productName'
           },
-
+          {
+            width: 110,
+            prop: 'batchNo',
+            label: '批次号',
+            slot: 'batchNo',
+            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: 150,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
           {
             width: 150,
             prop: 'productBrand',
@@ -271,25 +317,44 @@
             align: 'center',
             slot: 'specification'
           },
-          // {
-          //   width: 130,
-          //   prop: 'modelType',
-          //   label: '品牌',
-          //   slot: 'modelType'
-          // },
+          {
+            width: 150,
+            prop: 'arrivalWay',
+            label: '到货方式',
+            formatter: (row, column, cellValue) => {
+              return cellValue == 1 ? '一次性到货' : '分批到货';
+            },
+            align: 'center'
+          },
           {
             width: 170,
             prop: 'receiveDate',
             label: '到货日期',
-            align: 'center',
-            slot: 'receiveDate'
+            slot: 'expectReceiveDate',
+            align: 'center'
+          },
+
+          {
+            width: 130,
+            prop: 'supplierName',
+            label: '供应商',
+            slot: 'supplierName',
+            headerSlot: 'headerSupplierName',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'technicalDrawings',
+            label: '图纸附件',
+            slot: 'technicalDrawings',
+            align: 'center'
           },
           {
             width: 140,
             prop: 'files',
             label: '附件',
-            align: 'center',
-            slot: 'files'
+            slot: 'files',
+            align: 'center'
           },
           {
             minWidth: 220,
@@ -302,8 +367,11 @@
       };
     },
     created() {
+      this.requestDict('产地');
+
       this.getPlanData(this.businessId);
     },
+ 
     methods: {
       downloadFile(file) {
         getFile({ objectName: file.storePath }, file.name);
@@ -342,7 +410,11 @@
           }
           // 表单验证通过,执行保存操作
           this.loading = true;
-          this.form.detailList=[...this.form.detailList,...this.form.rawDetailList,...this.form.outputDetailList]
+          this.form.detailList = [
+            ...this.form.detailList,
+            ...this.form.rawDetailList,
+            ...this.form.outputDetailList
+          ];
           return Object.assign({}, this.form);
         } catch (error) {
           console.log(error);

+ 117 - 105
src/views/bpm/stockManagement/components/WarehousingDialog.vue

@@ -1,34 +1,29 @@
 <template>
-  <el-dialog
-    :visible.sync="visible"
-    title="仓库"
-    @before-close="cancel"
-    width="50%"
-    :close-on-click-modal="false"
-    :append-to-body="true"
-  >
+  <el-dialog :visible.sync="visible" title="仓库" @before-close="cancel" width="50%" :close-on-click-modal="false" :append-to-body="true">
     <el-form :model="formData" label-width="100px">
       <el-row>
-        <el-col :span="9">
+        <el-col :span="8">
           <el-form-item label="选择仓库">
-            <el-select filterable v-model="warehouseId">
-              <el-option
-                v-for="(item, index) in warehouseList"
-                :key="index"
-                :label="item.name"
-                :value="item.id"
-              ></el-option>
-            </el-select> </el-form-item
-        ></el-col>
-        <el-col :span="6">
+            <el-select filterable v-model="warehouseId" @change="changeWarehouse">
+              <el-option v-for="(item, index) in warehouseList" :key="index" :label="item.name"
+                :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
           <el-button type="primary" @click="addTableData">添加</el-button>
         </el-col>
         <el-col :span="6">
           <el-form-item label="总包装数量">
             <span class="red_color">
               {{ this.packingQuantity }}
-            </span></el-form-item
-          >
+            </span></el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="计量数量">
+            <span class="red_color">
+              {{ this.measureQuantity }}
+            </span></el-form-item>
         </el-col>
       </el-row>
     </el-form>
@@ -36,19 +31,19 @@
     <el-table :data="tableDate" style="width: 100%">
       <el-table-column label="序号" type="index"></el-table-column>
       <el-table-column label="仓库名称" prop="warehouseName"></el-table-column>
-      <el-table-column label="包装数量" prop="packingQuantity" width="300">
+      <el-table-column label="包装数量" prop="packingQuantity">
         <template slot-scope="{ row, $index }">
-          <el-input-number
-            v-model="row.packingQuantity"
-            :min="1"
-          ></el-input-number>
+          <el-input-number v-model="row.packingQuantity" :min="0" size="mini" disabled></el-input-number>
+        </template>
+      </el-table-column>
+      <el-table-column label="计量数量" prop="measureQuantity">
+        <template slot-scope="{ row, $index }">
+          <el-input-number v-model="row.measureQuantity" :min="0" size="mini" disabled></el-input-number>
         </template>
       </el-table-column>
       <el-table-column width="120" label="操作" fixed="right">
         <template slot-scope="{ row, $index }">
-          <el-button type="text" @click="delItem($index)" size="small"
-            >删除</el-button
-          >
+          <el-button type="text" @click="delItem($index)" size="small">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -60,88 +55,105 @@
 </template>
 
 <script>
-  import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
-  export default {
-    data() {
-      return {
-        packingQuantity: 1,
-        tableDate: [],
-        visible: false,
-        warehouseList: [], //仓库
-        formData: {},
-        warehouseId: '',
-        currentIndex: 0
-      };
+import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
+export default {
+  data() {
+    return {
+      packingQuantity: 0,
+      tableDate: [],
+      visible: false,
+      warehouseList: [], //仓库
+      formData: {},
+      warehouseId: '',
+      currentIndex: 0,
+      measureQuantity: 0
+    };
+  },
+  methods: {
+    changeWarehouse() {
+      this.tableDate = []
     },
-    methods: {
-      numberChange() {},
-      cancel() {
+    cancel() {
+      this.visible = false;
+    },
+    handleSelect() {
+      if (this.tableDate.length == 0) {
+        return this.$message.warning('请添加仓库!');
+      }
+      let total = this.tableDate.reduce(
+        (total, currentObj) =>
+          Number(total) + Number(currentObj.packingQuantity),
+        0
+      );
+      if (total == this.packingQuantity) {
+        this.$emit('selection', this.tableDate, this.currentIndex);
         this.visible = false;
-      },
-      handleSelect() {
-        if (this.tableDate.length == 0) {
-          return this.$message.warning('请添加仓库!');
-        }
-        let total = this.tableDate.reduce(
-          (total, currentObj) => total + currentObj.packingQuantity,
-          0
-        );
-        if (total == this.packingQuantity) {
-          console.log(this.tableDate);
-          this.$emit('selection', this.tableDate, this.currentIndex);
-          this.visible = false;
-        } else {
-          this.$message.warning('总包装数量与仓库包装数量不一致!');
-        }
-      },
-      addTableData() {
-        if (this.tableDate.length < this.packingQuantity) {
-          let list = this.tableDate.filter(
-            (item) => item.warehouseId == this.warehouseId
-          );
-          if (list.length > 0) {
-            return this.$message.warning('该仓库已存在!');
-          }
-          this.tableDate.push({
-            packingQuantity: this.packingQuantity,
-            warehouseName: this.warehouseList.filter(
-              (item) => item.id == this.warehouseId
-            )[0].name,
-            warehouseId: this.warehouseId
-          });
-        } else {
-          this.$message.warning('仓库数量已满!');
-        }
-      },
-      delItem(index) {
-        if (index == 0 && this.tableDate.length == 1) {
-          return this.$message.warning('请至少保存一条数据!');
-        }
-        this.tableDate.splice(index, 1);
-      },
-      async getWarehouseList() {
-        const res = await warehouseDefinition.list({});
-        console.log(res);
-        this.warehouseList = res.map((item) => {
-          return { ...item, name: item.factoryName + '-' + item.name };
+      } else {
+        this.$message.warning('总包装数量与仓库包装数量不一致!');
+      }
+    },
+    addTableData() {
+      // if (this.tableDate.length < this.packingQuantity) {
+      let list = this.tableDate.filter(
+        (item) => item.warehouseId == this.warehouseId
+      );
+      if (list.length > 0) {
+        return this.$message.warning('该仓库已存在!');
+      }
+
+      this.tableDate.push({
+        measureQuantity: this.measureQuantity,
+        packingQuantity: this.packingQuantity,
+        warehouseName: this.warehouseList.filter(
+          (item) => item.id == this.warehouseId
+        )[0].name,
+        warehouseId: this.warehouseId
+      });
+      // } else {
+      //   this.$message.warning('请维护包装规格后再添加仓库!');
+      // }
+    },
+    delItem(index) {
+      // if (index == 0 && this.tableDate.length == 1) {
+      //   return this.$message.warning('请至少保存一条数据!');
+      // }
+      this.tableDate.splice(index, 1);
+    },
+    async getWarehouseList(categoryType) {
+      const res = await warehouseDefinition.list({ inventoryType: categoryType });
+      console.log(res);
+      this.warehouseList = res.map((item) => {
+        return { ...item, name: item.factoryName + '-' + item.name };
+      });
+    },
+    open(packingQuantity, measureQuantity, idx, warehouseId, warehouseName, categoryType) {
+      console.log('仓库id', packingQuantity, measureQuantity, warehouseId, warehouseName);
+
+      this.warehouseId = '';
+      this.tableDate = [];
+      this.currentIndex = idx;
+      this.packingQuantity = packingQuantity;
+      this.measureQuantity = measureQuantity;
+      this.visible = true;
+      this.getWarehouseList(categoryType);
+      if (warehouseId && warehouseName) {
+        this.warehouseId = warehouseId;
+        this.tableDate.push({
+          packingQuantity: packingQuantity,
+          measureQuantity: measureQuantity,
+          warehouseName: warehouseName,
+          warehouseId: warehouseId
         });
-      },
-      open(packingQuantity, idx) {
-        this.warehouseId = '';
-        this.tableDate = [];
-        this.currentIndex = idx;
-        this.packingQuantity = packingQuantity;
-        this.visible = true;
-        this.getWarehouseList();
       }
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  .red_color {
-    font-size: 20px;
-    font-weight: bold;
-    color: red;
-  }
+.red_color {
+  font-size: 20px;
+  font-weight: bold;
+  color: red;
+}
 </style>

+ 23 - 3
src/views/bpm/stockManagement/details.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="ele-body">
+  <div>
     <el-card shadow="never">
       <div>
         <div class="content-detail">
@@ -174,6 +174,10 @@
               :show-overflow-tooltip="true"></el-table-column>
             <el-table-column label="供应商" prop="supplierName" :show-overflow-tooltip="true">
             </el-table-column>
+            <el-table-column label="供应商代号" prop="supplierCode" width="120" :show-overflow-tooltip="true">
+            </el-table-column>
+            <el-table-column label="产地" prop="provenance" :show-overflow-tooltip="true">
+            </el-table-column>
             <!-- <el-table-column
               label="仓库"
               prop="warehouseName"
@@ -189,9 +193,16 @@
             v-el-table-infinite-scroll="pickingHandleScroll">
             <el-table-column label="序号" type="index" width="50">
             </el-table-column>
-            <el-table-column label="编码" prop="categoryCode" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="批次号" prop="batchNo" width="80" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="包装编码" prop="packageNo" width="130" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="名称" prop="categoryName" width="120" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="编码" prop="categoryCode" width="120" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="型号" prop="categoryModel" width="80" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="规格" prop="specification" width="80" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="牌号" prop="brandNum" width="80" :show-overflow-tooltip="true"></el-table-column>
+            <!-- <el-table-column label="编码" prop="categoryCode" :show-overflow-tooltip="true"></el-table-column>
             <el-table-column label="名称" prop="categoryName" :show-overflow-tooltip="true"></el-table-column>
-            <el-table-column label="批次号" prop="batchNo" :show-overflow-tooltip="true"></el-table-column>
+            <el-table-column label="批次号" prop="batchNo" :show-overflow-tooltip="true"></el-table-column> -->
             <el-table-column label="发货条码" prop="barcodes" :show-overflow-tooltip="true"></el-table-column>
             <el-table-column label="包装编码" prop="packageNo" :show-overflow-tooltip="true"></el-table-column>
             <el-table-column label="包装数量" prop="packingQuantity" :show-overflow-tooltip="true"></el-table-column>
@@ -222,6 +233,14 @@
                 <span>{{ qualityStatus[row.status] }}</span>
               </template>
             </el-table-column>
+            <el-table-column label="仓库" prop="warehouseName" :show-overflow-tooltip="true">
+            </el-table-column>
+            <el-table-column label="货区" prop="areaName" :show-overflow-tooltip="true">
+            </el-table-column>
+            <el-table-column label="货架" prop="goodsShelfName" :show-overflow-tooltip="true">
+            </el-table-column>
+            <el-table-column label="货位" prop="goodsAllocationName" :show-overflow-tooltip="true">
+            </el-table-column>
             <el-table-column label="生产日期" prop="productionDate" :show-overflow-tooltip="true">
             </el-table-column>
             <el-table-column label="采购日期" prop="purchaseDate" :show-overflow-tooltip="true">
@@ -580,6 +599,7 @@ export default {
       console.log(this.materialList);
       this.pickingFetchData();
       this.materielFetchData();
+      console.log(this.productList, 'this.productList')
     },
     download(row) {
       if (row.storePath) {

Разница между файлами не показана из-за своего большого размера
+ 188 - 654
src/views/bpm/stockManagement/storage.vue


+ 3 - 3
vue.config.js

@@ -34,9 +34,9 @@ module.exports = {
         // target: 'http://124.71.68.31:50001', // 测试环境
         // target: 'http://124.71.68.31:50001',
 
-        // target: 'http://192.168.1.116:18086',
-        target: 'http://192.168.1.251:18086',
-        changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
+        target: 'http://192.168.1.116:18086',
+        // target: 'http://192.168.1.251:18186',
+        changeOrigin: true, // 只有这个值为true的情况下 s才表示开启跨域
         pathRewrite: {
           '^/api': ''
         }

Некоторые файлы не были показаны из-за большого количества измененных файлов