feat(imitation): add article imitation create flow

Introduce 仿写创作: new list and create views, backend imitation service
and prompt templates, worker task routing for imitation jobs, and one-click
rewrite triggers from question citation sources. Surface source article
URL/title on article list/detail, and restrict failed articles to delete-only.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-25 21:36:44 +08:00
parent 46d0a7aea0
commit 40d9a6cc63
29 changed files with 2678 additions and 120 deletions
+78
View File
@@ -71,6 +71,7 @@ const zhCN = {
templates: "模版创作",
custom: "自定义生成",
freeCreate: "自由创作",
imitation: "仿写创作",
media: "媒体管理",
brandManagement: "品牌管理",
brands: "品牌词库",
@@ -150,6 +151,14 @@ const zhCN = {
title: "自由创作",
description: "自由创建并编辑文章,无需模版或AI生成。",
},
imitation: {
title: "仿写创作",
description: "管理基于引用来源或外部文章发起的仿写生成记录。",
},
imitationCreate: {
title: "仿写创作",
description: "从文章链接提取内容后,一步生成适配当前场景的新文章。",
},
media: {
title: "媒体管理",
description: "统一查看桌面端媒体账号绑定、授权状态与同步结果。",
@@ -385,6 +394,7 @@ const zhCN = {
citationAnalysisTitle: "引用分析",
contentCitations: "Content Citations",
contentCitationsTitle: "内容引用",
imitationAction: "仿写创作",
taskDebugTitle: "异步任务调试",
taskDebugHint: "仅用于排查 callback -> queue -> worker 的异步流转,不影响上方四块主内容。",
contentCitationBadge: "内容引用",
@@ -551,9 +561,76 @@ const zhCN = {
instant_task: "即时任务",
schedule_task: "定时任务",
free_create: "自由创作",
imitation: "仿写创作",
kol: "精调模版生成",
},
},
imitation: {
actions: {
create: "新建仿写",
submit: "提交并生成",
},
filters: {
publishStatus: "发布状态",
generateStatus: "生成状态",
keyword: "搜索文章",
createdTime: "创建时间",
createdTimeStart: "开始时间",
createdTimeEnd: "结束时间",
keywordPlaceholder: "请输入标题内容搜索",
},
list: {
eyebrow: "仿写创作",
count: "共 {count} 篇文章",
sourceArticle: "原文",
empty: "还未创建仿写文章,可从问题详情的引用来源一键带入,也可以手动新建。",
deleteConfirm: "确认删除这篇仿写文章吗?",
deleteSuccess: "文章已删除",
deleteError: "删除文章失败",
},
create: {
title: "创建仿写文章",
subtitle: "后台会先抓取源文章内容,再按下方设定生成一篇新的原创表达文章。",
sourceSection: "来源文章",
settingsSection: "仿写设置",
sourceURL: "文章 URL",
sourceTitle: "来源标题",
language: "文章语言",
industry: "行业/场景",
brandName: "品牌/主体",
region: "地域",
targetAudience: "目标读者",
contentGoal: "内容目标",
tone: "语气风格",
lengthGoal: "篇幅要求",
keywords: "关键词",
preservePoints: "必须保留/强调",
avoidPoints: "需要规避",
extraRequirements: "其他要求",
enableWebSearch: "允许联网补充",
webSearchHint: "开启后,生成时会让大模型参考实时网页信息,适合需要最新事实或行业动态的仿写。",
knowledgeBase: "引用知识库",
knowledgeBasePlaceholder: "可选,用于补充文章事实、品牌资料和行业背景",
knowledgeBaseHint: "选择后,后台会检索相关知识片段并作为生成参考,未选择则只基于来源文章和当前设置生成。",
sourceURLPlaceholder: "https://example.com/article",
sourceTitlePlaceholder: "可选,引用来源标题会自动带入",
industryPlaceholder: "例如:家居建材、教育培训、SaaS、医疗健康",
brandNamePlaceholder: "可选,填写后文章会自然贴合该品牌或主体",
regionPlaceholder: "例如:上海、华东、全国、北美市场",
targetAudiencePlaceholder: "例如:首次购买用户、渠道代理、企业采购负责人",
contentGoalPlaceholder: "例如:科普说明、转化种草、品牌信任、选型建议",
tonePlaceholder: "例如:专业可信、轻松口语、评测对比、新闻解读",
lengthGoalPlaceholder: "例如:1200字左右、短文、深度长文",
keywordsPlaceholder: "输入关键词后回车,可多选",
preservePointsPlaceholder: "列出必须保留的事实、数据、观点或案例",
avoidPointsPlaceholder: "列出不能出现的说法、竞品、合规禁区或表达方式",
extraRequirementsPlaceholder: "补充行业、渠道、结构、标题风格等自由要求",
queued: "仿写任务已提交,正在排队生成",
sourceURLRequired: "请先填写来源文章 URL",
submitError: "仿写任务提交失败",
backToList: "返回仿写列表",
},
},
freeCreate: {
actions: {
create: "新建文章",
@@ -863,6 +940,7 @@ const zhCN = {
templateType: "模版类型",
currentVersion: "当前版本",
source: "生成来源",
sourceArticle: "源文链接",
wordCount: "文章字数",
},
versionUntitled: "未命名版本",