diff --git a/README.md b/README.md index 01eac36..9a5ec1e 100644 --- a/README.md +++ b/README.md @@ -813,57 +813,55 @@ pendingUnlistReviews = [{ #### 技能详情页(SkillEditorPage) -**优化后的页面结构(两行布局):** +**优化后的页面结构(三段式布局):** ``` ┌─────────────────────────────────────────────────────────┐ │ 技能编辑页面优化 │ ├─────────────────────────────────────────────────────────┤ │ │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ 技能概览卡片 (两行结构) │ │ -│ ├───────────────────────────────────────────────────┤ │ -│ │ [图标] ┌─────────────────────────────────────┐ │ │ -│ │ │ 第一行:技能名称 │ │ │ -│ │ │ 第二行:👥 156 📦 v1.2.0 ⭐ 4.7 │ │ │ -│ │ └─────────────────────────────────────┘ │ │ -│ └───────────────────────────────────────────────────┘ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 技能概览卡片 │ │ +│ ├─────────────────────────────────────────────────────┤ │ +│ │ ┌────┐ 技能名称 [状态] [编辑基本信息] │ │ +│ │ │图标│ ─────────────────────────────────────────── │ │ +│ │ │80px│ 👤 1,234 ⭐ 4.8 📦 v1.2.0 │ │ +│ │ │x80 │ [分类] [标签1] [标签2] [标签3] │ │ +│ │ └────┘ 技能描述... │ │ +│ └─────────────────────────────────────────────────────┘ │ │ │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ 详细信息卡片 (普通卡片) │ │ -│ ├───────────────────────────────────────────────────┤ │ -│ │ 状态:已上架 │ │ -│ │ 分类:信息查询 │ │ -│ │ 标签:天气 查询 生活 │ │ -│ │ 技能描述:根据城市名称查询当前天气和未来预报... │ │ -│ │ 版本说明:新增支持未来7天预报 │ │ -│ └───────────────────────────────────────────────────┘ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 版本历史卡片 │ │ +│ ├─────────────────────────────────────────────────────┤ │ +│ │ 版本历史 [上传新版本] │ │ +│ │ ┌───────────────────────────────────────────────┐ │ │ +│ │ │ 版本号 │ 状态 │ 说明 │ 时间 │ 操作 │ │ │ +│ │ │ v1.3.0 │ 通过 │ ... │ ... │ [下载] │ │ │ +│ │ │ v1.2.0 │ 拒绝 │ ... │ ... │ [下载] │ │ │ +│ │ └───────────────────────────────────────────────┘ │ │ +│ └─────────────────────────────────────────────────────┘ │ │ │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ 操作按钮区 │ │ -│ ├───────────────────────────────────────────────────┤ │ -│ │ [更新基本信息] [下架技能] [删除技能] │ │ -│ └───────────────────────────────────────────────────┘ │ -│ │ -│ ┌───────────────────────────────────────────────────┐ │ -│ │ 技能包管理区 (保持不变) │ │ -│ ├───────────────────────────────────────────────────┤ │ -│ │ [上传新版本] 按钮 │ │ -│ │ 版本历史表格 │ │ -│ └───────────────────────────────────────────────────┘ │ +│ ┌─────────────────────────────────────────────────────┐ │ +│ │ 管理操作卡片 │ │ +│ ├─────────────────────────────────────────────────────┤ │ +│ │ 管理 │ │ +│ │ [下架技能] [删除技能] │ │ +│ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ ``` **关键改进:** -1. **两行布局设计**:左侧技能图标,右侧两行信息结构 -2. **图标化指标**:👥 订阅数、📦 当前版本、⭐ 评分,使用图标库图标 -3. **信息分层**: - - 第一行:技能名称 - - 第二行:关键指标(带图标) -4. **详细信息卡片**:包含状态、分类、标签、技能描述和版本说明 -5. **优化视觉层次**:四层结构:技能概览 → 详细信息 → 操作按钮 → 版本管理 -6. **简化交互**:详细信息卡片为普通卡片,不可折叠 +1. **三段式布局**:头部概览、版本历史、管理操作三个独立卡片 +2. **图标简化**:移除渐变背景,直接显示图标或首字母 +3. **信息整合**: + - 第一行:技能名称、状态标签、编辑按钮 + - 第二行:指标行(图标+数值,无文字说明) + - 第三行:标签区(分类标签在前,蓝色背景区分) + - 第四行:技能描述 +4. **操作按钮分组**:编辑操作在右上角,危险操作在底部管理区 +5. **上传按钮单一入口**:只在版本历史卡片标题旁显示 +6. **状态标签纯文字**:移除图标,通过颜色区分状态 **版本历史表格:** @@ -873,11 +871,11 @@ pendingUnlistReviews = [{ | v1.2.0 | 优化性能... | 审核拒绝 | 2026-03-08 | [下载] 拒绝理由: 测试用例不完整 | | v1.1.0 | 新增支持... | 审核中 | 2026-02-20 | [撤回审核] [下载] | -**技能操作按钮:** -- 更新基本信息:始终可用 -- 上传新版本:有审核中版本时禁用,提示"存在审核中的版本,请先撤回后再上传新版本" -- 下架技能:技能状态为已上架且无审核中版本时可用 -- 删除技能:技能状态为开发中或已下架时可用,已上架时禁用并提示"已上架的技能需要先下架才能删除" +**技能操作规则:** +- 编辑基本信息:始终可用,位置在概览卡片右上角 +- 上传新版本:有审核中版本时禁用,位置在版本历史卡片标题旁 +- 下架技能:技能状态为已上架且无审核中版本时可用,位置在管理卡片 +- 删除技能:技能状态为开发中或已下架时可用,已上架时禁用,位置在管理卡片 #### 我的技能列表页(MySkillsPage) @@ -956,4 +954,4 @@ const versionStatusMap = { 4. **Modal 确认**:删除和下架操作需要二次确认,使用 Modal 组件展示确认对话框 5. **Toast 提示**:操作完成后显示 Toast 提示,展示操作结果(成功/失败) -*最后更新:2026-03-20* +*最后更新:2026-03-21* diff --git a/openspec/specs/skill-detail-page-layout/spec.md b/openspec/specs/skill-detail-page-layout/spec.md new file mode 100644 index 0000000..88b397b --- /dev/null +++ b/openspec/specs/skill-detail-page-layout/spec.md @@ -0,0 +1,91 @@ +## Purpose +技能详情页面布局规范定义了技能开发台详情页的三段式布局结构,确保信息层级清晰,用户能够快速定位基本信息和版本历史。 + +## ADDED Requirements + +### Requirement: 三段式页面布局 +技能详情页面 SHALL 采用三段式卡片布局结构,依次展示头部概览、版本历史、管理操作。 + +#### Scenario: 页面结构展示 +- **WHEN** 用户打开技能详情页面 +- **THEN** 页面从上到下依次显示:头部概览卡片、版本历史卡片、管理操作卡片 + +### Requirement: 返回按钮 +技能详情页面 SHALL 在页面顶部显示返回按钮,允许用户返回上一级页面。 + +#### Scenario: 返回按钮显示 +- **WHEN** 用户查看技能详情页面 +- **THEN** 页面顶部显示返回按钮,点击后返回"我的技能"页面 + +### Requirement: 头部概览卡片 +技能详情页面 SHALL 在页面顶部显示头部概览卡片,整合展示技能的核心信息。 + +#### Scenario: 概览卡片信息展示 +- **WHEN** 用户查看技能详情页面 +- **THEN** 头部概览卡片包含:技能图标(80x80,无背景)、技能名称、状态标签、指标行、标签区、技能描述 + +#### Scenario: 概览卡片第一行布局 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 第一行显示:技能名称、状态标签、右上角"编辑基本信息"按钮 + +#### Scenario: 概览卡片图标样式 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 技能图标为 80x80 像素,无渐变背景,直接显示图标或首字母 + +### Requirement: 指标行布局 +头部概览卡片 SHALL 在名称下方显示指标行,展示关键数据。 + +#### Scenario: 指标行内容 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 指标行依次显示:订阅数(图标+数值)、评分(图标+数值)、当前版本号(图标+版本号) + +#### Scenario: 指标行样式 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 指标行与名称之间有分隔线,指标项之间用空格分隔 + +### Requirement: 标签区布局 +头部概览卡片 SHALL 在指标行下方显示标签区。 + +#### Scenario: 标签区内容 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 标签区第一个位置显示分类标签(蓝色背景),后面跟随技能的所有标签 + +#### Scenario: 分类标签样式 +- **WHEN** 用户查看标签区 +- **THEN** 分类标签使用蓝色背景(#EFF6FF)和蓝色文字(#3B82F6),圆角样式 + +### Requirement: 技能描述 +头部概览卡片 SHALL 在标签区下方显示技能描述。 + +#### Scenario: 技能描述展示 +- **WHEN** 用户查看头部概览卡片 +- **THEN** 标签区下方显示技能描述文字 + +### Requirement: 版本历史卡片 +技能详情页面 SHALL 在头部概览卡片下方显示版本历史卡片。 + +#### Scenario: 版本历史卡片展示 +- **WHEN** 用户查看技能详情页面 +- **THEN** 版本历史卡片包含标题"版本历史"和版本历史表格 + +#### Scenario: 版本历史操作按钮 +- **WHEN** 用户查看版本历史卡片 +- **THEN** 卡片标题栏右侧显示"上传新版本"按钮 + +### Requirement: 管理操作卡片 +技能详情页面 SHALL 在版本历史卡片下方显示管理操作卡片。 + +#### Scenario: 管理操作卡片展示 +- **WHEN** 用户查看技能详情页面 +- **THEN** 管理操作卡片包含标题"管理"和操作按钮区 + +#### Scenario: 管理操作按钮展示 +- **WHEN** 用户查看管理操作卡片 +- **THEN** 卡片内直接展示"下架技能"和"删除技能"按钮 + +### Requirement: 卡片间距规范 +技能详情页面的卡片之间 SHALL 保持一致的间距。 + +#### Scenario: 卡片间距 +- **WHEN** 用户查看技能详情页面 +- **THEN** 每个卡片之间有 16px 的垂直间距 diff --git a/openspec/specs/skill-info-collapsible-panel/spec.md b/openspec/specs/skill-info-collapsible-panel/spec.md deleted file mode 100644 index 6544850..0000000 --- a/openspec/specs/skill-info-collapsible-panel/spec.md +++ /dev/null @@ -1,35 +0,0 @@ -## Purpose -技能信息折叠面板用于组织技能详细信息,解决信息重复显示问题,提供更好的信息组织和用户体验。 - -## 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** 显示完整的技能描述文字,支持多行显示 \ No newline at end of file diff --git a/openspec/specs/skill-overview-card/spec.md b/openspec/specs/skill-overview-card/spec.md index 0d0b81d..a89e179 100644 --- a/openspec/specs/skill-overview-card/spec.md +++ b/openspec/specs/skill-overview-card/spec.md @@ -8,28 +8,48 @@ #### Scenario: 卡片布局结构 - **WHEN** 用户打开技能编辑页面 -- **THEN** 页面顶部显示技能概览卡片,包含技能图标、名称、状态标签和关键指标 +- **THEN** 页面顶部显示技能概览卡片,包含技能图标、名称、状态标签、指标行、标签区(含分类)、技能描述和右上角操作按钮 #### Scenario: 技能图标显示 - **WHEN** 用户查看技能概览卡片 -- **THEN** 卡片左侧显示技能图标,图标尺寸为80x80像素,圆角16像素 +- **THEN** 卡片左侧显示技能图标,图标尺寸为80x80像素,无背景,直接显示图标或首字母 -#### Scenario: 技能名称显示 +#### Scenario: 技能名称和状态显示 - **WHEN** 用户查看技能概览卡片 -- **THEN** 卡片右侧顶部显示技能名称,字体大小为24px,字体加粗 +- **THEN** 卡片右侧第一行显示技能名称、状态标签,名称右侧显示"编辑基本信息"按钮 -#### Scenario: 状态标签显示 +#### Scenario: 状态标签样式 - **WHEN** 用户查看技能概览卡片 -- **THEN** 技能名称下方显示状态标签,标签样式与现有状态标签系统保持一致 +- **THEN** 状态标签为纯文字样式,不使用图标,通过颜色区分状态类型 -#### Scenario: 关键指标显示 +#### Scenario: 指标行显示 - **WHEN** 用户查看技能概览卡片 -- **THEN** 状态标签右侧显示关键指标,包括订阅数和评分,指标之间用分隔符分隔 +- **THEN** 名称下方显示指标行,包含订阅数(图标+数值)、评分(图标+数值)、当前版本号(图标+版本号) + +#### Scenario: 指标行样式 +- **WHEN** 用户查看技能概览卡片 +- **THEN** 指标行与名称之间有分隔线,指标项不显示文字说明(如"订阅"、"评分"),图标本身已足够表达含义 + +#### Scenario: 标签区显示 +- **WHEN** 用户查看技能概览卡片 +- **THEN** 指标行下方显示标签区,第一个位置显示分类标签(蓝色背景),后面跟随技能的所有标签 + +#### Scenario: 分类标签样式 +- **WHEN** 用户查看标签区 +- **THEN** 分类标签使用蓝色背景(#EFF6FF)和蓝色文字(#3B82F6),圆角胶囊样式,与其他标签区分 + +#### Scenario: 技能描述显示 +- **WHEN** 用户查看技能概览卡片 +- **THEN** 标签区下方显示技能描述 + +#### Scenario: 操作按钮显示 +- **WHEN** 用户查看技能概览卡片 +- **THEN** 卡片右上角只显示"编辑基本信息"操作按钮 #### Scenario: 卡片视觉样式 - **WHEN** 用户查看技能概览卡片 -- **THEN** 卡片具有白色背景、圆角12像素、轻微阴影效果,与页面其他卡片样式一致 +- **THEN** 卡片具有白色背景、圆角12像素、轻微阴影效果 #### Scenario: 响应式布局 - **WHEN** 用户在较小屏幕设备上查看技能概览卡片 -- **THEN** 卡片内容自动调整布局,确保信息清晰可读 \ No newline at end of file +- **THEN** 卡片内容自动调整布局,确保信息清晰可读 diff --git a/src/pages/developer/SkillEditorPage.jsx b/src/pages/developer/SkillEditorPage.jsx index 0805c3d..696f36b 100644 --- a/src/pages/developer/SkillEditorPage.jsx +++ b/src/pages/developer/SkillEditorPage.jsx @@ -53,99 +53,66 @@ function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo }) 返回我的技能 - {/* 1. 技能概览卡片(两行结构) */} + {/* 1. 技能概览卡片(三段式布局第一段) */}
{skill.icon || skill.name.charAt(0)}
- {/* 第一行:技能名称 */} -

{skill.name}

- - {/* 第二行:关键指标(带图标) */} + {/* 第一行:技能名称 + 状态 + 右上角操作按钮 */} +
+

{skill.name}

+ + {skillStatusMap[skill.status]?.text || skill.status} + +
+ +
+
+ + {/* 第二行:指标行(带分隔线) */}
{skill.installs || 0}
-
- - {skill.version || 'v1.0.0'} -
{skill.rating || 0}
+
+ + {skill.version || 'v1.0.0'} +
+
+ + {/* 第三行:标签区 */} +
+ {skill.category} + {skill.tags.map(tag => ( + {tag} + ))} +
+ + {/* 第四行:技能描述 */} +
+

{skill.desc}

- {/* 2. 详细信息卡片(普通卡片,不可折叠) */} -
+ {/* 2. 版本历史卡片(三段式布局第二段) */} +
-

详细信息

+
版本历史
+
-
-
- - - {skillStatusMap[skill.status]?.text || skill.status} - -
-
- - {skill.category} -
-
- -
- {skill.tags.map(tag => ( - {tag} - ))} -
-
-
- -

{skill.desc}

-
-
- - {currentVersion?.desc || '暂无版本说明'} -
-
-
-
- - {/* 3. 操作按钮区 */} -
- - {skill.status === 'published' && ( - - )} - -
-
-
-
技能包管理
-
-
-
- -
-

版本历史

@@ -200,6 +167,29 @@ function SkillEditorPage({ skillId, onBack, onUploadNewVersion, onUpdateInfo }) + + {/* 3. 管理操作卡片(三段式布局第三段) */} +
+
+
管理
+
+
+
+ {skill.status === 'published' && ( + + )} + +
+
+
+