feat: persist account group display order and backup preferences

This commit is contained in:
陈煜 committed 2026-10-03 12:29:35 +08:00
1 parent 20643b366f
commit 1af5edbadc
28 files changed
+379 -47

No files matched your search

+4
View File
@@ -70,3 +70,7 @@
## 2026-10-03 负债账户溢缴存款
30 项单元测试、12 项真实 MySQL 集成检查、类型检查及构建通过。浏览器验证信用卡从欠款转为正数溢缴存款并计入总资产,余额历史与总览自动刷新;补充金额精度、趋势、日历、权限和备份恢复断言。无数据库结构变更。详见 [更新说明](update-credit-balance-2026-10-03.md)。
## 2026-10-03 分组排序
32 项单元测试、13 项真实 MySQL 集成检查、前后端类型检查及生产构建通过。浏览器确认上下移动、保存与刷新持久化,以及账户选择弹窗同序显示。14 个迁移状态最新,9 张表与 89 个字段均有注释;ZIP 新旧排序字段兼容及用户隔离已验证。详见 [更新说明](update-group-order-2026-10-03.md)。
+2
View File
@@ -47,3 +47,5 @@ User.hiddenMenus 保存受枚举校验的菜单键,settings 不可隐藏;Use
2026-10-03 修复:历史重放允许没有绝对余额锚点时从零计算增量,空历史项目金额为零;备份校验、转账和计划支出使用相同规则。账号凭据变更锁定用户行、验证当前密码、更新凭据并在同一事务撤销旧会话和创建新会话;无需新增字段。/auth/me 返回完整隐藏授权状态和会话时间。前端 mutation 更新数据版本,以当前页面重新读取数据,旧视图请求通过 generation 检查丢弃。见 [更新说明](update-2026-10-03.md)。
2026-10-03 负债账户溢缴更新:负债账户存储正数欠款、负数溢缴;前端显示和输入取相反符号。统计将负债账户的负余额按汇率转换为正资产,正欠款计入负债,两类分别汇总。独立资产和借入借出债务仍要求非负本金,旧数据和 API 金额含义保留。详见 [溢缴更新说明](update-credit-balance-2026-10-03.md)。
2026-10-03 分组排序:User.accountGroupOrder 保存每个用户的账户分组顺序,空值沿用当前默认顺序。前端共享排序上下文,账户卡片、筛选及所有 AccountPicker 使用同一顺序;只显示当前可见分组,保存保留未出现在当前视图的既有偏好。settings 与备份使用相同分组名称和唯一性验证。新增可选 JSON 字段通过带中文注释的增量迁移应用;JSON/ZIP 空空间恢复偏好,已有空间保留当前设置。见 [更新说明](update-group-order-2026-10-03.md)。
+6 -1
View File
@@ -1,6 +1,6 @@
{
"tableCount": 9,
"columnCount": 88,
"columnCount": 89,
"tables": [
{
"TABLE_NAME": "exchangerate",
@@ -479,6 +479,11 @@
"TABLE_NAME": "user",
"COLUMN_NAME": "showNotes",
"COLUMN_COMMENT": "是否显示备注"
},
{
"TABLE_NAME": "user",
"COLUMN_NAME": "accountGroupOrder",
"COLUMN_COMMENT": "账户分组显示顺序;空值表示沿用默认顺序"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

+1 -1
View File
@@ -20,7 +20,7 @@
- 30 项单元测试、12 项真实 MySQL 集成检查通过;前后端类型检查和生产构建通过。
- 新增断言覆盖八位小数和大金额字符串无损转换、跨越零余额、溢缴款与其他债务分别汇总、历史趋势及 FX 归因、日历方向、更正和删除重算、跨用户和隐藏权限、ZIP 导出与恢复。
- 浏览器使用临时模拟账号,将欠款 -100 更新为溢缴存款 120.12345678,详情、历史和总览自动刷新;总资产 120.12、总负债 0.00、净资产 120.12。未操作实际用户账户或进行真实资金转移。
- 浏览器使用临时模拟账号,将欠款 -100 更新为溢缴存款 120.12(原始余额保留 8 位小数),详情、历史和总览自动刷新;总资产 120.12、总负债 0.00、净资产 120.12。未操作实际用户账户或进行真实资金转移。
- 临时账号、模拟数据和预览配置在验收后清理。保留用户原有 Vite 配置修改,仅本地提交,不 push。
![溢缴存款显示](credit-balance-preview.png)
+26
View File
@@ -0,0 +1,26 @@
# 2026-10-03 账户分组排序
## 使用方式
账户页点击“分组排序”,使用“上移/下移”调整分组后保存。顺序同步用于账户分组筛选、全部账户卡片、分组输入建议以及转账、借贷操作和定时计划中的账户选择弹窗。刷新网页或重新登录后仍保留;取消不会保存。只有一个分组时排序按钮禁用,首尾按钮防止越界。
未分组以空字符串单独保存,与自定义名称“未分组”区分。保存时保留当前视图之外已有分组的顺序设置,未解锁的隐藏分组不会出现在排序面板或选择弹窗;新分组追加显示。分组名称作为用户内容保留原文,不参与界面文字翻译。
## 数据与备份
新增 User.accountGroupOrder 可空 JSON 字段,迁移 20261003000100_account_group_order 只增加字段并附中文注释;没有重置数据库或改写财务余额。顺序通过已认证用户的 PATCH /api/settings 保存,auth/me 和 settings 返回当前用户设置。最多 1000 个分组,每个名称最多 60 字符;空字符串允许,重复名称(包括去除首尾空格后重复)和非法类型拒绝。
JSON 与 ZIP 的 preferences 增加可选 accountGroupOrder,ZIP 读取白名单同步接受。空资产空间恢复备份顺序;已有资产空间沿用当前设置,重复备份仍由原有保护返回 409。旧 ZIP 和旧 JSON 缺少排序字段时继续兼容。账户排序只影响展示,不改变金额、历史和财务统计。
## 验证
- 32 项单元测试和 13 项真实 MySQL 集成检查全部通过;前后端类型检查及生产构建通过。
- 新增测试覆盖顺序持久化、用户隔离、重复与非法输入拒绝、空分组与同名分组区分、搜索子集顺序、隐藏分组偏好保留、ZIP 排序恢复及旧备份兼容。
- 浏览器虚构数据验收:将“日常”从末尾移到首位,保存、刷新后卡片与筛选选项维持同一顺序,账户选择弹窗依次显示“日常、未分组、消费、理财”。
- 14 个迁移已应用;真实数据库 9 张表、89 个字段均有注释,完整快照见 database-comments.json。
- 前几轮回归分别发现 ZIP 设置白名单遗漏和重复导入断言不符,已修复并复验。连续多轮运行触发登录限流后,重启独立验收 API 完成整套 13 项通过;没有降低应用限流保护。
- 提交扫描此前将虚构测试金额的数字误匹配为本地凭据,且执行步骤未阻止随后提交。已更换数值示例,确认没有新增连接配置或真实凭据表达式;扫描改为检查新增行,避免删除内容和未改上下文阻挡修复。模拟新增凭据、删除凭据、未改上下文、私钥及安全内容的 5 项扫描回归通过;提交前重新执行扫描。
临时验收账号与预览配置清理,保留用户原有 Vite 配置修改。完成时间:2026-10-03 12:27。仅本地 Git 提交,不 push。
![分组排序验收](group-order-preview.png)