refactor(task-center): 三阶段重构 TaskCenter(423→76行, -82%) #965

Closed
xiaoxia wants to merge 2 commits from refactor/task-center into develop
Owner

变更说明

TaskCenter 任务中心三阶段重构,主文件 423→76 行(-82%)

Phase 1: 常量/工具

  • constants.tsx: STATUS_TABS / TYPE_OPTIONS / STATUS_CONFIG / TYPE_LABELS
  • utils.ts: formatDuration / formatTime

Phase 2: UI 组件

  • components/TaskFilterBar.tsx: 筛选栏(状态 Tab + 类型下拉)
  • components/TaskTable.tsx: 任务表格(含 7 列定义 + 分页 + 展开行)
  • components/TaskErrorDetail.tsx: 错误详情展开面板

Phase 3: 业务 Hook

  • hooks/useTaskList.ts: 筛选状态 + 任务查询(自动轮询) + 重试 mutation + 展开逻辑

说明

  • 所有功能保持不变,纯结构重构
  • 表格列定义独立,后续新增列更方便
## 变更说明 TaskCenter 任务中心三阶段重构,主文件 423→76 行(-82%) ### Phase 1: 常量/工具 - `constants.tsx`: STATUS_TABS / TYPE_OPTIONS / STATUS_CONFIG / TYPE_LABELS - `utils.ts`: formatDuration / formatTime ### Phase 2: UI 组件 - `components/TaskFilterBar.tsx`: 筛选栏(状态 Tab + 类型下拉) - `components/TaskTable.tsx`: 任务表格(含 7 列定义 + 分页 + 展开行) - `components/TaskErrorDetail.tsx`: 错误详情展开面板 ### Phase 3: 业务 Hook - `hooks/useTaskList.ts`: 筛选状态 + 任务查询(自动轮询) + 重试 mutation + 展开逻辑 ### 说明 - 所有功能保持不变,纯结构重构 - 表格列定义独立,后续新增列更方便
xiaoxia added 1 commit 2026-07-26 17:48:01 +08:00
refactor(task-center): 三阶段重构 TaskCenter(423→76行, -82%)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m17s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 47s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m12s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 33s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m5s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 59s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m14s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m18s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 2m37s
AI Code Review / AI Code Review (pull_request) Successful in 2m25s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m14s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
a3e098b8da
- Phase 1: 抽 constants(STATUS_CONFIG/TYPE_LABELS等) + utils(formatDuration/formatTime)
- Phase 2: 抽 3 个 UI 组件(TaskFilterBar/TaskTable/TaskErrorDetail)
- Phase 3: 抽 useTaskList 业务 Hook(筛选+查询+重试)
- 主文件 423→76 行,职责清晰,表格列定义独立维护
xiaoxia added 1 commit 2026-07-27 12:34:49 +08:00
Merge branch 'develop' into refactor/task-center
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 12s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 52s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m7s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m11s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m37s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 30s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m54s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 3m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m45s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 15m25s
CI/CD Pipeline / CI Gate (pull_request) 失败: CI/CD Pipeline / Validate - Code Quality (pull_request) [frontend-only]
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 16s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
6d601dfbc3
auto-approve-bot approved these changes 2026-07-27 13:53:15 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-27 13:53:15 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

项目 详情
PR号 #965
预览链接 https://pr-965.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #965 | | 预览链接 | [https://pr-965.preview.xiaoxiajianji.com](https://pr-965.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

代码审查结果 - PR #965

⚠️ 问题(2个需要修改)

  1. apps/web/src/pages/tasks/components/TaskTable.tsx 第144行:重试按钮的 loading 状态使用了全局布尔值 retryLoading

    • 问题描述retryLoading 来自 useTaskList hook 中的 retryMutation.isPending,这是一个全局状态。当用户点击列表中某一个任务的“重试”时,列表中所有失败任务的“重试”按钮都会同时进入 loading 状态,导致交互反馈不准确,用户会误以为所有任务都在重试。
    • 修改建议:在 useTaskList 中维护 retryingId: string | null 状态,mutation 开始时设置为当前 ID,结束时重置为 null。将 retryingId 传给 TaskTable,在列渲染时判断 record.id === retryingId 来决定是否显示 loading。
  2. apps/web/src/pages/tasks/utils.ts 第4行formatDuration 函数对 0 值处理不当。

    • 问题描述:代码使用 if (!seconds) 进行判断。如果任务耗时正好为 0 秒(例如瞬间完成的任务),该条件成立,函数会返回 -,而不是预期的 0秒。这会导致信息展示错误。
    • 修改建议:应明确区分 null/undefined0。修改为 if (seconds === undefined || seconds === null) return "-"

💡 建议(1个可选)

  1. apps/web/src/pages/tasks/components/TaskTable.tsx 第37行columns 定义在组件内部,每次渲染都会重新创建。
    • 具体内容:虽然 React 对比 props 机制能处理大部分情况,但将 columns 数组(包含内联函数)直接定义在组件函数体中,会导致每次父组件渲染时子组件(如 Table 内部的 Cell)也发生不必要的重渲染。建议使用 useMemo 包裹 columns 定义,依赖项包含 onRetry, onViewDetail, onExpand 等回调函数。

格式检查通过 | 逻辑审查需修改 | 性能尚可


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 05:55:08 | 模型:

## 代码审查结果 - PR #965 ### ⚠️ 问题(2个需要修改) 1. **apps/web/src/pages/tasks/components/TaskTable.tsx 第144行**:重试按钮的 `loading` 状态使用了全局布尔值 `retryLoading`。 - **问题描述**:`retryLoading` 来自 `useTaskList` hook 中的 `retryMutation.isPending`,这是一个全局状态。当用户点击列表中某一个任务的“重试”时,列表中所有失败任务的“重试”按钮都会同时进入 loading 状态,导致交互反馈不准确,用户会误以为所有任务都在重试。 - **修改建议**:在 `useTaskList` 中维护 `retryingId: string | null` 状态,mutation 开始时设置为当前 ID,结束时重置为 null。将 `retryingId` 传给 `TaskTable`,在列渲染时判断 `record.id === retryingId` 来决定是否显示 loading。 2. **apps/web/src/pages/tasks/utils.ts 第4行**:`formatDuration` 函数对 `0` 值处理不当。 - **问题描述**:代码使用 `if (!seconds)` 进行判断。如果任务耗时正好为 0 秒(例如瞬间完成的任务),该条件成立,函数会返回 `-`,而不是预期的 `0秒`。这会导致信息展示错误。 - **修改建议**:应明确区分 `null/undefined` 和 `0`。修改为 `if (seconds === undefined || seconds === null) return "-"`。 ### 💡 建议(1个可选) 1. **apps/web/src/pages/tasks/components/TaskTable.tsx 第37行**:`columns` 定义在组件内部,每次渲染都会重新创建。 - **具体内容**:虽然 React 对比 props 机制能处理大部分情况,但将 `columns` 数组(包含内联函数)直接定义在组件函数体中,会导致每次父组件渲染时子组件(如 Table 内部的 Cell)也发生不必要的重渲染。建议使用 `useMemo` 包裹 `columns` 定义,依赖项包含 `onRetry`, `onViewDetail`, `onExpand` 等回调函数。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能尚可 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 05:55:08 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Collaborator

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.

Auto merge skipped after multiple 405 errors: PR may have conflicts or unresolved checks. Please review manually. This is not a CI failure.
xiaoxia closed this pull request 2026-07-27 16:33:18 +08:00

🗑️ 预览环境已清理

PR #965 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #965 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 12s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 52s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m7s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m11s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m37s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 30s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m54s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 3m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m45s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 15m25s
CI/CD Pipeline / CI Gate (pull_request) 失败: CI/CD Pipeline / Validate - Code Quality (pull_request) [frontend-only]
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 16s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.