import React, { Fragment, useEffect, useRef, useState } from 'react'; import { FormattedMessage, useAccess, useNavigate, useParams } from '@umijs/max'; import { Button, FormInstance, message, Tag } from 'antd'; import { ActionType, ProColumns, ProTable } from '@ant-design/pro-components'; import { FormOutlined, PlusOutlined, AlignLeftOutlined, SendOutlined, FilterOutlined, ArrowLeftOutlined } from '@ant-design/icons'; import { getDictValueEnum } from '@/services/system/dict'; import DictTag from '@/components/DictTag'; import { exportCmsAppUserExport } from '@/services/mobileusers/list'; import { addCmsEmployeeConfirmList, exportCmsJobCandidates, getCmsJobIds, } from '@/services/Management/list'; import similarityJobs from '@/utils/similarity_Job'; import Detail from './detail'; import Hire from './hire'; import InterviewInvite from '../ResumeRecommend/InterviewInvite'; import ResumeFilter from './resumeFilter'; const handleExport = async (values: API.MobileUser.ListParams) => { const hide = message.loading('正在导出'); try { await exportCmsAppUserExport(values); hide(); message.success('导出成功'); return true; } catch (error) { hide(); message.error('导出失败,请重试'); return false; } }; function ManagementList() { const access = useAccess(); const navigate = useNavigate(); const formTableRef = useRef(); const actionRef = useRef(); const [jobId, setJobId] = useState(); const [educationEnum, setEducationEnum] = useState([]); const [experienceEnum, setExperienceEnum] = useState([]); const [areaEnum, setAreaEnum] = useState([]); const [sexEnum, setSexEnum] = useState([]); const [hotEnum, setHotEnum] = useState([]); const [politicalEnum, setPoliticalEnum] = useState([]); const [contractTermEnum, setContractTermEnum] = useState([]); const [currentRow, setCurrentRow] = useState(); const [modalVisible, setModalVisible] = useState(false); const [hireVisible, setHireVisible] = useState(false); const [jobInfo, setJobInfo] = useState({}); const [matchingDegree, setMatchingDegree] = useState(null); const [inviteVisible, setInviteVisible] = useState(false); const [filterVisible, setFilterVisible] = useState(false); const [hireAdd, setHireAdd] = useState(null); const [mode, setMode] = useState<'view' | 'edit' | 'create'>('create'); const params = useParams(); const id = params.id || '0'; useEffect(() => { if (jobId !== id) { setJobId(id); getJobInfo(id); } }, [jobId, params]); const getJobInfo = async (jobId: string) => { let resData = await getCmsJobIds(jobId); if (resData.code === 200) { similarityJobs.setJobInfo(resData.data); setJobInfo(resData.data); } }; useEffect(() => { getDictValueEnum('education', true, true).then((data) => { setEducationEnum(data); }); getDictValueEnum('experience', true, true).then((data) => { setExperienceEnum(data); }); getDictValueEnum('area', true, true).then((data) => { setAreaEnum(data); }); getDictValueEnum('sys_user_sex', true).then((data) => { setSexEnum(data); }); getDictValueEnum('political_affiliation', true, true).then((data) => { setPoliticalEnum(data); }); getDictValueEnum('contract_term', true, true).then((data) => { setContractTermEnum(data); }); }, []); const columns: ProColumns[] = [ { title: '用户名', dataIndex: 'name', valueType: 'text', align: 'center', }, { title: '期望薪资', dataIndex: 'minSalary', valueType: 'text', hideInSearch: true, align: 'center', render: (_, record) => ( <> {record.salaryMin}-{record.salaryMax} ), }, { title: '出生日期', dataIndex: 'birthDate', valueType: 'text', align: 'center', hideInSearch: true, }, { title: '学历要求', dataIndex: 'education', valueType: 'select', align: 'center', valueEnum: educationEnum, render: (_, record) => { return ; }, }, { title: '区域', dataIndex: 'area', valueType: 'select', align: 'center', valueEnum: areaEnum, render: (_, record) => { return ; }, }, { title: '性别', dataIndex: 'sex', valueType: 'select', align: 'center', valueEnum: sexEnum, render: (_, record) => { return ; }, }, { title: '政治面貌', dataIndex: 'politicalAffiliation', valueType: 'select', align: 'center', valueEnum: politicalEnum, render: (_, record) => { return ; }, }, { title: '匹配度', dataIndex: 'minSalary', valueType: 'text', hideInSearch: true, align: 'center', render: (_, record) => ( <>{similarityJobs.calculationMatchingDegreeJob(record).overallMatch} ), }, { title: '面试状态', dataIndex: 'interviewStatus', valueType: 'text', hideInSearch: true, align: 'center', width: 100, render: (_, record) => { const statusMap: Record = { pending: { text: '待确认', color: 'blue' }, accepted: { text: '已接受', color: 'green' }, rejected: { text: '已拒绝', color: 'red' }, completed: { text: '已完成', color: 'purple' }, }; const st = statusMap[record.interviewStatus || '']; if (!st) return 未邀约; return {st.text}; }, }, { title: '操作', hideInSearch: true, align: 'center', dataIndex: 'jobId', width: 280, render: (jobId, record) => [
,
], }, ]; return (
// params 是需要自带的参数 // 这个参数优先级更高,会覆盖查询表单的参数 actionRef={actionRef} formRef={formTableRef} rowKey="jobId" key="index" columns={columns} search={{ defaultCollapsed: false }} request={(params) => exportCmsJobCandidates(jobId).then((res) => { // const v = similarityJobs.calculationMatchingDegreeJob(res.rows[0]); // console.log(v); const result = { data: res.rows, total: res.total, success: true, }; return result; }) } toolBarRender={() => [ , , ]} /> { console.log('close'); setModalVisible(false); setCurrentRow(undefined); setMatchingDegree(null); }} > { console.log('close'); setHireVisible(false); setCurrentRow(undefined); setHireAdd(null); }} onSubmit={async (values) => { let resData; resData = await addCmsEmployeeConfirmList(values); if (resData.code === 200) { setHireVisible(false); setCurrentRow(undefined); message.success('新增成功'); if (actionRef.current) { actionRef.current.reload(); } } }} > { setInviteVisible(false); setCurrentRow(undefined); if (needRefresh) { actionRef.current?.reload(); } }} /> { setFilterVisible(false); setCurrentRow(undefined); if (needRefresh) { actionRef.current?.reload(); } }} />
); } export default ManagementList;