import React from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button } from '@d8d/shared-ui-components/components/ui/button'; import { Input } from '@d8d/shared-ui-components/components/ui/input'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@d8d/shared-ui-components/components/ui/select'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@d8d/shared-ui-components/components/ui/form'; import { createAreaSchemaMt, updateAreaSchemaMt, AreaLevel } from '@d8d/geo-areas-mt/schemas'; import type { CreateAreaInputMt, UpdateAreaInputMt } from '@d8d/geo-areas-mt/schemas'; // 禁用状态枚举 enum DisabledStatus { ENABLED = 0, DISABLED = 1 } interface AreaFormProps { area?: UpdateAreaInputMt & { id?: number }; onSubmit: (data: CreateAreaInputMt | UpdateAreaInputMt) => Promise; onCancel: () => void; isLoading?: boolean; /** 智能预填的层级 */ smartLevel?: number; /** 智能预填的父级ID */ smartParentId?: number; } // 辅助函数:根据层级值获取显示名称 const getLevelDisplayName = (level: number | undefined): string => { switch (level) { case AreaLevel.PROVINCE: return '省/直辖市'; case AreaLevel.CITY: return '市'; case AreaLevel.DISTRICT: return '区/县'; case AreaLevel.TOWN: return '街道/乡镇'; default: return '未知层级'; } }; export const AreaForm: React.FC = ({ area, onSubmit, onCancel, isLoading = false, smartLevel, smartParentId }) => { const isEditing = !!area; const form = useForm({ resolver: zodResolver(isEditing ? updateAreaSchemaMt : createAreaSchemaMt), defaultValues: area ? { tenantId: area.tenantId, parentId: area.parentId, name: area.name, level: area.level, code: area.code, isDisabled: area.isDisabled, } : { tenantId: 1, // 测试环境使用默认tenantId parentId: smartParentId || null, name: '', level: smartLevel ?? AreaLevel.PROVINCE, code: '', isDisabled: DisabledStatus.ENABLED, }, }); const handleSubmit = async (data: CreateAreaInputMt | UpdateAreaInputMt) => { await onSubmit(data); }; return (
{/* 层级显示(只读) */} ( 层级 根据操作上下文自动设置的层级 )} /> {/* 父级区域显示(只读) */} ( 父级区域 根据操作上下文自动设置的父级区域ID )} /> {/* 区域名称 */} ( 区域名称 输入省市区名称,如:北京市、上海市、朝阳区等 )} /> {/* 行政区划代码 */} ( 行政区划代码 输入标准的行政区划代码 )} /> {/* 状态选择 */} ( 状态 选择省市区状态 )} />
{/* 表单操作按钮 */}
); };