一、超管端设计优化 - 文档管理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>
6.0 KiB
6.0 KiB
租户管理页面使用指南
概述
租户管理页面已创建完成,只有超级租户才能访问和使用。该页面提供了完整的租户管理功能,包括租户的创建、编辑、删除和菜单分配。
功能特性
1. 租户列表
- 显示所有租户的基本信息
- 显示租户类型(超级租户/普通租户)
- 显示租户状态(有效/失效)
- 显示租户统计信息(用户数、角色数)
- 显示租户已分配的菜单
2. 创建租户
- 租户名称
- 租户编码(用于访问链接,必须唯一)
- 租户域名(可选,用于子域名访问)
- 租户描述
3. 编辑租户
- 修改租户基本信息
- 修改租户状态(有效/失效)
- 注意:租户编码创建后不可修改
4. 分配菜单
- 以树形结构展示所有可用菜单
- 支持多选
- 显示租户当前已分配的菜单
- 可以批量分配或取消分配菜单
5. 删除租户
- 删除租户及其所有关联数据
- 超级租户不能被删除
- 删除操作不可恢复
权限要求
所有操作都需要相应的权限:
tenant:create- 创建租户tenant:read- 查看租户列表和详情tenant:update- 编辑租户和分配菜单tenant:delete- 删除租户
注意:只有超级租户的用户才拥有这些权限。
添加租户管理菜单
方式一:通过数据库直接添加
在数据库中执行以下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添加
使用超级管理员账号登录后,通过菜单管理接口添加:
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
使用示例
创建新租户
- 点击"新增租户"按钮
- 填写租户信息:
- 租户名称:例如 "租户A"
- 租户编码:例如 "tenant-a"(必须唯一,只能包含小写字母、数字、下划线和连字符)
- 租户域名:例如 "tenant-a.example.com"(可选)
- 描述:租户的描述信息
- 点击"确定"创建
为租户分配菜单
- 在租户列表中,点击某个租户的"分配菜单"按钮
- 在弹出的菜单树中,勾选要分配给该租户的菜单
- 点击"确定"保存
注意:
- 只有被分配的菜单才会在该租户的用户登录后显示
- 父菜单如果被分配,其子菜单也会自动显示(但需要单独分配才能访问)
编辑租户
- 点击租户列表中的"编辑"按钮
- 修改租户信息(租户编码不可修改)
- 可以修改租户状态(有效/失效)
- 点击"确定"保存
删除租户
- 点击租户列表中的"删除"按钮
- 确认删除操作
- 警告:删除租户会同时删除该租户的所有数据(用户、角色、权限等),此操作不可恢复
注意事项
- 权限控制:只有超级租户的用户才能看到和使用租户管理功能
- 租户编码唯一性:租户编码必须全局唯一,创建后不可修改
- 超级租户保护:超级租户不能被删除
- 菜单分配:菜单分配后,租户的用户登录后才能看到相应的菜单
- 数据隔离:每个租户的数据完全隔离,互不影响
故障排查
问题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 中添加了组件映射:
"system/tenants/Index": () => import("@/views/system/tenants/Index.vue")
这样当菜单的 component 字段为 system/tenants/Index 时,系统会自动加载租户管理页面。