From 4e3cdb1d2d375cf87cbd87b59b6c55017dcf4f6c Mon Sep 17 00:00:00 2001 From: zamncn <157105654+zamncn@users.noreply.github.com> Date: Wed, 14 Oct 2026 12:03:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E5=9B=BE=E7=89=87=E5=8F=82?= =?UTF-8?q?=E6=95=B0=20-=20=E5=85=BC=E5=AE=B9=E5=90=8E=E7=AB=AF=E8=83=BD?= =?UTF-8?q?=E5=8A=9B=E5=88=87=E7=89=87=E4=B8=BA=20null=20=E7=9A=84?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96=20(#774)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端将插件未声明的图片参数切片序列化为 null(Go nil slice), imageParameterDefaults/normalizeImageParameters 的默认参数语法只兜 undefined, null.filter 在创作页渲染时崩溃(TypeError: reading 'filter')。 读路径显式归一为空数组。 --- web/src/lib/image-parameters.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/web/src/lib/image-parameters.ts b/web/src/lib/image-parameters.ts index b89121a26..883f6c780 100644 --- a/web/src/lib/image-parameters.ts +++ b/web/src/lib/image-parameters.ts @@ -36,8 +36,10 @@ export function imageParameterAccepts(field: ImageParameter, value: unknown): va return !field.values?.length || field.values.includes(value as ImageParameterValue); } -export function imageParameterDefaults(parameters: ImageParameter[] = []) { - return Object.fromEntries(parameters.filter((p) => p.enabled !== false && p.default !== undefined).map((p) => [p.name, p.default!])) as Record; +// 后端把插件未声明参数的能力切片序列化为 null(Go nil slice),默认参数语法 +// 只兜 undefined,读路径必须显式归一,避免 null.filter 渲染崩溃。 +export function imageParameterDefaults(parameters?: ImageParameter[] | null) { + return Object.fromEntries((parameters || []).filter((p) => p.enabled !== false && p.default !== undefined).map((p) => [p.name, p.default!])) as Record; } export function parseImageParameters(value: unknown): Record { @@ -52,10 +54,11 @@ export function parseImageParameters(value: unknown): Record typeof v === "string" || typeof v === "boolean" || (typeof v === "number" && Number.isFinite(v)))); } -export function normalizeImageParameters(parameters: ImageParameter[] = [], input: unknown = {}) { +export function normalizeImageParameters(parameters?: ImageParameter[] | null, input: unknown = {}) { + const fields = parameters || []; const values = parseImageParameters(input); - const result = imageParameterDefaults(parameters); - for (const field of parameters) { + const result = imageParameterDefaults(fields); + for (const field of fields) { if (field.enabled !== false && imageParameterAccepts(field, values[field.name])) result[field.name] = values[field.name]; } return result;