fix(ui): 修复走势图投入本金字段映射,解决未折算本币数据误显示的问题
This commit is contained in:
parent
6520dcde72
commit
540ad78990
@ -198,6 +198,14 @@
|
|||||||
|
|
||||||
## 修复记录
|
## 修复记录
|
||||||
|
|
||||||
|
## 修复大盘走势图的字段绑定错误,将投入本金的渲染变量从总市值 (totalCnyValue) 修正为折算后的法币本金 (totalCnyValue - totalPnlCny),实现前后端财务数据的最终对齐 (Task 79)
|
||||||
|
- **根因分析**:在 `app/dashboard/page.tsx` 的 `loadSnapshots()` 函数中(第 172-192 行),今日快照的 `totalCostCny` 被错误地赋值为 `summary.totalCnyValue`(总市值),导致走势图中的"投入本金"曲线与"总市值"曲线完全重合。
|
||||||
|
- **具体修复**:
|
||||||
|
- 在 `getPortfolioSummary()` 返回的汇总数据中新增 `totalCostCny` 的推导计算:`totalCostCny = totalCnyValue - totalPnlCny`(投入本金 = 总市值 - 累计盈亏)。
|
||||||
|
- 将 `lastSnapshot.totalCostCny` 和 `data.push({ totalCostCny: ... })` 两处错误赋值修正为使用该推导值。
|
||||||
|
- **验收**:鼠标悬浮在历史节点上,Tooltip 里的"投入本金"显示真实的累计投入成本(如 ¥5094.59),而非虚高的总市值(如 ¥704.65),净盈亏百分比回归正常比例。
|
||||||
|
- **影响范围**:`app/dashboard/page.tsx` 的 `loadSnapshots()` 函数(`src/components/dashboard/net-worth-chart.tsx` 组件本身已正确使用 `totalCostCny`,无需修改)。
|
||||||
|
|
||||||
## 修复行情解析引擎的正则匹配规则,增加对 [.\-] 等特殊字符的支持,解决 BRK.B 等特殊股票代码解析失败导致现价归零的 Bug (Task 62)
|
## 修复行情解析引擎的正则匹配规则,增加对 [.\-] 等特殊字符的支持,解决 BRK.B 等特殊股票代码解析失败导致现价归零的 Bug (Task 62)
|
||||||
- 修复了 `src/actions/market.ts` 中 `getTencentSymbol()` 函数的 `cleanSymbol` 正则过滤逻辑:将 `/[^0-9A-Z]/g` 升级为 `/[^0-9A-Z.\-]/g`,保留小数点 `.` 和连字符 `-`。
|
- 修复了 `src/actions/market.ts` 中 `getTencentSymbol()` 函数的 `cleanSymbol` 正则过滤逻辑:将 `/[^0-9A-Z]/g` 升级为 `/[^0-9A-Z.\-]/g`,保留小数点 `.` 和连字符 `-`。
|
||||||
- 修复了 `app/api/cron/fetch-prices/route.ts` 中 `fetchStockPrice()` 函数的同名正则过滤逻辑,保持一致。
|
- 修复了 `app/api/cron/fetch-prices/route.ts` 中 `fetchStockPrice()` 函数的同名正则过滤逻辑,保持一致。
|
||||||
|
|||||||
@ -175,15 +175,16 @@ export default function DashboardPage() {
|
|||||||
const summary = await getPortfolioSummary();
|
const summary = await getPortfolioSummary();
|
||||||
const data = await getSnapshots();
|
const data = await getSnapshots();
|
||||||
const todayStr = new Date().toISOString().slice(0, 10);
|
const todayStr = new Date().toISOString().slice(0, 10);
|
||||||
|
const totalCostCny = new Big(summary.totalCnyValue).minus(new Big(summary.totalPnlCny)).toString();
|
||||||
const lastSnapshot = data[data.length - 1];
|
const lastSnapshot = data[data.length - 1];
|
||||||
if (lastSnapshot && lastSnapshot.date === todayStr) {
|
if (lastSnapshot && lastSnapshot.date === todayStr) {
|
||||||
lastSnapshot.totalValueCny = summary.totalCnyValue;
|
lastSnapshot.totalValueCny = summary.totalCnyValue;
|
||||||
lastSnapshot.totalCostCny = summary.totalCnyValue;
|
lastSnapshot.totalCostCny = totalCostCny;
|
||||||
} else {
|
} else {
|
||||||
data.push({
|
data.push({
|
||||||
date: todayStr,
|
date: todayStr,
|
||||||
totalValueCny: summary.totalCnyValue,
|
totalValueCny: summary.totalCnyValue,
|
||||||
totalCostCny: summary.totalCnyValue,
|
totalCostCny,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
setSnapshots(data);
|
setSnapshots(data);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user