diff --git a/apps/web/src/components/voice/CloneModal/index.tsx b/apps/web/src/components/voice/CloneModal/index.tsx index 84044441f..821108d0b 100644 --- a/apps/web/src/components/voice/CloneModal/index.tsx +++ b/apps/web/src/components/voice/CloneModal/index.tsx @@ -297,7 +297,7 @@ const CloneModal: React.FC = ({ open, onClose, onSuccess }) => buttonSize="sm" onClick={() => { handleClose() - navigate("/app/voice-materials") + navigate("/app/voices?tab=material&upload=1") }} > 去配音库上传 diff --git a/apps/web/src/pages/voices/VoiceLibrary.tsx b/apps/web/src/pages/voices/VoiceLibrary.tsx index c2828e2be..9ea4d259a 100755 --- a/apps/web/src/pages/voices/VoiceLibrary.tsx +++ b/apps/web/src/pages/voices/VoiceLibrary.tsx @@ -160,14 +160,18 @@ const VoiceLibrary: React.FC = () => { } = useVoiceUpload({ showToast }) // ── URL 参数自动打开上传弹窗 ──────────────────────────── - const [searchParams] = useSearchParams() + const [searchParams, setSearchParams] = useSearchParams() useEffect(() => { if (searchParams.get("upload") === "1") { setActiveTab("material") setUploadOpen(true) + // 一次性触发器:清理 upload 参数,避免切换 Tab 时重复触发 + const next = new URLSearchParams(searchParams) + next.delete("upload") + setSearchParams(next, { replace: true }) } - }, [searchParams, setActiveTab, setUploadOpen]) + }, [searchParams, setActiveTab, setUploadOpen, setSearchParams]) // ── 切换 Tab 时停止播放 ─────────────────────────────── const handleTabChange = useCallback(