# 租户管理页面使用指南 ## 概述 租户管理页面已创建完成,只有超级租户才能访问和使用。该页面提供了完整的租户管理功能,包括租户的创建、编辑、删除和菜单分配。 ## 功能特性 ### 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 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` 时,系统会自动加载租户管理页面。