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

6.0 KiB
Raw Permalink Blame History

租户管理页面使用指南

概述

租户管理页面已创建完成,只有超级租户才能访问和使用。该页面提供了完整的租户管理功能,包括租户的创建、编辑、删除和菜单分配。

功能特性

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.tsbackend/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 中添加了组件映射:

"system/tenants/Index": () => import("@/views/system/tenants/Index.vue")

这样当菜单的 component 字段为 system/tenants/Index 时,系统会自动加载租户管理页面。