feat: 实现技能审核全流程 - 新增审核管理模块、技能状态机、版本审核机制
- 新增审核管理页面:版本审核列表、下架审核列表、审核详情页 - 完善技能状态机:开发中/已上架/下架审核中/已下架四种状态 - 实现版本审核机制:审核中/通过/拒绝/撤销四种状态 - 更新 README:详细记录技能开发流程与审核机制 - 优化技能详情页:根据状态展示不同操作按钮 - 完善我的技能列表:状态筛选与操作限制 - 新增上传新版本页面:分离版本上传与基本信息编辑 - 更新 openspec 规范:技能审核流程与状态定义
This commit is contained in:
295
README.md
295
README.md
@@ -88,13 +88,26 @@ grandclaw-archtype/
|
||||
│ │ │ ├── AdminProjectsPage.jsx # 项目管理
|
||||
│ │ │ ├── AddProjectPage.jsx # 新增/编辑项目
|
||||
│ │ │ └── AdminLogsPage.jsx # 全局日志查询
|
||||
│ │ ├── console/ # 工作台子页面
|
||||
│ │ │ ├── ChatPage.jsx # 聊天页面
|
||||
│ │ │ ├── SkillsPage.jsx # 技能市场
|
||||
│ │ │ ├── SkillDetailPage.jsx # 技能详情
|
||||
│ │ │ ├── LogsPage.jsx # 日志查询
|
||||
│ │ │ ├── TasksPage.jsx # 定时任务
|
||||
│ │ │ ├── TaskDetailPage.jsx # 任务详情
|
||||
│ │ │ ├── AccountPage.jsx # 账号管理
|
||||
│ │ │ ├── ProjectsPage.jsx # 项目管理
|
||||
│ │ │ ├── MemberConfigPage.jsx # 成员配置
|
||||
│ │ │ ├── AddMemberPage.jsx # 增加成员
|
||||
│ │ │ ├── ConsoleReviewListPage.jsx # 审核管理列表(NEW)
|
||||
│ │ │ └── ConsoleReviewDetailPage.jsx # 审核详情(NEW)
|
||||
│ │ └── developer/ # 开发台子页面
|
||||
│ │ ├── DevOverviewPage.jsx # 开发者总览
|
||||
│ │ ├── MySkillsPage.jsx # 我的技能(筛选+分页)
|
||||
│ │ ├── SkillEditorPage.jsx # 技能详情(只读+操作)
|
||||
│ │ ├── UploadSkillPage.jsx # 创建技能
|
||||
│ │ ├── UploadSkillPage.jsx # 创建技能(基本信息)
|
||||
│ │ ├── UpdateSkillInfoPage.jsx # 更新基本信息
|
||||
│ │ ├── NewVersionPage.jsx # 上传新版本(仅版本信息)
|
||||
│ │ ├── UploadVersionPage.jsx # 上传新版本(NEW)
|
||||
│ │ ├── DevDocsPage.jsx # 开发文档
|
||||
│ │ └── DevAccountPage.jsx # 开发者设置
|
||||
│ └── styles/ # SCSS样式模块
|
||||
@@ -153,7 +166,7 @@ pnpm build
|
||||
|
||||
### 3. 工作台(Console)
|
||||
- **聊天界面**:支持多种聊天场景(欢迎页、普通对话、技能调用、文件上传)
|
||||
- **技能市场**:浏览、订阅、查看技能详情
|
||||
- **技能市场**:浏览、订阅、查看技能详情(仅展示最新版本)
|
||||
- **日志查询**:支持按用户、类型、状态筛选
|
||||
- **定时任务**:管理定时任务,支持启用/禁用,查看任务详情
|
||||
- **项目管理**:成员列表,增加成员
|
||||
@@ -161,18 +174,19 @@ pnpm build
|
||||
|
||||
### 4. 管理台(Admin)
|
||||
- **运营总览**:平台运营指标卡片(用户总数、部门数量、项目数量、今日调用)、异常/待办事项提醒、最近操作日志
|
||||
- **审核管理**:版本审核列表与详情、下架审核列表与详情(NEW)
|
||||
- **部门管理**:部门列表,支持搜索筛选、新增、编辑、启用/禁用、删除确认
|
||||
- **用户管理**:用户列表,支持搜索筛选(关键词/部门/状态)、新增、编辑、启用/禁用、删除确认,角色区分(管理员/开发者/成员)
|
||||
- **项目管理**:项目列表,支持搜索筛选、新增、编辑、启用/禁用、删除确认
|
||||
- **日志查询**:全局系统日志查询,支持多维度筛选(关键词、用户、部门、类型、状态、时间范围)
|
||||
|
||||
### 5. 开发台(Developer)
|
||||
- **总览**:开发者指标卡片(我的技能总数、已发布、草稿、待审核)、待审核项目列表、最近动态
|
||||
- **我的技能**:技能列表,支持关键词搜索、分类筛选、状态筛选、分页,支持上架/下架、删除操作
|
||||
- **技能详情**:基本信息只读展示、版本历史管理(启用/下载/删除)、审核拒绝原因展示
|
||||
- **创建技能**:基本信息表单 + 技能图标选择 + 技能包上传
|
||||
- **总览**:开发者指标卡片(我的技能总数、已上架、开发中、待审核)、待审核项目列表、最近动态
|
||||
- **我的技能**:技能列表,支持关键词搜索、分类筛选、状态筛选(开发中/已上架/下架审核中/已下架)、分页,支持下架(需要先撤回审核中的版本)、删除(已上架需要先下架)
|
||||
- **技能详情**:基本信息只读展示、版本历史管理(根据状态展示操作按钮:审核中-撤回审核+下载、审核通过/拒绝/撤销-仅下载、审核拒绝-显示拒绝理由)、技能操作(上传新版本-有审核中版本时禁用、下架技能、删除技能-已上架时禁用)
|
||||
- **创建技能**:基本信息表单 + 技能图标选择(移除技能包上传)
|
||||
- **更新基本信息**:独立页面编辑技能名称/描述/分类/标签/图标,与版本上传分离
|
||||
- **上传新版本**:仅包含版本说明和技能包上传,不含基本信息编辑
|
||||
- **上传新版本**:仅包含版本说明和技能包上传(NEW)
|
||||
- **开发文档**:技能开发相关文档
|
||||
- **开发者设置**:开发者账号信息
|
||||
|
||||
@@ -550,8 +564,8 @@ const members = api.members.list();
|
||||
|
||||
### 数据文件说明
|
||||
- `conversations.js`:聊天场景和对话历史
|
||||
- `skills.js`:技能市场数据,包含技能详情、文件列表、版本历史
|
||||
- `developerData.js`:开发台数据,包含我的技能(含图标、版本审核状态)、技能分类、开发者总览、开发文档
|
||||
- `skills.js`:技能市场数据,包含技能详情(含状态:dev/published/unlisting/unlisted)、文件列表、版本历史(含状态:reviewing/approved/rejected/withdrawn、拒绝理由)、审核列表(pendingVersionReviews、pendingUnlistReviews)
|
||||
- `developerData.js`:开发台数据,包含我的技能(含图标、版本审核状态、hasPendingReview标识)、技能分类、开发者总览、开发文档
|
||||
- `logs.js`:操作日志数据(成功/失败/警告状态)
|
||||
- `tasks.js`:定时任务数据(包含任务配置和执行日志)
|
||||
- `adminData.js`:管理台数据(部门列表、用户列表、项目列表、总览指标、全局日志、可选项数据)
|
||||
@@ -631,4 +645,263 @@ export default defineConfig({
|
||||
3. 组件样式添加到 `_components.scss`
|
||||
4. 页面特定样式添加到 `global.scss`
|
||||
|
||||
*最后更新:2026-03-19*
|
||||
---
|
||||
|
||||
## 技能开发流程与审核机制
|
||||
|
||||
### 流程概述
|
||||
|
||||
技能从创建到上架的完整流程包括:技能创建、版本上传、审核管理、上架销售四个主要环节。
|
||||
|
||||
### 状态定义
|
||||
|
||||
#### 技能状态
|
||||
|
||||
技能有四种状态,表示技能在平台上的可见性和可用性:
|
||||
|
||||
| 状态 | 英文 | 描述 | 图标样式 |
|
||||
|------|------|------|---------|
|
||||
| 开发中 | `dev` | 技能已创建但尚未有审核通过的版本 | status-stopped (灰色) |
|
||||
| 已上架 | `published` | 技能有审核通过的版本,可在技能市场展示和订阅 | status-running (绿色) |
|
||||
| 下架审核中 | `unlisting` | 开发者申请下架,等待管理员审核 | status-warning (黄色) |
|
||||
| 已下架 | `unlisted` | 技能已下架,不在技能市场展示,可删除 | status-stopped (灰色) |
|
||||
|
||||
#### 版本状态
|
||||
|
||||
版本有四种状态,表示版本在审核流程中的位置:
|
||||
|
||||
| 状态 | 英文 | 描述 | 图标样式 |
|
||||
|------|------|------|---------|
|
||||
| 审核中 | `reviewing` | 版本已提交,等待管理员审核 | status-warning (黄色) |
|
||||
| 审核通过 | `approved` | 版本审核通过,自动生效,技能可上架 | status-running (绿色) |
|
||||
| 审核拒绝 | `rejected` | 版本审核未通过,需修改后重新提交 | status-error (红色) |
|
||||
| 已撤销 | `withdrawn` | 开发者主动撤回审核,版本废弃 | status-stopped (灰色) |
|
||||
|
||||
### 完整流程
|
||||
|
||||
```
|
||||
┌───────────────────────────────────────────────────────────────────┐
|
||||
│ 技能开发流程 │
|
||||
└───────────────────────────────────────────────────────────────────┘
|
||||
|
||||
开发者操作 管理员操作 技能市场
|
||||
──────────── ─────────── ─────────
|
||||
[1. 创建技能] → 技能: 开发中
|
||||
│
|
||||
↓ (创建后可立即上传版本)
|
||||
[2. 上传新版本] → 版本: 审核中
|
||||
│ ──────────────────────────▶ [待审核列表]
|
||||
↓ │
|
||||
[3. 提交审核] ↓
|
||||
│ [4. 审核操作]
|
||||
├───────────────────────────────────────────────┼───────┐
|
||||
│ │ │
|
||||
↓ ↓ ↓
|
||||
[审核通过] [审核通过] [审核拒绝]
|
||||
│ │
|
||||
└───────────────────────────────────────────────┘
|
||||
↓
|
||||
技能: 已上架
|
||||
版本: 审核通过(生效)
|
||||
│
|
||||
───────────────────────────────────────────────────────────▶ [可在技能市场展示]
|
||||
|
||||
后续操作:
|
||||
- [5. 上传新版本] → (需先撤回审核中的版本,一次只能有一个审核中)
|
||||
- [6. 下架技能] → (需先撤回审核中的版本,下架需管理员审核)
|
||||
- [7. 删除技能] → (已上架的技能必须先下架)
|
||||
```
|
||||
|
||||
### 关键规则
|
||||
|
||||
#### 1. 版本上传规则
|
||||
|
||||
- **版本号由后端自动生成**:前端上传时无需填写版本号
|
||||
- **上传即进入审核**:版本上传后状态自动变为"审核中",没有"草稿"状态
|
||||
- **一次只能有一个审核中的版本**:
|
||||
- 如果存在审核中的版本,"上传新版本"按钮禁用
|
||||
- 审核通过或撤回后,才能上传新版本
|
||||
|
||||
#### 2. 审核中版本操作
|
||||
|
||||
- 可执行操作:撤回审核、下载
|
||||
- 撤回审核后,版本状态变为"已撤销"(终态),无法继续操作
|
||||
- 如需重新提交,需上传新版本
|
||||
|
||||
#### 3. 技能操作规则
|
||||
|
||||
| 技能状态 | 可用操作 | 备注 |
|
||||
|---------|---------|------|
|
||||
| 开发中 | 更新基本信息、删除技能 | 未上架,可直接删除 |
|
||||
| 已上架 | 更新基本信息、下架技能 | 删除按钮禁用(需先下架) |
|
||||
| 已上架+有审核中版本 | 更新基本信息 | 下架按钮禁用、上传按钮禁用 |
|
||||
| 下架审核中 | 无(等待管理员审核) | 所有操作按钮禁用 |
|
||||
| 已下架 | 更新基本信息、删除技能 | 可删除 |
|
||||
|
||||
#### 4. 下架流程
|
||||
|
||||
- **下架需要管理员审核**:
|
||||
1. 开发者点击"下架技能"
|
||||
2. 技能状态变为"下架审核中"
|
||||
3. 管理台"审核管理" -> "下架审核"列表中显示
|
||||
4. 管理员审核通过/拒绝
|
||||
5. 通过:技能状态变为"已下架",技能市场移除
|
||||
6. 拒绝:技能状态回到"已上架"
|
||||
|
||||
- **下架期间禁止操作**:
|
||||
- 下架审核中的技能,所有操作按钮禁用
|
||||
- 不能上传新版本
|
||||
|
||||
#### 5. 审核拒绝
|
||||
|
||||
- 版本审核拒绝后,在版本说明下方显示拒绝理由
|
||||
- 被拒绝的版本在技能详情页可见,但无法再次提交审核
|
||||
- 开发者需上传新版本重新提交
|
||||
|
||||
### 数据结构
|
||||
|
||||
#### 技能数据(skills.js / developerData.js)
|
||||
|
||||
```javascript
|
||||
{
|
||||
id: 1,
|
||||
name: '代码生成助手',
|
||||
desc: '根据需求自动生成高质量代码',
|
||||
tags: ['开发', '代码', 'AI'],
|
||||
status: 'published', // 技能状态: dev | published | unlisting | unlisted
|
||||
hasPendingReview: false, // 是否有审核中的版本
|
||||
category: '开发工具',
|
||||
versions: [...] // 版本列表
|
||||
}
|
||||
```
|
||||
|
||||
#### 版本数据
|
||||
|
||||
```javascript
|
||||
{
|
||||
version: 'v1.3.0',
|
||||
date: '2026-03-12',
|
||||
desc: '新增 Python 3.11 支持',
|
||||
status: 'approved', // 版本状态: reviewing | approved | rejected | withdrawn
|
||||
rejectionReason: '' // 审核拒绝理由(仅status为rejected时)
|
||||
}
|
||||
```
|
||||
|
||||
#### 审核列表数据
|
||||
|
||||
```javascript
|
||||
// 版本审核列表
|
||||
pendingVersionReviews = [{
|
||||
id: 1,
|
||||
skillName: '代码生成助手',
|
||||
version: 'v1.4.0',
|
||||
date: '2026-03-20',
|
||||
developer: '张三'
|
||||
}]
|
||||
|
||||
// 下架审核列表
|
||||
pendingUnlistReviews = [{
|
||||
id: 1,
|
||||
skillName: 'CRM 客户查询',
|
||||
currentVersion: 'v1.5.0',
|
||||
date: '2026-03-20',
|
||||
developer: '赵六'
|
||||
}]
|
||||
```
|
||||
|
||||
### 页面交互细节
|
||||
|
||||
#### 技能详情页(SkillEditorPage)
|
||||
|
||||
**版本历史表格:**
|
||||
|
||||
| 版本号 | 版本说明 | 状态 | 更新时间 | 操作 |
|
||||
|-------|---------|------|---------|------|
|
||||
| v1.3.0 | 新增功能... | 审核通过 | 2026-03-12 | [下载] |
|
||||
| v1.2.0 | 优化性能... | 审核拒绝 | 2026-03-08 | [下载] 拒绝理由: 测试用例不完整 |
|
||||
| v1.1.0 | 新增支持... | 审核中 | 2026-02-20 | [撤回审核] [下载] |
|
||||
|
||||
**技能操作按钮:**
|
||||
- 更新基本信息:始终可用
|
||||
- 上传新版本:有审核中版本时禁用,提示"存在审核中的版本,请先撤回后再上传新版本"
|
||||
- 下架技能:技能状态为已上架且无审核中版本时可用
|
||||
- 删除技能:技能状态为开发中或已下架时可用,已上架时禁用并提示"已上架的技能需要先下架才能删除"
|
||||
|
||||
#### 我的技能列表页(MySkillsPage)
|
||||
|
||||
**状态列展示:**
|
||||
- 开发中:显示"开发中"
|
||||
- 已上架:显示"已上架"
|
||||
- 已上架+有审核中版本:显示"已上架 · 审核中"
|
||||
- 下架审核中:显示"下架审核中"
|
||||
- 已下架:显示"已下架"
|
||||
|
||||
**操作列:**
|
||||
- 编辑:始终可用
|
||||
- 下架技能:已上架且无审核中版本时可用
|
||||
- 删除技能:开发中或已下架时可用
|
||||
|
||||
#### 管理台审核管理(AdminPage - reviewList)
|
||||
|
||||
**Tab切换:**
|
||||
- 版本审核:显示待审核的版本列表
|
||||
- 下架审核:显示待审核的下架申请列表
|
||||
|
||||
**版本审核列表:**
|
||||
| 技能名称 | 版本号 | 提交时间 | 开发者 | 操作 |
|
||||
|---------|-------|---------|--------|------|
|
||||
| 代码生成助手 | v1.4.0 | 2026-03-20 | 张三 | [审核] |
|
||||
|
||||
**审核详情页(reviewDetail):**
|
||||
|
||||
**版本审核详情:**
|
||||
- 基本信息:技能名称、开发者、分类、标签
|
||||
- 版本信息:版本号、提交时间、版本说明
|
||||
- 文件列表:显示技能包包含的文件
|
||||
- 操作:[拒绝] [通过]
|
||||
|
||||
**下架审核详情:**
|
||||
- 技能信息:技能名称、开发者、当前版本、订阅数、申请时间
|
||||
- 操作:[拒绝] [通过]
|
||||
|
||||
#### 技能市场详情页(SkillDetailPage)
|
||||
|
||||
**版本展示:**
|
||||
- 只显示最新审核通过版本的信息
|
||||
- 不展示完整版本历史
|
||||
- 示例:
|
||||
```
|
||||
当前版本: v1.3.0
|
||||
更新说明: 新增 Python 3.11 支持
|
||||
更新时间: 2026-03-12
|
||||
```
|
||||
|
||||
### 状态映射关系
|
||||
|
||||
```javascript
|
||||
// 技能状态映射
|
||||
const skillStatusMap = {
|
||||
dev: { text: '开发中', className: 'status-stopped' },
|
||||
published: { text: '已上架', className: 'status-running' },
|
||||
unlisting: { text: '下架审核中', className: 'status-warning' },
|
||||
unlisted: { text: '已下架', className: 'status-stopped' }
|
||||
};
|
||||
|
||||
// 版本状态映射
|
||||
const versionStatusMap = {
|
||||
reviewing: { text: '审核中', className: 'status-warning' },
|
||||
approved: { text: '审核通过', className: 'status-running' },
|
||||
rejected: { text: '审核拒绝', className: 'status-error' },
|
||||
withdrawn: { text: '已撤销', className: 'status-stopped' }
|
||||
};
|
||||
```
|
||||
|
||||
### 注意事项
|
||||
|
||||
1. **原型说明**:本页面为静态原型,所有交互均为前端模拟,未连接真实后端
|
||||
2. **状态持久化**:页面刷新后,状态会重置为初始值
|
||||
3. **按钮禁用**:使用 HTML 原生 `disabled` 属性,配合 `title` 提示显示禁用原因
|
||||
4. **Modal 确认**:删除和下架操作需要二次确认,使用 Modal 组件展示确认对话框
|
||||
5. **Toast 提示**:操作完成后显示 Toast 提示,展示操作结果(成功/失败)
|
||||
|
||||
*最后更新:2026-03-20*
|
||||
|
||||
Reference in New Issue
Block a user