From d12cceeecfabbf0ce933924d2ae69b0594182d39 Mon Sep 17 00:00:00 2001 From: HouYunFei <1844025705@qq.com> Date: Tue, 2 Jun 2026 16:00:20 +0800 Subject: [PATCH] feat(image): enhance image generation settings with dimension snapping and thumbnail filtering --- docs/content/docs/progress/pending-test.mdx | 2 + .../canvas-image-settings-popover.tsx | 1 + web/src/app/(user)/image/page.tsx | 12 ++-- web/src/components/image-settings-panel.tsx | 56 +++++++++++++++---- 4 files changed, 56 insertions(+), 15 deletions(-) diff --git a/docs/content/docs/progress/pending-test.mdx b/docs/content/docs/progress/pending-test.mdx index 1f0dd33..c8613e2 100644 --- a/docs/content/docs/progress/pending-test.mdx +++ b/docs/content/docs/progress/pending-test.mdx @@ -22,6 +22,8 @@ description: 当前版本已实现但仍需人工验证的变更项 - 未登录状态下,画布右上角不再显示用户头像菜单、用户名称、算力点余额和退出登录入口,改为显示登录入口;快捷键入口仍可直接打开。 - 生图工作台的图片参数区复用画布里的紧凑版图像设置面板,尺寸、质量、生成张数的交互保持一致;工作台仍保留独立的模型选择。 - 生图工作台新增生成记录配置持久化:每次生成会保存提示词、参考图、模型、质量、尺寸和张数,结果图写入本地图片存储后记录只保存 `storageKey`;点击历史记录会回填本次生成配置并预览结果。 +- 生图工作台生成记录会过滤空缩略图地址,避免历史记录卡片渲染 `src=""` 图片。 +- 图像设置面板新增默认开启的“16倍数对齐”尺寸 toggle;开启时手动输入宽高并失焦、回车或点击浮层外关闭后,会把非 16 倍数的宽高向上补齐。 - 视频设置抽成画布和视频创作台共用的紧凑面板,清晰度、尺寸、秒数按固定网格选择并支持手动输入;尺寸选择 `auto` 时请求不传 `size`。 - 修复画布和生图工作台选择图片尺寸后,请求图片生成/编辑接口未携带 `size` 参数的问题;`auto` 不传,其余比例或像素尺寸会随请求发送。 - 修复生图工作台和画布生图请求中 `quality` 参数可能传入上游不支持值导致 400 的问题;请求前会归一化质量枚举,`auto` 或异常值不再发送给上游。 diff --git a/web/src/app/(user)/canvas/components/canvas-image-settings-popover.tsx b/web/src/app/(user)/canvas/components/canvas-image-settings-popover.tsx index 4335658..d636856 100644 --- a/web/src/app/(user)/canvas/components/canvas-image-settings-popover.tsx +++ b/web/src/app/(user)/canvas/components/canvas-image-settings-popover.tsx @@ -42,6 +42,7 @@ export function CanvasImageSettingsPopover({ config, onConfigChange, onOpenChang const target = event.target; if (!(target instanceof Node)) return; if (buttonRef.current?.contains(target) || panelRef.current?.contains(target)) return; + if (document.activeElement instanceof HTMLElement && panelRef.current?.contains(document.activeElement)) document.activeElement.blur(); setOpen(false); onOpenChange?.(false); }; diff --git a/web/src/app/(user)/image/page.tsx b/web/src/app/(user)/image/page.tsx index 43a7ae6..254f3ef 100644 --- a/web/src/app/(user)/image/page.tsx +++ b/web/src/app/(user)/image/page.tsx @@ -465,7 +465,7 @@ export default function ImagePage() { onPreviewLog={(log) => void previewGenerationLog(log)} /> - setSettingsOpen(false)}> + setSettingsOpen(false)}>
@@ -638,6 +638,8 @@ function LogPanel({ } function LogCard({ log, selected, active, onSelectedChange, onClick }: { log: GenerationLog; selected: boolean; active: boolean; onSelectedChange: (checked: boolean) => void; onClick: () => void }) { + const thumbnails = (log.thumbnails || []).filter(Boolean).slice(0, 4); + return (