From e2018cbcf9ebfb26bfc193a1b286ba5e7903954d Mon Sep 17 00:00:00 2001 From: erio Date: Mon, 16 Mar 2026 05:33:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B8=A0=E9=81=93=20PUT=20schema=20?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=20models/features=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 前端 linesToJsonString 传的是 JSON 字符串,而 .strict() schema 只接受数组/对象,导致所有渠道编辑保存失败"参数校验失败"。 移除 .strict(),models/features 改为 union 接受 string | array/record。 --- src/app/api/admin/channels/[id]/route.ts | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/app/api/admin/channels/[id]/route.ts b/src/app/api/admin/channels/[id]/route.ts index 88d597a..bf520fc 100644 --- a/src/app/api/admin/channels/[id]/route.ts +++ b/src/app/api/admin/channels/[id]/route.ts @@ -3,19 +3,17 @@ import { z } from 'zod'; import { verifyAdminToken, unauthorizedResponse } from '@/lib/admin-auth'; import { prisma } from '@/lib/db'; -const updateChannelSchema = z - .object({ - group_id: z.number().int().positive().optional(), - name: z.string().min(1).max(100).optional(), - platform: z.string().min(1).max(50).optional(), - rate_multiplier: z.number().positive().optional(), - description: z.string().max(500).nullable().optional(), - models: z.array(z.string()).nullable().optional(), - features: z.record(z.string(), z.unknown()).nullable().optional(), - sort_order: z.number().int().min(0).optional(), - enabled: z.boolean().optional(), - }) - .strict(); +const updateChannelSchema = z.object({ + group_id: z.number().int().positive().optional(), + name: z.string().min(1).max(100).optional(), + platform: z.string().min(1).max(50).optional(), + rate_multiplier: z.number().positive().optional(), + description: z.string().max(500).nullable().optional(), + models: z.union([z.array(z.string()), z.string()]).nullable().optional(), + features: z.union([z.record(z.string(), z.unknown()), z.string()]).nullable().optional(), + sort_order: z.number().int().min(0).optional(), + enabled: z.boolean().optional(), +}); export async function PUT(request: NextRequest, { params }: { params: Promise<{ id: string }> }) { if (!(await verifyAdminToken(request))) return unauthorizedResponse(request);