29 changed files with 1485 additions and 124 deletions
@ -0,0 +1,45 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<a-carousel :autoplay="false"> |
||||
|
<div :key="item.id" v-for="item in bannerLists"> |
||||
|
<img :src="item.url" alt /> |
||||
|
</div> |
||||
|
</a-carousel> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
export default { |
||||
|
name: 'RichText', |
||||
|
props: { |
||||
|
showPage: { |
||||
|
type: Number, |
||||
|
default: 11, |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return {}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('home', ['bannerLists']), |
||||
|
|
||||
|
async created() { |
||||
|
this.setBannerLists([]); |
||||
|
await this.getQueryRotation(this.showPage); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapMutations('home', ['setBannerLists']), |
||||
|
...mapActions('home', ['getQueryRotation']), |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<a-breadcrumb> |
||||
|
<a-breadcrumb-item>绿谷生物</a-breadcrumb-item> |
||||
|
<a-breadcrumb-item :key="index" v-for="(item,index) in arr"> |
||||
|
<router-link :to="item.url">{{ item.name }}</router-link> |
||||
|
</a-breadcrumb-item> |
||||
|
</a-breadcrumb> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
export default { |
||||
|
name: 'RichText', |
||||
|
props: { |
||||
|
arr: { |
||||
|
type: Array, |
||||
|
default: () => [], |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return {}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped></style> |
@ -0,0 +1,40 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<a-modal |
||||
|
:footer="null" |
||||
|
:title="profile.title" |
||||
|
:visible="showProfile" |
||||
|
@cancel="handleCancel" |
||||
|
@ok="handleCancel" |
||||
|
> |
||||
|
<p>{{ profile.description }}</p> |
||||
|
</a-modal> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
|
||||
|
export default { |
||||
|
props: { |
||||
|
showProfile: { |
||||
|
type: Boolean, |
||||
|
default: false, |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
ModalText: 'Content of the modal', |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('home', ['profile']), |
||||
|
|
||||
|
methods: { |
||||
|
handleCancel(e) { |
||||
|
this.$emit('closeProfile'); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
@ -0,0 +1,113 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<div class="contact d-flex flex-nowrap"> |
||||
|
<img :src="img" alt class="contact-img flex-1" /> |
||||
|
<div class="contact-right"> |
||||
|
<div> |
||||
|
<a-icon class="baseColor icon-size" type="user" /> |
||||
|
<p> |
||||
|
高璨 |
||||
|
<span class="ml-6">19935658782</span> |
||||
|
</p> |
||||
|
</div> |
||||
|
<div> |
||||
|
<a-icon class="baseColor icon-size" type="phone" /> |
||||
|
<p> |
||||
|
0351 5223175 |
||||
|
<span class="ml-6">0351 5223179</span> |
||||
|
</p> |
||||
|
</div> |
||||
|
<div> |
||||
|
<a-icon class="baseColor icon-size" type="mail" /> |
||||
|
<p>lgzc2020@163.com</p> |
||||
|
</div> |
||||
|
<div> |
||||
|
<i class="iconfont icon-local baseColor"></i> |
||||
|
<p>山西省太原市晋阳街202号英语周报大厦八层</p> |
||||
|
</div> |
||||
|
<div class="code-box"> |
||||
|
<a-icon class="baseColor icon-size" type="wechat" /> |
||||
|
<img |
||||
|
alt |
||||
|
src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2059927486,2456161292&fm=26&gp=0.jpg" |
||||
|
/> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: 'RichText', |
||||
|
components: {}, |
||||
|
data() { |
||||
|
return { |
||||
|
sort: [ |
||||
|
{ id: 1, component: 'title' }, |
||||
|
{ id: 2, component: 'content' }, |
||||
|
{ id: 3, component: 'picture' }, |
||||
|
], |
||||
|
str: '联系我们组件', |
||||
|
img: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1641353646,126669045&fm=26&gp=0.jpg', |
||||
|
}; |
||||
|
}, |
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.contact { |
||||
|
height: 444px; |
||||
|
position: relative; |
||||
|
border: 1px solid rgba(112, 112, 112, 0.14901960784313725); |
||||
|
background: #fff; |
||||
|
} |
||||
|
|
||||
|
.contact-img { |
||||
|
width: 790px; |
||||
|
height: 100%; |
||||
|
} |
||||
|
|
||||
|
.contact-right { |
||||
|
height: 100%; |
||||
|
width: 360px; |
||||
|
padding: 0 24px; |
||||
|
|
||||
|
div { |
||||
|
margin-top: 24px; |
||||
|
height: 24px; |
||||
|
line-height: 24px; |
||||
|
position: relative; |
||||
|
|
||||
|
p { |
||||
|
position: absolute; |
||||
|
left: 40px; |
||||
|
top: 0; |
||||
|
font-size: 16px; |
||||
|
font-family: Microsoft YaHei; |
||||
|
font-weight: 400; |
||||
|
line-height: 24px; |
||||
|
color: rgba(0, 0, 0, 0.65); |
||||
|
opacity: 1; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.code-box { |
||||
|
margin-top: 44px !important; |
||||
|
|
||||
|
img { |
||||
|
position: absolute; |
||||
|
width: 120px; |
||||
|
height: 120px; |
||||
|
left: 40px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,157 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div class="d-flex flex-wrap" v-if="newPartners && newPartners.length > 0"> |
||||
|
<div |
||||
|
:class="(index+1)%3===0? 'enterprise-box1' : ''" |
||||
|
:key="index" |
||||
|
@click="openProfile(item.name,item.description)" |
||||
|
class="enterprise-box d-flex flex-column align-center white mb-8" |
||||
|
v-for="(item,index) in newPartners" |
||||
|
> |
||||
|
<img :src="item.logoUrl" class="enterprise-pic my-2" /> |
||||
|
<div class="font-bold-24 title-color my-2">{{ item.name }}</div> |
||||
|
<div |
||||
|
class="font-16 textColor d-flex flex-wrap align-left fill-width px-3" |
||||
|
>{{ item.description }}</div> |
||||
|
<div class="d-flex flex-nowrap fill-width mr-3"> |
||||
|
<div class="flex-1"></div> |
||||
|
<span class="baseColor"> |
||||
|
了解更多 |
||||
|
<a-icon type="arrow-right" /> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<company-profile :showProfile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
import CompanyProfile from './CompanyProfile.vue'; |
||||
|
export default { |
||||
|
components: { CompanyProfile }, |
||||
|
name: 'DeriveEnterprise', |
||||
|
props: { |
||||
|
title: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
typeOfPlatform: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
showProfile: false, // 显示公司介绍 |
||||
|
partners: [ |
||||
|
{ |
||||
|
typeOfTech: 2, |
||||
|
backendSearchList: [ |
||||
|
{ |
||||
|
description: '我是好人,谁是好人', |
||||
|
logo: 300, |
||||
|
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2059927486,2456161292&fm=26&gp=0.jpg', |
||||
|
name: '传控电子科技', |
||||
|
type: 1, |
||||
|
typeOfPlatform: 2, |
||||
|
typeOfTech: 2, |
||||
|
}, |
||||
|
{ |
||||
|
description: '我是好人,谁是好人', |
||||
|
logo: 300, |
||||
|
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2059927486,2456161292&fm=26&gp=0.jpg', |
||||
|
name: '传控电子科技', |
||||
|
type: 1, |
||||
|
typeOfPlatform: 2, |
||||
|
typeOfTech: 2, |
||||
|
}, |
||||
|
{ |
||||
|
description: '我是好人,谁是好人', |
||||
|
logo: 300, |
||||
|
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2059927486,2456161292&fm=26&gp=0.jpg', |
||||
|
name: '传控电子科技', |
||||
|
type: 1, |
||||
|
typeOfPlatform: 2, |
||||
|
typeOfTech: 2, |
||||
|
}, |
||||
|
{ |
||||
|
description: '我是好人,谁是好人', |
||||
|
logo: 300, |
||||
|
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2059927486,2456161292&fm=26&gp=0.jpg', |
||||
|
name: '传控电子科技', |
||||
|
type: 1, |
||||
|
typeOfPlatform: 2, |
||||
|
typeOfTech: 2, |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: { |
||||
|
...mapState('home', ['profile']), //'partners', |
||||
|
newPartners() { |
||||
|
let { partners } = this; |
||||
|
let arr = []; |
||||
|
if (partners && partners.length > 0) { |
||||
|
for (let i = 0; i < partners.length; i++) { |
||||
|
const element = partners[i]; |
||||
|
for (let j = 0; j < element.backendSearchList.length; j++) { |
||||
|
const item = element.backendSearchList[j]; |
||||
|
arr.push(item); |
||||
|
} |
||||
|
} |
||||
|
return arr; |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
async created() { |
||||
|
this.setPartners([]); |
||||
|
const { title, typeOfPlatform } = this; |
||||
|
const params = { |
||||
|
param: { |
||||
|
pageNum: 1, |
||||
|
pageSize: 1, |
||||
|
type: title === '合作伙伴' ? 1 : 2, |
||||
|
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1, |
||||
|
}, |
||||
|
}; |
||||
|
await this.getFrontSearchCompany(params); |
||||
|
console.log(this.newPartners); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapMutations('home', ['setPartners', 'setProfile']), |
||||
|
...mapActions('home', ['getFrontSearchCompany']), |
||||
|
|
||||
|
// 介绍 |
||||
|
openProfile(title, description) { |
||||
|
this.setProfile(null); |
||||
|
const profile = { |
||||
|
title, |
||||
|
description, |
||||
|
}; |
||||
|
this.setProfile(profile); |
||||
|
console.log(this.profile); |
||||
|
this.showProfile = true; |
||||
|
}, |
||||
|
|
||||
|
closeProfile() { |
||||
|
this.showProfile = false; |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
@import './PartnerShip.styl'; |
||||
|
</style> |
@ -0,0 +1,382 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<a-button @click="showModal" type="primary">立即加入</a-button> |
||||
|
<a-modal |
||||
|
:confirm-loading="confirmLoading" |
||||
|
:visible="visible" |
||||
|
@cancel="handleCancel" |
||||
|
@ok="handleOk(type)" |
||||
|
title="招聘信息" |
||||
|
width="50%" |
||||
|
> |
||||
|
<a-form :form="form"> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="姓名" |
||||
|
required |
||||
|
> |
||||
|
<a-input placeholder="请输入姓名" v-model.trim="recruit.name" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="性别" |
||||
|
> |
||||
|
<!-- 单选 --> |
||||
|
<a-radio-group v-model="recruit.sex"> |
||||
|
<a-radio :value="1">男</a-radio> |
||||
|
<a-radio :value="2">女</a-radio> |
||||
|
</a-radio-group> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="出生年月" |
||||
|
> |
||||
|
<!-- 时间选择器(时间点) --> |
||||
|
<a-date-picker @change="changeBirthday" class="fill-width" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="参加工作时间" |
||||
|
> |
||||
|
<!-- 时间选择器(时间点) --> |
||||
|
<a-date-picker @change="changeStartJob" class="fill-width" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="电话" |
||||
|
required |
||||
|
> |
||||
|
<a-input |
||||
|
@change="changePhone" |
||||
|
placeholder="请输入联系电话" |
||||
|
type="tel" |
||||
|
v-decorator="['tel', { rules: phoneRules }]" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
|
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="图片验证码" |
||||
|
required |
||||
|
> |
||||
|
<div class="d-flex flex-nowrap"> |
||||
|
<a-input placeholder="图片验证码" type="number" v-model="codeNum" /> |
||||
|
<img |
||||
|
:src="picCode.imageBase64" |
||||
|
@click="changePicCode" |
||||
|
class="code_img ml-2" |
||||
|
v-if="picCode && picCode.imageBase64" |
||||
|
/> |
||||
|
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button> |
||||
|
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> --> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
|
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="短信验证码" |
||||
|
required |
||||
|
> |
||||
|
<div class="d-flex flex-nowrap"> |
||||
|
<a-input placeholder="请输入验证码" type="number" v-model="recruit.code" /> |
||||
|
<a-button |
||||
|
class="code_img ml-2" |
||||
|
disabled |
||||
|
type="primary" |
||||
|
v-if="showInterval" |
||||
|
>重新发送 {{ interval }}</a-button> |
||||
|
<a-button |
||||
|
:disabled="recruit.isTel === false" |
||||
|
@click="getCode" |
||||
|
class="code_img ml-2" |
||||
|
type="primary" |
||||
|
v-else |
||||
|
>获取验证码</a-button> |
||||
|
</div> |
||||
|
</a-form-item> |
||||
|
|
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="电子邮箱" |
||||
|
> |
||||
|
<!-- 电子邮箱 --> |
||||
|
<a-input |
||||
|
@change="changeEamil" |
||||
|
placeholder="请输入电子邮箱..." |
||||
|
type="email" |
||||
|
v-decorator="['email', { rules: emailRules }]" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="求职意向" |
||||
|
> |
||||
|
<a-textarea placeholder="请输入求职意向..." v-model.trim="recruit.jobWilling" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="工作经历" |
||||
|
> |
||||
|
<a-textarea placeholder="请输入工作经历..." v-model.trim="recruit.jobExpirence" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="教育经历" |
||||
|
> |
||||
|
<a-textarea placeholder="请输入教育经历..." v-model.trim="recruit.educationExpirence" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="自我评价" |
||||
|
> |
||||
|
<a-textarea placeholder="请输入自我评价..." v-model.trim="recruit.personalDescription" /> |
||||
|
</a-form-item> |
||||
|
<a-form-item |
||||
|
:label-col="formItemLayout.labelCol" |
||||
|
:wrapper-col="formItemLayout.wrapperCol" |
||||
|
label="上传附件" |
||||
|
> |
||||
|
<a-upload |
||||
|
:action="action" |
||||
|
:default-file-list="fileList" |
||||
|
@change="fileChange" |
||||
|
list-type="picture" |
||||
|
name="files" |
||||
|
> |
||||
|
<a-button> |
||||
|
<a-icon type="upload" />点击上传附件 |
||||
|
</a-button> |
||||
|
</a-upload> |
||||
|
</a-form-item> |
||||
|
</a-form> |
||||
|
</a-modal> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapActions } from 'vuex'; |
||||
|
import { JoinPlatform, upload, joinUs } from 'config/api'; |
||||
|
|
||||
|
const formItemLayout = { |
||||
|
labelCol: { span: 6 }, |
||||
|
wrapperCol: { span: 16 }, |
||||
|
}; |
||||
|
|
||||
|
const formTailLayout = { wrapperCol: { span: 16, offset: 6 } }; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Model', |
||||
|
components: {}, |
||||
|
data() { |
||||
|
return { |
||||
|
visible: false, |
||||
|
confirmLoading: false, |
||||
|
type: '', |
||||
|
formItemLayout, |
||||
|
formTailLayout, |
||||
|
form: this.$form.createForm(this, { name: 'submit' }), |
||||
|
value: 1, |
||||
|
recruit: { |
||||
|
name: '', // 姓名 |
||||
|
sex: 1, // 性别 |
||||
|
birthday: '', // 出生年月 |
||||
|
startJob: '', // 参加工作时间 |
||||
|
tel: '', // 电话 |
||||
|
code: '', |
||||
|
isTel: false, // 是否符合验证的电话号 |
||||
|
email: '', // 电子邮箱 |
||||
|
isEmail: false, // 是否符合验证的电子邮箱 |
||||
|
jobWilling: '', // 求职意向 |
||||
|
jobExpirence: '', // 工作经历 |
||||
|
educationExpirence: '', // 教育经历 |
||||
|
personalDescription: '', // 自我评价 |
||||
|
files: [], // 附件Id |
||||
|
}, |
||||
|
action: upload, |
||||
|
fileList: [], |
||||
|
phoneRules: [ |
||||
|
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
||||
|
], |
||||
|
emailRules: [ |
||||
|
{ |
||||
|
pattern: new RegExp(/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/), |
||||
|
whitespace: true, |
||||
|
message: '请输入正确的邮箱格式', |
||||
|
}, |
||||
|
], |
||||
|
codeRules: [ |
||||
|
{ required: true, message: '请输入验证码' }, |
||||
|
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
||||
|
], |
||||
|
codeNum: '', |
||||
|
showInterval: false, |
||||
|
codeTimer: null, |
||||
|
interval: 120, // 验证码有效时间倒计时 |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('user', ['picCode']), |
||||
|
created() { |
||||
|
this.sendPicCode(); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapActions('user', ['sendCode', 'sendPicCode']), |
||||
|
showModal() { |
||||
|
this.visible = true; |
||||
|
}, |
||||
|
|
||||
|
// 验证电话 |
||||
|
changePhone(e) { |
||||
|
this.recruit.tel = e.target.value; |
||||
|
this.recruit.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.recruit.tel); |
||||
|
}, |
||||
|
|
||||
|
// 验证电子邮箱 |
||||
|
changeEamil(e) { |
||||
|
this.recruit.email = e.target.value; |
||||
|
this.recruit.isEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(this.recruit.email); |
||||
|
}, |
||||
|
|
||||
|
handleOk(type) { |
||||
|
if (!this.recruit.name) { |
||||
|
this.$message.error('姓名为必填项'); |
||||
|
} else if (!this.recruit.tel) { |
||||
|
this.$message.error('电话为必填项'); |
||||
|
} else if (!this.recruit.jobWilling) { |
||||
|
this.$message.error('求职意向为必填项'); |
||||
|
} else if (this.recruit.email && this.recruit.isEmail === false) { |
||||
|
this.$message.error('请输入正确的邮箱格式'); |
||||
|
} else { |
||||
|
if (this.recruit.isTel) { |
||||
|
for (var i = 0; i < this.fileList.length; i++) { |
||||
|
this.recruit.files = this.recruit.files.concat(this.fileList[i].response.data[0].id); |
||||
|
} |
||||
|
this.subMitAdd(); |
||||
|
} else { |
||||
|
this.$message.error('请输入正确的联系电话'); |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 加入提交 |
||||
|
async subMitAdd() { |
||||
|
this.confirmLoading = true; |
||||
|
try { |
||||
|
var params = {}; |
||||
|
var res = {}; |
||||
|
params = { |
||||
|
param: { |
||||
|
name: this.recruit.name, // 姓名 |
||||
|
gender: this.recruit.sex, // 性别 |
||||
|
birthday: this.recruit.birthday, // 出生年月 |
||||
|
startJob: this.recruit.startJob, // 参加工作时间 |
||||
|
phone: this.recruit.tel, // 电话 |
||||
|
code: this.recruit.code, // 验证码 |
||||
|
email: this.recruit.email, // 电子邮箱 |
||||
|
jobWilling: this.recruit.jobWilling, // 求职意向 |
||||
|
jobExpirence: this.recruit.jobExpirence, // 工作经历 |
||||
|
educationExpirence: this.recruit.educationExpirence, // 教育经历 |
||||
|
personalDescription: this.recruit.personalDescription, // 自我评价 |
||||
|
files: this.recruit.files, // 附件Id |
||||
|
}, |
||||
|
}; |
||||
|
res = await joinUs(params); |
||||
|
const { data, msg, code } = res.data; |
||||
|
if (code === 200) { |
||||
|
this.$message.success('申请成功'); |
||||
|
this.visible = false; |
||||
|
this.confirmLoading = false; |
||||
|
for (let key in this.recruit) { |
||||
|
this.recruit[key] = ''; |
||||
|
} |
||||
|
} else { |
||||
|
throw msg; |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
} catch (error) { |
||||
|
this.$message.error(error); |
||||
|
this.confirmLoading = false; |
||||
|
} |
||||
|
}, |
||||
|
handleCancel(e) { |
||||
|
this.visible = false; |
||||
|
}, |
||||
|
fileChange(info) { |
||||
|
this.fileList = info.fileList; |
||||
|
}, |
||||
|
changeBirthday(date, dateString) { |
||||
|
this.recruit.birthday = this.$moment(date).unix(); |
||||
|
// console.log(this.$moment(date).unix(), dateString); |
||||
|
}, |
||||
|
changeStartJob(date, dateString) { |
||||
|
this.recruit.startJob = this.$moment(date).unix(); |
||||
|
// console.log(this.$moment(date).unix(), dateString); |
||||
|
}, |
||||
|
|
||||
|
// 获取验证码 |
||||
|
async getCode() { |
||||
|
try { |
||||
|
const params = { |
||||
|
phone: this.recruit.tel, |
||||
|
verificationCodeId: this.picCode.verificationCodeId, |
||||
|
verificationCodeValue: this.codeNum, |
||||
|
}; |
||||
|
await this.sendCode(params); |
||||
|
this.getCodeInterval(); |
||||
|
} catch (error) { |
||||
|
throw new Error(`SignIn.vue method getCode: ${error}`); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 验证码倒计时 |
||||
|
getCodeInterval() { |
||||
|
this.showInterval = true; |
||||
|
this.codeTimer = setInterval(() => { |
||||
|
if (this.interval === 0) { |
||||
|
clearInterval(this.codeTimer); |
||||
|
this.codeTimer = null; |
||||
|
this.showInterval = false; |
||||
|
this.interval = 120; |
||||
|
return; |
||||
|
} |
||||
|
this.interval = this.interval - 1; |
||||
|
}, 1000); |
||||
|
}, |
||||
|
|
||||
|
// 刷新验证码 |
||||
|
changePicCode() { |
||||
|
this.sendPicCode(); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.must-color { |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.code_img { |
||||
|
height: 32px; |
||||
|
width: 120px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,33 @@ |
|||||
|
// 合作伙伴 |
||||
|
.logo-box{ |
||||
|
width: 20.5%; |
||||
|
height: 113px; |
||||
|
margin-right: 6%; |
||||
|
border-radius: 4px; |
||||
|
box-shadow: 6px 6px 6px #eee; |
||||
|
|
||||
|
.logo-pic{ |
||||
|
height: 70px |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.logo-box1{ |
||||
|
margin-right: 0!important; |
||||
|
} |
||||
|
|
||||
|
// 衍生企业 |
||||
|
.enterprise-box{ |
||||
|
width: 22%; |
||||
|
// height: 113px; |
||||
|
margin-right: 17%; |
||||
|
border-radius: 4px; |
||||
|
box-shadow: 6px 6px 6px #eee; |
||||
|
|
||||
|
.enterprise-pic{ |
||||
|
height: 166px |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.enterprise-box1{ |
||||
|
margin-right: 0!important; |
||||
|
} |
@ -0,0 +1,97 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div v-if="partners && partners.length > 0"> |
||||
|
<div :key="index" class="mb-4" v-for="(item,index) in partners"> |
||||
|
<p |
||||
|
class="font-bold-24 title-color" |
||||
|
>{{ item.typeOfTech===0 ? '高校' : item.typeOfTech===1 ? '院所' : '企业'}}</p> |
||||
|
<div |
||||
|
class="d-flex flex-wrap" |
||||
|
v-if="item.backendSearchList && item.backendSearchList.length > 0" |
||||
|
> |
||||
|
<div |
||||
|
:class="(i+1)%4===0? 'logo-box1' : ''" |
||||
|
:key="i" |
||||
|
@click="openProfile(list.name,list.description)" |
||||
|
class="logo-box d-flex flex-column align-center white mb-8" |
||||
|
v-for="(list,i) in item.backendSearchList" |
||||
|
> |
||||
|
<img :src="list.logoUrl" class="logo-pic my-2" /> |
||||
|
<div class="font-16 title-color">{{ list.name }}</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
<company-profile :showProfile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
import CompanyProfile from './CompanyProfile.vue'; |
||||
|
export default { |
||||
|
components: { CompanyProfile }, |
||||
|
name: 'PartnerShip', |
||||
|
props: { |
||||
|
title: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
typeOfPlatform: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
data() { |
||||
|
return { |
||||
|
showProfile: false, // 显示公司介绍 |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('home', ['partners', 'profile']), |
||||
|
|
||||
|
async created() { |
||||
|
this.setPartners([]); |
||||
|
const { title, typeOfPlatform } = this; |
||||
|
const params = { |
||||
|
param: { |
||||
|
pageNum: 1, |
||||
|
pageSize: 1, |
||||
|
type: title === '合作伙伴' ? 1 : 2, |
||||
|
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1, |
||||
|
}, |
||||
|
}; |
||||
|
await this.getFrontSearchCompany(params); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapMutations('home', ['setPartners', 'setProfile']), |
||||
|
...mapActions('home', ['getFrontSearchCompany']), |
||||
|
|
||||
|
// 介绍 |
||||
|
openProfile(title, description) { |
||||
|
this.setProfile(null); |
||||
|
const profile = { |
||||
|
title, |
||||
|
description, |
||||
|
}; |
||||
|
this.setProfile(profile); |
||||
|
console.log(this.profile); |
||||
|
this.showProfile = true; |
||||
|
}, |
||||
|
|
||||
|
closeProfile() { |
||||
|
this.showProfile = false; |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
@import './PartnerShip.styl'; |
||||
|
</style> |
@ -0,0 +1,44 @@ |
|||||
|
<!-- |
||||
|
Copyright (c) 2020. |
||||
|
author: song |
||||
|
email: 15235360226@163.com |
||||
|
--> |
||||
|
|
||||
|
<template> |
||||
|
<div> |
||||
|
<div class="words-content"> |
||||
|
<span class="font-16 textColor line-height-30" v-dompurify-html="content"></span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
export default { |
||||
|
name: 'RichText', |
||||
|
props: { |
||||
|
title: { |
||||
|
type: String, |
||||
|
default: '', |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
data() { |
||||
|
return {}; |
||||
|
}, |
||||
|
|
||||
|
computed: mapState('home', ['content']), |
||||
|
|
||||
|
async created() { |
||||
|
this.setContent(''); |
||||
|
await this.getPageDetail(this.title); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
...mapMutations('home', ['setContent']), |
||||
|
...mapActions('home', ['getPageDetail']), |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped></style> |
@ -1,6 +1,7 @@ |
|||||
const state = { |
const state = { |
||||
anyringToken: '', |
anyringToken: '', |
||||
user: { id: '', phone: '', account: '' }, |
user: { id: '', phone: '', account: '' }, |
||||
|
picCode: null, |
||||
}; |
}; |
||||
|
|
||||
export default state; |
export default state; |
||||
|
@ -0,0 +1,42 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<banner :showPage="showPage" /> |
||||
|
<h-nav /> |
||||
|
<div class="inner"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
<div class="white pa-5 my-5"> |
||||
|
<rich-text :title="title" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Banner from 'components/Banner/Banner.vue'; |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import RichText from 'components/Introduce/RichText.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Introduce', |
||||
|
components: { Banner, HNav, BreadCrumb, RichText }, |
||||
|
data() { |
||||
|
return { |
||||
|
title: '公司介绍', |
||||
|
showPage: 11, |
||||
|
arr: [ |
||||
|
{ name: '关于我们', url: '/About/Introduce' }, |
||||
|
{ name: '公司介绍', url: '' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 40px auto; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,42 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<banner :showPage="showPage" /> |
||||
|
<h-nav /> |
||||
|
<div class="inner"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
<div class="white pa-5 my-5"> |
||||
|
<rich-text :title="title" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import Banner from 'components/Banner/Banner.vue'; |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import RichText from 'components/Introduce/RichText.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Introduce', |
||||
|
components: { Banner, HNav, BreadCrumb, RichText }, |
||||
|
data() { |
||||
|
return { |
||||
|
title: '组织机构', |
||||
|
showPage: 12, |
||||
|
arr: [ |
||||
|
{ name: '关于我们', url: '/About/Introduce' }, |
||||
|
{ name: '组织机构', url: '' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
methods: {}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 40px auto; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,39 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
<div class="py-5 my-5"> |
||||
|
<partner-ship :title="title" :typeOfPlatform="typeOfPlatform" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import PartnerShip from 'components/Introduce/PartnerShip.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Partner', |
||||
|
components: { HNav, BreadCrumb, PartnerShip }, |
||||
|
data() { |
||||
|
return { |
||||
|
title: '合作伙伴', |
||||
|
typeOfPlatform: '关于我们', |
||||
|
arr: [ |
||||
|
{ name: '关于我们', url: '/About/Introduce' }, |
||||
|
{ name: '合作伙伴', url: '' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 40px auto; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,39 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<h-nav /> |
||||
|
<div class="inner"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
<div class="py-5"> |
||||
|
<derive-enterprise :title="title" :typeOfPlatform="typeOfPlatform" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { mapState, mapMutations, mapActions } from 'vuex'; |
||||
|
import HNav from './../components/HNav.vue'; |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import DeriveEnterprise from 'components/Introduce/DeriveEnterprise.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'Partner', |
||||
|
components: { HNav, BreadCrumb, DeriveEnterprise }, |
||||
|
data() { |
||||
|
return { |
||||
|
title: '衍生企业', |
||||
|
typeOfPlatform: '关于我们', |
||||
|
arr: [ |
||||
|
{ name: '关于我们', url: '/About/Introduce' }, |
||||
|
{ name: '衍生企业', url: '' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped> |
||||
|
.inner { |
||||
|
margin: 40px auto; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<div class="nav-box d-flex"> |
||||
|
<div |
||||
|
:class="activeNum === index ? 'nav-box-active' : ''" |
||||
|
:key="index" |
||||
|
@click="jump(item.url)" |
||||
|
v-for="(item, index) in list" |
||||
|
>{{ item.title }}</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: 'HNav', |
||||
|
data() { |
||||
|
return { |
||||
|
str: '导航条', |
||||
|
activeNum: 0, |
||||
|
list: [ |
||||
|
{ |
||||
|
title: '公司介绍', |
||||
|
url: '/About/Introduce', |
||||
|
}, |
||||
|
{ |
||||
|
title: '组织机构', |
||||
|
url: '/About/Organ', |
||||
|
}, |
||||
|
{ |
||||
|
title: '合作伙伴', |
||||
|
url: '/About/Partner', |
||||
|
}, |
||||
|
{ |
||||
|
title: '衍生企业', |
||||
|
url: '/About/SpinOffs', |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
created() { |
||||
|
if (this.$route.fullPath === '/About/Organ') { |
||||
|
this.activeNum = 1; |
||||
|
} else if (this.$route.fullPath === '/About/Partner') { |
||||
|
this.activeNum = 2; |
||||
|
} else if (this.$route.fullPath === '/About/SpinOffs') { |
||||
|
this.activeNum = 3; |
||||
|
} else { |
||||
|
this.activeNum = 0; |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
jump(url) { |
||||
|
if (this.$route.fullPath === url) { |
||||
|
this.$message.success('已在当前界面'); |
||||
|
} else { |
||||
|
this.$router.push(url); |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="stylus" scoped></style> |
@ -1,19 +0,0 @@ |
|||||
<template> |
|
||||
<div> |
|
||||
{{ str }} |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Introduce', |
|
||||
data() { |
|
||||
return { |
|
||||
str: '这是公司介绍界面', |
|
||||
list: [], |
|
||||
}; |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="stylus" scoped></style> |
|
@ -1,19 +0,0 @@ |
|||||
<template> |
|
||||
<div> |
|
||||
{{ str }} |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Organ', |
|
||||
data() { |
|
||||
return { |
|
||||
str: '这是组织机构界面', |
|
||||
list: [], |
|
||||
}; |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="stylus" scoped></style> |
|
@ -1,19 +0,0 @@ |
|||||
<template> |
|
||||
<div> |
|
||||
{{ str }} |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
export default { |
|
||||
name: 'Partner', |
|
||||
data() { |
|
||||
return { |
|
||||
str: '这是合作伙伴界面', |
|
||||
list: [], |
|
||||
}; |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="stylus" scoped></style> |
|
@ -0,0 +1,47 @@ |
|||||
|
<template> |
||||
|
<div class="inner"> |
||||
|
<bread-crumb :arr="arr" /> |
||||
|
<!-- 联系我们 --> |
||||
|
<div> |
||||
|
<p class="font-bold-24 title-color">联系我们</p> |
||||
|
<contact /> |
||||
|
</div> |
||||
|
<!-- 加入我们 --> |
||||
|
<div> |
||||
|
<p class="font-bold-24 title-color">加入我们</p> |
||||
|
<rich-text :title="title" /> |
||||
|
<model class="mt-8" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
||||
|
import Contact from 'components/Introduce/ContactUs.vue'; |
||||
|
import RichText from 'components/Introduce/RichText.vue'; |
||||
|
import Model from 'components/Introduce/Model.vue'; |
||||
|
|
||||
|
export default { |
||||
|
name: 'ContactUs', |
||||
|
components: { BreadCrumb, Contact, RichText, Model }, |
||||
|
data() { |
||||
|
return { |
||||
|
title: '联系我们', |
||||
|
arr: [ |
||||
|
{ name: '关于我们', url: '/About/Introduce' }, |
||||
|
{ name: '联系我们', url: '' }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped lang="stylus"> |
||||
|
.inner { |
||||
|
margin: 40px auto; |
||||
|
} |
||||
|
|
||||
|
p { |
||||
|
margin-top: 2rem; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue