feat: 补全管理台功能 - 总览指标、搜索筛选、编辑模式、删除确认、全局日志查询
This commit is contained in:
27
openspec/specs/admin-data-layer/spec.md
Normal file
27
openspec/specs/admin-data-layer/spec.md
Normal file
@@ -0,0 +1,27 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 管理台静态数据文件
|
||||
管理台 SHALL 有独立的数据文件,提供部门、用户、项目、总览指标、全局日志的模拟数据。
|
||||
|
||||
#### Scenario: 数据文件结构
|
||||
- **WHEN** 项目加载
|
||||
- **THEN** `src/data/adminData.js` 导出 adminDepartments(部门列表)、adminUsers(用户列表)、adminProjects(项目列表)、adminOverview(总览指标和异常数据)、adminLogs(全局日志数据)
|
||||
|
||||
### Requirement: 示例数据展示多种状态
|
||||
管理台数据 SHALL 包含不同状态的示例记录,以展示页面的各种展示状态。
|
||||
|
||||
#### Scenario: 部门数据状态
|
||||
- **WHEN** 加载部门数据
|
||||
- **THEN** 数据包含"正常"和"禁用"两种状态的部门记录
|
||||
|
||||
#### Scenario: 用户数据状态
|
||||
- **WHEN** 加载用户数据
|
||||
- **THEN** 数据包含"管理员"、"开发者"、"成员"三种角色,以及"正常"和"禁用"两种状态的用户记录
|
||||
|
||||
#### Scenario: 项目数据状态
|
||||
- **WHEN** 加载项目数据
|
||||
- **THEN** 数据包含"正常"和"禁用"两种状态的项目记录
|
||||
|
||||
#### Scenario: 日志数据状态
|
||||
- **WHEN** 加载全局日志数据
|
||||
- **THEN** 数据包含不同用户、部门、类型、状态的日志记录,至少包含"成功"、"失败"、"警告"三种状态
|
||||
43
openspec/specs/admin-global-logs/spec.md
Normal file
43
openspec/specs/admin-global-logs/spec.md
Normal file
@@ -0,0 +1,43 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 全局日志列表展示
|
||||
管理台日志查询页 SHALL 展示平台全局系统操作日志列表。
|
||||
|
||||
#### Scenario: 日志列表渲染
|
||||
- **WHEN** 用户点击侧边栏"日志查询"导航项
|
||||
- **THEN** 页面显示日志列表表格,列包含时间、用户、部门、类型、操作、状态、详情
|
||||
|
||||
### Requirement: 多维度日志筛选
|
||||
管理台日志查询页 SHALL 支持按关键词、用户、部门、类型、状态、时间范围进行筛选。
|
||||
|
||||
#### Scenario: 关键词筛选
|
||||
- **WHEN** 用户在关键词输入框输入文本并点击查询
|
||||
- **THEN** 日志列表仅显示操作或详情中包含该关键词的记录
|
||||
|
||||
#### Scenario: 用户筛选
|
||||
- **WHEN** 用户选择某个用户并点击查询
|
||||
- **THEN** 日志列表仅显示该用户的操作记录
|
||||
|
||||
#### Scenario: 部门筛选
|
||||
- **WHEN** 用户选择某个部门并点击查询
|
||||
- **THEN** 日志列表仅显示该部门成员的操作记录
|
||||
|
||||
#### Scenario: 类型筛选
|
||||
- **WHEN** 用户选择某种类型(登录、实例操作、技能、配置修改、文件上传)并点击查询
|
||||
- **THEN** 日志列表仅显示该类型的记录
|
||||
|
||||
#### Scenario: 状态筛选
|
||||
- **WHEN** 用户选择某种状态(成功、失败、警告)并点击查询
|
||||
- **THEN** 日志列表仅显示该状态的记录
|
||||
|
||||
#### Scenario: 时间范围筛选
|
||||
- **WHEN** 用户设置开始日期和结束日期并点击查询
|
||||
- **THEN** 日志列表仅显示时间范围内的记录
|
||||
|
||||
#### Scenario: 筛选重置
|
||||
- **WHEN** 用户点击重置按钮
|
||||
- **THEN** 所有筛选条件清空,日志列表恢复显示全部记录
|
||||
|
||||
#### Scenario: 无匹配结果
|
||||
- **WHEN** 用户筛选后无匹配日志
|
||||
- **THEN** 显示空状态组件,提示"暂无匹配日志"
|
||||
86
openspec/specs/admin-list-crud/spec.md
Normal file
86
openspec/specs/admin-list-crud/spec.md
Normal file
@@ -0,0 +1,86 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 列表搜索筛选生效
|
||||
部门管理、用户管理、项目管理列表页 SHALL 支持按关键词和其他条件筛选列表数据。
|
||||
|
||||
#### Scenario: 部门关键词搜索
|
||||
- **WHEN** 用户在部门列表页关键词输入框输入文本并点击查询
|
||||
- **THEN** 列表仅显示部门名称或描述中包含该关键词的记录
|
||||
|
||||
#### Scenario: 部门状态筛选
|
||||
- **WHEN** 用户在部门列表页选择某个状态(正常/禁用)并点击查询
|
||||
- **THEN** 列表仅显示该状态的部门记录
|
||||
|
||||
#### Scenario: 部门筛选重置
|
||||
- **WHEN** 用户在部门列表页点击重置按钮
|
||||
- **THEN** 筛选条件清空,列表恢复显示全部部门
|
||||
|
||||
#### Scenario: 用户关键词搜索
|
||||
- **WHEN** 用户在用户列表页关键词输入框输入文本并点击查询
|
||||
- **THEN** 列表仅显示姓名或邮箱中包含该关键词的记录
|
||||
|
||||
#### Scenario: 用户部门筛选
|
||||
- **WHEN** 用户在用户列表页选择某个部门并点击查询
|
||||
- **THEN** 列表仅显示该部门的用户记录
|
||||
|
||||
#### Scenario: 用户状态筛选
|
||||
- **WHEN** 用户在用户列表页选择某个状态并点击查询
|
||||
- **THEN** 列表仅显示该状态的用户记录
|
||||
|
||||
#### Scenario: 用户筛选重置
|
||||
- **WHEN** 用户在用户列表页点击重置按钮
|
||||
- **THEN** 筛选条件清空,列表恢复显示全部用户
|
||||
|
||||
#### Scenario: 项目关键词搜索
|
||||
- **WHEN** 用户在项目列表页关键词输入框输入文本并点击查询
|
||||
- **THEN** 列表仅显示项目名称或描述中包含该关键词的记录
|
||||
|
||||
#### Scenario: 项目状态筛选
|
||||
- **WHEN** 用户在项目列表页选择某个状态并点击查询
|
||||
- **THEN** 列表仅显示该状态的项目记录
|
||||
|
||||
#### Scenario: 项目筛选重置
|
||||
- **WHEN** 用户在项目列表页点击重置按钮
|
||||
- **THEN** 筛选条件清空,列表恢复显示全部项目
|
||||
|
||||
### Requirement: 编辑功能复用新增页
|
||||
部门管理、用户管理、项目管理的编辑功能 SHALL 复用新增页面,通过编辑模式预填表单数据。
|
||||
|
||||
#### Scenario: 进入部门编辑模式
|
||||
- **WHEN** 用户点击某个部门的"编辑"按钮
|
||||
- **THEN** 页面切换到新增部门表单,表单标题显示"编辑部门",表单字段预填该部门的现有数据
|
||||
|
||||
#### Scenario: 进入用户编辑模式
|
||||
- **WHEN** 用户点击某个用户的"编辑"按钮
|
||||
- **THEN** 页面切换到新增用户表单,表单标题显示"编辑用户",表单字段预填该用户的现有数据
|
||||
|
||||
#### Scenario: 进入项目编辑模式
|
||||
- **WHEN** 用户点击某个项目的"编辑"按钮
|
||||
- **THEN** 页面切换到新增项目表单,表单标题显示"编辑项目",表单字段预填该项目的现有数据
|
||||
|
||||
#### Scenario: 编辑页返回
|
||||
- **WHEN** 用户在编辑页面点击取消按钮
|
||||
- **THEN** 返回对应的列表页
|
||||
|
||||
### Requirement: 删除操作确认
|
||||
部门管理、用户管理、项目管理的删除操作 SHALL 弹出确认弹框。
|
||||
|
||||
#### Scenario: 部门删除确认
|
||||
- **WHEN** 用户点击某个部门的"删除"按钮
|
||||
- **THEN** 弹出确认弹框,显示"确定要删除"{部门名称}"吗?此操作不可撤销。"
|
||||
|
||||
#### Scenario: 用户删除确认
|
||||
- **WHEN** 用户点击某个用户的"删除"按钮
|
||||
- **THEN** 弹出确认弹框,显示"确定要删除用户"{用户姓名}"吗?此操作不可撤销。"
|
||||
|
||||
#### Scenario: 项目删除确认
|
||||
- **WHEN** 用户点击某个项目的"删除"按钮
|
||||
- **THEN** 弹出确认弹框,显示"确定要删除项目"{项目名称}"吗?此操作不可撤销。"
|
||||
|
||||
#### Scenario: 确认删除
|
||||
- **WHEN** 用户在确认弹框中点击删除按钮
|
||||
- **THEN** 弹框关闭,该记录从列表中移除
|
||||
|
||||
#### Scenario: 取消删除
|
||||
- **WHEN** 用户在确认弹框中点击取消按钮
|
||||
- **THEN** 弹框关闭,列表不变
|
||||
22
openspec/specs/admin-overview/spec.md
Normal file
22
openspec/specs/admin-overview/spec.md
Normal file
@@ -0,0 +1,22 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 运营指标展示
|
||||
管理台总览页 SHALL 展示平台核心运营指标数据,以卡片形式呈现。
|
||||
|
||||
#### Scenario: 指标卡片展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面顶部显示4个指标卡片:用户总数、部门数量、项目数量、今日调用次数,每个卡片包含数值和趋势变化值
|
||||
|
||||
### Requirement: 异常/待办事项提醒
|
||||
管理台总览页 SHALL 展示平台异常事件和待办事项列表。
|
||||
|
||||
#### Scenario: 异常事项展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面左侧区域显示异常/待办事项列表,每条包含警告图标和事项描述(如定时任务执行失败、用户账号被禁用、项目处于禁用状态等)
|
||||
|
||||
### Requirement: 最近操作日志展示
|
||||
管理台总览页 SHALL 展示最近的操作日志精简列表。
|
||||
|
||||
#### Scenario: 日志列表展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面右侧区域显示最近5条操作日志,每条包含时间、用户、操作类型、状态标签
|
||||
@@ -7,15 +7,16 @@
|
||||
## Requirements
|
||||
|
||||
### Requirement: 统一数据访问接口
|
||||
系统 SHALL 提供 api 服务对象,包含按功能模块划分的数据访问方法,作为所有数据访问的统一入口。
|
||||
数据访问层 SHALL 提供按功能模块划分的数据访问方法,所有数据获取通过 API 层进行。所有数据获取通过 API 层进行,便于未来对接后端服务。API 层为纯函数,返回静态数据或对静态数据的引用,不涉及网络请求。
|
||||
|
||||
#### Scenario: api.user 模块提供用户信息访问
|
||||
- **WHEN** 调用 api.user.getInfo()
|
||||
- **THEN** 系统返回用户信息对象(包含 name、avatar、role 等字段)
|
||||
|
||||
#### Scenario: api.skills 模块提供技能数据访问
|
||||
- **WHEN** 调用 api.skills.list()
|
||||
- **THEN** 系统返回所有技能列表数组
|
||||
#### Scenario: 技能数据访问
|
||||
- **WHEN** 调用 `api.skills.list()`
|
||||
- **THEN** 返回技能列表数据
|
||||
- **AND** 返回类型为数组,每个元素包含技能基本信息(id, name, description, category, author, icon, usageCount, rating, subscribed)
|
||||
|
||||
#### Scenario: api.skills 支持按 ID 查询单个技能
|
||||
- **WHEN** 调用 api.skills.getById(skillId)
|
||||
@@ -29,9 +30,17 @@
|
||||
- **WHEN** 调用 api.conversations.getScene(sceneName)
|
||||
- **THEN** 系统返回对应场景的 HTML 内容字符串
|
||||
|
||||
#### Scenario: api.logs 模块支持筛选查询
|
||||
- **WHEN** 调用 api.logs.list(filters)
|
||||
- **THEN** 系统根据 filters 参数(用户、类型、状态)筛选并返回日志列表
|
||||
#### Scenario: 日志数据访问
|
||||
- **WHEN** 调用 `api.logs.list()` 或 `api.logs.filter({ user, type, status })`
|
||||
- **THEN** 返回日志列表或筛选后的日志列表
|
||||
|
||||
#### Scenario: 定时任务数据访问
|
||||
- **WHEN** 调用 `api.tasks.list()` 或 `api.tasks.getById(id)`
|
||||
- **THEN** 返回任务列表或单个任务详情
|
||||
|
||||
#### Scenario: 项目成员数据访问
|
||||
- **WHEN** 调用 `api.members.list()` 或 `api.members.getById(id)`
|
||||
- **THEN** 返回成员列表或单个成员信息
|
||||
|
||||
### Requirement: 数据层与静态文件分离
|
||||
系统 SHALL 将数据访问逻辑与静态数据文件分离,便于后续对接真实 API。
|
||||
@@ -47,3 +56,26 @@
|
||||
#### Scenario: API 层提供一致的返回格式
|
||||
- **WHEN** 调用 API 层方法
|
||||
- **THEN** 系统返回符合约定格式的数据(如对象、数组),无论底层存储格式如何
|
||||
|
||||
### Requirement: 管理台数据 API
|
||||
数据访问层 SHALL 提供管理台相关的数据访问方法,覆盖总览、部门、用户、项目、全局日志。
|
||||
|
||||
#### Scenario: 总览数据访问
|
||||
- **WHEN** 调用 `api.admin.getOverview()`
|
||||
- **THEN** 返回总览数据对象,包含用户总数、部门数量、项目数量、今日调用次数、异常事项列表、最近操作日志
|
||||
|
||||
#### Scenario: 部门数据访问
|
||||
- **WHEN** 调用 `api.admin.departments.list()` 或 `api.admin.departments.getById(id)`
|
||||
- **THEN** 返回部门列表或单个部门信息
|
||||
|
||||
#### Scenario: 用户数据访问
|
||||
- **WHEN** 调用 `api.admin.users.list()` 或 `api.admin.users.getById(id)`
|
||||
- **THEN** 返回用户列表或单个用户信息
|
||||
|
||||
#### Scenario: 项目数据访问
|
||||
- **WHEN** 调用 `api.admin.projects.list()` 或 `api.admin.projects.getById(id)`
|
||||
- **THEN** 返回项目列表或单个项目信息
|
||||
|
||||
#### Scenario: 全局日志数据访问
|
||||
- **WHEN** 调用 `api.admin.logs.list()` 或 `api.admin.logs.filter(filters)`
|
||||
- **THEN** 返回全局日志列表或筛选后的日志列表
|
||||
|
||||
Reference in New Issue
Block a user