跳到主要内容

共享账本

让一家人、一个团队、一个项目组共记同一本账。Owner 邀请、Editor 加入,实时秒级同步,每条交易都标记"谁记的 / 谁编辑的"。

⚠️ 前提:共享账本仅 BeeCount Cloud 后端支持。iCloud / WebDAV / S3 / Supabase 都是单人多设备方案,数据不在用户之间互通。详见 BeeCount Cloud 部署

角色与权限

共享账本里有两类角色,Phase 1 只实现这两种(Viewer 只读 + Owner 转让推到 Phase 3):

角色权限
Owner(账本创建者)改账本名 / 币种、邀请新成员、踢人、删账本;同时也能跟 Editor 一样记账
Editor(被邀请的成员)共记交易(创建 / 编辑 / 删除自己 + 别人的);不能改账本元数据、不能邀请、不能改 Owner 的全局分类 / 账户 / 标签

设计原则:Editor 用 Owner 的分类 / 账户 / 标签只读快照(SharedLedger 镜像表)。Editor 在共享账本下记 tx 时只能选 Owner 的资源,不能新建自己的。这样 Owner 不会因为 Editor 加进来就被强制接收一堆陌生分类。

创建邀请(Owner)

App 端

  1. 「账本」页面 → 长按要分享的账本 → 选「成员管理」(或在弹出的菜单中)
  2. 进入成员管理页 → 点「邀请新成员」
  3. 选有效期(1 小时 / 24 小时 / 3 天 / 7 天)→ 点「生成邀请码」
  4. 复制 6 位邀请码或调起系统分享(完整文案 + 链接),发给被邀请人

Web 端

  1. 账本卡片右上角 → 点「成员 / 邀请」图标(人形)
  2. 弹窗里输入有效期 → 点「生成邀请码」
  3. 复制邀请码 或 点分享按钮(走系统 share sheet / 自动复制完整文案)

单账本最多同时存活 10 个未失效邀请码,默认 24 小时失效。Owner 可随时在邀请列表里撤销。

加入邀请(Editor)

App 端

  1. 「我的」 → 「加入共享账本」
  2. 输入 6 位邀请码 → 「预览」(看一眼是哪个账本 / 谁邀请的)→「加入」
  3. 加入成功后:本地立刻拉一份 Owner 的资源快照(分类 / 账户 / 标签)+ 历史 tx,picker 用 Owner 的资源,自己原来的账本不变

Web 端

  1. 账本页面顶部 → 「加入共享账本」按钮
  2. 输入邀请码 → 预览 → 确认加入

多人协作的核心体验

实时同步

任何一个成员在 App 或 Web 上的改动 — 新建 tx、编辑、删除、改账本名 — server 通过 WebSocket fan-out 给所有其他成员,秒级到达(约 2 秒)。

谁记的 / 谁编辑的

每条 tx 自动标 created_by + last_edited_by:

  • 创建人 == 编辑人 != 自己:展示一个头像,长按显示「X 创建并编辑」
  • 创建人 != 编辑人:展示两个头像,长按分别显示「X 创建」/「Y 最后编辑」
  • 自己创建 + 自己编辑:不展示(看自己头像无意义)

入口:

  • App:打开 tx 编辑页,头像在金额数字左侧
  • Web:tx 详情弹窗的字段列表里(Created by / Last edited by)

成员收支统计

可按月 / 年 / 全部三个周期看每个成员的收入、支出、笔数。

  • App:账本卡片长按 → 「成员收支」→ 简版列表(头像 + 收支金额 + 占比 + 笔数)
  • Web:账本卡片图标 → 弹窗(KPI 卡片 + 柱图收支对比 + 饼图支出占比 + 详细列表)

离线场景

  • 离线被踢:Editor 重新上线时,server 没在线时事件丢了;App / Web 会在 WS 重连后对账并自动清理本地数据
  • 离线时 Owner 改资源:Editor 上线后 App 自动重新拉 /shared-resources,SharedLedger 镜像表更新到最新;Web 端走 WebSocket 跟拉取双保险

退出 / 踢人

  • Editor 退出:成员管理页 → 「退出账本」→ 本地数据清理,server 也删 LedgerMember 行
  • Owner 踢 Editor:成员管理页 → Editor 行的删除图标 → 确认踢人;被踢方所有设备 WS 收到通知自动清本地

Owner 不能直接退出共享账本(否则没人管这本账)。需要先 transfer ownership(Phase 3 会补上),目前 MVP 没实现转让。临时方案:Owner 留着不退,或删整个账本。

已知限制(MVP)

  • 最多 5 成员/账本(Phase 1 上限,后期会放宽)
  • Editor 不能新建分类 / 账户 / 标签:只能用 Owner 的全局资源镜像(避免污染)
  • 不能转让 Owner:Phase 3 才会实现
  • 没有 Viewer 只读角色:Phase 3 会加
  • 没有"软冲突"提示:同一条 tx 两人前后编辑会按时间 last-write-wins 决胜,目前不弹「刚被 X 改过」提示(Phase 3 补)
  • 没有按成员筛选 tx:洞察 / 列表暂时按全员合并展示

隐私边界

  • Editor 只看到自己加入的那本共享账本,看不到 Owner 的其它账本
  • Editor 只能选 Owner 的全局资源(分类 / 账户 / 标签):Editor 自己的全局资源不会泄露给 Owner 或其他成员
  • 邀请码默认 24 小时失效 + Owner 一键撤销 + 6 位 30^6 字符空间防爆破

相关文档