From 2a3c9850d135cdd421c7b8b3f54cdd56d1f17122 Mon Sep 17 00:00:00 2001 From: brother7 <7brother7@gmail.com> Date: Wed, 5 Aug 2026 16:28:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20AI=20=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=A4=B1=E8=B4=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:客户端直接展示 policy_blocked 等内部错误码。 实现:统一转换为中文设计语言提示,并补充策略拦截场景回归测试。 --- src/pages/ImageCanvas/index.tsx | 19 ++++++++++++++++++- tests/unit/image-canvas-page.test.tsx | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/pages/ImageCanvas/index.tsx b/src/pages/ImageCanvas/index.tsx index d9e4ffa..83f1c5d 100644 --- a/src/pages/ImageCanvas/index.tsx +++ b/src/pages/ImageCanvas/index.tsx @@ -37,6 +37,19 @@ import type { } from '../../../shared/image-workspace'; const ACTIVE_TASK_STATUSES = new Set(['queued', 'running']); +const TASK_FAILURE_MESSAGES: Record = { + policy_blocked: '内容可能涉及版权或安全风险,请调整设计后重试', + budget_denied: '当前设计点不足,无法开始生成', + quote_expired: '生成方案已过期,请重新确认', + asset_rejected: '生成结果未通过媒体检查,请调整设计后重试', + dependency_unavailable: '生成服务暂时不可用,请稍后重试', + submission_unknown: '正在确认生成请求状态,请稍后查看', + submission_not_accepted: '生成请求未被服务接受,请重新确认后再试', + generation_failed: '生成未完成,请调整设计或稍后重试', + result_persist_failed: '生成结果保存失败,请稍后重试', + cancelled: '生成任务已取消', + expired: '生成任务已过期,请重新确认', +}; const CONFIRMATION_UNAVAILABLE_MESSAGE = ( '当前没有可确认的生成报价,请先让设计 Agent 完成方案与报价。' ); @@ -61,6 +74,10 @@ function taskStatusLabel(status: DesignTaskStatus): string { return '失败'; } +function taskFailureMessage(code: string): string { + return TASK_FAILURE_MESSAGES[code] ?? '生成未完成,请稍后重试'; +} + function mediumLabel(medium: 'image' | 'video'): string { return medium === 'video' ? '视频' : '图片'; } @@ -153,7 +170,7 @@ function TaskCard({ task }: { task: DesignGenerationTask }) {

{task.failureCode ? (

- {task.failureCode} + {taskFailureMessage(task.failureCode)}

) : null} diff --git a/tests/unit/image-canvas-page.test.tsx b/tests/unit/image-canvas-page.test.tsx index 30d21ab..ffea325 100644 --- a/tests/unit/image-canvas-page.test.tsx +++ b/tests/unit/image-canvas-page.test.tsx @@ -482,6 +482,21 @@ describe('ImageCanvas Workspace-first design experience', () => { expect(confirmImageWorkspaceGenerationMock).not.toHaveBeenCalled(); }); + it('renders policy-blocked generation tasks with a user-facing design message', async () => { + fetchImageWorkspaceTasksMock.mockResolvedValue([{ + ...taskFixture, + status: 'failed', + failureCode: 'policy_blocked', + resultAssets: [], + }]); + + render(); + + const alert = await screen.findByRole('alert'); + expect(alert).toHaveTextContent('内容可能涉及版权或安全风险,请调整设计后重试'); + expect(alert).not.toHaveTextContent('policy_blocked'); + }); + it('renders a new task pushed by the design event stream without repeated polling', async () => { const queuedTask = { ...taskFixture,