5 Commits 5d188db7e3 ... ffb3a2bf50

Autor SHA1 Mensaje Fecha
  xieyong ffb3a2bf50 Merge branch 'feat_sale' into dev_03 hace 2 días
  xieyong a8f95fc64f fix: 更新应付明细表格字段名称和布局 hace 2 días
  xieyong 39167445d3 fix: 修改付款条件和付款计划相关字段名称 hace 2 días
  xieyong e2f19a18a1 fix: 添加 .history 到 .gitignore hace 4 días
  liujt 074aa80fac feat: 采购对账单 hace 5 días

+ 1 - 1
.gitignore

@@ -12,7 +12,7 @@ yarn-debug.log*
 yarn-error.log*
 .pnpm-debug.log
 .eslintcache
-
+.history
 # Editor directories and files
 .idea
 .vscode

+ 68 - 39
src/views/purchasingManage/purchaseOrder/accountstatement/components/addAccountDialog.vue

@@ -94,8 +94,10 @@
       return {
         businessId: '',
         fullscreen: false,
+        saveLoading: false,
         datasource: [],
         recorpayList: [],
+        statPayable: null,
         // 应付信息初始明细(查询/编辑回填),由 payablesInfo 本地维护,提交时取回
         payablesList: [],
         dataForm: {
@@ -156,17 +158,26 @@
       async getInfo(row) {
         let data = await accountstatementInfoAPI(row.id);
         // this.recorpayList = data.recorpayList || [];
-        data.orderTotalAmount = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.orderAmount * 100), 0) / 100;
-        data.amountTotalPrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.statementAmount * 100), 0) / 100;
-        data.amountCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.statementedAmount * 100), 0) / 100;
-        data.amountUnCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.unStatementAmount * 100), 0) / 100;
-        this.datasource = data.orderList || [];
-        // 编辑详情回填应付信息(兼容 payablesList / statPayable 两种字段)
+        // data.orderTotalAmount = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.orderAmount * 100), 0) / 100;
+        // data.amountTotalPrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.statementAmount * 100), 0) / 100;
+        // data.amountCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.statementedAmount * 100), 0) / 100;
+        // data.amountUnCompletePrice = data.orderList.reduce((pre, cur) => pre + Math.round(+cur.unStatementAmount * 100), 0) / 100;
+        // this.datasource = data.orderList || [];
+        // // 编辑详情回填应付信息(兼容 payablesList / statPayable 两种字段)
+        
+        // this.dataForm = data;
+
+         this.datasource = data.productList || [];
+    
         this.payablesList =
-          data.payablesList ||
           (data.statPayable && data.statPayable.statPayableDetailList) ||
           [];
-        this.dataForm = data;
+        // 保存查询到的完整 statPayable 对象,作为提交入参
+        this.statPayable = data.statPayable || null;
+        this.dataForm = {
+          ...this.dataForm,
+          ...data,
+        };
         switch (this.dataForm.dateType) {
           case 1:
             this.$set(this.dataForm,'year',this.dataForm.dateValue)
@@ -210,9 +221,10 @@
         // this.recorpayList = data.recorpayList || [];
         this.datasource = data.productList || [];
         // 查询接口暂未返回预付信息时,先置空(由 payablesInfo 本地维护)
-        this.payablesList = data.payablesList ||
+        this.payablesList = 
           (data.statPayable && data.statPayable.statPayableDetailList) ||
           [];
+        this.statPayable = data.statPayable || null;
         this.dataForm = {
           ...this.dataForm,
           ...data
@@ -226,42 +238,59 @@
           // amountCompletePrice: data.reduce((pre, cur) => pre + Math.round(+cur.statementedAmount * 100), 0) / 100,
           // amountUnCompletePrice: data.reduce((pre, cur) => pre + Math.round(+cur.unStatementAmount * 100), 0) / 100
         };
+        
         // if (!this.datasource.length) this.$message.warning('暂无订单信息');
       },
       //保存
       async save(is) {
-        if (!this.datasource.length && !this.recorpayList.length && !this.payablesList.length)
-        return this.$message.warning('暂无对账信息');
+        if (!this.datasource.length)
+          return this.$message.warning('暂无对账信息');
 
-        let api =
-          this.dialogType == 'add'
-            ? createAccountStatementAPI
-            : accountstatementUpdateAPI;
-        // 提交时一次性取回应付信息(本地明细 + 汇总)
-        const payablesData = this.$refs.payablesInfoRef
-          ? this.$refs.payablesInfoRef.getSubmitData()
-          : { payablesList: [], statementAdvanceTotalPrice: 0, receivedTotalPrice: 0 };
-        let params = {
-          ...this.dataForm,
-          orderList: this.datasource,
-          recorpayList: this.recorpayList,
-          payablesList: payablesData.payablesList,
-          totalAdvanceConfirmAmount: payablesData.statementAdvanceTotalPrice,
-          totalPayableAmount: payablesData.receivedTotalPrice
-        };
-        let data = await api(params);
-        if (is == 'sub') {
-          await this.submit(data);
-          return;
-          // await submitAccountStatementApproveAPI(
-          //   {
-          //     businessId: data,
-          //     type: this.dataForm.type
-          //   }
-          // )
+        try {
+          // 校验明细表与应付信息表单
+          await this.$refs.accountDetailTableRef.getValidForm();
+          await this.$refs.payablesInfoRef.validate();
+
+          let api =
+            this.dialogType == 'add'
+              ? createAccountStatementAPI
+              : accountstatementUpdateAPI;
+          // 提交时一次性取回应付信息(本地明细 + 汇总),不再实时回写
+          const payablesData = this.$refs.payablesInfoRef.getSubmitData();
+          // statPayable 为完整数据容器,保存时以它为基准组装应付明细与汇总
+          const statPayable = {
+            statPayableDetailList: payablesData.payablesList,
+            statementAdvanceTotalPrice:
+              payablesData.statementAdvanceTotalPrice,
+            receivedTotalPrice: payablesData.receivedTotalPrice
+          };
+          this.statPayable = statPayable;
+
+          const statementAdvanceTotalPrice =
+            payablesData.statementAdvanceTotalPrice;
+          const receivedTotalPrice = payablesData.receivedTotalPrice;
+          let params = {
+            ...this.dataForm,
+            statementAdvanceTotalPrice,
+            receivedTotalPrice,
+            totalAdvanceConfirmAmount: statementAdvanceTotalPrice,
+            totalPayableAmount: receivedTotalPrice,
+            productList: this.datasource,
+            statPayable
+          };
+          this.saveLoading = true;
+          let data = await api(params);
+          if (is == 'sub') {
+            await this.submit(data);
+            return;
+          }
+          this.$message.success('操作成功');
+          this.reload();
+          this.saveLoading = false;
+        } catch (error) {
+          console.error('保存失败:', error);
+          this.saveLoading = false;
         }
-        this.$message.success('操作成功');
-        this.reload();
       },
       async submit(res) {
         let data = await accountstatementInfoAPI(this.businessId || res);

+ 26 - 8
src/views/purchasingManage/purchaseOrder/accountstatement/components/payablesInfo.vue

@@ -194,19 +194,37 @@
             slot: 'paymentConditionName'
           },
           {
-            minWidth: 170,
-            prop: 'unreconciledAdvanceConfirmAmount',
-            label: '未对账预付款确收金额',
+            prop: 'prepayTotalAmt',
+            minWidth: 160,
+            label: '预付合计金额',
             align: 'center',
-            showOverflowTooltip: true
           },
           {
-            minWidth: 190,
-            prop: 'statementAdvanceConfirmAmount',
-            label: '本次对账预付款确收金额',
+            prop: 'confirmedPrepayAmt',
+            minWidth: 160,
+            label: '累计预付确付金额',
+            align: 'center',
+          },
+          {
+            prop: 'unpaidPrepayAmt',
+            minWidth: 160,
+            label: '未付预付余额',
             align: 'center',
-            // slot: 'statementAdvanceConfirmAmount'
           },
+          // {
+          //   minWidth: 170,
+          //   prop: 'unreconciledAdvanceConfirmAmount',
+          //   label: '未对账预付款确收金额',
+          //   align: 'center',
+          //   showOverflowTooltip: true
+          // },
+          // {
+          //   minWidth: 190,
+          //   prop: 'statementAdvanceConfirmAmount',
+          //   label: '本次对账预付款确收金额',
+          //   align: 'center',
+          //   // slot: 'statementAdvanceConfirmAmount'
+          // },
           {
             minWidth: 120,
             prop: 'statementAmount',

+ 28 - 25
src/views/purchasingManage/purchaseOrder/components/addDialogNew.vue

@@ -253,26 +253,26 @@
             >
             </el-date-picker>
           </el-form-item>
-          <!-- <el-form-item label="付款条件" prop="collectionConditionName">
+          <el-form-item label="付款条件" prop="paymentConditionName">
             <el-input
               clearable
               readonly
-              v-model="form.collectionConditionName"
+              v-model="form.paymentConditionName"
               @click.native="handlePaymentConditionBtn"
               placeholder="请输入"
             />
-          </el-form-item> -->
+          </el-form-item>
           <el-form-item prop="orderFiles" label="附件">
             <fileMain v-model="form.orderFiles"></fileMain>
           </el-form-item>
         </el-col>
         <el-col :span="8">
-          <!-- <el-form-item label="生成付款计划表" prop="isGenerateReceiptPlan">
-            <el-radio-group v-model="form.isGenerateReceiptPlan" @change="generatePlanChange">
+          <el-form-item label="生成付款计划表" prop="isGeneratePaymentPlan">
+            <el-radio-group v-model="form.isGeneratePaymentPlan" @change="generatePlanChange">
               <el-radio :label="1">是</el-radio>
               <el-radio :label="0">否</el-radio>
             </el-radio-group>
-          </el-form-item> -->
+          </el-form-item>
           <el-form-item label="交易方式" prop="transactionMode">
             <el-select
               v-model="form.transactionMode"
@@ -365,7 +365,7 @@
             </el-input>
           </el-form-item>
           <el-form-item
-             v-if="form.isGenerateReceiptPlan != 0"
+             v-if="form.isGeneratePaymentPlan != 0"
             label="期数"
             prop="issueNumber"
           >
@@ -622,7 +622,7 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <div v-if="form.isGenerateReceiptPlan != 0">
+      <div v-if="form.isGeneratePaymentPlan != 0">
         <headerTitle
           title="付款计划"
           style="margin-top: 30px"
@@ -883,7 +883,7 @@
         saleType: '',
         saleTypeName: '',
         totalAmount: '',
-        isGenerateReceiptPlan: 1,
+        isGeneratePaymentPlan: 0,
         settlementMode: '4',
         settlementModeName: '分期付款',
         partaUnifiedSocialCreditCode: '',
@@ -993,13 +993,16 @@
         return this.isUpdate ? this.requirementSourceType : this.requirementSourceType.filter(item => item.value !== '8');
       },
       rules() {
-        let isRequired = this.isRequired;
+        let isRequired = true;
         // console.log(this.isRequired);
 
         return {
           deliveryDate: [
             { required: true, message: '请选择交货日期', trigger: 'change' }
           ],
+          isGeneratePaymentPlan: [
+            { required: true, message: '请选择是否生成付款计划表', trigger: 'change' }
+          ],
           purchasePlanName: [
             {
               required: this.OutValidate.includes(this.form.sourceType),
@@ -1037,8 +1040,8 @@
           partaLinkName: [
             {
               required: isRequired,
-              message: '请选择供应商联系人',
-              trigger: 'change'
+              message: '请输入采购方联系人',
+              trigger: ['change', 'blur']
             }
           ],
           acceptUnpack: [
@@ -1055,7 +1058,7 @@
             {
               required: isRequired,
               pattern: isRequired ? telReg : null,
-              message: '请输入供应商联系电话',
+              message: '请输入采购方电话',
               trigger: 'blur'
             }
           ],
@@ -1066,7 +1069,7 @@
           partbLinkName: [
             {
               required: isRequired,
-              message: '请输入供采购方联系人',
+              message: '请输入供应商联系人',
               trigger: 'change'
             }
           ],
@@ -1074,7 +1077,7 @@
             {
               required: isRequired,
               pattern: isRequired ? telReg : null,
-              message: '请输入供采购方联系电话',
+              message: '请输入供应商联系电话',
               trigger: 'blur'
             }
           ],
@@ -1115,8 +1118,8 @@
     methods: {
       changeReceiveTerms(row, index) {
         console.log('changeReceiveTerms~~~', row)
-        this.form.collectionConditionId = row.id;
-        this.form.collectionConditionName = row.name;
+        this.form.paymentConditionId = row.id;
+        this.form.paymentConditionName = row.name;
         console.log('changeReceiveTerms!!!', this.form)
         this.$forceUpdate()
       },
@@ -2185,7 +2188,7 @@
             })
           }
           this.form.contractStartDate = formatDate(new Date(), 'yyyy-MM-dd');
-          // this.form.isGenerateReceiptPlan = +this.isGenReceiptPlan;
+          // this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
         } else {
           this.isUpdate = true;
           await this.getpurchaseorderDetail(row.id);
@@ -2215,7 +2218,7 @@
         this.visible = true;
         this.isUpdate = false;
         this.form.relationType = 4;
-        // this.form.isGenerateReceiptPlan = +this.isGenReceiptPlan;
+        // this.form.isGeneratePaymentPlan = +this.isGenReceiptPlan;
         this.changeContract(row);
       },
       handleGoodsList() {
@@ -2285,7 +2288,7 @@
           }),
         ]
 
-        if(this.form.isGenerateReceiptPlan != 0) {
+        if(this.form.isGeneratePaymentPlan != 0) {
           arr.push(new Promise((resolve, reject) => {
             this.$refs.paymentCollectionPlanRef.validateForm((valid) => {
               if (!valid) {
@@ -2388,14 +2391,14 @@
             sourceTypeName: this.requirementSourceType.find(
               (val) => val.value == this.form.sourceType
             )?.label,
-            receiptPaymentList: this.form.isGenerateReceiptPlan == 0 ? [] : 
+            receiptPaymentList: this.form.isGeneratePaymentPlan == 0 ? [] : 
               this.$refs?.paymentCollectionPlanRef?.getTableValue() || [],
             endSettlementDate: this.form.settlementDate?.length ? this.form.settlementDate[1] : '',
             startSettlementDate: this.form.settlementDate?.length ? this.form.settlementDate[0] : ''
           });
 
 
-          if(this.form.isGenerateReceiptPlan != 0) {
+          if(this.form.isGeneratePaymentPlan != 0) {
             const ratioSum = commitData.receiptPaymentList.reduce((acc, cur) => acc + +cur.ratio, 0);
           // if(+ratioSum != 100){
           //   this.$message.error('比例合计必须为100%');
@@ -2565,12 +2568,12 @@
         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);
+          this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v, dateRange);
         } else {
-          this.$refs.paymentCollectionPlanRef.defaultList(this.form.settlementMode, v);
+          this.$refs.paymentCollectionPlanRef?.defaultList(this.form.settlementMode, v);
         }
       },
       transformDaysFun(date) {