From b2ba78c16cba346ba96edede86922ca05efc0269 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Thu, 17 Sep 2026 10:01:31 +0800 Subject: [PATCH] =?UTF-8?q?fix(ux):=20#1894=20=E6=8A=96=E9=9F=B3=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E5=89=8D=E7=AB=AF=E4=B8=8D=E5=86=8D=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E9=9D=9Ehttp=E5=BC=80=E5=A4=B4=E6=96=87=E6=9C=AC=EF=BC=8C?= =?UTF-8?q?=E9=80=8F=E4=BC=A0=E5=90=8E=E7=AB=AF400=E9=94=99=E8=AF=AF=20(#1?= =?UTF-8?q?972)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: xiaoxia Co-committed-by: xiaoxia --- apps/web/src/pages/scripts/ScriptLibrary.tsx | 26 +++++++++----------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/apps/web/src/pages/scripts/ScriptLibrary.tsx b/apps/web/src/pages/scripts/ScriptLibrary.tsx index 54c942c0e..4dd7b440d 100644 --- a/apps/web/src/pages/scripts/ScriptLibrary.tsx +++ b/apps/web/src/pages/scripts/ScriptLibrary.tsx @@ -6,7 +6,7 @@ * 操作:编辑 / 删除 / 复制 / 使用(跳创作页预填) * - 新建/编辑弹窗:标题(原"名称")、正文(含 AI 改写)、分类、标签 * - #1893/#1894 AI 能力: - * - 顶部「🎬 从抖音提取」按钮 → 输入抖音链接 → ASR 提取文案 → 自动填充到新建弹窗 + * - 顶部「🎬 从抖音提取」按钮 → 粘贴分享文案/链接(后端自动提取URL) → ASR 提取文案 → 自动填充到新建弹窗 * - 正文下方「✨ AI 改写」按钮 → 点击直接执行(美化 loading spinner + "正在改写..."), * 成功自动替换正文并 toast「改写成功」1s 自动关闭;失败 toast 错误 * - 标题旁「✨ AI 生成标题」按钮 → 候选列表一键填入 @@ -272,20 +272,16 @@ const ScriptLibrary: React.FC = () => { setDouyinModalOpen(true) } - /** 执行抖音提取,成功后打开新建弹窗并预填 content */ + /** #1894:执行抖音提取。前端不再做 URL 前缀校验,直接把用户粘贴的原文(含分享文案+链接)交给后端 _extract_url_from_text 自动提取。后端 400 错误(未找到链接/非抖音域名等)直接透传给用户。 */ const handleDouyinExtract = async () => { - const url = douyinUrl.trim() - if (!url) { - message.warning("请粘贴抖音视频链接") - return - } - if (!/^https?:\/\//i.test(url)) { - message.warning("请输入以 http(s):// 开头的完整链接") + const raw = douyinUrl.trim() + if (!raw) { + message.warning("请粘贴抖音视频链接或分享文案") return } setDouyinLoading(true) try { - const res = await extractScriptFromDouyin({ url }) + const res = await extractScriptFromDouyin({ url: raw }) message.success(`提取成功${res.duration_seconds ? `(时长 ${res.duration_seconds}s)` : ""}`) setDouyinModalOpen(false) setDouyinUrl("") @@ -300,6 +296,7 @@ const ScriptLibrary: React.FC = () => { }) setModalOpen(true) } catch (err) { + // 后端 400(未找到有效链接/仅支持抖音域名等)直接透传错误信息 message.error(extractErrMsg(err, "抖音文案提取失败")) } finally { setDouyinLoading(false) @@ -637,11 +634,12 @@ const ScriptLibrary: React.FC = () => { destroyOnClose > - 粘贴抖音分享链接(支持 v.douyin.com 短链和 www.douyin.com/video/ 长链), AI - 将自动下载音频并识别文案。首次识别可能需要 5-15 秒。 + 粘贴抖音分享文案或链接即可,系统会自动从文本中识别链接(支持 v.douyin.com 短链、 + www.douyin.com/video/ 长链,以及 App「复制链接」带的分享文案)。AI + 将自动下载音频并识别文案, 首次识别可能需要 5-15 秒。 setDouyinUrl(e.target.value)} rows={2} @@ -651,7 +649,7 @@ const ScriptLibrary: React.FC = () => { {douyinLoading && (
- 正在下载视频并识别文案,可能需要数秒,请稍候… + 提取中,正在下载视频并识别文案,可能需要数秒,请稍候…
)}