浏览代码

🐛 fix(areas): 修复区域表单层级与父级ID验证逻辑问题

- 调整schema验证条件,仅当level和parentId都有值时才验证层级关系
- 修改表单默认值,将parentId的null值替换为undefined以符合验证逻辑
- 修复编辑区域时parentId的默认值处理,确保与验证规则一致
yourname 3 月之前
父节点
当前提交
0271fb75be

+ 2 - 1
packages/server/src/modules/areas/area.schema.ts

@@ -36,7 +36,8 @@ export const updateAreaSchema = z.object({
   isDisabled: z.nativeEnum(DisabledStatus).optional(),
 }).refine((data) => {
   // 验证层级和父级ID的关系
-  if (data.level && data.parentId !== undefined) {
+  // 只有当两个字段都有值且都不为undefined时才进行验证
+  if (data.level !== undefined && data.parentId !== undefined) {
     if (data.level === AreaLevel.PROVINCE && data.parentId !== null) {
       return false;
     }

+ 2 - 2
web/src/client/admin/components/AreaForm.tsx

@@ -48,13 +48,13 @@ export const AreaForm: React.FC<AreaFormProps> = ({
   const form = useForm<CreateAreaInput | UpdateAreaInput>({
     resolver: zodResolver(isEditing ? updateAreaSchema : createAreaSchema),
     defaultValues: area ? {
-      parentId: area.parentId,
+      parentId: area.parentId || undefined,
       name: area.name,
       level: area.level,
       code: area.code,
       isDisabled: area.isDisabled,
     } : {
-      parentId: smartParentId || null,
+      parentId: smartParentId || undefined,
       name: '',
       level: smartLevel ?? AreaLevel.PROVINCE,
       code: '',

+ 1 - 1
web/src/client/admin/pages/Areas.tsx

@@ -577,7 +577,7 @@ export const AreasPage: React.FC = () => {
             <AreaForm
               area={{
                 id: selectedArea.id,
-                parentId: selectedArea.parentId || null,
+                parentId: selectedArea.parentId || undefined,
                 name: selectedArea.name,
                 level: selectedArea.level,
                 code: selectedArea.code,