AdminGroupsPage UI 设计规范
自动生成时间: 2026-02-04
组件路径: workbench/NextUI.Workbench/Pages/Admin/AdminGroupsPage.razor
1. 组件概述
Admin Groups Page 是组管理页面,提供树形结构的组层次管理,支持添加、编辑、删除组,以及管理组成员和角色。
2. 页面结构
2.1 布局
┌────────────────────────────────────────────────────────────────┐
│ [Icon] Group Management │
│ Organize users into groups... │
├─────────────────┬──────────────────────────────────────────────┤
│ Groups [+] │ [Group Name] or "Select a Group" │
├─────────────────┼──────────────────────────────────────────────┤
│ ▸ Internal (15) │ [Members] [Roles] [Settings] │
│ ▸ Engineering │ ───────────────────────────── │
│ • Frontend │ [Content based on selected tab] │
│ • Backend │ │
│ • Design │ │
│ • External (10) │ │
└─────────────────┴──────────────────────────────────────────────┘
2.2 Grid 布局
- 左栏:
grid-column: span 1 (1/3 宽度)
- 右栏:
grid-column: span 2 (2/3 宽度)
3. 页面模式
| 模式 |
条件 |
显示内容 |
| No Selection |
_selectedGroup == null |
右栏显示 "Select a group" 提示 |
| Group Selected |
_selectedGroup != null |
右栏显示组详情 Tabs |
4. 组树结构
4.1 树节点组件
<SxStack Orientation="Horizontal" Class="group-item [selected]">
<SxIcon Name="folder|users" />
<SxTypography>GroupName</SxTypography>
<SxBadge>MemberCount</SxBadge>
</SxStack>
4.2 缩进规则
- 根级:
margin-left: 0
- 每层:
margin-left: depth * 16px
5. 详情面板 Tabs
5.1 Members Tab
┌────────────────────────────────────────────────────┐
│ [Search members...] [Add Member] │
├────────────────────────────────────────────────────┤
│ [Avatar] DisplayName [x] │
│ Email │
│ [Avatar] DisplayName [x] │
│ Email │
└────────────────────────────────────────────────────┘
5.2 Roles Tab
┌────────────────────────────────────────────────────┐
│ Roles assigned to this group will be inherited... │
├────────────────────────────────────────────────────┤
│ [Shield] role-name [x] │
│ [Shield] role-name [x] │
├────────────────────────────────────────────────────┤
│ [+ Add Role] │
└────────────────────────────────────────────────────┘
5.3 Settings Tab
┌────────────────────────────────────────────────────┐
│ Group Path │
│ /internal/engineering │
│ │
│ Description │
│ Engineering team │
│ │
│ Created │
│ 1/1/2026 12:00 PM │
└────────────────────────────────────────────────────┘
6. 状态变量
| 变量 |
类型 |
默认值 |
说明 |
_groups |
List<GroupNode> |
Demo 数据 |
组树数据 |
_selectedGroup |
GroupNode? |
null |
当前选中的组 |
_memberSearchText |
string |
"" |
成员搜索文本 |
_addGroupDialogOpen |
bool |
false |
添加组对话框 |
_editGroupDialogOpen |
bool |
false |
编辑组对话框 |
_deleteGroupDialogOpen |
bool |
false |
删除组对话框 |
_addMemberDialogOpen |
bool |
false |
添加成员对话框 |
_addRoleDialogOpen |
bool |
false |
添加角色对话框 |
7. 对话框规范
7.1 Add Group Dialog
| 字段 |
组件 |
说明 |
| Group Name |
SxInput |
必填 |
| Description |
SxTextArea |
可选,3 行 |
| Parent Group |
SxSelect |
可选,下拉选择父组 |
按钮: Cancel, Create Group
7.2 Edit Group Dialog
| 字段 |
组件 |
说明 |
| Group Name |
SxInput |
当前名称 |
| Description |
SxTextArea |
当前描述 |
按钮: Cancel, Save Changes
7.3 Delete Group Dialog
| 元素 |
组件 |
说明 |
| Error |
SxMessageBar |
"将删除所有子组,成员将被移除" |
| Confirmation |
SxTypography |
确认删除 |
按钮: Cancel, Delete Group (红色)
7.4 Add Member Dialog
| 元素 |
组件 |
说明 |
| 用户列表 |
SxCheckbox + SxAvatar |
选择要添加的用户 |
按钮: Cancel, Add Selected
7.5 Add Role Dialog
| 元素 |
组件 |
说明 |
| 角色列表 |
SxCheckbox |
选择要添加的角色 |
按钮: Cancel, Add Selected
8. 数据模型
8.1 GroupNode
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; }
}
8.2 MemberInfo
private class MemberInfo
{
public string UserId { get; set; }
public string DisplayName { get; set; }
public string Email { get; set; }
public string? AvatarUrl { get; set; }
}
9. 操作流程
9.1 添加组
Click [+] → Open Dialog → Fill Form → Create Group → Update Tree
9.2 编辑组
Select Group → Click [Edit] → Open Dialog → Modify → Save → Update
9.3 删除组
Select Group → Click [Delete] → Confirm Dialog → Delete → Update Tree → Clear Selection
9.4 添加成员
Select Group → Members Tab → Click [Add Member] → Select Users → Add → Update List
9.5 移除成员
Click Member [x] → Remove from List → Update Count
9.6 添加角色
Select Group → Roles Tab → Click [Add Role] → Select Roles → Add → Update List
9.7 移除角色
Click Role [x] → Remove from List
10. 典型使用场景 (Use Cases)
10.1 UC-1: 创建新组
- Admin 点击 Groups 卡片的 [+] 按钮
- 填写组名称 "Marketing"
- 选择父组 "Internal Users"
- 点击 "Create Group"
- 组树更新,显示新组
10.2 UC-2: 管理组成员
- Admin 选择 "Engineering" 组
- 切换到 Members tab
- 点击 "Add Member"
- 选择用户
- 点击 "Add Selected"
- 成员列表更新
10.3 UC-3: 为组分配角色
- Admin 选择组
- 切换到 Roles tab
- 点击 "Add Role"
- 选择 "developer" 角色
- 点击 "Add Selected"
- 角色继承给所有成员
10.4 UC-4: 删除组
- Admin 选择要删除的组
- 点击 "Delete" 按钮
- 查看警告信息
- 确认删除
- 组及子组被删除
11. 测试检查点
11.1 必须测试 (单元测试)
11.2 状态不变性测试
11.3 E2E 测试
12. CSS 样式
.group-item {
padding: var(--sx-spacing-xs) var(--sx-spacing-s);
border-radius: var(--sx-borderRadiusMedium);
cursor: pointer;
transition: background 0.2s;
}
.group-item:hover {
background: var(--sx-colorNeutralBackground3);
}
.group-item.selected {
background: var(--sx-colorBrandBackground1);
color: white;
}
.member-item, .role-item {
padding: var(--sx-spacing-s);
border-radius: var(--sx-borderRadiusMedium);
background: var(--sx-colorNeutralBackground2);
}
13. 规范合规检查
13.1 组件使用
13.2 样式
14. 已知问题 / TODO
内联 CSS 应提取到单独的样式文件 ✅ 已修复
- 组数据为硬编码 Demo 数据,需要连接 API
- 拖拽排序功能未实现
15. 变更历史
| 日期 |
变更内容 |
| 2026-02-04 |
初始生成 |
| 2026-02-04 |
修复: 提取内联样式到 AdminGroupsPage.razor.css,替换硬编码颜色为 Design Token |