fix(后台建题): 修好 dev 代理走错服务,以及新建页带出上一题 id、超长标签报英文
三处不相干的小毛病,都在「新建/编辑题目」这条路上。 vite 的 /api 代理写的是 localhost:3000。api 用 Bun.serve 起、只绑 IPv4 的 0.0.0.0:3000,而 Node 解析 localhost 时 ::1 排在前面 —— 别的项目的 dev server 一占 [::1]:3000,两边端口就不冲突(一个 v4 一个 v6,谁都不报错),浏览器发出的 /api/* 整个落到那个站上,表现是后台一进就被弹回首页。改成 127.0.0.1。 新建页和编辑页共用同一个 localStorage 草稿键,而编辑页会把服务器数据连 id 一起 写进去。没保存就离开的话,这个 id 跟着草稿漂到新建页:「下载测试点」下的是那道旧 题的包,SQL 测试点编辑器也会去回显那道旧题的脚本。新建分支进来先把 id 摘掉。 新标签没有长度限制,超过 32 字要到保存时才撞出 zod 的英文原文(Too big: expected string to have <=32 characters)。把 32 提成契约里的 PROBLEM_TAG_MAX_LENGTH,输入框拿它做 maxlength,validateNewTags 再兜一道粘贴 绕过的情况,提示换成中文。校验的松紧没动,32 字仍然存得进、33 字仍然拦下。 editContestProblem 和 editProblem 函数体逐字相同(都是 PUT admin/problems/:id, 比赛由后端从题目自己推导),合成一个。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XvmqDsZNyUo9P3sFQtoWVB
This commit is contained in:
@@ -694,6 +694,18 @@ export const adminProblemSchema = z.object({
|
||||
sqlDisplay: sqlDisplaySchema.nullable(),
|
||||
})
|
||||
|
||||
/**
|
||||
* 出题页新建标签时的名字上限,沿用旧 CreateProblemSerializer 的 32。
|
||||
* 出题页的输入框拿它做 maxlength —— 不共享一个常量的话,超长标签只会在保存时
|
||||
* 撞出 zod 的英文报错("Too big: expected string to have <=32 characters"),
|
||||
* 老师看不懂也不知道该改哪里。
|
||||
*
|
||||
* 列本身是 text 没有长度限制,标签管理页(createTagRequestSchema /
|
||||
* renameTagRequestSchema)放到 64 —— 两处口径不同是旧后端就有的,这里只是把
|
||||
* 出题页这一侧的数字挪到一处,没有改任何校验的松紧。
|
||||
*/
|
||||
export const PROBLEM_TAG_MAX_LENGTH = 32
|
||||
|
||||
export const createProblemRequestSchema = z.object({
|
||||
_id: z.string().trim().min(1).max(32),
|
||||
title: z.string().trim().min(1).max(1024),
|
||||
@@ -709,7 +721,7 @@ export const createProblemRequestSchema = z.object({
|
||||
template: z.record(z.string(), z.string()),
|
||||
visible: z.boolean(),
|
||||
difficulty: z.enum(["Low", "Mid", "High"]),
|
||||
tags: z.array(z.string().max(32)).min(1),
|
||||
tags: z.array(z.string().max(PROBLEM_TAG_MAX_LENGTH)).min(1),
|
||||
hint: z.string().nullable().default(null),
|
||||
source: z.string().max(256).nullable().default(null),
|
||||
prompt: z.string().nullable().default(null),
|
||||
|
||||
Reference in New Issue
Block a user