Actual Budget 预算视图实战指南:月份管理、预算表操作与信封预算法原理

发布时间:2026/9/12 23:52:50
Actual Budget 预算视图实战指南:月份管理、预算表操作与信封预算法原理 Actual Budget 预算视图实战指南月份管理、预算表操作与信封预算法原理【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual导读本指南围绕 Actual Budget 的预算视图The Budget展开它是信封预算法Envelope Budgeting的主战场所有给每块钱分配工作的动作——录入预算金额、批量复制上月预算、按历史平均值填数、给分类写 Markdown 笔记——都在这一屏完成。读完本文你将掌握预算视图的完整布局与逐项操作、屏幕宽度与可见月数之间的关系以及这些操作在前后端代码中的真实调用链菜单 → 消息 → 服务端动作从而既能熟练上手也能深入理解其数据模型。预算视图信封预算法的主战场Actual Budget 是一款 local-first 的个人财务应用其预算理念根植于信封预算法把收入按信封即分类如 Groceries、Bills拆分只预算自己已经拥有的钱而不是预测未来的收入与支出。更系统的说明见 信封预算法 与 预算工作方式。预算视图即这一方法论的落地点整体布局如下视图由三大部分组成顶部的月份头部Month header、左侧的分类区域以及中间的预算网格Budgeted / Spent / Balance。下面分别展开。月份管理屏幕宽度决定可见月数预算视图同一时间最多能显示多少个月由你的屏幕宽度决定。这不是固定值而是运行时根据可用宽度动态计算的。从源码看这一逻辑位于 DynamicBudgetTable.tsxgetNumPossibleMonths(width, categoryWidth)用width - categoryWidth估算出表格可用宽度进而算出最多能容纳几个月实际显示月数取Math.min(numPossible, maxMonths)其中maxMonths是用户偏好值默认 1计算出的numPossible会通过setDisplayMax写入 BudgetMonthCountContext.tsx 上下文供月份的图标选择器读取。maxMonths偏好来自useGlobalPref(maxMonths)见 components/budget/index.tsx默认值为 1。用日历图标选择显示月数在左上角Actual 会渲染一组日历图标每个图标代表一种可见月数点亮数量即当前选中的月数。点击第 N 个图标视图立即切换为同时显示 N 个月。相关组件为 MonthCountSelector.tsx它根据displayMax渲染 1 到displayMax个图标当前选中的月数maxMonths i时图标高亮。特别地当屏幕只放得下一个月时displayMax 1图标选择器会整体隐藏——因为此时没有选择的意义。点击图标后还可以进一步指定显示哪几个月例如以当前月为基准向前/向后偏移月份头部Month header每个月顶部都有一行头部 UI提供三类操作加笔记、折叠头部、批量预算操作。给月份添加 Markdown 笔记点击笔记图标可为该月添加一条笔记。Actual 完整支持 Markdown当鼠标悬停在笔记上时会按 Markdown 语法渲染显示。这让本月备注如朋友聚餐超支下月注意变得可读性极强。折叠月份头部点击头部右侧的**双箭头chevron**可以将头部折叠为预算网格腾出更多纵向空间。关键点是折叠后功能不变——笔记、三点菜单等依然可以访问只是展示形式更紧凑。三点菜单批量预算操作点击月份头部的三个竖点⋮会弹出针对该月全部预算分类的批量操作菜单包括Copy last months budget复制上个月预算Set budgets to zero全部归零Set budgets to 3 month average按 3 个月平均值填充Set budgets to 6 month average按 6 个月平均值填充Set budgets to 12 month average按 12 个月平均值填充这些菜单项与源码一一对应。以信封式预算的月份菜单 BudgetMonthMenu.tsx 为例五个基础项分别是copy-last、set-zero、set-3-avg、set-6-avg、set-12-avg当goalTemplatesEnabled功能开关开启时还会追加Check templates、Apply budget template、Overwrite with budget template、End of month cleanup等目标模板相关项。跟踪式预算的分类级菜单则见 tracking/BudgetMenu.tsx其中包含单分类的Copy last months budget、Set to 3/6/12 month average以及Copy until year end复制到年底等项。从界面到后端整条链路是这样的见 mutations.ts 的useBudgetActions菜单项copy-last→ 发送budget/copy-previous-month消息set-zero→budget/set-zeroset-3-avg/set-6-avg/set-12-avg→budget/set-3month-avg/set-6month-avg/set-12month-avg服务端在 app.ts 中以mutator(undoable(...))注册这些方法——这意味着上述批量操作全部支持撤销undo。服务端动作位于 loot-core/src/server/budget/actions.ts实现细节值得展开复制上月copyPreviousMonthactions.ts#L218-L242取出上个月该分类的所有预算记录跳过隐藏分类与隐藏分组在跟踪式预算模式下还会跳过收入分类然后逐个写入当前月。所有写入都在batchMessages中批量提交。归零setZeroactions.ts#L261-L274查询v_categories视图中未删除tombstone 0的全部分类逐一将预算金额设为 0。N 月平均set3MonthAvg/set6MonthAvg/set12MonthAvgactions.ts#L276-L357查询未删除、未隐藏分类与分组均需hidden 0的分类调用getCategoryAverage计算平均值对支出分类平均值会取负avg * -1因为支出在记账中以负值存储。getCategoryAverageactions.ts#L388-L414取过去 N 个月的sum-amount工作表值求和后Math.round取整并且只会取到该分类首次有交易活动的月份为止见getAverageMonths避免把还没开始记账的月份也算进分母。月份头部折叠后以上功能均可继续访问预算表Budget Table左侧分类区预算明细区列出全部分类及其分组。典型视图包含两个支出分组如Usual Expenses、Bills和收入分类。左侧区域黄色框顶部的三个竖点菜单提供Toggle hidden categories切换显示/隐藏隐藏分类Expand all / Collapse all展开或折叠全部分组。当鼠标悬停在某个分类分组绿色框上时点击图标可向该分组添加新分类点击笔记图标可为分组添加笔记预算页的所有笔记均支持完整 Markdown分组右侧的下拉菜单可在隐藏/显示分组、重命名、删除分组之间切换。分类紫色框具备与分组相同的操作能力隐藏、重命名、删除同样可以为单个分类添加专属笔记——例如记录这个分类用来攒房租目标是每月存 2000之类的信息。从实现看分组与分类的增删改查由 budget/mutations.ts 中的系列 mutation 驱动useCreateCategoryMutation、useDeleteCategoryGroupMutation、useMoveCategoryGroupMutation等数据的持久化视图为v_categories含tombstone、hidden、cat_group、is_income等字段后端的批量预算操作正是基于这些字段过滤的。中间预算区这是预算视图的精华地带所有与数字的博弈都发生在这里。每个月份标题下有三列Budgeted预算该月分配给该分类的金额Spent已花该月在该分类上的实际支出Balance余额Budgeted − Spent再加上上个月结转下来的余额按惯例的简化说法详见下文余额与结转。日常使用中你主要通过操作Budgeted列来调整预算直接输入一个数字为该分类设定本月的预算金额或使用下拉菜单按预设规则快速填充选项包括复制上个月的预算copy of last months budget前 3 个月 / 6 个月 / 12 个月的平均值每条预算记录也可以单独添加笔记同样支持 Markdown用于记录该笔预算的决策依据。值得注意单分类下拉对应的后端动作是budget/copy-single-month与budget/set-n-month-avg见 mutations.ts#L862-L894与月份级批量菜单是两个层级一个只作用于当前分类一个作用于整个月。预算背后的数据模型与操作链路预算视图虽然操作直观但底层是电子表格spreadsheet引擎 数据库表的混合模型理解它有助于正确预期行为工作表sheet值如to-budget、budget-分类、leftover-分类、sum-amount-分类等都是通过getSheetValue(sheetName, ...)实时读取的派生值。例如holdForNextMonthactions.ts#L486-L512先读当前月to-budget工作表值大于 0 时才把金额写入缓冲字段。数据库表月份级元数据落在zero_budget_months表buffered字段对应持有到下月的缓冲金额分类级预算落在zero_budget_categories或跟踪式下的对应表。余额与结转carryover前端 BalanceWithCarryover.tsx 中支出分类的余额绑定leftover收入分类的余额绑定sum-amount当分类开启结转carryover时余额旁会出现一个向右的小箭头指示符。你可以在某个分类的余额上点击选择Rollover overspending结转超支让负数余额跨月保留常用于追踪可报销支出。这套链路中值得一提的设计是所有预算 mutation 在服务端都包了一层mutator(undoable(...))因此你在界面上做的每一次复制、归零、平均填充都可以安全撤销这大大降低了批量操作的心理负担。将预算视图融入每月工作流结合 预算工作方式预算视图应这样融入你的月度节奏创建预算每月开始时账户总余额就是可预算金额To budget。在 Budgeted 列逐个输入预估值直到顶部To budget归零——这是信封预算法每块钱都有工作zero-sum的落点。移动资金某分类超支时点击该分类的Balance选择Transfer to another category把资金从富余分类转入缺口分类也可以点击顶部 To budget 金额将可用资金转给指定分类。处理超支结转默认情况下本月超支会自动从下个月的 To budget中扣除分类余额归零若希望保留负数余额跨月如报销则对该分类开启结转超支。持有资金Month Ahead点击 To budget 金额选择Hold for next month把本月收入囤给下月使用逐步实现用上个月的钱付这个月的账单。若希望自动持有可在收入分类上启用auto holdActual 会从当前月起连续 12 个月自动持有该收入分类的金额。开启新月份新月份到来时用月份头部的三点菜单Copy last months budget一键复制或按 3/6/12 个月平均值填充再根据实际消费修正——这正是预算视图把回顾 规划压缩到几次点击的关键价值。关于信封预算法背后的理念zero-sum budgeting、Month Ahead、Pay-Yourself-First 等策略与完整月度示例可继续阅读 信封预算法分类的增删改与结构设计见 分类管理。小结预算视图一次显示的月数 屏幕宽度能容纳的最大值 ∩ 用户设置的maxMonths偏好由MonthCountSelectorDynamicBudgetTable协作完成月份头部的三点菜单提供复制上月 / 归零 / 3-6-12 月平均五类批量操作折叠后功能不变且全部可撤销预算表左侧管结构分组、分类、隐藏、笔记中间管数字Budgeted / Spent / Balance每条预算与每处笔记均支持 Markdown后端actions.ts的实现在batchMessages中批量读写工作表与zero_budget_*表平均值的计算会智能截断到首次有活动的月份避免分母失真。至此你已经可以打开预算视图把复制上月 → 微调 → To budget 归零作为每月的固定仪式并清楚知道背后每一步发生了什么。【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询