# 变更审计记录：board-finance 双重格式化修复

| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-27 19:07:51 |
| Prompt-ID | P20260327-190751 |

## 操作摘要

修复 board-finance.ts 中的双重格式化 bug：TS 层 `_loadData()` 用 `formatMoney()` 把数字格式化为字符串（如 `"¥543,047"`），WXML 中 WXS `fmt.money()` 再处理该字符串得到 NaN。移除 TS 层所有 `formatMoney()` 调用，金额字段直接传原始数字（`?? 0`），格式化统一由 WXS 完成。同时包含权限守卫添加、区域筛选扩展、AI 洞察字段、预估规则等多项集成改动。

## 改动方案

TS 层 `_loadData()` 中移除所有 `formatMoney()` 调用，金额字段直接传原始数字（`?? 0`）。百分比字段（`discountRate`、`balanceRate`）也直接传原始小数。助教时薪字段不再拼接 `'¥' + val + '/h'`，直接传数字。格式化统一由 WXML 中的 WXS 函数完成。

移除了 `import { formatMoney }` 导入（文件内不再使用）。

## 文件清单

| 文件 | 改动类型 |
|------|----------|
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts` | 逻辑修复 |

## 本次对话文件变更

新增文件：
- `docs/audit/changes/2026-03-27__board-finance-double-format-fix.md`
- `docs/audit/prompt_logs/prompt_log_20260327_190751.md`
- `docs/audit/session_logs/2026-03/27/16_ecccf230_185956/main_01_ec27502d.md`
- `docs/audit/session_logs/2026-03/27/16_ecccf230_185956/sub_01_9802833d.md`

## 改动注解

### `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts`
- 变更类型：修改
- 原始原因：财务看板全部 6 个板块金额显示为 NaN，根因是 TS 层 `formatMoney()` 预格式化后 WXS 再次调用数值方法导致双重格式化
- 思路分析：遵循「TS 与 WXS 格式化互斥」原则，TS 层只传原始数字（`?? 0` 防 null），所有格式化交给 WXML 中的 WXS 函数。同时本次集成了多项之前的改动：添加 `checkPageAccess` 权限守卫、`getVisibleBoardTabs` 动态看板 tab、区域筛选从 7 项扩展到 9 项（对齐后端 `AreaFilterEnum`）、新增 `isCurrentMonth` 预估标记和 `aiInsights` AI 洞察字段、overview/assistant/gift 等板块数据从 mock 替换为真实 API 绑定
- 修改结果：财务看板 6 个板块金额/百分比正常显示，筛选联动正常，权限守卫生效，区域筛选完整覆盖所有区域类型

## 风险评估

- 低风险：仅移除 TS 层格式化，WXS 层格式化逻辑不变
- 前提：WXML 中所有金额字段已使用 `fmt.money()` 等 WXS 函数，百分比/时薪字段有对应 WXS 处理

## 回滚

恢复 `formatMoney` 导入，将所有 `?? 0` 改回 `formatMoney(...)` 调用，百分比字段恢复 `* 100 + '%'`，时薪恢复 `'¥' + val + '/h'`。

## 验证

1. 打开财务看板页，确认 6 个板块金额显示正常（非 NaN）
2. 切换时间/区域筛选，确认数据刷新后金额仍正常
3. 开启环比开关，确认对比数据显示正常
