AdminUsersPage UI 设计规范
自动生成时间: 2026-02-05 组件路径: workbench/NextUI.Workbench/Pages/Admin/AdminUsersPage.razor
1. 组件概述
用户管理页面,提供用户列表查看、用户统计、服务器切换等功能。页面包含权限保护,仅管理员可访问。
路由: /admin/users
布局: AdminLayout
2. 页面结构
┌─────────────────────────────────────────────────────────────┐
│ Header Section (Background: colorNeutralBackground2) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ [Icon: users] User Management │ │
│ │ Manage system users, roles, permissions │ │
│ └─────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Content Section │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Server Selector Card (Flat) │ │
│ │ [Icon: server] Identity Server: [SxAdminServerSelector] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────┬─────────┬─────────┬─────────┐ │
│ │ Total │ Active │ Admins │ Disabled│ Statistics │
│ │ Users │ Users │ │ │ (4 columns) │
│ │ N │ N │ N │ N │ │
│ └─────────┴─────────┴─────────┴─────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SxAdminUserListConnected │ │
│ │ (PageSize="20") │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
3. 组件依赖
| 组件 | 用途 |
|---|---|
SxAuthGuard |
权限保护,要求 "admin" 角色 |
SxSection |
页面分区 |
SxPageBox |
页面内容容器 |
SxStack |
布局容器 |
SxIcon |
图标显示 |
SxTypography |
文字排版 |
SxCard |
卡片容器 |
SxGrid |
网格布局 |
SxProgressRing |
加载指示器 |
SxAdminServerSelector |
服务器选择器 |
SxAdminUserListConnected |
用户列表(连接组件) |
SxLoginButton |
登录按钮 |
SxBadge |
角色标签 |
4. 状态管理
4.1 状态变量
| 变量 | 类型 | 描述 |
|---|---|---|
_selectedServer |
AdminServer? |
当前选中的服务器 |
_statsLoading |
bool |
统计数据加载中 |
_totalUsers |
int |
总用户数 |
_activeUsers |
int |
活跃用户数 |
_adminUsers |
int |
管理员用户数 |
_disabledUsers |
int |
禁用用户数 |
4.2 依赖注入
| 服务 | 用途 |
|---|---|
ICurrentUser |
当前用户信息 |
AdminContextService |
管理上下文(服务器切换) |
IAdminProviderFactory |
创建管理提供者 |
5. 生命周期
5.1 OnInitializedAsync
- 订阅
CurrentUser.Changed事件 - 订阅
ContextService.ContextChanged事件 - 初始化
ContextService(如未初始化) - 设置
_selectedServer为当前服务器 - 如果用户已认证且是管理员,加载统计数据
5.2 Dispose
- 取消订阅
CurrentUser.Changed事件 - 取消订阅
ContextService.ContextChanged事件
6. 事件处理
6.1 OnUserChanged
当用户状态变化时:
- 如果已认证且是管理员:重新加载统计
- 否则:清零统计数据
6.2 OnContextChanged
当上下文(服务器)变化时:
- 更新
_selectedServer - 重新加载统计数据
6.3 LoadStatsAsync
加载用户统计数据:
- 检查当前服务器是否存在
- 设置加载状态
- 通过 Provider 获取用户列表(PageSize=1000)
- 计算各项统计
- 处理异常情况
7. 权限控制
7.1 授权内容
- 要求角色:
admin - 未授权时不重定向到登录页 (
RedirectToLogin="false")
7.2 未授权内容
显示访问拒绝界面:
- 图标: users (4rem, colorNeutralForeground3)
- 标题: "Access Denied"
- 说明文字
- 未登录时显示
SxLoginButton - 已登录时显示当前用户信息和角色
8. 典型使用场景 (Use Cases)
8.1 UC-1: 管理员查看用户列表
前置条件: 用户已登录且具有 admin 角色
步骤:
- 导航到
/admin/users - 页面加载,显示统计卡片(加载中)
- 统计数据加载完成,显示数字
- 用户列表显示在下方
预期结果: 显示完整的用户管理界面
8.2 UC-2: 切换服务器
前置条件: 用户已登录且具有 admin 角色
步骤:
- 点击服务器选择器
- 选择另一个服务器
- 页面刷新统计数据
- 用户列表更新为新服务器的数据
预期结果: 统计和列表反映新服务器的数据
8.3 UC-3: 未授权访问
前置条件: 用户未登录或不是管理员
步骤:
- 导航到
/admin/users - 显示访问拒绝界面
预期结果:
- 未登录: 显示登录按钮
- 已登录非管理员: 显示当前用户和角色信息
8.4 UC-4: 加载失败处理
前置条件: 服务器不可用或网络错误
步骤:
- 导航到
/admin/users - 统计数据加载失败
预期结果: 统计数字显示为 0,不显示错误信息
9. 状态不变性测试 (State Invariants)
9.1 服务器切换时的状态
| 操作 | 应该发生 | 不应影响 |
|---|---|---|
| 切换服务器 | 重新加载统计 | 页面布局 |
| 用户登出 | 清零统计 | 服务器选择 |
| 用户登入 | 加载统计 | 已选服务器 |
9.2 加载状态
- 加载中时显示
SxProgressRing - 加载完成后显示数字
- 加载失败时显示 0
10. 测试检查点
10.1 必须测试 (单元测试)
- 页面初始渲染正确
- 管理员可以看到完整界面
- 非管理员看到访问拒绝界面
- 统计数据加载状态显示正确
- 服务器切换触发数据重载
10.2 边界情况
- 没有服务器配置时的处理
- 服务器返回空用户列表
- 网络错误时的处理
10.3 E2E 测试
- 完整的用户管理流程
- 服务器切换流程
- 权限控制流程
11. 规范合规检查
11.1 组件使用 ✅
- 使用
SxTypography而非裸文本 - 使用
SxStack进行布局 - 使用
SxCard作为容器 - 使用
SxIcon显示图标 - 使用
SxButton/SxLoginButton作为按钮
11.2 样式检查
- 使用 Design Token 颜色 (
--sx-colorBrandForeground1等) - 使用 Design Token 间距 (
--sx-spacing-xxl) - 部分内联样式可优化为 CSS 类
12. 已知问题 / TODO
- 统计数据加载 PageSize=1000 可能在大量用户时性能不佳
- 缺少错误提示 UI
- 缺少刷新按钮
13. 变更历史
| 日期 | 变更 | 作者 |
|---|---|---|
| 2026-02-05 | 初始规范文档生成 | Claude |