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({