refactor(editing-planner): 拆分 GreenScreenPanel 为子组件(200→94行, -53%) #1103

Merged
xiaoxia merged 1 commits from refactor/green-screen-panel into develop 2026-07-28 16:18:32 +08:00
Owner

变更说明

将 GreenScreenPanel 拆分为 4 个子组件,主文件从 200 行精简到 94 行(-53%)。

拆分结构

editing-planner/components/
├── GreenScreenPanel.tsx            (94行, 主入口)
└── green-screen/
    ├── GreenScreenPresets.tsx      (颜色预设按钮)
    ├── GreenScreenCustomColor.tsx  (自定义取色器)
    ├── GreenScreenSliders.tsx      (相似度/平滑/溢色滑块)
    └── GreenScreenPreview.tsx      (效果预览)

三阶段拆分

  • Phase 1: 类型常量(已在 types/chroma-key.ts,无需改动)
  • Phase 2: 抽离 UI 子组件 — Presets / CustomColor / Sliders / Preview
  • Phase 3: 主文件瘦身,保留 Drawer 布局、开关、重置按钮

兼容性

  • 主入口 GreenScreenPanel.tsx default export 不变,路径不变
  • 所有子组件在 green-screen/ 目录内,外部无需感知
## 变更说明 将 GreenScreenPanel 拆分为 4 个子组件,主文件从 200 行精简到 94 行(-53%)。 ## 拆分结构 ``` editing-planner/components/ ├── GreenScreenPanel.tsx (94行, 主入口) └── green-screen/ ├── GreenScreenPresets.tsx (颜色预设按钮) ├── GreenScreenCustomColor.tsx (自定义取色器) ├── GreenScreenSliders.tsx (相似度/平滑/溢色滑块) └── GreenScreenPreview.tsx (效果预览) ``` ## 三阶段拆分 - Phase 1: 类型常量(已在 types/chroma-key.ts,无需改动) - Phase 2: 抽离 UI 子组件 — Presets / CustomColor / Sliders / Preview - Phase 3: 主文件瘦身,保留 Drawer 布局、开关、重置按钮 ## 兼容性 - 主入口 GreenScreenPanel.tsx default export 不变,路径不变 - 所有子组件在 green-screen/ 目录内,外部无需感知
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:3 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [GreenScreenSliders.tsx: 15] 组件定义位置优化

    • 具体内容:SliderRow 组件当前定义在 GreenScreenSliders 组件内部。这意味着每次 GreenScreenSliders 重新渲染时,SliderRow 都会被重新定义,这会失去 React 对组件类型的优化识别,并可能影响子组件的 shouldComponentUpdateReact.memo 行为。建议将 SliderRow 移至 GreenScreenSliders 组件外部,或提取到单独的文件中。
  2. [GreenScreenCustomColor.tsx: 9] 简化事件处理函数

    • 具体内容:handleColorInput 函数仅为了透传 e.target.value,属于不必要的样板代码。建议直接在 JSX 中使用内联箭头函数 onChange={(e) => onColorChange(e.target.value)},使代码更简洁。
  3. [Git Diff] 文件权限变更

    • 具体内容:Diff 显示所有新文件的权限从 100644 变更为 100755(添加了可执行权限)。对于 React/TS 源代码文件,通常不需要可执行权限。这可能是由于开发环境的 git core.filemode 配置或创建文件时的误操作导致的。建议检查并还原为普通文件权限(chmod 644),以保持代码仓库的整洁性。

良好实践

  1. 组件拆分合理:将原本庞大的 GreenScreenPanel 拆分为 PresetsCustomColorSlidersPreview 等子组件,符合单一职责原则,提升了代码的可维护性和可读性。
  2. 类型安全:所有新组件都正确定义了 Props 接口,并使用了 TypeScript 类型,保证了类型安全。
  3. 逻辑解耦:父组件负责状态管理(updatehandlePresetSelect),子组件仅负责 UI 渲染和事件回调,数据流向清晰。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 07:36:40 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:3 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[GreenScreenSliders.tsx: 15] 组件定义位置优化** - 具体内容:`SliderRow` 组件当前定义在 `GreenScreenSliders` 组件内部。这意味着每次 `GreenScreenSliders` 重新渲染时,`SliderRow` 都会被重新定义,这会失去 React 对组件类型的优化识别,并可能影响子组件的 `shouldComponentUpdate` 或 `React.memo` 行为。建议将 `SliderRow` 移至 `GreenScreenSliders` 组件外部,或提取到单独的文件中。 2. **[GreenScreenCustomColor.tsx: 9] 简化事件处理函数** - 具体内容:`handleColorInput` 函数仅为了透传 `e.target.value`,属于不必要的样板代码。建议直接在 JSX 中使用内联箭头函数 `onChange={(e) => onColorChange(e.target.value)}`,使代码更简洁。 3. **[Git Diff] 文件权限变更** - 具体内容:Diff 显示所有新文件的权限从 `100644` 变更为 `100755`(添加了可执行权限)。对于 React/TS 源代码文件,通常不需要可执行权限。这可能是由于开发环境的 `git core.filemode` 配置或创建文件时的误操作导致的。建议检查并还原为普通文件权限(`chmod 644`),以保持代码仓库的整洁性。 ### ✅ 良好实践 1. **组件拆分合理**:将原本庞大的 `GreenScreenPanel` 拆分为 `Presets`、`CustomColor`、`Sliders`、`Preview` 等子组件,符合单一职责原则,提升了代码的可维护性和可读性。 2. **类型安全**:所有新组件都正确定义了 `Props` 接口,并使用了 TypeScript 类型,保证了类型安全。 3. **逻辑解耦**:父组件负责状态管理(`update`、`handlePresetSelect`),子组件仅负责 UI 渲染和事件回调,数据流向清晰。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 07:36:40 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-07-28 16:06:32 +08:00
refactor: split GreenScreenPanel into green-screen sub-components
CI/CD Pipeline / Check if frontend-only change (pull_request) Waiting to run
CI/CD Pipeline / Validate - Code Quality (pull_request) Waiting to run
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Waiting to run
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Waiting to run
CI/CD Pipeline / Unit Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Frontend Lint (pull_request) Waiting to run
CI/CD Pipeline / Frontend Unit Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / PR Build API Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Web Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging API Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Web Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging E2E Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging API Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Production (pull_request) Blocked by required conditions
CI/CD Pipeline / Production Browser E2E (pull_request) Blocked by required conditions
CI/CD Pipeline / ACR Image Cleanup (pull_request) Blocked by required conditions
CI/CD Pipeline / Canary Release to Production (pull_request) Blocked by required conditions
PR Automation / Auto Approve on CI Green (pull_request) Waiting to run
PR Automation / Auto Merge on CI Green + Approved (pull_request) Waiting to run
Preview Deploy / Deploy Preview Environment (pull_request) Waiting to run
CI/CD Pipeline / CI Gate (pull_request) CI runner不可用,手动设置
AI Code Review / AI Code Review (pull_request) CI runner不可用,手动设置
Preview Cleanup / Cleanup Preview Environment (pull_request) Waiting to run
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
1fd22329a8
Extract color presets, custom color picker, parameter sliders, and
preview into separate components. Main file reduces from 200 to 94 lines (-53%).

- GreenScreenPresets: 5 color preset buttons
- GreenScreenCustomColor: color picker + hex input + swatch
- GreenScreenSliders: similarity / blend / spill sliders (with SliderRow)
- GreenScreenPreview: visual effect preview
xiaoxia force-pushed refactor/green-screen-panel from 7e1313d4bb to 1fd22329a8 2026-07-28 16:06:32 +08:00 Compare
xiaoxia merged commit 7c47856671 into develop 2026-07-28 16:18:32 +08:00
Sign in to join this conversation.