import { useCallback, useEffect, useState } from "react"; import styles from "./Campus.module.css"; import Banner from "@/components/Banner"; import Section from "@/components/layout/Section"; import { SearchOutlined, FilterOutlined, DownOutlined, RightOutlined } from "@ant-design/icons"; import { Empty, Select } from "antd"; import Pagination from "@/components/Pagination"; import { Link } from "react-router-dom"; import { debounce } from "@/utils"; type JobItem = { id: number; title: string; content: string; labels: string[]; } export default function JoinCampus() { const [searchValue, setSearchValue] = useState(''); // 职业类别 业务领域 所属板块 const [jobType, setJobType] = useState(''); const [jobTypeOptions, setJobTypeOptions] = useState([ { label: "全部", value: "" }, { label: "职业类别1", value: "1" }, { label: "职业类别2", value: "2" }, { label: "职业类别3", value: "3" }, ]); const [businessArea, setBusinessArea] = useState(''); const [businessAreaOptions, setBusinessAreaOptions] = useState([]); const [businessPlate, setBusinessPlate] = useState(''); const [businessPlateOptions, setBusinessPlateOptions] = useState([]); const [page, setPage] = useState(1); const [size] = useState(9); const [total, setTotal] = useState(1000); const [jobList, setJobList] = useState([]); const refreshData = useCallback(debounce(() => { console.log('refreshData2'); setJobList([ { id: 1, title: '职位1', content: '工作职责:1、为集团的各类投资项目提供法律支持,包括:组织外部律师进行尽职调查、审阅及起草交易文件、必要时参与法律谈判、提示法律风险等;2、协助完善集团本部的规章制度和合规体系;3、审阅集团各部门提交法务部审阅的日常业务法务部审阅的日常业务法务部审阅的日常业务', labels: ['标签1', '标签2'] }, { id: 2, title: '职位2', content: '职位2内容', labels: ['标签1', '标签2'] }, { id: 3, title: '职位3', content: '职位3内容', labels: ['标签1', '标签2'] }, ]) }, 500), []); useEffect(() => { refreshData(); }, [searchValue, jobType, businessArea, businessPlate, page, size]); const handleReset = useCallback(() => { setSearchValue(''); setJobType(''); setBusinessArea(''); setBusinessPlate(''); setPage(1); }, []); return (
{/* 没有数据时显示 */} {jobList.length === 0 && (
)} {jobList.map(item => (
{item.title}
查看详情
{item.labels.map(label => (
 •  {label}
))}
{item.content}
))}
); } type SearchInputProps = { value: string; placeholder: string; onChange: (value: string) => void; onEnter: () => void; } function SearchInput( { value, placeholder, onChange, onEnter }: SearchInputProps) { return (
onChange(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') { onEnter(); } }} />
); } type SelectFormItemProps = { value: string; options: { label: string; value: string }[]; label: string; onChange: (value: string) => void; } function SelectFormItem({ value, options, label, onChange }: SelectFormItemProps) { return (