76 changed files with 168 additions and 9337 deletions
@ -1,32 +0,0 @@ |
|||
<!-- |
|||
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> |
@ -1,65 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div> |
|||
<div class="words-content"> |
|||
<span class="font-16 white line-height-36" v-dompurify-html="content"></span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
import { getPageDetail } from 'config/api'; |
|||
|
|||
export default { |
|||
name: 'RichText', |
|||
props: { |
|||
title: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return { content: '' }; |
|||
}, |
|||
|
|||
// computed: mapState('home', ['titleCode']), |
|||
|
|||
async created() { |
|||
// this.setContent(''); |
|||
await this.getPageDetail(this.title); |
|||
}, |
|||
|
|||
methods: { |
|||
// ...mapMutations('home', ['setContent']), |
|||
// ...mapActions('home', ['getPageDetail']), |
|||
|
|||
async getPageDetail(titleCode) { |
|||
try { |
|||
const params = { |
|||
param: { titleCode }, |
|||
}; |
|||
const res = await getPageDetail(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
if (data && data.length > 0 && data[0] && data[0].length > 0 && data[0][0].detail) { |
|||
this.content = data[0][0].detail.content; |
|||
} |
|||
} else { |
|||
message.error(msg || '查询失败'); |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
// throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
@ -1,28 +0,0 @@ |
|||
<template> |
|||
<div class="friend"> |
|||
<div class="inner"> |
|||
{{ str }} |
|||
<span :key="index" class="mx-2" v-for="(list,index) in lists">{{ list }}</span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
str: '友情链接:', |
|||
lists: ['科技部', '发改委', '工信部', '太原市综改区', '山西省科技厅', '山西省工信厅', '山西省发改委', '太原市科技厅', '太原市发改委'], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.friend { |
|||
line-height: 64px; |
|||
background: #fff; |
|||
font-size: 12px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
</style> |
@ -1,148 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="index-wrap"> |
|||
<div class="d-flex flex-nowrap align-center baseColor" v-if="i === 0"> |
|||
<span class="font-bold-24">行业资讯</span> |
|||
<img class="bullhorn ml-4" src="@/assets/bullhorn.png" /> |
|||
<div class="flex-1"></div> |
|||
<a-button |
|||
@click="$router.push('/ItInformation')" |
|||
class="d-flex align-end font-16 baseColor pa-0" |
|||
style="display: inline-block;" |
|||
type="link" |
|||
> |
|||
more |
|||
<a-icon style="font-size:12px" type="right" /> |
|||
</a-button> |
|||
</div> |
|||
<div class="d-flex flex-nowrap align-center baseColor" v-else> |
|||
<span class="font-bold-24">活动公告</span> |
|||
<img class="bullhorn ml-4" src="@/assets/bullhorn.png" /> |
|||
<div class="flex-1"></div> |
|||
<a-button |
|||
@click="$router.push('/Activity')" |
|||
class="d-flex align-end font-16 baseColor pa-0" |
|||
style="display: inline-block;" |
|||
type="link" |
|||
> |
|||
more |
|||
<a-icon style="font-size:12px" type="right" /> |
|||
</a-button> |
|||
</div> |
|||
<div class="policy-box" v-if="lists && lists[i].news && lists[i].news.length>0"> |
|||
<div :key="index" class="div-box" v-for="(item, index) in lists[i].news"> |
|||
<div @click="jumpDetails(item)" class="d-flex flex-nowrap" style="cursor: pointer"> |
|||
<div class="time d-flex flex-column align-center mr-5" v-if="item.releaseTime"> |
|||
<span class="font-20">{{ monthEnglish[item.releaseTime.split('-')[1] - 1] }}.</span> |
|||
<span class="font-bold-32 day">{{ item.releaseTime.split(' ')[0].split('-')[2] }}</span> |
|||
</div> |
|||
<div class="d-flex flex-1 flex-column"> |
|||
<div class="item-title">{{ item.title }}</div> |
|||
<div class="original"></div> |
|||
<div class="item-content">{{ item.content }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
import { front } from 'config/api'; |
|||
export default { |
|||
name: 'IndexNewList', |
|||
props: { |
|||
i: { |
|||
type: Number, |
|||
default: 0, |
|||
}, |
|||
lists: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
}, |
|||
data() { |
|||
return { monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'] }; |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setActDetail']), |
|||
|
|||
// 跳转到详情界面 |
|||
jumpDetails(item) { |
|||
this.setActDetail(item); |
|||
this.$router.push('/ActDetails'); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.index-wrap { |
|||
width: 90%; |
|||
height: 400px; |
|||
margin: 15px auto 15px auto; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.bullhorn { |
|||
width: 25px; |
|||
height: 25px; |
|||
} |
|||
|
|||
.policy-box { |
|||
.div-box { |
|||
position: relative; |
|||
background: #fff; |
|||
padding-top: 24px; |
|||
height: 114px; |
|||
|
|||
.time { |
|||
color: rgba(0, 0, 0, 0.25); |
|||
|
|||
.day { |
|||
position: relative; |
|||
top: -15px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.original { |
|||
position: relative; |
|||
top: 1px; |
|||
left: 0; |
|||
width: 30px; |
|||
height: 2px; |
|||
background: #13ACC4; |
|||
} |
|||
|
|||
.item-content { |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
margin-top: 8px; |
|||
line-height: 28px; |
|||
font-size: 14px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
font-family: Microsoft YaHei; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
</style> |
@ -1,140 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button type="primary" @click="showModal" class="shopping"> |
|||
{{ str }} |
|||
</a-button> |
|||
<a-icon id="ddd" type="shopping-cart" /> |
|||
<a-modal width="50%" :title="title" :visible="visible" :confirm-loading="confirmLoading" @ok="handleOk" @cancel="handleCancel"> |
|||
<a-form :form="form"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="项目信息简述"> |
|||
<a-textarea v-model.trim="describe" style="height: 120px" placeholder="请输入项目信息简述..." /> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import { addCar } from 'config/api'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'NewModel', |
|||
props: { |
|||
typeData: { |
|||
type: Object, |
|||
default: null, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
title: '加入购物车', |
|||
str: '加入购物车', |
|||
visible: false, |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
pageX: 0, |
|||
pageY: 0, |
|||
WinWidth: 0, |
|||
WinHeight: 0, |
|||
describe: '', // 项目描述 |
|||
}; |
|||
}, |
|||
methods: { |
|||
// 显示表单输入框 |
|||
showModal(event) { |
|||
this.pageX = event.clientX; |
|||
this.pageY = event.clientY; |
|||
|
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
// 点击确定 |
|||
async handleOk() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const params = { |
|||
param: { |
|||
description: this.describe, |
|||
serviceId: this.typeData.Id, |
|||
type: this.typeData.type, |
|||
}, |
|||
}; |
|||
const res = await addCar(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('加入购物车成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
this.describe = ''; |
|||
this.anma(); |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
// 加入购物车动画 |
|||
anma() { |
|||
this.WinWidth = window.innerWidth; |
|||
this.WinHeight = window.innerHeight; |
|||
var d = document.getElementById('ddd'); |
|||
d.style.top = this.pageY - d.offsetHeight * 0.5 + 'px'; |
|||
console.log(d.offsetWidth); |
|||
d.style.right = this.WinWidth - this.pageX - d.offsetWidth * 0.5 + 'px'; |
|||
d.style.display = 'block'; |
|||
setTimeout(() => { |
|||
d.style.display = 'none'; |
|||
}, 900); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
|
|||
#ddd { |
|||
color: #13acc4; |
|||
font-size: 50px; |
|||
display: none; |
|||
z-index: 1000; |
|||
animation: animations 1s cubic-bezier(0.5, 0.5, 0.5, 0.5); |
|||
position: fixed; |
|||
} |
|||
|
|||
@keyframes animations { |
|||
0% { |
|||
} |
|||
|
|||
99% { |
|||
top: 0; |
|||
right: -50px; |
|||
font-size: 20px; |
|||
} |
|||
|
|||
100% { |
|||
transform: none; |
|||
} |
|||
} |
|||
</style> |
@ -1,38 +0,0 @@ |
|||
<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> |
@ -1,132 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="enterprise-bg" v-if="newPartners && newPartners.length > 0"> |
|||
<div class="d-flex flex-wrap inner py-10"> |
|||
<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 justify-center white mb-8" |
|||
v-for="(item,index) in newPartners" |
|||
> |
|||
<img :src="item.logoUrl" class="enterprise-pic my-2" v-if="list.logoUrl" /> |
|||
<div class="font-bold-24 title-color my-2">{{ item.name }}</div> |
|||
<div |
|||
class="font-16 textColor d-flex flex-wrap align-start fill-width enterprise-txt" |
|||
>{{ item.description }}</div> |
|||
<div class="d-flex flex-nowrap fill-width py-5 enterprise-more"> |
|||
<div class="flex-1"></div> |
|||
<span class="font-16 baseColor"> |
|||
了解更多 |
|||
<a-icon type="arrow-right" /> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
|||
</div> |
|||
<div class="inner d-flex flex-row-reverse pb-10 enterprise-page"> |
|||
<a-pagination |
|||
:default-page-size="6" |
|||
:total="newPartners.length" |
|||
@change="onChange" |
|||
show-less-items |
|||
v-model="current" |
|||
v-show="newPartners.length > 6" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
import CompanyProfile from './CompanyProfile.vue'; |
|||
export default { |
|||
name: 'DeriveEnterprise', |
|||
components: { CompanyProfile }, |
|||
props: { |
|||
title: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
typeOfPlatform: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
current: 1, |
|||
showProfile: false, // 显示公司介绍 |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('home', ['partners', 'profile']), |
|||
|
|||
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; |
|||
} |
|||
return arr; |
|||
}, |
|||
}, |
|||
|
|||
async created() { |
|||
this.setPartners([]); |
|||
const { title, typeOfPlatform } = this; |
|||
const params = { |
|||
param: { |
|||
pageNum: this.current, |
|||
pageSize: 6, |
|||
type: title === '合作伙伴' ? 1 : 2, |
|||
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1, |
|||
}, |
|||
}; |
|||
await this.getFrontSearchCompany(params); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setPartners', 'setProfile']), |
|||
...mapActions('home', ['getFrontSearchCompany']), |
|||
|
|||
// 切换页数 |
|||
onChange(current) { |
|||
this.current = current; |
|||
}, |
|||
|
|||
// 介绍 |
|||
openProfile(title, description) { |
|||
this.setProfile(null); |
|||
const profile = { |
|||
title, |
|||
description, |
|||
}; |
|||
this.setProfile(profile); |
|||
this.showProfile = true; |
|||
}, |
|||
|
|||
closeProfile() { |
|||
this.showProfile = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
@import './PartnerShip.styl'; |
|||
</style> |
@ -1,308 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button @click="showModal">{{ typeData.type === 1 ? '意向填报' : '直接购买' }}</a-button> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:title="typeData.type === 1 ? '意向填报' : '产品购买'" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
width="50%" |
|||
> |
|||
<a-form :form="form"> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="公司名称" |
|||
> |
|||
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="联系人" |
|||
required |
|||
> |
|||
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
|||
</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="platform.code" /> |
|||
<a-button |
|||
class="code_img ml-2" |
|||
disabled |
|||
type="primary" |
|||
v-if="showInterval" |
|||
>重新发送 {{ interval }}</a-button> |
|||
<a-button |
|||
:disabled="platform.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="项目信息简述" |
|||
required |
|||
> |
|||
<a-textarea |
|||
placeholder="请输入项目信息简述..." |
|||
style="height: 120px" |
|||
v-model.trim="platform.describe" |
|||
/> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="上传附件" |
|||
v-show="typeData.type === 0" |
|||
> |
|||
<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 { serviceApply, upload } from 'config/api'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'NewModel', |
|||
props: { |
|||
typeData: { |
|||
type: Object, |
|||
default: null, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
action: upload, |
|||
fileList: [], |
|||
visible: false, |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
platform: { |
|||
companyName: '', // 公司名称 |
|||
manName: '', // 联系人 |
|||
tel: '', // 联系电话 |
|||
describe: '', // 项目描述 |
|||
code: '', // 验证码 |
|||
files: [], // 附件Id |
|||
isTel: false, |
|||
}, |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['picCode']), |
|||
async created() { |
|||
this.sendPicCode(); |
|||
await this.getUserSer(); |
|||
if (this.userSer) { |
|||
if (this.userSer.name) { |
|||
this.platform.manName = this.userSer.name; |
|||
} |
|||
if (this.userSer.phone) { |
|||
this.platform.tel = this.userSer.phone; |
|||
} |
|||
if (this.userSer.companyName) { |
|||
this.platform.companyName = this.userSer.companyName; |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
// 显示表单输入框 |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
// 验证电话 |
|||
changePhone(e) { |
|||
this.platform.tel = e.target.value; |
|||
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
|||
}, |
|||
// 点击确定 |
|||
handleOk() { |
|||
if (!this.platform.manName) { |
|||
this.$message.error('请输入联系人'); |
|||
} else if (!this.platform.tel) { |
|||
this.$message.error('请输入联系电话'); |
|||
} else if (!this.platform.code) { |
|||
this.$message.error('请输入验证码'); |
|||
} else if (!this.platform.describe) { |
|||
this.$message.error('请输入项目信息简述'); |
|||
} else { |
|||
if (this.platform.isTel) { |
|||
for (var i = 0; i < this.fileList.length; i++) { |
|||
this.platform.files = this.platform.files.concat(this.fileList[i].response.data[0].id); |
|||
} |
|||
this.subMitAdd(); |
|||
// console.log(this.platform.files); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
}, |
|||
// 加入接口 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const params = { |
|||
param: { |
|||
code: this.platform.code, |
|||
companyName: this.platform.companyName, |
|||
contactName: this.platform.manName, |
|||
contactPhone: this.platform.tel, |
|||
description: this.platform.describe, |
|||
filesId: this.platform.files, |
|||
serviceId: this.typeData.Id, |
|||
type: this.typeData.type, |
|||
}, |
|||
}; |
|||
const res = await serviceApply(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('申请成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
for (let key in this.platform) { |
|||
this.platform[key] = ''; |
|||
} |
|||
this.platform.isTel = false; |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
// 获取验证码 |
|||
async getCode() { |
|||
console.log(111); |
|||
try { |
|||
const params = { |
|||
phone: this.platform.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
// throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
console.log(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(); |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
</style> |
@ -1,81 +0,0 @@ |
|||
// 合作伙伴 |
|||
.logo-box{ |
|||
width: 22%; |
|||
margin-right: 4%; |
|||
border-radius: 4px; |
|||
margin-bottom: 50px; |
|||
|
|||
.logo-pic-box{ |
|||
height: 90px; |
|||
width: 90px; |
|||
border-radius: 50%; |
|||
background: #fff; |
|||
line-height: 90px; |
|||
text-align: center; |
|||
box-shadow: 6px 6px 6px #eee; |
|||
|
|||
.logo-pic{ |
|||
height: 70px |
|||
} |
|||
|
|||
.logo-text{ |
|||
height: 100%; |
|||
font-size: 12px; |
|||
line-height: 20px; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
.logo-box1{ |
|||
margin-right: 0!important; |
|||
} |
|||
|
|||
// 衍生企业 |
|||
.enterprise-bg{ |
|||
width: 100%; |
|||
background: url('../../assets/enterprise-banner.png') right no-repeat; |
|||
background-size: 100% 100%; |
|||
} |
|||
|
|||
.enterprise-box{ |
|||
width: 26%; |
|||
height: 382px; |
|||
margin-right: 11%; |
|||
position: relative; |
|||
padding: 0 16px; |
|||
|
|||
.enterprise-pic{ |
|||
height: 166px |
|||
} |
|||
|
|||
.enterprise-txt{ |
|||
display: -webkit-box; |
|||
overflow: hidden; |
|||
white-space: normal !important; |
|||
text-overflow: ellipsis; |
|||
word-wrap: break-word; |
|||
-webkit-line-clamp: 3; |
|||
-webkit-box-orient: vertical; |
|||
text-align: justify; |
|||
line-height: 28px; |
|||
} |
|||
|
|||
.enterprise-more{ |
|||
position: absolute; |
|||
bottom: 0; |
|||
right: 12px; |
|||
} |
|||
} |
|||
|
|||
.enterprise-box1{ |
|||
margin-right: 0!important; |
|||
} |
|||
|
|||
.enterprise-page >>> .ant-pagination-item-active{ |
|||
background: #13ACC4; |
|||
} |
|||
|
|||
.enterprise-page >>> .ant-pagination-item-active a{ |
|||
color: #fff; |
|||
} |
@ -1,97 +0,0 @@ |
|||
<!-- |
|||
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 pointer" |
|||
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 justify-center" |
|||
v-for="(list,i) in item.backendSearchList" |
|||
> |
|||
<div class="logo-pic-box"> |
|||
<img :src="list.logoUrl" class="logo-pic pa-2" v-if="list.logoUrl" /> |
|||
<div class="d-flex flex-column justify-center logo-text" v-else>{{ list.name }}</div> |
|||
</div> |
|||
<div class="font-16 title-color mt-3">{{ list.name }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
import CompanyProfile from './CompanyProfile.vue'; |
|||
export default { |
|||
name: 'PartnerShip', |
|||
components: { CompanyProfile }, |
|||
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); |
|||
this.showProfile = true; |
|||
}, |
|||
|
|||
closeProfile() { |
|||
this.showProfile = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
@import './PartnerShip.styl'; |
|||
</style> |
@ -1,132 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div :class="(index + 1) % 4 === 0 ? 'margin-0' : ''" :key="index" class="item-box" v-for="(item, index) in list"> |
|||
<p @click="detail(item.id)" class="font-24 my-3" style="cursor: pointer">{{ item.name }}</p> |
|||
<p @click="detail(item.id)" class="font-16" style="color: rgba(0, 0, 0, 0.45); cursor: pointer">编号:{{ item.identifier }}</p> |
|||
<p class="font-16 baseColor item-more"> |
|||
<!-- <a-button type="primary" style="cursor: pointer">转化意向填报</a-button> --> |
|||
<intention-model style="cursor: pointer" :type-data="getId(item.id)" /> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<div class="inner"> |
|||
<a-pagination |
|||
:current="achCurrent" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 12" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations, mapState } from 'vuex'; |
|||
import { selRes } from 'config/api'; |
|||
import IntentionModel from '../Introduce/IntentionModel.vue'; |
|||
export default { |
|||
name: 'PlatformList', |
|||
components: { IntentionModel }, |
|||
data() { |
|||
return { |
|||
list: [], |
|||
pageSize: 12, |
|||
total: 0, |
|||
typeData: { |
|||
type: 2, |
|||
Id: '', |
|||
}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['achList', 'achIpt', 'achCurrent']), |
|||
watch: { |
|||
achList(val) { |
|||
this.getData(); |
|||
}, |
|||
achIpt(val) { |
|||
if (val.isBtn === 1) { |
|||
this.getData(); |
|||
} |
|||
}, |
|||
}, |
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setAchCurrent', 'setAchId']), |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.setAchCurrent(current); |
|||
this.getData(); |
|||
}, |
|||
// 获取成果列表 |
|||
async getData() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
content: this.achIpt.content, |
|||
modelIds: this.achList, |
|||
pageNum: this.achCurrent, |
|||
pageSize: 12, |
|||
}, |
|||
}; |
|||
const res = await selRes(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 点击查看详情 |
|||
detail(id) { |
|||
this.setAchId(id); |
|||
this.$router.push('/NewPlatform/AchDet'); |
|||
}, |
|||
getId(Id) { |
|||
return (this.typeData = { |
|||
type: 2, |
|||
Id, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
position: relative; |
|||
width: 20.5%; |
|||
background: #fff; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
margin-bottom: 40px; |
|||
padding: 10px; |
|||
padding-bottom: 60px; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0% !important; |
|||
} |
|||
|
|||
.item-more { |
|||
position: absolute; |
|||
bottom: 10px; |
|||
right: 10px; |
|||
text-align: right; |
|||
margin-bottom: 0 !important; |
|||
margin-top: 40px; |
|||
} |
|||
</style> |
@ -1,238 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box mb-8" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.picUrl" style="height: 220px; width: 100%" v-if="item.picUrl" /> |
|||
<img :src="item.visitLocation" style="height: 220px; width: 100%" v-else /> |
|||
<p class="font-24 my-4 title">{{ item.name }}</p> |
|||
<p |
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p> |
|||
</div> |
|||
</div> |
|||
<div class="inner"> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 8" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations, mapState } from 'vuex'; |
|||
import { selInstrument, searchFront, selProduct } from 'config/api'; |
|||
export default { |
|||
name: 'PlatformList', |
|||
data() { |
|||
return { |
|||
list: [], |
|||
pageSize: 8, |
|||
total: 20, |
|||
current: 1, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['listState', 'labList', 'LabIpt', 'insList', 'InsIpt', 'shareCurrent', 'productList', 'productIpt']), |
|||
watch: { |
|||
shareCurrent(val) { |
|||
console.log(val); |
|||
this.monitor(this.listState); |
|||
}, |
|||
labList(val) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
}, |
|||
LabIpt(val) { |
|||
if (this.LabIpt.isBtn === 1) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
} |
|||
}, |
|||
insList(val) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
}, |
|||
InsIpt(val) { |
|||
if (this.InsIpt.isBtn === 1) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
} |
|||
}, |
|||
productList(val) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
}, |
|||
productIpt(val) { |
|||
if (this.productIpt.isBtn === 1) { |
|||
if (this.shareCurrent === 1) { |
|||
this.monitor(this.listState); |
|||
} |
|||
this.current = 1; |
|||
this.setShareCurrent(1); |
|||
} |
|||
}, |
|||
}, |
|||
created() { |
|||
this.current = this.shareCurrent; |
|||
if (this.listState === 0) { |
|||
this.getSear(); |
|||
} else if (this.listState === 1) { |
|||
this.getSelI(); |
|||
} else { |
|||
this.getProductLists(); |
|||
} |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setShareCurrent']), |
|||
// 查询仪器列表 |
|||
async getSelI() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
content: this.InsIpt.content, // 搜索框内容 |
|||
modelIds: this.insList, // 分类ID数组 |
|||
pageNum: this.shareCurrent, |
|||
pageSize: this.pageSize, |
|||
}, |
|||
}; |
|||
const res = await selInstrument(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 查询实验室(研究院)列表 |
|||
async getSear() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
name: this.LabIpt.content, // 搜索框内容 |
|||
moldIds: this.labList, // 分类ID数组 |
|||
pageNum: this.shareCurrent, |
|||
pageSize: this.pageSize, |
|||
}, |
|||
}; |
|||
const res = await searchFront(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 查询孵化平台产品列表 |
|||
async getProductLists() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
content: this.productIpt.content, // 搜索框内容 |
|||
modelIds: this.productList, // 分类ID数组 |
|||
pageNum: this.shareCurrent, |
|||
pageSize: this.pageSize, |
|||
}, |
|||
}; |
|||
const res = await selProduct(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
this.setShareCurrent(this.current); |
|||
}, |
|||
// 监听触发搜索事件 |
|||
monitor(val) { |
|||
if (val === 0) { |
|||
this.getSear(); |
|||
} else if (val === 1) { |
|||
this.getSelI(); |
|||
} else { |
|||
this.getProductLists(); |
|||
} |
|||
}, |
|||
// 查看 研究院/仪器 详情 |
|||
jump(id) { |
|||
if (this.listState === 0) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/Institute', |
|||
name: 'Institute', |
|||
params: { id }, |
|||
}); |
|||
} else if (this.listState === 1) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/InsDet', |
|||
name: 'InsDet', |
|||
params: { id }, |
|||
}); |
|||
} else if (this.listState === 3) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/InsDet', |
|||
name: 'InsDet', |
|||
params: { id }, |
|||
}); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
|
|||
.title { |
|||
text-align: center; |
|||
} |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
</style> |
@ -1,16 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'About', |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped></style> |
@ -1,53 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="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 }, |
|||
|
|||
// mounted() { |
|||
// window.addEventListener('scroll', this.handleScroll); |
|||
// setTimeout(() => { |
|||
// document.querySelector('#nav').scrollIntoView({ |
|||
// behavior: 'smooth', // 平滑过渡 |
|||
// block: 'start', // 上边框与视窗顶部平齐 |
|||
// }); |
|||
// }, 2000); |
|||
// }, |
|||
|
|||
data() { |
|||
return { |
|||
title: '关于我们-公司介绍', |
|||
showPage: 11, |
|||
arr: [ |
|||
{ name: '关于我们', url: '/About/Introduce' }, |
|||
{ name: '公司介绍', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,42 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="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> |
@ -1,39 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div class="py-5 my-5"> |
|||
<partner-ship :title="title" :type-of-platform="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> |
@ -1,39 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div> |
|||
<derive-enterprise :title="title" :type-of-platform="typeOfPlatform" /> |
|||
</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: 10px auto 15px; |
|||
} |
|||
</style> |
@ -1,62 +0,0 @@ |
|||
<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,123 +0,0 @@ |
|||
<template> |
|||
<div class="box"> |
|||
<div> |
|||
<div class="policy-title"> |
|||
<span>{{ actDetail.title }}</span> |
|||
</div> |
|||
<div class="policy-info"> |
|||
<span> |
|||
<a-icon |
|||
class="baseColor" |
|||
style="font-size: 14px; margin-right: 10px" |
|||
type="clock-circle" |
|||
/> |
|||
<span>{{ actDetail.releaseTime }}-{{ actDetail.closeTime }}</span> |
|||
</span> |
|||
<span style="margin-left: 60px"> |
|||
<a-icon class="baseColor" style="margin-right: 10px" type="environment" /> |
|||
<span>{{ actDetail.address }}</span> |
|||
</span> |
|||
</div> |
|||
<div class="policy-content" v-dompurify-html="actDetail.content"></div> |
|||
<enroll |
|||
:activityId="actDetail.activityId" |
|||
:actName="actDetail.title" |
|||
style="margin: 50px 25px" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import Enroll from './components/Enroll.vue'; |
|||
export default { |
|||
name: 'ActDetails', |
|||
components: { Enroll }, |
|||
data() { |
|||
return {}; |
|||
}, |
|||
computed: mapState('home', ['actDetail']), |
|||
created() {}, |
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.box { |
|||
width: 1260px; |
|||
position: relative; |
|||
margin: 80px auto; |
|||
background: #fff; |
|||
min-height: 1037px; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
padding-bottom: 480px; |
|||
} |
|||
|
|||
.back-btn { |
|||
width: 80px; |
|||
position: absolute; |
|||
right: 0; |
|||
} |
|||
|
|||
.policy-title { |
|||
height: 120px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
text-align: center; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
padding: 0 150px; |
|||
border-bottom: 1px solid #707070; |
|||
} |
|||
|
|||
.policy-info { |
|||
height: 76px; |
|||
line-height: 76px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.policy-content { |
|||
padding: 0 25px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-weight: 400; |
|||
font-family: Microsoft YaHei; |
|||
} |
|||
|
|||
.coms-style { |
|||
height: 480px; |
|||
padding: 25px 0; |
|||
border-top: 2px solid #ccc; |
|||
position: absolute; |
|||
bottom: 0; |
|||
width: 100%; |
|||
} |
|||
|
|||
.coms-top { |
|||
height: 280px; |
|||
padding: 0 25px; |
|||
overflow: auto; |
|||
box-shadow: 0 0 5px #ccc; |
|||
} |
|||
|
|||
.coms-btm { |
|||
margin-top: 20px; |
|||
padding: 0 10px; |
|||
} |
|||
|
|||
.coms-content { |
|||
background: rgba(19, 172, 196, 0.1); |
|||
} |
|||
|
|||
.sub { |
|||
position: absolute; |
|||
right: 20px; |
|||
bottom: 20px; |
|||
} |
|||
</style> |
@ -1,326 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<div class="search-list"> |
|||
<span> |
|||
<a-checkbox :checked="sta.ly === 1" @click="cSta('ly')">路演</a-checkbox> |
|||
<a-checkbox :checked="sta.jz === 1" @click="cSta('jz')">讲座</a-checkbox> |
|||
<a-checkbox :checked="sta.sl === 1" @click="cSta('sl')">沙龙</a-checkbox> |
|||
</span> |
|||
<a-input-search |
|||
@search="getData" |
|||
class="search" |
|||
enter-button="搜索" |
|||
placeholder="请输入..." |
|||
style="width: 381px" |
|||
v-model="iptCon" |
|||
/> |
|||
</div> |
|||
<div class="policy-box"> |
|||
<div :key="index" class="policy-list" v-for="(item, index) in lists"> |
|||
<div @click="jumpDetails(item)" class="date-box pointer" v-if="item.releaseTime"> |
|||
<p class="date-mon">{{ monthEnglish[item.releaseTime.split('-')[1] - 1] }}.</p> |
|||
<p class="date-day">{{ item.releaseTime.split(' ')[0].split('-')[2] }}</p> |
|||
</div> |
|||
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p> |
|||
<p @click="jumpDetails(item)" class="item-content pointer">{{ item.content }}</p> |
|||
<p class="source-time"> |
|||
<span class="source"> |
|||
时间:{{ item.releaseTime }} |
|||
<span v-if="item.closeTime">-{{ item.closeTime }}</span> |
|||
</span> |
|||
<span class="source">地点:{{ item.address }}</span> |
|||
</p> |
|||
<p class="original"> |
|||
<a-button |
|||
disabled |
|||
v-if="item.releaseTime && Date.parse(item.releaseTime) < Date.parse(nowData)" |
|||
>报名已结束</a-button> |
|||
<enroll :activityId="item.activityId" :actName="item.title" v-else /> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<a-pagination |
|||
:current="actCurrent" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 5" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
import { front } from 'config/api'; |
|||
import Enroll from './components/Enroll.vue'; |
|||
export default { |
|||
name: 'Activity', |
|||
components: { Enroll }, |
|||
data() { |
|||
return { |
|||
str: '这是活动公告界面', |
|||
total: 0, |
|||
pageSize: 5, |
|||
iptCon: '', |
|||
sta: { |
|||
ly: 0, |
|||
jz: 0, |
|||
sl: 0, |
|||
}, |
|||
aList: [], |
|||
lists: [], |
|||
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'], |
|||
nowData: '', |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']), |
|||
|
|||
created() { |
|||
this.iptCon = this.actIpCon; |
|||
this.aList = this.actList; |
|||
for (var i = 0; i < this.aList.length; i++) { |
|||
if (this.aList[i] === 0) { |
|||
this.sta.ly = 1; |
|||
} |
|||
if (this.aList[i] === 1) { |
|||
this.sta.jz = 1; |
|||
} |
|||
if (this.aList[i] === 2) { |
|||
this.sta.sl = 1; |
|||
} |
|||
} |
|||
this.getData(); |
|||
|
|||
// 获取当前时间 |
|||
var aData = new Date(); |
|||
console.log(aData); //Wed Aug 21 2019 10:00:58 GMT+0800 (中国标准时间) |
|||
this.nowData = |
|||
aData.getFullYear() + |
|||
'-' + |
|||
(aData.getMonth() + 1) + |
|||
'-' + |
|||
aData.getDate() + |
|||
' ' + |
|||
aData.getHours() + |
|||
':' + |
|||
aData.getMinutes() + |
|||
':' + |
|||
aData.getSeconds(); |
|||
console.log(this.nowData); //2019-8-20 |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']), |
|||
// 获取活动公告列表 |
|||
async getData() { |
|||
try { |
|||
this.setActIpCon(this.iptCon); |
|||
const params = { |
|||
param: { |
|||
activityType: this.actList, |
|||
pageNum: this.actCurrent, |
|||
pageSize: 5, |
|||
titleKey: this.iptCon, |
|||
}, |
|||
}; |
|||
const res = await front(params); |
|||
const { data, msg, code } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 改变当前所选类型 |
|||
cSta(index) { |
|||
this.aList = []; |
|||
if (this.sta[index] === 0) { |
|||
this.sta[index] = 1; |
|||
console.log(this.sta); |
|||
} else { |
|||
this.sta[index] = 0; |
|||
console.log(this.sta); |
|||
} |
|||
if (this.sta.ly === 1) { |
|||
this.aList = this.aList.concat(0); |
|||
} |
|||
if (this.sta.jz === 1) { |
|||
this.aList = this.aList.concat(1); |
|||
} |
|||
if (this.sta.sl === 1) { |
|||
this.aList = this.aList.concat(2); |
|||
} |
|||
this.setActList(this.aList); |
|||
this.getData(); |
|||
}, |
|||
|
|||
// 改变当前显示页数 |
|||
onShowSizeChange(current, size) { |
|||
this.setActCurrent(current); |
|||
this.getData(); |
|||
}, |
|||
|
|||
// 跳转到详情界面 |
|||
jumpDetails(item) { |
|||
this.setActDetail(item); |
|||
this.$router.push('/ActDetails'); |
|||
}, |
|||
|
|||
// 转换时间戳 |
|||
formatDate() { |
|||
var date = new Date('2020-04-07 18:08:58'); |
|||
// 有三种方式获取 |
|||
var time1 = date.getTime(); |
|||
var time2 = date.valueOf(); |
|||
var time3 = Date.parse(date); |
|||
console.log(time1); //1586254138000 |
|||
console.log(time2); //1586254138000 |
|||
console.log(time3); //1586254138000 |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.search-list { |
|||
height: 72px; |
|||
line-height: 72px; |
|||
position: relative; |
|||
padding-left: 24px; |
|||
background: #fff; |
|||
} |
|||
|
|||
.search { |
|||
position: absolute; |
|||
right: 24px; |
|||
top: 20px; |
|||
} |
|||
|
|||
.policy-box { |
|||
.policy-list { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 238px; |
|||
overflow: hidden; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
margin-top: 24px; |
|||
padding: 25px; |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
margin-left: 200px; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.item-content { |
|||
margin-left: 200px; |
|||
text-indent: 2em; |
|||
font-size: 16px; |
|||
line-height: 36px; |
|||
color: rgba(0, 0, 0, 0.35); |
|||
font-family: Microsoft YaHei; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.source { |
|||
cursor: pointer; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
opacity: 1; |
|||
margin-right: 24px; |
|||
} |
|||
|
|||
.time { |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.25); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.original { |
|||
position: absolute; |
|||
right: 25px; |
|||
bottom: 25px; |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
opacity: 1; |
|||
margin-bottom: 0; |
|||
|
|||
span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
.date-box { |
|||
height: 188px !important; |
|||
width: 188px !important; |
|||
position: absolute !important; |
|||
top: 0 !important; |
|||
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
text-align: center; |
|||
box-shadow: none !important; |
|||
padding: 25px; |
|||
margin-top: 24px; |
|||
|
|||
p { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.date-mon { |
|||
font-size: 40px; |
|||
height: 40px; |
|||
line-height: 40px; |
|||
font-weight: 500; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.date-day { |
|||
font-size: 70px; |
|||
height: 80px; |
|||
line-height: 80px; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.source-time { |
|||
margin-left: 200px; |
|||
position: absolute; |
|||
bottom: 26px; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 68px; |
|||
text-align: right; |
|||
} |
|||
</style> |
@ -1,323 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button @click="showModal" type="primary">立即报名</a-button> |
|||
|
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:title="title" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
width="50%" |
|||
> |
|||
<a-form :form="form"> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="活动名称" |
|||
> |
|||
<a-input :value="actName" disabled /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="申请单位" |
|||
required |
|||
> |
|||
<a-input placeholder="请输入申请单位..." v-model.trim="platform.companyName" /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
class="mb-3" |
|||
label="参加人员" |
|||
required |
|||
> |
|||
<div :key="index" class="d-flex flex-nowrap mb-3" v-for="(item,index) in people"> |
|||
<a-input class="flex-1 mr-3" placeholder="姓名" v-model.trim="item.name" /> |
|||
<a-input class="flex-1 mr-3" placeholder="职称" v-model.trim="item.duties" /> |
|||
<a-input class="flex-1 mr-3" placeholder="职务" v-model.trim="item.positional" /> |
|||
<a-button |
|||
@click="changePerson(index)" |
|||
icon="plus" |
|||
type="link" |
|||
v-if="index === people.length -1" |
|||
/> |
|||
</div> |
|||
</a-form-item> |
|||
|
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="联系人" |
|||
required |
|||
> |
|||
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
|||
</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="platform.code" /> |
|||
<a-button |
|||
class="code_img ml-2" |
|||
disabled |
|||
type="primary" |
|||
v-if="showInterval" |
|||
>重新发送 {{ interval }}</a-button> |
|||
<a-button |
|||
:disabled="platform.isTel === false" |
|||
@click="getCode" |
|||
class="code_img ml-2" |
|||
type="primary" |
|||
v-else |
|||
>获取验证码</a-button> |
|||
</div> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import { apply } from 'config/api'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'Enroll', |
|||
props: { |
|||
activityId: { |
|||
type: Number, |
|||
default: 0, |
|||
}, |
|||
actName: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
visible: false, |
|||
title: '活动报名', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
// 参加人员 |
|||
people: [ |
|||
{ |
|||
name: '', |
|||
duties: '', |
|||
positional: '', |
|||
}, |
|||
], |
|||
platform: { |
|||
companyName: '', // 申请单位 |
|||
manName: '', // 联系人 |
|||
tel: '', // 联系电话 |
|||
code: '', // 验证码 |
|||
isTel: false, |
|||
}, |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('user', ['picCode']), |
|||
}, |
|||
|
|||
async created() { |
|||
this.sendPicCode(); |
|||
await this.getUserSer(); |
|||
if (this.userSer) { |
|||
if (this.userSer.name) { |
|||
this.platform.manName = this.userSer.name; |
|||
} |
|||
if (this.userSer.phone) { |
|||
this.platform.tel = this.userSer.phone; |
|||
} |
|||
if (this.userSer.companyName) { |
|||
this.platform.companyName = this.userSer.companyName; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
|
|||
changePerson(index) { |
|||
// if (this.people[index].name && this.people[index].positional && this.people[index].duties) { |
|||
const a = { name: '', positional: '', duties: '' }; |
|||
this.people.push(a); |
|||
// } |
|||
}, |
|||
// 显示表单输入框 |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
// 验证电话 |
|||
changePhone(e) { |
|||
this.platform.tel = e.target.value; |
|||
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
|||
}, |
|||
// 点击确定 |
|||
handleOk() { |
|||
if (!this.platform.companyName) { |
|||
this.$message.error('请输入申请单位'); |
|||
} else if (!this.people[0].name || !this.people[0].positional || !this.people[0].duties) { |
|||
this.$message.error('请至少输入一名参加人员'); |
|||
} else if (!this.platform.tel) { |
|||
this.$message.error('请输入联系电话'); |
|||
} else if (!this.platform.code) { |
|||
this.$message.error('请输入验证码'); |
|||
} else { |
|||
if (this.platform.isTel) { |
|||
this.subMitAdd(); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
}, |
|||
// 加入接口 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const { activityId, platform, people } = this; |
|||
people.forEach(item => { |
|||
item.activityId = activityId; |
|||
}); |
|||
const params = { |
|||
param: { |
|||
activityId, |
|||
code: platform.code, |
|||
companyName: platform.companyName, |
|||
contactName: platform.manName, |
|||
contactPhone: platform.tel, |
|||
peoples: people, |
|||
}, |
|||
}; |
|||
console.log('params: ', params); |
|||
const res = await apply(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('申请成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
for (let key in this.platform) { |
|||
this.platform[key] = ''; |
|||
} |
|||
this.platform.isTel = false; |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
// 获取验证码 |
|||
async getCode() { |
|||
console.log(111); |
|||
try { |
|||
const params = { |
|||
phone: this.platform.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
// throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
console.log(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> |
@ -1,13 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
@ -1,240 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="search-background"> |
|||
<div class="d-flex"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">技术领域:</span> |
|||
<span |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
:key="index" |
|||
@click="choose(index)" |
|||
class="ins-name" |
|||
v-for="(item, index) in list" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="pro-box" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<p class="pro-title">{{ item.title }}</p> |
|||
<p class="pro-content">{{ item.content }}</p> |
|||
<p class="pro-time">时间:{{ item.time }}</p> |
|||
</div> |
|||
</div> |
|||
<div class="inner"> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 8" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Release', |
|||
components: { HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '发布界面', |
|||
title: '结果公告', |
|||
typeOfPlatform: '创新挑战', |
|||
arr: [ |
|||
{ name: '创新挑战', url: '/Challenge/Solicitation' }, |
|||
{ name: '结果公告', url: '' }, |
|||
], |
|||
current: 1, |
|||
pageSize: 8, |
|||
total: 10, |
|||
list: [ |
|||
{ |
|||
id: 1, |
|||
name: '功能食品', |
|||
isActive: false, |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: '生物医药', |
|||
isActive: false, |
|||
}, |
|||
{ |
|||
id: 3, |
|||
name: '大健康', |
|||
isActive: false, |
|||
}, |
|||
], |
|||
lists: [ |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: 'XXX挑战成功', |
|||
time: '2020-11-20', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
choose(index) { |
|||
const that = this; |
|||
// that.achList = []; |
|||
const { list } = this; |
|||
list[index].isActive = !list[index].isActive; |
|||
this.list = [...list]; |
|||
// for (let i = 0; i < list.length; i++) { |
|||
// if (list[i].isActive) { |
|||
// this.achList.push(list[i].id); |
|||
// } |
|||
// } |
|||
// this.setAchList(this.achList); |
|||
}, |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.search-background { |
|||
background: rgba(0, 0, 0, 0.02); |
|||
border: 1px solid rgba(0, 0, 0, 0.06); |
|||
height: auto; |
|||
padding: 0 20px; |
|||
width: 82%; |
|||
margin: 40px auto; |
|||
line-height: 44px; |
|||
} |
|||
|
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.ins-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.ins-name { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
padding: 0 10px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.act-color { |
|||
color: #13ACC4 !important; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0% !important; |
|||
} |
|||
|
|||
.pro-box { |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
height: auto; |
|||
background: #FFFFFF; |
|||
padding: 24px 20px; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
position: relative; |
|||
margin-bottom: 20px; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.pro-title { |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.pro-content { |
|||
font-size: 30px; |
|||
overflow: hidden; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
margin-bottom: 60px; |
|||
opacity: 1; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 5; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.pro-time { |
|||
position: absolute; |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
opacity: 1; |
|||
bottom: 0; |
|||
} |
|||
|
|||
.pro-btn { |
|||
position: absolute; |
|||
bottom: 24px; |
|||
width: 100px; |
|||
} |
|||
</style> |
@ -1,249 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="search-background"> |
|||
<div class="d-flex"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">技术领域:</span> |
|||
<span |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
:key="index" |
|||
@click="choose(index)" |
|||
class="ins-name" |
|||
v-for="(item, index) in list" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="pro-box" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<p class="pro-title">{{ item.title }}</p> |
|||
<p class="pro-content">{{ item.content }}</p> |
|||
<p class="pro-time">时间:{{ item.time }}</p> |
|||
<a-button class="pro-btn" type="primary">揭榜</a-button> |
|||
</div> |
|||
</div> |
|||
<div class="inner"> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 8" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Release', |
|||
components: { HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '项目发布', |
|||
typeOfPlatform: '创新挑战', |
|||
arr: [ |
|||
{ name: '创新挑战', url: '/Challenge/Solicitation' }, |
|||
{ name: '项目发布', url: '' }, |
|||
], |
|||
str: '发布界面', |
|||
current: 1, |
|||
pageSize: 8, |
|||
total: 10, |
|||
list: [ |
|||
{ |
|||
id: 1, |
|||
name: '功能食品', |
|||
isActive: false, |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: '生物医药', |
|||
isActive: false, |
|||
}, |
|||
{ |
|||
id: 3, |
|||
name: '大健康', |
|||
isActive: false, |
|||
}, |
|||
], |
|||
lists: [ |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
{ |
|||
title: '需求标题', |
|||
content: |
|||
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容', |
|||
time: '2020-11-20', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
choose(index) { |
|||
const that = this; |
|||
// that.achList = []; |
|||
const { list } = this; |
|||
list[index].isActive = !list[index].isActive; |
|||
this.list = [...list]; |
|||
// for (let i = 0; i < list.length; i++) { |
|||
// if (list[i].isActive) { |
|||
// this.achList.push(list[i].id); |
|||
// } |
|||
// } |
|||
// this.setAchList(this.achList); |
|||
}, |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.search-background { |
|||
background: rgba(0, 0, 0, 0.02); |
|||
border: 1px solid rgba(0, 0, 0, 0.06); |
|||
height: auto; |
|||
padding: 0 20px; |
|||
width: 82%; |
|||
margin: 40px auto; |
|||
line-height: 44px; |
|||
} |
|||
|
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.ins-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.ins-name { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
padding: 0 10px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.act-color { |
|||
color: #13ACC4 !important; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0% !important; |
|||
} |
|||
|
|||
.pro-box { |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
height: 300px; |
|||
background: #FFFFFF; |
|||
padding: 24px 20px; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
position: relative; |
|||
margin-bottom: 20px; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.pro-title { |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.pro-content { |
|||
font-size: 16px; |
|||
overflow: hidden; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 5; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.pro-time { |
|||
position: absolute; |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
opacity: 1; |
|||
bottom: 60px; |
|||
} |
|||
|
|||
.pro-btn { |
|||
position: absolute; |
|||
bottom: 24px; |
|||
width: 100px; |
|||
} |
|||
</style> |
@ -1,71 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title">创新挑战</div> |
|||
<div class="top-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
</div> |
|||
<div class="center-box" style="margin-bottom: 160px"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">需求征集</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
<a-button class="center-btn" type="primary">需求填报</a-button> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Solicitation', |
|||
components: { HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '需求征集', |
|||
typeOfPlatform: '创新挑战', |
|||
arr: [ |
|||
{ name: '创新挑战', url: '/Challenge/Solicitation' }, |
|||
{ name: '需求征集', url: '' }, |
|||
], |
|||
str: '征集界面', |
|||
list: [], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.top-box { |
|||
background: -webkit-linear-gradient(left, #13ACC4, #A9C300) !important; |
|||
} |
|||
|
|||
.center-btn { |
|||
position: absolute; |
|||
left: 26%; |
|||
bottom: 100px; |
|||
} |
|||
</style> |
@ -1,54 +0,0 @@ |
|||
<template> |
|||
<div class="nav-box d-flex"> |
|||
<div v-for="(item, index) in list" :key="index" :class="activeNum === index ? 'nav-box-active' : ''" @click="jump(item.url)"> |
|||
{{ item.title }} |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'HNav', |
|||
data() { |
|||
return { |
|||
str: '导航条', |
|||
activeNum: 0, |
|||
list: [ |
|||
{ |
|||
title: '需求征集', |
|||
url: '/Challenge/Solicitation', |
|||
}, |
|||
{ |
|||
title: '项目发布', |
|||
url: '/Challenge/Release', |
|||
}, |
|||
{ |
|||
title: '结果公告', |
|||
url: '/Challenge/Notice', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/Challenge/Release') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/Challenge/Notice') { |
|||
this.activeNum = 2; |
|||
} 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,193 +0,0 @@ |
|||
<template> |
|||
<div class="box"> |
|||
<div> |
|||
<div class="policy-title"> |
|||
<span>{{ postDetail.title }}</span> |
|||
</div> |
|||
<div class="policy-info"> |
|||
<span> |
|||
<a-avatar |
|||
:size="20" |
|||
:src="postDetail.avatarUrl" |
|||
style="margin-top: -4px; margin-right: 10px" |
|||
/> |
|||
<span style="margin-right: 60px">{{ postDetail.userName }}</span> |
|||
<a-icon |
|||
class="baseColor" |
|||
style="font-size: 14px; margin-right: 10px" |
|||
type="clock-circle" |
|||
/> |
|||
<span>{{ postDetail.createdTime }}</span> |
|||
</span> |
|||
<span style="margin-left: 60px"> |
|||
<a-icon class="baseColor" style="margin-right: 10px" type="message" /> |
|||
<span>{{ postDetail.commentNum }}</span> |
|||
</span> |
|||
</div> |
|||
<div class="policy-content" v-dompurify-html="postDetail.content"></div> |
|||
</div> |
|||
<div class="coms-style"> |
|||
<div class="coms-top"> |
|||
<div :key="index" style="margin-top: 1em" v-for="(item, index) in coms"> |
|||
<p style="color: #999"> |
|||
<a-avatar |
|||
:size="20" |
|||
:src="item.avatarUrl" |
|||
alt |
|||
style="margin-top: -4px; margin-right: 4px" |
|||
/> |
|||
<span style="margin-right: 10px">{{ item.userName }}</span> |
|||
<span>{{ item.creatTime }}</span> |
|||
</p> |
|||
<span class="coms-content">{{ item.content }}</span> |
|||
</div> |
|||
</div> |
|||
<div class="coms-btm"> |
|||
<a-textarea style="height: 140px;min-height: 140px;max-height: 140px" v-model="comment" /> |
|||
<a-button @click="sub" class="sub" type="primary">提交</a-button> |
|||
</div> |
|||
<!-- <div class="txtara"> |
|||
<a-textarea placeholder="请输入..." :rows="4" v-model="comment" /> |
|||
<a-button class="txt-btn" type="primary" @click="sub(index)">提交</a-button> |
|||
</div>--> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import { selCommunity, insComment } from 'config/selComment'; |
|||
export default { |
|||
name: 'ComDetails', |
|||
data() { |
|||
return { |
|||
comment: '', |
|||
coms: {}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['postDetail']), |
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
async getData() { |
|||
// 查看评论 |
|||
try { |
|||
const params = { param: { commentId: this.postDetail.id } }; |
|||
const res = await selCommunity(params); |
|||
const { msg, data, code } = res.data; |
|||
if (code === 200) { |
|||
this.coms = data; |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
// 跟帖(发表评论) |
|||
async sub(index) { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
communityId: this.postDetail.id, |
|||
content: this.comment, |
|||
}, |
|||
}; |
|||
const res = await insComment(params); |
|||
const { msg, data, code } = res.data; |
|||
if (code === 200) { |
|||
this.comment = ''; |
|||
this.$message.success('评论成功'); |
|||
this.getData(); |
|||
} else { |
|||
console.log(msg); |
|||
this.$message.error('评论失败'); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
this.$message.error('评论失败'); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.box { |
|||
width: 1260px; |
|||
position: relative; |
|||
margin: 80px auto; |
|||
background: #fff; |
|||
min-height: 1037px; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
padding-bottom: 480px; |
|||
} |
|||
|
|||
.back-btn { |
|||
width: 80px; |
|||
position: absolute; |
|||
right: 0; |
|||
} |
|||
|
|||
.policy-title { |
|||
height: 120px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
text-align: center; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
padding: 0 150px; |
|||
border-bottom: 1px solid #707070; |
|||
} |
|||
|
|||
.policy-info { |
|||
height: 76px; |
|||
line-height: 76px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.policy-content { |
|||
padding: 0 25px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-weight: 400; |
|||
font-family: Microsoft YaHei; |
|||
} |
|||
|
|||
.coms-style { |
|||
height: 480px; |
|||
padding: 25px 0; |
|||
border-top: 2px solid #ccc; |
|||
position: absolute; |
|||
bottom: 0; |
|||
width: 100%; |
|||
} |
|||
|
|||
.coms-top { |
|||
height: 280px; |
|||
padding: 0 25px; |
|||
overflow: auto; |
|||
box-shadow: 0 0 5px #ccc; |
|||
} |
|||
|
|||
.coms-btm { |
|||
margin-top: 20px; |
|||
padding: 0 10px; |
|||
} |
|||
|
|||
.coms-content { |
|||
background: rgba(19, 172, 196, 0.1); |
|||
} |
|||
|
|||
.sub { |
|||
position: absolute; |
|||
right: 20px; |
|||
bottom: 20px; |
|||
} |
|||
</style> |
@ -1,268 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<div class="search-list"> |
|||
<a-radio-group v-model="value"> |
|||
<a-radio :style="radioStyle" :value="1">主题论坛</a-radio> |
|||
<a-radio :style="radioStyle" :value="2">创新社区</a-radio> |
|||
<a-radio :style="radioStyle" :value="3">孵化社区</a-radio> |
|||
<a-radio :style="radioStyle" :value="4">产业社区</a-radio> |
|||
</a-radio-group> |
|||
<a-input-search |
|||
@search="searchData" |
|||
class="search" |
|||
enter-button="搜索" |
|||
placeholder="请输入..." |
|||
style="width: 381px" |
|||
v-model="iptCon" |
|||
/> |
|||
<a-button @click="jumpPost()" class="btn" type="primary">发帖</a-button> |
|||
</div> |
|||
<div :key="index" class="post" v-for="(item, index) in lists"> |
|||
<p class="post-title">{{ item.title }}</p> |
|||
<p style="color: rgba(0, 0, 0, 0.45)"> |
|||
<span> |
|||
<!-- <a-icon type="user" class="baseColor" /> --> |
|||
<a-avatar :size="20" :src="item.avatarUrl" style="margin-top: -4px" /> |
|||
{{ item.userName }} |
|||
</span> |
|||
<span style="margin-left: 20px">{{ item.createdTime }}</span> |
|||
<span class="baseColor" style="margin-left: 20px"> |
|||
<a-icon type="message" /> |
|||
{{ item.commentNum }} |
|||
</span> |
|||
</p> |
|||
<div class="d-flex flex-nowrap"> |
|||
<img :src="item.visitLocation" alt class="post-img" v-if="item.visitLocation" /> |
|||
<div class="post-content" v-dompurify-html="item.content"></div> |
|||
</div> |
|||
<p class="look-down baseColor"> |
|||
<span @click="getDet(item.id, index)"> |
|||
查看详情 |
|||
<a-icon type="arrow-right" /> |
|||
</span> |
|||
</p> |
|||
<div class="comment"> |
|||
<div :key="b" v-for="(a, b) in coms"> |
|||
<p style="padding-left: 20px"> |
|||
<a-avatar :size="20" :src="a.avatarUrl" style="margin-top: -4px" /> |
|||
<span>{{ a.userName }}</span> |
|||
<span style="margin-left: 20px">{{ a.creatTime }}</span> |
|||
</p> |
|||
<p class="coms-con">{{ a.content }}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<a-pagination |
|||
:current="comCurrent" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 5" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations, mapState } from 'vuex'; |
|||
import { selComment } from 'config/selComment'; |
|||
|
|||
export default { |
|||
name: 'Community', |
|||
// components: { SearchList }, |
|||
data() { |
|||
return { |
|||
str: '这是交流社区界面', |
|||
radioStyle: { |
|||
height: '30px', |
|||
lineHeight: '30px', |
|||
}, |
|||
comment: '', |
|||
total: 0, |
|||
pageSize: 5, |
|||
value: 1, |
|||
iptCon: '', |
|||
showType: -1, |
|||
coms: [], |
|||
lists: [], |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['comCurrent', 'postVal', 'postIpCon']), |
|||
watch: { |
|||
value(val) { |
|||
this.setPostVal(val - 1); |
|||
this.setComCurrent(1); |
|||
this.searchData(); |
|||
}, |
|||
}, |
|||
created() { |
|||
this.value = this.postVal + 1; |
|||
this.iptCon = this.postIpCon; |
|||
this.searchData(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setComCurrent', 'setPostDetail', 'setPostVal', 'setPostIpCon']), |
|||
// 展开帖子,并且评论 |
|||
async getDet(id, index) { |
|||
this.setPostDetail(this.lists[index]); |
|||
this.$router.push('/ComDetails'); |
|||
}, |
|||
// 查询当前页帖子列表(5篇) |
|||
async searchData() { |
|||
try { |
|||
this.setPostIpCon(this.iptCon); |
|||
const params = { |
|||
param: { |
|||
category: this.value - 1, |
|||
pageNum: this.comCurrent, |
|||
pageSize: 5, |
|||
title: this.iptCon, |
|||
}, |
|||
}; |
|||
const res = await selComment(params); |
|||
const { msg, data, code } = res.data; |
|||
if (code === 200) { |
|||
console.log(data); |
|||
this.lists = data.list; |
|||
this.total = parseInt(data.total); |
|||
} else { |
|||
console.log(msg); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.setComCurrent(current); |
|||
this.searchData(); |
|||
}, |
|||
|
|||
// 发帖 |
|||
jumpPost() { |
|||
this.$router.push('/Posting'); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.post-title { |
|||
// width: 165px; |
|||
height: 26px; |
|||
font-size: 20px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 26px; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.search-list { |
|||
height: 72px; |
|||
line-height: 72px; |
|||
padding: 0 24px; |
|||
position: relative; |
|||
background: #fff; |
|||
box-shadow: 0 0 10px #ccc; |
|||
} |
|||
|
|||
.search { |
|||
position: absolute; |
|||
right: 110px; |
|||
top: 20px; |
|||
} |
|||
|
|||
.btn { |
|||
width: 75px; |
|||
height: 32px; |
|||
position: absolute; |
|||
right: 25px; |
|||
top: 20px; |
|||
} |
|||
|
|||
.post { |
|||
margin-top: 24px; |
|||
width: 100%; |
|||
padding: 25px; |
|||
position: relative; |
|||
overflow: hidden; |
|||
height: 270px; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
transition: all 0.25s; |
|||
} |
|||
|
|||
.post-img { |
|||
width: 233px; |
|||
height: 128px; |
|||
} |
|||
|
|||
.post-content { |
|||
margin-left: 30px; |
|||
overflow: hidden; |
|||
height: 110px; |
|||
text-indent: 2em; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 5; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.look-down { |
|||
position: absolute; |
|||
right: 25px; |
|||
bottom: 10px; |
|||
cursor: pointer; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 48px; |
|||
text-align: right; |
|||
} |
|||
|
|||
.comment { |
|||
min-height: 107px; |
|||
max-height: 207px; |
|||
overflow: auto; |
|||
width: 1210px; |
|||
opacity: 1; |
|||
background: #FAFAFA; |
|||
margin-top: 60px; |
|||
padding: 16px 0; |
|||
} |
|||
|
|||
.txtara { |
|||
margin-top: 20px; |
|||
position: relative; |
|||
} |
|||
|
|||
.txt-btn { |
|||
position: absolute; |
|||
right: 0; |
|||
bottom: 0; |
|||
} |
|||
|
|||
.coms-con { |
|||
background: rgba(19, 172, 196, 0.1); |
|||
line-height: 24px; |
|||
text-indent: 2em; |
|||
margin: 0 20px; |
|||
} |
|||
</style> |
@ -1,142 +0,0 @@ |
|||
<template> |
|||
<div class="wrap"> |
|||
<!-- {{ str }} --> |
|||
<h2>标题:</h2> |
|||
<a-input style="margin-bottom: 20px" v-model.trim="title" /> |
|||
<h2>封面图片</h2> |
|||
<a-upload |
|||
:action="action" |
|||
:default-file-list="fileList" |
|||
@change="fileChange" |
|||
list-type="picture" |
|||
name="files" |
|||
> |
|||
<a-button v-show="fileList.length === 0"> |
|||
<a-icon type="upload" />点击上传 |
|||
</a-button> |
|||
</a-upload> |
|||
<h2 style="margin-top: 20px">内容:</h2> |
|||
<div class="edit_container" style="height: auto; margin-bottom: 40px"> |
|||
<quill-editor |
|||
:options="editorOption" |
|||
@blur="onEditorBlur($event)" |
|||
@change="onEditorChange($event)" |
|||
@focus="onEditorFocus($event)" |
|||
ref="myQuillEditor" |
|||
v-model="content" |
|||
></quill-editor> |
|||
</div> |
|||
<a-button @click="subMit" type="primary">发表</a-button> |
|||
<router-link @click="subMit" style="margin-left: 40px" tag="a-button" to="Community">取消</router-link> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import { quillEditor } from 'vue-quill-editor'; //调用编辑器 |
|||
import 'quill/dist/quill.core.css'; |
|||
import 'quill/dist/quill.snow.css'; |
|||
import 'quill/dist/quill.bubble.css'; |
|||
import { upload } from 'config/api'; |
|||
import { addComment } from 'config/selComment'; |
|||
|
|||
export default { |
|||
name: 'Posting', |
|||
components: { quillEditor }, |
|||
data() { |
|||
return { |
|||
str: '发帖界面', |
|||
title: '', |
|||
content: ``, |
|||
editorOption: { |
|||
placeholder: '请在这里输入', |
|||
modules: { |
|||
toolbar: [ |
|||
['bold', 'italic', 'underline', 'strike'], //加粗,斜体,下划线,删除线 |
|||
['blockquote', 'code-block'], //引用,代码块 |
|||
[{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小 |
|||
[{ list: 'ordered' }, { list: 'bullet' }], //列表 |
|||
[{ script: 'sub' }, { script: 'super' }], // 上下标 |
|||
[{ indent: '-1' }, { indent: '+1' }], // 缩进 |
|||
[{ direction: 'rtl' }], // 文本方向 |
|||
[{ size: ['small', false, 'large', 'huge'] }], // 字体大小 |
|||
[{ header: [1, 2, 3, 4, 5, 6, false] }], //几级标题 |
|||
[{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色 |
|||
[{ font: [] }], //字体 |
|||
[{ align: [] }], //对齐方式 |
|||
['clean'], //清除字体样式 |
|||
['image', 'video'], //上传图片、上传视频 |
|||
], |
|||
}, |
|||
}, |
|||
action: upload, |
|||
fileList: [], // 附件列表 |
|||
files: '', // 附件Id |
|||
}; |
|||
}, |
|||
computed: { |
|||
...mapState('home', ['postDetail', 'postVal']), |
|||
editor() { |
|||
return this.$refs.myQuillEditor.quill; |
|||
}, |
|||
}, |
|||
methods: { |
|||
onEditorReady(editor) { |
|||
// 准备编辑器 |
|||
}, |
|||
onEditorBlur() {}, // 失去焦点事件 |
|||
onEditorFocus() {}, // 获得焦点事件 |
|||
onEditorChange() { |
|||
// 内容改变事件 |
|||
// console.log(this.content); |
|||
}, |
|||
// 上传图片事件 |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
if (info.file.status === 'done') { |
|||
this.files = []; |
|||
this.files = info.fileList[0].response.data[0].id; |
|||
console.log(this.files); |
|||
} |
|||
}, |
|||
// 发帖 |
|||
async subMit() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
content: this.content, |
|||
category: this.postVal, |
|||
picId: this.files, |
|||
title: this.title, |
|||
}, |
|||
}; |
|||
const res = await addComment(params); |
|||
const { msg, data, code } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('发表成功'); |
|||
this.$router.push('/Community'); |
|||
} else { |
|||
this.$message.error('发表失败'); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" > |
|||
.wrap { |
|||
width: 1260px; |
|||
min-height: 1037px; |
|||
margin: 80px auto 28px auto; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.ql-editor { |
|||
min-height: 600px; |
|||
max-height: 800px; |
|||
} |
|||
</style> |
@ -1,47 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div class="white pa-5 my-5"> |
|||
<!-- <rich-text :title="title" /> --> |
|||
<div class="words-content"> |
|||
<img src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/fhcs.png" /> |
|||
</div> |
|||
</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: 'Incubator', |
|||
components: { Banner, HNav, BreadCrumb, RichText }, |
|||
data() { |
|||
return { |
|||
title: '孵化平台-孵化场所', |
|||
showPage: 45, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' }, |
|||
{ name: '孵化场所', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,120 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div @click="openModel()"> |
|||
<banner :show-page="showPage" class="pointer" /> |
|||
</div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div> |
|||
<div :key="index" style="margin-top: 50px;" v-for="(item, index) in list"> |
|||
<div class="d-flex justify-space-between" v-if="index % 2 === 0"> |
|||
<div class="introduce-box"> |
|||
<p |
|||
@click="item.imgUrl ? jump(item.url) : openModel()" |
|||
class="introduce-title pointer" |
|||
>{{ item.title }}</p> |
|||
<p class="introduce-content" v-if="index === 0"> |
|||
实体空间由 |
|||
<span |
|||
@click="$router.push('/IncubationPlatform/Incubator')" |
|||
class="pointer baseColor" |
|||
>孵化场所</span>、 |
|||
<span |
|||
@click="$router.push('/IncubationPlatform/PublicLaboratory')" |
|||
class="pointer baseColor" |
|||
>公共实验室</span>、 |
|||
<span |
|||
@click="$router.push('/IncubationPlatform/PilotBase')" |
|||
class="pointer baseColor" |
|||
>中试基地</span>部分组成。 |
|||
</p> |
|||
<p |
|||
@click="item.imgUrl ? jump(item.url) : openModel()" |
|||
class="introduce-content pointer" |
|||
v-else |
|||
>{{ item.content }}</p> |
|||
</div> |
|||
<img |
|||
:src="item.imgUrl" |
|||
@click="item.url ? jump(item.url) : ''" |
|||
class="pointer" |
|||
style="width: 452px" |
|||
v-if="item.imgUrl" |
|||
/> |
|||
<!-- <a-button v-else style="width: 452px; height: 100%">123</a-button> --> |
|||
<add-model :value="1" ref="child" style="width: 452px" v-else /> |
|||
</div> |
|||
<div |
|||
@click="item.url ? jump(item.url) : ''" |
|||
class="d-flex justify-space-between pointer" |
|||
v-else |
|||
> |
|||
<img :src="item.imgUrl" style="width: 452px" /> |
|||
<div class="introduce-box"> |
|||
<p class="introduce-title">{{ item.title }}</p> |
|||
<p class="introduce-content">{{ item.content }}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</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 AddModel from '../components/AddModel.vue'; |
|||
|
|||
export default { |
|||
name: 'MakerSpace', |
|||
components: { BreadCrumb, HNav, Banner, AddModel }, |
|||
data() { |
|||
return { |
|||
showPage: 41, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '' }, |
|||
], |
|||
list: [ |
|||
{ |
|||
title: '实体空间', |
|||
content: '实体空间由孵化场所、公共实验室、中试基地部分组成。', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210106/9059bddfe0254a269bf8f575c917b199.png', |
|||
url: '/IncubationPlatform/MakerSpace/EntitySpace', |
|||
}, |
|||
{ |
|||
title: '虚拟空间', |
|||
content: |
|||
'虚拟众创空间主要面向非入驻实体空间从事功能食品、生物医药和大健康产业相关研发服务和生产的企业。虚拟众创空间依托绿谷数字化平台进行建设,入驻企业可享受实体众创空间的各种创新创业服务,参加相关创新创业活动。', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210106/73cba2c598e24bc99d4b988185138f44.png', |
|||
url: '/IncubationPlatform/MakerSpace/VirtualSpace', |
|||
}, |
|||
{ |
|||
title: '加入我们', |
|||
content: '绿谷众创空间有专业的团队,专业的资源,专业的服务,让我们一起做专业的事,让每一个梦想在这里腾飞。', |
|||
imgUrl: '', |
|||
url: '', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
jump(url) { |
|||
this.$router.push(url); |
|||
}, |
|||
|
|||
openModel() { |
|||
this.$refs.child[0].showModal(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,39 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div class="py-5 my-5"> |
|||
<partner-ship :title="title" :type-of-platform="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: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '合作伙伴', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,44 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="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: 'PilotBase', |
|||
components: { Banner, HNav, BreadCrumb, RichText }, |
|||
data() { |
|||
return { |
|||
title: '孵化平台-中试基地', |
|||
showPage: 43, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' }, |
|||
{ name: '中试基地', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,168 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div> |
|||
<div class="search-background"> |
|||
<div class="d-flex"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">产品类目:</span> |
|||
<span |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
:key="index" |
|||
@click="choose(index)" |
|||
class="ins-name" |
|||
v-for="(item, index) in productLists" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search |
|||
@search="searchProduct" |
|||
class="item-search" |
|||
enter-button="搜索" |
|||
placeholder="请输入" |
|||
v-model="productIpt" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<p class="font-bold-24">产品展示</p> |
|||
</div> |
|||
<platform-list /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import { selModel } from 'config/api'; |
|||
import PlatformList from 'components/PlatformList/PlatformList.vue'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
export default { |
|||
name: 'Products', |
|||
components: { BreadCrumb, HNav, PlatformList }, |
|||
data() { |
|||
return { |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '产品展示', url: '' }, |
|||
], |
|||
productIpt: '', // 产品搜索框内容 |
|||
productLists: [], // 产品类目 |
|||
productList: [], // 产品类型选择列表 |
|||
}; |
|||
}, |
|||
watch: { |
|||
productIpt(val) { |
|||
const obj = { |
|||
content: this.productIpt, |
|||
isBtn: 0, |
|||
}; |
|||
this.setProductIpt(obj); |
|||
}, |
|||
}, |
|||
created() { |
|||
const obj = { |
|||
content: '', |
|||
isBtn: 0, |
|||
}; |
|||
this.setListState(3); |
|||
this.setProductList([]); |
|||
this.setProductIpt(obj); |
|||
this.getType(3); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setProductIpt', 'setProductList', 'setListState']), |
|||
async getType(num) { |
|||
try { |
|||
const params = { param: { model: num } }; |
|||
const res = await selModel(params); |
|||
const { code, mst, data } = res.data; |
|||
if (code === 200) { |
|||
this.productLists = data; |
|||
for (let i = 0; i < this.productLists.length; i++) { |
|||
this.productLists[i].isActive = false; |
|||
} |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
|
|||
// 选中类型时触发 |
|||
choose(index) { |
|||
this.productList = []; |
|||
const { productLists } = this; |
|||
for (let i = 0; i < productLists.length; i++) { |
|||
productLists[i].isActive = false; |
|||
} |
|||
this.setListState(3); |
|||
productLists[index].isActive = !productLists[index].isActive; |
|||
this.productLists = [...productLists]; |
|||
for (let i = 0; i < productLists.length; i++) { |
|||
if (productLists[i].isActive) { |
|||
this.productList.push(productLists[i].id); |
|||
} |
|||
} |
|||
this.setProductList(this.productList); |
|||
}, |
|||
|
|||
// 搜索 |
|||
searchProduct() { |
|||
const { productLists } = this; |
|||
for (let i = 0; i < productLists.length; i++) { |
|||
productLists[i].isActive = false; |
|||
} |
|||
this.productLists = [...productLists]; |
|||
this.setListState(3); |
|||
this.productIpt = ''; |
|||
const obj = { |
|||
content: this.productIpt, |
|||
isBtn: 1, |
|||
}; |
|||
this.setProductList(obj); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.search-background { |
|||
background: rgba(0, 0, 0, 0.02); |
|||
border: 1px solid rgba(0, 0, 0, 0.06); |
|||
height: auto; |
|||
padding: 0 20px; |
|||
width: 100%; |
|||
margin: 40px auto; |
|||
line-height: 44px; |
|||
} |
|||
|
|||
.item-search { |
|||
width: 100%; |
|||
height: 32px; |
|||
} |
|||
|
|||
.ins-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.ins-name { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
padding: 0 10px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.act-color { |
|||
color: #13ACC4 !important; |
|||
} |
|||
</style> |
@ -1,44 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="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: 'PublicLaboratory', |
|||
components: { Banner, HNav, BreadCrumb, RichText }, |
|||
data() { |
|||
return { |
|||
title: '孵化平台-公共实验室', |
|||
showPage: 42, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' }, |
|||
{ name: '公共实验室', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,140 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="flow-path"> |
|||
<div class="flow-title">服务流程</div> |
|||
<div class="flow-content"> |
|||
<img src="~assets/image.png" style="width:100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box mb-8" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" /> |
|||
<p class="font-24 my-4">{{ item.name }}</p> |
|||
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p> |
|||
<p |
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p> |
|||
</div> |
|||
</div> |
|||
<div class="inner"> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 8" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import { selService } from 'config/api'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
export default { |
|||
name: 'Services', |
|||
components: { Banner, HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '创业服务', |
|||
showPage: 46, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '创业服务', url: '/IncubationPlatform/Services' }, |
|||
], |
|||
list: [], |
|||
current: 1, |
|||
pageSize: 8, |
|||
total: 0, |
|||
}; |
|||
}, |
|||
|
|||
created() { |
|||
this.getService(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setServiceArr']), |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
|
|||
// 获取服务列表 |
|||
async getService() { |
|||
try { |
|||
const params = { param: { serviceType: 2 } }; |
|||
const res = await selService(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.list = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(data); |
|||
} |
|||
}, |
|||
|
|||
// 查看 服务 详情 |
|||
jump(id) { |
|||
console.log(id); |
|||
this.setServiceArr([]); |
|||
this.setServiceArr(this.arr); |
|||
this.$router.push({ |
|||
path: '/NewPlatform/ServiceDet', |
|||
name: 'ServiceDet', |
|||
params: { id }, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.pagination { |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.item-content { |
|||
display: -webkit-box; |
|||
overflow: hidden; |
|||
white-space: normal !important; |
|||
text-overflow: ellipsis; |
|||
word-wrap: break-word; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
height: 60px; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
</style> |
@ -1,97 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<div class="py-5 my-5" v-if="teachers && teachers.length > 0"> |
|||
<div :key="teacher.categoryId" class="mb-4" v-for="teacher in teachers"> |
|||
<p class="font-bold-24 title-color">{{ teacher.categoryName }}</p> |
|||
<div class="d-flex flex-wrap mb-10" v-if="teacher.services && teacher.services.length"> |
|||
<div |
|||
:class="(index + 1) % 5 === 0 ? 'teacher-item1' : ''" |
|||
:key="index" |
|||
class="teacher-item font-24 mb-3" |
|||
v-for="(item, index) in teacher.services" |
|||
> |
|||
{{ item.name }} |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</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 { selTeacher } from 'config/api'; |
|||
|
|||
export default { |
|||
name: 'Tutor', |
|||
components: { Banner, HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '孵化平台-创业导师', |
|||
showPage: 44, |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '创业导师', url: '' }, |
|||
], |
|||
teachers: [], |
|||
}; |
|||
}, |
|||
|
|||
created() { |
|||
this.handleTeacher(); |
|||
}, |
|||
|
|||
methods: { |
|||
// 查询 导师 |
|||
async handleTeacher() { |
|||
try { |
|||
const res = await selTeacher(); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.teachers = data; |
|||
for (let i = 0; i < this.teachers.length; i++) { |
|||
const element = this.teachers[i]; |
|||
for (let j = 0; j < element.services.length; j++) { |
|||
for (let k = 0; k < element.services.length - j; k++) { |
|||
if (element.services[k].order > element.services[k + 1].order) { |
|||
let a = {}; |
|||
a = element.services[k + 1].order; |
|||
element.services[k + 1].order = element.services[k].order; |
|||
element.services[k].order = a; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.teacher-item { |
|||
width: 12%; |
|||
margin-right: 10%; |
|||
text-indent: 1em; |
|||
} |
|||
|
|||
.teacher-item1 { |
|||
margin-right: 0; |
|||
} |
|||
</style> |
@ -1,57 +0,0 @@ |
|||
<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: '/NewPlatform/Share', |
|||
}, |
|||
{ |
|||
title: '知识产权与技术转移转化服务平台', |
|||
url: '/NewPlatform/Transfer', |
|||
}, |
|||
{ |
|||
title: '创新服务', |
|||
url: '/NewPlatform/Develop', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/NewPlatform/Transfer') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/NewPlatform/Develop') { |
|||
this.activeNum = 2; |
|||
} 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,274 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title">实体众创空间</div> |
|||
<div class="top-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
</div> |
|||
<!-- 孵化场所 --> |
|||
<div @click="$router.push('/IncubationPlatform/Incubator')" class="center-box c-box pointer"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">孵化场所</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
孵化场所分为运营办公区、公共空间区、独立空间区和开放办公区。公共空间区包括路演厅 |
|||
(项目路演、知识培训、产品展示等多项功能)、会议室、洽谈室、第三空间(创业咖啡)。 |
|||
开放空间区按功能食品、生物医药、数字健康领域进行分区设置。 |
|||
</div> |
|||
</div> |
|||
<!-- 公共实验室 --> |
|||
<div @click="$router.push('/IncubationPlatform/PublicLaboratory')" class="center-box pointer"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">公共实验室</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
公共实验室位于太原市师范街50号山西省生物研究院有限公司,总面积1320平方米。 |
|||
建有“医药生物技术山西省重点实验室”、“山西省发酵工程中试基地”及“山西省乳品 |
|||
发酵中试基地”等省级科技创新平台;具有检验检测机构资质认定证书(CMA);实验室 |
|||
拥有20万以上仪器设备26台套,包括AKTA蛋白纯化系统、多功能酶标仪、原子吸收光谱仪、 |
|||
液相色谱仪、万级无菌工作间、P2实验室等多种高端、大型实验仪器设备;可提供生物医药、 |
|||
食品检测、食用菌、肠道微生物等方面的科学实验、检验检测、小试中试等技术服务与科研成果转化。 |
|||
</div> |
|||
</div> |
|||
<!-- 中试基地 --> |
|||
<div @click="$router.push('/IncubationPlatform/PilotBase')" class="center-box c-box pointer"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">中试基地</div> |
|||
</div> |
|||
<div class="center-content d-flex flex-column"> |
|||
<div>发酵工程中试基地位于山西维尔乳制品有限公司,基地具有发酵乳制品等生产加工条件,可提供微生物发酵实验及相关中试。</div> |
|||
<div>超高压食品加工中试基地位于太原市小店区正阳街43号的山西力德福科技有限公司。基地具有非热杀菌保鲜生产线、超高压设备制造生产线及中试车间,可提供超高压加工实验及相关中试和产业化服务。</div> |
|||
<div>干果精深加工中试基地位于吕梁的交城天娇红农业科技有限公司 ,拥有300余万元的先进分析检测仪器设备及免洗干枣生产车间、浓缩枣汁生产车间等生产加工条件,可提供相关中试研究。</div> |
|||
</div> |
|||
</div> |
|||
<!-- 加入流程 --> |
|||
<div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">加入流程</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<div class="join-us-box"> |
|||
<img class="fill-width" src="~assets/join-us.png" /> |
|||
<div class="material-box d-flex flex-row justify-center"> |
|||
<a-tooltip placement="top"> |
|||
<template slot="title"> |
|||
<div> |
|||
<p>资料:</p> |
|||
<p>1.入孵申请表</p> |
|||
<p>2.营业执照复印件(尚未注册的无须提供,未注册提供注册信息登记表)</p> |
|||
<p>3.法定代表或授权代表身份证复印件</p> |
|||
<p>4.主导产品或技术简介</p> |
|||
</div> |
|||
</template> |
|||
<div class="material"></div> |
|||
</a-tooltip> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> --> |
|||
<add-model :value="2" class="center-btn" style="height: 32px" /> |
|||
</div> |
|||
<!-- 入驻企业名录 --> |
|||
<div class="center-box c-box" style="margin-bottom: 160px"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">入驻企业名录</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<div class="d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="ent-box" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<p class="ent-index">{{ index + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item }}</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="reg-box"> |
|||
<a-button class style="float: left" type="primary">入驻企业注册</a-button> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="lists.length" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="lists.length > 18" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from '../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import AddModel from './../../components/AddModel.vue'; |
|||
export default { |
|||
name: 'EntitySpace', |
|||
components: { HNav, BreadCrumb, AddModel }, |
|||
data() { |
|||
return { |
|||
title: '实体众创空间', |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '实体众创空间', url: '' }, |
|||
], |
|||
list: [], |
|||
pageSize: 18, |
|||
current: 1, |
|||
lists: [ |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: { |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.center-btn { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
} |
|||
|
|||
.pagination { |
|||
float: right; |
|||
} |
|||
|
|||
.c-box { |
|||
background: none !important; |
|||
} |
|||
|
|||
.big-btn { |
|||
width: 213px; |
|||
height: 166px; |
|||
background: #13ACC4; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.big-con { |
|||
width: 96px; |
|||
height: 31px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: #FFFFFF; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.ent-box { |
|||
width: 26%; |
|||
margin-right: 11%; |
|||
position: relative; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
padding: 0 14px; |
|||
background: #FFFFFF; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
opacity: 1; |
|||
margin-bottom: 20px; |
|||
} |
|||
|
|||
.ent-index { |
|||
width: 28px; |
|||
position: absolute; |
|||
top: 14px; |
|||
line-height: 28px; |
|||
text-align: center; |
|||
font-size: 20px; |
|||
font-family: Segoe UI; |
|||
color: #FFFFFF; |
|||
height: 28px; |
|||
border-radius: 50%; |
|||
background: #13ACC4; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.ent-name { |
|||
font-size: 20px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.reg-box { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
width: 64.8%; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.join-us-box { |
|||
width: 100%; |
|||
position: relative; |
|||
|
|||
.material-box { |
|||
width: 100%; |
|||
height: 88px; |
|||
position: absolute; |
|||
top: 0px; |
|||
left: 0px; |
|||
|
|||
.material { |
|||
width: 10%; |
|||
height: 100%; |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,228 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title">虚拟众创空间</div> |
|||
<div |
|||
class="top-content" |
|||
>虚拟众创空间主要面向非入驻实体空间从事功能食品、生物医药和大健康产业相关研发服务和生产的企业。虚拟众创空间依托绿谷数字化平台进行建设,入驻企业可享受实体众创空间的各种创新创业服务,参加相关创新创业活动。</div> |
|||
</div> |
|||
<div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">加入流程</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<div class="join-us-box"> |
|||
<img class="fill-width" src="~assets/join-us.png" /> |
|||
<div class="material-box d-flex flex-row justify-center"> |
|||
<a-tooltip placement="top"> |
|||
<template slot="title"> |
|||
<div> |
|||
<p>资料:</p> |
|||
<p>1.入孵申请表</p> |
|||
<p>2.营业执照复印件(尚未注册的无须提供,未注册提供注册信息登记表)</p> |
|||
<p>3.法定代表或授权代表身份证复印件</p> |
|||
<p>4.主导产品或技术简介</p> |
|||
</div> |
|||
</template> |
|||
<div class="material"></div> |
|||
</a-tooltip> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> --> |
|||
<add-model :value="3" class="center-btn" style="height: 32px" /> |
|||
</div> |
|||
<div class="center-box c-box" style="margin-bottom: 160px"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">入驻企业名录</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<div class="d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="ent-box" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<p class="ent-index">{{ index + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item }}</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="reg-box"> |
|||
<a-button class style="float: left" type="primary">入驻企业注册</a-button> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="lists.length" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="lists.length > 18" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from '../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import AddModel from './../../components/AddModel.vue'; |
|||
export default { |
|||
name: 'VirtualSpace', |
|||
components: { HNav, BreadCrumb, AddModel }, |
|||
data() { |
|||
return { |
|||
title: '虚拟众创空间', |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '虚拟众创空间', url: '' }, |
|||
], |
|||
list: [], |
|||
pageSize: 18, |
|||
current: 1, |
|||
lists: [ |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
'XX企业', |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
methods: { |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.center-btn { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
} |
|||
|
|||
.pagination { |
|||
float: right; |
|||
} |
|||
|
|||
.c-box { |
|||
background: none !important; |
|||
} |
|||
|
|||
.big-btn { |
|||
width: 213px; |
|||
height: 166px; |
|||
background: #13ACC4; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.big-con { |
|||
width: 96px; |
|||
height: 31px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: #FFFFFF; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.ent-box { |
|||
width: 26%; |
|||
margin-right: 11%; |
|||
position: relative; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
padding: 0 14px; |
|||
background: #FFFFFF; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
opacity: 1; |
|||
margin-bottom: 20px; |
|||
} |
|||
|
|||
.ent-index { |
|||
width: 28px; |
|||
position: absolute; |
|||
top: 14px; |
|||
line-height: 28px; |
|||
text-align: center; |
|||
font-size: 20px; |
|||
font-family: Segoe UI; |
|||
color: #FFFFFF; |
|||
height: 28px; |
|||
border-radius: 50%; |
|||
background: #13ACC4; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.ent-name { |
|||
font-size: 20px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.reg-box { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
width: 64.8%; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.join-us-box { |
|||
width: 100%; |
|||
position: relative; |
|||
|
|||
.material-box { |
|||
width: 100%; |
|||
height: 88px; |
|||
position: absolute; |
|||
top: 0px; |
|||
left: 0px; |
|||
|
|||
.material { |
|||
width: 10%; |
|||
height: 100%; |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,14 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'IncubationPlatform', |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
@ -1,292 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<img |
|||
@click="showModal" |
|||
class="fill-width fill-height pointer" |
|||
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/join-space.png" |
|||
v-if="value === 1" |
|||
/> |
|||
<a-button @click="showModal" style="height: 100%; width: 100%" type="primary" v-else>{{ str }}</a-button> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:title="title" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
width="50%" |
|||
> |
|||
<p style="text-align: center" v-show="value !== 1"> |
|||
<a-radio-group style="margin-bottom: 20px !important" v-model="value"> |
|||
<a-radio :value="2" style="margin-right: 100px">实体空间</a-radio> |
|||
<a-radio :value="3">虚拟空间</a-radio> |
|||
</a-radio-group> |
|||
</p> |
|||
<a-form :form="form"> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="公司名称" |
|||
> |
|||
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="联系人" |
|||
required |
|||
> |
|||
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" /> |
|||
</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="platform.code" /> |
|||
<a-button |
|||
class="code_img ml-2" |
|||
disabled |
|||
type="primary" |
|||
v-if="showInterval" |
|||
>重新发送 {{ interval }}</a-button> |
|||
<a-button |
|||
:disabled="platform.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="合作信息简述" |
|||
required |
|||
> |
|||
<a-textarea |
|||
placeholder="请输入合作信息简述..." |
|||
style="height: 120px" |
|||
v-model.trim="platform.describe" |
|||
/> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import { JoinPlatform } from 'config/api'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'AddModel', |
|||
props: { |
|||
value: { |
|||
type: Number, |
|||
default: 1, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
visible: false, |
|||
title: '申请加入', |
|||
str: '申请加入', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
platform: { |
|||
companyName: '', // 公司名称 |
|||
manName: '', // 联系人 |
|||
tel: '', // 联系电话 |
|||
describe: '', // 项目描述 |
|||
code: '', // 验证码 |
|||
isTel: false, |
|||
}, |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['picCode']), |
|||
async created() { |
|||
this.sendPicCode(); |
|||
await this.getUserSer(); |
|||
if (this.userSer) { |
|||
if (this.userSer.name) { |
|||
this.platform.manName = this.userSer.name; |
|||
} |
|||
if (this.userSer.phone) { |
|||
this.platform.tel = this.userSer.phone; |
|||
} |
|||
if (this.userSer.companyName) { |
|||
this.platform.companyName = this.userSer.companyName; |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
// 显示表单输入框 |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
// 验证电话 |
|||
changePhone(e) { |
|||
this.platform.tel = e.target.value; |
|||
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
|||
}, |
|||
// 点击确定 |
|||
handleOk() { |
|||
if (!this.platform.manName) { |
|||
this.$message.error('请输入联系人'); |
|||
} else if (!this.platform.tel) { |
|||
this.$message.error('请输入联系电话'); |
|||
} else if (!this.platform.code) { |
|||
this.$message.error('请输入验证码'); |
|||
} else if (!this.platform.describe) { |
|||
this.$message.error('请输入项目信息简述'); |
|||
} else { |
|||
if (this.platform.isTel) { |
|||
this.subMitAdd(); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
}, |
|||
// 加入接口 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const params = { |
|||
param: { |
|||
code: this.platform.code, |
|||
companyName: this.platform.companyName, |
|||
contactName: this.platform.manName, |
|||
contactPhone: this.platform.tel, |
|||
description: this.platform.describe, |
|||
type: this.value, |
|||
}, |
|||
}; |
|||
const res = await JoinPlatform(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('申请成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
for (let key in this.platform) { |
|||
this.platform[key] = ''; |
|||
} |
|||
this.platform.isTel = false; |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
// 获取验证码 |
|||
async getCode() { |
|||
console.log(111); |
|||
try { |
|||
const params = { |
|||
phone: this.platform.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
// throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
console.log(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> |
@ -1,68 +0,0 @@ |
|||
<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 { |
|||
activeNum: 0, |
|||
list: [ |
|||
{ |
|||
title: '众创空间', |
|||
url: '/IncubationPlatform/MakerSpace', |
|||
}, |
|||
// { |
|||
// title: '公共实验室', |
|||
// url: '/IncubationPlatform/PublicLaboratory', |
|||
// }, |
|||
// { |
|||
// title: '中试基地', |
|||
// url: '/IncubationPlatform/PilotBase', |
|||
// }, |
|||
// { |
|||
// title: '创业导师', |
|||
// url: '/IncubationPlatform/Tutor', |
|||
// }, |
|||
{ |
|||
title: '创业服务', |
|||
url: '/IncubationPlatform/Services', |
|||
}, |
|||
{ |
|||
title: '产品展示', |
|||
url: '/IncubationPlatform/Products', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/IncubationPlatform/Services') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/IncubationPlatform/Products') { |
|||
this.activeNum = 2; |
|||
} 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,37 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div> |
|||
<derive-enterprise :title="title" :type-of-platform="typeOfPlatform" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import DeriveEnterprise from 'components/Introduce/DeriveEnterprise.vue'; |
|||
export default { |
|||
name: 'Enterprise', |
|||
components: { HNav, BreadCrumb, DeriveEnterprise }, |
|||
data() { |
|||
return { |
|||
title: '衍生企业', |
|||
typeOfPlatform: '产业平台', |
|||
arr: [ |
|||
{ name: '产业平台', url: '/Challenge/Union' }, |
|||
{ name: '衍生企业', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
</style> |
@ -1,121 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="flow-path"> |
|||
<div class="flow-title">服务流程</div> |
|||
<div class="flow-content"> |
|||
<img src="~assets/image.png" style="width:100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap" style="margin: 60px auto"> |
|||
<div |
|||
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box mb-8" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" /> |
|||
<p class="font-24 my-4">{{ item.name }}</p> |
|||
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p> |
|||
<p |
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import { selService } from 'config/api'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './components/HNav.vue'; |
|||
export default { |
|||
name: 'Serve', |
|||
components: { HNav, Banner, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '产业服务', |
|||
typeOfPlatform: '产业平台', |
|||
arr: [ |
|||
{ name: '产业平台', url: '/Challenge/Union' }, |
|||
{ name: '产业服务', url: '/Industry/Serve' }, |
|||
], |
|||
showPage: 52, |
|||
list: [], |
|||
current: 1, |
|||
pageSize: 8, |
|||
total: 0, |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getService(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setServiceArr']), |
|||
// 获取服务列表 |
|||
async getService() { |
|||
try { |
|||
const params = { param: { serviceType: 3 } }; |
|||
const res = await selService(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.list = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(data); |
|||
} |
|||
}, |
|||
// 查看 服务 详情 |
|||
jump(id) { |
|||
this.setServiceArr([]); |
|||
this.setServiceArr(this.arr); |
|||
this.$router.push({ |
|||
path: '/NewPlatform/ServiceDet', |
|||
name: 'ServiceDet', |
|||
params: { id }, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
position: relative; |
|||
width: 26%; |
|||
margin-right: 11%; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.item-content { |
|||
display: -webkit-box; |
|||
overflow: hidden; |
|||
white-space: normal !important; |
|||
text-overflow: ellipsis; |
|||
word-wrap: break-word; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
height: 60px; |
|||
} |
|||
</style> |
@ -1,184 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title">产业创新联盟</div> |
|||
<div class="top-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
</div> |
|||
<div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">加入流程</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
<new-model class="center-btn" /> |
|||
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> --> |
|||
</div> |
|||
<div class="center-box c-box" style="margin-bottom: 160px"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">联盟名录</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<div class="d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="ent-box" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<p class="ent-index">{{ index + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item }}</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="reg-box"> |
|||
<a-button class style="float: left" type="primary">入驻企业注册</a-button> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="lists.length" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="lists.length > 18" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import NewModel from '../../NewPlatform/components/NewModel.vue'; |
|||
export default { |
|||
name: 'Union', |
|||
components: { HNav, BreadCrumb, NewModel }, |
|||
data() { |
|||
return { |
|||
title: '产业创新联盟', |
|||
typeOfPlatform: '产业平台', |
|||
arr: [ |
|||
{ name: '产业平台', url: '/Challenge/Union' }, |
|||
{ name: '产业创新联盟', url: '' }, |
|||
], |
|||
list: [], |
|||
pageSize: 18, |
|||
current: 1, |
|||
lists: ['XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业'], |
|||
}; |
|||
}, |
|||
methods: { |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.center-btn { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
} |
|||
|
|||
.pagination { |
|||
float: right; |
|||
} |
|||
|
|||
.c-box { |
|||
background: none !important; |
|||
} |
|||
|
|||
.big-btn { |
|||
width: 213px; |
|||
height: 166px; |
|||
background: #13ACC4; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.big-con { |
|||
width: 96px; |
|||
height: 31px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: #FFFFFF; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.ent-box { |
|||
width: 26%; |
|||
margin-right: 11%; |
|||
position: relative; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
padding: 0 14px; |
|||
background: #FFFFFF; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
opacity: 1; |
|||
margin-bottom: 20px; |
|||
} |
|||
|
|||
.ent-index { |
|||
width: 28px; |
|||
position: absolute; |
|||
top: 14px; |
|||
line-height: 28px; |
|||
text-align: center; |
|||
font-size: 20px; |
|||
font-family: Segoe UI; |
|||
color: #FFFFFF; |
|||
height: 28px; |
|||
border-radius: 50%; |
|||
background: #13ACC4; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.ent-name { |
|||
font-size: 20px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.reg-box { |
|||
position: absolute; |
|||
left: 26.2%; |
|||
bottom: 100px; |
|||
width: 64.8%; |
|||
overflow: hidden; |
|||
} |
|||
</style> |
@ -1,54 +0,0 @@ |
|||
<template> |
|||
<div class="nav-box d-flex"> |
|||
<div v-for="(item, index) in list" :key="index" :class="activeNum === index ? 'nav-box-active' : ''" @click="jump(item.url)"> |
|||
{{ item.title }} |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'HNav', |
|||
data() { |
|||
return { |
|||
str: '导航条', |
|||
activeNum: 0, |
|||
list: [ |
|||
{ |
|||
title: '产业创新联盟', |
|||
url: '/Industry/Union', |
|||
}, |
|||
{ |
|||
title: '产业服务', |
|||
url: '/Industry/Serve', |
|||
}, |
|||
{ |
|||
title: '衍生企业', |
|||
url: '/Industry/Enterprise', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/Industry/Serve') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/Industry/Enterprise') { |
|||
this.activeNum = 2; |
|||
} 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,14 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'Industry', |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
@ -1,213 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<div class="policy-box"> |
|||
<div :key="index" class="policy-list" v-for="(item, index) in lists"> |
|||
<div @click="jumpDetails(item)" class="date-box pointer" v-if="item.time"> |
|||
<p class="date-mon">{{ monthEnglish[item.time.split('-')[1] - 1] }}.</p> |
|||
<p class="date-day">{{ item.time.split(' ')[0].split('-')[2] }}</p> |
|||
</div> |
|||
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p> |
|||
<p @click="jumpDetails(item)" class="item-content pointer">{{ item.content }}</p> |
|||
<p class="source-time"> |
|||
<span class="source">时间:{{ item.time }}</span> |
|||
<span class="source">地点:{{ item.site }}</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 5" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
import { industryInfo } from 'config/api'; |
|||
export default { |
|||
name: 'ItInformation', |
|||
data() { |
|||
return { |
|||
str: '这是行业资讯界面', |
|||
lists: [], |
|||
total: 0, |
|||
pageSize: 5, |
|||
current: 1, |
|||
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'], |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setActDetail']), |
|||
async getData() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
pageNum: this.current, |
|||
pageSize: this.pageSize, |
|||
}, |
|||
}; |
|||
const res = await industryInfo(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data.list; |
|||
this.total = parseInt(data.total); |
|||
for (var i = 0; i < this.lists.length; i++) { |
|||
// this.lists[i].time = moment(this.lists[i].time).format('YYYY-MM-DD'); |
|||
this.lists[i].time = this.$moment(parseInt(this.lists[i].time) * 1000).format('YYYY-MM-DD'); |
|||
} |
|||
} else { |
|||
console.log(msg); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
|
|||
onShowSizeChange(current) { |
|||
this.current = current; |
|||
this.getData(); |
|||
}, |
|||
|
|||
// 跳转到详情界面 |
|||
jumpDetails(item) { |
|||
this.setActDetail(item); |
|||
this.$router.push('/ActDetails'); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.policy-box { |
|||
.policy-list { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 238px; |
|||
overflow: hidden; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
margin-top: 24px; |
|||
padding: 25px; |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
margin-left: 200px; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.item-content { |
|||
margin-left: 200px; |
|||
text-indent: 2em; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.35); |
|||
line-height: 36px; |
|||
font-family: Microsoft YaHei; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.source { |
|||
cursor: pointer; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
opacity: 1; |
|||
margin-right: 24px; |
|||
} |
|||
|
|||
.time { |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.25); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.original { |
|||
position: absolute; |
|||
right: 25px; |
|||
bottom: 25px; |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
opacity: 1; |
|||
margin-bottom: 0; |
|||
|
|||
span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
.date-box { |
|||
height: 188px !important; |
|||
width: 188px !important; |
|||
position: absolute !important; |
|||
top: 0 !important; |
|||
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
text-align: center; |
|||
box-shadow: none !important; |
|||
padding: 25px; |
|||
margin-top: 24px; |
|||
|
|||
p { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.date-mon { |
|||
font-size: 40px; |
|||
height: 40px; |
|||
line-height: 40px; |
|||
font-weight: 500; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.date-day { |
|||
font-size: 70px; |
|||
height: 80px; |
|||
line-height: 80px; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.source-time { |
|||
margin-left: 200px; |
|||
position: absolute; |
|||
bottom: 26px; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 68px; |
|||
text-align: right; |
|||
} |
|||
</style> |
@ -1,41 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="dev-box"> |
|||
<img src="~assets/build.png" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Knowledge', |
|||
components: { BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '知识培训服务平台', |
|||
title: '知识平台', |
|||
typeOfPlatform: '知识平台', |
|||
arr: [{ name: '知识平台', url: '/Knowledge' }], |
|||
list: [], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 20px auto; |
|||
} |
|||
|
|||
.dev-box { |
|||
width: 100%; |
|||
|
|||
img { |
|||
width: 100%; |
|||
} |
|||
} |
|||
</style> |
@ -1,171 +0,0 @@ |
|||
<template> |
|||
<div class="inner equ-box"> |
|||
<div class="equ-info d-flex"> |
|||
<img :src="obj.visitLocation" /> |
|||
<div class="equ-info-box mb-5"> |
|||
<p class="equ-name">{{ obj.name }}</p> |
|||
<div class="d-flex flex-wrap"> |
|||
<div class="equ-info-left" style="width: 200px"> |
|||
<p>成果名字:</p> |
|||
<p>学科分类:</p> |
|||
<p>联系人:</p> |
|||
<p>联系方式:</p> |
|||
<p>转让形式:</p> |
|||
<p>成果表现形式:</p> |
|||
<p>成果阶段:</p> |
|||
</div> |
|||
<div style="width: 500px"> |
|||
<p>{{ obj.name }}</p> |
|||
<p>{{ obj.classification === 0 ? '中医药学' : '' }}</p> |
|||
<p> |
|||
<span :key="index" v-for="(item, index) in obj.selPeoList">{{ item.contactsName }}</span> |
|||
</p> |
|||
<p> |
|||
<span :key="index" v-for="(item, index) in obj.selPeoList">{{ item.contactsPhone }}</span> |
|||
</p> |
|||
<p> |
|||
{{ obj.layout === 0 ? '产权转让' : |
|||
obj.layout === 1 ? '资金入股' : |
|||
obj.layout === 2 ? '技术入股' : |
|||
obj.layout === 3 ? '合作开发' : |
|||
obj.layout === 0 ? '技术服务' : '其他'}} |
|||
</p> |
|||
<p> |
|||
{{ obj.performance === 0 ? '国际标准' : |
|||
obj.performance === 1 ? '国家标准' : |
|||
obj.performance === 2 ? '行业标准' : |
|||
obj.performance === 3 ? '地方标准' : |
|||
obj.performance === 4 ? '企业标准' : |
|||
obj.performance === 5 ? '新技术' : |
|||
obj.performance === 6 ? '新工艺' : |
|||
obj.performance === 7 ? '新产品' : |
|||
obj.performance === 8 ? '新材料' : |
|||
obj.performance === 9 ? '新装备' : |
|||
obj.performance === 10 ? '农业、生物新品种' : |
|||
obj.performance === 11 ? '矿产新品种' : '其他应用技术'}} |
|||
</p> |
|||
<p> |
|||
{{ obj.stage === 0 ? '初期阶段' : |
|||
obj.stage === 1 ? '中期阶段' : '成熟应用阶段' }} |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<div class="equ-btn"> |
|||
<!-- <a-button style="margin-right: 20px">转化意向</a-button> --> |
|||
<intention-model :type-data="typeData" style="margin-right: 20px; float: left" /> |
|||
<!-- <a-button type="primary">加入购物车</a-button> --> |
|||
<add-shopping :type-data="typeData" style="margin-right: 20px; float: right" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="content-box"> |
|||
<div v-dompurify-html="obj.content"></div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import { selResMes } from 'config/api'; |
|||
import IntentionModel from 'components/Introduce/IntentionModel.vue'; |
|||
import AddShopping from 'components/Introduce/AddShopping.vue'; |
|||
export default { |
|||
name: 'AchDet', |
|||
components: { IntentionModel, AddShopping }, |
|||
data() { |
|||
return { |
|||
obj: {}, |
|||
typeData: { |
|||
type: 2, |
|||
Id: '', |
|||
}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['achId']), |
|||
created() { |
|||
this.typeData.Id = this.achId; |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
async getData() { |
|||
try { |
|||
const params = { param: { id: this.achId } }; |
|||
const res = await selResMes(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
console.log(data); |
|||
this.obj = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.equ-box { |
|||
background: #fff; |
|||
padding: 20px; |
|||
margin: 60px auto; |
|||
} |
|||
|
|||
.equ-info { |
|||
border-bottom: 1px solid rgba(0, 0, 0, 0.14901960784313725); |
|||
position: relative; |
|||
|
|||
img { |
|||
width: 300px; |
|||
height: 300px; |
|||
} |
|||
} |
|||
|
|||
.equ-name { |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.equ-info-box { |
|||
position: relative; |
|||
font-size: 16px; |
|||
margin-left: 20px; |
|||
height: 300px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
|
|||
p { |
|||
margin-bottom: 6px; |
|||
} |
|||
} |
|||
|
|||
.equ-info-left { |
|||
font-size: 16px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
opacity: 1; |
|||
|
|||
p { |
|||
margin-bottom: 6px; |
|||
} |
|||
} |
|||
|
|||
.equ-btn { |
|||
position: absolute; |
|||
bottom: 0; |
|||
} |
|||
|
|||
.content-box { |
|||
min-height: 400px; |
|||
padding: 20px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
</style> |
@ -1,171 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title">协同创新中心</div> |
|||
<div class="top-content"> |
|||
<!-- <div class="white pa-5 my-5"> --> |
|||
<core-organ :title="title" /> |
|||
<!-- </div> --> |
|||
</div> |
|||
</div> |
|||
<!-- <div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">组织机构</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<rich-text :title="title1" /> |
|||
</div> |
|||
</div>--> |
|||
<div class="bottom-box white"> |
|||
<div class="bottom-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">中心架构</div> |
|||
</div> |
|||
<div class="bottom-content"> |
|||
<div |
|||
class="font-16 textColor line-height-36" |
|||
>协同创新中心围绕研发领域设立功能食品、现代医药、生物医学工程及数字健康开发四大协同创新平台,根据研发方向设若干研发单元。</div> |
|||
<div :style="{ height: '500px' }" id="treeChart"></div> |
|||
</div> |
|||
</div> |
|||
<!-- <div class="partner-box"> |
|||
<div class="partner-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">合作伙伴</div> |
|||
</div> |
|||
<div class="partner-content"> |
|||
<de-ent /> |
|||
</div> |
|||
</div>--> |
|||
<div class="join-box"> |
|||
<div class="join-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">申请加入</div> |
|||
</div> |
|||
<div class="join-content"> |
|||
申请加入 |
|||
<div> |
|||
<new-model /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import '@/common/platform.styl'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
// import DeEnt from './components/DeEnt.vue'; |
|||
import NewModel from './../components/NewModel.vue'; |
|||
// import RichText from 'components/Introduce/RichText.vue'; |
|||
import CoreOrgan from 'components/CoreOrgan/CoreOrgan.vue'; |
|||
|
|||
export default { |
|||
name: 'Core', |
|||
components: { HNav, BreadCrumb, NewModel, CoreOrgan }, |
|||
data() { |
|||
return { |
|||
str: '这是中心界面', |
|||
title: '创新平台-协同创新中心', |
|||
title1: '创新平台-组织机构', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '协同创新中心', url: '' }, |
|||
], |
|||
list: [], |
|||
treedata: [ |
|||
{ |
|||
//一定一定要注意这里有[] |
|||
name: '协同创新中心', |
|||
children: [ |
|||
{ |
|||
name: '功能食品协同创新平台', |
|||
children: [ |
|||
{ name: '功能食品资源开发' }, |
|||
{ name: '营养健康功能因子分再鉴定及作用机制探究' }, |
|||
{ name: '功能食品关键加工技术研发' }, |
|||
{ name: '功能食品安全评价与风险监测' }, |
|||
], |
|||
}, |
|||
{ |
|||
name: '现代医药协同创新平台', |
|||
children: [ |
|||
{ name: '中医药与天然药物资源开发利用' }, |
|||
{ name: '医药生物技术' }, |
|||
{ name: '新药研发' }, |
|||
{ name: '药理药效研究与安全评价' }, |
|||
], |
|||
}, |
|||
{ |
|||
name: '生物医学工程协同创新平台', |
|||
children: [{ name: '生物信息技术' }, { name: '生物医学工程研发' }, { name: '生物力学和生物材料' }], |
|||
}, |
|||
{ |
|||
name: '数字健康开发协同创新平台', |
|||
children: [{ name: '健康医疗大数据挖掘与分析' }, { name: '基于纳米传感器的医疗健康' }, { name: '传染病预测预鉴数字技术' }], |
|||
}, |
|||
{ name: '科技资源共享服务平台' }, |
|||
{ name: '知识产权与技术转移转化服务平台' }, |
|||
{ name: '创新服务' }, |
|||
], |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
mounted() { |
|||
this.showChart(); |
|||
}, |
|||
methods: { |
|||
showChart() { |
|||
// 基于准备好的dom,初始化echarts实例 |
|||
var myChart = this.$echarts.init(document.getElementById('treeChart')); |
|||
// 指定图表的配置项和数据 |
|||
var option = { |
|||
tooltip: { |
|||
trigger: 'item', |
|||
triggerOn: 'mousemove', |
|||
}, |
|||
series: [ |
|||
{ |
|||
type: 'tree', |
|||
data: this.treedata, |
|||
top: '2%', |
|||
left: '12%', |
|||
bottom: '1%', |
|||
right: '36%', |
|||
symbolSize: 7, |
|||
lineStyle: { width: 4 }, |
|||
itemStyle: { borderWidth: 3, borderColor: '#AACD06' }, |
|||
label: { position: 'left', verticalAlign: 'middle', align: 'right', fontSize: 16 }, |
|||
leaves: { |
|||
label: { |
|||
position: 'right', |
|||
verticalAlign: 'middle', |
|||
align: 'left', |
|||
}, |
|||
}, |
|||
expandAndCollapse: true, |
|||
animationDuration: 550, |
|||
animationDurationUpdate: 750, |
|||
}, |
|||
], |
|||
}; |
|||
// 使用刚指定的配置项和数据显示图表。 |
|||
myChart.setOption(option); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
</style> |
@ -1,46 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="dev-box"> |
|||
<img src="~assets/build.png" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import SenNav from './components/SenNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Develop', |
|||
components: { SenNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '创新服务', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '创新服务', url: '' }, |
|||
], |
|||
list: [], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 20px auto; |
|||
} |
|||
|
|||
.dev-box { |
|||
width: 100%; |
|||
|
|||
img { |
|||
width: 100%; |
|||
} |
|||
} |
|||
</style> |
@ -1,85 +0,0 @@ |
|||
<template> |
|||
<div style="padding-bottom: 50px"> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="content-box"> |
|||
<div |
|||
:key="index" |
|||
@click="jump(item.url)" |
|||
style="margin-top: 50px; cursor: pointer" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<div class="d-flex justify-space-between" v-if="index % 2 === 0"> |
|||
<div class="introduce-box"> |
|||
<p class="introduce-title">{{ item.title }}</p> |
|||
<p class="introduce-content">{{ item.content }}</p> |
|||
</div> |
|||
<img :src="item.imgUrl" style="width: 452px" /> |
|||
</div> |
|||
<div class="d-flex justify-space-between" v-else> |
|||
<img :src="item.imgUrl" style="width: 452px" /> |
|||
<div class="introduce-box"> |
|||
<p class="introduce-title">{{ item.title }}</p> |
|||
<p class="introduce-content">{{ item.content }}</p> |
|||
</div> |
|||
</div> |
|||
</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'; |
|||
export default { |
|||
name: 'News', |
|||
components: { HNav, Banner, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '这是政策界面', |
|||
title: '创新资源平台', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '' }, |
|||
], |
|||
showPage: 32, |
|||
list: [ |
|||
{ |
|||
title: '科技资源开放共享服务平台', |
|||
content: '研发试验、检验检测、资源共享', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/86d502b304944e0c849bff8dcf55ac08.jpg', |
|||
url: '/NewPlatform/Share', |
|||
}, |
|||
{ |
|||
title: '知识产权与技术转移转化服务平台', |
|||
content: '知识产权、成果转化、技术转移', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/4f9b898da25e48d3b73b47345ed14a9a.jpg', |
|||
url: '/NewPlatform/Transfer', |
|||
}, |
|||
{ |
|||
title: '知识培训与科技人才服务平台', |
|||
content: '技术培训、管理培训、知识讲座', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/f5fb570cfd7547279138a591818325e0.jpg', |
|||
url: '/NewPlatform/Develop', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
jump(url) { |
|||
this.$router.push(url); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
</style> |
@ -1,122 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="flow-path"> |
|||
<div class="flow-title">服务流程</div> |
|||
<div class="flow-content"> |
|||
<img src="~assets/image.png" style="width:100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap" style="margin: 60px auto"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box mb-8" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" /> |
|||
<p class="font-24 my-4">{{ item.name }}</p> |
|||
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p> |
|||
<p |
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import { selService } from 'config/api'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Service', |
|||
components: { HNav, Banner, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '这是服务界面', |
|||
title: '创新服务', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新服务', url: '/NewPlatform/NewService' }, |
|||
], |
|||
showPage: 33, |
|||
list: [], |
|||
current: 1, |
|||
pageSize: 8, |
|||
total: 0, |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getService(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setServiceArr']), |
|||
// 获取服务列表 |
|||
async getService() { |
|||
try { |
|||
const params = { param: { serviceType: 1 } }; |
|||
const res = await selService(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.list = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(data); |
|||
} |
|||
}, |
|||
// 查看 服务 详情 |
|||
jump(id) { |
|||
this.setServiceArr([]); |
|||
this.setServiceArr(this.arr); |
|||
this.$router.push({ |
|||
path: '/NewPlatform/ServiceDet', |
|||
name: 'ServiceDet', |
|||
params: { id }, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
position: relative; |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.item-content { |
|||
display: -webkit-box; |
|||
overflow: hidden; |
|||
white-space: normal !important; |
|||
text-overflow: ellipsis; |
|||
word-wrap: break-word; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
height: 60px; |
|||
} |
|||
</style> |
@ -1,108 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner" style="margin-top:40px"> |
|||
<a-breadcrumb> |
|||
<a-breadcrumb-item>绿谷生物</a-breadcrumb-item> |
|||
<a-breadcrumb-item :key="index" v-for="(item,index) in serviceArr"> |
|||
<router-link :to="item.url">{{ item.name }}</router-link> |
|||
</a-breadcrumb-item> |
|||
</a-breadcrumb> |
|||
</div> |
|||
<div class="posi-name"> |
|||
<p class="service-name">{{ obj.name }}</p> |
|||
<p class="service-eng">SERVICE</p> |
|||
</div> |
|||
<div class="inner service-box"> |
|||
<!-- <div style="margin-bottom: 40px" v-dompurify-html="obj.content"></div> --> |
|||
<div style="margin-bottom: 40px"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、线上线下相结合的融合 |
|||
发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统,构筑专业化、 |
|||
集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 念,以“赋能健康中国, |
|||
筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 式创新创业高地”为使命, |
|||
大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div> |
|||
<div> |
|||
<!-- <a-button>直接申请</a-button> --> |
|||
<intention-model :type-data="typeData" style="float: left; margin-right: 20px" /> |
|||
<!-- <a-button type="primary">加入购物车</a-button> --> |
|||
<add-shopping :type-data="typeData" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import { selContent } from 'config/api'; |
|||
import IntentionModel from 'components/Introduce/IntentionModel.vue'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import AddShopping from 'components/Introduce/AddShopping.vue'; |
|||
export default { |
|||
name: 'ServiceDet', |
|||
components: { IntentionModel, Banner, AddShopping }, |
|||
data() { |
|||
return { |
|||
showPage: 100, |
|||
obj: { |
|||
name: '', |
|||
id: '', |
|||
content: '', |
|||
}, |
|||
typeData: { |
|||
type: 0, |
|||
Id: '', |
|||
}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['serviceArr']), |
|||
|
|||
async created() { |
|||
this.typeData.Id = this.$route.params.id; |
|||
await this.getData(this.$route.params.id); |
|||
}, |
|||
|
|||
methods: { |
|||
async getData(id) { |
|||
try { |
|||
const params = { param: { id } }; |
|||
const res = await selContent(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
console.log(data); |
|||
this.obj = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.service-box { |
|||
margin: 60px auto; |
|||
min-height: 400px; |
|||
padding: 20px; |
|||
background: #fff; |
|||
} |
|||
|
|||
.posi-name { |
|||
position: absolute; |
|||
left: 20%; |
|||
top: 300px; |
|||
color: #fff; |
|||
text-align: center; |
|||
} |
|||
|
|||
.service-name { |
|||
font-size: 40px; |
|||
margin-bottom: 0 !important; |
|||
} |
|||
|
|||
.service-eng { |
|||
font-size: 16px; |
|||
} |
|||
</style> |
@ -1,231 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div> |
|||
<div class="search-background"> |
|||
<div class="d-flex"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">研究开发实验室:</span> |
|||
<span |
|||
v-for="(item, index) in laboratory" |
|||
:key="index" |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
class="ins-name" |
|||
@click="choose(index, 0)" |
|||
> |
|||
{{ item.name }} |
|||
</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search class="item-search" v-model="LabIpt" placeholder="搜索实验室" enter-button="搜索" @search="searchLab" /> |
|||
</div> |
|||
</div> |
|||
<div style="border-top: 1px solid rgba(0, 0, 0, 0.06)" class="flex-3 flex-wrap"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">大型科研设施与仪器:</span> |
|||
<span |
|||
v-for="(item, index) in instrument" |
|||
:key="index" |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
class="ins-name" |
|||
@click="choose(index, 1)" |
|||
> |
|||
{{ item.name }} |
|||
</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search class="item-search" v-model="InsIpt" placeholder="搜索仪器" enter-button="搜索" @search="searchIns" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<platform-list /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { selModel } from 'config/api'; |
|||
import PlatformList from 'components/PlatformList/PlatformList.vue'; |
|||
import SenNav from './components/SenNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import { mapMutations } from 'vuex'; |
|||
export default { |
|||
name: 'Share', |
|||
components: { SenNav, PlatformList, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '这是科技资源开放共享服务平台', |
|||
title: '科技资源开放共享服务平台', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '科技资源开放共享服务平台', url: '' }, |
|||
], |
|||
LabIpt: '', // 实验室搜索框内容 |
|||
laboratory: [], // 实验室 |
|||
labList: [], // 实验室类型选择列表 |
|||
InsIpt: '', // 仪器搜索框内容 |
|||
instrument: [], // 仪器 |
|||
insList: [], // 仪器类型选择列表 |
|||
}; |
|||
}, |
|||
watch: { |
|||
LabIpt(val) { |
|||
const obj = { |
|||
content: this.LabIpt, |
|||
isBtn: 0, |
|||
}; |
|||
this.setLabIpt(obj); |
|||
}, |
|||
InsIpt(val) { |
|||
const obj = { |
|||
content: this.InsIpt, |
|||
isBtn: 0, |
|||
}; |
|||
this.setInsIpt(obj); |
|||
}, |
|||
}, |
|||
created() { |
|||
const obj = { |
|||
content: '', |
|||
isBtn: 0, |
|||
}; |
|||
this.setLabList([]); |
|||
this.setInsList([]); |
|||
this.setLabIpt(obj); |
|||
this.setInsIpt(obj); |
|||
this.getType(1); |
|||
this.getType(2); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setLabList', 'setInsList', 'setLabIpt', 'setInsIpt', 'setListState']), |
|||
async getType(num) { |
|||
try { |
|||
const params = { param: { model: num } }; |
|||
const res = await selModel(params); |
|||
const { code, mst, data } = res.data; |
|||
if (code === 200) { |
|||
if (num === 1) { |
|||
this.instrument = data; |
|||
for (let i = 0; i < this.instrument.length; i++) { |
|||
this.instrument[i].isActive = false; |
|||
} |
|||
} else if (num === 2) { |
|||
this.laboratory = data; |
|||
for (let i = 0; i < this.laboratory.length; i++) { |
|||
this.laboratory[i].isActive = false; |
|||
} |
|||
} |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 选中类型时触发 |
|||
choose(index, num) { |
|||
const that = this; |
|||
if (num === 0) { |
|||
this.labList = []; |
|||
const { laboratory, instrument } = this; |
|||
for (let i = 0; i < instrument.length; i++) { |
|||
instrument[i].isActive = false; |
|||
} |
|||
this.setListState(0); |
|||
laboratory[index].isActive = !laboratory[index].isActive; |
|||
this.laboratory = [...laboratory]; |
|||
for (let i = 0; i < laboratory.length; i++) { |
|||
if (laboratory[i].isActive) { |
|||
this.labList.push(laboratory[i].id); |
|||
} |
|||
} |
|||
this.setLabList(this.labList); |
|||
} else if (num === 1) { |
|||
this.insList = []; |
|||
const { laboratory, instrument } = this; |
|||
for (let i = 0; i < laboratory.length; i++) { |
|||
laboratory[i].isActive = false; |
|||
} |
|||
this.setListState(1); |
|||
instrument[index].isActive = !instrument[index].isActive; |
|||
this.instrument = [...instrument]; |
|||
for (let i = 0; i < instrument.length; i++) { |
|||
if (instrument[i].isActive) { |
|||
this.insList.push(instrument[i].id); |
|||
} |
|||
} |
|||
this.setInsList(this.insList); |
|||
} |
|||
}, |
|||
searchLab() { |
|||
const { instrument } = this; |
|||
for (let i = 0; i < instrument.length; i++) { |
|||
instrument[i].isActive = false; |
|||
} |
|||
this.instrument = [...instrument]; |
|||
this.setListState(0); |
|||
this.InsIpt = ''; |
|||
const obj = { |
|||
content: this.LabIpt, |
|||
isBtn: 1, |
|||
}; |
|||
this.setLabIpt(obj); |
|||
}, |
|||
searchIns() { |
|||
const { laboratory } = this; |
|||
for (let i = 0; i < laboratory.length; i++) { |
|||
laboratory[i].isActive = false; |
|||
} |
|||
this.laboratory = [...laboratory]; |
|||
this.setListState(1); |
|||
this.LabIpt = ''; |
|||
const obj = { |
|||
content: this.InsIpt, |
|||
isBtn: 1, |
|||
}; |
|||
this.setInsIpt(obj); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.search-background { |
|||
background: rgba(0, 0, 0, 0.02); |
|||
border: 1px solid rgba(0, 0, 0, 0.06); |
|||
height: auto; |
|||
padding: 0 20px; |
|||
width: 82%; |
|||
margin: 40px auto; |
|||
line-height: 44px; |
|||
} |
|||
|
|||
.item-search { |
|||
width: 100%; |
|||
height: 32px; |
|||
} |
|||
|
|||
.ins-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.ins-name { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
padding: 0 10px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.act-color { |
|||
color: #13ACC4 !important; |
|||
} |
|||
</style> |
@ -1,206 +0,0 @@ |
|||
<template> |
|||
<div class="inner equ-box"> |
|||
<div class="equ-info d-flex"> |
|||
<img :src="obj.img" alt v-if="listState === 1" /> |
|||
<img :src="obj.visitLocation" alt v-if="listState === 3" /> |
|||
<div class="equ-info-box"> |
|||
<p class="equ-name">{{ obj.name }}</p> |
|||
<div class="d-flex flex-wrap" v-if="listState === 1"> |
|||
<div class="equ-info-left" style="width: 200px"> |
|||
<p>仪器名字:</p> |
|||
<p>制造商:</p> |
|||
<p>型号:</p> |
|||
<p>规格:</p> |
|||
<p>性能指标:</p> |
|||
<p>联系人:</p> |
|||
<p>联系方式:</p> |
|||
</div> |
|||
<div style="width: 500px"> |
|||
<p>{{ obj.name }}</p> |
|||
<p>{{ obj.manufactor }}</p> |
|||
<p>{{ obj.model }}</p> |
|||
<p>{{ obj.specifications }}</p> |
|||
<p>{{ obj.performance }}</p> |
|||
<p> |
|||
<span :key="index" v-for="(item, index) in obj.selPeoList"> |
|||
{{ item.contactsName }} |
|||
<span v-if="index !== obj.selPeoList.length-1">、</span> |
|||
</span> |
|||
</p> |
|||
<p> |
|||
<span :key="index" v-for="(item, index) in obj.selPeoList"> |
|||
{{ item.contactsPhone }} |
|||
<span v-if="index !== obj.selPeoList.length-1">、</span> |
|||
</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex flex-wrap" v-if="listState === 3"> |
|||
<div class="equ-info-left" style="width: 200px"> |
|||
<p>公司名称:</p> |
|||
<p>产品编号:</p> |
|||
<p>联系人:</p> |
|||
</div> |
|||
<div style="width: 500px"> |
|||
<p>{{ obj.companyname }}</p> |
|||
<p>{{ obj.identifier }}</p> |
|||
<p> |
|||
<span :key="index" v-for="(item, index) in obj.selPeoList"> |
|||
{{ item.contactsName }} |
|||
<span v-if="index !== obj.selPeoList.length-1">、</span> |
|||
</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<p class="equ-btn"> |
|||
<intention-model |
|||
:type-data="listState === 1 ? typeData : typeProductData" |
|||
style="margin-right: 20px; float: left" |
|||
/> |
|||
<!-- <a-button style="margin-right: 20px">转化意向</a-button> --> |
|||
<!-- <a-button type="primary">加入购物车</a-button> --> |
|||
<add-shopping :type-data="typeData" style="margin-right: 20px; float: right" /> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<div class="content-box"> |
|||
<div v-dompurify-html="obj.purpose" v-if="listState === 1"></div> |
|||
<div v-dompurify-html="obj.details" v-if="listState === 3"></div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import { selInstrumentMes, selProductMes } from 'config/api'; |
|||
import IntentionModel from 'components/Introduce/IntentionModel.vue'; |
|||
import AddShopping from 'components/Introduce/AddShopping.vue'; |
|||
export default { |
|||
name: 'InsDet', |
|||
components: { IntentionModel, AddShopping }, |
|||
data() { |
|||
return { |
|||
obj: {}, |
|||
typeData: { |
|||
type: 1, |
|||
Id: '', |
|||
}, |
|||
typeProductData: { |
|||
type: 3, |
|||
Id: '', |
|||
}, |
|||
id: 0, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['listState']), |
|||
created() { |
|||
this.id = this.$route.params.id; |
|||
if (this.listState === 1) { |
|||
this.typeData.Id = this.$route.params.id; |
|||
this.getData(); |
|||
} |
|||
if (this.listState === 3) { |
|||
this.typeProductData.Id = this.$route.params.id; |
|||
this.getProductData(); |
|||
} |
|||
}, |
|||
methods: { |
|||
async getData() { |
|||
try { |
|||
const params = { param: { id: this.id } }; |
|||
const res = await selInstrumentMes(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.obj = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
|
|||
// 查询 产品列表 详情 |
|||
async getProductData() { |
|||
try { |
|||
const params = { param: { id: this.id } }; |
|||
const res = await selProductMes(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
console.log(data); |
|||
this.obj = data; |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.equ-box { |
|||
background: #fff; |
|||
padding: 20px; |
|||
margin: 60px auto; |
|||
} |
|||
|
|||
.equ-info { |
|||
border-bottom: 1px solid rgba(0, 0, 0, 0.14901960784313725); |
|||
position: relative; |
|||
padding-bottom: 24px; |
|||
|
|||
img { |
|||
width: 300px; |
|||
height: 300px; |
|||
} |
|||
} |
|||
|
|||
.equ-name { |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 31px; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.equ-info-box { |
|||
position: relative; |
|||
font-size: 16px; |
|||
margin-left: 20px; |
|||
height: 300px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
|
|||
p { |
|||
height: 24px; |
|||
margin-bottom: 6px; |
|||
} |
|||
} |
|||
|
|||
.equ-info-left { |
|||
font-size: 16px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
opacity: 1; |
|||
|
|||
p { |
|||
height: 24px; |
|||
margin-bottom: 6px; |
|||
} |
|||
} |
|||
|
|||
.equ-btn { |
|||
position: absolute; |
|||
bottom: 0; |
|||
} |
|||
|
|||
.content-box { |
|||
min-height: 400px; |
|||
padding: 20px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
</style> |
@ -1,233 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<banner :show-page="showPage" /> |
|||
<h-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner ins-box"> |
|||
<p class="font-bold-24 item-title">设备列表</p> |
|||
<div class="d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box mb-8" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.visitLocation" style="height: 220px; width: 100%" /> |
|||
<p class="font-24 my-4">{{ item.name }}</p> |
|||
<p @click="jump(item.id)" class="font-16 baseColor item-more">了解更多→</p> |
|||
</div> |
|||
</div> |
|||
<p class="font-bold-24 item-title">人才团队带头人情况</p> |
|||
<div class="d-flex"> |
|||
<div class="header-box" style="flex: 1"> |
|||
<p style="background: #11b7ce; color: #fff">姓名</p> |
|||
<p>性别</p> |
|||
<p>民族</p> |
|||
<p>出生年月</p> |
|||
<p>学历</p> |
|||
<p>职称</p> |
|||
<p>所学专业</p> |
|||
<p>从事专业</p> |
|||
<p>团队名称</p> |
|||
<p>工作单位</p> |
|||
<p>研究方向</p> |
|||
</div> |
|||
<div class="header-box" style="flex: 5; background: #fff"> |
|||
<p style="border-bottom: 1px solid #eee">{{ obj.name }}</p> |
|||
<p> |
|||
<span v-if="obj.gender - 0 === 1">男</span> |
|||
<span v-else-if="obj.gender - 0 === 2">女</span> |
|||
</p> |
|||
<p>{{ obj.famousFamily }}</p> |
|||
<p>{{ obj.birthday }}</p> |
|||
<p>{{ obj.education }}</p> |
|||
<p>{{ obj.position }}</p> |
|||
<p>{{ obj.major }}</p> |
|||
<p>{{ obj.professional }}</p> |
|||
<p>{{ obj.teamName }}</p> |
|||
<p>{{ obj.workUnit }}</p> |
|||
<p>{{ obj.direction }}</p> |
|||
</div> |
|||
</div> |
|||
<p class="font-bold-24 item-title">团队成员信息</p> |
|||
<div style="background: #fff"> |
|||
<div class="d-flex"> |
|||
<div class="h-box" style="flex: 1">姓名</div> |
|||
<div class="h-box" style="flex: 1">性别</div> |
|||
<!-- <div class="h-box" style="flex: 1">所在单位</div> --> |
|||
<div class="h-box" style="flex: 1">出生年月</div> |
|||
<div class="h-box" style="flex: 1">学历学位</div> |
|||
<div class="h-box" style="flex: 1">职称职务</div> |
|||
<div class="h-box" style="flex: 1">研究方向</div> |
|||
</div> |
|||
<div :key="index" class="d-flex" v-for="(item, index) in obj.teamMemberList"> |
|||
<div class="con-box" style="flex: 1">{{ item.name }}</div> |
|||
<div class="con-box" style="flex: 1"> |
|||
<span v-if="item.gender - 0 === 1">男</span> |
|||
<span v-else-if="item.gender - 0 === 2">女</span> |
|||
</div> |
|||
<!-- <div class="con-box" style="flex: 1">???????????????</div> --> |
|||
<div class="con-box" style="flex: 1">{{ item.birthday }}</div> |
|||
<div class="con-box" style="flex: 1">{{ item.education }}</div> |
|||
<div class="con-box" style="flex: 1">{{ item.position }}</div> |
|||
<div class="con-box" style="flex: 1">{{ item.direction }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations, mapState } from 'vuex'; |
|||
import { selInstrumentByRes, teamSearch } from 'config/api'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Institute', |
|||
components: { Banner, HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
id: 0, |
|||
title: '研究院详情', |
|||
typeOfPlatform: '创新平台', |
|||
showPage: 32, |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '科技资源开放共享服务平台', url: '/NewPlatform/Share' }, |
|||
{ name: '研究院详情', url: '' }, |
|||
], |
|||
obj: {}, |
|||
list: [], |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['LabId']), |
|||
created() { |
|||
if (this.$route.params.id) { |
|||
this.setLabId(this.$route.params.id); |
|||
this.id = this.$route.params.id; |
|||
} else { |
|||
this.id = this.LabId; |
|||
} |
|||
this.getData(); |
|||
this.getTeam(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setLabId']), |
|||
|
|||
// 获取当前研究院(实验室)下的仪器列表 |
|||
async getData() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
id: this.id, |
|||
pageNum: 1, |
|||
pageSize: 6, |
|||
}, |
|||
}; |
|||
const res = await selInstrumentByRes(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data.list; |
|||
this.total = parseInt(data.total); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 获取当前研究院(实验室)下的团队详情 |
|||
async getTeam() { |
|||
try { |
|||
const params = { param: { instituteId: this.id } }; |
|||
const res = await teamSearch(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.obj = data[0]; |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 查看 研究院/仪器 详情 |
|||
jump(id) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/InsDet', |
|||
name: 'InsDet', |
|||
params: { id }, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.ins-box { |
|||
min-height: 500px; |
|||
height: auto; |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-more { |
|||
right: 10px; |
|||
bottom: 0px; |
|||
cursor: pointer; |
|||
position: absolute; |
|||
} |
|||
|
|||
.item-box { |
|||
position: relative; |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
padding-bottom: 40px; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.item-title { |
|||
color: rgba(0, 0, 0, 0.85); |
|||
margin-top: 60px; |
|||
} |
|||
|
|||
.header-box { |
|||
text-align: center; |
|||
|
|||
p { |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.66); |
|||
height: 56px; |
|||
line-height: 56px; |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.h-box { |
|||
text-align: center; |
|||
font-size: 22px; |
|||
color: #096DD9; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
} |
|||
|
|||
.con-box { |
|||
text-align: center; |
|||
font-size: 18px; |
|||
height: 46px; |
|||
line-height: 46px; |
|||
color: rgba(112, 112, 112, 0.66); |
|||
} |
|||
</style> |
@ -1,150 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div> |
|||
<div class="search-background"> |
|||
<div class="d-flex"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">技术领域:</span> |
|||
<span |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
v-for="(item, index) in list" |
|||
:key="index" |
|||
class="ins-name" |
|||
@click="choose(index)" |
|||
> |
|||
{{ item.name }} |
|||
</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search class="item-search" v-model="fruitIpt" placeholder="搜索成果" enter-button="搜索" @search="searchFruit" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<fruit /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import { selModel } from 'config/api'; |
|||
import Fruit from 'components/PlatformList/Fruit.vue'; |
|||
import SenNav from './components/SenNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
export default { |
|||
name: 'Transfer', |
|||
components: { SenNav, Fruit, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
str: '这是知识产权与技术转移转化服务平台', |
|||
title: '知识产权与技术转移转化服务平台', |
|||
typeOfPlatform: '创新平台', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '知识产权与技术转移转化服务平台', url: '' }, |
|||
], |
|||
list: [], |
|||
achList: [], |
|||
fruitIpt: '', |
|||
}; |
|||
}, |
|||
watch: { |
|||
fruitIpt(val) { |
|||
const obj = { |
|||
content: this.fruitIpt, |
|||
isBtn: 0, |
|||
}; |
|||
this.setAchIpt(obj); |
|||
}, |
|||
}, |
|||
created() { |
|||
this.getType(); |
|||
this.setAchList([]); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setAchList', 'setAchIpt']), |
|||
// 获取类型列表 |
|||
async getType() { |
|||
try { |
|||
const params = { param: { model: 0 } }; |
|||
const res = await selModel(params); |
|||
const { code, mst, data } = res.data; |
|||
if (code === 200) { |
|||
this.list = data; |
|||
for (var i = 0; i < this.list.length; i++) { |
|||
this.list[i].isActive = false; |
|||
} |
|||
console.log(this.list); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 点击搜索 |
|||
searchFruit() { |
|||
const obj = { |
|||
content: this.fruitIpt, |
|||
isBtn: 1, |
|||
}; |
|||
this.setAchIpt(obj); |
|||
}, |
|||
// 选中类型时触发 |
|||
choose(index) { |
|||
const that = this; |
|||
that.achList = []; |
|||
const { list } = this; |
|||
list[index].isActive = !list[index].isActive; |
|||
this.list = [...list]; |
|||
for (let i = 0; i < list.length; i++) { |
|||
if (list[i].isActive) { |
|||
this.achList.push(list[i].id); |
|||
} |
|||
} |
|||
this.setAchList(this.achList); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.search-background { |
|||
background: rgba(0, 0, 0, 0.02); |
|||
border: 1px solid rgba(0, 0, 0, 0.06); |
|||
height: auto; |
|||
padding: 0 20px; |
|||
width: 82%; |
|||
margin: 40px auto; |
|||
line-height: 44px; |
|||
} |
|||
|
|||
.item-search { |
|||
width: 100%; |
|||
height: 32px; |
|||
} |
|||
|
|||
.ins-title { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.ins-name { |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
padding: 0 10px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.act-color { |
|||
color: #13ACC4 !important; |
|||
} |
|||
</style> |
@ -1,151 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<!-- <div v-if="newPartners && newPartners.length > 0"> |
|||
<div class="d-flex flex-wrap"> |
|||
<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-start fill-width enterprise-txt" |
|||
>{{ item.description }}</div> |
|||
<div class="d-flex flex-nowrap fill-width py-5 enterprise-more"> |
|||
<div class="flex-1"></div> |
|||
<span class="font-16 baseColor"> |
|||
了解更多 |
|||
<a-icon type="arrow-right" /> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
|||
</div> |
|||
<div class="inner d-flex flex-row-reverse pb-10 enterprise-page"> |
|||
<a-pagination |
|||
:page-size="pageSize" |
|||
:total="newPartners.length" |
|||
@change="onChange" |
|||
show-less-items |
|||
v-model="current" |
|||
v-show="newPartners.length > 6" |
|||
/> |
|||
</div> |
|||
</div>--> |
|||
<div v-if="newPartners && newPartners.length > 0"> |
|||
<div :key="index" class="mb-4" v-for="(item,index) in newPartners"> |
|||
<p |
|||
class="font-bold-24 title-color" |
|||
>{{ item.typeOfTech===0 ? '高校' : item.typeOfTech===1 ? '院所' : '企业' }}</p> |
|||
<div class="d-flex flex-wrap pointer"> |
|||
<div |
|||
:class="(index+1)%4===0? 'logo-box1' : ''" |
|||
@click="openProfile(item.name,item.description)" |
|||
class="logo-box d-flex flex-column align-center justify-center white mb-8" |
|||
> |
|||
<img :src="item.logoUrl" class="logo-pic my-2" v-if="list.logoUrl" /> |
|||
<div class="font-16 title-color">{{ item.name }}</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
import 'components/Introduce/PartnerShip.styl'; |
|||
import CompanyProfile from 'components/Introduce/CompanyProfile.vue'; |
|||
export default { |
|||
name: 'DeEnt', |
|||
components: { CompanyProfile }, |
|||
props: { |
|||
title: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
typeOfPlatform: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
current: 1, |
|||
pageSize: 6, |
|||
showProfile: false, // 显示公司介绍 |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('home', ['partners', 'profile']), |
|||
|
|||
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); |
|||
} |
|||
} |
|||
console.log('arr: ', arr); |
|||
return arr; |
|||
} |
|||
return arr; |
|||
}, |
|||
}, |
|||
|
|||
async created() { |
|||
this.setPartners([]); |
|||
const { title, typeOfPlatform } = this; |
|||
const params = { |
|||
param: { |
|||
pageNum: this.current, |
|||
pageSize: 6, |
|||
type: title === '合作伙伴' ? 1 : 2, |
|||
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1, |
|||
}, |
|||
}; |
|||
await this.getFrontSearchCompany(params); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setPartners', 'setProfile']), |
|||
...mapActions('home', ['getFrontSearchCompany']), |
|||
|
|||
// 切换页数 |
|||
onChange(current) { |
|||
this.current = current; |
|||
}, |
|||
|
|||
// 介绍 |
|||
openProfile(title, description) { |
|||
this.setProfile(null); |
|||
const profile = { |
|||
title, |
|||
description, |
|||
}; |
|||
this.setProfile(profile); |
|||
this.showProfile = true; |
|||
}, |
|||
|
|||
closeProfile() { |
|||
this.showProfile = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped></style> |
@ -1,57 +0,0 @@ |
|||
<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: '/NewPlatform/Share', |
|||
}, |
|||
{ |
|||
title: '知识产权与技术转移转化服务平台', |
|||
url: '/NewPlatform/Transfer', |
|||
}, |
|||
{ |
|||
title: '创新服务', |
|||
url: '/NewPlatform/Develop', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/NewPlatform/Transfer') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/NewPlatform/Develop') { |
|||
this.activeNum = 2; |
|||
} 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,27 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'NewPlatform', |
|||
data() { |
|||
return { |
|||
str: '创新平台界面', |
|||
list: [], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.wrap { |
|||
width: 1260px; |
|||
min-height: 1037px; |
|||
margin: 80px auto 28px auto; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
</style> |
@ -1,59 +0,0 @@ |
|||
<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: '/NewPlatform/NewCore', |
|||
}, |
|||
{ |
|||
title: '创新资源平台', |
|||
url: '/NewPlatform/News', |
|||
}, |
|||
{ |
|||
title: '创新服务', |
|||
url: '/NewPlatform/NewService', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
created() { |
|||
console.log(); |
|||
if (this.$route.fullPath === '/NewPlatform/News') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/NewPlatform/Share/Institute') { |
|||
this.activeNum = 1; |
|||
} else if (this.$route.fullPath === '/NewPlatform/NewService') { |
|||
this.activeNum = 2; |
|||
} 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,218 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button type="primary" @click="showModal"> |
|||
{{ str }} |
|||
</a-button> |
|||
<a-modal width="50%" :title="title" :visible="visible" :confirm-loading="confirmLoading" @ok="handleOk" @cancel="handleCancel"> |
|||
<a-form :form="form"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="公司名称"> |
|||
<a-input v-model.trim="platform.companyName" placeholder="请输入公司名称..." /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系人" required> |
|||
<a-input v-model.trim="platform.manName" placeholder="请输入联系人..." /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系电话" required> |
|||
<a-input @change="changePhone" type="tel" v-decorator="['tel', { rules: phoneRules }]" placeholder="请输入联系电话.." /> |
|||
</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="platform.code" /> |
|||
<a-button class="code_img ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
|||
<a-button :disabled="platform.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="项目信息简述" required> |
|||
<a-textarea v-model.trim="platform.describe" style="height: 120px" placeholder="请输入项目信息简述..." /> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import { JoinPlatform } from 'config/api'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'NewModel', |
|||
|
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
visible: false, |
|||
title: '协同创新中心加入申请', |
|||
str: '申请加入', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
platform: { |
|||
companyName: '', // 公司名称 |
|||
manName: '', // 联系人 |
|||
tel: '', // 联系电话 |
|||
describe: '', // 项目描述 |
|||
code: '', // 验证码 |
|||
isTel: false, |
|||
}, |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['picCode']), |
|||
async created() { |
|||
this.sendPicCode(); |
|||
await this.getUserSer(); |
|||
if (this.userSer) { |
|||
if (this.userSer.name) { |
|||
this.platform.manName = this.userSer.name; |
|||
} |
|||
if (this.userSer.phone) { |
|||
this.platform.tel = this.userSer.phone; |
|||
} |
|||
if (this.userSer.companyName) { |
|||
this.platform.companyName = this.userSer.companyName; |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
// 显示表单输入框 |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
// 验证电话 |
|||
changePhone(e) { |
|||
this.platform.tel = e.target.value; |
|||
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel); |
|||
}, |
|||
// 点击确定 |
|||
handleOk() { |
|||
if (!this.platform.manName) { |
|||
this.$message.error('请输入联系人'); |
|||
} else if (!this.platform.tel) { |
|||
this.$message.error('请输入联系电话'); |
|||
} else if (!this.platform.code) { |
|||
this.$message.error('请输入验证码'); |
|||
} else if (!this.platform.describe) { |
|||
this.$message.error('请输入项目信息简述'); |
|||
} else { |
|||
if (this.platform.isTel) { |
|||
this.subMitAdd(); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
}, |
|||
// 加入接口 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const params = { |
|||
param: { |
|||
code: this.platform.code, |
|||
companyName: this.platform.companyName, |
|||
contactName: this.platform.manName, |
|||
contactPhone: this.platform.tel, |
|||
description: this.platform.describe, |
|||
type: 0, |
|||
}, |
|||
}; |
|||
const res = await JoinPlatform(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('申请成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
for (let key in this.platform) { |
|||
this.platform[key] = ''; |
|||
} |
|||
this.platform.isTel = false; |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
// 获取验证码 |
|||
async getCode() { |
|||
console.log(111); |
|||
try { |
|||
const params = { |
|||
phone: this.platform.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
// throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
console.log(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> |
@ -1,231 +0,0 @@ |
|||
<template> |
|||
<div class="transition_test"> |
|||
<h2>过渡效果</h2> |
|||
|
|||
<button @click="show = !show">click</button> |
|||
<!-- <transition name="slide-fade"> |
|||
<div v-if="show" class="circle"></div> |
|||
</transition> --> |
|||
<div> |
|||
图片放大效果: |
|||
<transition name="img-fade"> |
|||
<img |
|||
class="bigimg" |
|||
v-if="show" |
|||
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" |
|||
alt="" |
|||
/> |
|||
</transition> |
|||
</div> |
|||
<div class="shop_cart"> |
|||
加入购物车动画(css实现): |
|||
<div class="add"> |
|||
<button @click="addShopCart">add</button> |
|||
<transition name="shop_cart"> |
|||
<img |
|||
class="add_img" |
|||
v-if="addShow" |
|||
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" |
|||
alt="" |
|||
/> |
|||
</transition> |
|||
</div> |
|||
<div class="cart"> |
|||
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="shop_cart"> |
|||
加入购物车动画(JavaScript钩子函数实现): |
|||
<div class="add"> |
|||
<button @click="addShopCart1">add</button> |
|||
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter"> |
|||
<img |
|||
class="add_img_js" |
|||
v-if="addShow1" |
|||
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" |
|||
alt="" |
|||
/> |
|||
</transition> |
|||
</div> |
|||
<div class="cart"> |
|||
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" /> |
|||
</div> |
|||
</div> |
|||
<!-- 动画数组效果 --> |
|||
<ul class="group_list"> |
|||
<button @click="addItem">addItem</button> |
|||
<button @click="removeItem">removeItem</button> |
|||
<transition-group name="list"> |
|||
<li class="group_item" v-for="item in list" :key="item">{{ item }}</li> |
|||
</transition-group> |
|||
</ul> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
name: 'myTransition', |
|||
components: {}, |
|||
data() { |
|||
return { |
|||
show: false, |
|||
addShow: false, |
|||
addShow1: false, |
|||
list: [1, 2, 3], |
|||
}; |
|||
}, |
|||
created() {}, |
|||
|
|||
methods: { |
|||
addShopCart() { |
|||
this.addShow = true; |
|||
setTimeout(() => { |
|||
this.addShow = false; |
|||
}, 1000); |
|||
}, |
|||
addShopCart1() { |
|||
this.addShow1 = true; |
|||
}, |
|||
|
|||
// 动画钩子函数 |
|||
// 进入前状态 |
|||
beforeEnter(el) { |
|||
el.style.left = '-20px'; |
|||
el.style.top = '-15px'; |
|||
el.style.transform = 'scale(1)'; |
|||
}, |
|||
// 进入中 |
|||
enter(el, done) { |
|||
// 需要调用元素的offset操作,才有过渡的效果,否则会马上实现过渡 |
|||
el.offsetWidth; |
|||
el.style.left = '600px'; |
|||
el.style.top = '-160px'; |
|||
el.style.transform = 'scale(.5)'; |
|||
done(); |
|||
}, |
|||
// 进入后 |
|||
afterEnter() { |
|||
this.addShow1 = false; |
|||
}, |
|||
|
|||
// 新增 |
|||
addItem() { |
|||
this.list.push(this.list.length + 1); |
|||
}, |
|||
// 删除 |
|||
removeItem() { |
|||
if (this.list.length > 1) { |
|||
this.list.pop(); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
.transition_test { |
|||
text-align: left; |
|||
padding-bottom: 300px; |
|||
} |
|||
.circle { |
|||
width: 100px; |
|||
height: 100px; |
|||
border-radius: 50%; |
|||
background-color: aquamarine; |
|||
} |
|||
.slide-fade-enter-active, |
|||
.slide-fade-leave-active { |
|||
transition: all 0.5s ease-out; |
|||
} |
|||
.slide-fade-enter, |
|||
.slide-fade-leave-to { |
|||
/* transform: translateX(500px); */ |
|||
opacity: 0; |
|||
} |
|||
.bigimg { |
|||
width: 300px; |
|||
} |
|||
|
|||
.img-fade-enter-active { |
|||
transition: all 1s ease-out; |
|||
} |
|||
.img-fade-enter { |
|||
transform: scale(0.5); |
|||
/* width: 50px; */ |
|||
} |
|||
|
|||
.shop_cart { |
|||
padding: 20px; |
|||
} |
|||
.shop_cart .add { |
|||
position: relative; |
|||
margin-top: 100px; |
|||
width: 500px; |
|||
display: inline-block; |
|||
} |
|||
.shop_cart .add button { |
|||
position: absolute; |
|||
z-index: 99; |
|||
} |
|||
.shop_cart .cart { |
|||
width: 300px; |
|||
display: inline-block; |
|||
} |
|||
.shop_cart .cart img { |
|||
width: 100%; |
|||
} |
|||
.shop_cart .add_img { |
|||
width: 100px; |
|||
position: absolute; |
|||
left: 600px; |
|||
top: -160px; |
|||
} |
|||
/* 动画效果实现 */ |
|||
/* @keyframes bounce-in { |
|||
0% { |
|||
transform: scale(1); |
|||
transform: translate(-610px, 100px); |
|||
} |
|||
100% { |
|||
transform: scale(.5); |
|||
transform: translate(0px, 0px); |
|||
} |
|||
} |
|||
.shop_cart-enter-active { |
|||
animation: bounce-in 1s; |
|||
} */ |
|||
|
|||
/* CSS类名实现 */ |
|||
.shop_cart-enter-active { |
|||
transition: all 1s ease-out; |
|||
} |
|||
.shop_cart-enter { |
|||
opacity: 0; |
|||
transform: scale(0.5); |
|||
transform: translate(-610px, 100px); |
|||
} |
|||
.shop_cart .add_img_js { |
|||
width: 100px; |
|||
position: absolute; |
|||
left: 600px; |
|||
top: -160px; |
|||
transition: all 1s; |
|||
} |
|||
.group_list { |
|||
padding: 30px; |
|||
} |
|||
.group_list .group_item { |
|||
width: 200px; |
|||
height: 100px; |
|||
border: 1px solid orangered; |
|||
margin: 10px; |
|||
} |
|||
.list-enter-active, |
|||
.list-leave-active { |
|||
transition: all 0.8s; |
|||
} |
|||
.list-enter, |
|||
.list-leave-to { |
|||
opacity: 0; |
|||
transform: translateX(40px); |
|||
} |
|||
</style> |
@ -1,40 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" /> |
|||
<policy-list class="py-5 my-5" /> |
|||
<!-- <policy-details v-else/> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import PolicyList from './components/PolicyList.vue'; |
|||
export default { |
|||
name: 'Policy', |
|||
components: { |
|||
BreadCrumb, |
|||
PolicyList, |
|||
// PolicyDetails, |
|||
}, |
|||
data() { |
|||
return { |
|||
showType: 1, |
|||
list: [], |
|||
arr: [{ name: '创新政策', url: '' }], |
|||
}; |
|||
}, |
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
</style> |
@ -1,107 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="white inner"> |
|||
<div class="policy-title"> |
|||
<span>{{ obj.title }}</span> |
|||
</div> |
|||
<div class="policy-info"> |
|||
<span> |
|||
<a-icon class="baseColor" type="clock-circle" /> |
|||
<span>{{ obj.time }}</span> |
|||
</span> |
|||
<span class="ml-8"> |
|||
<!-- <a-icon type="form" /> --> |
|||
<a-icon style="color: #ff1857" type="tag" /> |
|||
<span>{{ obj.source }}</span> |
|||
</span> |
|||
</div> |
|||
<div class="policy-content" v-dompurify-html="obj.content"></div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
import { selPolicy } from 'config/api'; |
|||
export default { |
|||
name: 'PolicyDetails', |
|||
data() { |
|||
return { |
|||
str: '这是政策详情界面', |
|||
obj: { |
|||
title: '', |
|||
content: '', |
|||
time: '', |
|||
source: '', |
|||
}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['policyId']), |
|||
created() { |
|||
this.getPolicyDet(); |
|||
}, |
|||
methods: { |
|||
async getPolicyDet() { |
|||
try { |
|||
const params = { param: { id: this.policyId } }; |
|||
const res = await selPolicy(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.obj.title = data.title; |
|||
this.obj.content = data.content; |
|||
this.obj.time = data.publishTime; |
|||
this.obj.source = data.publishDepartName; |
|||
window.scroll(0, 0); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.back-btn { |
|||
width: 80px; |
|||
position: absolute; |
|||
right: 0; |
|||
} |
|||
|
|||
.policy-title { |
|||
height: 120px; |
|||
font-size: 24px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
opacity: 1; |
|||
text-align: center; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
padding: 0 150px; |
|||
border-bottom: 1px solid #707070; |
|||
} |
|||
|
|||
.policy-info { |
|||
height: 76px; |
|||
line-height: 76px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.policy-content { |
|||
padding: 0 25px 25px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-weight: 400; |
|||
font-family: Microsoft YaHei; |
|||
} |
|||
</style> |
@ -1,305 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="box"> |
|||
<div class="search-list"> |
|||
<!-- <search-list @iptCon="getInput" /> --> |
|||
<span> |
|||
<a-checkbox :checked="pStatus.bw - 0 === 1" @click="changeStatus('bw')">国家</a-checkbox> |
|||
<a-checkbox :checked="pStatus.sx - 0 === 1" @click="changeStatus('sx')">山西省</a-checkbox> |
|||
<a-checkbox :checked="pStatus.zg - 0 === 1" @click="changeStatus('zg')">山西省综改区</a-checkbox> |
|||
<a-checkbox :checked="pStatus.ty - 0 === 1" @click="changeStatus('ty')">太原市</a-checkbox> |
|||
</span> |
|||
<a-input-group class="search" compact> |
|||
<a-select |
|||
@change="changeCode" |
|||
style="width: 120px; height: 40px" |
|||
v-model="pStatus.policyText[pStatus.value - 1]" |
|||
> |
|||
<a-select-option value="1">标题</a-select-option> |
|||
<a-select-option value="2">地区</a-select-option> |
|||
<a-select-option value="3">发布部门</a-select-option> |
|||
</a-select> |
|||
<a-input-search |
|||
@search="getPolicy" |
|||
enter-button="搜索" |
|||
placeholder="请输入..." |
|||
style="width: 76.2%" |
|||
v-model="pStatus.iptCon" |
|||
/> |
|||
</a-input-group> |
|||
</div> |
|||
<div class="policy-box"> |
|||
<div :key="index" v-for="(item, index) in lists"> |
|||
<div class="date-box"> |
|||
<p class="date-mon">{{ monthEnglish[item.publishTime.split('-')[1] - 1] }}.</p> |
|||
<p class="date-day">{{ item.publishTime.split('-')[2] }}</p> |
|||
</div> |
|||
<p class="item-title">{{ item.title }}</p> |
|||
<p class="item-content">{{ item.intro }}</p> |
|||
<!-- <p class="item-content" v-html="item.content"></p> --> |
|||
<p class="source-time"> |
|||
<span |
|||
@click="openWin(item.titleUrl)" |
|||
class="baseColor source" |
|||
>来源:{{ item.publishDepartName }}</span> |
|||
<span class="time">{{ item.publishTime }}</span> |
|||
</p> |
|||
<p class="original baseColor"> |
|||
<span @click="LookSource(item.id)"> |
|||
了解更多 |
|||
<a-icon type="arrow-right" /> |
|||
</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
<a-pagination |
|||
:current="current" |
|||
:page-size="pageSize" |
|||
:total="total" |
|||
@change="onShowSizeChange" |
|||
class="pagination" |
|||
show-less-items |
|||
show-quick-jumper |
|||
v-show="total > 5" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
import { selLikePolicy } from 'config/api'; |
|||
export default { |
|||
name: 'PolicyList', |
|||
data() { |
|||
return { |
|||
str: '这是创新政策界面', |
|||
lists: [], |
|||
total: 0, |
|||
pageSize: 5, |
|||
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'], |
|||
pCode: ['title', 'area', 'area'], |
|||
pStatus: { |
|||
bw: 0, |
|||
sx: 0, |
|||
zg: 0, |
|||
ty: 0, |
|||
value: 1, // 搜索框当前选项value |
|||
code: 'title', // 搜索框当前选项code |
|||
policyText: ['标题', '地区', '发布部门'], // 搜索框选项列表 |
|||
iptCon: '', // 搜索框input内容 |
|||
}, |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['current', 'policyStatus']), |
|||
|
|||
watch: { |
|||
policyStatus(val) { |
|||
this.setCurrent(1); |
|||
this.getPolictList(); |
|||
}, |
|||
}, |
|||
|
|||
created() { |
|||
this.pStatus = this.policyStatus; |
|||
this.getPolictList(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setPolicyId', 'setCurrent', 'setPolicyStatus']), |
|||
async getPolictList() { |
|||
try { |
|||
const params = { |
|||
param: { |
|||
bw: this.policyStatus.bw, |
|||
code: this.policyStatus.code, |
|||
input: this.policyStatus.iptCon, |
|||
pageNum: this.current, |
|||
pageSize: 5, |
|||
sx: this.policyStatus.sx, |
|||
zg: this.policyStatus.zg, |
|||
ty: this.policyStatus.ty, |
|||
}, |
|||
}; |
|||
const res = await selLikePolicy(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data.list; |
|||
this.total = data.total - 0; |
|||
window.scroll(0, 0); |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 查看政策详情 |
|||
LookSource(id) { |
|||
this.setPolicyId(id); |
|||
this.$router.push('/Policy/PolicyDetails'); |
|||
}, |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.setCurrent(current); |
|||
this.getPolictList(); |
|||
}, |
|||
// 政策界面课程类目多选框发生改变时的事件 |
|||
changeStatus(str) { |
|||
if (this.pStatus[str]) { |
|||
this.pStatus[str] = 0; |
|||
} else { |
|||
this.pStatus[str] = 1; |
|||
} |
|||
this.setPolicyStatus(this.pStatus); |
|||
}, |
|||
// 政策界面课程类目搜索提示 |
|||
changeCode(value) { |
|||
this.pStatus.code = this.pCode[value - 1]; |
|||
}, |
|||
// 点击搜索按钮 |
|||
getPolicy() { |
|||
this.setCurrent(1); |
|||
this.setPolicyStatus(this.pStatus); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.box { |
|||
width: 100%; |
|||
min-height: 1037px; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.search-list { |
|||
height: 72px; |
|||
line-height: 72px; |
|||
background: #fff; |
|||
padding: 0 24px; |
|||
position: relative; |
|||
} |
|||
|
|||
.search { |
|||
width: 500px; |
|||
position: absolute; |
|||
right: 25px; |
|||
top: 20px; |
|||
} |
|||
|
|||
.policy-box { |
|||
div { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 238px; |
|||
overflow: hidden; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
margin-top: 24px; |
|||
padding: 25px; |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
margin-left: 200px; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.item-content { |
|||
margin-left: 200px; |
|||
text-indent: 2em; |
|||
font-size: 16px; |
|||
line-height: 36px; |
|||
color: rgba(0, 0, 0, 0.35); |
|||
font-family: Microsoft YaHei; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.source { |
|||
cursor: pointer; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
opacity: 1; |
|||
margin-right: 24px; |
|||
} |
|||
|
|||
.time { |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
color: rgba(0, 0, 0, 0.25); |
|||
opacity: 1; |
|||
} |
|||
|
|||
.original { |
|||
position: absolute; |
|||
right: 25px; |
|||
bottom: 25px; |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
opacity: 1; |
|||
margin-bottom: 0; |
|||
|
|||
span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
.date-box { |
|||
height: 188px !important; |
|||
width: 188px !important; |
|||
position: absolute !important; |
|||
top: 0 !important; |
|||
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
text-align: center; |
|||
box-shadow: none !important; |
|||
|
|||
p { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.date-mon { |
|||
font-size: 40px; |
|||
height: 40px; |
|||
line-height: 40px; |
|||
font-weight: 500; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.date-day { |
|||
font-size: 70px; |
|||
height: 80px; |
|||
line-height: 80px; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.source-time { |
|||
margin-left: 200px; |
|||
position: absolute; |
|||
bottom: 26px; |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 68px; |
|||
text-align: right; |
|||
} |
|||
</style> |
Loading…
Reference in new issue