Soleilw 1 місяць тому
джерело
коміт
8d2cec1b09

+ 1
- 1
dist/index.html Переглянути файл

@@ -8,6 +8,6 @@
</head>
<body>
<div id="root"></div>
<script src="/umi.9a7953c1.js"></script>
<script src="/umi.9db507e4.js"></script>
</body>
</html>

+ 0
- 1
dist/p__Manage__Company__Fair__index.8d3c5abc.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 1
- 0
dist/p__Manage__Company__Fair__index.a4a4094f.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 1
- 0
dist/p__Talent__Fair__Detail__index.416704a6.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 0
- 1
dist/p__Talent__Fair__Detail__index.ab5c44e5.async.js Переглянути файл

@@ -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)}}]);

+ 0
- 1
dist/p__Talent__Fair__index.3e724a16.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 1
- 0
dist/p__Talent__Fair__index.61c02f41.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


dist/p__Talent__Home__index.31feb3f3.async.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


dist/umi.9db507e4.js
Різницю між файлами не показано, бо вона завелика
Переглянути файл


+ 1
- 1
src/components/Talent/Home/Famous/index.tsx Переглянути файл

@@ -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> */}

+ 42
- 18
src/pages/Manage/Company/Fair/index.tsx Переглянути файл

@@ -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 >
</>

+ 129
- 62
src/pages/Talent/Fair/Detail/index.tsx Переглянути файл

@@ -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 >
</>

+ 13
- 12
src/pages/Talent/Fair/index.tsx Переглянути файл

@@ -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>


+ 3
- 2
src/pages/Talent/Home/index.tsx Переглянути файл

@@ -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>

+ 2
- 0
src/services/apis/fair.ts Переглянути файл

@@ -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);



+ 1
- 1
src/services/types/url.d.ts Переглянути файл

@@ -195,6 +195,6 @@ declare namespace Url {
RecruitmentList?: string;
RecruitmentBookcompany?: string;
RecruitmentBookAdd?: string;
RecruitmentDetail?: string;
}
}

+ 2
- 1
src/services/url/fair.ts Переглянути файл

@@ -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'

}


Завантаження…
Відмінити
Зберегти