refactor(quality): Q15 PipelineEditor 巨型组件拆分 (676L→406L, -40%), 提取 types + TaskCard + TaskEditorPanel + PipelineLogDialog + RunsHistoryTab + PipelineMembersTab 6 个独立文件, 零逻辑变更, ESLint errors=0, tsc -b=0, npm build✓, 17/17 测试通过
This commit is contained in:
1 parent
02f3d75f56
commit
1f3b419d62
9 files changed
+698
-295
No files matched your search
+38
@@ -486,6 +486,7 @@ services/api.ts (1324L)
|
||||
| Q12 | 前端巨型组件拆分(CloudServerImport 699L→404L,提取 StepIndicator + 4 个向导步骤组件 + types,any[]→具体接口) | P0 | **done** |
|
||||
| Q13 | 前端巨型组件拆分(UnifiedQueryPanel 682L→529L,提取 constants + entry-mappers + 5 个 UI 子组件) | P0 | **done** |
|
||||
| Q14 | 前端巨型组件拆分(ServerManager 652L→442L,提取 ServerTableSection + server-export-utils) | P0 | **done** |
|
||||
| Q15 | 前端巨型组件拆分(PipelineEditor 676L→406L,提取 types + TaskCard + TaskEditorPanel + PipelineLogDialog + RunsHistoryTab + PipelineMembersTab) | P0 | **done** |
|
||||
|
||||
---
|
||||
|
||||
@@ -920,3 +921,40 @@ pending → in_progress → done / blocked
|
||||
- [x] Docker 部署 healthy,前端页面正常加载(HTTP 200)
|
||||
- [x] 服务器管理页功能不变(列表/搜索/筛选/分页/选择/批量删除/CSV 导出/创建编辑/终端/RDP/文件浏览全部正常)
|
||||
|
||||
---
|
||||
|
||||
## Q15: 前端巨型组件拆分 — PipelineEditor [done]
|
||||
|
||||
**问题**: `PipelineEditor.tsx`(676 行)是 Q14 拆分后项目最大的核心业务组件之一(排除 UI 库 sidebar/data-table),包含流水线编辑器页面的全部逻辑:类型定义 + 常量 + 工具函数(Task/Stage/LogEntry 接口 + taskIcons 映射 + uid/fmtDuration)、任务卡片组件、任务编辑面板、日志弹窗、以及主组件(状态管理 + 数据加载 + 事件处理 + 5 个 Tab 的 JSX:流程配置/触发器/变量/发布记录/成员管理)。单文件过大导致维护困难、代码导航低效。
|
||||
|
||||
**已完成 (2026-07-08)**:
|
||||
|
||||
将类型/常量/工具、任务卡片、任务编辑面板、日志弹窗、发布记录 Tab、成员管理 Tab 提取为 `pipeline-editor/` 子目录下的独立文件:
|
||||
|
||||
| 新文件 | 行数 | 职责 |
|
||||
|--------|------|------|
|
||||
| `types.ts` | 66 | Task/Stage/LogEntry 接口 + stageTypeLabelKeys/taskIcons 常量 + uid/fmtDuration 工具函数 |
|
||||
| `TaskCard.tsx` | 58 | 任务卡片展示组件(选中态 + 图标 + 名称/类型 + 悬浮删除按钮) |
|
||||
| `TaskEditorPanel.tsx` | 91 | 任务编辑面板(名称/类型/图标选择 + 脚本类型切换 + 脚本内容编辑) |
|
||||
| `PipelineLogDialog.tsx` | 71 | 流水线运行日志弹窗(运行元信息 + 彩色日志渲染 + 空状态) |
|
||||
| `RunsHistoryTab.tsx` | 177 | 发布记录 Tab(运行历史表格 + 状态徽章 + 触发方式 + 操作按钮) |
|
||||
| `PipelineMembersTab.tsx` | 172 | 成员管理 Tab(添加成员表单 + 直接用户列表 + 组授权列表) |
|
||||
|
||||
主文件 `PipelineEditor.tsx` 从 **676 行降至 406 行**(-40%),仅保留:20+ 个状态声明、数据加载(pipeline/members/runs/environments/buildNodes)、事件处理(task/stage CRUD + save/trigger/stop + member add/remove)、触发器 Tab + 变量 Tab JSX(与主组件状态紧耦合)、Flow Tab 编排(stages 列表 + TaskCard + TaskEditor 集成)、以及 5 个子组件的编排。
|
||||
|
||||
**提取原则**: types 为纯数据/类型(零 React 依赖,仅 lucide 图标类型引用);TaskCard 为受控展示组件(接收 task + selected + 回调);TaskEditorPanel 为受控编辑组件(接收 task + onUpdate 回调);PipelineLogDialog 为纯展示弹窗(接收 run + logs);RunsHistoryTab 为受控列表组件(接收 runs + onViewLog/onStop 回调);PipelineMembersTab 为受控管理组件(接收 members + 6 个状态/回调 props)。零逻辑变更。
|
||||
|
||||
**验收标准**:
|
||||
- [x] PipelineEditor.tsx 从 676 行降至 **406 行**(-40%)
|
||||
- [x] 6 个提取的文件全部 < 180 行(最大 RunsHistoryTab 177 行)
|
||||
- [x] `tsc -b` 零错误
|
||||
- [x] `npm run build` 零错误(✓ built in 16.35s)
|
||||
- [x] ESLint errors 保持 **0**(清理 1 个 unused import: Loader2)
|
||||
- [x] ESLint warnings 保持 **64**(无新增)
|
||||
- [x] 全局 ESLint any 保持 **0**
|
||||
- [x] `go build` 零错误
|
||||
- [x] 17/17 集成回归测试通过(零回归)
|
||||
- [x] Docker 部署 healthy,前端页面正常加载(HTTP 200)
|
||||
- [x] 流水线编辑器页功能不变(流程配置/触发器/变量/发布记录/成员管理 5 个 Tab 全部正常)
|
||||
|
||||
|
||||
Reference in new issue
Block a user