TREK预算追踪实战:如何用多币种费用分摊与AA结算(Splitwise风格)搞定旅行账本
【免费下载链接】TREKA self-hosted travel/trip planner with real-time collaboration, interactive maps, PWA support, SSO, budgets, packing lists, and more.项目地址: https://gitcode.com/GitHub_Trending/nomad22/TREK
TREK是一款自托管的旅行规划应用(self-hosted travel planner),除了实时协作与交互地图,还内置了 Splitwise 风格的预算追踪功能:多币种记录、按人头分摊、AA 结算计算器,让"旅行结束算不清账"成为过去式。
📌 注意:从 v3.3.0 起,该模块在界面上统一更名为Costs(费用),但底层 addon id 仍是
budget。
在哪里找到费用功能?
打开任意行程规划器,顶部导航点击Costs标签页即可(需管理员在 Addons 中启用该插件)。页面顶部是四张核心卡片:
- You owe:你欠别人的总额
- You're owed:别人欠你的总额
- Outstanding amount:还没有付款人的未记账费用
- Total trip spend:整个行程总支出 + 你的份额
下方是按日期倒序的费用流水,右侧栏则是"Settle up(结算)"与"Balances(余额)"面板。
多币种预算追踪:三种"货币设置"千万别搞混
这是新手最容易踩坑的地方。TREK 支持165 种货币(汇率来自 Frankfurter,无需 API Key),但它把"货币"拆成了三个独立设置,各管一件事:
| 设置 | 位置 | 作用 |
|---|---|---|
| 行程货币 | 行程 → 编辑行程 | 记账基准,所有余额、结算都在它身上计算 |
| 费用货币 | 添加费用弹窗 | 小票上写的什么就填什么,如$100 晚餐就填100 USD |
| 显示货币 | 设置 → 常规 | 只改"读法",不改任何存储数据 |
💡关键机制——汇率冻结:当你保存一笔外币费用时,TREK 会把当时的实时汇率"冻结"在这笔费用上。这意味着:还完的债不会因市场波动而重新变成欠款,汇率锁死的那一刻就是你欠账的那一刻。即使你把行程货币从卢布换成欧元,已录入的9 000 ₽也绝不会被悄悄改写。
三种AA分摊模式:均分、自定义、逐项记账
多人行程中,点击费用编辑按钮会打开分摊弹窗,提供三种模式:
- Equally(均分):在选中的成员之间平分。零头(四舍五入产生的分币误差)会按规则确定性地轮转分配,保证整个旅途中每人分到的金额长期公平。
- Custom(自定义):为每位旅伴输入各自的具体金额,所有份额之和必须恰好等于总价——分不平就存不了。
- Ticket(逐项):像记账单一样列出明细(例如 苹果 $10、蛋糕 $50、牛奶 $40),再给每个单项指定分摊人,精确到分。
另外,点击费用条目上已分配的成员头像,即可标记该成员已付款(头像会出现绿色光环);右栏余额会实时刷新。
前端实现见 CostsPanel.tsx 与 CostsPanel.helpers.ts,分摊与结算逻辑集中在 budgetService.ts。
AA结算计算器:一步算出"最少转账方案"
当成员之间存在未结清的债务时,总额卡片内会出现一个可展开的Settlement(结算)区域。它用贪心配对算法给出最少数量的转账:谁付给谁、付多少,一目了然;下方还会列出每位成员的净余额(盈余/赤字条)。
所有余额一律先以行程货币轧差,最后才一次性换算成你的显示货币——避免"逐笔换算"产生的分币漂移,已结清的行程永远不会冒出幽灵债务。
记录还款:也支持外币
结清一笔卢布债务完全可以用欧元转账。点击Settle up旁的+ Add payment,选择付款人、收款人、金额和货币即可:
每笔还款同样自带冻结汇率,记在账本里显示为双币金额(如$30.00 → 27,00 €)。你也可以点击结算建议直接"Settle"一键入账,或撤销任何一笔还款记录。
导出与自动化:CSV 一键带走全部账目
工具栏的Export CSV可下载完整费用表(costs-<行程名>.csv,分号分隔 + UTF-8 BOM,Excel 直接打开不乱码,行内同时保留原始币种与显示币种的金额)。
如果你有 AI 工作流需求,TREK 还暴露了 MCP 工具create_budget_item、calculate_settlement等(见 budget.ts),可以让 Agent 帮你自动记账和算账——只需授予budget:read/budget:write作用域。
常见问题速查
Q:为什么我的总额每天都在轻微变动?你的显示货币 ≠ 行程货币时,显示换算用的是实时汇率(因为那只是"视图");底层余额和债务纹丝不动。
Q:改行程货币会把数字改错吗?不会。无自带币种的费用会被"钉"在旧货币上,所有冻结汇率会重新锚定到新的基准,你手输的数字绝不改写。
Q:权限怎么控制?增删改费用需要budget_edit权限;修改行程货币属于行程本身,需要trip_edit。
更多细节可阅读官方文档:Budget-Tracking.md、Currencies.md。
小结
| 场景 | TREK 的解法 |
|---|---|
| 多国混币记账 | 费用自带货币 + 汇率冻结 |
| 多人 AA | 均分 / 自定义 / 逐项三种模式 |
| 旅行结束清账 | 贪心算法给出最少转账方案 |
| 事后报销 | CSV 双币导出 |
把行程货币设成目的地货币、费用按小票原样录入,剩下的就交给 TREK 的结算计算器——下次旅行结束,你只需要看一眼"Settle up"面板。🧳
【免费下载链接】TREKA self-hosted travel/trip planner with real-time collaboration, interactive maps, PWA support, SSO, budgets, packing lists, and more.项目地址: https://gitcode.com/GitHub_Trending/nomad22/TREK
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考