From ceb54e29ecfdd135c8575523c0aff4e995864ad9 Mon Sep 17 00:00:00 2001 From: mac Date: Fri, 10 Jul 2026 19:11:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B1=95=E5=BC=80=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=9C=88=E4=BB=BD+tab=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E6=80=81+=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F+=E5=B7=B2?= =?UTF-8?q?=E5=8F=91=E7=94=9F=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 展开明细合并budget_data和expense_data月份(修复只有费用没预算时看不到) - switchFinanceTab选择器限定#financeModal(修复弹窗tab误伤顶部筛选tab) - 项目管理表格默认按确收金额从高到低排序 - 执行→已发生, tip改淡黄色 - 登录后默认选权限范围内第一个工作台 - 版本号 v1.2.0.10 --- static/modules/finance.js | 27 ++++++++++++++++++--------- static/modules/plan.js | 25 +++++++++++++++++-------- templates/index.html | 2 +- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/static/modules/finance.js b/static/modules/finance.js index fff76df..8e54db1 100644 --- a/static/modules/finance.js +++ b/static/modules/finance.js @@ -266,10 +266,14 @@ function renderFinance() { { label: '付款率', hideUnsigned: true, value: ctx => ctx.sumCost && ctx.sumPaid ? Math.round(ctx.sumPaid / ctx.sumCost * 100) + '%' : '—', color: 'text-slate-500' }, ].filter(c => true); - // 列排序 - if (!state.finSort) state.finSort = { key: null, asc: true }; + // 列排序(默认按确收金额从高到低) + if (!state.finSort) state.finSort = { key: 'sig|rev', asc: false }; const sortData = (data, key) => { - if (!key || !state.finSort.key) return data; + if (!key) return data; + if (!state.finSort.key) { + // 默认按确收金额从高到低 + return data.slice().sort(function(a, b) { return (parseFloat(b.rev) || 0) - (parseFloat(a.rev) || 0); }); + } var asc = state.finSort.asc ? 1 : -1; return data.slice().sort(function(a, b) { var va = a[key], vb = b[key]; @@ -336,14 +340,19 @@ function renderFinance() { var expenseArr = []; try { budgetArr = JSON.parse(pf.budget_data || "[]"); } catch(e) {} try { expenseArr = JSON.parse(pf.expense_data || "[]"); } catch(e) {} - var detailRows = budgetArr.filter(function(b) { - var exp = expenseArr.find(function(e) { return e.month === (b.month || ''); }) || {}; + // 合并 budget 和 expense 的所有月份 + var allMonths = {}; + budgetArr.forEach(function(b) { allMonths[b.month || ''] = true; }); + expenseArr.forEach(function(e) { allMonths[e.month || ''] = true; }); + var detailRows = Object.keys(allMonths).filter(function(m) { + var b = budgetArr.find(function(x) { return x.month === m; }) || {}; + var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); return bRev || bGross || bPay || eCost || ePaid; - }).map(function(b) { - var m = b.month || ''; - var exp = expenseArr.find(function(e) { return e.month === m; }) || {}; + }).sort().map(function(m) { + var b = budgetArr.find(function(x) { return x.month === m; }) || {}; + var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); var bCf = bPay - ePaid; @@ -707,7 +716,7 @@ window.editPfSignMonth = (event, pfId) => { }; window.switchFinanceTab = (tab) => { - document.querySelectorAll(".finance-tab").forEach(b => b.classList.toggle("active", b.dataset.tab === tab)); + document.querySelectorAll("#financeModal .finance-tab").forEach(b => b.classList.toggle("active", b.dataset.tab === tab)); document.querySelector("#financeTabInfo").classList.toggle("hidden", tab !== "info"); document.querySelector("#financeTabRevpay").classList.toggle("hidden", tab !== "revpay"); document.querySelector("#financeTabCost").classList.toggle("hidden", tab !== "cost"); diff --git a/static/modules/plan.js b/static/modules/plan.js index a8d1d1f..d1e4b1f 100644 --- a/static/modules/plan.js +++ b/static/modules/plan.js @@ -264,10 +264,14 @@ function renderPlan() { { label: '付款率', hideUnsigned: true, value: ctx => ctx.sumCost && ctx.sumPaid ? Math.round(ctx.sumPaid / ctx.sumCost * 100) + '%' : '—', color: 'text-slate-500' }, ].filter(c => true); - // 列排序 - if (!state.planSort) state.planSort = { key: null, asc: true }; + // 列排序(默认按确收金额从高到低) + if (!state.planSort) state.planSort = { key: 'sig|rev', asc: false }; const sortData = (data, key) => { - if (!key || !state.planSort.key) return data; + if (!key) return data; + if (!state.planSort.key) { + // 默认按确收金额从高到低 + return data.slice().sort(function(a, b) { return (parseFloat(b.rev) || 0) - (parseFloat(a.rev) || 0); }); + } var asc = state.planSort.asc ? 1 : -1; return data.slice().sort(function(a, b) { var va = a[key], vb = b[key]; @@ -351,14 +355,19 @@ function renderPlan() { var expenseArr = []; try { budgetArr = JSON.parse(pf.budget_data || "[]"); } catch(e) {} try { expenseArr = JSON.parse(pf.expense_data || "[]"); } catch(e) {} - var detailRows = budgetArr.filter(function(b) { - var exp = expenseArr.find(function(e) { return e.month === (b.month || ''); }) || {}; + // 合并 budget 和 expense 的所有月份 + var allMonths = {}; + budgetArr.forEach(function(b) { allMonths[b.month || ''] = true; }); + expenseArr.forEach(function(e) { allMonths[e.month || ''] = true; }); + var detailRows = Object.keys(allMonths).filter(function(m) { + var b = budgetArr.find(function(x) { return x.month === m; }) || {}; + var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); return bRev || bGross || bPay || eCost || ePaid; - }).map(function(b) { - var m = b.month || ''; - var exp = expenseArr.find(function(e) { return e.month === m; }) || {}; + }).sort().map(function(m) { + var b = budgetArr.find(function(x) { return x.month === m; }) || {}; + var exp = expenseArr.find(function(x) { return x.month === m; }) || {}; var bRev = parseFloat(b.rev || 0), bGross = parseFloat(b.gross || 0), bPay = parseFloat(b.payment || 0); var eCost = parseFloat(exp.cost || 0), ePaid = parseFloat(exp.paid || 0); var bCf = bPay - ePaid; diff --git a/templates/index.html b/templates/index.html index 8058df8..b217408 100644 --- a/templates/index.html +++ b/templates/index.html @@ -76,7 +76,7 @@
-

OPC Manager v1.2.0.9

+

OPC Manager v1.2.0.10

科普 OPC 工作台