Admin Pages UI 设计规范
自动生成时间: 2026-02-04
页面路径: workbench/NextUI.Workbench/Pages/Admin/
1. 概述
Admin Pages 是 NextUI 的管理控制台页面集合,用于管理用户、角色、组、会话、客户端、配置文件和身份服务器等系统资源。
1.1 页面清单
| 页面 |
路由 |
功能 |
| AdminOverviewPage |
/admin, /admin/overview |
管理控制台首页,显示统计和快速操作 |
| AdminUsersPage |
/admin/users |
用户管理,CRUD 操作 |
| AdminUserDetailPage |
/admin/users/{UserId} |
用户详情,编辑、角色、会话管理 |
| AdminRolesPage |
/admin/roles |
角色管理,Realm/Client 角色 |
| AdminGroupsPage |
/admin/groups |
组管理,树形结构,成员管理 |
| AdminSessionsPage |
/admin/sessions |
会话管理,监控和终止会话 |
| AdminActivityPage |
/admin/activity |
活动日志,审计记录 |
| AdminClientsPage |
/admin/clients |
OAuth/OIDC 客户端管理 |
| AdminProfilesPage |
/admin/profiles |
SharedProfile 配置文件管理 |
| AdminServersPage |
/admin/servers |
身份服务器配置管理 |
1.2 通用布局
所有页面使用 AdminLayout 布局,包含:
- 左侧导航栏 (AdminSidebar)
- 顶部标题区 (SxSection + SxPageBox)
- 主内容区 (SxSection + SxPageBox)
2. AdminOverviewPage (管理控制台首页)
2.1 路由
2.2 页面模式
| 模式 |
条件 |
显示内容 |
| Authenticated + Admin |
CurrentUser.IsAuthenticated && CurrentUser.Roles.Contains("admin") |
完整控制台 |
| Authenticated + No Admin |
CurrentUser.IsAuthenticated && !CurrentUser.Roles.Contains("admin") |
Access Denied |
| Not Authenticated + Mock Mode |
!CurrentUser.IsAuthenticated && _identityMode == IdentityMode.Mock |
Demo Login 提示 |
| Not Authenticated + None Mode |
!CurrentUser.IsAuthenticated && _identityMode == IdentityMode.None |
Setup Wizard |
| Not Authenticated + OIDC |
!CurrentUser.IsAuthenticated && _identityMode == IdentityMode.OIDC |
Login 提示 |
2.3 主要组件
统计卡片 (Stats Grid)
| 卡片 |
图标 |
数据源 |
链接 |
| Active Servers |
server |
_serverCount |
/admin/servers |
| Total Users |
users |
_totalUsers |
/admin/users |
| System Health |
circle-check |
固定 100% |
/admin/health |
| Active Sessions |
clock |
当前用户会话状态 |
/admin/sessions |
点击头像/用户名显示下拉菜单:
- Profile →
/identity/shared-profile
- Settings →
/settings
- Logout →
IdentityService.LogoutAsync()
Mock Mode Warning Banner
当系统处于 Mock 模式时,显示 <SxMessageBar Intent="Info"> 警告横幅。
快速操作 (Quick Actions)
- Manage Users →
/admin/users
- Manage Roles →
/admin/roles
- Manage Groups →
/admin/groups
- Manage Clients →
/admin/clients
- User Profiles →
/admin/profiles
- Active Sessions →
/admin/sessions
- Manage Servers →
/admin/servers
Recent Activity Section
- 使用
<SxTimeline> 组件显示最近活动
- 右上角 "View All Activity" 链接到
/admin/activity
2.4 状态变量
private bool _statsLoading = true;
private int _serverCount;
private int _totalUsers;
private int _activeUsers;
private bool _wizardOpen;
private IdentityMode _identityMode = IdentityMode.None;
2.5 事件处理
| 事件 |
处理方法 |
CurrentUser.Changed |
OnUserChanged() |
ContextService.ContextChanged |
OnContextChanged() |
3. AdminUsersPage (用户管理)
3.1 路由
3.2 页面结构
- Server Selector - 选择身份服务器
- Statistics Cards - 4个统计卡片
- Total Users
- Active Users
- Admins
- Disabled
- User List -
<SxAdminUserListConnected> 组件
3.3 统计数据
| 字段 |
数据源 |
_totalUsers |
result.TotalCount |
_activeUsers |
result.Items.Count(u => u.Enabled) |
_disabledUsers |
result.Items.Count(u => !u.Enabled) |
_adminUsers |
result.Items.Count(u => u.Roles.Contains("admin")) |
4. AdminUserDetailPage (用户详情)
4.1 路由
4.2 参数
[Parameter] public string UserId { get; set; } = "";
4.3 页面结构
- Breadcrumb - Admin > Users > [UserName]
- Profile Card - 用户基本信息
- Roles Card - 角色和组
- Sessions Card - 活动会话
- Actions Card - 操作按钮
4.4 对话框
| 对话框 |
触发按钮 |
功能 |
| Edit Profile |
Edit Profile |
编辑 DisplayName, Email, AvatarUrl |
| Edit Roles |
Edit Roles |
选择用户角色 |
| Reset Password |
Reset Password |
发送密码重置邮件 |
| Disable User |
Disable User |
禁用用户 |
| Delete User |
Delete User |
删除用户 |
4.5 状态变量
private bool _loading = true;
private UserDetail? _user;
private List<SessionInfo> _sessions = new();
private List<RoleSelection> _availableRoles = new();
private bool _editDialogOpen;
private bool _editRolesDialogOpen;
private bool _resetPasswordDialogOpen;
private bool _disableDialogOpen;
private bool _deleteDialogOpen;
5. AdminRolesPage (角色管理)
5.1 路由
5.2 页面结构
使用 <SxAdminRoleListConnected> 组件,显示 Realm Roles。
5.3 功能
- 查看角色列表
- 添加新角色
- 编辑角色
- 删除角色
- 支持 Composite Roles
6. AdminGroupsPage (组管理)
6.1 路由
6.2 页面结构
左右分栏布局:
- 左栏 (1/3): 组树形结构
- 右栏 (2/3): 组详情 (Tabs: Members, Roles, Settings)
6.3 对话框
| 对话框 |
功能 |
| Add Group |
创建新组 (Name, Description, Parent) |
| Edit Group |
编辑组信息 |
| Delete Group |
删除组及子组 |
| Add Member |
添加组成员 |
| Add Role |
为组分配角色 |
6.4 数据模型
private class GroupNode
{
public string Id { get; set; }
public string Name { get; set; }
public string Path { get; set; }
public string? Description { get; set; }
public int MemberCount { get; set; }
public List<string> Roles { get; set; }
public List<MemberInfo> Members { get; set; }
public DateTime CreatedAt { get; set; }
public List<GroupNode> Children { get; set; }
}
7. AdminSessionsPage (会话管理)
7.1 路由
7.2 页面结构
- Statistics Cards
- Active Sessions
- Unique Users
- Desktop Sessions
- Mobile Sessions
- Session List -
<SxDataGrid> 显示会话
- Recent Activity -
<SxTimeline> 显示活动
7.3 DataGrid 列
| 列 |
类型 |
宽度 |
| Avatar |
Template |
50px |
| User |
Template (Name + Email) |
200px |
| Device |
Template (Icon + Type) |
150px |
| Browser |
Property |
120px |
| IP Address |
Property |
140px |
| Client |
Property |
150px |
| Started |
Template |
150px |
| Last Active |
Template |
130px |
| Actions |
Template |
80px |
7.4 对话框
| 对话框 |
功能 |
| Terminate Session |
终止单个会话 |
| Terminate All |
终止所有会话 |
8. AdminActivityPage (活动日志)
8.1 路由
8.2 页面结构
- Filter Bar - 搜索 + 类型筛选 + 刷新按钮
- Activity List - 活动记录列表 (使用
<SxCard> 卡片显示)
- Back Button - 返回概览
8.3 活动类型
| Type |
Icon |
Color |
CSS Class |
| neutral |
varies |
neutral |
activity-icon-neutral |
| success |
check |
success |
activity-icon-success |
| info |
shield-check |
info |
activity-icon-info |
| warning |
user-pen |
warning |
activity-icon-warning |
| danger |
triangle-exclamation |
danger |
activity-icon-danger |
8.4 活动项结构
┌─────────────────────────────────────────────────────────────┐
│ [Icon] Activity Message Time Ago │
│ [Badge: Type] User: username │
└─────────────────────────────────────────────────────────────┘
8.5 自定义 CSS 类
活动图标使用自定义 CSS 类控制颜色:
activity-icon-* - 使用 Design Token 颜色变量
9. AdminClientsPage (客户端管理)
9.1 路由
9.2 页面结构
- Server Selector - 选择 Keycloak 服务器
- Statistics Cards
- Total Clients
- Active
- Confidential
- Public
- Client List -
<SxAdminClientListConnected> 组件
9.3 要求
10. AdminProfilesPage (配置文件管理)
10.1 路由
10.2 页面结构
- Server Status Card - 显示 API 连接状态
- Profiles List -
<SxDataGrid> 显示配置文件
- Statistics Cards
- Total Profiles
- Light Theme
- Dark Theme
- Languages
10.3 DataGrid 列
| 列 |
内容 |
| Avatar |
SxAvatar |
| User ID |
Property |
| Display Name |
Property |
| Language |
Badge |
| Theme |
Badge |
| Updated |
Timestamp |
| Actions |
Edit/Delete |
10.4 对话框
| 对话框 |
字段 |
| Create Profile |
UserId, DisplayName, AvatarUrl, Language, Theme |
| Edit Profile |
DisplayName, AvatarUrl, Language, Theme, Timezone |
| Delete Profile |
确认删除 |
11. AdminServersPage (服务器管理)
11.1 路由
11.2 页面结构
- Server List -
<SxAdminServerList> 组件
- Status Message - 操作反馈
- Help Section
- Supported Providers (Keycloak, SharedProfile API, NextUI Application)
- Quick Start Guide (4 步骤)
11.3 事件回调
| 事件 |
处理方法 |
| OnServerSelected |
显示成功消息 |
| OnServerAdded |
显示成功消息 |
| OnServerEdited |
显示成功消息 |
| OnServerDeleted |
显示警告消息 |
12. 通用授权模式
所有页面使用 <SxAuthGuard> 组件保护:
<SxAuthGuard Roles="@(new[] { "admin" })" RedirectToLogin="false">
<ChildContent>
<!-- 授权内容 -->
</ChildContent>
<UnauthorizedContent>
<!-- 未授权内容 -->
</UnauthorizedContent>
</SxAuthGuard>
12.1 未授权内容模式
| 场景 |
显示内容 |
| 未登录 |
"Access Denied" + LoginButton |
| 已登录但无权限 |
"Access Denied" + 当前用户信息 + 角色列表 |
13. 测试检查点
13.1 E2E 测试 (已实现)
13.2 单元测试 (bUnit)
关联组件的测试:
14. 规范合规检查
14.1 组件使用
14.2 样式
15. 已知问题 / TODO
AdminGroupsPage 内联样式应提取到单独的 CSS 文件 ✅ 已修复
- AdminActivityPage 活动数据为硬编码 demo 数据
- AdminUserDetailPage 用户数据来自 DemoUsers,需要连接真实 API
- AdminSessionsPage 会话数据为模拟数据
16. 变更历史
| 日期 |
变更内容 |
| 2026-02-04 |
初始生成,包含 10 个管理页面规范 |
| 2026-02-04 |
UI Review: 添加用户菜单、Mock Mode Banner、Recent Activity Section、Activity CSS 类 |