refactor(task-history): 三阶段重构 TaskHistory(302→90行, -70%) #970

Closed
xiaoxia wants to merge 3 commits from refactor/task-history into develop
Owner

变更说明

TaskHistory 任务历史页三阶段重构,主文件 302→90 行(-70%)

Phase 1: 常量/工具

  • constants.ts: TaskStatus / statusLabel / TABS 配置 / PAGE_SIZE
  • utils.ts: normalizeStatus / formatDate

Phase 2: UI 组件

  • components/TaskList.tsx: HistoryTabs(Tab栏) + TaskItem(任务卡片) + Pagination(分页)
  • components/States.tsx: PageHeader / LoadingState / ErrorState / EmptyState

Phase 3: 业务 Hook

  • hooks/useTaskHistory.ts: 列表查询 + 筛选 + 分页 + 重试 + 数据映射

说明

  • 页面功能完全不变,纯结构重构
  • Tab 计数、分页、重试逻辑全部封装进 Hook,组件纯展示
## 变更说明 TaskHistory 任务历史页三阶段重构,主文件 302→90 行(-70%) ### Phase 1: 常量/工具 - `constants.ts`: TaskStatus / statusLabel / TABS 配置 / PAGE_SIZE - `utils.ts`: normalizeStatus / formatDate ### Phase 2: UI 组件 - `components/TaskList.tsx`: HistoryTabs(Tab栏) + TaskItem(任务卡片) + Pagination(分页) - `components/States.tsx`: PageHeader / LoadingState / ErrorState / EmptyState ### Phase 3: 业务 Hook - `hooks/useTaskHistory.ts`: 列表查询 + 筛选 + 分页 + 重试 + 数据映射 ### 说明 - 页面功能完全不变,纯结构重构 - Tab 计数、分页、重试逻辑全部封装进 Hook,组件纯展示
xiaoxia added 1 commit 2026-07-26 18:10:55 +08:00
refactor(task-history): 三阶段重构 TaskHistory(302→90行, -70%)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 36s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 38s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m18s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m23s
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 40s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m6s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m10s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 41s
AI Code Review / AI Code Review (pull_request) Successful in 2m7s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 2m45s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 7m18s
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 29s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
203f001c1d
- Phase 1: 抽 constants(TaskStatus/TABS/PAGE_SIZE)+ utils(normalizeStatus/formatDate)
- Phase 2: 抽 2 个 UI 组件(TaskList含HistoryTabs/TaskItem/Pagination + States含4种状态组件)
- Phase 3: 抽 useTaskHistory 业务 Hook(查询/筛选/分页/重试)
- 主文件 302→90 行,职责分离清晰
xiaoxia added 1 commit 2026-07-27 12:34:44 +08:00
Merge branch 'develop' into refactor/task-history
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 58s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m35s
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 / Validate - Migration (alembic) (pull_request) Successful in 1m40s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m15s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m26s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 44s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m44s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 2m47s
AI Code Review / AI Code Review (pull_request) Successful in 4m31s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
f8f6082cbd
xiaoxia added 1 commit 2026-07-27 15:27:07 +08:00
fix: MappedTask.template 改为可选类型
CI/CD Pipeline / CI Gate (pull_request) CI运行中 [frontend-only]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m21s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m42s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m45s
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
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m6s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m16s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m38s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 52s
AI Code Review / AI Code Review (pull_request) Successful in 1m25s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m26s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m17s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 19s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 10s
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
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
fc4997874a
auto-approve-bot approved these changes 2026-07-27 17:00:41 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #970

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

  1. hooks/useTaskHistory.ts & components/TaskList.tsx:全局重试状态导致所有重试按钮误触禁用
    • 问题描述useTaskHistory 返回的 retryLoading 是基于 retryMutation.isPending 的全局布尔值。当用户点击列表中某一个任务的“重试”按钮时,该状态变为 true,导致列表中所有失败任务的“重试”按钮同时显示“重试中...”并被禁用。这阻止了用户连续重试多个失败任务,且对未被重试的任务提供了错误的 UI 反馈。
    • 修改建议:应在 Hook 中维护一个正在重试的任务 ID(例如 Set<string>string | null),或者将 retryMutation 对象传递给子组件,让子组件根据 task.id 判断当前任务是否处于 loading 状态。

💡 建议(2个可选)

  1. components/TaskList.tsx 第115行:分页组件未做页码省略处理,存在性能和 UI 隐患
    • 具体内容:代码使用 Array.from({ length: totalPages }) 渲染所有页码按钮。如果 totalPages 很大(例如超过 20 或 100),会导致页面渲染大量 DOM 节点,严重影响性能并破坏 UI 布局。建议实现标准的省略号分页逻辑(如 1 ... 4 5 6 ... 10)。
  2. hooks/useTaskHistory.ts 第85行paginatedTasks 计算未使用 useMemo 包裹
    • 具体内容paginatedTasks 在 Hook 每次执行时都会重新计算并创建一个新的数组引用。虽然 slice 操作很快,但新的引用会导致下游 TaskList 组件在每次父组件渲染时都触发重渲染(即使数据未变)。建议使用 useMemo 缓存计算结果,依赖项为 [filteredTasks, currentPage]

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 09:00:51 | 模型:

## 代码审查结果 - PR #970 ### ⚠️ 问题(1个需要修改) 1. **hooks/useTaskHistory.ts & components/TaskList.tsx**:全局重试状态导致所有重试按钮误触禁用 - **问题描述**:`useTaskHistory` 返回的 `retryLoading` 是基于 `retryMutation.isPending` 的全局布尔值。当用户点击列表中某一个任务的“重试”按钮时,该状态变为 `true`,导致列表中**所有**失败任务的“重试”按钮同时显示“重试中...”并被禁用。这阻止了用户连续重试多个失败任务,且对未被重试的任务提供了错误的 UI 反馈。 - **修改建议**:应在 Hook 中维护一个正在重试的任务 ID(例如 `Set<string>` 或 `string | null`),或者将 `retryMutation` 对象传递给子组件,让子组件根据 `task.id` 判断当前任务是否处于 loading 状态。 ### 💡 建议(2个可选) 1. **components/TaskList.tsx 第115行**:分页组件未做页码省略处理,存在性能和 UI 隐患 - **具体内容**:代码使用 `Array.from({ length: totalPages })` 渲染所有页码按钮。如果 `totalPages` 很大(例如超过 20 或 100),会导致页面渲染大量 DOM 节点,严重影响性能并破坏 UI 布局。建议实现标准的省略号分页逻辑(如 `1 ... 4 5 6 ... 10`)。 2. **hooks/useTaskHistory.ts 第85行**:`paginatedTasks` 计算未使用 `useMemo` 包裹 - **具体内容**:`paginatedTasks` 在 Hook 每次执行时都会重新计算并创建一个新的数组引用。虽然 `slice` 操作很快,但新的引用会导致下游 `TaskList` 组件在每次父组件渲染时都触发重渲染(即使数据未变)。建议使用 `useMemo` 缓存计算结果,依赖项为 `[filteredTasks, currentPage]`。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 09:00:51 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

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

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #970 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / CI Gate (pull_request) CI运行中 [frontend-only]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m21s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m42s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m45s
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
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 3m6s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m16s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m38s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 52s
AI Code Review / AI Code Review (pull_request) Successful in 1m25s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m26s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m17s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 19s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 10s
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
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.