feat: 补全管理台功能 - 总览指标、搜索筛选、编辑模式、删除确认、全局日志查询

This commit is contained in:
2026-03-20 12:42:25 +08:00
parent 181cf09ad2
commit 0473a68dc2
19 changed files with 962 additions and 143 deletions

View 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** 数据包含不同用户、部门、类型、状态的日志记录,至少包含"成功"、"失败"、"警告"三种状态

View 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** 显示空状态组件,提示"暂无匹配日志"

View 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** 弹框关闭,列表不变

View File

@@ -0,0 +1,22 @@
## ADDED Requirements
### Requirement: 运营指标展示
管理台总览页 SHALL 展示平台核心运营指标数据,以卡片形式呈现。
#### Scenario: 指标卡片展示
- **WHEN** 用户打开管理台总览页
- **THEN** 页面顶部显示4个指标卡片用户总数、部门数量、项目数量、今日调用次数每个卡片包含数值和趋势变化值
### Requirement: 异常/待办事项提醒
管理台总览页 SHALL 展示平台异常事件和待办事项列表。
#### Scenario: 异常事项展示
- **WHEN** 用户打开管理台总览页
- **THEN** 页面左侧区域显示异常/待办事项列表,每条包含警告图标和事项描述(如定时任务执行失败、用户账号被禁用、项目处于禁用状态等)
### Requirement: 最近操作日志展示
管理台总览页 SHALL 展示最近的操作日志精简列表。
#### Scenario: 日志列表展示
- **WHEN** 用户打开管理台总览页
- **THEN** 页面右侧区域显示最近5条操作日志每条包含时间、用户、操作类型、状态标签

View File

@@ -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** 返回全局日志列表或筛选后的日志列表