升级外部生成为正式任务列表

将 external_generation_job 扩展为含价格、确认时间、退款流水和事件审计的正式生成任务事实源

新增外部生成任务列表与确认 BFF,并让平台入口按后端任务补弹完成或失败提示

保护画布生成队列超时、快照回写和自动保存覆盖场景

将 worker 计费退款流水写入 externalGenerationJobId,并补充冷备份后 worker/controller 恢复守护
This commit is contained in:
2026-06-24 15:17:12 +08:00
parent ed6b17442a
commit 73a17193d4
66 changed files with 2416 additions and 122 deletions
@@ -69,7 +69,37 @@ export function PlatformProfileGenerationQueueCard({
fillClassName="bg-[linear-gradient(90deg,#e47631,#ce5f2a)]"
/>
<div className="mt-3 grid grid-cols-2 gap-2">
{presentation.tasks.length > 0 ? (
<div className="mt-3 space-y-2">
{presentation.tasks.map((task) => (
<div
key={task.id}
className="rounded-[8px] border border-[var(--platform-subpanel-border)] bg-white/72 px-3 py-2"
>
<div className="flex min-w-0 items-center justify-between gap-2">
<span className="min-w-0 truncate text-[12px] font-black text-[var(--platform-text-strong)]">
{task.title}
</span>
<PlatformPillBadge
tone={task.tone}
size="xxs"
className="shrink-0"
>
{task.statusLabel}
</PlatformPillBadge>
</div>
<div className="mt-1 flex min-w-0 items-center justify-between gap-2 text-[11px] font-medium text-[var(--platform-text-base)]">
<span className="min-w-0 truncate">{task.detail}</span>
<span className="shrink-0 font-black text-[var(--platform-text-strong)]">
{task.priceLabel}
</span>
</div>
</div>
))}
</div>
) : null}
<div className="mt-3 grid grid-cols-3 gap-2">
<div className="platform-profile-generation-queue-card__metric">
<span>排队</span>
<strong>{presentation.pendingLabel}</strong>
@@ -78,6 +108,10 @@ export function PlatformProfileGenerationQueueCard({
<span>生成</span>
<strong>{presentation.runningLabel}</strong>
</div>
<div className="platform-profile-generation-queue-card__metric">
<span>待提示</span>
<strong>{presentation.unacknowledgedTerminalCount}</strong>
</div>
</div>
</section>
);