import React, { useEffect } from 'react'; import type { Dayjs } from 'dayjs'; import { Button, Col, DatePicker, Form, Input, Modal, Row, Select, Space } from 'antd'; import type { RecruitmentFairExportChannel, RecruitmentFairExportParams, RecruitmentFairExportType, } from '@/services/jobfair/recruitmentFairExport'; const { RangePicker } = DatePicker; interface Option { label?: React.ReactNode; text?: React.ReactNode; value: string | number | boolean; } interface FormValues { exportType: RecruitmentFairExportType; title?: string; hostUnit?: string; fairType?: string; region?: string; venueId?: number; address?: string; startRange?: [Dayjs, Dayjs]; endRange?: [Dayjs, Dayjs]; applyRange?: [Dayjs, Dayjs]; createRange?: [Dayjs, Dayjs]; fairStatus?: RecruitmentFairExportParams['fairStatus']; isCrossDomain?: string; onlineApply?: boolean; reviewStatus?: RecruitmentFairExportParams['reviewStatus']; } interface Props { open: boolean; channel: RecruitmentFairExportChannel; fairTypeOptions?: Option[]; regionOptions?: Option[]; venueOptions?: Option[]; onCancel: () => void; onExport: (params: RecruitmentFairExportParams) => Promise; } const toOptions = (options: Option[] = []) => options.map((item) => ({ label: item.label ?? item.text, value: item.value, })); const dateRange = (range?: [Dayjs, Dayjs]) => range ? { start: range[0].format('YYYY-MM-DD HH:mm:ss'), end: range[1].format('YYYY-MM-DD HH:mm:ss'), } : undefined; const FairExportModal: React.FC = ({ open, channel, fairTypeOptions, regionOptions, venueOptions, onCancel, onExport, }) => { const [form] = Form.useForm(); const isOnline = channel === 'online'; useEffect(() => { if (open) { form.resetFields(); form.setFieldsValue({ exportType: 'companies' }); } }, [form, open]); const submit = async (values: FormValues) => { const start = dateRange(values.startRange); const end = dateRange(values.endRange); const apply = dateRange(values.applyRange); const create = dateRange(values.createRange); await onExport({ exportType: values.exportType, title: values.title?.trim() || undefined, hostUnit: values.hostUnit?.trim() || undefined, fairType: values.fairType, region: values.region, venueId: values.venueId, address: values.address?.trim() || undefined, startTime: start?.start, endTime: end?.end, applyStartTime: apply?.start, applyEndTime: apply?.end, createStartTime: create?.start, createEndTime: create?.end, fairStatus: values.fairStatus, isCrossDomain: isOnline ? values.isCrossDomain : undefined, onlineApply: isOnline ? undefined : values.onlineApply, reviewStatus: values.reviewStatus, }); }; return ( form={form} layout="vertical" initialValues={{ exportType: 'companies' }} onFinish={submit} > {!isOnline && ( ) : ( ); }; export default FairExportModal;