From ee60770853ebea9ebdb6f901a8e8b45d2f733779 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 07:26:47 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor(editing-planner):=20=E6=8B=86?= =?UTF-8?q?=E5=88=86=20useClipOperations=20Hook=EF=BC=8C=E6=8C=89=E8=81=8C?= =?UTF-8?q?=E8=B4=A3=E6=8B=86=E4=B8=BA=203=20=E4=B8=AA=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 主文件 238→60 行(-75%),拆分为: - useClipBasicOps: 选中状态 + 增删改查重排 - useClipTrim: 裁剪、分割、重置裁剪 - useClipEffects: 转场、调速、TTS、配音选择 导入路径保持向后兼容 --- .../hooks/useClipOperations.ts | 238 ------------------ .../hooks/useClipOperations/index.ts | 38 +++ .../useClipOperations/useClipBasicOps.ts | 86 +++++++ .../hooks/useClipOperations/useClipEffects.ts | 74 ++++++ .../hooks/useClipOperations/useClipTrim.ts | 89 +++++++ 5 files changed, 287 insertions(+), 238 deletions(-) delete mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations.ts create mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts create mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts create mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts create mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts deleted file mode 100644 index ad1dade67..000000000 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts +++ /dev/null @@ -1,238 +0,0 @@ -import { useState, useCallback, useMemo } from "react" -import { Modal, message } from "antd" -import type { - ClipData, - ClipType, - TransitionConfig, - SpeedConfig, - TtsConfig, - TrimConfig, -} from "../types" -import type { AssetItem } from "@/api/assets" - -interface UseClipOperationsParams { - clips: ClipData[] - setClips: (updater: (prev: ClipData[]) => ClipData[]) => void -} - -/** - * 片段操作 Hook - * 片段增删改查、排序、裁剪、分割、转场、调速、TTS、配音选择 - */ -export const useClipOperations = ({ clips, setClips }: UseClipOperationsParams) => { - const [selectedClipId, setSelectedClipId] = useState(null) - - const selectedClip = useMemo( - () => clips.find((c) => c.id === selectedClipId) || null, - [clips, selectedClipId], - ) - - /* ── 选中 / 重排 / 删除 ── */ - - const handleClipSelect = useCallback((clipId: string) => { - setSelectedClipId(clipId) - }, []) - - const handleClipReorder = useCallback( - (fromIdx: number, toIdx: number) => { - setClips((prev) => { - const updated = [...prev] - const [moved] = updated.splice(fromIdx, 1) - updated.splice(toIdx, 0, moved) - return updated.map((c, i) => ({ ...c, order: i })) - }) - }, - [setClips], - ) - - const handleClipRemove = useCallback( - (clipId: string) => { - Modal.confirm({ - title: "删除片段", - content: "确定要删除这个片段吗?此操作可通过撤销恢复。", - okText: "删除", - okType: "danger", - cancelText: "取消", - onOk: () => { - setClips((prev) => prev.filter((c) => c.id !== clipId)) - if (selectedClipId === clipId) setSelectedClipId(null) - }, - }) - }, - [setClips, selectedClipId], - ) - - const handleClipUpdate = useCallback( - (clipId: string, data: Partial) => { - setClips((prev) => prev.map((c) => (c.id === clipId ? { ...c, ...data } : c))) - }, - [setClips], - ) - - /** - * 添加片段(不绑定任何素材) - * 片段 = 时间规划 + 类型标记 - */ - const handleAddClip = useCallback( - (type: ClipType, duration: number) => { - const newClip: ClipData = { - id: `clip-${Date.now()}`, - type, - duration, - startOffset: 0, - order: clips.length, - } - setClips((prev) => [...prev, newClip]) - }, - [clips.length, setClips], - ) - - /* ── 裁剪 / 分割 / 重置 ── */ - - const handleClipTrim = useCallback( - (clipId: string, trimConfig: TrimConfig, newDuration: number) => { - setClips((prev) => - prev.map((c) => - c.id === clipId ? { ...c, trim_config: trimConfig, duration: newDuration } : c, - ), - ) - }, - [setClips], - ) - - const handleClipSplit = useCallback( - (clipId: string, splitRatio: number) => { - setClips((prev) => { - const idx = prev.findIndex((c) => c.id === clipId) - if (idx === -1) return prev - const clip = prev[idx] - const splitPoint = Math.round(clip.duration * splitRatio * 10) / 10 - if (splitPoint < 0.5 || splitPoint >= clip.duration - 0.5) return prev - - // 前半段 - const firstHalf: ClipData = { - ...clip, - duration: splitPoint, - trim_config: clip.trim_config - ? { - ...clip.trim_config, - end_time: clip.trim_config.start_time + splitPoint, - } - : undefined, - } - - // 后半段 - const secondHalf: ClipData = { - ...clip, - id: `clip-${Date.now()}`, - duration: clip.duration - splitPoint, - startOffset: clip.startOffset + splitPoint, - trim_config: clip.trim_config - ? { - ...clip.trim_config, - start_time: clip.trim_config.start_time + splitPoint, - } - : undefined, - order: (clip.order ?? idx) + 1, - } - - const updated = [...prev] - updated[idx] = firstHalf - updated.splice(idx + 1, 0, secondHalf) - return updated.map((c, i) => ({ ...c, order: i })) - }) - }, - [setClips], - ) - - const handleClipResetTrim = useCallback( - (clipId: string) => { - setClips((prev) => - prev.map((c) => { - if (c.id !== clipId || !c.trim_config) return c - const originalDuration = c.trim_config.original_duration ?? c.duration - return { - ...c, - duration: originalDuration, - trim_config: undefined, - } - }), - ) - }, - [setClips], - ) - - /* ── 转场 / 调速 / TTS ── */ - - const handleTransitionChange = useCallback( - (targetClipId: string | null, config: TransitionConfig) => { - if (targetClipId) { - handleClipUpdate(targetClipId, { transition: config }) - } - // 同时更新全局默认转场(供新片段使用)—— 暂未实现全局默认 - }, - [handleClipUpdate], - ) - - const handleSpeedChange = useCallback( - (targetClipId: string | null, config: SpeedConfig) => { - if (targetClipId) { - handleClipUpdate(targetClipId, { speed: config }) - } - }, - [handleClipUpdate], - ) - - const handleApplySpeedAll = useCallback( - (config: SpeedConfig) => { - setClips((prev) => prev.map((c) => ({ ...c, speed: { ...config } }))) - message.success("已应用到所有片段") - }, - [setClips], - ) - - const handleTtsChange = useCallback( - (targetClipId: string | null, ttsConfig: TtsConfig) => { - if (!targetClipId) return - handleClipUpdate(targetClipId, { tts_config: ttsConfig }) - }, - [handleClipUpdate], - ) - - /** 为片段选择配音素材 */ - const handleClipVoiceSelect = useCallback( - (clipId: string, asset: AssetItem | null) => { - setClips((prev) => - prev.map((c) => - c.id === clipId - ? { - ...c, - voice_asset_id: asset?.id ?? undefined, - voice_file_url: asset?.file_url ?? undefined, - } - : c, - ), - ) - }, - [setClips], - ) - - return { - selectedClipId, - setSelectedClipId, - selectedClip, - handleClipSelect, - handleClipReorder, - handleClipRemove, - handleClipUpdate, - handleAddClip, - handleClipTrim, - handleClipSplit, - handleClipResetTrim, - handleTransitionChange, - handleSpeedChange, - handleApplySpeedAll, - handleTtsChange, - handleClipVoiceSelect, - } -} diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts new file mode 100644 index 000000000..585256b29 --- /dev/null +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts @@ -0,0 +1,38 @@ +import type { ClipData } from "../types" +import { useClipBasicOps } from "./useClipBasicOps" +import { useClipTrim } from "./useClipTrim" +import { useClipEffects } from "./useClipEffects" + +interface UseClipOperationsParams { + clips: ClipData[] + setClips: (updater: (prev: ClipData[]) => ClipData[]) => void +} + +/** + * 片段操作 Hook + * 片段增删改查、排序、裁剪、分割、转场、调速、TTS、配音选择 + */ +export const useClipOperations = ({ clips, setClips }: UseClipOperationsParams) => { + const basicOps = useClipBasicOps({ clips, setClips }) + const trimOps = useClipTrim({ setClips }) + const effectOps = useClipEffects({ setClips, handleClipUpdate: basicOps.handleClipUpdate }) + + return { + selectedClipId: basicOps.selectedClipId, + setSelectedClipId: basicOps.setSelectedClipId, + selectedClip: basicOps.selectedClip, + handleClipSelect: basicOps.handleClipSelect, + handleClipReorder: basicOps.handleClipReorder, + handleClipRemove: basicOps.handleClipRemove, + handleClipUpdate: basicOps.handleClipUpdate, + handleAddClip: basicOps.handleAddClip, + handleClipTrim: trimOps.handleClipTrim, + handleClipSplit: trimOps.handleClipSplit, + handleClipResetTrim: trimOps.handleClipResetTrim, + handleTransitionChange: effectOps.handleTransitionChange, + handleSpeedChange: effectOps.handleSpeedChange, + handleApplySpeedAll: effectOps.handleApplySpeedAll, + handleTtsChange: effectOps.handleTtsChange, + handleClipVoiceSelect: effectOps.handleClipVoiceSelect, + } +} diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts new file mode 100644 index 000000000..cac718cb9 --- /dev/null +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts @@ -0,0 +1,86 @@ +import { useState, useMemo, useCallback } from "react" +import { Modal } from "antd" +import type { ClipData, ClipType } from "../types" + +interface UseClipBasicOpsParams { + clips: ClipData[] + setClips: (updater: (prev: ClipData[]) => ClipData[]) => void +} + +/** + * 片段基础操作 Hook + * 选中状态、增删改查、重排 + */ +export function useClipBasicOps({ clips, setClips }: UseClipBasicOpsParams) { + const [selectedClipId, setSelectedClipId] = useState(null) + + const selectedClip = useMemo( + () => clips.find((c) => c.id === selectedClipId) || null, + [clips, selectedClipId], + ) + + const handleClipSelect = useCallback((clipId: string) => { + setSelectedClipId(clipId) + }, []) + + const handleClipReorder = useCallback( + (fromIdx: number, toIdx: number) => { + setClips((prev) => { + const updated = [...prev] + const [moved] = updated.splice(fromIdx, 1) + updated.splice(toIdx, 0, moved) + return updated.map((c, i) => ({ ...c, order: i })) + }) + }, + [setClips], + ) + + const handleClipRemove = useCallback( + (clipId: string) => { + Modal.confirm({ + title: "删除片段", + content: "确定要删除这个片段吗?此操作可通过撤销恢复。", + okText: "删除", + okType: "danger", + cancelText: "取消", + onOk: () => { + setClips((prev) => prev.filter((c) => c.id !== clipId)) + if (selectedClipId === clipId) setSelectedClipId(null) + }, + }) + }, + [setClips, selectedClipId], + ) + + const handleClipUpdate = useCallback( + (clipId: string, data: Partial) => { + setClips((prev) => prev.map((c) => (c.id === clipId ? { ...c, ...data } : c))) + }, + [setClips], + ) + + const handleAddClip = useCallback( + (type: ClipType, duration: number) => { + const newClip: ClipData = { + id: `clip-${Date.now()}`, + type, + duration, + startOffset: 0, + order: clips.length, + } + setClips((prev) => [...prev, newClip]) + }, + [clips.length, setClips], + ) + + return { + selectedClipId, + setSelectedClipId, + selectedClip, + handleClipSelect, + handleClipReorder, + handleClipRemove, + handleClipUpdate, + handleAddClip, + } +} diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts new file mode 100644 index 000000000..fc394a456 --- /dev/null +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts @@ -0,0 +1,74 @@ +import { useCallback } from "react" +import { message } from "antd" +import type { ClipData, TransitionConfig, SpeedConfig, TtsConfig } from "../types" +import type { AssetItem } from "@/api/assets" + +interface UseClipEffectsParams { + setClips: (updater: (prev: ClipData[]) => ClipData[]) => void + handleClipUpdate: (clipId: string, data: Partial) => void +} + +/** + * 片段效果操作 Hook + * 转场、调速、TTS、配音选择 + */ +export function useClipEffects({ setClips, handleClipUpdate }: UseClipEffectsParams) { + const handleTransitionChange = useCallback( + (targetClipId: string | null, config: TransitionConfig) => { + if (targetClipId) { + handleClipUpdate(targetClipId, { transition: config }) + } + }, + [handleClipUpdate], + ) + + const handleSpeedChange = useCallback( + (targetClipId: string | null, config: SpeedConfig) => { + if (targetClipId) { + handleClipUpdate(targetClipId, { speed: config }) + } + }, + [handleClipUpdate], + ) + + const handleApplySpeedAll = useCallback( + (config: SpeedConfig) => { + setClips((prev) => prev.map((c) => ({ ...c, speed: { ...config } }))) + message.success("已应用到所有片段") + }, + [setClips], + ) + + const handleTtsChange = useCallback( + (targetClipId: string | null, ttsConfig: TtsConfig) => { + if (!targetClipId) return + handleClipUpdate(targetClipId, { tts_config: ttsConfig }) + }, + [handleClipUpdate], + ) + + const handleClipVoiceSelect = useCallback( + (clipId: string, asset: AssetItem | null) => { + setClips((prev) => + prev.map((c) => + c.id === clipId + ? { + ...c, + voice_asset_id: asset?.id ?? undefined, + voice_file_url: asset?.file_url ?? undefined, + } + : c, + ), + ) + }, + [setClips], + ) + + return { + handleTransitionChange, + handleSpeedChange, + handleApplySpeedAll, + handleTtsChange, + handleClipVoiceSelect, + } +} diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts new file mode 100644 index 000000000..2a48f0ff4 --- /dev/null +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts @@ -0,0 +1,89 @@ +import { useCallback } from "react" +import type { ClipData, TrimConfig } from "../types" + +interface UseClipTrimParams { + setClips: (updater: (prev: ClipData[]) => ClipData[]) => void +} + +/** + * 片段裁剪分割 Hook + * 裁剪、分割、重置裁剪 + */ +export function useClipTrim({ setClips }: UseClipTrimParams) { + const handleClipTrim = useCallback( + (clipId: string, trimConfig: TrimConfig, newDuration: number) => { + setClips((prev) => + prev.map((c) => + c.id === clipId ? { ...c, trim_config: trimConfig, duration: newDuration } : c, + ), + ) + }, + [setClips], + ) + + const handleClipSplit = useCallback( + (clipId: string, splitRatio: number) => { + setClips((prev) => { + const idx = prev.findIndex((c) => c.id === clipId) + if (idx === -1) return prev + const clip = prev[idx] + const splitPoint = Math.round(clip.duration * splitRatio * 10) / 10 + if (splitPoint < 0.5 || splitPoint >= clip.duration - 0.5) return prev + + const firstHalf: ClipData = { + ...clip, + duration: splitPoint, + trim_config: clip.trim_config + ? { + ...clip.trim_config, + end_time: clip.trim_config.start_time + splitPoint, + } + : undefined, + } + + const secondHalf: ClipData = { + ...clip, + id: `clip-${Date.now()}`, + duration: clip.duration - splitPoint, + startOffset: clip.startOffset + splitPoint, + trim_config: clip.trim_config + ? { + ...clip.trim_config, + start_time: clip.trim_config.start_time + splitPoint, + } + : undefined, + order: (clip.order ?? idx) + 1, + } + + const updated = [...prev] + updated[idx] = firstHalf + updated.splice(idx + 1, 0, secondHalf) + return updated.map((c, i) => ({ ...c, order: i })) + }) + }, + [setClips], + ) + + const handleClipResetTrim = useCallback( + (clipId: string) => { + setClips((prev) => + prev.map((c) => { + if (c.id !== clipId || !c.trim_config) return c + const originalDuration = c.trim_config.original_duration ?? c.duration + return { + ...c, + duration: originalDuration, + trim_config: undefined, + } + }), + ) + }, + [setClips], + ) + + return { + handleClipTrim, + handleClipSplit, + handleClipResetTrim, + } +} -- 2.54.0 From 2a16c755bfd6698a35f6a2e60f819655bd8d2395 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 12:41:29 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=E6=81=A2=E5=A4=8D=20useClipOperatio?= =?UTF-8?q?ns.ts=20=E4=B8=BB=E5=85=A5=E5=8F=A3=EF=BC=8Cre-export=20?= =?UTF-8?q?=E5=AD=90=E7=9B=AE=E5=BD=95=E4=BF=9D=E6=8C=81=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/src/pages/editing-planner/hooks/useClipOperations.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations.ts diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts new file mode 100644 index 000000000..b3c9bc3db --- /dev/null +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts @@ -0,0 +1,5 @@ +/** + * useClipOperations 入口(向后兼容) + * 实际实现位于 ./useClipOperations/ 目录 + */ +export { useClipOperations } from "./useClipOperations" -- 2.54.0 From 9a854679f8c0040043f6d7e2969f367d45ad3a4b Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 12:41:31 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20index.ts=20?= =?UTF-8?q?=E4=B8=AD=20types=20=E5=AF=BC=E5=85=A5=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=88../types=20=E2=86=92=20../../types=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/editing-planner/hooks/useClipOperations/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts index 585256b29..4ea722310 100644 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/index.ts @@ -1,4 +1,4 @@ -import type { ClipData } from "../types" +import type { ClipData } from "../../types" import { useClipBasicOps } from "./useClipBasicOps" import { useClipTrim } from "./useClipTrim" import { useClipEffects } from "./useClipEffects" -- 2.54.0 From eadb2eef57626390a8c91412346d9c3f0bf0d5bf Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 12:41:32 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20useClipBasicOps?= =?UTF-8?q?.ts=20=E4=B8=AD=20types=20=E5=AF=BC=E5=85=A5=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=88../types=20=E2=86=92=20../../types=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editing-planner/hooks/useClipOperations/useClipBasicOps.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts index cac718cb9..015541705 100644 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts @@ -1,6 +1,6 @@ import { useState, useMemo, useCallback } from "react" import { Modal } from "antd" -import type { ClipData, ClipType } from "../types" +import type { ClipData, ClipType } from "../../types" interface UseClipBasicOpsParams { clips: ClipData[] -- 2.54.0 From 663f936a8c98f330cf72ae1eb36456918dd111af Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 12:41:33 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20useClipEffects.?= =?UTF-8?q?ts=20=E4=B8=AD=20types=20=E5=AF=BC=E5=85=A5=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=88../types=20=E2=86=92=20../../types=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editing-planner/hooks/useClipOperations/useClipEffects.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts index fc394a456..f192d07c0 100644 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts @@ -1,6 +1,6 @@ import { useCallback } from "react" import { message } from "antd" -import type { ClipData, TransitionConfig, SpeedConfig, TtsConfig } from "../types" +import type { ClipData, TransitionConfig, SpeedConfig, TtsConfig } from "../../types" import type { AssetItem } from "@/api/assets" interface UseClipEffectsParams { -- 2.54.0 From 8036b134deaa7065de9bc0000e836561a7e06f16 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 12:41:34 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=20useClipTrim.ts?= =?UTF-8?q?=20=E4=B8=AD=20types=20=E5=AF=BC=E5=85=A5=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=EF=BC=88../types=20=E2=86=92=20../../types=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editing-planner/hooks/useClipOperations/useClipTrim.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts index 2a48f0ff4..9272d627c 100644 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts +++ b/apps/web/src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts @@ -1,5 +1,5 @@ import { useCallback } from "react" -import type { ClipData, TrimConfig } from "../types" +import type { ClipData, TrimConfig } from "../../types" interface UseClipTrimParams { setClips: (updater: (prev: ClipData[]) => ClipData[]) => void -- 2.54.0 From 07562a71c2ffece0d4c4c5d74c7dd57459b295c1 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 27 Jul 2026 15:24:38 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E5=90=8C=E5=90=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E9=81=BF=E5=85=8D=E5=BE=AA=E7=8E=AF=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=EF=BC=88=E7=9B=AE=E5=BD=95index.ts=E5=B7=B2=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E5=85=A5=E5=8F=A3=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/src/pages/editing-planner/hooks/useClipOperations.ts | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 apps/web/src/pages/editing-planner/hooks/useClipOperations.ts diff --git a/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts b/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts deleted file mode 100644 index b3c9bc3db..000000000 --- a/apps/web/src/pages/editing-planner/hooks/useClipOperations.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** - * useClipOperations 入口(向后兼容) - * 实际实现位于 ./useClipOperations/ 目录 - */ -export { useClipOperations } from "./useClipOperations" -- 2.54.0