# 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` | 添加账目/资产入口按钮 | ### 建议实现顺序 1. 数据库迁移(ledgers → assets) 2. 类型定义 (types/index.ts) 3. API 层 (ledgers.ts → assets.ts) 4. 账目页面(组件 + 路由 + 导航入口) 5. 资产页面(组件 + 路由 + 导航入口)