提交修改,后台管理页面bug修复,已经发布后台管理界面V1.0版本

This commit is contained in:
2025-12-25 17:56:09 +08:00
parent 845f1c6618
commit b1da484431
23 changed files with 614 additions and 257 deletions

View File

@@ -108,6 +108,22 @@
- **THEN** 显示抽屉式菜单(点击菜单按钮展开)
- **AND** 菜单包含:首页、会话记录管理、用户管理等功能入口
实现约束(移动端可靠性):
- 手机端抽屉菜单 SHOULD 使用 Element Plus `el-drawer` 自带的显示/隐藏机制
- 菜单 SHOULD 使用 Element Plus `el-menu`router 模式)
- 抽屉的打开 SHALL 由 Header 菜单按钮通过事件触发
- 不依赖 class + CSS transform 的方式实现“展开/收起”(避免出现 class 变化但 UI 无响应)
#### Scenario: 手机端点击按钮打开菜单(事件触发)
- **WHEN** 管理员在手机端点击 Header 的菜单按钮
- **THEN** 系统通过事件触发打开 `el-drawer`
- **AND** 抽屉内显示 `el-menu` 导航项
#### Scenario: 手机端点击菜单项自动收起
- **WHEN** 管理员在抽屉中点击任一菜单项
- **THEN** 路由跳转到对应页面
- **AND** 抽屉自动关闭
### Requirement: 模块化设计
前端管理网站 SHALL 采用模块化设计思路。
@@ -173,6 +189,23 @@
- **WHEN** 管理端提交包含多个筛选条件的查询请求
- **THEN** 系统返回同时满足所有条件的会话记录
### Requirement: 会话记录筛选(时间范围,移动端友好)
管理端会话记录页面 SHALL 提供便于移动端使用的时间范围筛选控件:
- 使用两个独立日期选择器:开始日期、结束日期
- 提供快捷范围选择器今天、最近3天、最近7天、最近30天
- 默认范围为最近7天
#### Scenario: 默认最近7天
- **WHEN** 管理员进入会话记录页面
- **THEN** 页面默认选中“最近7天”
- **AND** 查询请求携带对应的 `StartTime/EndTime`
#### Scenario: 移动端可用性
- **WHEN** 管理员在移动端访问会话记录页面
- **THEN** 快捷选择器与开始/结束日期选择器纵向排列
- **AND** 控件全宽显示,避免横向挤压
### Requirement: 查询用户列表(管理端)
系统 SHALL 提供接口返回可用用户列表,用于管理侧选择/筛选。
@@ -195,6 +228,25 @@
- **THEN** 返回已完善基础信息且未禁用的用户
- **AND** 结果按首次登录时间倒序排列
### Requirement: 首页统计(管理端)
系统 SHALL 提供聚合统计接口供管理端首页展示关键指标。
接口:`GET /api/Admin/QueryStats`
返回(成功):
- `success: true`
- `data`:包含以下字段的对象
- `ActiveUsers`:最近 7 天内 `UpdateTime` 有更新,且 `UserKey``PhoneNumber` 均不为空的用户数
- `TotalConversations``xcx_conversation` 总记录数
- `TodayNewConversations``xcx_conversation.CreateTime` 在“今天”内的记录数
- `TotalUsers``xcx_users``UserKey``PhoneNumber` 均不为空的用户总数
#### Scenario: 首页加载统计卡片
- **WHEN** 管理员进入首页Home
- **THEN** 前端调用 `GET /api/Admin/QueryStats`
- **AND** 将返回的四个数字分别展示到“系统统计卡片”的四个位置
## Known Limitations
- 当前接口未提供分页与导出能力(若管理端数据量很大,需在后续能力中补齐)。
- 当前未强制鉴权JWT 配置存在但未启用认证中间件/授权标注)。

View File

@@ -22,6 +22,7 @@
行为:
-`xcx_users` 不存在该 `UserKey`,系统 SHALL 自动插入一条用户记录(资料可为空)。
- 若用户 `IsDisabled = 1`,系统 SHALL 返回 `success: false`
-`xcx_users` 中已经存在该 `UserKey`,系统 SHALL 在登录流程中**更新该记录的 `UpdateTime` 为当前服务器时间**(用于“最近登录/活跃”判断)。
#### Scenario: 首次登录自动建档
- **WHEN** 提交的 `code` 能换取有效 `openid`
@@ -196,6 +197,23 @@
- **WHEN** Stream 中无可读消息
- **THEN** 返回 `success: true` 且数据为空
### Requirement: 管理端统计接口QueryStats
系统 SHALL 提供聚合统计接口 `GET /api/Admin/QueryStats`,返回单行 JSON`data` 对象字段如下:
- `ActiveUsers` (number):最近 7 天内 `UpdateTime` >= DATE_SUB(NOW(), INTERVAL 7 DAY) 且 `UserKey``PhoneNumber` 都不为空的用户数
- `TotalConversations` (number)`xcx_conversation` 的总记录数
- `TodayNewConversations` (number)`xcx_conversation``CreateTime >= CURDATE() AND CreateTime < DATE_ADD(CURDATE(), INTERVAL 1 DAY)` 的记录数
- `TotalUsers` (number)`xcx_users``UserKey``PhoneNumber` 都不为空的用户总数
响应(成功):
- `success: true`
- `data`: { `ActiveUsers`, `TotalConversations`, `TodayNewConversations`, `TotalUsers` }
行为/安全:
- 当前实现为匿名访问,建议在后续迭代中加上管理员鉴权(例如 `[Authorize(Roles = "Admin")]` 或策略)。
- 为保证查询性能,建议为 `xcx_users.UpdateTime``xcx_conversation.CreateTime` 建立适当索引(若数据量很大)。
## Known Limitations
- 当前 JWT 配置存在,但认证中间件与授权标注未启用;接口默认可匿名访问。
- `MessageType` 的过滤条件存在实现差异:部分接口仅在 `MessageType == 1` 时追加过滤(不覆盖 2