import { useState, useEffect, useCallback } from "react"; import { useNavigate } from "react-router-dom"; import { jobAPI, interviewAPI, studentAPI } from "@/services/api"; import { mapJobList, mapInterviewList } from "@/utils/dataMapper"; import JobList from "./components/JobList"; import { useDispatch } from "react-redux"; import { setLoadingTrue, setLoadingFalse } from "@/store/slices/loadingSlice"; // 从Redux store中获取loading状态 import "./index.css"; const CompanyJobsPage = () => { const dispatch = useDispatch(); const [jobs, setJobs] = useState([]); const [interviews, setInterviews] = useState([]); const [isExpand, setIsExpand] = useState(false); // 是否展开 const navigate = useNavigate(); const fetchData = async () => { try { dispatch(setLoadingTrue()); // Get current user's student ID from API let studentId = null; try { const currentStudent = await studentAPI.getCurrentStudent(); studentId = currentStudent?.id; } catch (err) { console.log("Could not get current student:", err); } // Fetch jobs (and interviews if we have a student ID) const jobsData = await jobAPI.getList({ page: 1, pageSize: 10, isActive: true, }); let interviewsData = { data: [] }; if (studentId) { try { interviewsData = await interviewAPI.getList({ studentId: studentId, status: "SCHEDULED", }); } catch (err) { console.log("No interviews found or API error"); } } // Map data to frontend format const mappedJobs = mapJobList(jobsData.data || jobsData); const mappedInterviews = mapInterviewList( interviewsData.data || interviewsData ); setJobs(mappedJobs); setInterviews(mappedInterviews); } catch (error) { dispatch(setLoadingFalse()); console.error("Failed to fetch data:", error); // Fallback to empty data setJobs([]); setInterviews([]); } finally { dispatch(setLoadingFalse()); } }; const handleJobWrapperClick = () => { navigate("/company-jobs-list"); }; useEffect(() => { fetchData(); }, []); return (

企业内推岗位库

内推岗位面试

    {interviews.length > 0 ? ( interviews.map((item) => (
  • {item.position}

    {item.job?.tags?.length > 0 ? (
      {item.job.tags.map((tag) => (
    • {tag}
    • ))}
    ) : null} {item.job?.salary || "面议"}
    {item.interviewTime}
    {item.statusText}
  • )) ) : (
  • 暂无面试安排

  • )}
setIsExpand(!isExpand)} > 岗位陪跑流程

内推岗位简历投递

岗位简历接收

面试时间地点确定

参与企业面试

企业offer发送

); }; export default CompanyJobsPage;