From 5a884f1d11e14839cdcb75c5cebe4e429672dcee Mon Sep 17 00:00:00 2001 From: kdletters Date: Tue, 23 Jun 2026 23:23:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=BB=E6=9D=BF=E7=A7=81?= =?UTF-8?q?=E6=9C=89=E7=B4=A0=E6=9D=90=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 让生成参考图和角色动作参考图通过 objectKey 换签显示 让视频图层 poster 与框选预览复用签名读取 补充参考槽、框选预览和视频图层回归测试 沉淀框选预览换签缓存踩坑 --- docs/project-memory/shared-memory/pitfalls.md | 8 ++ ...ImageCanvasBasicGenerationComposerView.tsx | 1 + ...ImageCanvasCharacterAnimationPanelView.tsx | 21 +++--- ...eCanvasCharacterGenerationComposerView.tsx | 2 + .../ImageCanvasGenerationComposerView.tsx | 9 ++- ...ImageCanvasIconSpritesheetComposerView.tsx | 1 + ...anvasPublicationMaterialsDemoPanelView.tsx | 1 + .../ImageCanvasQuickEditPanelView.tsx | 1 + .../ImageCanvasReferenceSlot.test.tsx | 52 +++++++++++++ .../image-editor/ImageCanvasReferenceSlot.tsx | 13 +++- .../ImageCanvasSpecGenerationPanelView.tsx | 1 + ...anvasUiAssetExtractionOverlayView.test.tsx | 73 +++++++++++++++++++ ...mageCanvasUiAssetExtractionOverlayView.tsx | 53 ++++++++++++-- .../ImageCanvasWorldView.test.tsx | 6 ++ .../image-editor/ImageCanvasWorldView.tsx | 5 +- 15 files changed, 226 insertions(+), 21 deletions(-) create mode 100644 src/components/image-editor/ImageCanvasReferenceSlot.test.tsx diff --git a/docs/project-memory/shared-memory/pitfalls.md b/docs/project-memory/shared-memory/pitfalls.md index 6550e326b..d05f610c7 100644 --- a/docs/project-memory/shared-memory/pitfalls.md +++ b/docs/project-memory/shared-memory/pitfalls.md @@ -151,6 +151,14 @@ - 验证:Network 中 `/api/editor/projects*`、`PATCH /api/editor/projects/{id}`、素材库接口不应出现 `data:image` / `data:video` / `data:audio`;素材库和图层面板缩略图都能换签显示;`npm run test -- src/components/image-editor/ImageCanvasEditorModel.test.ts src/components/image-editor/useImageCanvasProjectPersistence.test.tsx src/components/image-editor/ImageCanvasAssetRowView.test.tsx src/components/common/PlatformMediaFrame.test.tsx src/services/assetReadUrlService.test.ts src/services/image-editor/editorProjectClient.test.ts`,后端跑 `cargo test -p api-server editor_project --manifest-path server-rs/Cargo.toml`。 - 关联:`server-rs/crates/api-server/src/editor_project.rs`、`src/components/image-editor/ImageCanvasEditorModel.ts`、`src/components/image-editor/useImageCanvasProjectPersistence.ts`、`src/components/common/PlatformMediaFrame.tsx`、`src/services/assetReadUrlService.ts`。 +## 图片画布框选预览要复用源图换签缓存 + +- 现象:UI 设计素材提取或快速编辑框选时,画布上的红色框选还在,但底部“框选区域预览”卡片变成空白。 +- 原因:预览图从原生 `img` 改成 `ResolvedAssetImage` 后,如果没有传入源图同一套 `objectKey` / `refreshKey`,它会另起一条 `/api/assets/read-url` 缓存维度;画布主图已经显示时,预览仍可能处于空签名或失败缓存状态。 +- 处理:框选预览继续用 `ResolvedAssetImage` 承接私有资源换签,但必须传源图 `objectKey`,并使用 `taskId ?? resourceId` 作为 `refreshKey`,和主画布图片保持同一签名缓存版本。只允许对 `data:`、`blob:` 或已带签名参数的 URL 设置 `fallbackSrc`;不要把裸 `/generated...` 私有路径作为 fallback 写进 `img`。 +- 验证:`npm run test -- src/components/image-editor/ImageCanvasUiAssetExtractionOverlayView.test.tsx --reporter=dot` 应断言私有框选预览带 `objectKey`、`refreshKey`,且裸 generated 路径没有 fallback。 +- 关联:`src/components/image-editor/ImageCanvasUiAssetExtractionOverlayView.tsx`、`src/components/ResolvedAssetImage.tsx`、`src/hooks/useResolvedAssetReadUrl.ts`、`src/services/assetReadUrlService.ts`。 + ## 图片画布发布入口 429 先查自动保存 PATCH 并发 - 现象:发布域名访问画板时出现短时间密集 `429`,Nginx access log 中 `PATCH /api/editor/projects/`、生成接口和资料接口混杂,429 行常见 `request_time=0.000`、`upstream_status=-`,error log 写 `limiting connections by zone "genarrative_api_conn"`。 diff --git a/src/components/image-editor/ImageCanvasBasicGenerationComposerView.tsx b/src/components/image-editor/ImageCanvasBasicGenerationComposerView.tsx index a67db7918..d6b9bf71d 100644 --- a/src/components/image-editor/ImageCanvasBasicGenerationComposerView.tsx +++ b/src/components/image-editor/ImageCanvasBasicGenerationComposerView.tsx @@ -65,6 +65,7 @@ function ReferenceChip({ tone="default" icon={