import React, { useEffect, useState } from 'react'; import { ModalForm, ProForm, ProFormDatePicker, ProFormDigit, ProFormSelect, ProFormText, ProFormTextArea, } from '@ant-design/pro-components'; import { Button, Divider, Form, Input, Modal, Space } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import type { VenueInfoDictForm, VenueInfoForm, VenueInfoItem, } from '@/services/jobportal/venueInfo'; interface EditModalProps { open: boolean; values?: VenueInfoItem; venueTypeOptions: any[]; lineOptions: any[]; defaultHandler?: string; onCreateDictOption: (values: VenueInfoDictForm) => Promise; onCancel: () => void; onSubmit: (values: VenueInfoForm) => Promise; } const VENUE_TYPE_DICT = 'venue_info_type'; const splitRouteLineIds = (routeLineIds?: string) => { if (!routeLineIds) { return []; } return routeLineIds .split(',') .map((item) => item.trim()) .filter(Boolean); }; const EditModal: React.FC = ({ open, values, venueTypeOptions, lineOptions, defaultHandler, onCreateDictOption, onCancel, onSubmit, }) => { const [form] = Form.useForm(); const [dictModalOpen, setDictModalOpen] = useState(false); const [dictInputValue, setDictInputValue] = useState(''); const [dictSubmitLoading, setDictSubmitLoading] = useState(false); useEffect(() => { if (open) { form.resetFields(); if (values) { form.setFieldsValue({ ...values, routeLineIds: splitRouteLineIds(values.routeLineIds), }); } else { form.setFieldsValue({ handleDate: new Date(), handler: defaultHandler, }); } } }, [open, values, defaultHandler, form]); const renderVenueTypeDropdown = (menu: React.ReactElement): React.ReactElement => ( <> {menu} ); const handleDictModalOk = async () => { const dictLabel = dictInputValue.trim(); if (!dictLabel) { return; } setDictSubmitLoading(true); try { const success = await onCreateDictOption({ dictType: VENUE_TYPE_DICT, dictLabel, }); if (success) { form.setFieldValue('venueType', dictLabel); setDictModalOpen(false); } } finally { setDictSubmitLoading(false); } }; return ( { const selectedLineIds = (formValues.routeLineIds || []) as string[]; const selectedLineNames = lineOptions .filter((option) => selectedLineIds.includes(String(option.value))) .map((option) => option.label) .join(','); await onSubmit({ ...formValues, id: values?.id, routeLineIds: selectedLineIds, routeLineNames: selectedLineNames, } as VenueInfoForm); }} > ); }; export default EditModal;