Actual Budget 26.1.0 版本深度解读:货币显示、移动端日程、备注链接与公式体系升级

原创2026-09-11 13:23:061,871 阅读
文章标签:金融科技后端前端桌面应用移动开发

Actual Budget 26.1.0 版本深度解读:货币显示、移动端日程、备注链接与公式体系升级

Actual 26.1.0 是 Actual Budget 这一本地优先个人理财应用在 2026 年发布的第一个版本,聚焦日常使用体验的打磨:预算视图开始显示货币符号、移动端补齐了完整的 Schedules(日程/计划交易)功能、交易备注中的 URL 可自动识别为可点击链接,同时历史交易数据支持的年份下限从 2000 年扩展到 1995 年。本文以官方发布说明为骨架,结合仓库源码逐条拆解本版本的功能、增强、Bugfix 与工程维护内容,帮助你在升级到 26.1.0 后快速掌握新能力,并理解其底层实现。

版本概览与发布渠道

本版本延续 Actual 的语义化版本节奏,对应的容器镜像标签为:

  • Docker Tag: 26.1.0

对 Linux 用户而言,本版本还有一个重要变化:正式上架 Flathub(应用 ID 为 com.actualbudget.actual),Linux 桌面用户可以直接通过 Flathub 渠道安装和更新 Actual,而不再局限于 Docker、Electron 打包或源码自托管方式。相关的发布自动化、徽标展示与核心团队评审机制也在本版本对应的维护工作中一并落地(详见下文 Maintenance 部分)。

官方发布说明同时向 2025 年所有通过代码、Issue 反馈、测试与社区互助为 Actual 做出贡献的开发者表达了致谢,这也是 Actual 社区驱动开发模式的一部分。

新功能(Features)

本版本的四个核心新功能分别覆盖预算展示、移动端能力、文本解析与公式体验四个方向。

预算视图显示货币符号

此前预算视图中的金额默认只显示数字与千分位格式,不显示货币符号。26.1.0 起,预算视图(包括信封预算的汇总区域)会展示当前货币的符号,例如 $1,234.56。

从源码结构看,预算汇总组件通过格式化配置中的货币信息来渲染金额,例如 ToBudget.tsx 中引用 format.currency.code 等字段,预算余额调整组件(如 AmountAdjustment.tsx)也基于 format.currency.decimalPlaces 与 integerToAmount 进行金额换算。这意味货币符号的显示会跟随用户在设置中选择的币种与数字格式自动变化,不会硬编码为美元符号。

移动端 Schedules 页面

Schedules(日程/计划交易)此前主要在桌面端可用,本版本将完整功能移植到移动端:移动设备上现在可以查看、创建和编辑计划交易。

仓库中移动端导航组件 MobileNavTabs.tsx 的标签列表已包含 Schedules 入口;移动端账户交易页(AccountTransactions.tsx)也接入了 getSchedulesQuery 与 SchedulesProvider,说明计划交易数据在移动端账户上下文中同样被加载与使用。配合本版本的多个日程 Bugfix(见下文),移动端日程体验在功能完整性和准确性上同步提升。

交易备注中的链接自动检测

交易备注(Notes)字段过去仅支持 #标签 渲染。26.1.0 起,备注中的 URL 会被自动识别并渲染为可点击链接,覆盖 http://、https:// 与 www. 开头的地址。

实现位于 linkParser.ts,其解析器 parseNotes 按优先级依次处理三种形态:

  1. Markdown 链接 显示文本,优先级最高(第 13 行的 MARKDOWN_LINK_REGEX 与第 105 行起的匹配分支);
  2. 完整 URL(FULL_URL_REGEX,第 14 行);
  3. www. 开头地址(WWW_URL_REGEX,第 15 行),会自动补全 https:// 前缀。

解析过程中还会通过 TRAILING_PUNCTUATION_REGEX(第 20 行)剥离 URL 末尾的常见标点(如句号、逗号、右括号),避免把 https://example.com. 中的句号误并入链接;同时支持将 /绝对路径 与 C:\Windows\... 形态的文本识别为文件路径并转换为 file:// 链接(normalizeUrl,第 32~49 行)。这意味着你在备注中既可以直接粘贴网址,也可以沿用 #标签、甚至写入本地文件路径,三者可混合渲染。

Excel 公式反馈机制

本版本为实验性的 Excel 公式模式(Formula cards 与 Rule formulas)引入了错误反馈机制,当公式计算结果异常(如除零、类型错误、查询不存在)时,用户能获得更明确的提示信息,编辑体验与错误处理能力得到增强。

增强(Enhancements)

新增 INTEGER_TO_AMOUNT 公式函数与公式卡片样式增强

26.1.0 为公式体系新增了 INTEGER_TO_AMOUNT 函数,用于把"以分为单位的整数金额"转换为"以元为单位的十进制金额",例如 =INTEGER_TO_AMOUNT(1234, 2) 返回 12.34。同时引入了 balance 字段到公式规则动作的执行上下文,并增强了公式卡片的样式。

该函数的实现位于 customFunctions.ts:integerToAmount 方法(第 181~190 行)接收整数金额与可选的小数位参数,委托给共享工具 integerToAmount;其元数据注册(第 473~483 行)声明了第二个参数 decimalPlaces 可选且默认值为 2。在规则公式的测试用例(rules/index.test.ts)中可以看到它的实际用法,例如 =INTEGER_TO_AMOUNT(parent_amount) * 0.5。

这一函数的意义在于统一了公式体系中的单位语义:在规则公式中,amount、balance 等变量以"分"为单位传入,而公式输出按"元"解读(详见官方文档 Excel Formula Mode 中的"cents in, dollars out"说明),INTEGER_TO_AMOUNT 正是这种单位换算的桥梁。

报告新增 "Last Month" 日期过滤

报表日期过滤新增 "Last Month"(上个月) 选项,可用于所有支持日期范围的报告,例如快速查看上月的支出汇总,无需手工指定起止月份。相关日期逻辑同样用于预算信封视图中的汇总展示(TotalsList.tsx 中已存在对应处理)。

手动合并交易时保留拆分

过去手动合并两笔交易时,若其中包含拆分交易(split transactions),拆分结构可能会丢失。26.1.0 修复了该行为:手动合并交易时会保留拆分,避免数据在合并过程中被破坏。

分类与分组菜单文案更精简

应用预算模板(budget template)时,分类与分组菜单的文案被调整为更贴合实际功能的精简表述,减少用户困惑(例如准确区分"应用模板"与"覆盖"等操作的实际语义)。

浅色主题下的标签可读性优化

标签(Tags)在浅色主题下的可读性得到改进,所有主题现在统一使用同一套自定义颜色方案,保证跨主题的视觉一致性。这属于 26.1.0 之前引入的标签功能(对应 add_tags.sql 迁移)在呈现层的一次打磨。

报告表格数值列右对齐

自定义报告与标准报告中的数据表格,数值列默认改为右对齐,符合财务表格的阅读习惯,便于比较数字大小。

交叉点报告新增 "Life Savings"(原 Nest Egg)字段

Monte Carlo 交叉点(crossover point)报告新增 nest egg(储备金)字段,用于展示预期净资产在交叉点上的投影;同时该字段在图例中被重命名为 "Life Savings",语义更清晰。与交叉点相关的本版本 Bugfix 还包括:低支出月份交叉点检测错误(#6371)与默认预测方式改为 Hampel 滤波中位数(#6372),以及 Live 日期模式下的日期处理(#6469)。Hampel 滤波中位数对异常值更鲁棒,能显著改善低支出月份导致的交叉点误判。

历史数据年份下限扩展至 1995

Actual 此前仅允许录入 2000 年及之后的交易;26.1.0 将最小交易年份从 2000 年下调到 1995 年,方便迁移更早期历史账本的用户。Monte Carlo 报告的年度收益历史数据集 monteCarloHistoricalReturns.ts 中同样补充了 1995、1996 等早期年份的股票/债券/现金/通胀数据,使更早的历史年份也能参与回测计算。

API 支持 verbose: false

Actual 的 Node.js API 库扩展了 verbose: false 支持:在初始化或调用时传入该选项可关闭控制台日志输出,便于在脚本中静默运行。这对自动化导入/导出场景更友好。

E2E 测试矩阵化并行

持续集成方面,E2E 测试改用 GitHub Actions 的 matrix-based sharding(矩阵分片并行) 方式执行,显著缩短测试流水线耗时;同时 E2E 改为针对本地构建产物运行,减少对第三方预览部署的依赖。

Bugfix 详解

本版本修复了一批影响面较广的问题,按模块归类如下:

数字解析与显示

  • Unicode 负号解析:数字解析现在把 Unicode 减号(U+2212)识别为合法的负数指示符,导入含特殊负号的数据不再出错(#6247)。
  • "隐藏小数位"下的预算平衡:当设置开启"隐藏小数位"时,预算无法平衡的问题被修复(#6274)。
  • 公式报告动态字号:修复公式报告中动态字体大小计算的错误(#6445)。

仪表盘与报告

  • 默认仪表盘的摘要卡片与日历摘要卡片不再把转账(transfers)计入(#6263、#6367)。
  • 修复报告头部 Live 日期范围在不同状态下的显示问题(#6383),以及 Live 日期模式下交叉点卡片的日期处理(#6469)。
  • 修复自定义报告分组行在横向滚动时配色错位的问题(#6418)。

移动端

  • 移动端预算视图中,分类组整行可点击以展开/折叠,改善触控可达性(#6272)。
  • 修复移动端切换"运行余额"(running balance)后视图不即时更新的问题(#6379)。
  • 修复移动端选择分类时覆盖超支(cover overspending)金额不更新的问题(#6488)。

日程(Schedules)

  • 修复特定条件下日程模板预算金额不足的问题(#6268)。
  • 修复日程 upcoming length(未来长度)年份 off-by-1 的计算错误(#6437)。

规则(Rules)

  • 规则动作新增 date 支持:规则现在允许添加"设置日期"动作,此前只能通过固定值设置其他字段(#6427)。
  • 修复过滤值在单值与多值模式之间切换时的类型转换崩溃(#6491)。
  • 当"未来自动重命名这些收款人"未勾选时,隐藏"合并并编辑规则"按钮,避免生成用户并不想要的规则(#6393)。

同步与权限

  • 修复 GoCardless 收到错误账户信息时同步失败的问题(#6296)。
  • 修复共享预算权限绕过漏洞:非所有者此前可以删除共享预算,本版本修复了该授权绕过问题(#6338)。

API

  • Query 类 补齐了缺失的 reset() 与 serializeAsString() 方法(#6331)。
  • 修复 downloadBudget 在 init() 静默鉴权失败时报 "Could not get remote files" 的问题(#6337)。

其他

  • 修复旧版 iOS 上 PWA 图标显示白色边框的问题(#6298);修复"修复交易"功能描述中的语法错误(#6324);日期快捷键由冲突的 D 改为 E("add transaction" 快捷键),消除重复绑定(#6416);修复转账在交易创建页缺失账户/分类时的错误提示缺失问题(#6336)。

工程维护(Maintenance)

26.1.0 在工程侧投入了大量维护工作,重点如下:

  • Lint/格式化工具链迁移:将 Prettier/ESLint 体系迁移到 oxc / oxlint / oxfmt,分多批(#6259、#6312、#6398、#6399、#6400、#6428、#6443~#6465 等)把原生 ESLint 规则、React 规则、jsx-a11y 规则与项目自定义规则迁移到 oxlint,并修复由此暴露的 no-unused-vars、default-case、no-empty-function 等违规;docs 包也启用了 lint 与格式化。
  • Flathub 发布自动化:自动化 Flathub 商店发布(#6307)、为 Flathub Release PR 自动添加核心团队评审(#6361)、在发布说明中加入 Flathub 徽标(#6376);同时为 Linux .desktop 文件补充关键词、分类与注释以提升可搜索性(#6335),并为 Mac 桌面应用补充多尺寸图标(#6321)。
  • CI 工作流治理:VRT(视觉回归测试)更新流程改为仅在 /update-vrt 评论触发(#6380),修复 fork PR 上的 VRT 工作流(#6420、#6421),vrt-update 交互改进(#6439),无关文件变更不再触发 GitHub UI 工作流(#6364);e2e 改为本地构建运行(#6388)。
  • 依赖升级:express 升级到 5.2.1(#6280)、jws 升级到 4.0.1(#6295)。
  • 其他:sync-server 移除文件扩展名导入(#6179)、validate-user.js 迁移为 TypeScript(#6142)、恢复 i18n 提取 CI 作业(#6460)、改进 API 单元测试本地运行稳定性(#6455)与 help-menu E2E 稳定性(#6489)、为 VS Code 配置内置测试浏览器(#6505)等。

升级与获取

升级到 26.1.0 的方式取决于你的部署形态:

  • Docker 自托管:拉取 actualbudget/actual:26.1.0 镜像(对应文档中的 Docker Tag),替换现有容器即可;
  • Linux 桌面:从 Flathub 安装或更新 com.actualbudget.actual;
  • 移动端 / 桌面端:通过各应用商店渠道获取本版本。

升级后建议优先体验四类新能力:预算货币符号显示、移动端 Schedules 完整功能、交易备注中的可点击链接,以及 Excel 公式模式中新的 INTEGER_TO_AMOUNT 函数与错误反馈。对于需要迁移 2000 年以前历史账本的用户,1995 年的年份下限扩展也可以直接投入使用。

小结

26.1.0 是一个典型的"体验打磨型"版本:四个新功能(货币符号、移动端日程、备注链接、公式反馈)直接改善日常记账路径,近三十个 Bugfix 覆盖数字解析、移动端、日程、规则、同步权限与 API 等关键链路,而 lint 工具链向 oxc 的迁移与 CI 并行化则为后续版本的工程效率奠定基础。结合源码可见,本版本的各项改动(如 linkParser.ts 的链接解析、customFunctions.ts 的公式函数注册、Monte Carlo 历史数据集的年份扩展)都遵循了清晰的模块边界,便于社区开发者在此基础上继续贡献。

登录后查看全文
actual