| </head> | </head> | ||||
| <body> | <body> | ||||
| <div id="root"></div> | <div id="root"></div> | ||||
| <script src="/umi.15e5f129.js"></script> | |||||
| <script src="/umi.9a7953c1.js"></script> | |||||
| </body> | </body> | ||||
| </html> | </html> |
| .company-item{width:100%;padding:16px 16px 0;background-color:#fff;border-radius:8px;cursor:pointer}.company-item:nth-child(5n){margin-right:0}.with-prefix:before{content:"";width:8px;height:8px;margin-right:16px;display:inline-block;background-color:#19be6e;transform:translateY(-1px)} |
| .with-prefix:before{content:"";width:8px;height:8px;margin-right:16px;display:inline-block;background-color:#19be6e;transform:translateY(-1px)} |
| }, | }, | ||||
| }} | }} | ||||
| > | > | ||||
| <div style={{ padding: '20px 414px', }}> | |||||
| <div style={{ padding: '20px 314px', }}> | |||||
| <Flex justify='space-between' style={{ width: '100%' }}> | <Flex justify='space-between' style={{ width: '100%' }}> | ||||
| <Space direction='vertical' size={0} > | <Space direction='vertical' size={0} > | ||||
| <h3>关于我们</h3> | <h3>关于我们</h3> |
| import { useState, useEffect, useRef } from 'react'; | |||||
| import { Link } from '@umijs/max'; | |||||
| import { ProList, ProConfigProvider, ProFormCaptcha, ProFormCheckbox, ProFormText, setAlpha, ProForm, ProFormDependency } from '@ant-design/pro-components'; | |||||
| import { PhoneOutlined, MailOutlined, EnvironmentOutlined, ArrowRightOutlined, FireOutlined, StarOutlined, StarFilled } from '@ant-design/icons'; | |||||
| import { Space, Tabs, Avatar, Row, Col, Image, message, Card, ConfigProvider, Modal, Tag, Tooltip, Pagination, Flex, Descriptions, Button, Divider } from 'antd'; | |||||
| import { Imageprefix } from '@/constants/index' | |||||
| interface CommonJobProps { | |||||
| item: any, | |||||
| } | |||||
| const CommonJob: React.FC<CommonJobProps> = ({ item }: any) => { | |||||
| return ( | |||||
| <> | |||||
| <ConfigProvider | |||||
| theme={{ | |||||
| token: { | |||||
| colorPrimary: '#19be6e', | |||||
| }, components: { | |||||
| }, | |||||
| }} | |||||
| > | |||||
| <Flex vertical justify='space-between' style={{ width: '100%', background: '#ffffff', padding: '30px', borderRadius: 10, cursor: 'pointer' }}> | |||||
| <Space direction='vertical' size={10}> | |||||
| <Link to={{ pathname: `/talent/job/detail/?id=${item.id}` }} target="_blank" style={{ color: '#000000' }}> | |||||
| <Flex justify='space-between' align='center'> | |||||
| <Space> | |||||
| <h2>{item.name}</h2> | |||||
| {item.locations && item.locations.length > 0 ? <><EnvironmentOutlined style={{ color: 'gray' }} /><div style={{ color: 'gray' }}>{item.locations[0].name}</div> </> : ''} | |||||
| {item.urgent === 1 && <Tag icon={<FireOutlined />} bordered={false} color="#f50">急招</Tag>} | |||||
| </Space> | |||||
| <div style={{ color: '#19be6e', fontSize: 16 }}>{item.pay_range_text}</div> | |||||
| </Flex> | |||||
| </Link> | |||||
| <Space style={{ fontSize: 16, color: '#999' }}> | |||||
| {item.experience_text ? <>{item.experience_text}</> : ''} | |||||
| {item.school_degree_text ? <><Divider type='vertical' /> {item.school_degree_text} </> : ''} | |||||
| </Space> | |||||
| <Flex justify='space-between' align='center'> | |||||
| <Space style={{ fontSize: 16, color: '#999' }}> | |||||
| {item.holidays_text && item.experience_text != '无' ? <Tag>{item.holidays_text}</Tag> : ''} | |||||
| {item.profelevel_text && item.profelevel_text != '无' ? <Tag>{item.profelevel_text}</Tag> : ''} | |||||
| {item.shisu_text && item.shisu_text != '无' ? <Tag>{item.shisu_text}</Tag> : ''} | |||||
| <Tag>不限</Tag> | |||||
| </Space> | |||||
| <Space size={20}> | |||||
| <Link to={{ pathname: `/talent/job/detail/?id=${item.id}` }} target="_blank"> | |||||
| <Button type='primary'>投递该职位</Button> | |||||
| </Link> | |||||
| <Link to={{ pathname: `/talent/job/detail/?id=${item.id}` }} target="_blank"> | |||||
| <Button icon={<StarOutlined />} >收藏职位</Button> | |||||
| </Link> | |||||
| </Space> | |||||
| </Flex> | |||||
| </Space> | |||||
| <Divider /> | |||||
| <Space direction='vertical' size={10}> | |||||
| <Link to={{ pathname: `/talent/company/detail/?id=${item.company_id}` }} target="_blank" style={{ color: '#000000' }}> | |||||
| <Space> | |||||
| <h3>{item.full_name}</h3> | |||||
| </Space> | |||||
| </Link> | |||||
| <Flex justify='flex-start' align='center' style={{ fontSize: 14, color: '#999' }}> | |||||
| {item.nature_text ? <>{item.nature_text}</> : <>性质不限</>} | |||||
| {item.industry_text ? <><Divider type='vertical' /> {item.industry_text} </> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' /> {item.scale_text} </> : <><Divider type='vertical' />规模不限</>} | |||||
| </Flex> | |||||
| </Space> | |||||
| </Flex> | |||||
| </ConfigProvider> | |||||
| </> | |||||
| ); | |||||
| }; | |||||
| export default CommonJob |
| import { EllipsisOutlined, FireOutlined, EnvironmentOutlined, RightOutlined, StarOutlined } from '@ant-design/icons'; | import { EllipsisOutlined, FireOutlined, EnvironmentOutlined, RightOutlined, StarOutlined } from '@ant-design/icons'; | ||||
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { PostJobSearch } from '@/services/apis/post'; | import { PostJobSearch } from '@/services/apis/post'; | ||||
| import CommonJob from '@/components/Common/Job' | |||||
| import CommonJob from '@/components/Common/Job2' | |||||
| const CampusJob: React.FC = () => { | const CampusJob: React.FC = () => { | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [pageSize, setPageSize] = useState<number>(12) | const [pageSize, setPageSize] = useState<number>(12) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| PostJobSearch({ page: 1, pagesize: 12, campus: 1 }).then(res => { | |||||
| PostJobSearch({ page: 1, pagesize: 8, campus: 1 }).then(res => { | |||||
| setList(res.data.jobs) | setList(res.data.jobs) | ||||
| }) | }) | ||||
| }, []); | }, []); | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={24}> | |||||
| <Col span={12}> | |||||
| <CommonJob item={item}></CommonJob> | <CommonJob item={item}></CommonJob> | ||||
| </Col> | </Col> |
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [page, setPage] = useState<number>(1) | const [page, setPage] = useState<number>(1) | ||||
| const [pageSize, setPageSize] = useState<number>(9) | |||||
| const [pageSize, setPageSize] = useState<number>(12) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| GetAdvertscheduleList({ pagesize: 9, code: 'RMQYGGT' }).then(res => { | |||||
| GetAdvertscheduleList({ pagesize: 12, code: 'RMQYGGT' }).then(res => { | |||||
| setList(res.data.advertschedules) | setList(res.data.advertschedules) | ||||
| }) | }) | ||||
| }, []); | }, []); | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={8}> | |||||
| <Col span={6}> | |||||
| <Link to={{ pathname: `/talent/company/detail?id=${item.company_id}` }} target="_blank" style={{ width: '100%' }}> | <Link to={{ pathname: `/talent/company/detail?id=${item.company_id}` }} target="_blank" style={{ width: '100%' }}> | ||||
| <Space direction='vertical' size={10} align='center' style={{ width: '100%', paddingTop: 20, paddingBottom: 20, background: '#ffffff', borderRadius: 8 }}> | |||||
| <Image src={item.image_url ? `${Imageprefix}${item.image_url}` : '/images/logo.jpg'} preview={false} width={'200px'} height={'112px'} style={{ borderRadius: '8px' }}></Image> | |||||
| <Typography.Title level={5} style={{ width: '100%', padding: '0 10px' }} | |||||
| <Flex vertical align='center' justify='center' className='company-item'> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={100} height={100} style={{ borderRadius: '4px', objectFit: 'contain' }}></Image> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 16, textAlign: 'center', whiteSpace: 'nowrap', marginTop: 8, width: '100%' }} | |||||
| > | > | ||||
| {item.company_name} | {item.company_name} | ||||
| </Typography.Title> | |||||
| <Flex justify='flex-end' align='center' style={{ fontSize: 14, color: '#999' }}> | |||||
| {item.company_nature ? <>{item.company_nature}</> : <>性质不限</>} | |||||
| {item.industry_text ? <><Divider type='vertical' /> {item.industry_text} </> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.company_scale ? <><Divider type='vertical' /> {item.company_scale} </> : <><Divider type='vertical' />规模不限</>} | |||||
| </Flex> | |||||
| </Space> | |||||
| </Typography.Paragraph> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 12, color: '#999', textAlign: 'center', whiteSpace: 'nowrap', width: '100%' }} | |||||
| > | |||||
| {item.nature_text ? item.nature_text : '性质不限'} | |||||
| {item.industry_text ? <><Divider type='vertical' />{item.industry_text}</> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' />{item.scale_text}</> : <><Divider type='vertical' />规模不限</>} | |||||
| </Typography.Paragraph> | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col> | </Col> | ||||
| </> | </> | ||||
| )) | )) |
| import { useState, useEffect, useRef } from 'react'; | import { useState, useEffect, useRef } from 'react'; | ||||
| import { ProList, PageContainer } from '@ant-design/pro-components'; | import { ProList, PageContainer } from '@ant-design/pro-components'; | ||||
| import { ConfigProvider, Button, Flex, Input, Space, Image, Pagination, Row, Col, Divider, Tag, Card, Affix, Typography } from 'antd'; | import { ConfigProvider, Button, Flex, Input, Space, Image, Pagination, Row, Col, Divider, Tag, Card, Affix, Typography } from 'antd'; | ||||
| import { EllipsisOutlined, FireOutlined, LeftOutlined, RightOutlined, StarOutlined } from '@ant-design/icons'; | |||||
| import { EllipsisOutlined, FireOutlined, EnvironmentOutlined, RightOutlined, FieldTimeOutlined } from '@ant-design/icons'; | |||||
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { Imageprefix } from '@/constants'; | import { Imageprefix } from '@/constants'; | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [page, setPage] = useState<number>(1) | const [page, setPage] = useState<number>(1) | ||||
| const [pageSize, setPageSize] = useState<number>(6) | |||||
| const [pageSize, setPageSize] = useState<number>(8) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| GetRecruitmentList({ page: 1, pagesize: 6, sortby: 'desc' }).then(res => { | |||||
| GetRecruitmentList({ page: 1, pagesize: 8, sortby: 'desc' }).then(res => { | |||||
| setList(res.data.recruitments) | setList(res.data.recruitments) | ||||
| setTotal(res.data.total) | setTotal(res.data.total) | ||||
| }) | }) | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={8}> | |||||
| <Link to={{ pathname: `/talent/fair/detail?keyword=${item.title}` }} target="_blank" style={{ width: '100%' }}> | |||||
| <Space direction='vertical' size={10} align='center' style={{ width: '100%', background: '#ffffff', borderRadius: 8 }}> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/bg.jpg'} preview={false} width={'100%'} height={'210px'} style={{ borderRadius: '8px 8px 0 0' }}></Image> | |||||
| <Affix style={{ position: 'absolute', top: 10, right: 0 }}> | |||||
| <Tag color="#19be6e">{item.open_date}</Tag> | |||||
| </Affix> | |||||
| <Typography.Title level={5} style={{ width: '100%', padding: '0 10px' }} | |||||
| <Col span={6}> | |||||
| <Link to={{ pathname: `/talent/fair/detail?keyword=${item.title}` }} target="_blank" style={{ width: '100%' , color: '#000000'}}> | |||||
| <Flex vertical align='center' justify='center' style={{ background: '#fff', borderRadius: '4px' }}> | |||||
| <div style={{ | |||||
| width: '100%', | |||||
| position: 'relative', | |||||
| paddingTop: '56.25%', /* 16:9 的比例 */ | |||||
| overflow: 'hidden' | |||||
| }}> | |||||
| <img src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} style={{ | |||||
| position: 'absolute', | |||||
| top: 0, | |||||
| left: 0, | |||||
| width: '100%', | |||||
| height: '100%', | |||||
| borderRadius: '8px 8px 0 0' | |||||
| }} /> | |||||
| </div> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 2 }} | |||||
| style={{ fontSize: 16, fontWeight: 'bold', padding: '0 16px', marginTop: 8, minHeight: 50, width: '100%' }} | |||||
| > | > | ||||
| {item.title} | {item.title} | ||||
| </Typography.Title> | |||||
| </Space> | |||||
| </Typography.Paragraph> | |||||
| <Space size={4} style={{ | |||||
| padding: '0 16px', marginBottom: 16, width: '100%', color: 'gray' | |||||
| }}> | |||||
| <FieldTimeOutlined /> {item.open_date} {item.close_date ? <>至{item.close_date}</>: ''} | |||||
| </Space> | |||||
| <Space size={4} style={{ | |||||
| padding: '0 16px', marginBottom: 16, width: '100%',color: 'gray' | |||||
| }}> | |||||
| <EnvironmentOutlined /> {item.address} | |||||
| </Space> | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col> | </Col> | ||||
| </> | </> | ||||
| )) | )) | ||||
| } | } |
| .company-item { | |||||
| width: 100%; | |||||
| padding: 16px 16px 0; | |||||
| background-color: #ffffff; | |||||
| border-radius: 8px; | |||||
| cursor: pointer; | |||||
| } | |||||
| .company-item:nth-child(5n) { | |||||
| margin-right: 0px; | |||||
| } |
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { Imageprefix } from '@/constants'; | import { Imageprefix } from '@/constants'; | ||||
| import './index.less' | |||||
| import { PostCompanySearch } from '@/services/apis/company'; | import { PostCompanySearch } from '@/services/apis/company'; | ||||
| const HomeFamous: React.FC = () => { | const HomeFamous: React.FC = () => { | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [page, setPage] = useState<number>(1) | const [page, setPage] = useState<number>(1) | ||||
| const [pageSize, setPageSize] = useState<number>(9) | |||||
| const [pageSize, setPageSize] = useState<number>(16) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| PostCompanySearch({ | PostCompanySearch({ | ||||
| page: 1, | page: 1, | ||||
| pagesize: 9, | |||||
| pagesize: 16, | |||||
| sort: 'updated_at', | sort: 'updated_at', | ||||
| sortby: 'desc', | sortby: 'desc', | ||||
| famous: 1 | famous: 1 | ||||
| }} | }} | ||||
| > | > | ||||
| <Space direction='vertical' size={20} style={{ width: '100%' }}> | |||||
| <Space direction='vertical' size={10} style={{ width: '100%' }}> | |||||
| {/* <Flex justify='center' align='center'> | {/* <Flex justify='center' align='center'> | ||||
| <Typography.Title level={2}>知名企业</Typography.Title> | <Typography.Title level={2}>知名企业</Typography.Title> | ||||
| </Flex> */} | </Flex> */} | ||||
| <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>知名企业</Typography.Title></Divider> | <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>知名企业</Typography.Title></Divider> | ||||
| <Row gutter={[10, 10]}> | |||||
| <Row gutter={[16, 16]} > | |||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={8}> | |||||
| <Col span={6}> | |||||
| <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | ||||
| <Space direction='vertical' size={10} align='center' style={{ width: '100%', paddingTop: 20, paddingBottom: 20, background: '#ffffff', borderRadius: 8 }}> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={'200px'} height={'112px'} style={{ borderRadius: '8px' }}></Image> | |||||
| <Typography.Title level={5} style={{ width: '100%', padding: '0 10px' }} | |||||
| <Flex vertical align='center' justify='center' className='company-item'> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={100} height={100} style={{ borderRadius: '4px', objectFit: 'contain' }}></Image> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 16, textAlign: 'center', whiteSpace: 'nowrap', marginTop: 8, width: '100%' }} | |||||
| > | > | ||||
| {item.full_name} | {item.full_name} | ||||
| </Typography.Title> | |||||
| <Flex justify='flex-end' align='center' style={{ fontSize: 14, color: '#999' }}> | |||||
| {item.nature_text ? <>{item.nature_text}</> : <>性质不限</>} | |||||
| {item.industry_text ? <><Divider type='vertical' /> {item.industry_text} </> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' /> {item.scale_text} </> : <><Divider type='vertical' />规模不限</>} | |||||
| </Flex> | |||||
| </Space> | |||||
| </Typography.Paragraph> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 12, color: '#999', textAlign: 'center', whiteSpace: 'nowrap', width: '100%' }} | |||||
| > | |||||
| {item.nature_text ? item.nature_text : '性质不限'} | |||||
| {item.industry_text ? <><Divider type='vertical' />{item.industry_text}</> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' />{item.scale_text}</> : <><Divider type='vertical' />规模不限</>} | |||||
| </Typography.Paragraph> | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col> | </Col> | ||||
| </> | </> | ||||
| )) | )) | ||||
| } | } | ||||
| </Row> | </Row> | ||||
| <Flex justify='center' align='center'> | <Flex justify='center' align='center'> | ||||
| <Space> | <Space> | ||||
| <Link to={{ pathname: '/talent/search/company?famous=1' }}> | <Link to={{ pathname: '/talent/search/company?famous=1' }}> |
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { PostJobSearch } from '@/services/apis/post'; | import { PostJobSearch } from '@/services/apis/post'; | ||||
| import CommonJob from '@/components/Common/Job' | |||||
| import CommonJob from '@/components/Common/Job2' | |||||
| const HomeNewJob: React.FC = () => { | const HomeNewJob: React.FC = () => { | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [pageSize, setPageSize] = useState<number>(12) | const [pageSize, setPageSize] = useState<number>(12) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| PostJobSearch({ page: 1, pagesize: 6, high_pay: 1 }).then(res => { | |||||
| PostJobSearch({ page: 1, pagesize: 8, high_pay: 1 }).then(res => { | |||||
| setList(res.data.jobs) | setList(res.data.jobs) | ||||
| }) | }) | ||||
| }, []); | }, []); | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={24}> | |||||
| <Col span={12}> | |||||
| <CommonJob item={item}></CommonJob> | <CommonJob item={item}></CommonJob> | ||||
| </Col> | </Col> | ||||
| </> | </> |
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { PostJobSearch } from '@/services/apis/post'; | import { PostJobSearch } from '@/services/apis/post'; | ||||
| import CommonJob from '@/components/Common/Job' | |||||
| import CommonJob from '@/components/Common/Job2' | |||||
| const HomeNewJob: React.FC = () => { | const HomeNewJob: React.FC = () => { | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [page, setPage] = useState<number>(1) | const [page, setPage] = useState<number>(1) | ||||
| const [pageSize, setPageSize] = useState<number>(12) | |||||
| const [pageSize, setPageSize] = useState<number>(8) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| PostJobSearch({ page: 1, pagesize: 6 }).then(res => { | |||||
| PostJobSearch({ page: 1, pagesize: 8 }).then(res => { | |||||
| setList(res.data.jobs) | setList(res.data.jobs) | ||||
| }) | }) | ||||
| }, []); | }, []); | ||||
| {/* <Flex justify='center' align='center'> | {/* <Flex justify='center' align='center'> | ||||
| <Typography.Title level={2}>热门职位</Typography.Title> | <Typography.Title level={2}>热门职位</Typography.Title> | ||||
| </Flex> */} | </Flex> */} | ||||
| {/* <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>热门职位</Typography.Title></Divider> */} | |||||
| <Row gutter={[10, 10]}> | <Row gutter={[10, 10]}> | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={24}> | |||||
| <Col span={12}> | |||||
| <CommonJob item={item}></CommonJob> | <CommonJob item={item}></CommonJob> | ||||
| </Col> | </Col> | ||||
| </> | </> |
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [total, setTotal] = useState<number>(0) | const [total, setTotal] = useState<number>(0) | ||||
| const [page, setPage] = useState<number>(1) | const [page, setPage] = useState<number>(1) | ||||
| const [pageSize, setPageSize] = useState<number>(6) | |||||
| const [pageSize, setPageSize] = useState<number>(8) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| PostCompanySearch({ | PostCompanySearch({ | ||||
| page: 1, | page: 1, | ||||
| pagesize: 6, | |||||
| pagesize: 8, | |||||
| sort: 'updated_at', | sort: 'updated_at', | ||||
| sortby: 'desc', | sortby: 'desc', | ||||
| probation: 1 | probation: 1 | ||||
| <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>见习基地</Typography.Title></Divider> | <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>见习基地</Typography.Title></Divider> | ||||
| <Row gutter={[10, 10]}> | <Row gutter={[10, 10]}> | ||||
| { | |||||
| { | |||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={8}> | |||||
| <Col span={6}> | |||||
| <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | ||||
| <Space direction='vertical' size={10} align='center' style={{ width: '100%',paddingTop: 20, paddingBottom: 20, background: '#ffffff', borderRadius: 8 }}> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={'200px'} height={'112px'} style={{ borderRadius: '8px' }}></Image> | |||||
| <Typography.Title level={5} style={{ width: '100%', padding: '0 10px' }} | |||||
| <Flex vertical align='center' justify='center' className='company-item'> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={100} height={100} style={{ borderRadius: '4px', objectFit: 'contain' }}></Image> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 16, textAlign: 'center', whiteSpace: 'nowrap', marginTop: 8, width: '100%' }} | |||||
| > | > | ||||
| {item.full_name} | {item.full_name} | ||||
| </Typography.Title> | |||||
| {/* <Flex justify='flex-end' align='center' style={{ fontSize: 14, color: '#999' }}> | |||||
| {item.nature_text ? <>{item.nature_text}</> : <>性质不限</>} | |||||
| {item.industry_text ? <><Divider type='vertical' /> {item.industry_text} </> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' /> {item.scale_text} </> : <><Divider type='vertical' />规模不限</>} | |||||
| </Flex> */} | |||||
| </Space> | |||||
| </Typography.Paragraph> | |||||
| {/* <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 12, color: '#999', textAlign: 'center', whiteSpace: 'nowrap', width: '100%' }} | |||||
| > | |||||
| {item.nature_text ? item.nature_text : '性质不限'} | |||||
| {item.industry_text ? <><Divider type='vertical' />{item.industry_text}</> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' />{item.scale_text}</> : <><Divider type='vertical' />规模不限</>} | |||||
| </Typography.Paragraph> */} | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col> | </Col> |
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| import { PostJobSearch } from '@/services/apis/post'; | import { PostJobSearch } from '@/services/apis/post'; | ||||
| import CommonJob from '@/components/Common/Job' | |||||
| import CommonJob from '@/components/Common/Job2' | |||||
| const HomeNewJob: React.FC = () => { | const HomeNewJob: React.FC = () => { | ||||
| const [list, setList] = useState<object[]>([]) | const [list, setList] = useState<object[]>([]) | ||||
| const [pageSize, setPageSize] = useState<number>(12) | const [pageSize, setPageSize] = useState<number>(12) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| PostJobSearch({ page: 1, pagesize: 12, urgent: 1 }).then(res => { | |||||
| PostJobSearch({ page: 1, pagesize: 8, urgent: 1 }).then(res => { | |||||
| setList(res.data.jobs) | setList(res.data.jobs) | ||||
| }) | }) | ||||
| }, []); | }, []); | ||||
| { | { | ||||
| list.length > 0 && list.map((item: any, index: number) => ( | list.length > 0 && list.map((item: any, index: number) => ( | ||||
| <> | <> | ||||
| <Col span={24}> | |||||
| <Col span={12}> | |||||
| <CommonJob item={item}></CommonJob> | <CommonJob item={item}></CommonJob> | ||||
| </Col> | </Col> |
| fetchData(); | fetchData(); | ||||
| }, []); | }, []); | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (!isLoading) { | if (!isLoading) { | ||||
| dictModel.natureList.unshift({ id: 0, name: '不限', checked: true }); | dictModel.natureList.unshift({ id: 0, name: '不限', checked: true }); |
| import { useState, useEffect, useRef } from 'react'; | import { useState, useEffect, useRef } from 'react'; | ||||
| import { ProList, PageContainer } from '@ant-design/pro-components'; | import { ProList, PageContainer } from '@ant-design/pro-components'; | ||||
| import { ConfigProvider, Button, Flex, Input, Space, Image, Tooltip, Row, Col, Pagination, Tag, Card, Affix, Typography, Anchor } from 'antd'; | import { ConfigProvider, Button, Flex, Input, Space, Image, Tooltip, Row, Col, Pagination, Tag, Card, Affix, Typography, Anchor } from 'antd'; | ||||
| import { SearchOutlined, LikeOutlined, ArrowRightOutlined, StarOutlined } from '@ant-design/icons'; | |||||
| import { SearchOutlined, LikeOutlined, EnvironmentOutlined, FieldTimeOutlined } from '@ant-design/icons'; | |||||
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| <> | <> | ||||
| <Col span={6}> | <Col span={6}> | ||||
| <Link to={{ pathname: `/talent/fair/detail?keyword=${item.title}` }} target="_blank"> | <Link to={{ pathname: `/talent/fair/detail?keyword=${item.title}` }} target="_blank"> | ||||
| <Card | |||||
| size='small' | |||||
| bordered={false} | |||||
| cover={<> | |||||
| <Typography.Title level={4} style={{ background: '#edfff3', minHeight: 132 }}> | |||||
| <Affix style={{ position: 'absolute', top: 0, right: 0 }}> | |||||
| <Tag color="#19be6e">{item.open_date}</Tag> | |||||
| </Affix> | |||||
| <Tooltip title={item.title} placement="bottom"> | |||||
| <div style={{ | |||||
| display: '-webkit-box', | |||||
| WebkitBoxOrient: 'vertical', | |||||
| WebkitLineClamp: 3, | |||||
| overflow: 'hidden', | |||||
| textOverflow: 'ellipsis', | |||||
| padding: '36px 12px 0' | |||||
| }}>{item.title}</div> | |||||
| </Tooltip> | |||||
| </Typography.Title> | |||||
| </>} | |||||
| styles={{ | |||||
| header: { | |||||
| borderBottom: 'none' | |||||
| }, | |||||
| title: { | |||||
| fontSize: '14px' | |||||
| }, | |||||
| <Flex vertical align='center' justify='center' style={{ background: '#fff', borderRadius: '4px' }}> | |||||
| <div style={{ | |||||
| width: '100%', | |||||
| position: 'relative', | |||||
| paddingTop: '56.25%', /* 16:9 的比例 */ | |||||
| overflow: 'hidden' | |||||
| }}> | }}> | ||||
| <Card.Meta title={<>参与企业数: {item.join_count > 0 ? item.join_count : 0}</>} description={<>参与职位数:{item.job_count}</>} /> | |||||
| </Card> | |||||
| <img src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} style={{ | |||||
| position: 'absolute', | |||||
| top: 0, | |||||
| left: 0, | |||||
| width: '100%', | |||||
| height: '100%', | |||||
| borderRadius: '8px 8px 0 0' | |||||
| }} /> | |||||
| </div> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 2 }} | |||||
| style={{ fontSize: 16, fontWeight: 'bold', padding: '0 16px', marginTop: 8, minHeight: 50, width: '100%' }} | |||||
| > | |||||
| {item.title} | |||||
| </Typography.Paragraph> | |||||
| <Space size={4} style={{ | |||||
| padding: '0 16px', marginBottom: 16, width: '100%', color: 'gray' | |||||
| }}> | |||||
| <FieldTimeOutlined /> {item.open_date} {item.close_date ? <>至{item.close_date}</> : ''} | |||||
| </Space> | |||||
| <Space size={4} style={{ | |||||
| padding: '0 16px', marginBottom: 16, width: '100%', color: 'gray' | |||||
| }}> | |||||
| <EnvironmentOutlined /> {item.address} | |||||
| </Space> | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col > | </Col > |
| import { useState, useEffect, useRef } from 'react'; | import { useState, useEffect, useRef } from 'react'; | ||||
| import { ProList, PageContainer } from '@ant-design/pro-components'; | import { ProList, PageContainer } from '@ant-design/pro-components'; | ||||
| import { ConfigProvider, Button, Flex, Input, Space, Image, Select, Row, Col, Carousel, Card, List, Tag, Typography, Tabs, Segmented, Anchor, Modal } from 'antd'; | |||||
| import { ConfigProvider, Button, Flex, Input, Space, Image, Select, Row, Col, Carousel, Card, List, Tag, Typography, Divider, Segmented, Anchor, Modal } from 'antd'; | |||||
| import { SearchOutlined, EllipsisOutlined, ArrowRightOutlined, EnvironmentOutlined, CaretUpOutlined, RightOutlined } from '@ant-design/icons'; | import { SearchOutlined, EllipsisOutlined, ArrowRightOutlined, EnvironmentOutlined, CaretUpOutlined, RightOutlined } from '@ant-design/icons'; | ||||
| import { useModel, connect, history, Link } from 'umi'; | import { useModel, connect, history, Link } from 'umi'; | ||||
| setLoginHeight(value) | setLoginHeight(value) | ||||
| } | } | ||||
| </PageContainer> | </PageContainer> | ||||
| {/* 未登录的登录页 */} | {/* 未登录的登录页 */} | ||||
| <Flex vertical justify='center' align='center' style={{ width: '100%', marginBottom: 40, position: 'relative' }}> | |||||
| <Flex vertical justify='center' align='center' style={{ background: '#ffffff', padding: '40px 314px', width: '100%' }}> | |||||
| <Flex vertical justify='center' align='center' style={{ width: '100%', marginBottom: 40, position: 'relative' }}> | |||||
| <Flex vertical justify='center' align='center' style={{ background: '#ffffff', padding: '0 314px 40px', width: '100%' }}> | |||||
| <Flex justify='space-bewteen' style={{ width: '100%' }}> | <Flex justify='space-bewteen' style={{ width: '100%' }}> | ||||
| <Row gutter={[16, 16]}> | <Row gutter={[16, 16]}> | ||||
| <Col span={16}> | <Col span={16}> | ||||
| </Flex> | </Flex> | ||||
| </div> */} | </div> */} | ||||
| </Flex> | </Flex> | ||||
| <Space direction='vertical' size={30} style={{ minHeight: 800 }}> | |||||
| <Flex justify='center' align='center' id='fomaus' style={{ padding: '40px 314px', width: '100%' }}> | |||||
| <HomeFamous></HomeFamous> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='company' style={{ padding: '40px 314px', width: '100%' }}> | |||||
| <HomeCompany></HomeCompany> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' style={{ padding: '40px 314px', width: '100%' }} id='newjob'> | |||||
| <Flex justify='space-between' align='center' style={{ width: '100%' }}> | |||||
| <Space direction='vertical' size='small' style={{ width: '100%' }} > | |||||
| <Segmented | |||||
| size='large' | |||||
| block | |||||
| value={positionType} | |||||
| options={['热门职位', '急招职位', '高薪职位']} | |||||
| onChange={(value) => { | |||||
| setPositionType(value) | |||||
| }} | |||||
| /> | |||||
| <div style={{ paddingTop: 20 }}> | |||||
| {positionType == '热门职位' && <><HomeNewJob></HomeNewJob></>} | |||||
| {positionType == '急招职位' && <><HomeUrgentJob></HomeUrgentJob></>} | |||||
| {positionType == '高薪职位' && <><HomeHighJob></HomeHighJob></>} | |||||
| </div> | |||||
| </Space> | |||||
| </Flex> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='campusjob' style={{ padding: '40px 314px', width: '100%' }}> | |||||
| <HomeCampusJob></HomeCampusJob> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='fair' style={{ padding: '40px 314px', width: '100%' }}> | |||||
| <TalentHomeFair></TalentHomeFair> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='probation' style={{ padding: '40px 314px', width: '100%' }}> | |||||
| <HomeProbation></HomeProbation> | |||||
| </Flex> | |||||
| </Space> | |||||
| <PageContainer | <PageContainer | ||||
| header={{ title: ' ' }} | |||||
| header={{ title: '', }} | |||||
| style={{ paddingTop: 0 }} | |||||
| > | > | ||||
| <Space direction='vertical' size={30} style={{ minHeight: 800 }}> | |||||
| <Flex justify='center' align='center' id='fomaus' style={{ width: '100%' }}> | |||||
| <HomeFamous></HomeFamous> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='company' style={{ width: '100%' }}> | |||||
| <HomeCompany></HomeCompany> | |||||
| </Flex> | |||||
| <Divider orientation="left" orientationMargin="0"><Typography.Title level={2}>职位推荐</Typography.Title></Divider> | |||||
| <Flex justify='center' align='center' style={{ width: '100%' }} id='newjob'> | |||||
| <Flex justify='space-between' align='center' style={{ width: '100%' }}> | |||||
| <Space direction='vertical' size='small' style={{ width: '100%' }} > | |||||
| <Segmented | |||||
| size='large' | |||||
| block | |||||
| value={positionType} | |||||
| options={['热门职位', '急招职位', '高薪职位']} | |||||
| onChange={(value) => { | |||||
| setPositionType(value) | |||||
| }} | |||||
| /> | |||||
| <div style={{ paddingTop: 20 }}> | |||||
| {positionType == '热门职位' && <><HomeNewJob></HomeNewJob></>} | |||||
| {positionType == '急招职位' && <><HomeUrgentJob></HomeUrgentJob></>} | |||||
| {positionType == '高薪职位' && <><HomeHighJob></HomeHighJob></>} | |||||
| </div> | |||||
| </Space> | |||||
| </Flex> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='campusjob' style={{ width: '100%' }}> | |||||
| <HomeCampusJob></HomeCampusJob> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='fair' style={{ width: '100%' }}> | |||||
| <TalentHomeFair></TalentHomeFair> | |||||
| </Flex> | |||||
| <Flex justify='center' align='center' id='probation' style={{ width: '100%' }}> | |||||
| <HomeProbation></HomeProbation> | |||||
| </Flex> | |||||
| </Space> | |||||
| {/* <Space direction='vertical' size={60} style={{ marginTop: 40 }}> | {/* <Space direction='vertical' size={60} style={{ marginTop: 40 }}> | ||||
| <div style={{ position: 'relative', width: '100%', height: 480, borderRadius: 8, background: '#00574B', zIndex: '99', }}> | <div style={{ position: 'relative', width: '100%', height: 480, borderRadius: 8, background: '#00574B', zIndex: '99', }}> | ||||
| <div style={{ position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, clipPath: 'circle(50% at right bottom)', backgroundImage: `url(${require('../../../../public/images/kcy.png')})`, backgroundSize: '100% 480px' }}> | <div style={{ position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, clipPath: 'circle(50% at right bottom)', backgroundImage: `url(${require('../../../../public/images/kcy.png')})`, backgroundSize: '100% 480px' }}> |
| const getSearchParams = async (value) => { | const getSearchParams = async (value) => { | ||||
| setPage(value.page) | setPage(value.page) | ||||
| setPageSize(value.pagesize) | setPageSize(value.pagesize) | ||||
| let res = await PostCompanySearch(value ? value : { | let res = await PostCompanySearch(value ? value : { | ||||
| page: page, | page: page, | ||||
| <Space direction='vertical' size={30} style={{ minHeight: '800px' }}> | <Space direction='vertical' size={30} style={{ minHeight: '800px' }}> | ||||
| <SearchFilter getSearchParams={getSearchParams} | <SearchFilter getSearchParams={getSearchParams} | ||||
| famous={searchParams.get('famous') ? searchParams.get('famous') : 0} | famous={searchParams.get('famous') ? searchParams.get('famous') : 0} | ||||
| probation={searchParams.get('probation') ? searchParams.get('probation') : 0} | probation={searchParams.get('probation') ? searchParams.get('probation') : 0} | ||||
| page={page} | page={page} | ||||
| <> | <> | ||||
| <Col span={8}> | <Col span={8}> | ||||
| <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | <Link to={{ pathname: `/talent/company/detail?id=${item.id}` }} target="_blank" style={{ width: '100%' }}> | ||||
| <Space direction='vertical' size={10} align='center' style={{ width: '100%', paddingTop: 20, paddingBottom: 20, background: '#ffffff', borderRadius: 8 }}> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={'140px'} height={'78px'} style={{ borderRadius: '8px' }}></Image> | |||||
| <Typography.Title level={5} style={{ width: '100%', padding: '0 10px' }} | |||||
| <Flex vertical align='center' justify='center' className='company-item'> | |||||
| <Image src={item.photo ? `${Imageprefix}${item.photo}` : '/images/logo.jpg'} preview={false} width={100} height={100} style={{ borderRadius: '4px', objectFit: 'contain' }}></Image> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 16, textAlign: 'center', whiteSpace: 'nowrap', marginTop: 8, width: '100%' }} | |||||
| > | > | ||||
| {item.full_name} | {item.full_name} | ||||
| </Typography.Title> | |||||
| <Flex justify='flex-end' align='center' style={{ fontSize: 14, color: '#999' }}> | |||||
| {item.company_nature ? <>{item.company_nature}</> : <>性质不限</>} | |||||
| {item.industry_text ? <><Divider type='vertical' /> {item.industry_text} </> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.company_scale ? <><Divider type='vertical' /> {item.company_scale} </> : <><Divider type='vertical' />规模不限</>} | |||||
| </Flex> | |||||
| </Space> | |||||
| </Typography.Paragraph> | |||||
| <Typography.Paragraph | |||||
| ellipsis={{ rows: 1 }} | |||||
| style={{ fontSize: 12, color: '#999', textAlign: 'center', whiteSpace: 'nowrap', width: '100%' }} | |||||
| > | |||||
| {item.nature_text ? item.nature_text : '性质不限'} | |||||
| {item.industry_text ? <><Divider type='vertical' />{item.industry_text}</> : <><Divider type='vertical' />行业不限</>} | |||||
| {item.scale_text ? <><Divider type='vertical' />{item.scale_text}</> : <><Divider type='vertical' />规模不限</>} | |||||
| </Typography.Paragraph> | |||||
| </Flex > | |||||
| </Link> | </Link> | ||||
| </Col> | </Col> |