Files
teach_sys_Demo/src/pages/CompanyJobsListPage/index.jsx

75 lines
1.7 KiB
React
Raw Normal View History

2025-08-19 22:35:01 +08:00
import { useState, useEffect } from "react";
2025-08-15 16:16:41 +08:00
import { useNavigate } from "react-router-dom";
import { getJobsList } from "@/services";
2025-08-19 22:35:01 +08:00
import { mapJobList } from "@/utils/dataMapper";
2025-08-15 16:16:41 +08:00
import JobList from "@/pages/CompanyJobsPage/components/JobList";
import "./index.css";
const CompanyJobsListPage = () => {
2025-08-19 22:35:01 +08:00
const [jobs, setJobs] = useState([]);
const [loading, setLoading] = useState(true);
const [page, setPage] = useState(1);
const [total, setTotal] = useState(0);
2025-08-15 16:16:41 +08:00
const navigate = useNavigate();
2025-08-19 22:35:01 +08:00
useEffect(() => {
fetchJobs();
}, [page]);
const fetchJobs = async () => {
try {
setLoading(true);
const response = await getJobsList({
2025-08-19 22:35:01 +08:00
page,
pageSize: 20,
isActive: true,
2025-08-19 22:35:01 +08:00
});
2025-08-19 22:35:01 +08:00
const mappedJobs = mapJobList(response.data || response);
setJobs(mappedJobs);
setTotal(response.total || mappedJobs.length);
} catch (error) {
console.error("Failed to fetch jobs:", error);
setJobs([]);
} finally {
setLoading(false);
}
};
if (loading && jobs.length === 0) {
return (
<div
className="company-jobs-list-page-wrapper"
style={{
display: "flex",
justifyContent: "center",
alignItems: "center",
minHeight: "400px",
}}
>
2025-08-19 22:35:01 +08:00
<p>加载中...</p>
</div>
);
}
2025-08-15 16:16:41 +08:00
return (
<ul className="company-jobs-list-page-wrapper">
2025-08-19 22:35:01 +08:00
<JobList data={jobs} />
{jobs.length === 0 && !loading && (
<div
style={{
textAlign: "center",
padding: "40px",
color: "#999",
}}
>
2025-08-19 22:35:01 +08:00
暂无岗位信息
</div>
)}
2025-08-15 16:16:41 +08:00
</ul>
);
};
export default CompanyJobsListPage;