From 3da2d428f3b49fd24dc3c027a3658ee6fad5b1f7 Mon Sep 17 00:00:00 2001
From: b2894lxlx <517289602@qq.com>
Date: Tue, 25 Aug 2026 22:35:50 +0800
Subject: [PATCH] fix bug
---
src/api/settlement/formalSettlement.js | 3 +-
.../settlement/formalSettlementTable.js | 6 +-
.../settlement/receivable-payable-detail.js | 7 +-
.../settlement/settlementAdjustmentForm.js | 1 +
.../components/formal-settlement-editor.vue | 333 ++++++++++++--
.../formal-settlement-table-panel.vue | 37 +-
.../components/pre-settlement-editor.vue | 14 +-
.../settlement-adjustment-editor.vue | 157 ++++++-
src/views/settlement/formal-settlement.vue | 19 +
src/views/settlement/pre-settlement.vue | 24 +-
.../settlement/receivable-payable-detail.vue | 412 ++++++++++++++----
11 files changed, 883 insertions(+), 130 deletions(-)
diff --git a/src/api/settlement/formalSettlement.js b/src/api/settlement/formalSettlement.js
index 42e47f3..cfb5267 100644
--- a/src/api/settlement/formalSettlement.js
+++ b/src/api/settlement/formalSettlement.js
@@ -13,7 +13,8 @@ export const getCandidates = (current, size, params) =>
});
export const getContractOptions = (keyword, projectId) =>
request({ url: `${baseUrl}/contract-options`, method: 'get', params: { keyword, projectId } });
-export const getNextNo = () => request({ url: `${baseUrl}/next-no`, method: 'get' });
+export const getNextNo = settlementType =>
+ request({ url: `${baseUrl}/next-no`, method: 'get', params: { settlementType } });
export const getFeeOptions = () => request({ url: `${baseUrl}/fee-options`, method: 'get' });
export const getCandidateDetails = (current, size, params) =>
request({
diff --git a/src/option/settlement/formalSettlementTable.js b/src/option/settlement/formalSettlementTable.js
index dc8c79e..c3562c2 100644
--- a/src/option/settlement/formalSettlementTable.js
+++ b/src/option/settlement/formalSettlementTable.js
@@ -1,6 +1,5 @@
export const formalSettlementTableColumns = [
{ label: '结算单号', prop: 'formalSettlementNo', minWidth: 160, link: true, fixed: 'left' },
- { label: '预结算单号', prop: 'preSettlementNos', minWidth: 190 },
{ label: '来源', prop: 'sourceType', minWidth: 110 },
{ label: '付款方', prop: 'payerName', minWidth: 150 },
{ label: '收款方', prop: 'payeeName', minWidth: 150 },
@@ -12,13 +11,16 @@ export const formalSettlementTableColumns = [
{ label: '本位币结算金额', prop: 'localSettlementAmount', minWidth: 155, money: true },
{ label: '结算汇率', prop: 'exchangeRate', minWidth: 110 },
{ label: '申请付款金额(含预付)', prop: 'appliedPaymentAmount', minWidth: 185, money: true },
- { label: '已收/已付合计', prop: 'paidAmount', minWidth: 145, money: true },
+ { label: '已收/已付合计(含预付)', prop: 'paidAmount', minWidth: 200, money: true },
+ { label: '剩余可付金额', prop: 'remainingPayableAmount', minWidth: 145, money: true },
+ { label: '发票金额', prop: 'invoiceAmount', minWidth: 130, money: true },
{ label: '发票状态', prop: 'invoiceStatusName', minWidth: 120 },
{ label: '收付款状态', prop: 'paymentStatusName', minWidth: 120 },
{ label: '审核状态', prop: 'approvalStatusName', minWidth: 110, status: true },
{ label: '当前节点', prop: 'currentNode', minWidth: 130 },
{ label: '当前处理人', prop: 'currentProcessor', minWidth: 130 },
{ label: '金蝶单据号', prop: 'kingdeeBillNo', minWidth: 150 },
+ { label: '金蝶单据状态', prop: 'kingdeeSyncStatus', minWidth: 135 },
{ label: '创建人', prop: 'createUserName', minWidth: 110 },
{ label: '创建时间', prop: 'createTime', minWidth: 170 },
];
diff --git a/src/option/settlement/receivable-payable-detail.js b/src/option/settlement/receivable-payable-detail.js
index 30b8557..9a5c212 100644
--- a/src/option/settlement/receivable-payable-detail.js
+++ b/src/option/settlement/receivable-payable-detail.js
@@ -57,14 +57,13 @@ export const feeDetailBaseColumns = [
{ label: '货物类型', prop: 'cargoType', minWidth: 130 },
{ label: '规格', prop: 'specification', minWidth: 120 },
{ label: '型号', prop: 'model', minWidth: 120 },
- { label: '运费计费要素', prop: 'billingFactor', minWidth: 130 },
- { label: '运费计费类型', prop: 'billingType', minWidth: 130 },
+ { label: '计费要素', prop: 'billingFactor', minWidth: 130 },
+ { label: '计费类型', prop: 'billingType', minWidth: 130 },
{ label: '运输量', prop: 'transportQuantityText', minWidth: 120 },
{ label: '运费计算单位', prop: 'priceUnit', minWidth: 130 },
{ label: '运输单价', prop: 'unitPrice', minWidth: 120 },
{ label: '里程(KM)', prop: 'mileage', minWidth: 120 },
- { label: '运输费', prop: 'freightAmount', minWidth: 180 }
-
+ { label: '运输费', prop: 'freightAmount', minWidth: 180 },
];
export const feeDetailTailColumns = [
diff --git a/src/option/settlement/settlementAdjustmentForm.js b/src/option/settlement/settlementAdjustmentForm.js
index 3755185..30cd4bf 100644
--- a/src/option/settlement/settlementAdjustmentForm.js
+++ b/src/option/settlement/settlementAdjustmentForm.js
@@ -24,5 +24,6 @@ export const createSettlementAdjustmentForm = () => ({
adjustmentAmount: 0,
originalSettlementAmount: 0,
adjustedSettlementAmount: 0,
+ attachmentsJson: '[]',
remark: '',
});
diff --git a/src/views/settlement/components/formal-settlement-editor.vue b/src/views/settlement/components/formal-settlement-editor.vue
index 1fa376a..ffebc64 100644
--- a/src/views/settlement/components/formal-settlement-editor.vue
+++ b/src/views/settlement/components/formal-settlement-editor.vue
@@ -136,6 +136,9 @@
-
+
{{ formatMoney(row[column.prop]) }}
{{ feeCategoryName(row.feeType) }}
@@ -214,6 +223,9 @@
>
{{ formatMoney(row[column.prop]) }}
+
+ {{ transportTypeName(row[column.prop]) }}
+
{{ displayValue(row[column.prop]) }}
@@ -232,15 +244,79 @@
-
-
+
+
+ 附件
+
+ {{ missingAttachmentTypeText }}
+
+
+
+
+
+
+
+
+
+ {{ attachmentTypeName(row.type) }}
+
+
+
+
+
+ {{ row.originalName || row.name || '-' }}
+
+
+
+
+
+ {{ displayValue(row.uploadUserName) }}
+
+
+
+
+ {{ displayValue(row.uploadTime) }}
+
+
+
+
+ {{ displayValue(row.size) }}
+
+
+
+
+ 删除
+
+
+
+
+
+
@@ -313,10 +389,13 @@
v-bind="column"
align="center"
>
- {{ formatMoney(row[column.prop]) }}{{ displayValue(row[column.prop]) }}
+
+ {{ formatMoney(row[column.prop]) }}
+
+ {{ transportTypeName(row[column.prop]) }}
+
+ {{ displayValue(row[column.prop]) }}
+
取消 String(row.id) === String(id));
if (!item) return;
- Object.assign(this.form, item, {
- formalSettlementId: id,
+ const { id: formalSettlementId, ...formalSettlement } = item;
+ Object.assign(this.form, formalSettlement, {
+ formalSettlementId,
formalSettlementNo: item.formalSettlementNo,
originalSettlementAmount: Number(item.settlementAmount || 0),
settlementTypeName: item.settlementTypeName,
@@ -321,8 +395,9 @@ export default {
this.saving = true;
try {
await api.save({
- id: this.form.id,
+ ...(this.recordId ? { id: this.form.id } : {}),
formalSettlementId: this.form.formalSettlementId,
+ attachmentsJson: JSON.stringify(this.attachments || []),
remark: this.form.remark,
details: this.details.map(item => ({
formalSettlementDetailId: item.formalSettlementDetailId,
@@ -347,15 +422,77 @@ export default {
formatMoney(value) {
return Number(value || 0).toFixed(2);
},
+ handleAttachmentChange(files) {
+ const userInfo = this.$store.getters.userInfo || {};
+ const uploadUserName = userInfo.realName || userInfo.userName || '';
+ const uploadTime = this.$dayjs().format('YYYY-MM-DD HH:mm:ss');
+ this.attachments = (files || []).map(file => ({
+ ...file,
+ description: file.description || '',
+ uploadUserName: file.uploadUserName || uploadUserName,
+ uploadTime: file.uploadTime || uploadTime,
+ }));
+ },
+ parseAttachments(value) {
+ if (!value) return [];
+ if (Array.isArray(value)) return value;
+ try {
+ const parsed = JSON.parse(value);
+ return Array.isArray(parsed) ? parsed : [];
+ } catch (error) {
+ return [];
+ }
+ },
+ attachmentName(file = {}) {
+ return file.originalName || file.name || file.fileName || '附件';
+ },
+ attachmentUrl(file = {}) {
+ return file.url || file.link || file.fileUrl || file.domain || '';
+ },
+ formatFileSize(file = {}) {
+ const bytes = Number(file.size || file.fileSize || file.attachSize || 0);
+ if (!bytes) return '-';
+ if (bytes < 1024) return `${bytes}B`;
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}KB`;
+ return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
+ },
+ previewAttachment(file) {
+ this.$refs.attachmentUploadRef?.handlePreview(file);
+ },
+ downloadAttachment(file) {
+ const url = this.attachmentUrl(file);
+ if (!url) {
+ this.$message.warning('附件地址为空');
+ return;
+ }
+ downloadFileByUrl(url, this.attachmentName(file));
+ },
+ removeAttachment(index) {
+ this.attachments.splice(index, 1);
+ },
},
};