灵感来源:看到呼啦啦1819的许愿「极简的多人旅行AA记账本」(原评论: 【中秋国庆VibeCoding】你出题,我来做,用 TraeCode 做个节日小应用 - #12,来自 呼啦啦1819),「各种交叉垫付、事后算账非常混乱」这句直接戳中我——每次长假和朋友出去玩,回来对账的聊天记录都要翻半小时。当场认领,今天交付!
【这是什么】
《明算账》:一个极简的旅行AA记账本。你付房费、我垫油费、他买门票,各自随手记一笔,最后一张图告诉你谁该转给谁多少钱。
【三个核心体验】
- 记一笔只要三下:金额+谁付的+谁参与了,完事
- 结算极简图:成员头像用箭头连起来,A转给B多少一目了然,转账笔数还是最少的
- 旅行贴纸分享卡:一键生成图片直接扔微信群,不用一个个@人对账
【细节】
- 分摊三种模式:均摊/按份数(拼酒党福音)/某人不参与
- 金额按分整数运算,一分钱都不会算错
- 单文件零依赖,数据在本地,旅途中没信号照样记
- 账单明细可导出CSV,JSON备份防丢失
【创作过程·TraeCode】
五轮迭代,每轮一个主题:
- 数据与计算骨架:分存储、贪心结算、净额守恒
- 极简手账风视觉:底部Tab+记一笔大按钮
- 结算极简图:Canvas箭头债权图+三种分摊模式
- 旅行贴纸分享卡+统计页+导出
- 收尾:边界校验、引导、备份、性能
【成品展示】
【体验方式】
下载附件index.html (82.6 KB),双击即用。
祝大家假期玩得开心,账算得清,感情不伤。
4 个赞
第一轮:
做一个单文件 HTML5 应用《明算账》,一个极简的多人旅行AA记账本。整个项目只有一个 index.html,CSS 和 JS 全部内嵌,不引用任何外部图片、字体、音频、库文件。
技术要求:vanilla JS,不引框架;数据存 localStorage,刷新和关闭浏览器后不丢;金额一律以「分」为单位做整数运算,只在展示层格式化为元,避免浮点误差;代码按模块组织(状态管理、数据模型、计算引擎、UI 渲染)。
本轮实现:
- 账本:旅行名称 + 成员管理(昵称增删改,重名提示);
- 记一笔:金额、付款人(单选)、参与人(多选,默认全选)、分类(餐饮/交通/住宿/门票/购物/其他)、备注可选;账单可编辑、可删除(删除需确认);
- 账单列表:按时间倒序,每条显示付款人、金额、参与人数、分类;
- 净额计算:每人「付了 - 摊了」实时显示;
- 基础结算:用贪心法配对——净额最大的债权人与最大的债务人互相冲抵,输出「A 应转给 B 多少元」的转账列表;
- 均摊时除不尽的零头(分级)自动累计给任意一名成员,保证所有人净额加总为 0。
UI 本轮用最朴素的表单和列表即可,重点是数据和计算正确。
注意:数字输入框加 inputmode=“decimal”;localStorage 读写包 try-catch 防隐私模式报错。完成后告诉我如何用 3 人 5 笔交叉垫付的场景验证结算结果。
做一个单文件 HTML5 应用《明算账》,一个极简的多人旅行AA记账本。整个项目只有一个 index.html,CSS 和 JS 全部内嵌,不引用任何外部图片、字体、音频、库文件。
技术要求:vanilla JS,不引框架;数据存 localStorage,刷新和关闭浏览器后不丢;金额一律以「分」为单位做整数运算,只在展示层格式化为元,避免浮点误差;代码按模块组织(状态管理、数据模型、计算引擎、UI 渲染)。
本轮实现:
- 账本:旅行名称 + 成员管理(昵称增删改,重名提示);
- 记一笔:金额、付款人(单选)、参与人(多选,默认全选)、分类(餐饮/交通/住宿/门票/购物/其他)、备注可选;账单可编辑、可删除(删除需确认);
- 账单列表:按时间倒序,每条显示付款人、金额、参与人数、分类;
- 净额计算:每人「付了 - 摊了」实时显示;
- 基础结算:用贪心法配对——净额最大的债权人与最大的债务人互相冲抵,输出「A 应转给 B 多少元」的转账列表;
- 均摊时除不尽的零头(分级)自动累计给任意一名成员,保证所有人净额加总为 0。
UI 本轮用最朴素的表单和列表即可,重点是数据和计算正确。
注意:数字输入框加 inputmode=“decimal”;localStorage 读写包 try-catch 防隐私模式报错。完成后告诉我如何用 3 人 5 笔交叉垫付的场景验证结算结果。
第二轮:
数据和计算没问题了,现在做视觉升级。方向:暖色纸面手账风,极简、干净、有旅途感。
配色:米白底 #FAF7F2、暖橙主色 #E8734A、墨青文字 #2B333B、浅灰分隔 #EFE9E1,分类各自一个柔和色。所有颜色集中写在常量对象里方便我微调。
布局(移动优先,375px 基准,桌面端居中 480px 卡片):
- 底部 Tab 栏:明细 / 统计 / 结算三个页签,中央凸起圆形「记一笔」按钮(暖橙底白色加号);
- 顶部常驻汇总条:旅行名 + 总支出 / 人均 / 笔数,卡片式圆角带轻阴影;
- 账单卡片:左侧分类 emoji 圆底图标,中间「付款人 · 备注 · 参与人头像小串」,右侧金额等宽数字右对齐;点击展开操作(编辑/删除);
- 成员彩色首字头像:每个成员固定分配一个柔和底色,全应用一致;
- 空状态:简单插画元素 + 文案「旅途第一笔,从现在开始记」;
- 记账弹层:底部抽屉式滑出,金额输入框大号居顶,其余字段依次排列,主按钮「记上」。
红线:主流程(记一笔 → 看汇总)三步内完成;不新增任何设置页面。
这轮做完截图给我看整体效果。
数据和计算没问题了,现在做视觉升级。方向:暖色纸面手账风,极简、干净、有旅途感。
配色:米白底 #FAF7F2、暖橙主色 #E8734A、墨青文字 #2B333B、浅灰分隔 #EFE9E1,分类各自一个柔和色。所有颜色集中写在常量对象里方便我微调。
布局(移动优先,375px 基准,桌面端居中 480px 卡片):
- 底部 Tab 栏:明细 / 统计 / 结算三个页签,中央凸起圆形「记一笔」按钮(暖橙底白色加号);
- 顶部常驻汇总条:旅行名 + 总支出 / 人均 / 笔数,卡片式圆角带轻阴影;
- 账单卡片:左侧分类 emoji 圆底图标,中间「付款人 · 备注 · 参与人头像小串」,右侧金额等宽数字右对齐;点击展开操作(编辑/删除);
- 成员彩色首字头像:每个成员固定分配一个柔和底色,全应用一致;
- 空状态:简单插画元素 + 文案「旅途第一笔,从现在开始记」;
- 记账弹层:底部抽屉式滑出,金额输入框大号居顶,其余字段依次排列,主按钮「记上」。
红线:主流程(记一笔 → 看汇总)三步内完成;不新增任何设置页面。
这轮做完截图给我看整体效果。
第三轮:
视觉定稿,现在做本作的核心招牌:结算极简图,同时补全分摊模式。
结算页改版:
- 上半部分:每人一张净额卡——头像、名字、「付了 xx / 摊了 xx / 净额 xx」,净额正数绿色(应收)、负数橙色(应付);
- 下半部分:Canvas 绘制结算极简图——成员节点沿环形布局(复用彩色头像),债务关系用带箭头的弧线连接,线上标「A → B ¥173」,箭头粗细随金额增大;节点可轻微悬浮动画;
- 图下方文字版转账清单(无障碍兜底),并标注「共 N 笔转账结清」;
- 已两清的成员不出现在图里。
结算算法升级:贪心配对时优先处理最大金额,使转账笔数尽量少;残余 ±1 分以内的零头自动归入最大债权人,保证每人账面干净。
分摊模式(记账面板里切换,默认均摊):
- 均摊:当前逻辑;
- 按份数:每个参与人可设份数(如 3 人拼一箱啤酒,其中 1 人算 2 份);
- 自定义金额:直接填每人摊多少(适合「他不喝酒只出车费」场景),自动校验合计等于总额。
注意保持计算引擎与 UI 分离,规则别写死在渲染代码里。完成后给我一个 4 人场景的测试方法:含按份数分摊和部分参与。
第四轮:
现在做分享和统计,让算完的账能漂亮地发进微信群。
分享卡(结算页两个按钮):
- Canvas 生成结算分享长图,2 倍分辨率导出保证手机上清晰;内容含:旅行名 + 日期范围、总支出与人均、成员头像一排、转账清单(谁 → 谁 ¥多少)、底部一行小字「明算账 · 旅途愉快」;
- 风格:暖橙渐变底 + 旅行贴纸装饰——纸飞机、行李箱、相机、地图别针、云朵,全部 Canvas 矢量绘制,散布在卡片四角,别遮信息;
- 长按可保存图片;同时提供「复制文本版」按钮,生成微信友好的纯文本结算(含 emoji 分行,粘贴到群里格式不乱);
- 文本版示例格式:
川西自驾 · 4 人 · 总支出 ¥3510 / 人均 ¥878;转账:B → A ¥173、C → A ¥33、D → A ¥147,三笔结清,玩得开心!
统计页:
- 分类占比:横向条形图(纯 CSS 实现,带百分比标签),分类色与账单图标一致;
- 每人对比:横向双条(付了 / 摊了),直观看出谁垫得多;
- 消费之最:最大单笔、垫付王、分类冠军,各一行小卡片。
数据导出:账单明细导出 CSV(Excel 可直接开);JSON 备份导出与导入(导入前确认覆盖)。
完成后给我看分享卡的效果图。
第五轮:
最后一轮收尾,目标是可以直接发给任何人用。
- 边界与校验:金额非法输入即时提示;删除还有账单关联的成员时,阻止并说明需先处理其账单;JSON 导入做结构校验,坏文件不覆盖现有数据;
- 数据安全:每次数据变更后静默保存;当天首笔记账后 toast 提醒一次「记得导出备份」;清空账本需输入账本名确认,防手滑;
- 首次引导:第一次打开显示三步引导卡(建账本 → 记一笔 → 出结算图),可跳过,不再出现;
- 细节:页面标题「明算账 · 旅行AA记账本」;用 Canvas 生成一个钱袋图标设为 favicon;输入面板防止移动端双击缩放;适配 iPhone 底部安全区;
- 性能:200 条账单下列表滚动与结算图渲染不卡顿;Canvas 动画只在结算页可见时运行;
- 全面自查:三种分摊模式与编辑联动、结算图与清单一致性、分享卡与文本版金额一致、导入导出往返无损、隐私模式下 localStorage 报错的兜底提示。
完成后输出最终的单文件 index.html,我直接双击打开验收。
2 个赞