v0.2.0
概述
v0.2.0 是面向「易用性 + 数据模型」的一次较大升级,主线四件事:
- 资产负债分类体系整体换上方案 D(10 资产 + 6 负债,三层扁平),删除会计余孽,独立出「数字资产 / 退休与长期账户 / 保险账户」三大类
- 资产负债录入对话框换上全新
CategoryTreePicker,把原「类型 + 三级分类路径」两个字段合并为「tab + 面包屑 + 搜索 + 自动穿透」的渐进式选择 - 修了一批长期视觉 / 交互瑕疵(弹窗遮罩漏顶、Select 箭头贴边、分类面板被 viewport 裁等)
- 新增 GitHub Actions release workflow,往后
git push tag v*即可自动构建并发布 release
主要变更
1. 资产负债分类体系(方案 D)
- 资产从原 7 大类(现金与存款 / 稳健投资 / 权益投资 / 保障与储备 / 不动产 / 实物资产 / 经营与往来)重组为 10 大类:现金存款类 / 固定收益类 / 权益与另类 / 数字资产 / 退休与长期账户 / 保险账户 / 不动产 / 车辆 / 其他实物 / 经营资产
- 负债从原 6 大类(房屋相关负债 / 消费负债 / 车辆及耐用品负债 / 经营负债 / 投资杠杆负债 / 往来及其他负债)重组为 6 大类:住房负债 / 经营负债 / 消费负债 / 车辆与耐用品负债 / 投资杠杆负债 / 亲友借款
- 删除家庭场景用不上的「应收资产 / 其他应付款」等会计概念
- 黄金账户型走「权益与另类 / 另类投资 / 贵金属账户」,金条实物走「其他实物 / 贵金属与珠宝 / 黄金实物」,资产形态清晰分流
2. 录入对话框 CategoryTreePicker
- 合并原「类型(资产/负债)+ 三级分类路径」为一个控件,dialog 内只占一行
- 点开后含:顶部
资产 (10) / 负债 (6)tab → 面包屑「全部 › L1 › L2 ›」(每段可点回退)→ 搜索框(输入即跳出面包屑模式,L1/L2/L3 任一段命中均出)→ 当前层列表(每次只面对 ≤10 项) - 二级若只含 1 个三级会自动穿透到三级,少一击
- 面板展开时自动
scrollIntoView,让「分类」label 紧贴 dialog 头部,最大化展示组件全貌
3. Dialog / Select 视觉与交互修复
Dialog改用createPortal渲染到document.body,修了遮罩没遮全侧边栏 + 主内容顶部 padding 区的 bugDialog改为flex max-h-[85vh] flex-col+ 内部overflow-y-auto+ footer 固定底部,长内容自身可滚、操作按钮始终可见Select箭头全系统统一:appearance-none隐藏浏览器默认箭头 + 自绘 lucideChevronDown绝对定位,告别 Chrome/Safari 紧贴右边缘的丑陋默认样式
4. 分析看板视觉收紧
- 各图表 ECharts grid 内边距收紧,消除卡片左 / 底 / 桑基两侧的大块灰白留白
- 「风险与配置」tab 三卡片重排:波动率 + 相关性矩阵同行(两者高度都有上限),再平衡提醒独占下排全宽
- 相关性矩阵加方阵守卫(
max-width = height + 160),N×N 单元格在两个方向接近正方形
5. 录入页「目标占比配平」面板
- 改为按需折叠的紧凑信号面板:全部成员达标的稳态下整块零高度,出现未达标 / 超出时才自动展开
- 单卡瘦身(去掉装饰性大号
100.0%副标):高度从 ~120 px → ~62 px,宽屏一排能塞更多成员
6. 桌面应用 / 构建
- 自动更新链路改为「后台静默下载 + 用户单次确认升级」,含 macOS
xattr -dr com.apple.quarantine剥离,免 Gatekeeper 二次授权 - macOS DMG 打包改用
hdiutil自制,绕过maker-dmg → electron-installer-dmg → appdmg → macos-alias在新 Node 上的 native binding 编译问题 - 新增
.github/workflows/release.yml:on push tagv*自动在macos-latest上构建 arm64 DMG/ZIP 并发布 release,release notes 自动从 CHANGELOG 抠取 - 应用图标重做为符合 Apple HIG 的双蓝 H 标志
升级说明
- 存量用户:旧 holding 的
(l1Id, l2Id, l3Id)在新分类树里 row 仍存在(FK 约束未破坏)但对应的分类名字已变,感知到的是「分类被全部重命名」。建议升级后检查一次每个 holding 的分类归属是否仍合适 - 开发期:删
backend/data/app.db后首次启动,让bootstrap重写入方案 D 树 - 桌面端:v0.1.3 用户启动后会自动检测、后台下载,点击通知确认即可升级,无需 Gatekeeper 二次授权
构建产物
- macOS arm64:
HouseholdBalanceSheet-0.2.0-macos-arm64.dmg(145 MB) - macOS arm64:
HouseholdBalanceSheet-0.2.0-macos-arm64.zip(147 MB)
Overview
v0.2.0 is a substantial UX + data-model upgrade with four main threads:
- The household asset/liability taxonomy is wholesale-replaced by Scheme D (10 asset roots + 6 liability roots, fully flat three-level), with accounting-flavoured leftovers dropped and "Digital assets / Retirement & long-term accounts / Insurance accounts" promoted to first-class roots.
- The entry form dialog gets a brand-new
CategoryTreePickerthat merges the previous "type + three-level category path" fields into a progressive picker (tab + breadcrumb + search + auto-penetration). - A batch of long-standing visual / interaction defects are fixed along the way (dialog overlay clipping, native select caret hugging the edge, popover clipped by viewport, …).
- A new GitHub Actions release workflow now builds and publishes releases automatically on every
v*tag push.
Highlights
1. Taxonomy (Scheme D)
- Asset side regroups from 7 roots (cash & deposits / stable investments / equity investments / insurance & reserves / real estate / physical assets / business & receivables) into 10 roots: cash deposits / fixed income / equity & alternatives / digital assets / retirement & long-term accounts / insurance accounts / real estate / vehicles / other physical / business assets
- Liability side regroups from 6 roots into 6 new roots: housing / business / consumer / vehicle & durables / investment leverage / personal loans from friends and family
- Accounting-flavoured "receivables" (asset side) and "other payables" (liability side) — which households don't really use — are dropped
- Account-type gold lives under "equity & alternatives / alternatives / precious-metal accounts", physical bullion under "other physical / precious metals & jewelry / physical gold"
2. CategoryTreePicker on the entry dialog
- Merges the previous "type (asset/liability) + three-level category path" into a single one-row control
- On open, the panel shows: an
Asset (10) / Liability (6)tab at the top → a clickable breadcrumb (全部 › L1 › L2 ›, each segment can re-pick) → a search box (typing leaves breadcrumb mode, matches any L1/L2/L3 segment) → the current level's list (always ≤10 items) - An L2 with exactly one L3 child auto-penetrates to the L3, saving one click
- Opening the panel auto-scrolls the "分类" label up to the dialog header, maximising how much of the picker fits in the viewport
3. Dialog / Select fixes
Dialognow renders throughcreatePortaltodocument.body, fixing the backdrop that previously left the sidebar and the main content's top padding strip unmaskedDialogbecomesflex max-h-[85vh] flex-colwith aflex-1 overflow-y-autobody and a sticky footer — long content scrolls internally and the action buttons stay visible- The system-wide
Selectcaret is unified:appearance-nonehides the browser default, a self-drawn lucideChevronDownis absolutely positioned — no more Chrome/Safari arrows glued to the right edge
4. Analytics dashboard polish
- ECharts grid paddings tightened across charts to eliminate the visible grey bands on card left / bottom / sankey sides
- The "Risk & Allocation" tab is rearranged: volatility + correlation matrix share the upper row (both have height caps), the unbounded rebalance reminder owns the full-width lower row
- The correlation matrix gains a square-aspect guard (
max-width = height + 160), keeping N×N cells near-square in both directions
5. Entry page "target-ratio rebalancing" panel
- The overview becomes a need-based compact signal panel: when every member is balanced the whole section collapses to zero height; it auto-expands only when someone goes under or over
- Each mini card slims down from ~120 px to ~62 px tall (dropping the decorative
100.0%headline), and a wider screen fits more members per row
6. Desktop app / build
- The auto-update flow is reshaped into "silent background download + single user-confirmed upgrade", with
xattr -dr com.apple.quarantinestripped on macOS so Gatekeeper no longer asks for re-authorization - The macOS DMG step switches to
hdiutil, dodgingmaker-dmg → electron-installer-dmg → appdmg → macos-aliasnative bindings that fail to compile on newer Node - New
.github/workflows/release.ymlbuilds an arm64 DMG/ZIP onmacos-lateston everyv*tag push, then publishes the release with notes auto-extracted from CHANGELOG - The app icon is redesigned to a dual-blue "H" mark following Apple HIG
Upgrade notes
- Existing users: a holding's
(l1Id, l2Id, l3Id)still resolves in the new tree (FK is intact) but the resolved names have shifted, so users perceive it as "categories were renamed". Recommend a one-pass review after upgrading to confirm each holding still sits where it should - Dev environment: delete
backend/data/app.db, then letbootstrapreseed the Scheme D tree on next startup - Desktop: v0.1.3 users will auto-detect and background-download; clicking the notice once confirms the upgrade, no Gatekeeper re-authorization required
Artifacts
- macOS arm64:
HouseholdBalanceSheet-0.2.0-macos-arm64.dmg(145 MB) - macOS arm64:
HouseholdBalanceSheet-0.2.0-macos-arm64.zip(147 MB)