fix(ux): #1894 抖音提取前端不再拦截非http开头文本,透传后端400错误
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m20s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m25s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m37s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m36s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m52s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m18s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m41s
AI Code Review / AI Code Review (pull_request) Successful in 6m31s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 8m2s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m17s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m22s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 3m21s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 0s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m20s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m25s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m37s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m36s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m52s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 3m18s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 3m41s
AI Code Review / AI Code Review (pull_request) Successful in 6m31s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 8m2s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m17s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m22s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 3m21s
后端已通过 _extract_url_from_text 支持从任意分享文本(含App「复制链接」
带的文案)自动提取URL,前端不应再做 ^https?:// 前缀校验。
修复:
- ScriptLibrary.handleDouyinExtract: 删除 http(s):// 前缀正则校验,把
用户粘贴的原文(trim 后)整体作为 {url} 提交给 POST /scripts/extract-from-douyin,
由后端 _extract_url_from_text 负责 URL 识别/校验。
- 后端返回 400(未找到有效链接/仅支持抖音域名等)时,extractErrMsg 已能
解析 response.data.detail,直接 toast.error 透传后端文案;保持通用
fallback「抖音文案提取失败」兜底。
- 空输入提示由「请粘贴抖音视频链接」改为「请粘贴抖音视频链接或分享文案」。
- 弹窗说明文字 + TextArea placeholder 更新,提示用户直接粘贴 App「复制链接」
全部内容即可(包含分享文案+短链)。
- loading 态提示文案开头加「提取中,」,confirmLoading/closable/maskClosable/
TextArea disabled 已由 #1965 完成,无需额外修改即可防重复点击。
Refs: #1894
This commit is contained in:
@@ -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
|
||||
>
|
||||
<Paragraph type="secondary" style={{ marginBottom: 12, fontSize: 13 }}>
|
||||
粘贴抖音分享链接(支持 v.douyin.com 短链和 www.douyin.com/video/ 长链), AI
|
||||
将自动下载音频并识别文案。首次识别可能需要 5-15 秒。
|
||||
粘贴抖音分享文案或链接即可,系统会自动从文本中识别链接(支持 v.douyin.com 短链、
|
||||
www.douyin.com/video/ 长链,以及 App「复制链接」带的分享文案)。AI
|
||||
将自动下载音频并识别文案, 首次识别可能需要 5-15 秒。
|
||||
</Paragraph>
|
||||
<Input.TextArea
|
||||
placeholder="例如:https://v.douyin.com/xxxxx/ 或 https://www.douyin.com/video/xxxxx"
|
||||
placeholder="直接粘贴 App「复制链接」的全部内容即可,例如:8.88 复制打开抖音... https://v.douyin.com/xxxxx/"
|
||||
value={douyinUrl}
|
||||
onChange={(e) => setDouyinUrl(e.target.value)}
|
||||
rows={2}
|
||||
@@ -651,7 +649,7 @@ const ScriptLibrary: React.FC = () => {
|
||||
{douyinLoading && (
|
||||
<div className="xx-ai-loading-hint">
|
||||
<Spin size="small" style={{ marginRight: 8 }} />
|
||||
正在下载视频并识别文案,可能需要数秒,请稍候…
|
||||
提取中,正在下载视频并识别文案,可能需要数秒,请稍候…
|
||||
</div>
|
||||
)}
|
||||
</Modal>
|
||||
|
||||
Reference in New Issue
Block a user