feat: 完善工作台展示场景 - 新增 Modal/Toast 组件、EmptyState 使用、确认弹窗、筛选分页

- 新增 Modal 确认弹窗组件和 Toast 消息提示组件
- 在 SkillsPage、LogsPage、TasksPage、ProjectsPage 使用 EmptyState
- 为删除任务、取消订阅、移除成员、技能订阅添加确认弹窗
- 丰富聊天场景:代码展示、表格数据、多轮对话、错误提示
- 优化 ChatPage 布局,修复对话区域滚动问题
- 为 ProjectsPage 添加筛选卡片和分页组件
- 添加表单校验错误状态展示
- 同步 specs 到主目录
This commit is contained in:
2026-03-20 11:44:25 +08:00
parent 9f407c3aea
commit 181cf09ad2
17 changed files with 1147 additions and 229 deletions

View File

@@ -2,7 +2,7 @@ schema: spec-driven
context: |
- 交流、文档、注释、提交信息使用中文,代码命名使用英文
- 纯前端原型项目无后端交互供内部开发人员参考UI界面使用目标在于展示页面布局、样式和组件能力
- 纯前端展示原型项目(非功能原型)无后端交互供内部开发人员参考UI界面使用目标在于展示页面布局、样式和组件能力
- 允许轻量级交互展示(如表单验证、弹框),状态展示策略:不重叠的状态通过静态数据驱动展示,重叠/覆盖类状态(弹框、下拉、抽屉等)允许简单交互切换
- 示例数据应精心设计,展示不同的页面元素状态
- 不引入UI库使用当前SCSS样式方案

View File

@@ -0,0 +1,33 @@
## Purpose
定义聊天界面中各类对话场景的展示规范。
## Requirements
### Requirement: 代码展示场景
系统 SHALL 在聊天界面展示包含代码高亮的对话场景。
#### Scenario: 代码生成对话
- **WHEN** 用户在对话列表中选择"代码生成"场景
- **THEN** 页面展示包含代码块的对话内容,代码块具有语法高亮样式
### Requirement: 表格数据场景
系统 SHALL 在聊天界面展示包含表格数据的对话场景。
#### Scenario: 数据查询对话
- **WHEN** 用户在对话列表中选择"数据查询"场景
- **THEN** 页面展示包含表格的对话内容,表格清晰展示查询结果
### Requirement: 多轮对话场景
系统 SHALL 在聊天界面展示多轮连续对话场景。
#### Scenario: 连续问答对话
- **WHEN** 用户在对话列表中选择"多轮对话"场景
- **THEN** 页面展示至少 3 轮用户与助手的交替对话
### Requirement: 错误提示场景
系统 SHALL 在聊天界面展示包含错误提示的对话场景。
#### Scenario: 请求失败对话
- **WHEN** 用户在对话列表中选择"请求失败"场景
- **THEN** 页面展示助手返回错误提示的对话内容

View File

@@ -0,0 +1,37 @@
## Purpose
定义工作台各页面空状态的展示规范。
## Requirements
### Requirement: 技能市场空状态展示
当技能市场无搜索结果时,系统 SHALL 展示 EmptyState 组件。
#### Scenario: 搜索无结果
- **WHEN** 用户在技能市场搜索框输入关键词后点击查询
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配技能"提示
### Requirement: 日志查询空状态展示
当日志查询无匹配结果时,系统 SHALL 展示 EmptyState 组件。
#### Scenario: 筛选无结果
- **WHEN** 用户选择筛选条件后点击查询按钮
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配日志"提示
### Requirement: 定时任务空状态展示
当定时任务列表为空时,系统 SHALL 展示 EmptyState 组件。
#### Scenario: 无任务
- **WHEN** 用户进入定时任务页面
- **THEN** 页面展示 EmptyState 组件,显示"暂无定时任务"提示
### Requirement: 项目管理空状态展示
当项目成员列表为空或筛选无结果时,系统 SHALL 展示 EmptyState 组件。
#### Scenario: 无成员
- **WHEN** 用户进入项目管理页面且没有成员
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配成员"提示
#### Scenario: 筛选无结果
- **WHEN** 用户选择筛选条件后点击查询按钮
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配成员"提示

View File

@@ -0,0 +1,39 @@
## Purpose
定义确认弹窗Modal和消息提示Toast的展示规范。
## Requirements
### Requirement: 确认弹窗展示
系统 SHALL 提供 Modal 组件用于展示确认弹窗。
#### Scenario: 删除任务确认
- **WHEN** 用户点击定时任务的"删除"按钮
- **THEN** 页面展示确认弹窗,标题为"确认删除",内容为"确定要删除这个任务吗?"
#### Scenario: 取消订阅确认
- **WHEN** 用户点击技能详情页的"取消订阅"按钮
- **THEN** 页面展示确认弹窗,标题为"确认取消订阅",内容为"确定要取消订阅该技能吗?"
#### Scenario: 移除成员确认
- **WHEN** 用户点击项目成员的"移除"按钮
- **THEN** 页面展示确认弹窗,标题为"确认移除",内容为"确定要将该成员移出项目吗?"
#### Scenario: 技能市场订阅确认
- **WHEN** 用户点击技能卡片的"订阅"按钮
- **THEN** 页面展示确认弹窗,标题为"确认订阅",内容为"确定要订阅该技能吗?"
#### Scenario: 技能市场取消订阅确认
- **WHEN** 用户点击技能卡片的"已订阅"按钮
- **THEN** 页面展示确认弹窗,标题为"确认取消订阅",内容为"确定要取消订阅该技能吗?取消后将无法使用该技能。"
### Requirement: 消息提示展示
系统 SHALL 提供 Toast 组件用于展示操作结果提示。
#### Scenario: 保存成功提示
- **WHEN** 用户在账号管理页面点击"保存修改"按钮
- **THEN** 页面顶部展示绿色成功提示"保存成功"
#### Scenario: 操作失败提示
- **WHEN** 用户执行操作失败
- **THEN** 页面顶部展示红色错误提示"操作失败,请重试"

View File

@@ -0,0 +1,20 @@
## Purpose
定义表单校验错误状态的展示规范。
## Requirements
### Requirement: 表单校验错误状态展示
系统 SHALL 在表单中展示校验错误状态。
#### Scenario: 必填项为空
- **WHEN** 用户在修改密码表单中不输入当前密码直接点击"更新密码"
- **THEN** 当前密码输入框边框变红,下方显示"请输入当前密码"错误提示
#### Scenario: 邮箱格式错误
- **WHEN** 用户在个人信息表单中输入无效邮箱格式
- **THEN** 邮箱输入框边框变红,下方显示"请输入有效的邮箱地址"错误提示
#### Scenario: 密码不一致
- **WHEN** 用户在修改密码表单中输入两次不同的新密码
- **THEN** 确认密码输入框边框变红,下方显示"两次输入的密码不一致"错误提示