library-picturebook-activity/frontend/TENANT_MANAGEMENT_GUIDE.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

220 lines
6.0 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.

# 租户管理页面使用指南
## 概述
租户管理页面已创建完成,只有超级租户才能访问和使用。该页面提供了完整的租户管理功能,包括租户的创建、编辑、删除和菜单分配。
## 功能特性
### 1. 租户列表
- 显示所有租户的基本信息
- 显示租户类型(超级租户/普通租户)
- 显示租户状态(有效/失效)
- 显示租户统计信息(用户数、角色数)
- 显示租户已分配的菜单
### 2. 创建租户
- 租户名称
- 租户编码(用于访问链接,必须唯一)
- 租户域名(可选,用于子域名访问)
- 租户描述
### 3. 编辑租户
- 修改租户基本信息
- 修改租户状态(有效/失效)
- 注意:租户编码创建后不可修改
### 4. 分配菜单
- 以树形结构展示所有可用菜单
- 支持多选
- 显示租户当前已分配的菜单
- 可以批量分配或取消分配菜单
### 5. 删除租户
- 删除租户及其所有关联数据
- 超级租户不能被删除
- 删除操作不可恢复
## 权限要求
所有操作都需要相应的权限:
- `tenant:create` - 创建租户
- `tenant:read` - 查看租户列表和详情
- `tenant:update` - 编辑租户和分配菜单
- `tenant:delete` - 删除租户
**注意**:只有超级租户的用户才拥有这些权限。
## 添加租户管理菜单
### 方式一:通过数据库直接添加
在数据库中执行以下SQL为超级租户添加租户管理菜单
```sql
-- 假设系统管理菜单的ID为某个值需要根据实际情况调整 parent_id
-- 假设系统管理菜单的ID为 2需要根据实际情况查询
INSERT INTO menus (name, path, icon, component, parent_id, permission, sort, valid_state, create_time, modify_time)
VALUES (
'租户管理',
'/system/tenants',
'TeamOutlined',
'system/tenants/Index',
2, -- 系统管理菜单的ID需要根据实际情况调整
'tenant:read',
7, -- 排序,放在其他系统管理菜单之后
1,
NOW(),
NOW()
);
```
### 方式二通过后端API添加
使用超级管理员账号登录后,通过菜单管理接口添加:
```bash
POST /api/menus
Authorization: Bearer <token>
X-Tenant-Code: super
{
"name": "租户管理",
"path": "/system/tenants",
"icon": "TeamOutlined",
"component": "system/tenants/Index",
"parentId": 2, // 系统管理菜单的ID
"permission": "tenant:read",
"sort": 7
}
```
### 方式三:更新初始化脚本
修改 `backend/scripts/init-menus.ts``backend/scripts/init-super-tenant.ts`,在菜单初始化时添加租户管理菜单。
## 页面访问
添加菜单后,超级租户的用户登录后可以在"系统管理"菜单下看到"租户管理"选项。
访问路径:`/system/tenants`
## 使用示例
### 创建新租户
1. 点击"新增租户"按钮
2. 填写租户信息:
- 租户名称:例如 "租户A"
- 租户编码:例如 "tenant-a"(必须唯一,只能包含小写字母、数字、下划线和连字符)
- 租户域名:例如 "tenant-a.example.com"(可选)
- 描述:租户的描述信息
3. 点击"确定"创建
### 为租户分配菜单
1. 在租户列表中,点击某个租户的"分配菜单"按钮
2. 在弹出的菜单树中,勾选要分配给该租户的菜单
3. 点击"确定"保存
**注意**
- 只有被分配的菜单才会在该租户的用户登录后显示
- 父菜单如果被分配,其子菜单也会自动显示(但需要单独分配才能访问)
### 编辑租户
1. 点击租户列表中的"编辑"按钮
2. 修改租户信息(租户编码不可修改)
3. 可以修改租户状态(有效/失效)
4. 点击"确定"保存
### 删除租户
1. 点击租户列表中的"删除"按钮
2. 确认删除操作
3. **警告**:删除租户会同时删除该租户的所有数据(用户、角色、权限等),此操作不可恢复
## 注意事项
1. **权限控制**:只有超级租户的用户才能看到和使用租户管理功能
2. **租户编码唯一性**:租户编码必须全局唯一,创建后不可修改
3. **超级租户保护**:超级租户不能被删除
4. **菜单分配**:菜单分配后,租户的用户登录后才能看到相应的菜单
5. **数据隔离**:每个租户的数据完全隔离,互不影响
## 故障排查
### 问题1看不到租户管理菜单
**原因**:菜单未添加到数据库,或当前用户不是超级租户
**解决**
- 确认菜单已添加到数据库
- 确认当前用户属于超级租户
- 确认用户有 `tenant:read` 权限
- 刷新页面或重新登录
### 问题2无法创建租户
**原因**:缺少 `tenant:create` 权限
**解决**
- 确认当前用户有创建租户的权限
- 联系超级管理员分配权限
### 问题3菜单分配不生效
**原因**:菜单分配后,用户需要重新登录才能看到新菜单
**解决**
- 让租户的用户重新登录
- 或者清除浏览器缓存后重新登录
## 技术实现
### 文件结构
```
frontend/src/
├── api/
│ └── tenants.ts # 租户API接口
├── views/
│ └── system/
│ └── tenants/
│ └── Index.vue # 租户管理页面
└── utils/
└── menu.ts # 菜单工具(已添加租户管理组件映射)
```
### API接口
所有API接口都在 `frontend/src/api/tenants.ts` 中定义:
- `getTenantsList()` - 获取租户列表
- `getTenantDetail()` - 获取租户详情
- `createTenant()` - 创建租户
- `updateTenant()` - 更新租户
- `deleteTenant()` - 删除租户
- `getTenantMenus()` - 获取租户菜单树
### 组件映射
`frontend/src/utils/menu.ts` 中添加了组件映射:
```typescript
"system/tenants/Index": () => import("@/views/system/tenants/Index.vue")
```
这样当菜单的 `component` 字段为 `system/tenants/Index` 时,系统会自动加载租户管理页面。