import React from 'react'; import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Button } from '@/client/components/ui/button'; import { Input } from '@/client/components/ui/input'; import { Textarea } from '@/client/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/client/components/ui/select'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from '@/client/components/ui/form'; import { MapPin, DollarSign, Users, Car } from 'lucide-react'; import { format } from 'date-fns'; import { createRouteSchema, updateRouteSchema } from '@/server/modules/routes/route.schema'; import type { CreateRouteInput, UpdateRouteInput } from '@/server/modules/routes/route.schema'; import { ActivitySelect } from './ActivitySelect'; // 将ISO日期时间格式化为 datetime-local 输入框需要的格式 const formatDateTimeForInput = (dateString: string): string => { const date = new Date(dateString); // 使用 date-fns 转换为 YYYY-MM-DDTHH:mm 格式 return format(date, "yyyy-MM-dd'T'HH:mm"); }; interface RouteFormProps { initialData?: UpdateRouteInput & { id?: number }; onSubmit: (data: CreateRouteInput | UpdateRouteInput) => Promise; onCancel: () => void; isLoading?: boolean; } export const RouteForm: React.FC = ({ initialData, onSubmit, onCancel, isLoading = false }) => { const isEditing = !!initialData?.id; const form = useForm({ resolver: zodResolver(isEditing ? updateRouteSchema : createRouteSchema), defaultValues: initialData ? { name: initialData.name || '', description: initialData.description || '', startPoint: initialData.startPoint || '', endPoint: initialData.endPoint || '', pickupPoint: initialData.pickupPoint || '', dropoffPoint: initialData.dropoffPoint || '', departureTime: initialData.departureTime ? formatDateTimeForInput(initialData.departureTime) : '', vehicleType: initialData.vehicleType || 'bus', price: initialData.price || 0, seatCount: initialData.seatCount || 1, availableSeats: initialData.availableSeats || 1, activityId: initialData.activityId || 0, isDisabled: initialData.isDisabled } : { name: '', description: '', startPoint: '', endPoint: '', pickupPoint: '', dropoffPoint: '', departureTime: '', vehicleType: 'bus', price: 0, seatCount: 1, availableSeats: 1, activityId: 0, } }); const handleSubmit = async (data: CreateRouteInput | UpdateRouteInput) => { try { await onSubmit(data); } catch (error) { console.error('表单提交失败:', error); } }; return (
{/* 路线名称 */} ( 路线名称 * 路线的显示名称,最多255个字符 )} /> {/* 车型 */} ( 车型 * 选择路线的车型 )} />
{/* 路线描述 */} ( 路线描述