Browse Source

fix: 更新款项子类型选项逻辑,支持采购和销售的不同子类型显示

xieyong 1 month ago
parent
commit
d0444951fd

+ 13 - 4
src/BIZComponents/paymentCollectionPlan/Index.vue

@@ -288,10 +288,6 @@
           datasource: []
         },
         paymentTypeOp,
-        subTypeOp: [
-          { value: 'ADVANCE', label: '预收款' },
-          { value: 'DEPOSIT', label: '定金' }
-        ],
         rules: {},
         isLoadingFromApi: false
       };
@@ -300,6 +296,19 @@
       canHandl() {
         return this.form.datasource.length;
       },
+      // 款项子类型选项:销售=预收款/定金,采购=预付款/定金
+      subTypeOp() {
+        if (this.menu === 'purchase') {
+          return [
+            { value: 'PREPAY', label: '预付款' },
+            { value: 'DEPOSIT', label: '定金' }
+          ];
+        }
+        return [
+          { value: 'ADVANCE', label: '预收款' },
+          { value: 'DEPOSIT', label: '定金' }
+        ];
+      },
       showAddBtn() {
         // console.log('showAddBtn~~~~', this.type, this.info);
         // console.log('showAddBtn!!!!',!['1', '2'].includes(this.info.settlementMode) || this.type != 'view');

+ 43 - 6
src/views/purchasingManage/purchaseOrder/components/addDialogNew.vue

@@ -337,7 +337,7 @@
             </el-date-picker>
           </el-form-item>
 
-          <el-form-item v-if="form.settlementMode == 2" label="结算月份范围" prop="settlementDate">
+          <el-form-item v-if="form.settlementMode == 2 || isInstallment" label="结算月份范围" prop="settlementDate">
             <!-- <el-date-picker
               v-model="form.contractEndDate"
               type="date"
@@ -348,7 +348,7 @@
             <el-date-picker
               v-model="form.settlementDate"
               type="monthrange"
-              :clearable="false"
+              :clearable="isInstallment"
               range-separator="至"
               start-placeholder="开始月份"
               end-placeholder="结束月份"
@@ -358,7 +358,7 @@
             >
             </el-date-picker>
           </el-form-item>
-          <el-form-item  v-if="form.settlementMode == 2" label="收款日期" prop="receiptDate">
+          <el-form-item  v-if="form.settlementMode == 2 || isInstallment" label="收款日期" prop="receiptDate">
             <el-input type="number" :min="1" :max="31" placeholder="请输入" v-model="form.receiptDate" @input="receiptDateChange">
               <template slot="prepend">每月</template>
               <template slot="append">日</template>
@@ -1000,6 +1000,12 @@
       filterList() {
         return this.isUpdate ? this.requirementSourceType : this.requirementSourceType.filter(item => item.value !== '8');
       },
+      // 结算方式是否为「分期付款」
+      isInstallment() {
+        const mode = this.form.settlementMode;
+        if (mode === '' || mode === null || mode === undefined) return false;
+        return mode == 4 || this.form.settlementModeName === '分期付款';
+      },
       rules() {
         let isRequired = true;
         // console.log(this.isRequired);
@@ -1239,6 +1245,12 @@
       },
       setIssueNumber(len) {
         this.form.issueNumber = len;
+        // 分期付款下手工增删行后,同步回填新行的计划付款日期
+        if (this.isInstallment) {
+          this.$nextTick(() => {
+            this.setInstallmentDeadLine();
+          });
+        }
       },
       getSupplierData(data) {
         console.log('data~~~', data);
@@ -2252,7 +2264,7 @@
             })
           }
           this.form.contractStartDate = formatDate(new Date(), 'yyyy-MM-dd');
-          // this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
+          this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
         } else {
           this.isUpdate = true;
           await this.getpurchaseorderDetail(row.id);
@@ -2282,7 +2294,7 @@
         this.visible = true;
         this.isUpdate = false;
         this.form.relationType = 4;
-        // this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
+        this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
         this.changeContract(row);
       },
       handleGoodsList() {
@@ -2609,6 +2621,11 @@
       // 日期范围变化
       settlementDateChange(val) {
         // console.log(val);
+        // 分期付款:期数由用户自行填写,这里只把计划付款日期回填到已有的付款计划行
+        if (this.isInstallment) {
+          this.setInstallmentDeadLine();
+          return;
+        }
         let dateRange = [];
         if(this.form.settlementMode == 1) {
         //   // this.transformDays(val)
@@ -2626,20 +2643,40 @@
       // 收款日变化
       receiptDateChange(v) {
         // this.transformMonth(this.form.settlementDate)
+        if (this.isInstallment) {
+          this.setInstallmentDeadLine();
+          return;
+        }
         if(this.form.settlementDate.length > 0 && this.form.issueNumber) {
           const dateRange = this.transformMonthFun(this.form.settlementDate, v);
           this.$refs.paymentCollectionPlanRef.defaultList(this.form.settlementMode, this.form.issueNumber, dateRange);
         }
       },
+      // 分期付款:按「结算月份范围 + 收款日期」给付款计划回填计划付款日期
+      // 结算月份范围/收款日期均非必填,未填时不做任何赋值;只覆盖 deadLine,不影响用户已填的比例/款项名称/金额/说明
+      setInstallmentDeadLine() {
+        const { settlementDate, receiptDate } = this.form;
+        if (!settlementDate || settlementDate.length < 2) return;
+        const day = parseInt(receiptDate, 10);
+        if (!day || day < 1 || day > 31) return;
+        const dateRange = this.transformMonthFun(settlementDate, day);
+        this.$refs.paymentCollectionPlanRef?.setDeadLineList(dateRange);
+      },
       // 期数变化
       issueNumberChange(v) {
         let dateRange = [];
         if(this.form.settlementMode == 1) {
           dateRange = this.transformDaysFun(this.form.settlementDate, v);
-          this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v, dateRange); 
+          this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v, dateRange);
         } else if(this.form.settlementMode == 2) {
           dateRange = this.transformMonthFun(this.form.settlementDate, v);
           this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v, dateRange);
+        } else if (this.isInstallment) {
+          // 先按期数重建行,再回填计划付款日期
+          this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v);
+          this.$nextTick(() => {
+            this.setInstallmentDeadLine();
+          });
         } else {
           this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v);
         }