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 = { |
|||
anyringToken: '', |
|||
user: { id: '', phone: '', account: '' }, |
|||
picCode: null, |
|||
}; |
|||
|
|||
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