完成极速成品和脚本优化

This commit is contained in:
Azmat@qq.com
2026-08-25 11:13:07 +08:00
parent 00fc454db7
commit e2ec2d14af
46 changed files with 4734 additions and 432 deletions
+15 -4
View File
@@ -435,7 +435,7 @@ const PROJ_TABS: Array<{ filter: "all" | "draft" | "wip" | "done" | "fail"; labe
type ProjTab = (typeof PROJ_TABS)[number]["filter"];
const VIDEO_MAKE: Array<{ title: string; desc: string; page: Page; image: string; primary?: boolean }> = [
{ title: "极速成片", desc: "输入商品名称并上传图片,自动完成脚本、场景、故事板和视频生成。", page: "projectWizard", image: "/assets/yz/video-quick.jpg", primary: true },
{ title: "极速成片", desc: "输入商品名称并上传图片,自动完成脚本、场景、故事板和视频生成。", page: "quickCreate", image: "/assets/yz/video-quick.jpg", primary: true },
{ title: "专业创作", desc: "逐步控制脚本结构、商品与人物资产、故事板和最终视频。", page: "projectWizard", image: "/assets/yz/video-pro.jpg", primary: true },
];
const VIDEO_TOOLS: Array<{ title: string; desc: string; page: Page; image: string }> = [
@@ -444,13 +444,24 @@ const VIDEO_TOOLS: Array<{ title: string; desc: string; page: Page; image: strin
{ title: "视频复刻", desc: "保留参考视频的人物、场景与节奏,复刻出自己的带货内容。", page: "freeCreate", image: "/assets/yz/video-replace.jpg" },
];
function isQuickCreateProject(project: Project) {
if (project.quick_create) return true;
if (project.metadata?.quick_create) return true;
return / · 极速成片$/.test(project.name || "");
}
function projectModeLabel(project: Project) {
return isQuickCreateProject(project) ? "极速成片" : "专业创作";
}
function projCardSub(project: Project, productTitle: string): string {
if (project.status === "failed") return project.failure_reason || "生成失败,可重新拍摄";
const mode = projectModeLabel(project);
const shots = projShotMeta(project);
const stage = projStageLabel(project);
if (project.status === "completed") return `专业创作 · ${productTitle} · ${shots}`;
if (project.status === "completed") return `${mode} · ${productTitle} · ${shots}`;
const no = projStageNo(project);
return `专业创作 · ${stage} · ${no} / ${PROJ_STAGE_TOTAL}`;
return `${mode} · ${stage} · ${no} / ${PROJ_STAGE_TOTAL}`;
}
function projStageLabel(project: Project): string {
if (project.status === "failed") return "失败";
@@ -741,7 +752,7 @@ export function ProjectsPage({ products, projects, loading = false, navigate, op
<p>{projCardSub(project, productTitle(project.product))}</p>
<div className="vc-line">
<span className={`vc-tag ${bucket}`}>{statusLabel}</span>
<span className="vc-tag type">专业创作</span>
<span className="vc-tag type">{projectModeLabel(project)}</span>
</div>
{bucket === "wip" && (
<div className="vc-progress" aria-hidden="true"><span style={{ width: `${Math.round((no / PROJ_STAGE_TOTAL) * 100)}%` }} /></div>