feat(approval): Q10 ApprovalWorkflowPage 巨型组件拆分 (705L→167L, -76%)

提取 4 个独立文件到 approval-workflow/ 子目录:
- types.ts (93L): 接口+常量+工具函数
- UserSelectInline.tsx (96L): 用户多选下拉组件
- WorkflowEditorModal.tsx (272L): 工作流编辑器弹窗
- WorkflowCard.tsx (134L): 工作流卡片组件

验证: tsc -b=0, npm build✓ (16.99s), ESLint errors=0, 17/17 测试通过
This commit is contained in:
attacker committed 2026-07-07 05:28:25 +08:00
1 parent 1f8abc0bbc
commit 6ba424a8bc
7 files changed
+650 -560

No files matched your search

+33
View File
@@ -481,6 +481,39 @@ services/api.ts (1324L)
| Q7 | 前端巨型组件拆分(AgentCLI 814L→521L,提取工具栏+常量+空状态+滚动按钮) | P0 | **done** |
| Q8 | 前端巨型组件拆分(SystemSettingsTab 754L→173L,提取通用/安全/LDAP 3 个子 Tab) | P0 | **done** |
| Q9 | 前端巨型组件拆分(NamespaceResourcePage 719L→300L,提取 RESOURCE_CONFIG + PodDetailDialog) | P0 | **done** |
| Q10 | 前端巨型组件拆分(ApprovalWorkflowPage 705L→167L,提取 types + UserSelectInline + WorkflowEditorModal + WorkflowCard) | P0 | **done** |
---
## Q10: 前端巨型组件拆分 — ApprovalWorkflowPage [done]
**问题**: `ApprovalWorkflowPage.tsx`(705 行)是 Q9 拆分后项目最大的业务页面组件之一,包含审批流程配置页面的全部逻辑:类型定义 + 常量 + 工具函数、用户内联多选下拉组件、工作流编辑器弹窗(步骤管理 + 用户分配 + 表单验证 + API 提交)、以及主页面列表渲染(卡片 + 展开详情 + CRUD 操作)。单文件过大导致维护困难、代码导航低效。
**已完成 (2026-07-07)**:
将类型/常量/工具、用户选择组件、编辑器弹窗、卡片组件提取为 `approval-workflow/` 子目录下的独立文件:
| 新文件 | 行数 | 职责 |
|--------|------|------|
| `types.ts` | 93 | WorkflowStep/WorkflowItem/UserItem/StepDraft 接口 + STEP_TYPE_COLORS/ICONS 常量 + parseApproverIds/resolveAdminId/buildDefaultSteps 工具函数 + EXECUTE_ELIGIBLE_ROLES 角色白名单 |
| `UserSelectInline.tsx` | 96 | 用户内联多选下拉组件(fixed 定位 + 全选/清空 + 标签展示 + 角色徽章) |
| `WorkflowEditorModal.tsx` | 272 | 工作流编辑器弹窗(名称/分类/描述表单 + 步骤增删移改 + 审批人分配 + 表单验证 + API 提交) |
| `WorkflowCard.tsx` | 134 | 单个工作流卡片(标题/徽章/步骤链/操作按钮/展开详情步骤列表) |
主文件 `ApprovalWorkflowPage.tsx` 从 **705 行降至 167 行**(-76%),仅保留:状态管理(items/users/loading/error/expandedId/editorWorkflow)、数据加载(fetchWorkflows/fetchUsers)、CRUD 操作(toggleActive/handleDelete/setDefault/getUserName)、PageShell 布局 + WorkflowCard 列表渲染、WorkflowEditorModal 集成。
**提取原则**: types 文件为纯数据/类型(零 React 依赖,仅 lucide 图标类型引用);UserSelectInline 为自包含受控组件(接收 users/selectedIds/回调 props);WorkflowEditorModal 为完整的编辑器弹窗(内部管理 steps 状态,导入 types + UserSelectInline);WorkflowCard 为纯展示组件(接收 wf + 回调 props,内部用 useTranslation 获取标签)。零逻辑变更。
**验收标准**:
- [x] ApprovalWorkflowPage.tsx 从 705 行降至 **167 行**(-76%)
- [x] 4 个提取的文件全部 < 275 行(最大 WorkflowEditorModal 272 行)
- [x] `tsc -b` 零错误
- [x] `npm run build` 零错误(✓ built in 16.99s)
- [x] ESLint errors 保持 **0**(approval-workflow/ 目录零 warnings)
- [x] `go build` 零错误
- [x] 17/17 集成回归测试通过(零回归)
- [x] Docker 部署 healthy
- [x] 审批工作流配置页功能不变(列表/新建/编辑/删除/启用停用/设默认/展开详情全部正常)
---