浏览代码

feat: 采购订单新增委外和退货委外流程

liujt 7 月之前
父节点
当前提交
42bbf4873a

+ 2 - 0
src/enum/dict.js

@@ -280,6 +280,8 @@ export const requirementSourceType = [
   { value: '5', label: '研发委外' },
   { value: '6', label: '外协自供料采购' },
   { value: '7', label: '外协客供料采购' },
+  { value: '8', label: '退货委外' },
+  { value: '9', label: '委外返修' },
   { value: '99', label: '其他' }
 ];
 //商品级别

+ 307 - 8
src/views/purchasingManage/purchaseOrder/components/addDialog.vue

@@ -28,11 +28,11 @@
               placeholder="请选择"
               style="width: 100%"
               @change="sourceTypeChange"
-              :disabled="isFlag"
+              :disabled="isFlag || (isUpdate && form.sourceType === '8')"
               clearable
             >
               <el-option
-                v-for="item in requirementSourceType"
+                v-for="item in filterList"
                 :key="item.value"
                 :label="item.label"
                 :value="item.value"
@@ -47,13 +47,18 @@
               filterable
               clearable
               style="width: 100%"
+              :disabled="(isUpdate && form.sourceType === '8')"
               @change="handleChangeRelationType"
             >
-              <el-option :value="1" label="采购需求单"></el-option>
-              <el-option :value="2" label="采购计划单"></el-option>
-              <el-option :value="3" label="采购核价单"></el-option>
-              <el-option :value="4" label="采购合同"></el-option>
-              <el-option :value="5" label="售后服务"></el-option>
+              <el-option v-if="!showReturnRelation" :value="1" label="采购需求单"></el-option>
+              <el-option v-if="!showReturnRelation" :value="2" label="采购计划单"></el-option>
+              <el-option v-if="!showReturnRelation" :value="3" label="采购核价单"></el-option>
+              <el-option v-if="!showReturnRelation" :value="4" label="采购合同"></el-option>
+              <el-option v-if="!showReturnRelation" :value="5" label="售后服务"></el-option>
+
+              <el-option v-if="showReturnRelation" :value="6" label="销售退货单"></el-option>
+              <el-option v-if="showReturnRelation" :value="7" label="销售退货处理单"></el-option>
+              <el-option v-if="showReturnRelation" :value="8" label="采购退货单"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item
@@ -125,6 +130,49 @@
             />
           </el-form-item>
 
+          <el-form-item
+            v-if="form.relationType == 6"
+            label="销售退货单"
+            prop="relationName"
+          >
+            <el-input
+              clearable
+              v-model="form.relationName"
+              @click.native="handleReturnBtn"
+              @clear="clearContrcat"
+              placeholder="请输入"
+            />
+          </el-form-item>
+
+          <el-form-item
+            v-if="form.relationType == 7"
+            label="销售退货处理单"
+            prop="relationName"
+          >
+            <el-input
+              clearable
+              v-model="form.relationName"
+              :disabled="(isUpdate && form.sourceType === '8')"
+              @click.native="handleReturnDealBtn"
+              @clear="clearContrcat"
+              placeholder="请输入"
+            />
+          </el-form-item>
+
+          <el-form-item
+            v-if="form.relationType == 8"
+            label="采购退货单"
+            prop="relationName"
+          >
+            <el-input
+              clearable
+              v-model="form.relationName"
+              @click.native="handlePurchaseReturnOrder"
+              @clear="clearContrcat"
+              placeholder="请输入"
+            />
+          </el-form-item>
+
           <el-form-item label="需求部门" prop="requireDeptId">
             <ele-tree-select
               clearable
@@ -468,6 +516,28 @@
       ref="selectProjectRef"
       @changeParent="changeProject"
     ></projectListDialog>
+    <!--  销售退货  -->
+    <return-order-dialog
+      :returnOrderDialogFlag.sync="returnOrderDialogFlag"
+      v-if="returnOrderDialogFlag"
+      @changeParent="changeReturn"
+    >
+    </return-order-dialog>
+    <!-- 销售处理退货 -->
+    <returnOrderDealDialog
+      :returnOrderDealDialogFlag.sync="returnOrderDealDialogFlag"
+      v-if="returnOrderDealDialogFlag"
+      @changeParent="changeReturnDeal"
+    >
+    </returnOrderDealDialog>
+
+    <!-- 采购退货   -->
+    <purchase-return-order-dialog
+      :purchaseReturnOrderDialogFlag.sync="purchaseReturnOrderDialogFlag"
+      v-if="purchaseReturnOrderDialogFlag"
+      @changeParent="getPReturnOrderInfo"
+      ref="returnOrderDialogRef"
+    ></purchase-return-order-dialog>
     <ele-modal
       custom-class="ele-dialog-form long-dialog-form"
       :visible.sync="supplierListShow"
@@ -546,6 +616,12 @@
     orderSourceType,
     outsourceSceneList
   } from '@/enum/dict.js';
+  import returnOrderDialog from '@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue';
+  import {
+    getSaleOrderDetail,
+  } from '@/api/saleManage/saleorder';
+  import returnOrderDealDialog from './returnOrderDealDialog.vue';
+  import purchaseReturnOrderDialog from '@/views/transportManager/shipManage/dispatchManage/components/purchaseReturnOrderDialog.vue';
 
   export default {
     mixins: [dictMixins],
@@ -570,7 +646,10 @@
       personSelect,
       supplierGoodsListDialog,
       planTableList,
-      projectListDialog
+      projectListDialog,
+      returnOrderDialog,
+      returnOrderDealDialog,
+      purchaseReturnOrderDialog
     },
     data() {
       let formDef = {
@@ -619,6 +698,9 @@
       };
 
       return {
+        purchaseReturnOrderDialogFlag: false,
+        returnOrderDealDialogFlag: false,
+        returnOrderDialogFlag: false,
         supplierListShow: false,
         supplierList: [],
         supplierId: '',
@@ -674,6 +756,12 @@
       allcountAmount() {
         return this.$store.state.order.allcountAmount;
       },
+      showReturnRelation() {
+        return ['8','9'].includes(this.form.sourceType);
+      },
+      filterList() {
+        return this.isUpdate ? this.requirementSourceType : this.requirementSourceType.filter(item => item.value !== '8');
+      },
       rules() {
         let isRequired = this.isRequired;
         // console.log(this.isRequired);
@@ -774,6 +862,216 @@
       this.changePersonel();
     },
     methods: {
+      //选择退货单
+      handleReturnBtn(e) {
+        // this.$refs.returnListRef.open();
+        if (e.target.nodeName == 'I') {
+          this.$set(this.form, 'relationCode', '');
+          this.$set(this.form, 'relationId', '');
+          return;
+        }
+        this.returnOrderDialogFlag = true;
+      },
+
+      //退货单
+      async changeReturn(row) {
+        console.log('data~~~', row);
+        // this.form = Object.assign({}, this.form, {
+        //   relationCode: row.returnNo,
+        //   relationId: row.id
+        // });
+        // this.$set(this.form, 'relationName', data.requirementName);
+        this.$set(this.form, 'relationId', row.id);
+        this.$set(this.form, 'relationName', row.returnNo);
+        this.getReturnOrderDetail(row);
+
+      },
+
+      async getReturnOrderDetail(row) {
+        console.log('row', row.orderNo);
+        const id = row.orderIds.split(',')[0];
+        const res = await getSaleOrderDetail(id);
+        console.log('res~~~~', res);
+        if (row.partaId) {
+          await this.changeParent({ id: row.partaId }, true);
+        }
+        if (res) {
+          let {
+              // partaAddress,
+              // partaEmail,
+              // partaFax,
+              // partaId,
+              // partaLinkId,
+              // partaLinkName,
+              // partaName,
+              // partaTel,
+              partbAddress,
+              partbEmail,
+              partbFax,
+              partbId,
+              partbLinkId,
+              partbLinkName,
+              partbName,
+              partbTel,
+              totalPrice,
+              discountTotalPrice,
+              // partaUnifiedSocialCreditCode,
+              partbUnifiedSocialCreditCode,
+              settlementMode,
+              settlementModeName,
+              pricingWay,
+              productList,
+              typedetailList,
+              totalAmount,
+              payAmount
+            } = res;
+          this.form = Object.assign({}, this.form, {
+            partaAddress: partbAddress,
+            partaEmail: partbEmail,
+            partaFax: partbFax,
+            partaId: partbId,
+            partaLinkId: partbLinkId,
+            partaLinkName: partbLinkName,
+            partaName: partbName,
+            partaTel: partbTel,
+            // partbAddress,
+            // partbEmail,
+            // partbFax,
+            // partbId,
+            // partbLinkId,
+            // partbLinkName,
+            // partbName,
+            // partbTel,
+            totalPrice,
+            discountTotalPrice,
+            partaUnifiedSocialCreditCode: partbUnifiedSocialCreditCode,
+            settlementMode,
+            settlementModeName,
+            pricingWay,
+            productList,
+            typedetailList,
+            // totalAmount,
+            payAmount
+          });
+          this.$nextTick(() => {
+            this.$store.commit('order/setAllcountAmount', totalAmount);
+            this.$refs.inventoryTable &&
+              this.$refs.inventoryTable.putTableValue(res.productList);
+            this.getLinkInfo(row.partaId);
+          });
+        }
+      },
+
+      // 销售处理退货
+
+      handleReturnDealBtn(e) {
+        if (e.target.nodeName == 'I') {
+          this.$set(this.form, 'relationCode', '');
+          this.$set(this.form, 'relationId', '');
+          return;
+        }
+        this.returnOrderDealDialogFlag = true;
+      },
+      async changeReturnDeal(row) {
+        this.$set(this.form, 'relationId', row.id);
+        this.$set(this.form, 'relationName', row.returnNo);
+        this.getReturnOrderDetail(row);
+      },
+
+      //选择采购退货单
+      handlePurchaseReturnOrder() {
+        this.purchaseReturnOrderDialogFlag = true;
+      },
+
+      //采购退货单回调
+      getPReturnOrderInfo(row) {
+        console.log('params~~~~', row);
+        this.$set(this.form, 'relationId', row.id);
+        this.$set(this.form, 'relationName', row.returnNo);
+        this.getReturnPurchaseDetail(row);
+      },
+
+      async getReturnPurchaseDetail(row) {
+        this.businessId = row.orderId;
+        this.loading = true;
+        const data = await getpurchaseorderDetail(row.orderId);
+        this.loading = false;
+            // this.form = data;
+        
+        if (data) {
+          let {
+              partaAddress,
+              partaEmail,
+              partaFax,
+              partaId,
+              partaLinkId,
+              partaLinkName,
+              partaName,
+              partaTel,
+              partbAddress,
+              partbEmail,
+              partbFax,
+              partbId,
+              partbLinkId,
+              partbLinkName,
+              partbName,
+              partbTel,
+              totalPrice,
+              discountTotalPrice,
+              partaUnifiedSocialCreditCode,
+              partbUnifiedSocialCreditCode,
+              settlementMode,
+              settlementModeName,
+              pricingWay,
+              productList,
+              typedetailList,
+              totalAmount,
+              payAmount
+            } = data;
+          this.form = Object.assign({}, this.form, {
+            partaAddress,
+            partaEmail,
+            partaFax,
+            partaId,
+            partaLinkId,
+            partaLinkName,
+            partaName,
+            partaTel,
+            partbAddress,
+            partbEmail,
+            partbFax,
+            partbId,
+            partbLinkId,
+            partbLinkName,
+            partbName,
+            partbTel,
+            totalPrice,
+            discountTotalPrice,
+            partaUnifiedSocialCreditCode,
+            partbUnifiedSocialCreditCode,
+            settlementMode,
+            settlementModeName,
+            pricingWay,
+            productList,
+            typedetailList,
+            totalAmount,
+            payAmount
+          });
+          this.$nextTick(() => {
+            this.$store.commit('order/setAllcountAmount', totalAmount);
+            this.$refs.inventoryTable &&
+              this.$refs.inventoryTable.putTableValue(data.productList);
+            this.$refs.rawDetailListRef &&
+              this.$refs.rawDetailListRef.putTableValue(data.rawList); //原料
+            this.$refs.outputDetailListRef &&
+              this.$refs.outputDetailListRef.putTableValue(data.outputList); //产成品
+            this.getLinkInfo(data.partaId);
+            this.getrequireUser(this.form.requireDeptId);
+            // this.$store.commit('order/setContractId', data.contractId);
+          });
+        }
+      },
+
       //选择项目弹框
       handleProjectBtn() {
         if (this.clearing) return;
@@ -1226,6 +1524,7 @@
         this.form.purchasePlanId = '';
         this.form.purchasePlanNo = '';
         this.form.purchasePlanName = '';
+        this.form.relationType = '';
 
         this.form.relationId = '';
         this.form.relationCode = '';

+ 274 - 0
src/views/purchasingManage/purchaseOrder/components/returnOrderDealDialog.vue

@@ -0,0 +1,274 @@
+<template>
+  <el-dialog title="选择退货单" custom-class="ele-dialog-form long-dialog-form" :visible.sync="returnOrderDealDialogFlag"
+             :before-close="handleClose" :close-on-click-modal="false" top="5vh"
+             :close-on-press-escape="false" append-to-body width="70%">
+    <el-card shadow="never">
+      <!-- <searchTable @search="reload"></searchTable> -->
+      <ele-pro-table ref="table" :columns="columns" :datasource="datasource" row-key="id"
+                     height="calc(100vh - 500px)" class="dict-table" cache-key="eom-purchase-order-return-order-deal-dialog" @cell-click="cellClick">
+        <!-- 表头工具栏 -->
+        <template v-slot:action="{ row }">
+          <el-radio class="radio" v-model="radio" :label="row.id"><i></i></el-radio>
+        </template>
+      </ele-pro-table>
+    </el-card>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" size="small" @click="selected">选择</el-button>
+      <el-button size="small" @click="handleClose">关闭</el-button>
+    </div>
+
+  </el-dialog>
+</template>
+
+<script>
+
+
+// import searchTable from './searchTable.vue';
+import {getReturnTableList} from '@/api/saleManage/returnGoods';
+import {reviewStatus} from '@/enum/dict';
+import {
+    saleReturnPageList,
+  } from '@/api/saleManage/returnGoods';
+
+export default {
+  components: {
+    // searchTable
+  },
+  props: {
+    returnOrderDealDialogFlag: {
+      default: false,
+      type: Boolean
+    },
+    contactData: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      currentIndex: null,
+      columns: [
+          {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择',
+        },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'returnHandleNo',
+            label: '退货处理单编码',
+            align: 'center',
+            slot: 'returnHandleNo',
+            showOverflowTooltip: true,
+            sortable: true,
+            minWidth: 200
+          },
+          {
+            prop: 'returnNo',
+            label: '退货单编码',
+            align: 'center',
+            slot: 'returnNo',
+            showOverflowTooltip: true,
+            sortable: true,
+            minWidth: 200
+          },
+
+          {
+            prop: 'orderNo',
+            label: '销售订单编码',
+            align: 'center',
+            slot: 'orderNo',
+            showOverflowTooltip: true,
+            sortable: true,
+            minWidth: 200
+          },
+          {
+            prop: 'sendNo',
+            label: '发货订单编码',
+            align: 'center',
+            slot: 'sendNo',
+            showOverflowTooltip: true,
+            sortable: true,
+            minWidth: 200
+          },
+          {
+            prop: 'productNames',
+            label: '产品名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'productCodes',
+            label: '产品编码',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 160
+          },
+          {
+            prop: 'batchNos',
+            label: '批次号',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+          {
+            prop: 'productCount',
+            label: '数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 140
+          },
+
+          {
+            prop: 'contactName',
+            label: '客户名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 180
+          },
+          // {
+          //   prop: 'contactName2',
+          //   label: '已返修数量',
+          //   align: 'center',
+          //   showOverflowTooltip: true,
+          //   minWidth: 180
+          // },
+          // {
+          //   prop: 'contactName1',
+          //   label: '未返修数量',
+          //   align: 'center',
+          //   showOverflowTooltip: true,
+          //   minWidth: 180
+          // },
+          {
+            prop: 'approvalStatus',
+            label: '状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100,
+            formatter: (_row, _column, cellValue) => {
+              return reviewStatus[_row.approvalStatus];
+            }
+          },
+          {
+            prop: 'createUserName',
+            label: '创建人',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 80
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 170
+          },
+        ],
+
+      radio: null,
+    }
+  },
+
+  methods: {
+    /* 表格数据源 */
+    // datasource({page, limit, where, order}) {
+    //   if(this.contactData.id){
+    //     where['contactId']=this.contactData.id
+    //   }
+    //   return getReturnTableList({
+    //     pageNum: page,
+    //     size: limit,
+    //     ...where,
+    //     reviewStatus: '2',
+    //     returnSourceType:'1',
+    //     hasHandleReceipt: 0,
+    //     types:'10,20,30'
+    //   });
+    // },
+
+    datasource({ page, limit, where, order }) {
+        return saleReturnPageList({
+          pageNum: page,
+          size: limit,
+          reviewStatus: '2',
+          ...where
+        });
+      },
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({pageNum: 1, where: where, reviewStatus: '2'});
+    },
+
+    // handleNodeClick(data, node) {
+    //   this.reload({categoryId: data.id});
+    // },
+
+
+    // 单击获取id
+    cellClick(row) {
+      this.current = row
+      this.radio = row.id
+    },
+    handleClose() {
+      this.$emit('update:returnOrderDealDialogFlag', false)
+    },
+
+    selected() {
+      if (!this.current) {
+        return this.$message.warning('请至少选择一条数据')
+      }
+      this.$emit('changeParent', this.current, this.currentIndex)
+      this.handleClose()
+    },
+
+
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
+
+.table_col {
+  padding-left: 10px;
+
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
+  }
+}
+
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
+
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
+
+.topsearch {
+  margin-bottom: 15px;
+}
+</style>

+ 1 - 3
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -559,11 +559,9 @@
       :isMy="true"
       @changeParent="saleOrderListDialogChange"
     ></saleOrderListDialog>
-    <!-- <returnOrderDialog ref="returnListRef" @changeParent="changeReturn"></returnOrderDialog> -->
     <!--  退货  -->
     <return-order-dialog
       :returnOrderDialogFlag.sync="returnOrderDialogFlag"
-      :contactData="contactData"
       v-if="returnOrderDialogFlag"
       @changeParent="changeReturn"
     >
@@ -1483,7 +1481,7 @@ import { resetPassword } from '@/api/system/user';
           }
           this.form.createDeptName = this.user.info.groupName;
           this.form.saleType = 1;
-          this.form.progress = 700;
+          // this.form.progress = 700;
           //嘉实默认值
           if (this.clientEnvironmentId == 5) {
             this.form.saleType = 2;