Files
Neo-ZQYY/docs/prd/specs/P10-tenant-admin-web.md

134 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# P10租户管理后台 — tenant-admin-web
> 优先级P10依赖 P1 + P3可与 P4-P9 并行)
> 预估工作量:中等
---
## 需求Requirements
### 用户故事
1. 作为租户管理员,我需要独立的 Web 管理后台来审核用户申请。
2. 作为租户管理员,我需要管理用户(编辑身份、店铺归属、关联助教)。
3. 作为租户管理员,我需要上传 Excel 数据(财务支出/团购收入/助教奖罚/充值业绩归属)。
4. 作为租户管理员,上传 Excel 时如果发现主键冲突,我需要逐条确认替换或保留(类似 diff 交互)。
5. 作为系统,租户管理员只能看到自己租户下的店铺数据。
### 验收标准
- AC1租户管理后台是独立 Web 应用,独立登录入口
- AC2租户管理员只能看到自己租户下的店铺和用户
- AC3用户审核页面申请列表、状态筛选、球房ID+手机号关联建议、审核操作
- AC4Excel 上传校验:必填、金额精度、表头格式、类型合法
- AC5主键冲突时前端展示 diff 交互,逐条确认后保存
- AC6助教奖罚支持同一助教同月多笔
---
## 设计要点
### 技术栈
- 独立 Web 应用React + Vite + Ant Design`apps/admin-web/` 同技术栈)
- 部署路径:`apps/tenant-admin/`
- 后端复用 `apps/backend/` 的 FastAPI新增租户管理路由模块
### 登录体系
- 独立凭据:每个租户有若干管理员账号(用户名+密码)
- 租户级管理员:可管理租户下所有店铺
- 店铺级管理员:只能管理指定店铺
- 与系统管理后台(`apps/admin-web/`)完全隔离
### Excel 4 种模板
#### 1. 财务支出(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | 提交月份 |
| 支出类别 | 文本 | 是 | 房租/水电/物业/食品饮料进货/耗材/报销/固定人员工资/其他费用 |
| 金额 | 数值(2) | 是 | 支出金额 |
| 备注 | 文本 | 否 | |
主键:月份 + 支出类别
#### 2. 团购平台收入(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | |
| 平台名称 | 文本 | 是 | |
| 收入金额 | 数值(2) | 是 | |
| 备注 | 文本 | 否 | |
主键:月份 + 平台名称
#### 3. 助教奖罚(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 月份 | YYYY-MM | 是 | |
| 助教姓名 | 文本 | 是 | |
| 助教编号 | 文本 | 是 | |
| 类型 | 文本 | 是 | 扣款/奖金 |
| 金额 | 数值(2) | 是 | |
| 原因 | 文本 | 是 | |
主键:月份 + 助教姓名 + 助教编号 + 类型 + 原因(同一助教同月可多笔)
#### 4. 充值业绩归属(按月)
| 列名 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 充值日期 | YYYY-MM-DD | 是 | |
| 会员名称 | 文本 | 是 | |
| 充值金额 | 数值(2) | 是 | |
| 归属助教 | 文本 | 是 | |
| 奖励金额 | 数值(2) | 是 | |
主键:充值日期 + 会员名称 + 归属助教
### 冲突处理流程
```
上传 Excel → 后端解析+校验 → 返回校验结果
├── 无冲突 → 直接写入
└── 有冲突 → 返回冲突列表(旧值 vs 新值)
→ 前端展示 diff 交互
→ 用户逐条选择"替换"或"保留"
→ 提交确认 → 后端按选择写入
```
### 新建表
```
biz.salary_adjustments
- id, site_id, assistant_id, assistant_name, assistant_number
- salary_month, adjustment_type (deduction/bonus)
- amount, reason
- upload_batch_id, created_at
biz.excel_upload_log
- id, site_id, upload_type (expense/platform_income/salary_adj/recharge_commission)
- file_name, uploaded_by, row_count
- conflict_count, resolved_count
- status (pending/confirmed/failed)
- created_at
```
---
## 任务清单
- [ ] T1创建 `apps/tenant-admin/` 项目骨架React + Vite + Ant Design
- [ ] T2实现租户管理员登录独立凭据
- [ ] T3实现用户审核页面申请列表 + 状态筛选 + 关联建议 + 审核操作)
- [ ] T4实现用户管理页面用户列表 + 身份编辑 + 店铺归属)
- [ ] T5创建 `biz.salary_adjustments` + `biz.excel_upload_log`
- [ ] T6实现 Excel 上传后端(解析 + 校验 + 冲突检测)
- [ ] T7实现 Excel 上传前端(模板下载 + 上传 + diff 交互 + 确认)
- [ ] T8实现 4 种 Excel 模板的校验规则
- [ ] T9实现助教姓名+编号匹配校验(对照 `dim_assistant`