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