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>
147 lines
4.4 KiB
Markdown
147 lines
4.4 KiB
Markdown
# 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. 资产页面(组件 + 路由 + 导航入口)
|