diff --git a/package.json b/package.json index 123018d..28a9761 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "deploy:prod": "vercel --prod" }, "dependencies": { - "@arco-design/web-react": "^2.66.4", + "@arco-design/web-react": "^2.66.5", "@reduxjs/toolkit": "^2.8.2", "axios": "^1.11.0", "echarts": "^6.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2dbc25..3c3c0b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@arco-design/web-react': - specifier: ^2.66.4 - version: 2.66.4(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + specifier: ^2.66.5 + version: 2.66.5(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@reduxjs/toolkit': specifier: ^2.8.2 version: 2.8.2(react-redux@9.2.0(@types/react@19.1.10)(react@19.1.1)(redux@5.0.1))(react@19.1.1) @@ -85,8 +85,8 @@ packages: '@arco-design/color@0.4.0': resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==} - '@arco-design/web-react@2.66.4': - resolution: {integrity: sha512-vl7sJBLvbVyJhYRPoQ8kHc8BuXNkJIXca5h9ync2J1TuKglFMLNbQwjIvJLW3ciabqTZ5g1O7H1GQ+lLIEMsWA==} + '@arco-design/web-react@2.66.5': + resolution: {integrity: sha512-ity0kG+B6pmuJ2/Zh3wUtBV78XxWmRtGEwazL8f4KAjoQpMkisgLMXibUpAGfcqph3vycNFq4yHgHujjgwrJMQ==} peerDependencies: react: '>=16' react-dom: '>=16' @@ -1334,7 +1334,7 @@ snapshots: dependencies: color: 3.2.1 - '@arco-design/web-react@2.66.4(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@arco-design/web-react@2.66.5(@types/react@19.1.10)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@arco-design/color': 0.4.0 '@babel/runtime': 7.28.3 diff --git a/src/components/Layout/index.css b/src/components/Layout/index.css index ac8e516..ccb87ee 100644 --- a/src/components/Layout/index.css +++ b/src/components/Layout/index.css @@ -1,7 +1,7 @@ /* 布局相关样式 */ .app-layout { display: flex; - min-height: 100vh; + height: 100vh; width: 100%; background-color: #f2f3f5; @@ -13,7 +13,8 @@ /* 主内容区域 */ .main-content { flex: 1; - overflow: hidden; + height: 100vh; + overflow-y: auto; transition: margin-left 0.3s ease; display: flex; flex-direction: column; diff --git a/src/components/Layout/index.jsx b/src/components/Layout/index.jsx index 996f98e..3331a8d 100644 --- a/src/components/Layout/index.jsx +++ b/src/components/Layout/index.jsx @@ -16,7 +16,9 @@ const Layout = ({ children }) => { const queryLoginStudentInfo = async () => { const res = await getLoginStudentInfo(); - dispatch(setStudentInfo(res)); + if (res.success) { + dispatch(setStudentInfo(res.data)); + } }; // 初始化项目统一获取登录用户信息 diff --git a/src/components/Rank/index.jsx b/src/components/Rank/index.jsx index b6115d5..d385c72 100644 --- a/src/components/Rank/index.jsx +++ b/src/components/Rank/index.jsx @@ -34,6 +34,7 @@ const Rank = ({ className, data = null, loading = false }) => { return (

班级排名

+
- - ))} - +
+ +
+

+ {item.title} +

+ {item?.skills?.length > 0 && ( +

+ {item?.skills?.join("/")} +

+ )} +
+
+
userResumesBtnClick(e, item)} + > + 简历详情 +
+ + ))} + + } ) : ( <> @@ -90,7 +125,7 @@ export default ({ visible, onClose, data }) => { {data?.position} - 该岗位仅剩9人 + 该岗位仅剩{data?.remainingPositions}人 {data?.salary} @@ -105,15 +140,19 @@ export default ({ visible, onClose, data }) => { ))} )} - {data?.details?.description && ( + {data?.description && (

岗位描述

-

- {data?.details?.description} -

+

{data?.description}

)} - {data?.details?.requirements?.length > 0 && ( + {data?.requirements && ( +
+

岗位要求

+

{data?.requirements}

+
+ )} + {/* {data?.details?.requirements?.length > 0 && (

岗位要求

- )} - {data?.details?.companyInfo && ( + )} */} + {data?.company?.industry && (

公司介绍

- {data?.details?.companyInfo} + {data?.company?.industry}

)} diff --git a/src/pages/CompanyJobsPage/components/JobList/index.jsx b/src/pages/CompanyJobsPage/components/JobList/index.jsx index 9871b01..3995ee7 100644 --- a/src/pages/CompanyJobsPage/components/JobList/index.jsx +++ b/src/pages/CompanyJobsPage/components/JobList/index.jsx @@ -1,17 +1,23 @@ import { useState } from "react"; -import { useNavigate } from "react-router-dom"; +import toast from "@/components/Toast"; import JobInfoModal from "../JobInfoModal"; +import { getJobsDetail } from "@/services"; +import { mapJob } from "@/utils/dataMapper"; import "./index.css"; export default ({ className = "", data = [], backgroundColor = "#FFFFFF" }) => { - const navigate = useNavigate(); const [jobInfoData, setJobInfoData] = useState(undefined); const [jobInfoModalVisible, setJobInfoModalVisible] = useState(false); - const handleJobClick = (e, item) => { + const handleJobClick = async (e, item) => { e.stopPropagation(); - setJobInfoModalVisible(true); - setJobInfoData(item); + const res = await getJobsDetail(item.id); + if (res.success) { + setJobInfoData(mapJob(res.data)); + setJobInfoModalVisible(true); + } else { + toast.error(res.message); + } }; const onClickJobInfoModalClose = () => { diff --git a/src/pages/CompanyJobsPage/index.css b/src/pages/CompanyJobsPage/index.css index c39d7f4..b3f0295 100644 --- a/src/pages/CompanyJobsPage/index.css +++ b/src/pages/CompanyJobsPage/index.css @@ -1,6 +1,5 @@ .company-jobs-page-wrapper { width: 100%; - height: 100%; box-sizing: border-box; padding: 20px; position: relative; diff --git a/src/pages/CompanyJobsPage/index.jsx b/src/pages/CompanyJobsPage/index.jsx index 9da91e2..e66f380 100644 --- a/src/pages/CompanyJobsPage/index.jsx +++ b/src/pages/CompanyJobsPage/index.jsx @@ -2,9 +2,10 @@ import { useState } from "react"; import { useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; import { mapJobList, mapInterviewList } from "@/utils/dataMapper"; +import InfiniteScroll from "@/components/InfiniteScroll"; +import toast from "@/components/Toast"; import JobList from "./components/JobList"; import { getJobsList, getInterviewsList } from "@/services"; -import InfiniteScroll from "@/components/InfiniteScroll"; import "./index.css"; const PAGE_SIZE = 10; @@ -22,30 +23,28 @@ const CompanyJobsPage = () => { // 获取面试信息 const fetchInterviewsData = async () => { - try { - if (studentInfo?.id) { - const res = await getInterviewsList({ - page: interviewsPage, - pageSize: PAGE_SIZE, - studentId: studentInfo?.id, - status: "SCHEDULED", + if (studentInfo?.id) { + const res = await getInterviewsList({ + page: interviewsPage, + pageSize: PAGE_SIZE, + studentId: studentInfo?.id, + status: "SCHEDULED", + }); + if (res.success) { + const mappedInterviews = mapInterviewList(res.data || []); + setInterviews((prevList) => { + const newList = [...prevList, ...mappedInterviews]; + if (res.total === newList?.length) { + setInterviewsHasMore(false); + } else { + setInterviewsPage((prevPage) => prevPage + 1); + } + return newList; }); - if (res.success) { - const mappedInterviews = mapInterviewList(res.data || []); - setInterviews((prevList) => { - const newList = [...prevList, ...mappedInterviews]; - if (res.total === newList?.length) { - setInterviewsHasMore(false); - } else { - setInterviewsPage((prevPage) => prevPage + 1); - } - return newList; - }); - } + } else { + setInterviews([]); + toast.error(res.message); } - } catch (error) { - console.error("Failed to fetch data:", error); - setInterviews([]); } }; diff --git a/src/pages/Dashboard/components/QuickAccess/index.jsx b/src/pages/Dashboard/components/QuickAccess/index.jsx index d6fc69c..9b1267d 100644 --- a/src/pages/Dashboard/components/QuickAccess/index.jsx +++ b/src/pages/Dashboard/components/QuickAccess/index.jsx @@ -1,14 +1,23 @@ -import "./index.css"; +import { useNavigate } from "react-router-dom"; import icon1 from "@/assets/images/Dashboard/QuickAccess/icon1.png"; import icon2 from "@/assets/images/Dashboard/QuickAccess/icon2.png"; import icon3 from "@/assets/images/Dashboard/QuickAccess/icon3.png"; +import "./index.css"; const QuickAccess = () => { + const navigate = useNavigate(); + + const handleClick = (path) => { + navigate(path); + }; return (

快捷入口