refactor: 整理规范文件 - 合并冗余、优化命名(32→20)
- 删除 12 个规范:空目录、重复规范、被吸收的子集规范 - 合并 4 组规范:管理台页面、开发台页面、布局体系、组件+反馈 - 重命名 8 个规范:统一平台前缀、暴露可搜索关键词、消除语义冲突 - 新增 docs/规范整理.md:规范审查流程提示词模板
This commit is contained in:
106
docs/规范整理.md
Normal file
106
docs/规范整理.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 规范文件整理流程
|
||||
|
||||
## 使用方式
|
||||
|
||||
将下方提示词完整复制给 AI 工具,即可启动一次规范文件的全面审查和整理。
|
||||
|
||||
---
|
||||
|
||||
## 提示词
|
||||
|
||||
```
|
||||
请对 openspec/specs/ 下的所有规范文件进行审查和整理,按以下流程执行:
|
||||
|
||||
## 第一步:全面阅读
|
||||
|
||||
1. 逐个读取 openspec/specs/ 下每个子目录的 spec.md,理解每个规范的覆盖范围
|
||||
2. 读取项目源码(src/ 目录),理解实际代码实现
|
||||
3. 读取 openspec/config.yaml,了解项目约束和规范
|
||||
|
||||
## 第二步:对比分析
|
||||
|
||||
将每个规范与实际代码对比,按以下维度逐项检查:
|
||||
|
||||
### A. 过时检查
|
||||
- 规范描述的功能/组件/样式是否在当前代码中仍然存在
|
||||
- 规范引用的文件路径、类名、API 接口是否与代码一致
|
||||
- 规范描述的交互流程是否仍是当前的实现方式
|
||||
|
||||
### B. 重复检查
|
||||
- 不同规范是否描述了相同的组件/功能/场景
|
||||
- 场景级别的重复(A 规范的 Scenario 与 B 规范的 Scenario 重复)
|
||||
- 概念级别的重复(A 规范整体描述的就是 B 规范已覆盖的内容)
|
||||
|
||||
### C. 错位检查
|
||||
- A 规范中是否有场景应该属于 B 规范
|
||||
- 某个 Requirement 是否放在了错误的功能域下
|
||||
|
||||
### D. 合并检查
|
||||
- 描述同一类主题的规范是否分散在多个文件中
|
||||
- 某个规范是否可以作为子集被另一个更大的规范吸收
|
||||
|
||||
### E. 命名检查
|
||||
- 规范名称是否准确反映其实际内容
|
||||
- 命名是否遵循统一的前缀约定(平台前缀:admin- / developer- / console-)
|
||||
- 名称是否便于 AI 工具搜索匹配(暴露关键业务词和组件名)
|
||||
|
||||
### F. 格式检查
|
||||
- 是否使用标准的 SHALL/WHEN/THEN 规范格式
|
||||
- 是否混入了变更记录(如"移除以下列"、"ADDED Requirements")而非功能规范
|
||||
- 是否存在空目录
|
||||
|
||||
## 第三步:输出分析报告
|
||||
|
||||
按以下结构输出:
|
||||
|
||||
1. 问题总览表(问题类型 × 涉及规范数)
|
||||
2. 逐项分析(每个有问题的规范,说明具体问题和建议)
|
||||
3. 重构方案(删除/合并/重命名/内容调整的具体操作)
|
||||
4. 重构后的规范目录结构
|
||||
|
||||
## 第四步:执行重构
|
||||
|
||||
按优先级分批执行:
|
||||
- P0:删除空目录和完全冗余的规范
|
||||
- P1:合并重复/子集规范到主规范中
|
||||
- P2:重命名不精准的规范、拆分错位的内容
|
||||
- P3:修正与代码不匹配的细节描述
|
||||
|
||||
每步执行后确认目录结构完整。
|
||||
|
||||
## 命名约定
|
||||
|
||||
规范目录命名遵循以下规则,确保 AI 工具搜索时能精准匹配:
|
||||
|
||||
| 类型 | 命名模式 | 示例 |
|
||||
|------|---------|------|
|
||||
| 平台专属功能 | `{平台}-{功能}` | `admin-platform`、`console-my-skills`、`developer-platform` |
|
||||
| 跨平台组件/架构 | `{类别}` | `component-library`、`layout-system`、`design-tokens` |
|
||||
| 技能领域 | `skill-{方面}` | `skill-market`、`skill-status-rules`、`skill-version-management` |
|
||||
| 业务功能 | `{业务名词}` | `account-management`、`chat-scenarios` |
|
||||
|
||||
命名原则(提升 AI 检索命中率):
|
||||
- 名称中暴露可搜索的业务关键词(如 skill、modal、toast、account)
|
||||
- 同一平台的功能使用统一前缀(admin- / console- / developer-)
|
||||
- 同一领域的功能使用统一领域词前缀(skill-)
|
||||
- 避免泛化词(display → rules/behavior,basic → 删掉,general → 删掉)
|
||||
- 避免实现模式词(crud、list、table)而使用业务领域词
|
||||
- 避免同一关键词在不同规范中重复出现导致歧义(如 layout 只出现在一个规范名中)
|
||||
- 长度控制在 2-3 个词,去掉不影响检索的冗余词(info、data 等)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 补充说明
|
||||
|
||||
### 审查时的判断边界
|
||||
|
||||
- **规范 vs 代码**:规范描述"应该是什么",不描述"代码怎么写"。如果规范中出现了具体文件路径(如 `src/data/adminData.js`),通常是实现细节而非规范,应该清理
|
||||
- **规范 vs 变更记录**:规范用 SHALL/WHEN/THEN 格式描述功能需求。如果出现"移除以下列"、"保持现有样式"、"ADDED/MODIFIED Requirements"等措辞,说明混入了变更指令,需要改写
|
||||
- **规范 vs 文档**:规范不替代 README 或开发文档,不需要描述项目背景、技术选型等宏观信息
|
||||
|
||||
### 建议的定期审查节奏
|
||||
|
||||
- 每完成一批功能变更后,对照新代码检查相关规范是否需要更新
|
||||
- 规范数量超过 30 个时,建议做一次全面审查
|
||||
- 新增规范前,先搜索现有规范名称和内容,确认是否有可复用/扩展的规范
|
||||
@@ -76,6 +76,22 @@
|
||||
- **AND** 用户点击"更新密码"按钮
|
||||
- **THEN** 系统显示错误提示"两次输入的密码不一致"
|
||||
|
||||
### Requirement: 表单校验错误展示
|
||||
|
||||
系统 SHALL 在表单中展示校验错误状态,输入框边框变红并在下方显示错误提示文字。
|
||||
|
||||
#### Scenario: 必填项为空
|
||||
- **WHEN** 用户在修改密码表单中不输入当前密码直接点击"更新密码"
|
||||
- **THEN** 当前密码输入框边框变红,下方显示"请输入当前密码"错误提示
|
||||
|
||||
#### Scenario: 邮箱格式错误
|
||||
- **WHEN** 用户在个人信息表单中输入无效邮箱格式
|
||||
- **THEN** 邮箱输入框边框变红,下方显示"请输入有效的邮箱地址"错误提示
|
||||
|
||||
#### Scenario: 密码不一致
|
||||
- **WHEN** 用户在修改密码表单中输入两次不同的新密码
|
||||
- **THEN** 确认密码输入框边框变红,下方显示"两次输入的密码不一致"错误提示
|
||||
|
||||
### Requirement: 三端统一入口
|
||||
|
||||
系统 SHALL 在工作台、管理台、开发台的侧边栏用户信息区域提供账号管理入口。
|
||||
@@ -91,3 +107,18 @@
|
||||
#### Scenario: 开发台入口
|
||||
- **WHEN** 用户在开发台点击侧边栏用户信息区域
|
||||
- **THEN** 系统导航到账号管理页面
|
||||
|
||||
### Requirement: 管理台账号管理页面配置
|
||||
|
||||
管理台 SHALL 在页面配置中包含账号管理页面配置。
|
||||
|
||||
#### Scenario: 管理台页面配置
|
||||
- **WHEN** 用户查看管理台页面配置
|
||||
- **THEN** 系统包含 account 页面配置
|
||||
- **AND** account 页面标题为"账号管理"
|
||||
- **AND** account 页面图标为 FiUser
|
||||
|
||||
#### Scenario: 管理台侧边栏用户点击
|
||||
- **WHEN** 用户在管理台侧边栏点击用户信息区域
|
||||
- **THEN** 系统导航到账号管理页面
|
||||
- **AND** 页面标题显示为"账号管理"
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
## 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** 数据包含不同用户、部门、类型、状态的日志记录,至少包含"成功"、"失败"、"警告"三种状态
|
||||
@@ -1,43 +0,0 @@
|
||||
## 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** 显示空状态组件,提示"暂无匹配日志"
|
||||
@@ -1,22 +0,0 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 运营指标展示
|
||||
管理台总览页 SHALL 展示平台核心运营指标数据,以卡片形式呈现。
|
||||
|
||||
#### Scenario: 指标卡片展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面顶部显示4个指标卡片:用户总数、部门数量、项目数量、今日调用次数,每个卡片包含数值和趋势变化值
|
||||
|
||||
### Requirement: 异常/待办事项提醒
|
||||
管理台总览页 SHALL 展示平台异常事件和待办事项列表。
|
||||
|
||||
#### Scenario: 异常事项展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面左侧区域显示异常/待办事项列表,每条包含警告图标和事项描述(如定时任务执行失败、用户账号被禁用、项目处于禁用状态等)
|
||||
|
||||
### Requirement: 最近操作日志展示
|
||||
管理台总览页 SHALL 展示最近的操作日志精简列表。
|
||||
|
||||
#### Scenario: 日志列表展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面右侧区域显示最近5条操作日志,每条包含时间、用户、操作类型、状态标签
|
||||
@@ -1,6 +1,33 @@
|
||||
## ADDED Requirements
|
||||
# Capability: 管理台
|
||||
|
||||
### Requirement: 列表搜索筛选生效
|
||||
## Purpose
|
||||
|
||||
管理台提供平台运营管理功能,包括总览仪表盘、部门/用户/项目管理、全局日志查询。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 运营指标展示
|
||||
管理台总览页 SHALL 展示平台核心运营指标数据,以卡片形式呈现。
|
||||
|
||||
#### Scenario: 指标卡片展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面顶部显示4个指标卡片:用户总数、部门数量、项目数量、今日调用次数,每个卡片包含数值和趋势变化值
|
||||
|
||||
### Requirement: 异常/待办事项提醒
|
||||
管理台总览页 SHALL 展示平台异常事件和待办事项列表。
|
||||
|
||||
#### Scenario: 异常事项展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面左侧区域显示异常/待办事项列表,每条包含警告图标和事项描述(如定时任务执行失败、用户账号被禁用、项目处于禁用状态等)
|
||||
|
||||
### Requirement: 最近操作日志展示
|
||||
管理台总览页 SHALL 展示最近的操作日志精简列表。
|
||||
|
||||
#### Scenario: 日志列表展示
|
||||
- **WHEN** 用户打开管理台总览页
|
||||
- **THEN** 页面右侧区域显示最近5条操作日志,每条包含时间、用户、操作类型、状态标签
|
||||
|
||||
### Requirement: 实体列表搜索筛选
|
||||
部门管理、用户管理、项目管理列表页 SHALL 支持按关键词和其他条件筛选列表数据。
|
||||
|
||||
#### Scenario: 部门关键词搜索
|
||||
@@ -85,76 +112,44 @@
|
||||
- **WHEN** 用户在确认弹框中点击取消按钮
|
||||
- **THEN** 弹框关闭,列表不变
|
||||
|
||||
### Requirement: 技能列表搜索筛选
|
||||
我的技能列表 SHALL 支持按关键词、分类和状态筛选技能数据。
|
||||
### Requirement: 全局日志列表展示
|
||||
管理台日志查询页 SHALL 展示平台全局系统操作日志列表。
|
||||
|
||||
#### 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** 列表仅显示该状态的技能记录
|
||||
- **WHEN** 用户选择某种状态(成功、失败、警告)并点击查询
|
||||
- **THEN** 日志列表仅显示该状态的记录
|
||||
|
||||
#### Scenario: 时间范围筛选
|
||||
- **WHEN** 用户设置开始日期和结束日期并点击查询
|
||||
- **THEN** 日志列表仅显示时间范围内的记录
|
||||
|
||||
#### Scenario: 筛选重置
|
||||
- **WHEN** 用户在筛选卡片点击重置按钮
|
||||
- **THEN** 筛选条件清空,列表恢复显示全部技能
|
||||
- **WHEN** 用户点击重置按钮
|
||||
- **THEN** 所有筛选条件清空,日志列表恢复显示全部记录
|
||||
|
||||
### Requirement: 技能列表分页
|
||||
我的技能列表 SHALL 在表格底部展示分页组件。
|
||||
|
||||
#### Scenario: 分页展示
|
||||
- **WHEN** 用户打开我的技能列表页
|
||||
- **THEN** 表格底部右侧显示分页组件,包含页码按钮和前后翻页按钮
|
||||
|
||||
### Requirement: 技能上架下架
|
||||
我的技能列表和技能详情页 SHALL 提供技能的上架/下架操作入口。
|
||||
|
||||
#### 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** 弹框关闭,页面展示成功提示"已删除"
|
||||
|
||||
### Requirement: 版本审核拒绝原因展示
|
||||
技能详情页版本历史表格 SHALL 为被拒绝的版本展示拒绝原因。
|
||||
|
||||
#### Scenario: 拒绝原因展示
|
||||
- **WHEN** 用户在版本历史表格中查看状态为"审核拒绝"的版本
|
||||
- **THEN** 该版本状态标签下方显示红色小字的拒绝原因信息
|
||||
#### Scenario: 无匹配结果
|
||||
- **WHEN** 用户筛选后无匹配日志
|
||||
- **THEN** 显示空状态组件,提示"暂无匹配日志"
|
||||
@@ -88,7 +88,7 @@
|
||||
- **THEN** 系统 SHALL 提供 `.tag--admin`、`.tag--member`、`.tag--developer` 等变体
|
||||
|
||||
### Requirement: 弹窗组件
|
||||
组件库 SHALL 提供模态弹窗组件。
|
||||
组件库 SHALL 提供模态弹窗组件,用于各类确认操作场景。
|
||||
|
||||
#### Scenario: 弹窗容器
|
||||
- **WHEN** 开发者需要显示模态弹窗
|
||||
@@ -98,13 +98,69 @@
|
||||
- **WHEN** 弹窗需要标题、内容、操作区
|
||||
- **THEN** 系统 SHALL 提供 `.modal__header`、`.modal__body`、`.modal__footer` 元素类
|
||||
|
||||
#### 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 提供 Toast 提示组件。
|
||||
组件库 SHALL 提供 Toast 提示组件,用于各类操作结果反馈。
|
||||
|
||||
#### Scenario: 提示消息
|
||||
- **WHEN** 开发者需要显示操作反馈
|
||||
- **THEN** 系统 SHALL 提供 `.toast` 类和 `.toast--success`、`.toast--error`、`.toast--warning`、`.toast--info` 等变体
|
||||
|
||||
#### Scenario: 保存成功提示
|
||||
- **WHEN** 用户在账号管理页面点击"保存修改"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"保存成功"
|
||||
|
||||
#### Scenario: 操作失败提示
|
||||
- **WHEN** 用户执行操作失败
|
||||
- **THEN** 页面顶部展示红色错误提示"操作失败,请重试"
|
||||
|
||||
#### Scenario: 上架/下架成功提示
|
||||
- **WHEN** 用户执行上架或下架操作
|
||||
- **THEN** 页面顶部展示绿色成功提示("已上架"或"已下架")
|
||||
|
||||
#### Scenario: 删除成功提示
|
||||
- **WHEN** 用户确认删除技能或版本
|
||||
- **THEN** 页面顶部展示绿色成功提示"已删除"
|
||||
|
||||
#### Scenario: 提交审核成功提示
|
||||
- **WHEN** 用户在上传新版本页面点击"提交审核"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"已提交审核"
|
||||
|
||||
#### Scenario: 创建技能成功提示
|
||||
- **WHEN** 用户在创建技能页面点击"创建技能"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"创建成功"
|
||||
|
||||
### Requirement: 分页组件
|
||||
组件库 SHALL 提供分页导航组件。
|
||||
|
||||
@@ -113,12 +169,28 @@
|
||||
- **THEN** 系统 SHALL 提供 `.pagination` 类和 `.pagination__item`、`.pagination__item--active` 元素类
|
||||
|
||||
### Requirement: 空状态组件
|
||||
组件库 SHALL 提供空状态展示组件。
|
||||
组件库 SHALL 提供空状态展示组件,用于列表或页面无数据时的展示。
|
||||
|
||||
#### Scenario: 无数据展示
|
||||
- **WHEN** 列表或页面无数据时
|
||||
- **THEN** 系统 SHALL 提供 `.empty-state` 类,包含图标、文字、可选操作按钮区域
|
||||
|
||||
#### Scenario: 技能市场搜索无结果
|
||||
- **WHEN** 用户在技能市场搜索框输入关键词后点击查询
|
||||
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配技能"提示
|
||||
|
||||
#### Scenario: 日志查询筛选无结果
|
||||
- **WHEN** 用户选择筛选条件后点击查询按钮
|
||||
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配日志"提示
|
||||
|
||||
#### Scenario: 定时任务列表为空
|
||||
- **WHEN** 用户进入定时任务页面
|
||||
- **THEN** 页面展示 EmptyState 组件,显示"暂无定时任务"提示
|
||||
|
||||
#### Scenario: 项目管理成员为空或筛选无结果
|
||||
- **WHEN** 用户进入项目管理页面且没有成员,或选择筛选条件后无匹配
|
||||
- **THEN** 页面展示 EmptyState 组件,显示"暂无匹配成员"提示
|
||||
|
||||
### Requirement: 开关组件
|
||||
组件库 SHALL 提供切换开关组件。
|
||||
|
||||
@@ -194,11 +266,23 @@
|
||||
- **THEN** 系统 SHALL 提供 `.version-list__tag` 和 `.version-list__tag--current` 类
|
||||
|
||||
### Requirement: 返回按钮组件
|
||||
组件库 SHALL 提供统一的返回按钮样式。
|
||||
组件库 SHALL 提供统一的返回按钮样式,所有二级页面使用统一的样式类名。
|
||||
|
||||
#### Scenario: 返回按钮
|
||||
- **WHEN** 详情页需要返回按钮
|
||||
- **THEN** 系统 SHALL 提供 `.back-btn` 类,替换内联样式 `display: inline-flex; align-items: center; gap: 6px; color: #3B82F6`
|
||||
- **THEN** 系统 SHALL 提供 `.page-back-btn` 类,按钮显示为蓝色主题色文字、带左箭头图标、文字为粗体
|
||||
- **AND** 返回按钮显示在页面内容区左上角
|
||||
- **AND** 与上级页面名称关联(如"返回技能市场")
|
||||
|
||||
#### Scenario: 废弃旧样式类名
|
||||
- **WHEN** 代码中使用返回按钮
|
||||
- **THEN** 必须使用 `.page-back-btn` 类名
|
||||
- **AND** 不再使用 `dev-back-btn` 或 `console-back-btn`
|
||||
|
||||
#### Scenario: 样式定义位置
|
||||
- **WHEN** 开发者查找返回按钮样式定义
|
||||
- **THEN** 样式定义位于 `src/styles/components/_index.scss`
|
||||
- **AND** 不位于任何页面级样式文件
|
||||
|
||||
### Requirement: 表单提示组件
|
||||
组件库 SHALL 提供表单辅助提示样式。
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
## Purpose
|
||||
开发者基本信息编辑功能用于管理技能的内部信息,这些信息仅供开发者自己使用,不影响技能商店展示。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 内部信息编辑表单
|
||||
UpdateSkillInfoPage SHALL 提供开发者内部信息的编辑表单,预填当前数据。
|
||||
|
||||
#### Scenario: 表单字段简化
|
||||
- **WHEN** 用户从技能详情页点击"编辑内部信息"进入 UpdateSkillInfoPage
|
||||
- **THEN** 表单仅包含两个字段:开发者内部技能名称、开发者内部技能描述
|
||||
|
||||
#### Scenario: 移除字段
|
||||
- **WHEN** 用户在内部信息编辑页面时
|
||||
- **THEN** 不显示分类、标签、图标选择器(这些字段已移至版本发布信息)
|
||||
|
||||
#### Scenario: 提交内部信息修改
|
||||
- **WHEN** 用户填写完内部信息后点击"保存修改"按钮
|
||||
- **THEN** 页面展示成功提示"保存成功",并返回技能详情页
|
||||
|
||||
#### Scenario: 取消编辑
|
||||
- **WHEN** 用户在内部信息编辑页面点击"取消"按钮
|
||||
- **THEN** 返回技能详情页,不保存任何修改
|
||||
|
||||
### Requirement: 技能图标选择
|
||||
UploadSkillPage SHALL 提供技能图标的 emoji 选择器(仅用于创建技能时的图标选择)。
|
||||
|
||||
#### Scenario: 图标选择展示
|
||||
- **WHEN** 用户在创建技能页面看到图标选择区域
|
||||
- **THEN** 页面展示 emoji 网格,当前选中项高亮显示
|
||||
|
||||
#### Scenario: 切换图标
|
||||
- **WHEN** 用户点击 emoji 网格中的某个图标
|
||||
- **THEN** 该图标高亮选中,之前的选中项取消高亮
|
||||
@@ -1,61 +0,0 @@
|
||||
# 开发者我的技能列表 - 规格说明
|
||||
|
||||
## 功能描述
|
||||
|
||||
展示开发者自己创建的技能列表,展示开发者内部名称,支持筛选和操作。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 表格列定义
|
||||
表格必须包含以下列:
|
||||
|
||||
| 列名 | 内容 | 显示要求 |
|
||||
|------|------|----------|
|
||||
| 技能名称 | `skill.name`(开发者内部名称) | 普通字重,不加粗 |
|
||||
| 技能描述 | `skill.desc`(开发者内部描述) | 正常显示 |
|
||||
| 状态 | `skill.status` | 使用 `skillStatusMap` 映射显示中文状态和对应样式,**只显示技能整体状态** |
|
||||
| 操作 | 编辑/下架/删除按钮 | 保持按钮组布局 |
|
||||
|
||||
**移除以下列:**
|
||||
- 分类 (`category`)
|
||||
- 版本 (`version`)
|
||||
- 安装量 (`installs`)
|
||||
- 评分 (`rating`)
|
||||
|
||||
### Requirement: 状态显示规则
|
||||
1. **只显示技能的整体状态**,使用 `skillStatusMap` 映射:
|
||||
- `dev` → 开发中
|
||||
- `published` → 已上架
|
||||
- `unlisting` → 下架审核中
|
||||
- `unlisted` → 已下架
|
||||
|
||||
2. **不再额外显示** `skill.hasPendingReview` 的"审核中"徽章。版本审核状态在技能详情页展示即可。
|
||||
|
||||
### Requirement: 操作按钮规则
|
||||
|
||||
#### 下架按钮
|
||||
- 只在 `skill.status === 'published'` 时显示
|
||||
- 当 `skill.hasPendingReview === true` 时禁用,提示"存在审核中的版本,请先撤回后再下架"
|
||||
- 点击触发出下架操作
|
||||
|
||||
#### 删除按钮
|
||||
- 当 `skill.status === 'published'` 或 `skill.status === 'unlisting'` 或 `skill.hasPendingReview === true` 时禁用
|
||||
- 提示信息根据状态变化
|
||||
- 点击触发确认删除弹框
|
||||
- 确认后执行删除操作
|
||||
|
||||
#### 编辑按钮
|
||||
- 始终显示
|
||||
- 点击跳转到技能详情编辑页
|
||||
|
||||
以上规则必须与**技能详情页**的按钮逻辑保持完全一致。
|
||||
|
||||
### Requirement: 交互行为
|
||||
- 点击表格行任意位置跳转到技能详情编辑页(保持不变)
|
||||
- 筛选功能保持不变,支持关键词、状态筛选(移除分类筛选)
|
||||
- 分页保持不变
|
||||
|
||||
### Requirement: 样式要求
|
||||
- 保持现有表格样式体系
|
||||
- 不引入新的样式类名
|
||||
- 技能名称使用正常字重(移除 `fontWeight: 600`)
|
||||
@@ -1,30 +0,0 @@
|
||||
## MODIFIED Requirements
|
||||
|
||||
### Requirement: 开发者指标展示
|
||||
开发台总览页 SHALL 展示开发者维度的核心指标数据,以卡片形式呈现。
|
||||
|
||||
#### Scenario: 指标卡片展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面顶部显示4个指标卡片:我的技能总数、已上架数量、开发中数量、待审核版本数量,每个卡片包含数值
|
||||
|
||||
### Requirement: 待审核项目提醒
|
||||
开发台总览页 SHALL 展示待审核的版本项目列表。
|
||||
|
||||
#### Scenario: 待审核列表展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面左侧区域显示待审核项目列表,每条包含技能名称、版本号、审核状态标签和日期,点击可跳转到对应技能详情页
|
||||
|
||||
#### Scenario: 审核拒绝项展示
|
||||
- **WHEN** 待审核列表中包含被拒绝的版本
|
||||
- **THEN** 该项显示拒绝状态标签和"查看原因"链接
|
||||
|
||||
#### Scenario: 下架审核项展示
|
||||
- **WHEN** 待审核列表中包含下架审核
|
||||
- **THEN** 该项显示"下架审核"状态标签
|
||||
|
||||
### Requirement: 最近动态展示
|
||||
开发台总览页 SHALL 展示开发者最近的操作动态记录。
|
||||
|
||||
#### Scenario: 动态列表展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面右侧区域显示最近操作动态列表,每条包含时间、操作描述和状态标签
|
||||
148
openspec/specs/developer-platform/spec.md
Normal file
148
openspec/specs/developer-platform/spec.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# Capability: 开发台
|
||||
|
||||
## Purpose
|
||||
|
||||
开发台提供技能开发和管理功能,包括总览仪表盘、技能列表管理、技能内部信息编辑。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 开发者指标展示
|
||||
开发台总览页 SHALL 展示开发者维度的核心指标数据,以卡片形式呈现。
|
||||
|
||||
#### Scenario: 指标卡片展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面顶部显示4个指标卡片:我的技能总数、已上架数量、开发中数量、待审核版本数量,每个卡片包含数值
|
||||
|
||||
### Requirement: 待审核项目提醒
|
||||
开发台总览页 SHALL 展示待审核的版本项目列表。
|
||||
|
||||
#### Scenario: 待审核列表展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面左侧区域显示待审核项目列表,每条包含技能名称、版本号、审核状态标签和日期,点击可跳转到对应技能详情页
|
||||
|
||||
#### Scenario: 审核拒绝项展示
|
||||
- **WHEN** 待审核列表中包含被拒绝的版本
|
||||
- **THEN** 该项显示拒绝状态标签和"查看原因"链接
|
||||
|
||||
#### Scenario: 下架审核项展示
|
||||
- **WHEN** 待审核列表中包含下架审核
|
||||
- **THEN** 该项显示"下架审核"状态标签
|
||||
|
||||
### Requirement: 最近动态展示
|
||||
开发台总览页 SHALL 展示开发者最近的操作动态记录。
|
||||
|
||||
#### Scenario: 动态列表展示
|
||||
- **WHEN** 用户打开开发台总览页
|
||||
- **THEN** 页面右侧区域显示最近操作动态列表,每条包含时间、操作描述和状态标签
|
||||
|
||||
### Requirement: 技能列表展示
|
||||
系统 SHALL 以表格形式展示开发者创建的技能,包含技能名称、描述、状态和操作列。
|
||||
|
||||
#### Scenario: 表格列展示
|
||||
- **WHEN** 用户打开开发者技能列表页
|
||||
- **THEN** 系统显示表格,包含以下列:
|
||||
- 技能名称(开发者内部名称,普通字重)
|
||||
- 技能描述(开发者内部描述)
|
||||
- 状态(使用状态标签显示技能整体状态)
|
||||
- 操作(编辑/下架/删除按钮)
|
||||
|
||||
#### Scenario: 状态显示
|
||||
- **WHEN** 用户查看技能列表的状态列
|
||||
- **THEN** 系统根据技能整体状态显示对应标签:
|
||||
- `dev` → "开发中"
|
||||
- `published` → "已上架"
|
||||
- `unlisting` → "下架审核中"
|
||||
- `unlisted` → "已下架"
|
||||
|
||||
### Requirement: 技能列表搜索筛选
|
||||
开发者技能列表 SHALL 支持按关键词和状态筛选技能数据。
|
||||
|
||||
#### Scenario: 关键词搜索
|
||||
- **WHEN** 用户在筛选区域的关键词输入框中输入文本并点击查询
|
||||
- **THEN** 列表仅显示技能名称或描述中包含该关键词的记录
|
||||
|
||||
#### Scenario: 状态筛选
|
||||
- **WHEN** 用户在状态下拉框选择某个状态(已发布/草稿)并点击查询
|
||||
- **THEN** 列表仅显示该状态的技能记录
|
||||
|
||||
#### Scenario: 筛选重置
|
||||
- **WHEN** 用户在筛选区域点击重置按钮
|
||||
- **THEN** 筛选条件清空,列表恢复显示全部技能
|
||||
|
||||
### Requirement: 技能列表分页
|
||||
开发者技能列表 SHALL 在表格底部展示分页组件。
|
||||
|
||||
#### Scenario: 分页展示
|
||||
- **WHEN** 用户打开技能列表页
|
||||
- **THEN** 表格底部右侧显示分页组件,包含页码按钮和前后翻页按钮
|
||||
|
||||
### Requirement: 技能下架操作
|
||||
开发者技能列表 SHALL 在已发布技能的操作列提供下架操作入口。
|
||||
|
||||
#### Scenario: 列表页下架操作
|
||||
- **WHEN** 用户在已发布技能的操作列点击"下架"按钮
|
||||
- **THEN** 页面展示成功提示"已下架"
|
||||
|
||||
#### Scenario: 下架按钮可用性
|
||||
- **WHEN** 技能状态为 `published` 且不存在审核中的版本
|
||||
- **THEN** 显示"下架"按钮
|
||||
- **WHEN** 技能状态为 `published` 且存在审核中的版本
|
||||
- **THEN** "下架"按钮禁用,提示"存在审核中的版本,请先撤回后再下架"
|
||||
|
||||
### Requirement: 技能删除操作
|
||||
开发者技能列表 SHALL 提供技能删除操作,需弹框确认。
|
||||
|
||||
#### Scenario: 删除确认
|
||||
- **WHEN** 用户在技能列表的操作列点击"删除"按钮
|
||||
- **THEN** 弹出确认弹框,显示"确定要删除技能"{技能名称}"吗?此操作不可撤销。"
|
||||
|
||||
#### Scenario: 确认删除
|
||||
- **WHEN** 用户在确认弹框中点击"删除"按钮
|
||||
- **THEN** 弹框关闭,页面展示成功提示"已删除"
|
||||
|
||||
#### Scenario: 删除按钮可用性
|
||||
- **WHEN** 技能状态为 `published`、`unlisting` 或存在审核中的版本
|
||||
- **THEN** "删除"按钮禁用,根据状态显示对应提示信息
|
||||
- **WHEN** 技能状态为 `dev` 或 `unlisted` 且无审核中版本
|
||||
- **THEN** "删除"按钮可用
|
||||
|
||||
### Requirement: 技能编辑入口
|
||||
开发者技能列表 SHALL 始终提供技能编辑入口。
|
||||
|
||||
#### Scenario: 编辑按钮
|
||||
- **WHEN** 用户点击技能操作列的"编辑"按钮
|
||||
- **THEN** 系统跳转到技能详情编辑页
|
||||
|
||||
#### Scenario: 行点击跳转
|
||||
- **WHEN** 用户点击表格行任意位置
|
||||
- **THEN** 系统跳转到技能详情编辑页
|
||||
|
||||
### Requirement: 内部信息编辑表单
|
||||
UpdateSkillInfoPage SHALL 提供开发者内部信息的编辑表单,预填当前数据。
|
||||
|
||||
#### Scenario: 表单字段简化
|
||||
- **WHEN** 用户从技能详情页点击"编辑内部信息"进入 UpdateSkillInfoPage
|
||||
- **THEN** 表单仅包含两个字段:开发者内部技能名称、开发者内部技能描述
|
||||
|
||||
#### Scenario: 移除字段
|
||||
- **WHEN** 用户在内部信息编辑页面时
|
||||
- **THEN** 不显示分类、标签、图标选择器(这些字段已移至版本发布信息)
|
||||
|
||||
#### Scenario: 提交内部信息修改
|
||||
- **WHEN** 用户填写完内部信息后点击"保存修改"按钮
|
||||
- **THEN** 页面展示成功提示"保存成功",并返回技能详情页
|
||||
|
||||
#### Scenario: 取消编辑
|
||||
- **WHEN** 用户在内部信息编辑页面点击"取消"按钮
|
||||
- **THEN** 返回技能详情页,不保存任何修改
|
||||
|
||||
### Requirement: 技能图标选择
|
||||
UploadSkillPage SHALL 提供技能图标的 emoji 选择器(仅用于创建技能时的图标选择)。
|
||||
|
||||
#### Scenario: 图标选择展示
|
||||
- **WHEN** 用户在创建技能页面看到图标选择区域
|
||||
- **THEN** 页面展示 emoji 网格,当前选中项高亮显示
|
||||
|
||||
#### Scenario: 切换图标
|
||||
- **WHEN** 用户点击 emoji 网格中的某个图标
|
||||
- **THEN** 该图标高亮选中,之前的选中项取消高亮
|
||||
@@ -1,37 +0,0 @@
|
||||
## 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 组件,显示"暂无匹配成员"提示
|
||||
@@ -1,80 +0,0 @@
|
||||
## 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** 页面顶部展示红色错误提示"操作失败,请重试"
|
||||
|
||||
### Requirement: 技能删除确认弹窗
|
||||
系统 SHALL 提供 Modal 组件用于技能删除操作的确认。
|
||||
|
||||
#### Scenario: 技能列表删除确认
|
||||
- **WHEN** 用户点击技能列表中某个技能的"删除"按钮
|
||||
- **THEN** 页面展示确认弹窗,标题为"确认删除",内容为"确定要删除技能"{技能名称}"吗?此操作不可撤销。"
|
||||
|
||||
#### Scenario: 技能详情页删除确认
|
||||
- **WHEN** 用户点击技能详情页的"删除技能"按钮
|
||||
- **THEN** 页面展示确认弹窗,标题为"确认删除",内容为"确定要删除技能"{技能名称}"吗?此操作不可撤销。"
|
||||
|
||||
### Requirement: 版本删除确认弹窗
|
||||
系统 SHALL 提供 Modal 组件用于版本删除操作的确认。
|
||||
|
||||
#### Scenario: 版本删除确认
|
||||
- **WHEN** 用户点击版本历史表格中某个未启用版本的"删除"按钮
|
||||
- **THEN** 页面展示确认弹窗,标题为"确认删除",内容为"确定要删除此版本吗?此操作不可撤销。"
|
||||
|
||||
### Requirement: 开发台操作结果消息提示
|
||||
系统 SHALL 提供 Toast 组件用于开发台操作的结果提示。
|
||||
|
||||
#### Scenario: 上架/下架成功提示
|
||||
- **WHEN** 用户执行上架或下架操作
|
||||
- **THEN** 页面顶部展示绿色成功提示("已上架"或"已下架")
|
||||
|
||||
#### Scenario: 删除成功提示
|
||||
- **WHEN** 用户确认删除技能或版本
|
||||
- **THEN** 页面顶部展示绿色成功提示"已删除"
|
||||
|
||||
#### Scenario: 保存成功提示
|
||||
- **WHEN** 用户在更新基本信息页面点击"保存修改"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"保存成功"
|
||||
|
||||
#### Scenario: 提交审核成功提示
|
||||
- **WHEN** 用户在上传新版本页面点击"提交审核"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"已提交审核"
|
||||
|
||||
#### Scenario: 创建技能成功提示
|
||||
- **WHEN** 用户在创建技能页面点击"创建技能"按钮
|
||||
- **THEN** 页面顶部展示绿色成功提示"创建成功"
|
||||
@@ -1,20 +0,0 @@
|
||||
## Purpose
|
||||
|
||||
定义表单校验错误状态的展示规范。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 表单校验错误状态展示
|
||||
系统 SHALL 在表单中展示校验错误状态。
|
||||
|
||||
#### Scenario: 必填项为空
|
||||
- **WHEN** 用户在修改密码表单中不输入当前密码直接点击"更新密码"
|
||||
- **THEN** 当前密码输入框边框变红,下方显示"请输入当前密码"错误提示
|
||||
|
||||
#### Scenario: 邮箱格式错误
|
||||
- **WHEN** 用户在个人信息表单中输入无效邮箱格式
|
||||
- **THEN** 邮箱输入框边框变红,下方显示"请输入有效的邮箱地址"错误提示
|
||||
|
||||
#### Scenario: 密码不一致
|
||||
- **WHEN** 用户在修改密码表单中输入两次不同的新密码
|
||||
- **THEN** 确认密码输入框边框变红,下方显示"两次输入的密码不一致"错误提示
|
||||
@@ -1,5 +1,8 @@
|
||||
# Capability: 布局系统
|
||||
|
||||
## Purpose
|
||||
布局系统提供应用级外壳布局、聊天页面布局、管理台布局等核心页面骨架。
|
||||
|
||||
布局系统提供应用级外壳布局、页面内容区骨架、页面导航行为和样式文件组织规范。
|
||||
|
||||
## Requirements
|
||||
|
||||
@@ -106,3 +109,76 @@
|
||||
#### Scenario: 侧边栏遮罩
|
||||
- **WHEN** 移动端侧边栏展开时
|
||||
- **THEN** 系统 SHALL 显示 `.sidebar__overlay` 遮罩层,点击可关闭侧边栏
|
||||
|
||||
### Requirement: 表单页面按钮组合完整
|
||||
|
||||
表单类二级页面必须同时具有左上角返回按钮和底部取消按钮。
|
||||
|
||||
#### Scenario: 表单页面包含返回和取消按钮
|
||||
- **WHEN** 用户访问表单类二级页面(如新增、编辑页面)
|
||||
- **THEN** 页面左上角显示返回按钮
|
||||
- **AND** 页面底部显示"取消"和"确定/保存"按钮组合
|
||||
|
||||
#### Scenario: 点击返回按钮返回上级
|
||||
- **WHEN** 用户点击左上角返回按钮
|
||||
- **THEN** 页面返回至上级页面
|
||||
- **AND** 不触发任何保存操作
|
||||
|
||||
#### Scenario: 点击取消按钮返回上级
|
||||
- **WHEN** 用户点击底部取消按钮
|
||||
- **THEN** 页面返回至上级页面
|
||||
- **AND** 不触发任何保存操作
|
||||
|
||||
### Requirement: 详情页面仅保留返回按钮
|
||||
|
||||
只读详情类二级页面仅需左上角返回按钮,无需底部取消按钮。
|
||||
|
||||
#### Scenario: 详情页返回按钮
|
||||
- **WHEN** 用户访问详情类二级页面(如任务详情、审核详情)
|
||||
- **THEN** 页面左上角显示返回按钮
|
||||
- **AND** 页面底部不显示取消按钮
|
||||
|
||||
### Requirement: 样式文件按页面拆分
|
||||
系统 SHALL 将页面特定样式从 global.scss 中拆分到独立的页面样式文件中,按功能组织。
|
||||
|
||||
#### Scenario: 工作台样式独立文件
|
||||
- **WHEN** 系统包含 _console.scss 文件
|
||||
- **THEN** 该文件包含工作台相关的所有样式(聊天、技能市场、日志查询、定时任务、项目管理等)
|
||||
|
||||
#### Scenario: 管理台样式独立文件
|
||||
- **WHEN** 系统包含 _admin.scss 文件
|
||||
- **THEN** 该文件包含管理台相关的所有样式(总览、部门管理、用户管理、项目管理等)
|
||||
|
||||
#### Scenario: 开发台样式独立文件
|
||||
- **WHEN** 系统包含 _developer.scss 文件
|
||||
- **THEN** 该文件包含开发台相关的所有样式(我的技能、技能编辑、开发文档等)
|
||||
|
||||
#### Scenario: 首页样式独立文件
|
||||
- **WHEN** 系统包含 _home.scss 文件
|
||||
- **THEN** 该文件包含首页相关的所有样式
|
||||
|
||||
### Requirement: global.scss 作为样式主入口
|
||||
系统 SHALL 保持 global.scss 作为样式主入口文件,导入所有样式模块。
|
||||
|
||||
#### Scenario: global.scss 导入设计系统模块
|
||||
- **WHEN** global.scss 文件被加载
|
||||
- **THEN** 系统按顺序导入 _variables.scss、_mixins.scss、_base.scss、_components.scss、_layout.scss
|
||||
|
||||
#### Scenario: global.scss 导入页面样式模块
|
||||
- **WHEN** global.scss 文件被加载
|
||||
- **THEN** 系统导入 pages/_console.scss、pages/_admin.scss、pages/_developer.scss、pages/_home.scss
|
||||
|
||||
#### Scenario: 通用样式保留在主文件中
|
||||
- **WHEN** 样式属于通用组件(按钮、表单、表格、状态标签等)
|
||||
- **THEN** 该样式保留在 _components.scss 或 _layout.scss 中,不移动到页面样式文件
|
||||
|
||||
### Requirement: 页面样式文件组织结构
|
||||
系统 SHALL 在 src/styles/pages/ 目录下按页面组织样式文件,每个文件包含对应页面的所有特定样式。
|
||||
|
||||
#### Scenario: 页面样式文件命名规范
|
||||
- **WHEN** 创建页面样式文件
|
||||
- **THEN** 文件名使用 _<page-name>.scss 格式(如 _console.scss、_admin.scss)
|
||||
|
||||
#### Scenario: 页面样式文件内容结构
|
||||
- **WHEN** 查看页面样式文件
|
||||
- **THEN** 该文件包含页面特定的布局、组件、状态等样式,使用清晰的注释分节
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# Modular Styles Specification
|
||||
|
||||
## Purpose
|
||||
|
||||
提供模块化的样式文件组织结构,将页面特定样式从全局样式文件中拆分到独立的页面样式文件中,提高代码的可维护性。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 样式文件按页面拆分
|
||||
系统 SHALL 将页面特定样式从 global.scss 中拆分到独立的页面样式文件中,按功能组织。
|
||||
|
||||
#### Scenario: 工作台样式独立文件
|
||||
- **WHEN** 系统包含 _console.scss 文件
|
||||
- **THEN** 该文件包含工作台相关的所有样式(聊天、技能市场、日志查询、定时任务、项目管理等)
|
||||
|
||||
#### Scenario: 管理台样式独立文件
|
||||
- **WHEN** 系统包含 _admin.scss 文件
|
||||
- **THEN** 该文件包含管理台相关的所有样式(总览、部门管理、用户管理、项目管理等)
|
||||
|
||||
#### Scenario: 开发台样式独立文件
|
||||
- **WHEN** 系统包含 _developer.scss 文件
|
||||
- **THEN** 该文件包含开发台相关的所有样式(我的技能、技能编辑、开发文档等)
|
||||
|
||||
#### Scenario: 首页样式独立文件
|
||||
- **WHEN** 系统包含 _home.scss 文件
|
||||
- **THEN** 该文件包含首页相关的所有样式
|
||||
|
||||
### Requirement: global.scss 作为样式主入口
|
||||
系统 SHALL 保持 global.scss 作为样式主入口文件,导入所有样式模块。
|
||||
|
||||
#### Scenario: global.scss 导入设计系统模块
|
||||
- **WHEN** global.scss 文件被加载
|
||||
- **THEN** 系统按顺序导入 _variables.scss、_mixins.scss、_base.scss、_components.scss、_layout.scss
|
||||
|
||||
#### Scenario: global.scss 导入页面样式模块
|
||||
- **WHEN** global.scss 文件被加载
|
||||
- **THEN** 系统导入 pages/_console.scss、pages/_admin.scss、pages/_developer.scss、pages/_home.scss
|
||||
|
||||
#### Scenario: 通用样式保留在主文件中
|
||||
- **WHEN** 样式属于通用组件(按钮、表单、表格、状态标签等)
|
||||
- **THEN** 该样式保留在 _components.scss 或 _layout.scss 中,不移动到页面样式文件
|
||||
|
||||
### Requirement: 页面样式文件组织结构
|
||||
系统 SHALL 在 src/styles/pages/ 目录下按页面组织样式文件,每个文件包含对应页面的所有特定样式。
|
||||
|
||||
#### Scenario: 页面样式文件命名规范
|
||||
- **WHEN** 创建页面样式文件
|
||||
- **THEN** 文件名使用 _<page-name>.scss 格式(如 _console.scss、_admin.scss)
|
||||
|
||||
#### Scenario: 页面样式文件内容结构
|
||||
- **WHEN** 查看页面样式文件
|
||||
- **THEN** 该文件包含页面特定的布局、组件、状态等样式,使用清晰的注释分节
|
||||
@@ -1,80 +0,0 @@
|
||||
# Capability: 页面导航返回按钮
|
||||
|
||||
提供统一的二级页面返回按钮样式规范,确保用户界面一致性。
|
||||
|
||||
### Requirement: 二级页面返回按钮样式统一
|
||||
|
||||
所有二级页面必须使用统一的 `page-back-btn` 样式类名作为返回按钮。
|
||||
|
||||
#### Scenario: 返回按钮位于页面左上角
|
||||
- **WHEN** 用户访问任意二级页面
|
||||
- **THEN** 返回按钮显示在页面内容区左上角
|
||||
- **AND** 返回按钮使用 `page-back-btn` 类名
|
||||
|
||||
#### Scenario: 返回按钮样式一致性
|
||||
- **WHEN** 用户查看返回按钮
|
||||
- **THEN** 按钮显示为蓝色主题色文字
|
||||
- **AND** 按钮带有左箭头图标
|
||||
- **AND** 文字为粗体
|
||||
- **AND** 与上级页面名称关联(如"返回技能市场")
|
||||
|
||||
### Requirement: 表单页面按钮组合完整
|
||||
|
||||
表单类二级页面必须同时具有左上角返回按钮和底部取消按钮。
|
||||
|
||||
#### Scenario: 表单页面包含返回和取消按钮
|
||||
- **WHEN** 用户访问表单类二级页面(如新增、编辑页面)
|
||||
- **THEN** 页面左上角显示返回按钮
|
||||
- **AND** 页面底部显示"取消"和"确定/保存"按钮组合
|
||||
|
||||
#### Scenario: 点击返回按钮返回上级
|
||||
- **WHEN** 用户点击左上角返回按钮
|
||||
- **THEN** 页面返回至上级页面
|
||||
- **AND** 不触发任何保存操作
|
||||
|
||||
#### Scenario: 点击取消按钮返回上级
|
||||
- **WHEN** 用户点击底部取消按钮
|
||||
- **THEN** 页面返回至上级页面
|
||||
- **AND** 不触发任何保存操作
|
||||
|
||||
### Requirement: 详情页面仅保留返回按钮
|
||||
|
||||
只读详情类二级页面仅需左上角返回按钮,无需底部取消按钮。
|
||||
|
||||
#### Scenario: 详情页返回按钮
|
||||
- **WHEN** 用户访问详情类二级页面(如任务详情、审核详情)
|
||||
- **THEN** 页面左上角显示返回按钮
|
||||
- **AND** 页面底部不显示取消按钮
|
||||
|
||||
### Requirement: 废弃旧样式类名
|
||||
|
||||
`dev-back-btn` 和 `console-back-btn` 样式类名不再使用,全部替换为 `page-back-btn`。
|
||||
|
||||
#### Scenario: 样式类名替换
|
||||
- **WHEN** 代码中使用返回按钮
|
||||
- **THEN** 必须使用 `page-back-btn` 类名
|
||||
- **AND** 不再使用 `dev-back-btn` 或 `console-back-btn`
|
||||
|
||||
### Requirement: 样式定义位置
|
||||
|
||||
`page-back-btn` 样式定义在组件样式层,而非页面样式层。
|
||||
|
||||
#### Scenario: 样式文件位置
|
||||
- **WHEN** 开发者查找返回按钮样式定义
|
||||
- **THEN** 样式定义位于 `src/styles/components/_index.scss`
|
||||
- **AND** 不位于任何页面级样式文件
|
||||
|
||||
### Requirement: 管理台账号管理页面导航
|
||||
|
||||
管理台 SHALL 在页面配置中包含账号管理页面配置。
|
||||
|
||||
#### Scenario: 管理台页面配置
|
||||
- **WHEN** 用户查看管理台页面配置
|
||||
- **THEN** 系统包含 account 页面配置
|
||||
- **AND** account 页面标题为"账号管理"
|
||||
- **AND** account 页面图标为 FiUser
|
||||
|
||||
#### Scenario: 管理台侧边栏用户点击
|
||||
- **WHEN** 用户在管理台侧边栏点击用户信息区域
|
||||
- **THEN** 系统导航到账号管理页面
|
||||
- **AND** 页面标题显示为"账号管理"
|
||||
@@ -18,7 +18,7 @@
|
||||
- **THEN** 页面顶部显示返回按钮,点击后返回"我的技能"页面
|
||||
|
||||
### Requirement: 头部概览卡片(内部信息)
|
||||
技能详情页面 SHALL 在页面顶部显示头部概览卡片,展示开发者内部信息。
|
||||
技能详情页面 SHALL 在页面顶部显示头部概览卡片,展示开发者内部信息。卡片具有白色背景、圆角 12px、轻微阴影效果。
|
||||
|
||||
#### Scenario: 概览卡片信息展示
|
||||
- **WHEN** 用户查看技能详情页面
|
||||
@@ -28,6 +28,14 @@
|
||||
- **WHEN** 用户查看头部概览卡片
|
||||
- **THEN** 第一行显示:内部技能名称、状态标签、右上角"编辑内部信息"按钮
|
||||
|
||||
#### Scenario: 状态标签样式
|
||||
- **WHEN** 用户查看概览卡片中的状态标签
|
||||
- **THEN** 状态标签为纯文字样式,不使用图标,通过颜色区分状态类型(开发中、已上架、下架审核中、已下架)
|
||||
|
||||
#### Scenario: 响应式布局
|
||||
- **WHEN** 用户在较小屏幕设备上查看概览卡片
|
||||
- **THEN** 卡片内容自动调整布局,确保信息清晰可读
|
||||
|
||||
### Requirement: 当前生效版本卡片
|
||||
技能详情页面 SHALL 在头部概览卡片下方显示当前生效版本卡片。
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
## Purpose
|
||||
技能概览卡片用于在技能编辑页面顶部集中展示开发者内部信息,提供清晰的内部视图与商店发布视图的分离。
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement: 技能概览卡片
|
||||
技能编辑页面 SHALL 在页面顶部显示技能概览卡片,展示开发者内部信息。
|
||||
|
||||
#### Scenario: 卡片布局结构
|
||||
- **WHEN** 用户打开技能编辑页面
|
||||
- **THEN** 页面顶部显示技能概览卡片,包含内部名称、状态标签、右上角"编辑内部信息"按钮
|
||||
|
||||
#### Scenario: 内部名称和状态显示
|
||||
- **WHEN** 用户查看技能概览卡片
|
||||
- **THEN** 卡片右侧第一行显示开发者内部技能名称、状态标签,名称右侧显示"编辑内部信息"按钮
|
||||
|
||||
#### Scenario: 状态标签样式
|
||||
- **WHEN** 用户查看技能概览卡片
|
||||
- **THEN** 状态标签为纯文字样式,不使用图标,通过颜色区分状态类型
|
||||
|
||||
#### Scenario: 操作按钮显示
|
||||
- **WHEN** 用户查看技能概览卡片
|
||||
- **THEN** 卡片右上角只显示"编辑内部信息"操作按钮
|
||||
|
||||
#### Scenario: 卡片视觉样式
|
||||
- **WHEN** 用户查看技能概览卡片
|
||||
- **THEN** 卡片具有白色背景、圆角12像素、轻微阴影效果
|
||||
|
||||
#### Scenario: 响应式布局
|
||||
- **WHEN** 用户在较小屏幕设备上查看技能概览卡片
|
||||
- **THEN** 卡片内容自动调整布局,确保信息清晰可读
|
||||
@@ -7,17 +7,6 @@ MySkillsPage SHALL 在技能列表中展示技能状态。
|
||||
- **WHEN** 用户查看我的技能列表
|
||||
- **THEN** 状态列显示技能的当前状态:开发中、已上架、下架审核中、已下架
|
||||
|
||||
#### Scenario: 审核中版本提示
|
||||
- **WHEN** 技能存在审核中的版本
|
||||
- **THEN** 状态列额外显示版本审核状态(如"已上架 · v1.2 审核中")
|
||||
|
||||
### Requirement: 侧边栏技能状态展示
|
||||
DeveloperPage SHALL 在侧边栏技能列表中展示状态标签。
|
||||
|
||||
#### Scenario: 侧边栏状态展示
|
||||
- **WHEN** 用户查看开发台侧边栏的技能列表
|
||||
- **THEN** 每个技能项显示对应的状态标签(开发中、已上架、下架审核中、已下架)
|
||||
|
||||
### Requirement: 技能操作按钮可用性
|
||||
MySkillsPage 和 SkillEditorPage SHALL 根据技能状态控制操作按钮的可用性。
|
||||
|
||||
Reference in New Issue
Block a user