2025-09-03 13:26:13 +08:00
|
|
|
|
import { useState, useCallback } from "react";
|
2025-09-05 20:46:03 +08:00
|
|
|
|
import { useNavigate } from "react-router-dom";
|
2025-09-03 13:26:13 +08:00
|
|
|
|
import JobList from "@/pages/CompanyJobsPage/components/JobList";
|
|
|
|
|
|
import InfiniteScroll from "@/components/InfiniteScroll";
|
|
|
|
|
|
import { getJobsList } from "@/services";
|
|
|
|
|
|
|
|
|
|
|
|
import "./index.css";
|
|
|
|
|
|
|
|
|
|
|
|
const PAGE_SIZE = 20;
|
|
|
|
|
|
|
|
|
|
|
|
const CompanyJobsListPage = () => {
|
2025-09-05 20:46:03 +08:00
|
|
|
|
const navigate = useNavigate();
|
2025-09-03 13:26:13 +08:00
|
|
|
|
const [jobs, setJobs] = useState([]);
|
|
|
|
|
|
const [listPage, setListPage] = useState(1);
|
|
|
|
|
|
const [listHasMore, setListHasMore] = useState(true);
|
|
|
|
|
|
|
2025-09-05 20:46:03 +08:00
|
|
|
|
// 返回到企业内推岗位页面
|
|
|
|
|
|
const handleBack = () => {
|
|
|
|
|
|
navigate("/company-jobs");
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2025-09-03 13:26:13 +08:00
|
|
|
|
const fetchJobs = useCallback(async () => {
|
|
|
|
|
|
const res = await getJobsList({
|
|
|
|
|
|
page: listPage,
|
|
|
|
|
|
pageSize: PAGE_SIZE,
|
|
|
|
|
|
isActive: true,
|
|
|
|
|
|
});
|
|
|
|
|
|
if (res.success) {
|
|
|
|
|
|
// Mock数据已经是前端格式,不需要映射
|
|
|
|
|
|
setJobs((prevList) => {
|
|
|
|
|
|
const newList = [...prevList, ...res.data];
|
|
|
|
|
|
if (res.total === newList?.length) {
|
|
|
|
|
|
setListHasMore(false);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
setListPage((prevPage) => prevPage + 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
return newList;
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}, [listPage]);
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
2025-09-05 20:46:03 +08:00
|
|
|
|
<div className="company-jobs-list-page">
|
|
|
|
|
|
{/* 返回按钮 */}
|
|
|
|
|
|
<div className="back-button-wrapper">
|
|
|
|
|
|
<button className="back-button" onClick={handleBack}>
|
|
|
|
|
|
<span className="back-icon">←</span>
|
|
|
|
|
|
<span className="back-text">返回</span>
|
|
|
|
|
|
</button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<InfiniteScroll
|
|
|
|
|
|
loadMore={fetchJobs}
|
|
|
|
|
|
hasMore={listHasMore}
|
|
|
|
|
|
empty={jobs.length === 0}
|
|
|
|
|
|
className="company-jobs-list-page-wrapper"
|
|
|
|
|
|
>
|
|
|
|
|
|
<JobList data={jobs} className="jobs-list-margin" />
|
|
|
|
|
|
</InfiniteScroll>
|
|
|
|
|
|
</div>
|
2025-09-03 13:26:13 +08:00
|
|
|
|
);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export default CompanyJobsListPage;
|