feat: surface intake entries inside production center
This commit is contained in:
@@ -688,3 +688,4 @@
|
||||
- `integrations/health` 新增 `huobao` 视频配置摘要,能直接看出当前 `Huobao` 视频配置页是否已经录入视频引擎配置,以及对应的配置页路径,减少排查 `Seedance` 任务为什么只建单不出片的歧义。
|
||||
- 首页 `1 主 2 次` 动作里把 `视频录制` 抬成了高频次级动作,当前项目有生产任务时能更快进入录制维护入口。
|
||||
- `AI 视频` 表单开始直接显示“当前项目最近使用的视频引擎”,像 `Seedance 2.0 · seedance-2.0-pro` 这类信息会在打开表单时直接可见,并保留跳到火山配置状态的入口。
|
||||
- `生产中心` 现在把 `导入主页 / 导入作品 / 导入文本 / 上传视频` 这批接入入口统一接进了顶部动作区和生产队列工作流卡,不用离开生产中心也能开始接入素材。
|
||||
|
||||
@@ -7719,9 +7719,10 @@ function renderProductionScreen() {
|
||||
{ value: "outputs", label: "作品与产物" }
|
||||
];
|
||||
const activeTab = getActiveDetailTab("productionDetailTab", tabs);
|
||||
const intakeEntryActionsHtml = `${button("导入主页", "open-import-homepage")} ${button("导入作品", "open-import-video-link")} ${button("导入文本", "open-import-text")} ${button("上传视频", "open-upload-video")}`;
|
||||
const productionActionsHtml = isMobileUi
|
||||
? `${renderPipelineButton("aiVideo")} ${renderPipelineButton("realCut")} ${button("视频录制", "focus-live-recorder-maintenance", "secondary")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: productionHandoffAttrs })}`
|
||||
: `${renderPipelineButton("aiVideo")} ${renderPipelineButton("realCut")} ${button("视频录制", "focus-live-recorder-maintenance", "secondary")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: productionHandoffAttrs })} ${button("去复盘", "goto-review", "primary")} ${button("批量恢复", "batch-recover-jobs", "secondary", { disabledReason: recoverableCount ? "" : "当前没有可恢复的失败任务" })}`;
|
||||
? `${button("导入作品", "open-import-video-link", "primary")} ${button("导入主页", "open-import-homepage")} ${button("导入文本", "open-import-text")} ${button("上传视频", "open-upload-video")} ${renderPipelineButton("aiVideo")} ${renderPipelineButton("realCut")} ${button("视频录制", "focus-live-recorder-maintenance", "secondary")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: productionHandoffAttrs })}`
|
||||
: `${button("导入主页", "open-import-homepage")} ${button("导入作品", "open-import-video-link")} ${button("导入文本", "open-import-text")} ${button("上传视频", "open-upload-video")} ${renderPipelineButton("aiVideo")} ${renderPipelineButton("realCut")} ${button("视频录制", "focus-live-recorder-maintenance", "secondary")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: productionHandoffAttrs })} ${button("去复盘", "goto-review", "primary")} ${button("批量恢复", "batch-recover-jobs", "secondary", { disabledReason: recoverableCount ? "" : "当前没有可恢复的失败任务" })}`;
|
||||
return screenShell(
|
||||
"生产中心",
|
||||
"这里已经接上真实任务、失败恢复和知识库文档,适合直接推进生产、恢复和复盘。",
|
||||
@@ -7762,7 +7763,7 @@ function renderProductionScreen() {
|
||||
? "先确认录制服务和文件状态,再回到队列继续推进。"
|
||||
: activeTab === "outputs"
|
||||
? "先看产物和作品,再决定是否回到复盘或继续生产。"
|
||||
: "先看处理中任务,再把异常和产物安排到下一步。"
|
||||
: "先接入素材,再看处理中任务和异常,把生产链真正跑起来。"
|
||||
)}</p>
|
||||
<div class="task-meta">
|
||||
${activeTab === "recovery"
|
||||
@@ -7771,7 +7772,7 @@ function renderProductionScreen() {
|
||||
? `${actionTag("去复盘", "goto-review")} ${actionTag("查看产物", "select-page-tab", `data-page-tab-key="productionDetailTab" data-page-tab-value="outputs"`)}`
|
||||
: activeTab === "recorder"
|
||||
? `${actionTag("视频录制", "focus-live-recorder-maintenance")} ${actionTag("交给主 Agent", "handoff-to-main-agent", productionHandoffAttrs)}`
|
||||
: `${actionTag("批量恢复", "batch-recover-jobs")} ${actionTag("交给主 Agent", "handoff-to-main-agent", productionHandoffAttrs)}`
|
||||
: `${actionTag("导入作品", "open-import-video-link")} ${actionTag("上传视频", "open-upload-video")} ${actionTag("交给主 Agent", "handoff-to-main-agent", productionHandoffAttrs)}`
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@@ -7793,6 +7794,13 @@ function renderProductionScreen() {
|
||||
${activeTab === "queue" ? `
|
||||
<div class="panel pad" style="box-shadow:none;">
|
||||
<div class="panel-head"><div><h3>当前任务</h3><div class="panel-subtitle">来自 recent_jobs</div></div></div>
|
||||
<div class="task-item compact" style="margin-bottom:14px;">
|
||||
<h4>接入素材</h4>
|
||||
<p>把主页、作品链接、文本素材或本地视频先接进项目,再继续做 AI 视频、实拍剪辑和复盘。</p>
|
||||
<div class="task-meta">
|
||||
${intakeEntryActionsHtml}
|
||||
</div>
|
||||
</div>
|
||||
<div class="list">
|
||||
${(activeJobs.length ? activeJobs : jobs.slice(0, 4)).map((job) => `
|
||||
<div class="task-item compact">
|
||||
@@ -7806,7 +7814,7 @@ function renderProductionScreen() {
|
||||
${actionTag("看详情", "open-job-detail", `data-job-id="${escapeHtml(job.id)}"`)}
|
||||
</div>
|
||||
</div>
|
||||
`).join("") || `<div class="task-item"><h4>还没有任务</h4><p>先去找对标导入内容。</p></div>`}
|
||||
`).join("") || `<div class="task-item"><h4>还没有任务</h4><p>先从导入主页、作品、文本或上传视频开始接入素材。</p><div class="task-meta">${intakeEntryActionsHtml}</div></div>`}
|
||||
</div>
|
||||
</div>
|
||||
` : activeTab === "recovery" ? `
|
||||
|
||||
@@ -484,12 +484,26 @@ test("mobile discovery and production simplify duplicated top-level actions", ()
|
||||
assert.match(discovery, /saveBenchmarkActionName = similarCandidates\.length \? "direct-save-benchmark-link" : "open-benchmark-link"/);
|
||||
assert.match(production, /const isMobileUi = isMobileViewport\(\);/);
|
||||
assert.match(production, /const productionActionsHtml = isMobileUi/);
|
||||
assert.match(production, /button\("导入主页", "open-import-homepage"\)/);
|
||||
assert.match(production, /button\("导入作品", "open-import-video-link"/);
|
||||
assert.match(production, /button\("导入文本", "open-import-text"\)/);
|
||||
assert.match(production, /button\("上传视频", "open-upload-video"\)/);
|
||||
assert.match(production, /button\("视频录制", "focus-live-recorder-maintenance", "secondary"\)/);
|
||||
assert.match(production, /button\("交给主 Agent", "handoff-to-main-agent"/);
|
||||
assert.match(production, /button\("去复盘", "goto-review", "primary"\)/);
|
||||
assert.match(clickActions, /name === "focus-live-recorder-maintenance"[\s\S]*captureMainAgentLandingContext\(action,\s*"goto-production"\);[\s\S]*focusLiveRecorderMaintenance\(\)/);
|
||||
});
|
||||
|
||||
test("production queue promotes intake entrypoints so import flows are reachable without leaving production", () => {
|
||||
const production = extractBetween(APP, "function renderProductionScreen()", "function renderReviewScreen()");
|
||||
assert.match(production, /const intakeEntryActionsHtml =/);
|
||||
assert.match(production, /<h4>接入素材<\/h4>/);
|
||||
assert.match(production, /把主页、作品链接、文本素材或本地视频先接进项目/);
|
||||
assert.match(production, /先从导入主页、作品、文本或上传视频开始接入素材/);
|
||||
assert.match(production, /actionTag\("导入作品", "open-import-video-link"\)/);
|
||||
assert.match(production, /actionTag\("上传视频", "open-upload-video"\)/);
|
||||
});
|
||||
|
||||
test("discovery page promotes selected-account actions into direct execute flows", () => {
|
||||
const discovery = extractBetween(APP, "function renderDiscoveryScreen()", "function renderTrackingScreen()");
|
||||
const discoveryOverview = extractBetween(APP, "function renderDiscoveryOverviewSection(", "function renderDiscoveryRelationsSection(");
|
||||
|
||||
Reference in New Issue
Block a user