From 16e67b563ee5f5b5af681a4e953830530994de9a Mon Sep 17 00:00:00 2001 From: GouJ Date: Tue, 1 Sep 2026 14:49:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=9F=E4=BA=A7=E9=A1=B5=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E8=BF=87=E6=9C=9F=E9=A6=96=E5=B8=A7=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/production/ProductionPage.vue | 24 ++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/features/production/ProductionPage.vue b/src/features/production/ProductionPage.vue index 6cecd27..767f36d 100644 --- a/src/features/production/ProductionPage.vue +++ b/src/features/production/ProductionPage.vue @@ -52,7 +52,7 @@ const stages = computed(() => { icon: Image, data: data?.keyframes, done: data?.keyframes.skipped ?? 0, - action: force.value ? '为全部镜头新增首帧' : '补齐主首帧' + action: force.value ? '为全部镜头新增首帧' : '补齐 / 更新主首帧' }, { key: 'videos' as const, @@ -81,6 +81,7 @@ const identityBlocked = computed( (query.data.value?.keyframes.missingIdentityAnchor ?? 0) + (query.data.value?.keyframes.identityUnlocked ?? 0) ) +const staleKeyframes = computed(() => query.data.value?.keyframes.stalePrimaryKeyframe ?? 0) /** 父页查询包含整个项目的就绪统计,单镜头变更后立即刷新。 */ function refreshProject() { @@ -100,7 +101,7 @@ function refreshProject() {

- 每一步都按后端就绪检查执行。覆盖只会新增首帧/视频候选,不会替换当前主资产;重新生成上游内容后,也不会自动更新已有下游结果。 + 每一步都按后端就绪检查执行。覆盖只会新增首帧/视频候选,不会替换当前主资产;上游参考资产变化后,下游过期结果会被标记并阻止继续使用,需要重新生成后才能恢复就绪。

@@ -160,6 +161,9 @@ function refreshProject() { Identity、确认演员母版并锁定后,首帧才能就绪。 前往角色选角 →

+

+ 当前有 {{ staleKeyframes }} 个主首帧已过期。它们使用的主体参考资产已经变化,视频阶段会被阻止;可在下方逐镜重新生成,或使用“补齐 / 更新主首帧”批量处理。 +

@@ -202,6 +206,9 @@ function refreshProject() {
{{ stage.data?.blocked ?? 0 }}
+

+ 已过期 {{ staleKeyframes }} · 会按当前主体参考资产重新生成 +

身份缺失 {{ query.data.value?.keyframes.missingIdentity ?? 0 }} · 母版缺失 {{ query.data.value?.keyframes.missingIdentityAnchor ?? 0 }} · 未锁定 @@ -216,7 +223,7 @@ function refreshProject() { stage.key === 'videos' ? '只为当前就绪镜头创建 Seedance 异步任务。创建成功不代表视频已经完成,任务会在后台继续运行。' : stage.key === 'keyframes' - ? '只为当前就绪镜头调用 Seedream。覆盖模式会新增候选,不替换已有主首帧。' + ? '处理缺失主首帧和参考资产已变化的过期主首帧。过期镜头会按当前主体参考资产重新生成并恢复为可用于视频的主首帧;覆盖模式只新增候选。' : '只处理通过视频提示词就绪检查的镜头;覆盖模式会重写已有提示词。' " :primary="stage.key === 'videos'" @@ -281,7 +288,13 @@ function refreshProject() { > B{{ item.beatNo }} / S{{ item.shotNo }} {{ item.title }} - + + 主首帧已过期 + + {{ shot.description }}

Shot ID · {{ shot.shotId }}

+

+ 主首帧已过期:当前主体参考资产与生成该首帧时不一致。旧首帧会保留,但不能继续用于视频生成。 +