| src/views/procurementManagement/paymentLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/procurementLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/procurementReport/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/procurementManagement/purchaseReturnOrder/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/reportAnalysis/qualityAnalysis/components/right-top.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/receiptPayment/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/receiptPaymentLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/salesManagement/salesLedger/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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; }; 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"> 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' 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"> 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> 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) => ({ 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"> 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) { 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 ); // 回款金额正常求和 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> 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="入库状态:">