From 703f0b1debd56b9750a28eb2070f4b1401ddccc5 Mon Sep 17 00:00:00 2001 From: lapuda <577732344@qq.com> Date: Fri, 3 Jul 2026 13:19:51 +0800 Subject: [PATCH] Refactor EditModal component: improve array handling and enhance form field definitions --- .../PublicJobFair/components/EditModal.tsx | 94 +++++++++++++------ 1 file changed, 67 insertions(+), 27 deletions(-) diff --git a/src/pages/Jobfair/PublicJobFair/components/EditModal.tsx b/src/pages/Jobfair/PublicJobFair/components/EditModal.tsx index 2393a93..dd39ea7 100644 --- a/src/pages/Jobfair/PublicJobFair/components/EditModal.tsx +++ b/src/pages/Jobfair/PublicJobFair/components/EditModal.tsx @@ -22,21 +22,63 @@ interface EditModalProps { onSubmit: (values: API.PublicJobFair.JobFairForm) => Promise; } -/** 逗号串 -> 数组(空值返回 [''] 保证至少一行) */ -const toArr = (s?: string): string[] => { - if (!s) return ['']; - const arr = s.split(',').map((x) => x.trim()).filter(Boolean); - return arr.length ? arr : ['']; +const UNIT_FIELD = 'unitName'; + +type UnitFormItem = + | string + | { unitName?: string; value?: string; label?: string; name?: string } + | null + | undefined; + +/** 逗号串 -> ProFormList 数组(空值保证至少一行) */ +const toArr = (s?: string): { [UNIT_FIELD]: string }[] => { + if (!s) return [{ unitName: '' }]; + const arr = s + .split(',') + .map((x) => x.trim()) + .filter(Boolean); + return (arr.length ? arr : ['']).map((unitName) => ({ unitName })); }; /** 数组 -> 逗号串(过滤空串) */ -const toStr = (arr?: string[]): string => - (arr || []).map((x) => (x || '').trim()).filter(Boolean).join(','); +const toStr = (arr?: UnitFormItem[]): string => + (arr || []) + .map((item) => { + if (item == null) return ''; + if (typeof item === 'object') { + return item.unitName ?? item.value ?? item.label ?? item.name ?? ''; + } + return item; + }) + .map((item) => String(item).trim()) + .filter(Boolean) + .join(','); -const EditModal: React.FC = ({ open, values, jobFairTypeEnum, onCancel, onSubmit }) => { +const splitCommaText = (value?: string | string[]): string[] => { + if (Array.isArray(value)) { + return value.map((item) => String(item).trim()).filter(Boolean); + } + if (!value) return []; + return String(value) + .split(',') + .map((item) => item.trim()) + .filter(Boolean); +}; + +const EditModal: React.FC = ({ + open, + values, + jobFairTypeEnum, + onCancel, + onSubmit, +}) => { const [form] = Form.useForm(); const [mapOpen, setMapOpen] = useState(false); - const [locationInfo, setLocationInfo] = useState<{ address?: string; latitude?: number; longitude?: number }>({}); + const [locationInfo, setLocationInfo] = useState<{ + address?: string; + latitude?: number; + longitude?: number; + }>({}); const [yesNoEnum, setYesNoEnum] = useState({}); const isCrossDomain = Form.useWatch('isCrossDomain', form); @@ -54,9 +96,7 @@ const EditModal: React.FC = ({ open, values, jobFairTypeEnum, on jobFairHostUnitList: toArr(values.jobFairHostUnit), jobFairHelpUnitList: toArr(values.jobFairHelpUnit), jobFairOrganizeUnitList: toArr(values.jobFairOrganizeUnit), - crossDomainCityList: values.crossDomainCities - ? values.crossDomainCities.split(',').map((x) => x.trim()).filter(Boolean) - : [], + crossDomainCityList: splitCommaText(values.crossDomainCities), }); setLocationInfo({ address: values.jobFairAddress, @@ -65,9 +105,9 @@ const EditModal: React.FC = ({ open, values, jobFairTypeEnum, on }); } else { form.setFieldsValue({ - jobFairHostUnitList: [''], - jobFairHelpUnitList: [''], - jobFairOrganizeUnitList: [''], + jobFairHostUnitList: toArr(), + jobFairHelpUnitList: toArr(), + jobFairOrganizeUnitList: toArr(), crossDomainCityList: [], }); setLocationInfo({}); @@ -111,8 +151,7 @@ const EditModal: React.FC = ({ open, values, jobFairTypeEnum, on jobFairHostUnit: toStr(jobFairHostUnitList), jobFairHelpUnit: toStr(jobFairHelpUnitList), jobFairOrganizeUnit: toStr(jobFairOrganizeUnitList), - crossDomainCities: - isCrossDomain === 'y' ? toStr(crossDomainCityList) : '', + crossDomainCities: isCrossDomain === 'y' ? toStr(crossDomainCityList) : '', }; await onSubmit(payload); }} @@ -136,11 +175,7 @@ const EditModal: React.FC = ({ open, values, jobFairTypeEnum, on valueEnum={jobFairTypeEnum} rules={[{ required: true, message: '请选择招聘会类型' }]} /> - + {isCrossDomain === 'y' && ( = ({ open, values, jobFairTypeEnum, on copyIconProps={false} creatorButtonProps={{ position: 'bottom', creatorButtonText: '添加主办单位' }} > - + = ({ open, values, jobFairTypeEnum, on copyIconProps={false} creatorButtonProps={{ position: 'bottom', creatorButtonText: '添加协办单位' }} > - + = ({ open, values, jobFairTypeEnum, on copyIconProps={false} creatorButtonProps={{ position: 'bottom', creatorButtonText: '添加承办单位' }} > - + - + {locationInfo.latitude && (
- 地址:{locationInfo.address} | 经度:{locationInfo.longitude} | 纬度:{locationInfo.latitude} + 地址:{locationInfo.address} | 经度:{locationInfo.longitude} | 纬度: + {locationInfo.latitude}
)}