ソースを参照

fix: 修复患者注册表单输入限制问题 (bug 101)

- 修复宠物编号、登记号和操作人员ID可以输入汉字的问题
- 在 registerSchema.ts 中为三个字段添加正则验证规则
- 限制输入只能是数字、英文字符、下划线和连字符
- accession_number(登记号)使用正则 /^[a-zA-Z0-9_-]+$/
- patient_id(宠物编号)使用正则 /^[a-zA-Z0-9_-]+$/
- operator_id(操作人员ID)使用正则 /^[a-zA-Z0-9_-]*$/
- 验证失败时显示中文错误提示

改动文件:
- src/validation/patient/registerSchema.ts
- package.json (版本更新: 1.11.2 -> 1.11.3)
- CHANGELOG.md
dengdx 3 週間 前
コミット
eb34e5637f
3 ファイル変更34 行追加4 行削除
  1. 30 0
      CHANGELOG.md
  2. 1 1
      package.json
  3. 3 3
      src/validation/patient/registerSchema.ts

+ 30 - 0
CHANGELOG.md

@@ -2,6 +2,36 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.11.3] - 2025-12-17 10:54
+
+### 修复 (Fixed)
+- **患者注册表单输入限制** (bug 101)
+  - 修复宠物编号、登记号和操作人员ID可以输入汉字的问题
+  - 在 registerSchema.ts 中为三个字段添加正则验证规则
+  - 限制输入只能是数字、英文字符、下划线和连字符
+  - accession_number(登记号): 使用正则 `/^[a-zA-Z0-9_-]+$/`,必须至少包含一个有效字符
+  - patient_id(宠物编号): 使用正则 `/^[a-zA-Z0-9_-]+$/`,必须至少包含一个有效字符
+  - operator_id(操作人员ID): 使用正则 `/^[a-zA-Z0-9_-]*$/`,可以为空或包含零个或多个有效字符
+  - 验证失败时显示中文错误提示:"只能输入数字、英文字符、下划线和连字符"
+
+**核心改进:**
+- 数据规范化:确保关键标识字段符合系统要求的格式
+- 用户体验:清晰的错误提示,帮助用户了解输入规则
+- 数据一致性:防止因输入特殊字符导致的数据问题
+- 类型安全:利用 Zod 验证规则确保数据格式正确
+
+**技术实现:**
+- 使用 Zod 的 `.regex()` 方法添加正则验证
+- 通过 `zodToAntdRules` 函数自动转换为 Ant Design Form 的 pattern 规则
+- 必填字段使用 `+` 量词(至少一个字符)
+- 可选字段使用 `*` 量词(零个或多个字符)
+
+**改动文件:**
+- src/validation/patient/registerSchema.ts
+- package.json (版本更新: 1.11.2 -> 1.11.3)
+
+---
+
 ## [1.11.2] - 2025-12-17 10:32
 
 ### 修复 (Fixed)

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.11.2",
+  "version": "1.11.3",
   "private": true,
   "description": "医学成像系统",
   "main": "main.js",

+ 3 - 3
src/validation/patient/registerSchema.ts

@@ -15,9 +15,9 @@ const registerInfoSchema: Record<
   keyof Omit<RegisterInfo, IgnoredKeys>,
   z.ZodTypeAny
 > = {
-  accession_number: z.string().nonempty(),
+  accession_number: z.string().nonempty().regex(/^[a-zA-Z0-9_-]+$/, '只能输入数字、英文字符、下划线和连字符'),
   patient_name: z.string().nonempty(),
-  patient_id: z.string().nonempty(),
+  patient_id: z.string().nonempty().regex(/^[a-zA-Z0-9_-]+$/, '只能输入数字、英文字符、下划线和连字符'),
   patient_size: z.string().nonempty(),
   patient_age: z.object({
     number: z.number(), // 必须是数字
@@ -27,7 +27,7 @@ const registerInfoSchema: Record<
   patient_sex: z.string().optional(),
 
   ref_physician: z.string().optional(),
-  operator_id: z.string().optional(),
+  operator_id: z.string().regex(/^[a-zA-Z0-9_-]*$/, '只能输入数字、英文字符、下划线和连字符'),
   weight: z.number().optional(),
   thickness: z.number().optional(),
   length: z.number().optional(),