import { useState, useCallback, useEffect } from "react"; import { useSelector } from "react-redux"; import { Input, Select } from "@arco-design/web-react"; import Modal from "@/components/Modal"; import InfiniteScroll from "@/components/InfiniteScroll"; import toast from "@/components/Toast"; import FILEICON from "@/assets/images/CompanyJobsPage/file_icon.png"; import ResumeInfoModal from "../ResumeInfoModal"; import PermissionModal from "../PermissionModal"; import { getResumesList, submitResume, getPageData } from "@/services"; import "./index.css"; const InputSearch = Input.Search; const PAGE_SIZE = 10; export default ({ visible, onClose, data, directToResume = false, hideDeliverButton = false }) => { const studentInfo = useSelector((state) => state.student.studentInfo); const [resumeModalShow, setResumeModalShow] = useState(directToResume); const [resumeInfoModalShow, setResumeInfoModalShow] = useState(false); const [resumeInfoData, setResumeInfoData] = useState(null); const [currentResumeId, setCurrentResumeId] = useState(null); // 当前查看的简历ID const [resumeList, setResumeList] = useState([]); // 简历列表 const [listPage, setListPage] = useState(1); const [listHasMore, setListHasMore] = useState(true); const [permissionModalVisible, setPermissionModalVisible] = useState(false); const [selectedVersions, setSelectedVersions] = useState({}); // 每个简历的版本选择,使用简历ID作为key // 处理directToResume参数变化 useEffect(() => { if (visible && directToResume) { setResumeModalShow(true); } else if (visible && !directToResume) { setResumeModalShow(false); } }, [visible, directToResume]); const handleCloseModal = () => { setResumeModalShow(false); setResumeList([]); // 清空简历列表 setListPage(1); // 重置分页 setListHasMore(true); // 重置加载更多状态 onClose(); }; const queryResumeList = useCallback(async () => { const res = await getResumesList({ page: listPage, pageSize: PAGE_SIZE, studentId: studentInfo?.id }); if (res.success) { setResumeList((prevList) => { const newList = [...prevList, ...res.data]; if (res.total === newList?.length) { setListHasMore(false); } else { setListPage((prevPage) => prevPage + 1); } return newList; }); } }, [listPage, studentInfo?.id]); // 点击立即投递 const handleClickDeliverBtn = (e) => { e.stopPropagation(); setResumeModalShow(true); }; // 选择简历投递 const userResumesClick = async (item) => { // 显示权限提示弹窗 setPermissionModalVisible(true); // 原投递逻辑暂时注释,实际使用时可根据用户权限判断 /* try { // 调用投递服务 const result = await submitResume({ resumeId: item.id, jobId: data?.id, studentId: studentInfo?.id, resumeTitle: item.title, jobPosition: data?.position, company: data?.company, resumeVersion: selectedVersions[item.id] || "2" // 添加版本信息 }); if (result.success) { // 投递成功,显示成功提示 const versionText = (selectedVersions[item.id] || "2") === "1" ? "原始版" : "个人修改版"; toast.success(`简历"${item.title}"(${versionText})投递成功!`); // 关闭模态框 handleCloseModal(); // 输出投递成功信息 console.log('投递成功', { applicationId: result.data.applicationId, resumeId: item.id, jobId: data?.id, resumeTitle: item.title, jobPosition: data?.position, submittedAt: result.data.submittedAt }); } else { toast.error(result.message || '投递失败,请重试'); } } catch (error) { toast.error('投递失败,请重试'); console.error('投递失败:', error); } */ }; // 点击简历详情 const userResumesBtnClick = async (e, item) => { e.stopPropagation(); try { // 获取岗位与面试题页面的数据 const pageDataResponse = await getPageData(); if (pageDataResponse.success) { const pageData = pageDataResponse.data; // 找到对应的行业信息 const matchedIndustry = pageData.industries?.find(industry => industry.name === item.industry ); // 从resumeTemplates中查找对应岗位的模板 const industryTemplates = pageData.resumeTemplates?.[item.industry] || []; const positionTemplate = industryTemplates.find(template => template.position === item.position ); // 添加调试日志 console.log('查找简历模板:', { industryName: item.industry, positionTitle: item.position, templatesCount: industryTemplates.length, templatePositions: industryTemplates.map(t => t.position), templatesStructure: industryTemplates.slice(0, 2).map(t => ({ position: t.position, hasContent: !!t.content, hasStudentInfo: !!t.studentInfo, keys: Object.keys(t) })) }); if (positionTemplate) { console.log('找到的模板:', { position: positionTemplate.position, hasContent: !!positionTemplate.content, hasContentOriginal: !!positionTemplate.content?.original, hasStudentInfo: !!positionTemplate.studentInfo, templateKeys: Object.keys(positionTemplate), contentKeys: positionTemplate.content ? Object.keys(positionTemplate.content) : null }); } else { console.warn('未找到简历模板:', item.position); } // 构造简历数据,使用与ResumeInterviewPage相同的格式 const resumeData = { title: item.position, // 使用岗位名称作为标题 content: positionTemplate?.content || null, // 这里包含原始版和修改版数据 selectedTemplate: positionTemplate, // 添加selectedTemplate字段 studentResume: pageData.myResume }; console.log('加载简历数据:', { resumeTitle: item.title, position: item.position, industry: item.industry, selectedVersion: selectedVersions[item.id] || "2", hasContent: !!positionTemplate?.content, hasOriginal: !!positionTemplate?.content?.original, hasModified: !!positionTemplate?.content?.modified }); setResumeInfoData(resumeData); setCurrentResumeId(item.id); // 记录当前简历ID setResumeInfoModalShow(true); } else { toast.error('加载简历数据失败'); } } catch (error) { console.error('获取简历数据失败:', error); toast.error('加载简历数据失败'); } };;; return ( <>
{resumeModalShow ? ( <> { {resumeList.map((item) => (
  • userResumesBtnClick(e, item)} >

    {item.title}

    { e.stopPropagation(); userResumesClick(item); }} > 投递
  • ))}
    } ) : ( <>
    {data?.position} {/* 岗位相关标签 */} {(data?.jobCategoryTag || data?.jobCategory) && ( {data?.jobCategoryTag || data?.jobCategory} )} {/* 岗位剩余量 - 仅未投递岗位显示 */} {!data?.isDelivered && data?.remainingPositions && ( ! 岗位招聘数量仅剩{data?.remainingPositions}名 )} {data?.salary}
    {data?.tags?.length > 0 && ( )} {data?.details?.description && (

    岗位描述

    {data?.details?.description.split(/\d+\.\s*/).filter(item => item.trim()).map((item, index) => (
    {index + 1}. {item.trim()}
    ))}
    )} {(data?.details?.requirements?.length > 0 || data?.details?.requirementsText) && (

    岗位要求

    {data?.details?.requirements ? ( data?.details?.requirements?.map((item, index) => (
    {index + 1}. {item}
    )) ) : ( data?.details?.requirementsText?.split(/\d+\.\s*/).filter(item => item.trim()).map((item, index) => (
    {index + 1}. {item.trim()}
    )) )}
    )} {data?.details?.companyInfo && (

    公司介绍

    {data?.details?.companyInfo.split('\n').map((paragraph, index) => (

    {paragraph}

    ))}
    )} {!hideDeliverButton && (
    立即投递
    )} )}
    { setResumeInfoModalShow(false); setResumeInfoData(null); setCurrentResumeId(null); }} /> setPermissionModalVisible(false)} /> ); };