From abb6d7f841c9a0fcd4ca2e1f9b5caaf849b40482 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 24 四月 2026 11:07:08 +0800
Subject: [PATCH] Merge branch 'dev_河南_鹤壁天沐玻璃厂' of http://114.132.189.42:9002/r/product-inventory-management into dev_河南_鹤壁天沐玻璃厂
---
src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue | 2
src/views/procurementManagement/procurementLedger/index.vue | 4
src/views/procurementManagement/procurementReport/index.vue | 34 ++++----
src/views/salesManagement/receiptPayment/index.vue | 8 +
src/views/reportAnalysis/qualityAnalysis/components/right-top.vue | 2
src/views/salesManagement/receiptPaymentLedger/index.vue | 117 +++++++++++++++++++++-------
src/views/procurementManagement/purchaseReturnOrder/index.vue | 2
src/views/salesManagement/salesLedger/index.vue | 4
src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue | 8 +-
src/views/procurementManagement/paymentLedger/index.vue | 33 +++++++-
10 files changed, 150 insertions(+), 64 deletions(-)
diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index f86e188..e707d08 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -195,6 +195,14 @@
const n = Number(v);
return Number.isFinite(n) ? n : 0;
};
+ const toTime = (v) => {
+ const t = new Date(v).getTime();
+ return Number.isFinite(t) ? t : -Infinity;
+ };
+ const toId = (v) => {
+ const n = Number(v);
+ return Number.isFinite(n) ? n : -Infinity;
+ };
// 浠ュ綋鍓嶅彸渚ц〃鏍煎睍绀虹殑鏁版嵁涓哄噯锛堝垎椤� slice 鍚庣殑鏁版嵁锛�
const rows = originalTableDataSon.value || [];
@@ -214,6 +222,25 @@
);
const paymentTotal = rows.reduce((sum, r) => sum + toNum(r?.paymentAmount), 0);
+ const latestRowByContract = new Map();
+ for (const r of rows) {
+ const contractNo = r?.purchaseContractNumber;
+ if (!contractNo) continue;
+ const existed = latestRowByContract.get(contractNo);
+ const currentTime = toTime(r?.paymentDate);
+ const existedTime = toTime(existed?.paymentDate);
+ const shouldReplace =
+ !existed ||
+ currentTime > existedTime ||
+ (currentTime === existedTime && toId(r?.id) > toId(existed?.id));
+ if (shouldReplace) {
+ latestRowByContract.set(contractNo, r);
+ }
+ }
+ const payableTotal = Array.from(latestRowByContract.values()).reduce(
+ (sum, r) => sum + toNum(r?.payableAmount),
+ 0
+ );
const columns = param?.columns || [];
const summary = columns.map((col, idx) => {
@@ -221,13 +248,9 @@
const prop = col?.property ?? col?.prop;
if (prop === "invoiceAmount") return invoiceTotal.toFixed(2);
if (prop === "paymentAmount") return paymentTotal.toFixed(2);
+ if (prop === "payableAmount") return payableTotal.toFixed(2);
return "";
});
-
- if (summary.length > 0) {
- summary[summary.length - 1] =
- rows.length > 0 ? toNum(rows[rows.length - 1]?.payableAmount).toFixed(2) : "0.00";
- }
return summary;
};
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 0355e45..525c41c 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -108,8 +108,8 @@
prop="quantity" />
<el-table-column label="鍙敤鏁伴噺"
prop="availableQuality" />
- <el-table-column label="閫�璐ф暟閲�"
- prop="returnQuality" />
+ <!-- <el-table-column label="閫�璐ф暟閲�"
+ prop="returnQuality" /> -->
<el-table-column label="鍏ュ簱鐘舵��"
width="100px"
align="center">
diff --git a/src/views/procurementManagement/procurementReport/index.vue b/src/views/procurementManagement/procurementReport/index.vue
index 182e164..225e38d 100644
--- a/src/views/procurementManagement/procurementReport/index.vue
+++ b/src/views/procurementManagement/procurementReport/index.vue
@@ -127,24 +127,24 @@
return val ? parseFloat(val).toLocaleString() : '0'
}
},
+ // {
+ // label: '閫�璐ф暟閲�',
+ // prop: 'returnQuantity',
+ // width: 120,
+ // formatData: (val) => {
+ // return val ? parseFloat(val).toLocaleString() : '0'
+ // }
+ // },
+ // {
+ // label: '閫�璐ч噾棰�',
+ // prop: 'returnAmount',
+ // width: 120,
+ // formatData: (val) => {
+ // return val ? `楼${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '楼0.00'
+ // }
+ // },
{
- label: '閫�璐ф暟閲�',
- prop: 'returnQuantity',
- width: 120,
- formatData: (val) => {
- return val ? parseFloat(val).toLocaleString() : '0'
- }
- },
- {
- label: '閫�璐ч噾棰�',
- prop: 'returnAmount',
- width: 120,
- formatData: (val) => {
- return val ? `楼${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '楼0.00'
- }
- },
- {
- label: '閫�娆惧偍閲�',
+ label: '璐拱閲戦',
prop: 'purchaseAmount',
formatData: (val) => {
return val ? `楼${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '楼0.00'
diff --git a/src/views/procurementManagement/purchaseReturnOrder/index.vue b/src/views/procurementManagement/purchaseReturnOrder/index.vue
index 8de2877..70ca2b1 100644
--- a/src/views/procurementManagement/purchaseReturnOrder/index.vue
+++ b/src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -82,7 +82,7 @@
<el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" min-width="140" show-overflow-tooltip />
<el-table-column label="鍗曚綅" prop="unit" width="80" />
<el-table-column label="鏁伴噺" prop="quantity" width="80" />
- <el-table-column label="閫�璐ф暟閲�" prop="returnQuantity" width="100" />
+ <!-- <el-table-column label="閫�璐ф暟閲�" prop="returnQuantity" width="100" /> -->
<el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" width="120" />
<el-table-column label="绋庣巼(%)" prop="taxRate" width="90" />
<el-table-column label="鍚◣鍗曚环(鍏�)" prop="taxInclusiveUnitPrice" width="130">
diff --git a/src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue b/src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue
index 113ee12..5d7863f 100644
--- a/src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue
+++ b/src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue
@@ -21,12 +21,12 @@
<div class="card-content">
<span class="card-label">瀹㈡埛鎬绘暟</span>
<span class="card-value">{{ totalCustomers }}</span>
- <div class="card-compare"
+ <!-- <div class="card-compare"
:class="compareClass(customersYoY)">
<span>鍚屾瘮</span>
<span class="compare-value">{{ formatPercent(customersYoY) }}</span>
<span class="compare-icon">{{ customersYoY >= 0 ? '鈫�' : '鈫�' }}</span>
- </div>
+ </div> -->
</div>
</div>
<div class="stat-card">
@@ -36,12 +36,12 @@
<div class="card-content">
<span class="card-label">渚涘簲鍟嗘�绘暟</span>
<span class="card-value">{{ totalSuppliers }}</span>
- <div class="card-compare"
+ <!-- <div class="card-compare"
:class="compareClass(suppliersYoY)">
<span>鍚屾瘮</span>
<span class="compare-value">{{ formatPercent(suppliersYoY) }}</span>
<span class="compare-icon">{{ suppliersYoY >= 0 ? '鈫�' : '鈫�' }}</span>
- </div>
+ </div> -->
</div>
</div>
</div>
diff --git a/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue b/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
index da736e1..3c5df33 100644
--- a/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
+++ b/src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
@@ -163,7 +163,7 @@
const fetchCustomerOptions = async () => {
try {
- const params = { pageNum: 1, pageSize: 200 }
+ const params = { current: -1, size: -1 }
const res = await listCustomer(params)
const records = res?.records || res?.data?.records || res?.rows || []
customerOptions.value = records.map((r) => ({
diff --git a/src/views/reportAnalysis/qualityAnalysis/components/right-top.vue b/src/views/reportAnalysis/qualityAnalysis/components/right-top.vue
index 890e99a..7120c3a 100644
--- a/src/views/reportAnalysis/qualityAnalysis/components/right-top.vue
+++ b/src/views/reportAnalysis/qualityAnalysis/components/right-top.vue
@@ -1,6 +1,6 @@
<template>
<div>
- <PanelHeader title="涓嶅悎鏍间骇鍝佹帓鍚�" />
+ <PanelHeader title="鍚堟牸浜у搧鎺掑悕" />
<div class="main-panel panel-item-customers">
<div class="main-panel-container">
<div style="color: white" class="main-panel-box" v-for="(item, index) in panelList" :key="index">
diff --git a/src/views/salesManagement/receiptPayment/index.vue b/src/views/salesManagement/receiptPayment/index.vue
index b56abd6..1354591 100644
--- a/src/views/salesManagement/receiptPayment/index.vue
+++ b/src/views/salesManagement/receiptPayment/index.vue
@@ -204,6 +204,8 @@
border
style="width: 100%"
size="small"
+ show-summary
+ :summary-method="summarizeFormTable"
>
<el-table-column type="index" label="搴忓彿" width="50" align="center"/>
<el-table-column label="閿�鍞悎鍚屽彿" prop="salesContractNo" show-overflow-tooltip />
@@ -403,7 +405,7 @@
const summarizeMainTable = (param) => {
return proxy.summarizeTable(
param,
- ["receiptPaymentAmountTotal", "noReceiptAmount"],
+ ["invoiceTotal", "pendingInvoiceTotal"],
{
ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
@@ -414,6 +416,10 @@
const summarizeChildrenTable = (param) => {
return proxy.summarizeTable(param, ["receiptPaymentAmount"]);
};
+// 鏂板鍥炴寮圭獥琛ㄥ悎璁℃柟娉�
+const summarizeFormTable = (param) => {
+ return proxy.summarizeTable(param, ["pendingInvoiceTotal", "receiptPaymentAmount"]);
+};
// 鎵撳紑寮规
const openForm = () => {
if (selectedRows.value.length === 0) {
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index 7029cfc..f2b148f 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -16,7 +16,7 @@
>
</div>
</div>
- <div style="display: flex">
+ <div class="ledger-content">
<div class="table_list">
<el-table
:data="tableData"
@@ -27,38 +27,39 @@
:summary-method="summarizeMainTable"
@row-click="rowClickMethod"
height="calc(100vh - 18.5em)"
+ style="width: 100%"
>
<el-table-column
align="center"
label="搴忓彿"
type="index"
- width="60"
+ min-width="60"
/>
<el-table-column
label="瀹㈡埛鍚嶇О"
prop="customerName"
show-overflow-tooltip
- width="200"
+ min-width="200"
/>
<el-table-column
label="鍚堝悓閲戦(鍏�)"
prop="invoiceTotal"
show-overflow-tooltip
:formatter="formattedNumber"
- width="200"
+ min-width="200"
/>
<el-table-column
label="鍥炴閲戦(鍏�)"
prop="receiptPaymentAmount"
show-overflow-tooltip
:formatter="formattedNumber"
- width="200"
+ min-width="200"
/>
<el-table-column
label="搴旀敹閲戦(鍏�)"
prop="unReceiptPaymentAmount"
show-overflow-tooltip
- width="200"
+ min-width="200"
>
<template #default="{ row, column }">
<el-text type="danger">
@@ -84,44 +85,45 @@
show-summary
:summary-method="summarizeMainTable1"
height="calc(100vh - 18.5em)"
+ style="width: 100%"
>
<el-table-column
align="center"
label="搴忓彿"
type="index"
- width="60"
+ min-width="60"
/>
<el-table-column
label="鍙戠敓鏃ユ湡"
prop="receiptPaymentDate"
show-overflow-tooltip
- width="110"
+ min-width="110"
/>
<el-table-column
label="閿�鍞悎鍚屽彿"
prop="salesContractNo"
show-overflow-tooltip
- width="200"
+ min-width="200"
/>
<el-table-column
label="鍚堝悓閲戦(鍏�)"
prop="invoiceTotal"
show-overflow-tooltip
:formatter="formattedNumber"
- width="200"
+ min-width="200"
/>
<el-table-column
label="鍥炴閲戦(鍏�)"
prop="receiptPaymentAmount"
show-overflow-tooltip
:formatter="formattedNumber"
- width="200"
+ min-width="200"
/>
<el-table-column
label="搴旀敹閲戦(鍏�)"
prop="unReceiptPaymentAmount"
show-overflow-tooltip
- width="200"
+ min-width="200"
>
<template #default="{ row, column }">
<el-text type="danger">
@@ -188,7 +190,8 @@
});
};
const formattedNumber = (row, column, cellValue) => {
- return parseFloat(cellValue).toFixed(2);
+ const num = Number(cellValue);
+ return Number.isFinite(num) ? num.toFixed(2) : "0.00";
};
// 涓昏〃鍚堣鏂规硶
const summarizeMainTable = (param) => {
@@ -203,25 +206,71 @@
};
// 瀛愯〃鍚堣鏂规硶
const summarizeMainTable1 = (param) => {
- var summarizeTable = proxy.summarizeTable(
- param,
- ["invoiceAmount", "receiptAmount", "unReceiptAmount"],
- {
- ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
- futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ const toNum = (v) => {
+ const n = Number(v);
+ return Number.isFinite(n) ? n : 0;
+ };
+ const toTime = (v) => {
+ const t = new Date(v).getTime();
+ return Number.isFinite(t) ? t : -Infinity;
+ };
+ const toId = (v) => {
+ const n = Number(v);
+ return Number.isFinite(n) ? n : -Infinity;
+ };
+
+ // 浠ュ彸渚у綋鍓嶅睍绀烘暟鎹负鍑�
+ const rows = receiptRecord.value || [];
+
+ // 鍚堝悓閲戦鎸夐攢鍞悎鍚屽彿鍘婚噸
+ const invoiceByContract = new Map();
+ for (const row of rows) {
+ const contractNo = row?.salesContractNo;
+ if (!contractNo) continue;
+ if (!invoiceByContract.has(contractNo)) {
+ invoiceByContract.set(contractNo, toNum(row?.invoiceTotal));
}
- );
- // 鍙栨渶鍚庝竴琛屾暟鎹�;
- if (receiptRecord.value?.length > 0) {
- const index = tableData.value.findIndex(
- (item) => item.id == customerId.value
- );
- summarizeTable[summarizeTable.length - 1] =
- tableData.value[index].unReceiptPaymentAmount.toFixed(2);
- } else {
- summarizeTable[summarizeTable.length - 1] = 0.0;
}
- return summarizeTable;
+ const invoiceTotal = Array.from(invoiceByContract.values()).reduce(
+ (sum, val) => sum + val,
+ 0
+ );
+
+ // 鍥炴閲戦姝e父姹傚拰
+ const receiptTotal = rows.reduce(
+ (sum, row) => sum + toNum(row?.receiptPaymentAmount),
+ 0
+ );
+
+ const latestRowByContract = new Map();
+ for (const row of rows) {
+ const contractNo = row?.salesContractNo;
+ if (!contractNo) continue;
+ const existed = latestRowByContract.get(contractNo);
+ const currentTime = toTime(row?.receiptPaymentDate);
+ const existedTime = toTime(existed?.receiptPaymentDate);
+ const shouldReplace =
+ !existed ||
+ currentTime > existedTime ||
+ (currentTime === existedTime && toId(row?.id) > toId(existed?.id));
+ if (shouldReplace) {
+ latestRowByContract.set(contractNo, row);
+ }
+ }
+ const unReceiptTotal = Array.from(latestRowByContract.values()).reduce(
+ (sum, row) => sum + toNum(row?.unReceiptPaymentAmount),
+ 0
+ );
+
+ const columns = param?.columns || [];
+ return columns.map((column, index) => {
+ if (index === 0) return "鍚堣";
+ const prop = column?.property ?? column?.prop;
+ if (prop === "invoiceTotal") return invoiceTotal.toFixed(2);
+ if (prop === "receiptPaymentAmount") return receiptTotal.toFixed(2);
+ if (prop === "unReceiptPaymentAmount") return unReceiptTotal.toFixed(2);
+ return "";
+ });
};
const receiptPaymentList = (id) => {
@@ -262,7 +311,13 @@
</script>
<style scoped lang="scss">
+.ledger-content {
+ display: flex;
+ gap: 12px;
+}
+
.table_list {
- width: 50%;
+ flex: 1;
+ min-width: 0;
}
</style>
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index e9b1ff9..e4206ad 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -66,8 +66,10 @@
:value="2" />
<el-option label="瀹℃壒澶辫触"
:value="3" />
- <el-option label="宸插彂璐�"
+ <el-option label="瀹℃壒閫氳繃"
:value="4" />
+ <el-option label="宸插彂璐�"
+ :value="5" />
</el-select>
</el-form-item>
<el-form-item label="鍏ュ簱鐘舵�侊細">
--
Gitblit v1.9.3