import {Modal, Card, Descriptions, List, Button, Divider, Form, Select, Input, DatePicker, message} from 'antd'; import React, { useEffect, useRef,useState } from 'react'; import { ProDescriptions} from '@ant-design/pro-components'; import { addCmsUserWorkExperiencesList, addCmsInterview, getCmsInterviewList, } from '@/services/Management/list'; import dayjs from 'dayjs'; const { TextArea } = Input; const { Option } = Select; export type ListFormProps = { onClose: (flag?: boolean, formVals?: unknown) => void; open: boolean; values?: Partial; matching?: any; }; const listEdit: React.FC = (props) => { const mapRef = useRef(null); const [loading, setLoading] = useState(false); const [contactInfoList, setContactInfoList] = useState([]); // 面试邀约相关状态 const [interviewForm] = Form.useForm(); const [interviewMethod, setInterviewMethod] = useState('online'); const [submitting, setSubmitting] = useState(false); const [alreadyInvited, setAlreadyInvited] = useState(false); const [checkingInvitation, setCheckingInvitation] = useState(false); useEffect(() => { if (props.open && props.values) { console.log(props.values); fetchResumeDetail(); checkExistingInvitation(); // 重置面试邀约表单 interviewForm.resetFields(); setInterviewMethod('online'); } }, [props.values,props.open]); // 检查是否已存在有效邀约 const checkExistingInvitation = async () => { if (!props.matching?.jobId || !props.values?.userId) return; setCheckingInvitation(true); try { const res = await getCmsInterviewList({ jobId: Number(props.matching.jobId), userId: props.values.userId, }); if (res?.code === 200 && res?.rows?.length > 0) { // 存在非 rejected 的邀约即为已邀约 const hasActive = res.rows.some( (item: API.Management.InterviewInvitation) => item.status !== 'rejected' ); setAlreadyInvited(hasActive); } } catch (error) { console.error('检查邀约状态失败:', error); } finally { setCheckingInvitation(false); } }; const fetchResumeDetail = async () => { if (!props.values?.userId) return; setLoading(true); try { const parm={userId: props.values.userId, jobId: props.matching?.jobId}; const response = await addCmsUserWorkExperiencesList(parm); if (response.code === 200) { setContactInfoList(response.rows); } } catch (error) { console.error('获取经历详情失败:', error); } finally { setLoading(false); } }; // 发送面试邀约 const handleInterviewSubmit = async () => { try { const values = await interviewForm.validateFields(); setSubmitting(true); const payload: API.Management.InterviewInvitation = { companyId: props.matching?.companyId, jobId: Number(props.matching?.jobId), userId: props.values?.userId, applyId: props.values?.applyId ? Number(props.values.applyId) : undefined, jobName: props.matching?.jobName, interviewTime: values.interviewTime ? dayjs(values.interviewTime).format('YYYY-MM-DD HH:mm:ss') : undefined, interviewMethod: values.interviewMethod, meetingLink: values.meetingLink, meetingPassword: values.meetingPassword, interviewLocation: values.interviewLocation, contactPhone: values.contactPhone, interviewerName: values.interviewerName, status: 'pending', remark: values.remark, }; const response = await addCmsInterview(payload); if (response.code === 200) { message.success('面试邀约已发送'); setAlreadyInvited(true); interviewForm.resetFields(); setInterviewMethod('online'); } else { message.error(response.msg || '发送失败'); } } catch (error: any) { const errMsg = error?.response?.data?.msg || error?.message || '发送面试邀约失败'; message.error(errMsg); console.error('发送面试邀约失败:', error); } finally { setSubmitting(false); } }; return ( props.onClose()} title="简历详情" width={800} footer={[ ]} > { { if (loading) return '加载中...'; if (!Array.isArray(contactInfoList) || contactInfoList.length === 0) { return 暂无经历信息; } return ( ( {item.companyName || '未填写'} {item.position || '未填写'} {item.startDate || '未填写'} {item.endDate || '未填写'} {item.description || '未填写'} )} /> ); }} /> }
{interviewMethod === 'online' && ( <> {/* */} )} {interviewMethod === 'offline' && ( )}