Explorar o código

feat:采购订单冲差功能,费用列表加合计

liujt hai 2 meses
pai
achega
d9da56b062

+ 97 - 86
src/views/financialManage/feeManage/feeApplication/page.vue

@@ -1,93 +1,96 @@
 <template>
   <div>
     <page-search-table @search="reload"></page-search-table>
-    <!-- 数据表格 -->
-    <ele-pro-table
-      ref="table"
-      :columns="columns"
-      :datasource="datasource"
-      height="calc(100vh - 430px)"
-      full-height="calc(100vh - 116px)"
-      tool-class="ele-toolbar-form"
-      :selection.sync="selection"
-      :page-size="20"
-      @columns-change="handleColumnChange"
-      :cache-key="cacheKeyUrl"
-    >
-      <!-- 表头工具栏 -->
-      <template v-slot:toolbar>
-        <el-button
-          size="small"
-          type="primary"
-          icon="el-icon-plus"
-          class="ele-btn-icon"
-          @click="handleAddOrEdit('', 'add')"
-        >
-          新建
-        </el-button>
-        <el-button
-          size="small"
-          type="danger"
-          el-icon-delete
-          class="ele-btn-icon"
-          @click="allDelBtn"
-          :disabled="selection?.length === 0"
-        >
-          批量删除
-        </el-button>
-      </template>
-      <!-- 操作 -->
-      <template v-slot:action="{ row }">
-        <el-link
-          type="primary"
-          v-if="isNeed_process_is_close && [0, 3].includes(row.approvalStatus)"
-          :underline="false"
-          icon="el-icon-plus"
-          @click="sub(row)"
-        >
-          提交
-        </el-link>
-        <el-link
-          type="primary"
-          v-if="
-            (isNeed_process_is_close && [0, 3].includes(row.approvalStatus)) ||
-            !isNeed_process_is_close
-          "
-          :underline="false"
-          icon="el-icon-edit"
-          @click="handleAddOrEdit(row, 'update')"
-        >
-          修改
-        </el-link>
-
-        <el-popconfirm
-          v-if="
-            isNeed_process_is_close &&
-            [0, 3].includes(row.approvalStatus) &&
-            !isNeed_process_is_close
-          "
-          class="ele-action"
-          title="确定要删除此信息吗?"
-          @confirm="remove([row.id])"
-        >
-          <template v-slot:reference>
-            <el-link type="danger" :underline="false" icon="el-icon-delete">
-              删除
-            </el-link>
-          </template>
-        </el-popconfirm>
-      </template>
-      <template v-slot:applyUserName="{ row }">
-        <el-link
-          type="primary"
-          :underline="false"
-          @click="handleDetail(row, 'view')"
-        >
-          {{ row.applyUserName }}
-        </el-link>
-      </template>
-    </ele-pro-table>
+    <div>
+      <!-- 数据表格 -->
+      <ele-pro-table
+        ref="table"
+        :columns="columns"
+        :datasource="datasource"
+        height="calc(100vh - 430px)"
+        full-height="calc(100vh - 116px)"
+        tool-class="ele-toolbar-form"
+        :selection.sync="selection"
+        :page-size="20"
+        @columns-change="handleColumnChange"
+        :cache-key="cacheKeyUrl"
+        show-summary
+        :summary-method="getSummaries"
+      >
+        <!-- 表头工具栏 -->
+        <template v-slot:toolbar>
+          <el-button
+            size="small"
+            type="primary"
+            icon="el-icon-plus"
+            class="ele-btn-icon"
+            @click="handleAddOrEdit('', 'add')"
+          >
+            新建
+          </el-button>
+          <el-button
+            size="small"
+            type="danger"
+            el-icon-delete
+            class="ele-btn-icon"
+            @click="allDelBtn"
+            :disabled="selection?.length === 0"
+          >
+            批量删除
+          </el-button>
+        </template>
+        <!-- 操作 -->
+        <template v-slot:action="{ row }">
+          <el-link
+            type="primary"
+            v-if="isNeed_process_is_close && [0, 3].includes(row.approvalStatus)"
+            :underline="false"
+            icon="el-icon-plus"
+            @click="sub(row)"
+          >
+            提交
+          </el-link>
+          <el-link
+            type="primary"
+            v-if="
+              (isNeed_process_is_close && [0, 3].includes(row.approvalStatus)) ||
+              !isNeed_process_is_close
+            "
+            :underline="false"
+            icon="el-icon-edit"
+            @click="handleAddOrEdit(row, 'update')"
+          >
+            修改
+          </el-link>
 
+          <el-popconfirm
+            v-if="
+              isNeed_process_is_close &&
+              [0, 3].includes(row.approvalStatus) &&
+              !isNeed_process_is_close
+            "
+            class="ele-action"
+            title="确定要删除此信息吗?"
+            @confirm="remove([row.id])"
+          >
+            <template v-slot:reference>
+              <el-link type="danger" :underline="false" icon="el-icon-delete">
+                删除
+              </el-link>
+            </template>
+          </el-popconfirm>
+        </template>
+        <template v-slot:applyUserName="{ row }">
+          <el-link
+            type="primary"
+            :underline="false"
+            @click="handleDetail(row, 'view')"
+          >
+            {{ row.applyUserName }}
+          </el-link>
+        </template>
+      </ele-pro-table>
+    </div>
     <!-- 多选删除弹窗 -->
     <pop-modal
       :visible.sync="delVisible"
@@ -131,6 +134,7 @@
   import detailDialog from './detailDialog.vue';
   import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
   import tabMixins from '@/mixins/tableColumnsMixin';
+  import { getSummaries } from '@/utils/util.js';
 
   export default {
     mixins: [dictMixins, tabMixins],
@@ -271,6 +275,13 @@
       this.requestDict('客户状态');
     },
     methods: {
+      getSummaries(param) {
+        return getSummaries(
+          param,
+          ['amount'],
+          ' '
+        );
+      },
       //新增、修改
       handleAddOrEdit(row = {}, type) {
         this.addOrEditDialogFlag = true;

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

@@ -184,6 +184,16 @@
                   >
                     收货单
                   </el-link>
+                  <el-link
+                    type="primary"
+                    :underline="false"
+                    icon="el-icon-plus"
+                    v-if="row.allowDifference == 1 && $hasPermission('eom:purchaseorder:adjustment')"
+                    @click="handleCommand('adjustment', row)"
+                  >
+                    
+                    冲差
+                  </el-link>
                   <!-- <el-link
                     type="primary"
                     :underline="false"
@@ -240,6 +250,12 @@
             @getToDoReminder="getToDoReminder"
           ></accountstatement>
         </div>
+        <div v-if="activeComp == 'adjustmentNote'">
+          <adjustmentNote
+            :sourceType="2"
+            @getToDoReminder="getToDoReminder"
+          ></adjustmentNote>
+        </div>
       </div>
     </el-card>
 
@@ -307,6 +323,13 @@
       ref="printPurchaseOrderRef"
       :groupName="groupName"
     ></printPurchaseOrder>
+    <add-adjust-dialog
+      v-if="addAdjustDialogFlag"
+      :sourceType="2"
+      :addAdjustDialogFlag.sync="addAdjustDialogFlag"
+      ref="addAdjustDialogRef"
+      @done="reload"
+    ></add-adjust-dialog>
   </div>
 </template>
 
@@ -329,6 +352,7 @@ import accountstatement from './accountstatement/index.vue';
 import returnGoods from './returnGoods/index.vue';
 import addInvoiceManage from '@/views/financialManage/invoiceManage/components/addOrEditDialog.vue';
 import outSourceSend from './outSourceSend/index';
+
 import {
   getTableList,
   deleteInformation,
@@ -348,6 +372,9 @@ import { exportTable } from '@/api/system/file/index.js';
 import printPurchaseOrder from '@/views/purchasingManage/purchaseOrder/invoice/components/print-PurchaseOrder.vue';
 import { enterprisePage } from '@/api/contractManage/contractBook';
 import { getSummaries } from '@/utils/util.js';
+// import addAdjustDialog from './adjustmentNote‌/components/addAdjustDialog.vue'
+import addAdjustDialog from '@/views/saleManage/saleOrder/adjustmentNote‌/components/addAdjustDialog.vue';
+import adjustmentNote from '@/views/saleManage/saleOrder/adjustmentNote‌/index.vue';
 
 export default {
   mixins: [dictMixins, tabMixins],
@@ -374,7 +401,9 @@ export default {
     purchasePlanDetail,
     inquiryDetail,
     printPurchaseOrder,
-    addDialogNew
+    addDialogNew,
+    addAdjustDialog,
+    adjustmentNote
   },
   data() {
     return {
@@ -406,6 +435,11 @@ export default {
           key: 'accountstatement',
           name: '对账单',
           reminder: 'purchaseStatementAccountNum'
+        },
+        {
+          key: 'adjustmentNote',
+          name: '冲差单',
+          reminder: 'punchSlipForPurchaseOrderNum'
         }
       ],
 
@@ -416,7 +450,7 @@ export default {
       addOrEditDialogFlag: false,
       addOrEditDialogFlag1: false,
       params: {},
-
+      addAdjustDialogFlag: false, //冲差状态
       groupName: '',
       columns: [
         {
@@ -697,6 +731,14 @@ export default {
           this.$refs.addOrEditDialogRef.createInvoice1(row, 2, 3);
         });
       }
+      // 冲差
+      if (command === 'adjustment') {
+        console.log(row);
+        this.addAdjustDialogFlag = true;
+        this.$nextTick(() => {
+          this.$refs.addAdjustDialogRef.open('add', row);
+        });
+      }
     },
 
     //点击左边分类

+ 512 - 45
src/views/saleManage/saleOrder/adjustmentNote‌/components/addAdjustDialog.vue

@@ -126,13 +126,89 @@
         </el-col>
       </el-row>
       <headerTitle title="物品清单" style="margin-top: 30px"></headerTitle>
-      <inventoryTableDetails
-        ref="inventoryTableDetailsRef"
-        :isDiscountTotalPrice="true"
-        :isSelected="true"
-        :selectedIds="selectIds"
-        @selection-change="handleSelectionChange"
-      ></inventoryTableDetails>
+      <div v-if="this.sourceType == 2">
+        <ele-pro-table
+            ref="table"
+            :needPage="false"
+            :columns="columns"
+            @columns-change="handleColumnChange"
+            @select="handleSelectionChange"
+            @select-all="handleSelectionChange"
+            :cache-key="cacheKeyUrl"
+            :datasource="orderForm.productList"
+            row-key="id"
+            max-height="500px"
+          >
+            <template v-slot:toolbar>
+              <div class="headbox">
+                <span class="amount">总计:{{ orderForm.totalAmount }}元</span>
+                <span class="amount"
+                  >应付金额:{{ orderForm.payAmount }}元</span
+                >
+              </div>
+            </template>
+            <template v-slot:technicalDrawings="{ row }">
+              <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
+            </template>
+            <template v-slot:requirementTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 1)">{{ -->
+                {{row.requirementTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.requirementTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+            <template v-slot:planTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 2)">{{ -->
+                {{row.planTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.planTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+            <template v-slot:inquiryTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 3)">{{ -->
+                {{row.inquiryTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.inquiryTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+            <template v-slot:contractTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 4)">{{ -->
+                {{row.contractTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.contractTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+            <template v-slot:doneTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 5)">{{ -->
+                {{row.doneTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.doneTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+            <template v-slot:waitTotalCount="{ row, $index }">
+              <!-- <el-button type="text" @click="handleGetBillDetail(row, 6)">{{ -->
+                {{row.waitTotalCount}}
+              <!-- }}</el-button> -->
+              <span v-if="row.waitTotalCount">{{
+                row.measuringUnit || ''
+              }}</span>
+            </template>
+          </ele-pro-table>
+      </div>
+      <div v-else>
+        <inventoryTableDetails
+          ref="inventoryTableDetailsRef"
+          :isDiscountTotalPrice="true"
+          :isSelected="true"
+          :selectedIds="selectIds"
+          @selection-change="handleSelectionChange"
+        ></inventoryTableDetails>
+      </div>
       <headerTitle
         title="冲差信息"
         style="margin-top: 30px"
@@ -213,9 +289,15 @@
     getSaleOrderDetail,
   } from '@/api/saleManage/saleorder';
   import { addCreate, getInfo, updateInfo } from '@/api/saleManage/adjustmentNote‌';
+  import {
+    getpurchaseorderDetail
+  } from '@/api/purchasingManage/purchaseOrder';
+  import tabMixins from '@/mixins/tableColumnsMixin';
+  import { orderSourceType, outsourceSceneList, lbjtList,pricingWayList,levelList } from '@/enum/dict';
+  import { shippingModePurchaseOp, transactionMethodsOp, quoteTypeOp } from '@/enum/dict.js';
 
   export default {
-    mixins: [dictMixins],
+    mixins: [dictMixins, tabMixins],
     components: {
       processSubmitDialog,
       fileMain,
@@ -228,11 +310,9 @@
         type: Boolean,
         default: false
       },
-      saleOrderData: {
-        type: Object,
-        default: () => {
-          return {};
-        }
+      sourceType: {
+        type: Number,
+        default: 1
       }
     },
     data() {
@@ -243,7 +323,7 @@
         reason: '1',
         rangeType: '',
         adjustType: '1',
-        sourceType: '1',
+        sourceType: this.sourceType,
         sourceNo: '',
         sourceId: '',
         files: [],
@@ -259,6 +339,10 @@
       };
 
       return {
+        cacheKeyUrl: 'eos-202606051420-purchasingManage-purchaseOrder-inventoryTable',
+        shippingModePurchaseOp, 
+        transactionMethodsOp, 
+        quoteTypeOp,
         visible: false,
         processSubmitDialogFlag: false,
         title: '',
@@ -287,6 +371,407 @@
         productList: [],
         adjustData: [],
         selectIds: [],
+        columns: [
+          {
+            width: 45,
+            type: 'index',
+            columnKey: 'index',
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center',
+            selectable: (row, index) => {
+              return !row.sendTotalCount;
+            }
+          },
+          {
+            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'
+          },
+          {
+            minWidth: 200,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'requirementTotalCount',
+            label: '采购需求数量',
+            slot: 'requirementTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'planTotalCount',
+            label: '采购计划数量',
+            slot: 'planTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'inquiryTotalCount',
+            label: '采购核价数量',
+            slot: 'inquiryTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'contractTotalCount',
+            label: '采购合同数量',
+            slot: 'contractTotalCount',
+            align: 'center'
+          },
+          {
+            width: 80,
+            prop: 'doneTotalCount',
+            label: '已采数量',
+            slot: 'doneTotalCount',
+            align: 'center'
+          },
+          {
+            width: 100,
+            prop: 'waitTotalCount',
+            label: '待采数量',
+            // slot: 'waitTotalCount',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.waitTotalCount) {
+                return row.waitTotalCount + ' ' + row.measuringUnit;
+              }
+            }
+          },
+          {
+            width: 100,
+            prop: 'doneReceiveCount',
+            label: '已收货数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.doneReceiveCount) {
+                return row.doneReceiveCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+          {
+            width: 100,
+            prop: 'waitReceiveCount',
+            label: '未收货数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.waitReceiveCount) {
+                return row.waitReceiveCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+          {
+            width: 170,
+            prop: 'purchaseCount',
+            label: '数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.purchaseCount) {
+                return row.purchaseCount + ' ' + (row.purchaseUnit || '');
+              }
+            }
+          },
+
+          {
+            minWidth: 180,
+            prop: 'packingSpecification',
+            align: 'center',
+            label: '包装规格',
+            showOverflowTooltip: true
+          },
+          {
+            width: 150,
+            prop: 'totalCount',
+            label: '计量数量',
+            slot: 'totalCount',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.totalCount) {
+                return row.totalCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+
+          {
+            width: 120,
+            prop: 'produceType',
+            align: 'center',
+            label: '属性类型',
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+              if (row.produceType) {
+                return row.produceType
+                  .map((item) => {
+                    return lbjtList[item];
+                  })
+                  .toString();
+              }
+            }
+          },
+
+          {
+            width: 120,
+            prop: 'singleWeight',
+            label: '单重',
+            slot: 'singleWeight',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.singleWeight) {
+                return row.singleWeight + ' ' + (row.weightUnit || '');
+              }
+            }
+          },
+          {
+            width: 120,
+            prop: 'totalWeight',
+            label: '总重',
+            slot: 'totalWeight',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.totalWeight) {
+                return row.totalWeight + ' ' + (row.weightUnit || '');
+              }
+            }
+          },
+
+          {
+            width: 140,
+            prop: 'pricingWay',
+            label: '计价方式',
+            align: 'center',
+            fixed: 'left',
+            formatter: (row, column) => {
+              return pricingWayList.find((item) => item.id == row.pricingWay)
+                ?.name;
+            }
+          },
+          {
+            minWidth: 120,
+            prop: 'goodsLevel',
+            label: '物品级别',
+            formatter: (_row, _column, cellValue) => {
+              return levelList.find((item) => item.value == _row.goodsLevel)
+                ?.label;
+            },
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'singlePrice',
+            label: '单价',
+            slot: 'singlePrice',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'taxRate',
+            label: '税率',
+            formatter: (row, column) => {
+              return row.taxRate && row.taxRate + '%';
+            },
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'notaxSinglePrice',
+            label: '不含税单价',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'quoteWay',
+            label: '报价方式',
+            align: 'center',
+            formatter: (_row, _column, cellValue) => {
+              return this.quoteTypeOp.find((item) => item.value == _row.quoteWay)
+                ?.label || '';
+            }
+          },
+          {
+            width: 160,
+            prop: 'discountRatio',
+            label: '折后比例',
+            align: 'center',
+            formatter: (row) => {
+              return row.discountRatio ? row.discountRatio + '%' : '';
+            }
+          },
+          {
+            width: 160,
+            prop: 'discountSinglePrice',
+            label: '折后单价',
+            slot: 'discountSinglePrice',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'totalPrice',
+            label: '合计',
+            slot: 'totalPrice',
+            formatter: (_row, _column, cellValue) => {
+              return _row.totalPrice + '元';
+            },
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'discountTotalPrice',
+            label: '折后合计',
+            slot: 'discountTotalPrice',
+            formatter: (_row, _column, cellValue) => {
+              return _row.discountTotalPrice + '元';
+            },
+            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: 120,
+            prop: 'modelKey',
+            label: '机型',
+            showOverflowTooltip: true,
+            align: 'center'
+          },
+          {
+            minWidth: 120,
+            prop: 'colorKey',
+            showOverflowTooltip: true,
+            label: '颜色',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'deliveryDeadline',
+            label: '交期截止日期',
+            slot: 'deliveryDeadline',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'guaranteePeriod',
+            label: '有效期',
+            slot: 'guaranteePeriod',
+            formatter: (_row, _column, cellValue) => {
+              return (
+                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
+              );
+            },
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'guaranteePeriodDeadline',
+            label: '有效期截止日期',
+            slot: 'guaranteePeriodDeadline',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'technicalAnswerName',
+            label: '技术答疑人',
+            slot: 'technicalAnswerName',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'technicalParams',
+            label: '技术参数',
+            slot: 'technicalParams',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'technicalDrawings',
+            label: '技术图纸',
+            slot: 'technicalDrawings',
+            formatter: (_row, _column, cellValue) => {
+              return (
+                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
+              );
+            },
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'remark',
+            label: '备注',
+            slot: 'remark',
+            align: 'center'
+          }
+        ],
       };
     },
     async created() {
@@ -341,7 +826,7 @@
           ...item,
           price: item.singlePrice,
           adjustPrice: item.singlePrice,
-          quantity: item.saleCount,
+          quantity: item.saleCount || item.purchaseCount,
           adjustDiscountPrice: item.discountSinglePrice,
           adjustDiscountAmount: item.discountTotalPrice,
           adjustAmount: item.totalPrice,
@@ -454,7 +939,13 @@
       async getSaleOrderDetail(id) {
         // this.businessId = id;
         this.loading = true;
-        const data = await getSaleOrderDetail(id);
+        let data = {}; 
+        if(this.sourceType == 2) {
+          data = await getpurchaseorderDetail(id);
+        } else {
+          data = await getSaleOrderDetail(id);
+        }
+        
         this.loading = false;
         this.orderForm = data;
         
@@ -507,44 +998,20 @@
             delete this.form.id;
           }
           let data = this.$refs.inventoryTableRef.getTableValue();
-          // let redressProductList =
-          //   (this.$refs.inventoryTableref1 &&
-          //     this.$refs.inventoryTableref1.getTableValue()) ||
-          //   [];
+   
           console.log('data!!!!!!', data);
           if (
             data.productList.length === 0
           ) {
             return this.$message.error('至少选择一个冲差产品');
           }
-          // let orderIds = [...data.productList, ...redressProductList].map(
-          //   (item) => item.orderId
-          // );
-          // let orderNos = [...data.productList, ...redressProductList].map(
-          //   (item) => item.orderNo
-          // );
-
-          // this.form.repliedFiles = this.form.repliedFiles || [];
-          // this.form.replied = this.form.repliedFiles.length > 0 ? 1 : 0;
-          // this.form.typeName = this.getDictValue('退货类型', this.form.type);
+ 
           let commitData = Object.assign({}, this.form, {
        
             detailList: data.productList,
             originalList: this.orderForm.productList,
           
           });
-          // let productListData = [];
-          // data.productList.forEach((item) => {
-          //   if (!item.totalCount) {
-          //     productListData.push(item.productName);
-          //   }
-          // });
-          // console.log(productListData);
-          // if (productListData.length) {
-          //   return this.$message.error(
-          //     productListData.toString() + ' 退货数量不能为空!'
-          //   );
-          // }
    
           if (this.isUpdate) {
             updateInfo(commitData)
@@ -599,14 +1066,14 @@
         this.$nextTick(() => {
           let params = {
             businessId: this.businessId || res,
-            businessKey: 'punch_slip_order_approve',
+            businessKey: this.sourceType == 2 ? 'punch_slip_for_purchase_order_approve' : 'punch_slip_order_approve',
             formCreateUserId: data.createUserId,
             variables: {
               // returnSourceType: data.returnSourceType,
               // storemanIds: storemanIds.toString(),
               businessCode: data.orderNo,
-              businessName: '销售订单冲差',
-              businessType: '冲差单'
+              businessName: this.sourceType == 2 ? '采购订单冲差' : '销售订单冲差',
+              businessType: this.sourceType == 2 ? '采购冲差' : '销售冲差'
             }
           };
 

+ 492 - 6
src/views/saleManage/saleOrder/adjustmentNote‌/components/detailAdjustDialog.vue

@@ -146,10 +146,84 @@
           </el-col>
         </el-row>
         <headerTitle title="物品清单" style="margin-top: 30px"></headerTitle>
-        <inventoryTableDetails
-          ref="inventoryTableDetailsRef"
-          :isDiscountTotalPrice="true"
-        ></inventoryTableDetails>
+        <div v-if="this.sourceType == 2">
+          <ele-pro-table
+              ref="table"
+              :needPage="false"
+              :columns="columns"
+              @columns-change="handleColumnChange"
+              :cache-key="cacheKeyUrl"
+              :datasource="form.originalList"
+              row-key="id"
+              max-height="500px"
+            >
+              <template v-slot:toolbar>
+                <div class="headbox">
+                  <span class="amount">总计:{{ form.totalAmount }}元</span>
+                  <span class="amount"
+                    >应付金额:{{ form.payAmount }}元</span
+                  >
+                </div>
+              </template>
+              <template v-slot:technicalDrawings="{ row }">
+                <fileMain v-model="row.technicalDrawings" type="view"></fileMain>
+              </template>
+              <template v-slot:requirementTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 1)">{{ -->
+                  {{row.requirementTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.requirementTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+              <template v-slot:planTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 2)">{{ -->
+                  {{row.planTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.planTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+              <template v-slot:inquiryTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 3)">{{ -->
+                  {{row.inquiryTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.inquiryTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+              <template v-slot:contractTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 4)">{{ -->
+                  {{row.contractTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.contractTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+              <template v-slot:doneTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 5)">{{ -->
+                  {{row.doneTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.doneTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+              <template v-slot:waitTotalCount="{ row, $index }">
+                <!-- <el-button type="text" @click="handleGetBillDetail(row, 6)">{{ -->
+                  {{row.waitTotalCount}}
+                <!-- }}</el-button> -->
+                <span v-if="row.waitTotalCount">{{
+                  row.measuringUnit || ''
+                }}</span>
+              </template>
+            </ele-pro-table>
+        </div>
+        <div v-else>
+          <inventoryTableDetails
+            ref="inventoryTableDetailsRef"
+            :isDiscountTotalPrice="true"
+          ></inventoryTableDetails>
+        </div>
         <headerTitle
           title="冲差信息"
           style="margin-top: 30px"
@@ -238,9 +312,12 @@
 
   import { getInfo } from '@/api/saleManage/adjustmentNote‌';
   import bpmDetail from '@/views/bpm/processInstance/detail.vue';
+  import { orderSourceType, outsourceSceneList, lbjtList,pricingWayList,levelList } from '@/enum/dict';
+  import { shippingModePurchaseOp, transactionMethodsOp, quoteTypeOp } from '@/enum/dict.js';
+  import tabMixins from '@/mixins/tableColumnsMixin';
 
   export default {
-    mixins: [dictMixins],
+    mixins: [dictMixins, tabMixins],
     components: {
       processSubmitDialog,
       fileMain,
@@ -259,6 +336,10 @@
         default: () => {
           return {};
         }
+      },
+      sourceType: {
+        type: Number,
+        default: 1
       }
     },
     data() {
@@ -281,6 +362,10 @@
       };
 
       return {
+        cacheKeyUrl: 'eos-202606051501-purchasingManage-purchaseOrder-inventoryTableDetail',
+        shippingModePurchaseOp, 
+        transactionMethodsOp, 
+        quoteTypeOp,
         orderOption: [],
         fullscreen: false, //全屏
         customerMark: '',
@@ -306,7 +391,408 @@
         businessId: '',
         orderId: '',
         productList: [],
-        adjustData: []
+        adjustData: [],
+        columns: [
+          {
+            width: 45,
+            type: 'index',
+            columnKey: 'index',
+            align: 'center',
+            fixed: 'left'
+          },
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center',
+            selectable: (row, index) => {
+              return !row.sendTotalCount;
+            }
+          },
+          {
+            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'
+          },
+          {
+            minWidth: 200,
+            prop: 'taskName',
+            label: '工序',
+            slot: 'taskName',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'requirementTotalCount',
+            label: '采购需求数量',
+            slot: 'requirementTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'planTotalCount',
+            label: '采购计划数量',
+            slot: 'planTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'inquiryTotalCount',
+            label: '采购核价数量',
+            slot: 'inquiryTotalCount',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'contractTotalCount',
+            label: '采购合同数量',
+            slot: 'contractTotalCount',
+            align: 'center'
+          },
+          {
+            width: 80,
+            prop: 'doneTotalCount',
+            label: '已采数量',
+            slot: 'doneTotalCount',
+            align: 'center'
+          },
+          {
+            width: 100,
+            prop: 'waitTotalCount',
+            label: '待采数量',
+            // slot: 'waitTotalCount',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.waitTotalCount) {
+                return row.waitTotalCount + ' ' + row.measuringUnit;
+              }
+            }
+          },
+          {
+            width: 100,
+            prop: 'doneReceiveCount',
+            label: '已收货数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.doneReceiveCount) {
+                return row.doneReceiveCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+          {
+            width: 100,
+            prop: 'waitReceiveCount',
+            label: '未收货数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.waitReceiveCount) {
+                return row.waitReceiveCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+          {
+            width: 170,
+            prop: 'purchaseCount',
+            label: '数量',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.purchaseCount) {
+                return row.purchaseCount + ' ' + (row.purchaseUnit || '');
+              }
+            }
+          },
+
+          {
+            minWidth: 180,
+            prop: 'packingSpecification',
+            align: 'center',
+            label: '包装规格',
+            showOverflowTooltip: true
+          },
+          {
+            width: 150,
+            prop: 'totalCount',
+            label: '计量数量',
+            slot: 'totalCount',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.totalCount) {
+                return row.totalCount + ' ' + (row.measuringUnit || '');
+              }
+            }
+          },
+
+          {
+            width: 120,
+            prop: 'produceType',
+            align: 'center',
+            label: '属性类型',
+            showOverflowTooltip: true,
+            formatter: (row, column) => {
+              if (row.produceType) {
+                return row.produceType
+                  .map((item) => {
+                    return lbjtList[item];
+                  })
+                  .toString();
+              }
+            }
+          },
+
+          {
+            width: 120,
+            prop: 'singleWeight',
+            label: '单重',
+            slot: 'singleWeight',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.singleWeight) {
+                return row.singleWeight + ' ' + (row.weightUnit || '');
+              }
+            }
+          },
+          {
+            width: 120,
+            prop: 'totalWeight',
+            label: '总重',
+            slot: 'totalWeight',
+            align: 'center',
+            formatter: (row, column) => {
+              if (row.totalWeight) {
+                return row.totalWeight + ' ' + (row.weightUnit || '');
+              }
+            }
+          },
+
+          {
+            width: 140,
+            prop: 'pricingWay',
+            label: '计价方式',
+            align: 'center',
+            fixed: 'left',
+            formatter: (row, column) => {
+              return pricingWayList.find((item) => item.id == row.pricingWay)
+                ?.name;
+            }
+          },
+          {
+            minWidth: 120,
+            prop: 'goodsLevel',
+            label: '物品级别',
+            formatter: (_row, _column, cellValue) => {
+              return levelList.find((item) => item.value == _row.goodsLevel)
+                ?.label;
+            },
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'singlePrice',
+            label: '单价',
+            slot: 'singlePrice',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'taxRate',
+            label: '税率',
+            formatter: (row, column) => {
+              return row.taxRate && row.taxRate + '%';
+            },
+            align: 'center'
+          },
+          {
+            width: 150,
+            prop: 'notaxSinglePrice',
+            label: '不含税单价',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'quoteWay',
+            label: '报价方式',
+            align: 'center',
+            formatter: (_row, _column, cellValue) => {
+              return this.quoteTypeOp.find((item) => item.value == _row.quoteWay)
+                ?.label || '';
+            }
+          },
+          {
+            width: 160,
+            prop: 'discountRatio',
+            label: '折后比例',
+            align: 'center',
+            formatter: (row) => {
+              return row.discountRatio ? row.discountRatio + '%' : '';
+            }
+          },
+          {
+            width: 160,
+            prop: 'discountSinglePrice',
+            label: '折后单价',
+            slot: 'discountSinglePrice',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'totalPrice',
+            label: '合计',
+            slot: 'totalPrice',
+            formatter: (_row, _column, cellValue) => {
+              return _row.totalPrice + '元';
+            },
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'discountTotalPrice',
+            label: '折后合计',
+            slot: 'discountTotalPrice',
+            formatter: (_row, _column, cellValue) => {
+              return _row.discountTotalPrice + '元';
+            },
+            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: 120,
+            prop: 'modelKey',
+            label: '机型',
+            showOverflowTooltip: true,
+            align: 'center'
+          },
+          {
+            minWidth: 120,
+            prop: 'colorKey',
+            showOverflowTooltip: true,
+            label: '颜色',
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'deliveryDeadline',
+            label: '交期截止日期',
+            slot: 'deliveryDeadline',
+            align: 'center'
+          },
+          {
+            width: 200,
+            prop: 'guaranteePeriod',
+            label: '有效期',
+            slot: 'guaranteePeriod',
+            formatter: (_row, _column, cellValue) => {
+              return (
+                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
+              );
+            },
+            align: 'center'
+          },
+          {
+            width: 160,
+            prop: 'guaranteePeriodDeadline',
+            label: '有效期截止日期',
+            slot: 'guaranteePeriodDeadline',
+            align: 'center'
+          },
+          {
+            width: 120,
+            prop: 'technicalAnswerName',
+            label: '技术答疑人',
+            slot: 'technicalAnswerName',
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'technicalParams',
+            label: '技术参数',
+            slot: 'technicalParams',
+            align: 'center'
+          },
+          {
+            width: 240,
+            prop: 'technicalDrawings',
+            label: '技术图纸',
+            slot: 'technicalDrawings',
+            formatter: (_row, _column, cellValue) => {
+              return (
+                (_row.guaranteePeriod || '') + _row.guaranteePeriodUnitName
+              );
+            },
+            align: 'center'
+          },
+          {
+            width: 220,
+            prop: 'remark',
+            label: '备注',
+            slot: 'remark',
+            align: 'center'
+          }
+        ],
       };
     },
     created() {

+ 9 - 3
src/views/saleManage/saleOrder/adjustmentNote‌/index.vue

@@ -126,6 +126,7 @@
       :detailAdjustDialogFlag.sync="detailAdjustDialogFlag"
       ref="detailAdjustDialogRef"
       :saleOrderData="saleOrderData"
+      :sourceType="sourceType"
       @done="reload"
     ></detail-adjust-dialog>
     <!-- 多选删除弹窗 -->
@@ -187,6 +188,10 @@
       showAddBtn: {
         type: Boolean,
         default: false
+      },
+      sourceType: {
+        type: Number,
+        default: 1
       }
     },
     data() {
@@ -382,6 +387,7 @@
         return getTableList({
           pageNum: page,
           pageSize: limit,
+          sourceType: this.sourceType,
           ...where
         });
       },
@@ -447,13 +453,13 @@
         this.$nextTick(() => {
           let params = {
             businessId: res.id,
-            businessKey: 'punch_slip_order_approve',
+            businessKey: this.sourceType == 2 ? 'punch_slip_for_purchase_order_approve' : 'punch_slip_order_approve',
             formCreateUserId: res.createUserId,
             variables: {
               // type: '1',
               businessCode: res.orderNo,
-              businessName: '销售订单冲差',
-              businessType: '冲差单'
+              businessName: this.sourceType == 2 ? '采购订单冲差' : '销售订单冲差',
+              businessType: this.sourceType == 2 ? '采购冲差' : '销售冲差'
             }
             // callBackMethodType : '1',
             // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',