From c741169b351b066738d86e080d11c488ac85d38c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E6=9E=B3?= <7854742+wang_rumeng@user.noreply.gitee.com> Date: Tue, 12 Aug 2025 19:08:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=A7=92=E8=89=B2=E5=BA=93?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=A7=92=E8=89=B2=E9=80=89=E6=8B=A9=E5=92=8C?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E9=80=BB=E8=BE=91=E3=80=82=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=BA=93=E9=80=89=E6=8B=A9=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=E5=8A=A0=E8=BD=BD=E7=8A=B6=E6=80=81?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E8=A7=92=E8=89=B2=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E4=BB=A5=E7=A1=AE=E4=BF=9D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BD=93=E9=AA=8C=E6=B5=81=E7=95=85=E3=80=82=E5=90=8C=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E8=A7=92=E8=89=B2=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86=EF=BC=8C?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E5=8A=9F=E8=83=BD=E7=9A=84=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/ui/shot-tab-content.tsx | 46 ++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/components/ui/shot-tab-content.tsx b/components/ui/shot-tab-content.tsx index 56f1358..52e419d 100644 --- a/components/ui/shot-tab-content.tsx +++ b/components/ui/shot-tab-content.tsx @@ -27,17 +27,24 @@ export function ShotTabContent({ shotData, setSelectedSegment, regenerateVideoSegment, - filterRole + filterRole, + fetchUserRoleLibrary, + userRoleLibrary, + fetchRoleShots, + shotSelectionList, + applyRoleToSelectedShots } = useEditData('shot'); const [selectedIndex, setSelectedIndex] = useState(currentSketchIndex); const [detections, setDetections] = useState([]); const [scanState, setScanState] = useState<'idle' | 'scanning' | 'detected'>('idle'); const [isScanFailed, setIsScanFailed] = useState(false); - + const [isLoadingLibrary, setIsLoadingLibrary] = useState(false); const [isReplaceLibraryOpen, setIsReplaceLibraryOpen] = useState(false); const [isReplacePanelOpen, setIsReplacePanelOpen] = useState(false); - + const [selectedCharacter, setSelectedCharacter] = useState(null); + const [selectedLibaryRole, setSelectedLibaryRole] = useState(null); + const [isLoadingShots, setIsLoadingShots] = useState(false); const shotsEditorRef = useRef(null); const videoRef = useRef(null); @@ -91,24 +98,36 @@ export function ShotTabContent({ }; // 处理人物点击 打开角色库 - const handlePersonClick = (person: PersonDetection) => { + const handlePersonClick = async (person: PersonDetection) => { console.log('person', person); + setSelectedCharacter(person); + setIsLoadingLibrary(true); setIsReplaceLibraryOpen(true); + await fetchUserRoleLibrary(); + setIsLoadingLibrary(false); }; // 从角色库中选择角色 const handleSelectCharacter = (index: number) => { console.log('index', index); + setSelectedLibaryRole(userRoleLibrary[index]); setIsReplaceLibraryOpen(false); - // 模拟打开替换面板 - setTimeout(() => { - setIsReplacePanelOpen(true); - }, 1000); + handleStartReplaceCharacter(); + }; + + const handleStartReplaceCharacter = async () => { + setIsLoadingShots(true); + setIsReplacePanelOpen(true); + // 获取当前角色对应的视频片段 + await fetchRoleShots(selectedCharacter?.name || ''); + // 打开替换角色面板 + setIsLoadingShots(false); }; // 确认替换角色 - const handleConfirmReplace = (selectedShots: string[], addToLibrary: boolean) => { - + const handleConfirmReplace = () => { + applyRoleToSelectedShots(selectedLibaryRole); + setIsReplacePanelOpen(false); }; // 点击按钮重新生成 @@ -373,8 +392,9 @@ export function ShotTabContent({ onClose={() => setIsReplacePanelOpen(false)} > setIsReplacePanelOpen(false)} onConfirm={handleConfirmReplace} @@ -382,6 +402,8 @@ export function ShotTabContent({