@@ -8,6 +8,6 @@ | |||
</head> | |||
<body> | |||
<div id="root"></div> | |||
<script src="/umi.9a7953c1.js"></script> | |||
<script src="/umi.9db507e4.js"></script> | |||
</body> | |||
</html> |
@@ -1 +0,0 @@ | |||
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[787],{45073:function(O,_,e){var s=e(75891),o=e(21532),a=e(32983),r=e(85893),d=function(i){var m=i.description;return(0,r.jsx)(r.Fragment,{children:(0,r.jsx)(o.ZP,{theme:{token:{colorPrimary:"#19be6e"},components:{}},children:(0,r.jsx)(a.Z,{description:m})})})};_.Z=(0,s.connect)(function(l){var i=l.dictModel;return{dictModel:i}})(d)},17983:function(O,_,e){e.r(_);var s=e(5574),o=e.n(s),a=e(67294),r=e(21532),d=e(42075),l=e(25593),i=e(96074),m=e(83622),M=e(68872),E=e(17788),C=e(75891),g=e(86492),h=e.n(g),D=e(33011),B=e(96990),x=e(45073),t=e(85893),A=function(){var R=(0,C.useSearchParams)(),y=o()(R,1),T=y[0],j=(0,a.useState)(null),f=o()(j,2),n=f[0],I=f[1],L=(0,a.useState)(!1),v=o()(L,2),p=v[0],P=v[1];return(0,a.useEffect)(function(){(0,D.fc)({keyword:T.get("keyword")}).then(function(c){I(c.data.recruitments&&c.data.recruitments.length>0&&c.data.recruitments[0])})},[]),(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)(r.ZP,{theme:{token:{colorPrimary:"#19be6e"},components:{Button:{colorText:"#19be6e"}}},children:[n&&(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)(d.Z,{direction:"vertical",size:20,style:{width:"100%",minHeight:"800px",backgroundColor:"#ffffff",padding:20,borderRadius:8},children:[(0,t.jsx)(l.Z.Title,{level:3,style:{textAlign:"center"},children:n.title}),(0,t.jsxs)("div",{style:{textAlign:"center",color:"gray"},children:[" \u5F00\u653E\u65F6\u95F4\uFF1A ",n.open_date]}),(0,t.jsx)(i.Z,{}),(0,t.jsx)("div",{dangerouslySetInnerHTML:{__html:h().decode(n.content)}}),n&&n.companys&&n.companys.length>0&&(0,t.jsx)(t.Fragment,{children:(0,t.jsx)(l.Z.Title,{level:2,style:{textAlign:"center"},children:"\u53C2\u4E0E\u4F01\u4E1A"})}),n&&n.companys&&n.companys.length>0&&n.companys.map(function(c,u){return(0,t.jsx)(t.Fragment,{})}),(0,t.jsx)(m.ZP,{type:"primary",onClick:function(){localStorage.getItem("role")&&localStorage.getItem("role")=="personal"&&M.ZP.warning("\u60A8\u5F53\u524D\u72B6\u6001\u4E0D\u662F\u4F01\u4E1A\uFF0C\u65E0\u6CD5\u70B9\u51FB"),localStorage.getItem("token")?E.Z.confirm({title:"\u53C2\u52A0\u62DB\u8058\u4F1A",content:"\u662F\u5426\u8981\u53C2\u52A0\u6B64\u62DB\u8058\u4F1A",onOk:function(){(0,D.Bt)({recruitment_id:n.id,company_id:Number(localStorage.getItem("companyid")),status:1}).then(function(W){M.ZP.success("\u53C2\u52A0\u62DB\u8058\u4F1A\u6210\u529F,\u5F85\u5BA1\u6838\u7ED3\u679C")})},onCancel:function(){console.log("Cancel")},okText:"\u53C2\u52A0",cancelText:"\u53D6\u6D88",centered:!0}):E.Z.confirm({title:"\u8BF7\u5148\u767B\u5F55",content:"\u60A8\u8FD8\u672A\u767B\u5F55\uFF0C\u8BF7\u5148\u767B\u5F55",onOk:function(){P(!0)},onCancel:function(){console.log("Cancel")},okText:"\u767B\u5F55",cancelText:"\u53D6\u6D88",centered:!0})},children:"\u4F01\u4E1A\u53C2\u52A0\u6B64\u62DB\u8058\u4F1A\uFF0C\u70B9\u51FB\u6B64\u6309\u94AE"})]})}),!n&&(0,t.jsx)(x.Z,{description:"\u6682\u65E0\u6570\u636E"}),(0,t.jsx)(E.Z,{open:p,centered:!0,footer:null,onCancel:function(){return P(!1)},destroyOnClose:!0,maskClosable:!1,style:{minWidth:540},children:(0,t.jsx)(B.Z,{loginChangeStatus:function(u){console.log(u),P(u)}})})]})})};_.default=A},33011:function(O,_,e){e.d(_,{fc:function(){return r},Bt:function(){return l}});var s=e(75334),o=e(55375),a={RecruitmentList:o.xw+"/recruitment/list",RecruitmentBookcompany:o.xw+"/recruitmentBook/company",RecruitmentBookAdd:o.xw+"/recruitmentbook/add"},r=(0,s.y)(a.RecruitmentList),d=(0,s.y)(a.RecruitmentBookcompany),l=(0,s.L)(a.RecruitmentBookAdd)}}]); |
@@ -42,7 +42,7 @@ const HomeFamous: React.FC = () => { | |||
}} | |||
> | |||
<Space direction='vertical' size={10} style={{ width: '100%' }}> | |||
<Space direction='vertical' size={20} style={{ width: '100%' }}> | |||
{/* <Flex justify='center' align='center'> | |||
<Typography.Title level={2}>知名企业</Typography.Title> | |||
</Flex> */} |
@@ -1,7 +1,7 @@ | |||
import { useState, useEffect, useRef } from 'react'; | |||
import { ProList, PageContainer } from '@ant-design/pro-components'; | |||
import { ConfigProvider, Button, Flex, Input, Space, Image, Tooltip, Row, Col, Pagination, Tag, Card, Affix, Typography, Descriptions } from 'antd'; | |||
import { SearchOutlined, LikeOutlined, ArrowRightOutlined, StarOutlined } from '@ant-design/icons'; | |||
import { SearchOutlined, LikeOutlined, FieldTimeOutlined, EnvironmentOutlined } from '@ant-design/icons'; | |||
import { useModel, connect, history, Link } from 'umi'; | |||
import { Imageprefix } from '@/constants'; | |||
@@ -48,25 +48,49 @@ const HomePage: React.FC = () => { | |||
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' }} | |||
<Link to={{ pathname: `/talent/fair/detail?id=${item.id}` }} target="_blank"> | |||
<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} | |||
</Typography.Title> | |||
<Descriptions style={{ width: '100%', padding: '0 10px', marginBottom: 20 }}> | |||
<Descriptions.Item span={24} label="招聘会开放时间"> | |||
<Tag>{item.open_date}</Tag> | |||
</Descriptions.Item> | |||
<Descriptions.Item span={24} label="审核结果"> | |||
<Tag>{item.status_text}</Tag> | |||
</Descriptions.Item> | |||
</Descriptions> | |||
</Space> | |||
</Typography.Paragraph> | |||
<Typography.Paragraph | |||
ellipsis={{ rows: 1 }} | |||
style={{ fontSize: 12, color: 'gray', padding: '0 16px', whiteSpace: 'nowrap', width: '100%' }} | |||
> | |||
<FieldTimeOutlined /> {item.open_date} {item.close_date ? <>至{item.close_date}</> : ''} | |||
</Typography.Paragraph> | |||
<Typography.Paragraph | |||
ellipsis={{ rows: 1 }} | |||
style={{ fontSize: 12, color: 'gray', padding: '0 16px', whiteSpace: 'nowrap', width: '100%' }} | |||
> | |||
<EnvironmentOutlined /> {item.address} | |||
</Typography.Paragraph> | |||
<Typography.Paragraph | |||
ellipsis={{ rows: 1 }} | |||
style={{ fontSize: 12, color: 'gray', padding: '0 16px', whiteSpace: 'nowrap', width: '100%' }} | |||
> | |||
审核结果: <Tag style={{ fontSize: 12 }}>{item.status_text}</Tag> | |||
</Typography.Paragraph> | |||
</Flex > | |||
</Link> | |||
</Col > | |||
</> |
@@ -1,11 +1,11 @@ | |||
import { useState, useEffect, useRef } from 'react'; | |||
import { ProList, PageContainer } from '@ant-design/pro-components'; | |||
import { ConfigProvider, Button, Flex, Input, Space, Image, Row, Col, Modal, Tag, Card, Avatar, Typography, Anchor, List, Result, Divider, Statistic, message } from 'antd'; | |||
import { PhoneOutlined, MailOutlined, EnvironmentOutlined, ArrowRightOutlined, FireOutlined, StarOutlined, PayCircleOutlined } from '@ant-design/icons'; | |||
import { ConfigProvider, Button, Flex, Input, Space, Image, Row, Col, Modal, Tag, Card, Avatar, Typography, Tabs, Result, Divider, Statistic, message } from 'antd'; | |||
import { PhoneOutlined, MailOutlined, EnvironmentOutlined, FieldTimeOutlined, FireOutlined, StarOutlined, PayCircleOutlined } from '@ant-design/icons'; | |||
import { useSearchParams, connect, history, Link } from 'umi'; | |||
import he from 'he'; | |||
import { GetRecruitmentList, PostRecruitmentBookAdd } from '@/services/apis/fair'; | |||
import { GetRecruitmentDetail, PostRecruitmentBookAdd } from '@/services/apis/fair'; | |||
import LoginIndex from '@/components/Login/Index/index' | |||
import EmptyResult from '@/components/Common/EmptyResult'; | |||
@@ -19,8 +19,8 @@ const HomePage: React.FC = () => { | |||
useEffect(() => { | |||
GetRecruitmentList({ keyword: searchParams.get('keyword') }).then(res => { | |||
setDetail(res.data.recruitments && res.data.recruitments.length > 0 && res.data.recruitments[0]) | |||
GetRecruitmentDetail({ id: searchParams.get('id') }).then(res => { | |||
setDetail(res.data) | |||
}) | |||
}, []); | |||
@@ -42,67 +42,134 @@ const HomePage: React.FC = () => { | |||
{ | |||
detail && <> | |||
<Space direction='vertical' size={20} style={{ width: '100%', minHeight: '800px', backgroundColor: '#ffffff', padding: 20, borderRadius: 8 }}> | |||
<Typography.Title level={3} style={{ textAlign: 'center' }}>{detail.title}</Typography.Title> | |||
<div style={{ textAlign: 'center', color: 'gray' }}> 开放时间: {detail.open_date}</div> | |||
<Divider /> | |||
<div dangerouslySetInnerHTML={{ __html: he.decode(detail.content) }} /> | |||
{ | |||
detail && detail.companys && detail.companys.length > 0 && <> | |||
<Typography.Title level={2} style={{ textAlign: 'center' }}>参与企业</Typography.Title> | |||
</> | |||
} | |||
{ | |||
detail && detail.companys && detail.companys.length > 0 && detail.companys.map((item, index) => (<> | |||
</>)) | |||
} | |||
<Button type='primary' onClick={() => { | |||
if (localStorage.getItem('role') && localStorage.getItem('role') == 'personal') { | |||
message.warning('您当前状态不是企业,无法点击') | |||
} | |||
if (!localStorage.getItem('token')) { | |||
Modal.confirm({ | |||
title: '请先登录', | |||
content: '您还未登录,请先登录', | |||
onOk() { | |||
setOpenPreview(true) | |||
}, | |||
onCancel() { | |||
console.log('Cancel'); | |||
}, | |||
okText: '登录', | |||
cancelText: '取消', | |||
centered: true | |||
}); | |||
} else { | |||
Modal.confirm({ | |||
title: '参加招聘会', | |||
content: '是否要参加此招聘会', | |||
onOk() { | |||
PostRecruitmentBookAdd({ | |||
recruitment_id: detail.id, | |||
company_id: Number(localStorage.getItem('companyid')), | |||
status: 1 | |||
}).then(res => { | |||
message.success('参加招聘会成功,待审核结果') | |||
}) | |||
}, | |||
onCancel() { | |||
console.log('Cancel'); | |||
}, | |||
okText: '参加', | |||
cancelText: '取消', | |||
centered: true | |||
}); | |||
} | |||
}}>企业参加此招聘会,点击此按钮</Button> | |||
<Space direction='vertical' size={20} style={{ width: '100%', minHeight: '1000px', padding: 20, borderRadius: 8 }}> | |||
<Flex justify='space-between' align='center' style={{ backgroundColor: '#ffffff', padding: 20, borderRadius: 8 }}> | |||
<Space size={20} direction='vertical'> | |||
<div style={{ fontSize: '24px' }}>{detail.title}</div> | |||
<div><Tag color='#19be6e'>进行中</Tag> <FieldTimeOutlined /> {detail.open_date} {detail.close_date ? <>至{detail.close_date}</> : ''}</div> | |||
<div><EnvironmentOutlined /> {detail.address}</div> | |||
</Space> | |||
<Space size={10} direction='vertical'> | |||
<Button type='primary' onClick={() => { | |||
if (localStorage.getItem('role') && localStorage.getItem('role') == 'personal') { | |||
message.warning('您当前状态不是企业,无法点击') | |||
} | |||
if (!localStorage.getItem('token')) { | |||
Modal.confirm({ | |||
title: '请先登录', | |||
content: '您还未登录,请先登录', | |||
onOk() { | |||
setOpenPreview(true) | |||
}, | |||
onCancel() { | |||
console.log('Cancel'); | |||
}, | |||
okText: '登录', | |||
cancelText: '取消', | |||
centered: true | |||
}); | |||
} else { | |||
Modal.confirm({ | |||
title: '参加招聘会', | |||
content: '是否要参加此招聘会', | |||
onOk() { | |||
PostRecruitmentBookAdd({ | |||
recruitment_id: detail.id, | |||
company_id: Number(localStorage.getItem('companyid')), | |||
status: 1 | |||
}).then(res => { | |||
message.success('参加招聘会成功,待审核结果') | |||
}) | |||
}, | |||
onCancel() { | |||
console.log('Cancel'); | |||
}, | |||
okText: '参加', | |||
cancelText: '取消', | |||
centered: true | |||
}); | |||
} | |||
}}>企业报名参会,点击此处</Button> | |||
</Space> | |||
</Flex> | |||
<div style={{ borderRadius: 8, minHeight: '500px' }}> | |||
<Tabs items={[ | |||
{ | |||
label: '招聘会介绍', | |||
key: '1', | |||
children: <> | |||
<div style={{ borderRadius: 8, backgroundColor: '#ffffff', padding: 20, minHeight: '500px' }}> | |||
<div dangerouslySetInnerHTML={{ __html: he.decode(detail.content) }} /> | |||
</div> | |||
</>, | |||
}, | |||
{ | |||
label: '参与企业', | |||
key: '2', | |||
children: <> | |||
<Row gutter={[16, 16]}> | |||
{ | |||
detail && detail.companys && detail.companys.length > 0 && detail.companys.map((item, index) => (<> | |||
<Col span={8}> | |||
{ | |||
item.company_name && (<> | |||
<Space size={0} direction='vertical' style={{ width: '100%', padding: 20, borderRadius: 8, backgroundColor: '#ffffff' }}> | |||
<Space size={10} direction='vertical'> | |||
<div style={{ fontSize: '24px', fontWeight: 'bold' }}> | |||
{item.company_name} | |||
</div> | |||
</Space> | |||
<Divider></Divider> | |||
<Space size={10} direction='vertical' style={{ width: '100%', minHeight: 126 }}> | |||
{ | |||
item.jobs && item.jobs.length > 0 && item.jobs.map((childItem, childIndex) => (<> | |||
<Link to={{ pathname: `/talent/job/detail/?id=${childItem.id}` }} target="_blank" style={{ color: '#000000' }}> | |||
<Flex justify='space-between' align='center'> | |||
<div>{childItem.job_name}</div> | |||
<Button size='small'>投递该职位</Button> | |||
</Flex> | |||
</Link> | |||
</>)) | |||
} | |||
</Space> | |||
<Tag>共{item.jobs && item.jobs.length ? item.jobs.length : 0}个职位</Tag> | |||
</Space> | |||
</>) | |||
} | |||
</Col> | |||
</>)) | |||
} | |||
</Row> | |||
</>, | |||
}, | |||
{ | |||
label: '参会指南', | |||
key: '3', | |||
children: <> | |||
<div style={{ borderRadius: 8, backgroundColor: '#ffffff', padding: 20, minHeight: '500px' }}> | |||
暂无参会指南 | |||
</div> | |||
</>, | |||
}, | |||
]}> | |||
</Tabs> | |||
</div> | |||
</Space> | |||
</> | |||
} | |||
{ | |||
!detail && <EmptyResult description={'暂无数据'}></EmptyResult> | |||
!detail && <EmptyResult description={'暂无数据'}></EmptyResult> | |||
} | |||
{/* 登录 */} | |||
<Modal | |||
@@ -117,7 +184,7 @@ const HomePage: React.FC = () => { | |||
<LoginIndex loginChangeStatus={(isLogin: boolean) => { | |||
console.log(isLogin) | |||
setOpenPreview(isLogin) | |||
}}></LoginIndex> | |||
}} type='company'></LoginIndex> | |||
</Modal> | |||
</ConfigProvider > | |||
</> |
@@ -3,7 +3,7 @@ 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 { SearchOutlined, LikeOutlined, EnvironmentOutlined, FieldTimeOutlined } from '@ant-design/icons'; | |||
import { useModel, connect, history, Link } from 'umi'; | |||
import { Imageprefix } from '@/constants'; | |||
import { GetRecruitmentList } from '@/services/apis/fair'; | |||
@@ -41,7 +41,7 @@ const HomePage: React.FC = () => { | |||
> | |||
<PageContainer | |||
header={{ title: '', }} | |||
style={{ minHeight: 800 }} | |||
style={{ minHeight: 1000 }} | |||
> | |||
<Flex justify='center' align='center' style={{ marginBottom: '40px' }}> | |||
<Input | |||
@@ -65,7 +65,7 @@ const HomePage: React.FC = () => { | |||
list.length > 0 && list.map((item: any, index: number) => ( | |||
<> | |||
<Col span={6}> | |||
<Link to={{ pathname: `/talent/fair/detail?keyword=${item.title}` }} target="_blank"> | |||
<Link to={{ pathname: `/talent/fair/detail?id=${item.id}` }} target="_blank"> | |||
<Flex vertical align='center' justify='center' style={{ background: '#fff', borderRadius: '4px' }}> | |||
<div style={{ | |||
width: '100%', | |||
@@ -87,18 +87,19 @@ const HomePage: React.FC = () => { | |||
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' | |||
}}> | |||
<Typography.Paragraph | |||
ellipsis={{ rows: 1 }} | |||
style={{ fontSize: 12, color: 'gray', padding: '0 16px', whiteSpace: 'nowrap', width: '100%' }} | |||
> | |||
<FieldTimeOutlined /> {item.open_date} {item.close_date ? <>至{item.close_date}</> : ''} | |||
</Space> | |||
<Space size={4} style={{ | |||
padding: '0 16px', marginBottom: 16, width: '100%', color: 'gray' | |||
}}> | |||
</Typography.Paragraph> | |||
<Typography.Paragraph | |||
ellipsis={{ rows: 1 }} | |||
style={{ fontSize: 12, color: 'gray', padding: '0 16px', whiteSpace: 'nowrap', width: '100%' }} | |||
> | |||
<EnvironmentOutlined /> {item.address} | |||
</Space> | |||
</Typography.Paragraph> | |||
</Flex > | |||
</Link> | |||
@@ -70,7 +70,8 @@ const HomePage: React.FC = ({ dispatch, dictModel }: any) => { | |||
}, | |||
Segmented: { | |||
trackBg: '#f0f0f0', | |||
itemSelectedColor: '#19be6e' | |||
itemSelectedColor: '#19be6e', | |||
trackPadding: -16 | |||
} | |||
} | |||
}} | |||
@@ -191,7 +192,7 @@ const HomePage: React.FC = ({ dispatch, dictModel }: any) => { | |||
header={{ title: '', }} | |||
style={{ paddingTop: 0 }} | |||
> | |||
<Space direction='vertical' size={30} style={{ minHeight: 800 }}> | |||
<Space direction='vertical' size={0} style={{ minHeight: 800 }}> | |||
<Flex justify='center' align='center' id='fomaus' style={{ width: '100%' }}> | |||
<HomeFamous></HomeFamous> | |||
</Flex> |
@@ -4,4 +4,6 @@ import {FairUrl} from '../url/fair'; | |||
export const GetRecruitmentList = GetModel(FairUrl.RecruitmentList); | |||
export const GetRecruitmentBookcompany = GetModel(FairUrl.RecruitmentBookcompany); | |||
export const PostRecruitmentBookAdd = PostModel(FairUrl.RecruitmentBookAdd); | |||
export const GetRecruitmentDetail = GetModel(FairUrl.RecruitmentDetail); | |||
@@ -195,6 +195,6 @@ declare namespace Url { | |||
RecruitmentList?: string; | |||
RecruitmentBookcompany?: string; | |||
RecruitmentBookAdd?: string; | |||
RecruitmentDetail?: string; | |||
} | |||
} |
@@ -1,9 +1,10 @@ | |||
import { web } from '@/constants/index'; | |||
export const FairUrl: Url.Fair = { | |||
export const FairUrl: Url.Fair = { | |||
RecruitmentList: web + '/recruitment/list', | |||
RecruitmentBookcompany: web + '/recruitmentBook/company', | |||
RecruitmentBookAdd: web + '/recruitmentbook/add', | |||
RecruitmentDetail: web + '/recruitment/detail' | |||
} | |||