|
|
@@ -14,7 +14,7 @@
|
|
|
<div v-loading="loading">
|
|
|
<!--基本信息-->
|
|
|
<headerTitle title="基本信息" style="margin-top: 30px"></headerTitle>
|
|
|
- <el-form ref="form" :model="dataForm" :rules="rules" label-width="120px">
|
|
|
+ <el-form ref="form" :model="dataForm" :rules="formRules" label-width="120px">
|
|
|
<el-row>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="会计科目:" prop="accountingSubjectId">
|
|
|
@@ -50,13 +50,18 @@
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="receivableTotalPrice" label="应收金额">
|
|
|
- <el-input :disabled="dialogType == 'view'" v-model="dataForm.receivableTotalPrice"></el-input>
|
|
|
+ <!-- 无来源应收没有对账明细,应收金额 = 产品明细合计 -->
|
|
|
+ <el-input
|
|
|
+ :disabled="dialogType == 'view' || isManual"
|
|
|
+ v-model="dataForm.receivableTotalPrice"
|
|
|
+ ></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-row>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="invoiceCode" label="发票编码">
|
|
|
+ <!-- 发票编码/发票号/发票种类、来源编码一律带出,新增和修改都不能改 -->
|
|
|
<el-input disabled v-model="dataForm.invoiceCode"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
@@ -68,7 +73,7 @@
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="invoiceCategory" label="发票种类">
|
|
|
<el-select
|
|
|
- :disabled="true"
|
|
|
+ disabled
|
|
|
clearable
|
|
|
class="ele-block"
|
|
|
v-model="dataForm.invoiceCategory"
|
|
|
@@ -83,11 +88,20 @@
|
|
|
<el-row>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item prop="contactName" label="公司名称">
|
|
|
- <el-input disabled v-model="dataForm.contactName"></el-input>
|
|
|
+ <!-- 无来源应收没有源单带出客户,需要手工选择 -->
|
|
|
+ <el-input
|
|
|
+ v-if="isManual"
|
|
|
+ v-model="dataForm.contactName"
|
|
|
+ placeholder="请选择"
|
|
|
+ readonly
|
|
|
+ @click.native="$refs.parentRef.open()"
|
|
|
+ ></el-input>
|
|
|
+ <el-input v-else disabled v-model="dataForm.contactName"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="8">
|
|
|
<el-form-item label="来源类型" prop="sourceType">
|
|
|
+ <!-- 无来源应收的来源类型固定为「无来源」,不可改 -->
|
|
|
<el-select
|
|
|
:disabled="true"
|
|
|
clearable
|
|
|
@@ -96,7 +110,7 @@
|
|
|
placeholder="请选择"
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="item in payAndReceiveEnum"
|
|
|
+ v-for="item in sourceTypeOptions"
|
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
|
@@ -143,30 +157,49 @@
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
|
|
|
- <headerTitle title="应收信息" style="margin-top: 30px"></headerTitle>
|
|
|
- <receivable-info
|
|
|
- :dataForm.sync="dataForm"
|
|
|
- :receivableList.sync="receivableList"
|
|
|
- dialogType="view"
|
|
|
- @addAdvanceReceipt="addAdvanceReceipt"
|
|
|
- ref="receivableInfoRef"
|
|
|
- ></receivable-info>
|
|
|
+ <!-- 产品列表:无来源应收没有对账单,明细手工录入(与发票「其他无订单无合同」同一张表) -->
|
|
|
+ <template v-if="isManual">
|
|
|
+ <headerTitle title="关联物品清单信息" style="margin-top: 30px"></headerTitle>
|
|
|
+ <table-info
|
|
|
+ ref="productTableRef"
|
|
|
+ :dialogType="dialogType"
|
|
|
+ :contactData="contactData"
|
|
|
+ @setPrice="setReceivableTotalPrice"
|
|
|
+ ></table-info>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- 应收信息:无来源应收没有对账单,不需要 -->
|
|
|
+ <template v-if="!isManual">
|
|
|
+ <headerTitle title="应收信息" style="margin-top: 30px"></headerTitle>
|
|
|
+ <receivable-info
|
|
|
+ :dataForm.sync="dataForm"
|
|
|
+ :receivableList.sync="receivableList"
|
|
|
+ dialogType="view"
|
|
|
+ @addAdvanceReceipt="addAdvanceReceipt"
|
|
|
+ ref="receivableInfoRef"
|
|
|
+ ></receivable-info>
|
|
|
+ </template>
|
|
|
|
|
|
- <headerTitle title="对账明细" style="margin-top: 30px"></headerTitle>
|
|
|
- <account-detail-table
|
|
|
- ref="accountDetailTableRef"
|
|
|
- :datasource.sync="datasource"
|
|
|
- dialogType="view"
|
|
|
- :queryDimension="dataForm.queryDimension"
|
|
|
- @totalChange="handleTotalChange"
|
|
|
- @countChange="handleCountChange"
|
|
|
- ></account-detail-table>
|
|
|
+ <!-- 对账明细:无来源应收没有对账单,不需要 -->
|
|
|
+ <template v-if="!isManual">
|
|
|
+ <headerTitle title="对账明细" style="margin-top: 30px"></headerTitle>
|
|
|
+ <account-detail-table
|
|
|
+ ref="accountDetailTableRef"
|
|
|
+ :datasource.sync="datasource"
|
|
|
+ dialogType="view"
|
|
|
+ :queryDimension="dataForm.queryDimension"
|
|
|
+ @totalChange="handleTotalChange"
|
|
|
+ @countChange="handleCountChange"
|
|
|
+ ></account-detail-table>
|
|
|
+ </template>
|
|
|
</div>
|
|
|
<advance-receipt-select-dialog
|
|
|
ref="advanceReceiptSelectRef"
|
|
|
:contactId="dataForm.contactId"
|
|
|
@changeParent="onAdvanceReceiptSelected"
|
|
|
></advance-receipt-select-dialog>
|
|
|
+ <!-- 客户选择(无来源应收) -->
|
|
|
+ <parentList v-if="isManual" ref="parentRef" @changeParent="changeParent"></parentList>
|
|
|
<div slot="footer" class="footer">
|
|
|
<el-button
|
|
|
v-if="dialogType !== 'view'"
|
|
|
@@ -199,6 +232,7 @@
|
|
|
import AdvanceReceiptSelectDialog from '@/views/saleManage/saleOrder/accountstatement/components//advanceReceiptSelectDialog.vue';
|
|
|
|
|
|
import saleForm from '@/views/saleManage/saleOrder/accountstatement/components/saleForm.vue';
|
|
|
+ import tableInfo from '@/views/financialManage/invoiceManage/components/tableInfo.vue';
|
|
|
import {
|
|
|
getStatementRecordListAPI,
|
|
|
infoAccountStatementAPI,
|
|
|
@@ -210,8 +244,54 @@
|
|
|
} from '@/api/saleManage/accountstatement';
|
|
|
import { getFinReceivableInitInfoAPI, getFinReceivableInfoAPI, saveReceivableAPI, updateReceivableAPI } from '@/api/financialManage/receivableManage';
|
|
|
import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
|
|
|
- import { paymentTypeOp, payAndReceiveEnum } from '@/enum/dict';
|
|
|
+ import { paymentTypeOp, payAndReceiveEnum, manualReceivableSourceType } from '@/enum/dict';
|
|
|
import { getTreeByPid } from '@/api/classifyManage';
|
|
|
+ import parentList from '@/views/saleManage/contact/components/parentList.vue';
|
|
|
+
|
|
|
+ // 应收表单初始值
|
|
|
+ const getDefaultDataForm = () => ({
|
|
|
+ accountingSubjectId: '',
|
|
|
+ accountingSubjectCode: '',
|
|
|
+ accountingSubjectName: '',
|
|
|
+ sourceType: 1,
|
|
|
+ dateType: 1,
|
|
|
+ queryDimension: 1,
|
|
|
+ dateValue: '',
|
|
|
+ contactId: '',
|
|
|
+ contactName: '',
|
|
|
+ customerNo: '',
|
|
|
+ sourceName: '',
|
|
|
+ sourceId: '',
|
|
|
+ sourceCode: '',
|
|
|
+ type: '',
|
|
|
+ year: '',
|
|
|
+ quarter: '',
|
|
|
+ month: '',
|
|
|
+ dateTimeRange: [],
|
|
|
+ orderNo: '',
|
|
|
+ orderId: '',
|
|
|
+ id: '',
|
|
|
+ code: '',
|
|
|
+ startDate: '',
|
|
|
+ endDate: '',
|
|
|
+ repliedFiles: [],
|
|
|
+ // 发票信息
|
|
|
+ invoiceCode: '',
|
|
|
+ invoiceNos: '',
|
|
|
+ invoiceCategory: '',
|
|
|
+ // 应收信息
|
|
|
+ receivableDate: '',
|
|
|
+ receivableTotalPrice: '',
|
|
|
+ paymentType: '',
|
|
|
+ remark: '',
|
|
|
+ files: [],
|
|
|
+ fundType: 2,
|
|
|
+ transactionMethod: 1,
|
|
|
+ collectionTerms: '',
|
|
|
+ receiptStatus: 0,
|
|
|
+ totalAdvanceConfirmAmount: 0,
|
|
|
+ totalReceivableAmount: 0
|
|
|
+ });
|
|
|
|
|
|
export default {
|
|
|
name: 'addReceivableDialog',
|
|
|
@@ -220,7 +300,9 @@
|
|
|
AccountDetailTable,
|
|
|
ReceivableInfo,
|
|
|
AdvanceReceiptSelectDialog,
|
|
|
- saleForm
|
|
|
+ saleForm,
|
|
|
+ parentList,
|
|
|
+ tableInfo
|
|
|
},
|
|
|
//客户管理数据
|
|
|
props: {
|
|
|
@@ -254,37 +336,7 @@
|
|
|
accountingSubjectList: [],
|
|
|
isDetail: false,
|
|
|
statReceipt: null,
|
|
|
- dataForm: {
|
|
|
- accountingSubjectId: '',
|
|
|
- accountingSubjectCode: '',
|
|
|
- accountingSubjectName: '',
|
|
|
- sourceType: 1,
|
|
|
- dateType: 1,
|
|
|
- queryDimension: 1,
|
|
|
- dateValue: '',
|
|
|
- contactId: '',
|
|
|
- contactName: '',
|
|
|
- sourceName: '',
|
|
|
- sourceId: '',
|
|
|
- type: '',
|
|
|
- year: '',
|
|
|
- quarter: '',
|
|
|
- month: '',
|
|
|
- dateTimeRange: [],
|
|
|
- orderNo: '',
|
|
|
- orderId: '',
|
|
|
- id: '',
|
|
|
- startDate: '',
|
|
|
- endDate: '',
|
|
|
- repliedFiles: [],
|
|
|
- // 应收信息字段
|
|
|
- fundType: 2,
|
|
|
- transactionMethod: 1,
|
|
|
- collectionTerms: '',
|
|
|
- receiptStatus: 0,
|
|
|
- totalAdvanceConfirmAmount: 0,
|
|
|
- totalReceivableAmount: 0
|
|
|
- },
|
|
|
+ dataForm: getDefaultDataForm(),
|
|
|
rules: {
|
|
|
accountingSubjectId: { required: true, message: '请选择', trigger: 'change' },
|
|
|
receivableDate: { required: true, message: '请选择', trigger: 'change' },
|
|
|
@@ -313,19 +365,55 @@
|
|
|
title: '',
|
|
|
processSubmitDialogFlag: false,
|
|
|
dialogType: '',
|
|
|
- businessId: ''
|
|
|
+ businessId: '',
|
|
|
+ // 无来源应收:没有源单、没有对账明细
|
|
|
+ isManual: false,
|
|
|
+ // 无来源应收已收/已开票金额(新增时为 0,修改时取接口返回值)
|
|
|
+ savedAmount: {
|
|
|
+ receivedTotalPrice: 0,
|
|
|
+ invoiceAmount: 0
|
|
|
+ }
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
+ // 来源类型:手工新增的应收只能是「无来源」;其它场景是源单带出来的类型
|
|
|
+ sourceTypeOptions() {
|
|
|
+ const options = payAndReceiveEnum.map((item) =>
|
|
|
+ item.value === manualReceivableSourceType
|
|
|
+ ? { ...item, label: '无来源' }
|
|
|
+ : item
|
|
|
+ );
|
|
|
+ if (!this.isManual) return options;
|
|
|
+ return options.filter((item) => item.value === manualReceivableSourceType);
|
|
|
+ },
|
|
|
+ // 无来源应收没有源单带出客户,客户、款项类型必须手工填
|
|
|
+ formRules() {
|
|
|
+ if (!this.isManual) return this.rules;
|
|
|
+ return {
|
|
|
+ ...this.rules,
|
|
|
+ contactName: {
|
|
|
+ required: true,
|
|
|
+ message: '请选择公司名称',
|
|
|
+ trigger: 'change'
|
|
|
+ },
|
|
|
+ paymentType: {
|
|
|
+ required: true,
|
|
|
+ message: '请选择款项类型',
|
|
|
+ trigger: 'change'
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
// isNonDirectionalSale() {
|
|
|
// return this.datasource.some((item) => item.orderCategory == 4);
|
|
|
// }
|
|
|
},
|
|
|
methods: {
|
|
|
changeSubjectInfo(val) {
|
|
|
- const { code, name } = this.$refs.treeSelect.getNodeByValue(val);
|
|
|
- this.dataForm.accountingSubjectCode = code;
|
|
|
- this.dataForm.accountingSubjectName = name;
|
|
|
+ // ele-tree-select 不会派发 el.form.change,表单不会自动重新校验,这里手动触发一次
|
|
|
+ const node = this.$refs.treeSelect?.getNodeByValue?.(val) || {};
|
|
|
+ this.dataForm.accountingSubjectCode = node.code || '';
|
|
|
+ this.dataForm.accountingSubjectName = node.name || '';
|
|
|
+ this.$refs.form && this.$refs.form.validateField('accountingSubjectId');
|
|
|
},
|
|
|
//获取分类管理中的数据
|
|
|
async getClassifyList(id, listName) {
|
|
|
@@ -359,8 +447,62 @@
|
|
|
const item = (this.paymentTypeOp || []).find((i) => i.value === val);
|
|
|
return item ? item.label : val != null && val !== '' ? String(val) : '';
|
|
|
},
|
|
|
- async open(dialogType, row, type = '') {
|
|
|
+ // 选择客户(无来源应收)
|
|
|
+ changeParent(obj = {}) {
|
|
|
+ this.dataForm.contactName = obj.name || '';
|
|
|
+ this.dataForm.contactId = obj.id || '';
|
|
|
+ this.dataForm.customerNo = obj.code || '';
|
|
|
+ },
|
|
|
+ // 产品明细合计 -> 应收金额(无来源应收的应收金额由明细算出来)
|
|
|
+ setReceivableTotalPrice(val) {
|
|
|
+ this.dataForm.receivableTotalPrice = val;
|
|
|
+ },
|
|
|
+ // 无来源应收的产品明细(提交用)
|
|
|
+ getProductList() {
|
|
|
+ return this.$refs.productTableRef?.getDetailList?.() || [];
|
|
|
+ },
|
|
|
+ // 按名称在会计科目树里找节点
|
|
|
+ findSubjectNodes(list, name, result = []) {
|
|
|
+ for (let item of list || []) {
|
|
|
+ if (item.name === name) result.push(item);
|
|
|
+ this.findSubjectNodes(item.children, name, result);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ },
|
|
|
+ // 按科目编码在会计科目树里找节点
|
|
|
+ findSubjectByCode(list, code) {
|
|
|
+ for (let item of list || []) {
|
|
|
+ if (item.code == code) return item;
|
|
|
+ const child = this.findSubjectByCode(item.children, code);
|
|
|
+ if (child) return child;
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ },
|
|
|
+ // 默认会计科目:应收账款
|
|
|
+ setDefaultSubject() {
|
|
|
+ const nodes = this.findSubjectNodes(
|
|
|
+ this.accountingSubjectList,
|
|
|
+ '应收账款'
|
|
|
+ );
|
|
|
+ // 同名优先取编码为 1122 的节点
|
|
|
+ let subject = nodes.find((item) => item.code == '1122') || nodes[0];
|
|
|
+ // 名称对不上时退而按科目编码 1122(应收账款)找
|
|
|
+ if (!subject) {
|
|
|
+ subject = this.findSubjectByCode(this.accountingSubjectList, '1122');
|
|
|
+ }
|
|
|
+ if (!subject) {
|
|
|
+ console.warn('未找到会计科目「应收账款」,请手工选择');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ this.dataForm.accountingSubjectId = subject.id;
|
|
|
+ this.dataForm.accountingSubjectCode = subject.code;
|
|
|
+ this.dataForm.accountingSubjectName = subject.name;
|
|
|
+ },
|
|
|
+ // open(dialogType, row, manual)
|
|
|
+ // manual=true 时为「无来源应收」:没有源单、没有对账明细,不需要应收信息
|
|
|
+ async open(dialogType, row = {}, type = '', manual = false) {
|
|
|
this.dialogType = dialogType;
|
|
|
+ this.isManual = manual;
|
|
|
this.title =
|
|
|
dialogType == 'add'
|
|
|
? '新增'
|
|
|
@@ -377,9 +519,40 @@
|
|
|
// this.$refs.saleFormRef.getOrderInfo(this.saleOrderData);
|
|
|
// }
|
|
|
// });
|
|
|
- if (this.dialogType !== 'add') {
|
|
|
+ if (this.isManual) {
|
|
|
+ // 无来源应收:没有对账单初始化信息
|
|
|
+ this.statReceipt = null;
|
|
|
+ this.receivableList = [];
|
|
|
+ this.datasource = [];
|
|
|
+ this.savedAmount = { receivedTotalPrice: 0, invoiceAmount: 0 };
|
|
|
+ this.dataForm = getDefaultDataForm();
|
|
|
+ if (dialogType == 'update' && row.id) {
|
|
|
+ this.businessId = row.id;
|
|
|
+ await this.getInfo(row);
|
|
|
+ // 回填产品明细(静默:不改已保存的应收金额,用户改明细时才重算)
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.productTableRef?.setDetailList(this.datasource || [], true);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ this.businessId = '';
|
|
|
+ this.dataForm.sourceType = manualReceivableSourceType;
|
|
|
+ // 会计科目默认应收账款
|
|
|
+ this.setDefaultSubject();
|
|
|
+ }
|
|
|
+ // 打开时清掉上一次的校验提示
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.form && this.$refs.form.clearValidate();
|
|
|
+ });
|
|
|
+ } else if (this.dialogType !== 'add') {
|
|
|
this.businessId = row.id;
|
|
|
- this.getInfo(row);
|
|
|
+ await this.getInfo(row);
|
|
|
+ // 没有对账单的就是手工新增的(来源类型可能被改成了别的,按有没有对账单判断)
|
|
|
+ if (!this.statReceipt && !this.receivableList.length) {
|
|
|
+ this.isManual = true;
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.form && this.$refs.form.clearValidate();
|
|
|
+ });
|
|
|
+ }
|
|
|
} else {
|
|
|
let data = await getFinReceivableInitInfoAPI({
|
|
|
statementId: row.id
|
|
|
@@ -417,7 +590,14 @@
|
|
|
this.dataForm = {
|
|
|
...this.dataForm,
|
|
|
...data,
|
|
|
- invoiceCategory: Number(data?.invoiceCategory) || ""
|
|
|
+ invoiceCategory: Number(data?.invoiceCategory) || "",
|
|
|
+ // 无来源应收不带源单(来源类型/来源编码是手工填的,保留原值)
|
|
|
+ ...(this.isManual ? { sourceId: '' } : {})
|
|
|
+ };
|
|
|
+
|
|
|
+ this.savedAmount = {
|
|
|
+ receivedTotalPrice: +data?.receivedTotalPrice || 0,
|
|
|
+ invoiceAmount: +data?.invoiceAmount || 0
|
|
|
};
|
|
|
|
|
|
this.statReceipt = data.statReceipt || null;
|
|
|
@@ -572,13 +752,30 @@
|
|
|
},
|
|
|
//保存
|
|
|
async save(is) {
|
|
|
- if (!this.datasource.length)
|
|
|
+ if (!this.isManual && !this.datasource.length)
|
|
|
return this.$message.warning('暂无对账信息');
|
|
|
|
|
|
+ if (this.isManual) {
|
|
|
+ // 无来源应收:基本信息必填项校验(原来的校验只覆盖明细表和应收信息)
|
|
|
+ const valid = await this.$refs.form.validate().catch(() => false);
|
|
|
+ if (!valid) return;
|
|
|
+ // 产品明细:至少一行,且数量/折让比例等行内校验要过
|
|
|
+ const tableRef = this.$refs.productTableRef;
|
|
|
+ if (tableRef) {
|
|
|
+ const detailValid = await new Promise((resolve) => tableRef.validateForm(resolve));
|
|
|
+ if (!detailValid) return;
|
|
|
+ if (!this.getProductList().length) {
|
|
|
+ return this.$message.warning('请添加产品明细');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
try {
|
|
|
- // 校验明细表与应收信息表单
|
|
|
- await this.$refs.accountDetailTableRef.getValidForm();
|
|
|
- await this.$refs.receivableInfoRef.validate();
|
|
|
+ if (!this.isManual) {
|
|
|
+ // 校验明细表与应收信息表单(无来源应收没有这两块)
|
|
|
+ await this.$refs.accountDetailTableRef.getValidForm();
|
|
|
+ await this.$refs.receivableInfoRef.validate();
|
|
|
+ }
|
|
|
console.log(this.dialogType, 'this.dialogType~~~');
|
|
|
let api =
|
|
|
this.dialogType == 'add'
|
|
|
@@ -604,6 +801,28 @@
|
|
|
statReceipt: this.statReceipt
|
|
|
// recorpayList: this.recorpayList
|
|
|
};
|
|
|
+ if (this.isManual) {
|
|
|
+ // 无来源应收:不挂源单、不带对账单,明细是手工录入的产品列表
|
|
|
+ // 来源类型固定「无来源」,来源编码由接口带出、不可填
|
|
|
+ const receivableTotalPrice = +this.dataForm.receivableTotalPrice || 0;
|
|
|
+ // 已收/已开票:新增时是 0,修改时沿用接口返回值
|
|
|
+ const receivedTotalPrice = this.savedAmount.receivedTotalPrice;
|
|
|
+ const invoiceAmount = this.savedAmount.invoiceAmount;
|
|
|
+ params = {
|
|
|
+ ...params,
|
|
|
+ sourceType: manualReceivableSourceType,
|
|
|
+ sourceId: '',
|
|
|
+ productList: this.getProductList(),
|
|
|
+ statReceipt: null,
|
|
|
+ receivableTotalPrice,
|
|
|
+ receivedTotalPrice,
|
|
|
+ invoiceAmount,
|
|
|
+ // 未收金额 = 应收金额 - 已收金额
|
|
|
+ unreceiveTotalPrice: receivableTotalPrice - receivedTotalPrice,
|
|
|
+ // 未开票金额 = 应收金额 - 已开票金额
|
|
|
+ unInvoiceAmount: receivableTotalPrice - invoiceAmount
|
|
|
+ };
|
|
|
+ }
|
|
|
this.saveLoading = true;
|
|
|
let data = await api(params);
|
|
|
if (is == 'sub') {
|