c5413644f9
Add group expense tracking (ledger) and public asset inventory (asset) features. Ledger supports income/expense recording with monthly summary. Asset tracks group equipment with free-form holder transfer. Both are independent pages accessible from GroupView navigation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
Game Group V2 — 三期功能设计
功能总览
| 优先级 | 功能 | 说明 |
|---|---|---|
| P0 | 账目管理 | 群组费用流水记录,纯记录不分摊 |
| P0 | 资产管理 | 群组公共资产清单,自由标记持有人 |
P0: 账目管理
定位
群组内费用流水记录。成员记录每笔收入/支出(聚餐、游戏充值、设备采购等),纯记录,不做分摊和结算。
数据模型
ledgers Collection:
| 字段 | 类型 | 说明 |
|---|---|---|
| group | relation → groups | 所属群组 |
| creator | relation → users | 记录人 |
| type | select: income / expense |
收入/支出 |
| amount | number | 金额 |
| category | select: gaming / food / equipment / transport / other |
分类 |
| description | text | 描述 |
| relatedMembers | relation → users (multiple) | 相关成员 |
| occurredAt | date | 发生时间 |
业务规则
- 所有群成员可记录和查看
- 只有记录人可编辑/删除
- 收入用绿色,支出用红色,直观区分
前端页面
路由:/group/:groupId/ledger
components/ledger/
├── LedgerList.vue # 账目列表(收入/支出分色显示)
├── LedgerCard.vue # 单条账目卡片
├── CreateLedgerDialog.vue # 新建账目弹窗
└── LedgerSummary.vue # 汇总面板(总收入/总支出/余额)
API 层 (api/ledgers.ts)
createLedger(groupId, data)— 新建记录listLedgers(groupId, filter?)— 列表(支持按月筛选)updateLedger(ledgerId, data)— 更新(仅记录人)deleteLedger(ledgerId)— 删除(仅记录人)getLedgerSummary(groupId)— 汇总统计
P0: 资产管理
定位
群组公共资产清单。登记游戏账号、主机、手柄等物品,任何成员可自由标记当前持有人。空持有人表示资产在库。
数据模型
assets Collection:
| 字段 | 类型 | 说明 |
|---|---|---|
| group | relation → groups | 所属群组 |
| creator | relation → users | 登记人 |
| name | text | 资产名称 |
| type | select: game_account / console / equipment / accessory / other |
类型 |
| description | text, 可选 | 描述备注 |
| currentHolder | relation → users, 可选 | 当前持有人(空=在库) |
| image | file, 可选 | 资产照片 |
业务规则
- 所有群成员可登记和查看
- 任何成员可更新持有人(标记自己拿走/放回)
- 只有登记人可编辑/删除资产信息
前端页面
路由:/group/:groupId/assets
components/asset/
├── AssetList.vue # 资产列表(卡片网格)
├── AssetCard.vue # 资产卡片(显示持有人头像)
├── CreateAssetDialog.vue # 登记资产弹窗
└── TransferAssetDialog.vue # 转移持有人弹窗(选择成员)
API 层 (api/assets.ts)
createAsset(groupId, data)— 登记资产listAssets(groupId)— 资产列表updateAsset(assetId, data)— 更新信息deleteAsset(assetId)— 删除transferAsset(assetId, userId?)— 更新持有人(null=放回在库)
导航入口
GroupView 群组操作菜单中添加:
- "账目"按钮 → 跳转
/group/:groupId/ledger - "资产"按钮 → 跳转
/group/:groupId/assets
实现文件变更总览
新增文件
| 文件 | 说明 |
|---|---|
frontend/src/api/ledgers.ts |
账目 API |
frontend/src/api/assets.ts |
资产 API |
frontend/src/components/ledger/*.vue |
账目组件 (4 个) |
frontend/src/components/asset/*.vue |
资产组件 (4 个) |
frontend/src/views/LedgerView.vue |
账目页面 |
frontend/src/views/AssetView.vue |
资产页面 |
backend/pb_migrations/xxxx_create_ledgers.js |
账目表迁移 |
backend/pb_migrations/xxxx_create_assets.js |
资产表迁移 |
修改文件
| 文件 | 变更 |
|---|---|
frontend/src/types/index.ts |
新增 Ledger、Asset 类型定义 |
frontend/src/router/index.ts |
新增 ledger、asset 路由 |
frontend/src/views/GroupView.vue |
添加账目/资产入口按钮 |
建议实现顺序
- 数据库迁移(ledgers → assets)
- 类型定义 (types/index.ts)
- API 层 (ledgers.ts → assets.ts)
- 账目页面(组件 + 路由 + 导航入口)
- 资产页面(组件 + 路由 + 导航入口)