Bläddra i källkod

feat: 添加分期付款支持,优化结算月份和收款日期的显示逻辑

xieyong 17 timmar sedan
förälder
incheckning
eb2d039ef0

+ 11 - 0
src/BIZComponents/paymentCollectionPlan/Index.vue

@@ -728,6 +728,17 @@
           console.log('forceUpdate called');
         });
       },
+      // 仅回填「计划收款/付款日期」,不动其它已填字段(比例/款项名称/金额/说明)
+      // 超出日期数组长度的行保持原值,避免覆盖用户手工填写的日期
+      setDeadLineList(dateRange) {
+        if (!dateRange || !dateRange.length) return;
+        if (!this.form.datasource || !this.form.datasource.length) return;
+        this.form.datasource.forEach((item, index) => {
+          if (index < dateRange.length) {
+            this.$set(item, 'deadLine', dateRange[index]);
+          }
+        });
+      },
       // 添加
       handlAdd() {
         let item = JSON.parse(JSON.stringify(this.defaultForm));

+ 54 - 5
src/views/saleManage/saleOrder/components/addDialogNew.vue

@@ -360,8 +360,9 @@
             </el-date-picker>
           </el-form-item>
 
+          <!-- 结算方式=按月结算(2) 时必填;=分期付款 时展示但非必填,仅用于给下方收款计划回填计划收款日期 -->
           <el-form-item
-            v-if="form.settlementMode == 2"
+            v-if="form.settlementMode == 2 || isInstallment"
             label="结算月份范围"
             prop="settlementDate"
           >
@@ -374,7 +375,7 @@
             </el-date-picker> -->
             <el-date-picker
               v-model="form.settlementDate"
-              :clearable="false"
+              :clearable="isInstallment"
               type="monthrange"
               range-separator="至"
               start-placeholder="开始月份"
@@ -386,7 +387,7 @@
             </el-date-picker>
           </el-form-item>
           <el-form-item
-            v-if="form.settlementMode == 2"
+            v-if="form.settlementMode == 2 || isInstallment"
             label="收款日期"
             prop="receiptDate"
           >
@@ -1022,6 +1023,12 @@
       clientEnvironmentId() {
         return this.$store.state.user.info.clientEnvironmentId;
       },
+      // 结算方式是否为「分期付款」
+      isInstallment() {
+        const mode = this.form.settlementMode;
+        if (mode === '' || mode === null || mode === undefined) return false;
+        return mode == 4 || this.form.settlementModeName === '分期付款';
+      },
       rules() {
         let isRequired = this.isRequired;
         return {
@@ -1107,10 +1114,18 @@
             }
           ],
           settlementDate: [
-            { required: true, message: '请选择结算日期', trigger: 'change' }
+            {
+              required: !this.isInstallment,
+              message: '请选择结算日期',
+              trigger: 'change'
+            }
           ],
           receiptDate: [
-            { required: true, message: '请选择收款日期', trigger: 'change' }
+            {
+              required: !this.isInstallment,
+              message: '请选择收款日期',
+              trigger: 'change'
+            }
           ]
         };
       }
@@ -1191,6 +1206,12 @@
       },
       setIssueNumber(len) {
         this.form.issueNumber = len;
+        // 分期付款下手工增删行后,同步回填新行的计划收款日期
+        if (this.isInstallment) {
+          this.$nextTick(() => {
+            this.setInstallmentDeadLine();
+          });
+        }
       },
       setCountAmount(allPrice, discountTotalPrice) {
         this.form.totalAmount = allPrice;
@@ -2309,6 +2330,11 @@
       // 日期范围变化
       settlementDateChange(val) {
         // console.log(val);
+        // 分期付款:期数由用户自行填写,这里只把计划收款日期回填到已有的收款计划行
+        if (this.isInstallment) {
+          this.setInstallmentDeadLine();
+          return;
+        }
         let dateRange = [];
         if (this.form.settlementMode == 1) {
           //   // this.transformDays(val)
@@ -2330,6 +2356,10 @@
       // 收款日变化
       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(
@@ -2339,6 +2369,16 @@
           );
         }
       },
+      // 分期付款:按「结算月份范围 + 收款日期」给收款计划回填计划收款日期
+      // 结算月份范围/收款日期均非必填,未填时不做任何赋值;只覆盖 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 = [];
@@ -2356,6 +2396,15 @@
             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,

+ 25 - 2
src/views/saleManage/saleOrder/components/darwerComponents/saleOrderInfo.vue

@@ -38,7 +38,11 @@
             </el-date-picker>
           </el-form-item>
 
-          <el-form-item v-if="form.settlementMode == 2" label="结算月份范围" prop="settlementDate">
+          <el-form-item
+            v-if="showSettleMonth"
+            label="结算月份范围"
+            prop="settlementDate"
+          >
             <el-date-picker
               v-model="form.settlementDate"
               type="monthrange"
@@ -51,7 +55,11 @@
             >
             </el-date-picker>
           </el-form-item>
-          <el-form-item  v-if="form.settlementMode == 2" label="收款日期" prop="receiptDate">
+          <el-form-item
+            v-if="showSettleMonth"
+            label="收款日期"
+            prop="receiptDate"
+          >
             <el-input type="number" :min="1" :max="31" disabled placeholder="请输入" v-model="form.receiptDate">
               <template slot="prepend">每月</template>
               <template slot="append">日</template>
@@ -383,6 +391,21 @@
     computed: {
       clientEnvironmentId() {
         return this.$store.state.user.info.clientEnvironmentId;
+      },
+      // 结算方式是否为「分期付款」
+      isInstallment() {
+        const mode = this.form.settlementMode;
+        if (mode === '' || mode === null || mode === undefined) return false;
+        return mode == 4 || this.form.settlementModeName === '分期付款';
+      },
+      // 按月结算固定展示;分期付款下只有填过结算月份范围才展示
+      showSettleMonth() {
+        if (this.form.settlementMode == 2) return true;
+        return !!(
+          this.isInstallment &&
+          this.form.settlementDate &&
+          this.form.settlementDate.length
+        );
       }
     },
     methods: {