图生 3D 的素材库空确认不再清掉已选参考图

- src/components/image-editor/ImageCanvasGenerationDialogModel.ts:单槽对话框只在素材库确实选到了图时才做「替换」,空确认退回原行为(保留画布点选/上传的那张)。此前确认按钮不校验空选,空确认会把已有参考图直接清掉
- src/components/image-editor/projectAssetReferencePickerModel.test.ts:补空确认保留画布参考图的用例
This commit is contained in:
2026-09-24 17:25:16 +08:00
parent 5d68749534
commit fb0be97609
2 changed files with 26 additions and 1 deletions
@@ -2265,7 +2265,8 @@ export function replaceProjectAssetPickerReferences(
...resetFailedGenerationDialog(dialog),
generationReferences: appendLimitedImageReferences(
// 单槽对话框(图生 3D)里素材库选择是替换:留着画布点选的那张只会把这次选择挤掉。
usesSingleImageReferenceSlot(dialog)
// 但确认时一个都没选就不算「替换」,否则空确认会把画布点选/上传的那张直接清掉。
usesSingleImageReferenceSlot(dialog) && references.length > 0
? []
: (dialog.generationReferences ?? []).filter(
(reference) => !isProjectAssetPickerReference(reference),
@@ -272,6 +272,30 @@ describe('参考图弹窗素材筛选与快照', () => {
expect(next).toMatchObject({ status: 'idle', composerOpen: true });
});
it('keeps the 3D image-to-model source when the picker is confirmed empty', () => {
const dialog = {
mode: 'model3d-image-to-model',
prompt: '',
status: 'failed',
errorMessage: '失败',
composerOpen: false,
generationReferences: [
{
id: 'canvas-layer-1',
label: '画布点选',
src: 'https://example.test/canvas.png',
mediaType: 'image',
},
],
} satisfies GenerateDialogState;
const next = replaceProjectAssetPickerReferences(dialog, []);
expect(
next?.generationReferences?.map((reference) => reference.id),
).toEqual(['canvas-layer-1']);
});
it('leaves dialogs outside the reference-composer modes untouched', () => {
const dialog = {
mode: 'video',