114 changed files with 438 additions and 15399 deletions
@ -1,3 +1,3 @@ |
|||
VUE_APP_MODE=production |
|||
VUE_APP_PREVIEW=false |
|||
VUE_APP_URL=http://www.sxgreenvalley.com/ |
|||
VUE_APP_URL=https://test.tall.wiki/checkwork |
|||
|
|||
@ -1,10 +1,10 @@ |
|||
VUE_APP_MODE=development |
|||
VUE_APP_NODE_ENV=development |
|||
VUE_APP_SCENE=greenvalley |
|||
VUE_APP_BASE_URL=http://www.sxgreenvalley.com/ |
|||
VUE_APP_API_URL=http://www.sxgreenvalley.com/gateway |
|||
VUE_APP_SCENE=checkwork |
|||
VUE_APP_BASE_URL=https://test.tall.wiki/checkwork/ |
|||
VUE_APP_API_URL=https://test.tall.wiki/checkwork/gateway |
|||
VUE_APP_PROXY_URL=/gateway |
|||
VUE_APP_PUBLIC_PATH=/ |
|||
VUE_APP_PUBLIC_PATH=/checkwork |
|||
VUE_APP_MSG_URL=wss://test.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_TITLE=绿谷在线 |
|||
VUE_APP_DESCRIPTION=绿谷在线管理后台 |
|||
VUE_APP_TITLE=考勤管理 |
|||
VUE_APP_DESCRIPTION=考勤管理 |
|||
|
|||
@ -1,10 +1,10 @@ |
|||
VUE_APP_MODE=production |
|||
VUE_APP_NODE_ENV=production |
|||
VUE_APP_SCENE=greenvalley |
|||
VUE_APP_BASE_URL=http://www.sxgreenvalley.com/ |
|||
VUE_APP_API_URL=http://www.sxgreenvalley.com/gateway |
|||
VUE_APP_SCENE=checkwork |
|||
VUE_APP_BASE_URL=https://test.tall.wiki/checkwork/ |
|||
VUE_APP_API_URL=https://test.tall.wiki/checkwork/gateway |
|||
VUE_APP_PROXY_URL=/gateway |
|||
VUE_APP_PUBLIC_PATH=/ |
|||
VUE_APP_PUBLIC_PATH=/checkwork |
|||
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws |
|||
VUE_APP_TITLE=绿谷在线 |
|||
VUE_APP_DESCRIPTION=绿谷在线管理后台 |
|||
VUE_APP_TITLE=考勤管理 |
|||
VUE_APP_DESCRIPTION=考勤管理 |
|||
|
|||
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,200 +0,0 @@ |
|||
.nav-box { |
|||
height: 50px; |
|||
background: #000000; |
|||
line-height: 50px; |
|||
padding: 0 9%; |
|||
color: #fff; |
|||
font-size: 16px; |
|||
div { |
|||
margin-right: 56px; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
.nav-box-active { |
|||
color: #13ACC4 !important; |
|||
} |
|||
|
|||
.top-box { |
|||
overflow: hidden; |
|||
background-image: linear-gradient(to right, #6C63FF , #13ACC4); |
|||
position: relative; |
|||
} |
|||
.top-title { |
|||
position: absolute; |
|||
top: 70px; |
|||
left: 4%; |
|||
padding: 0; |
|||
font-size: 50px; |
|||
color: #fff; |
|||
} |
|||
|
|||
@media only screen and (max-width: 1500px) { |
|||
.top-title { |
|||
font-size: 40px; |
|||
} |
|||
} |
|||
|
|||
.top-content { |
|||
float: right; |
|||
margin: 30px 0; |
|||
margin-right: 12%; |
|||
width: 62%; |
|||
padding: 0; |
|||
font-size: 16px; |
|||
color: #fff; |
|||
line-height: 36px; |
|||
} |
|||
|
|||
.circular { |
|||
height: 20px; |
|||
width: 20px; |
|||
background: #13ACC4; |
|||
border-radius: 50%; |
|||
top: 50%; |
|||
margin-top: -10px; |
|||
position: absolute; |
|||
} |
|||
|
|||
.center-box { |
|||
overflow: hidden; |
|||
background: #fff; |
|||
padding: 0 9%; |
|||
position: relative; |
|||
} |
|||
.center-title { |
|||
position: absolute; |
|||
top: 40%; |
|||
font-size: 30px; |
|||
color: #000; |
|||
} |
|||
.center-content { |
|||
float: right; |
|||
margin: 50px 0; |
|||
width: 79%; |
|||
line-height: 36px; |
|||
font-size: 16px; |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
.bottom-box { |
|||
// height: 830px; |
|||
overflow: hidden; |
|||
position: relative; |
|||
padding: 0 9%; |
|||
} |
|||
.bottom-title { |
|||
position: absolute; |
|||
top: 20%; |
|||
font-size: 30px; |
|||
color: #000; |
|||
} |
|||
.bottom-content { |
|||
position: relative; |
|||
float: right; |
|||
margin: 40px 0; |
|||
width: 79%; |
|||
} |
|||
|
|||
.partner-box { |
|||
// height: 1060px; |
|||
overflow: hidden; |
|||
position: relative; |
|||
padding: 0 9%; |
|||
background: #fff; |
|||
} |
|||
.partner-title { |
|||
position: absolute; |
|||
top: 15%; |
|||
font-size: 30px; |
|||
color: #000; |
|||
} |
|||
.partner-content { |
|||
float: right; |
|||
margin: 100px 0; |
|||
width: 79%; |
|||
} |
|||
|
|||
.join-box { |
|||
// height: 300px; |
|||
overflow: hidden; |
|||
position: relative; |
|||
padding: 0 9%; |
|||
} |
|||
.join-title { |
|||
position: absolute; |
|||
top: 40%; |
|||
font-size: 30px; |
|||
color: #000; |
|||
} |
|||
.join-content { |
|||
float: right; |
|||
margin: 70px 0; |
|||
font-size: 16px; |
|||
width: 79%; |
|||
color: rgba(0,0,0,0.65); |
|||
line-height: 36px; |
|||
} |
|||
|
|||
.content-box { |
|||
position: relative; |
|||
padding: 0 9%; |
|||
} |
|||
|
|||
.space-box{ |
|||
height: 150px; |
|||
} |
|||
|
|||
// .space-box:hover{ |
|||
// box-shadow: 0 6px 6px rgba(0,0,0,0.16) |
|||
// } |
|||
|
|||
// .space-box:hover .introduce-title{ |
|||
// margin-top: 10px; |
|||
// } |
|||
|
|||
.introduce-box { |
|||
width: 60%; |
|||
overflow: hidden; |
|||
position: relative; |
|||
background: #fff; |
|||
cursor: pointer; |
|||
padding: 0 30px; |
|||
} |
|||
|
|||
.introduce-title { |
|||
margin: 10px 0; |
|||
font-size: 26px; |
|||
color: rgba(0,0,0,0.85); |
|||
} |
|||
.introduce-content { |
|||
font-size: 16px; |
|||
color: rgba(0,0,0,0.65); |
|||
margin-bottom: 0 |
|||
} |
|||
.flow-path { |
|||
background: -webkit-linear-gradient(left, #13ACC4 , #fff); |
|||
padding: 30px 9%; |
|||
position: relative; |
|||
} |
|||
.flow-title { |
|||
position: absolute; |
|||
top: 40%; |
|||
font-size: 30px; |
|||
color: #fff; |
|||
} |
|||
.flow-content { |
|||
margin-left: 20%; |
|||
width:80%; |
|||
font-size: 16px; |
|||
color: #fff; |
|||
} |
|||
.flow-content1 { |
|||
margin-left: 15%; |
|||
width:85%; |
|||
} |
|||
.login-color { |
|||
color: #096DD9; |
|||
cursor: pointer; |
|||
} |
|||
@ -1,66 +0,0 @@ |
|||
<template> |
|||
<div class="head"> |
|||
<a-carousel :autoplay="false"> |
|||
<div :key="item.id" v-for="item in bannerLists"> |
|||
<img :src="item.url" alt style="width: 100% !important" /> |
|||
<div id="banner-box"></div> |
|||
</div> |
|||
</a-carousel> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
export default { |
|||
name: 'RichText', |
|||
props: { |
|||
showPage: { |
|||
type: Number, |
|||
default: 11, |
|||
}, |
|||
}, |
|||
data() { |
|||
return {}; |
|||
}, |
|||
|
|||
computed: mapState('home', ['bannerLists']), |
|||
|
|||
// mounted() { |
|||
// window.addEventListener('scroll', this.handleScroll); |
|||
// setTimeout(() => { |
|||
// document.querySelector('#banner-box').scrollIntoView({ |
|||
// behavior: 'smooth', // 平滑过渡 |
|||
// block: 'start', // 上边框与视窗顶部平齐 |
|||
// }); |
|||
// }, 1000); |
|||
// }, |
|||
|
|||
async created() { |
|||
this.setBannerLists([]); |
|||
await this.getQueryRotation(this.showPage); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setBannerLists']), |
|||
...mapActions('home', ['getQueryRotation']), |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.head { |
|||
background: white; |
|||
overflow: hidden; |
|||
position: relative; |
|||
// height: 170px; |
|||
} |
|||
|
|||
#banner-box { |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0; |
|||
width: 100%; |
|||
height: 80px; |
|||
opacity: 0; |
|||
} |
|||
</style> |
|||
@ -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,63 +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,92 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-01-13 17:21:29 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-01-20 12:40:56 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<div class="footer"> |
|||
<div class="d-flex flex-nowrap inner"> |
|||
<div class="box"> |
|||
<img class="pic" src="~assets/logo_bottom.png" /> |
|||
</div> |
|||
<div class="box flex-1 d-flex flex-column" style="padding-left: 13%"> |
|||
<div class="title">发现</div> |
|||
<span @click="$router.push('/Challenge/Solicitation')" class="pointer">创新挑战</span> |
|||
<span @click="$router.push('/NewPlatform/NewCore')" class="pointer">创新平台</span> |
|||
<span @click="$router.push('/IncubationPlatform/MakerSpace')" class="pointer">孵化平台</span> |
|||
<span @click="$router.push('/Industry/Union')" class="pointer">产业平台</span> |
|||
<span @click="$router.push('/Community')" class="pointer">交流社区</span> |
|||
</div> |
|||
<div class="box flex-1 d-flex flex-column"> |
|||
<div class="title">资讯</div> |
|||
<span @click="$router.push('/ItInformation')" class="pointer">行业资讯</span> |
|||
<span @click="$router.push('/Activity')" class="pointer">活动公告</span> |
|||
<span @click="$router.push('/Policy')" class="pointer">创新政策</span> |
|||
</div> |
|||
<div class="box flex-1 d-flex flex-column"> |
|||
<div class="title">联系我们</div> |
|||
<span @click="$router.push('/ContactUs')" class="pointer">人才招聘</span> |
|||
<div class="font-bold-24 mt-3" style="font-style: italic">0351-5223175</div> |
|||
</div> |
|||
<div class="box"> |
|||
<img |
|||
class="pic" |
|||
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/lvgu.jpg" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="xian"></div> |
|||
<div class="font-12 align-center text"> |
|||
Copyright © 2020 The Project by |
|||
<span style="color: #2e54ea">CCSENS</span>. All Rights Reserved |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { str: '头部导航栏' }; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.footer { |
|||
color: #D7D7D7; |
|||
} |
|||
|
|||
.pic { |
|||
width: 130px; |
|||
} |
|||
|
|||
.box { |
|||
margin-top: 58px; |
|||
|
|||
.title { |
|||
font-size: 18px; |
|||
margin-bottom: 18px; |
|||
} |
|||
|
|||
span { |
|||
font-size: 12px; |
|||
line-height: 24px; |
|||
} |
|||
} |
|||
|
|||
.xian { |
|||
width: 100%; |
|||
height: 1px; |
|||
background: rgba(204, 204, 204, 0.35); |
|||
margin-top: 100px; |
|||
} |
|||
|
|||
.text { |
|||
text-align: center; |
|||
line-height: 90px; |
|||
} |
|||
</style> |
|||
@ -1,85 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-01-13 17:21:29 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-01-21 09:33:25 |
|||
--> |
|||
<template> |
|||
<div class="friend"> |
|||
<div class="inner"> |
|||
{{ str }} |
|||
<span :key="index" class="mx-2 item-friend" v-for="(item, index) in lists" @click="jump(item.url)">{{ item.name }}</span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
str: '友情链接:', |
|||
lists: [ |
|||
{ |
|||
name: '科技部', |
|||
url: 'http://www.most.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '发改委', |
|||
url: 'https://www.ndrc.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '工信部', |
|||
url: 'https://www.miit.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '山西综改区', |
|||
url: 'http://zgq.shanxi.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '山西省科技厅', |
|||
url: 'http://kjt.shanxi.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '山西省工信厅', |
|||
url: 'http://gxt.shanxi.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '山西省发改委', |
|||
url: 'http://fgw.shanxi.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '太原市科技厅', |
|||
url: 'http://kjj.taiyuan.gov.cn/', |
|||
}, |
|||
{ |
|||
name: '太原市发改委', |
|||
url: 'http://fgw.taiyuan.gov.cn/', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
jump(url) { |
|||
window.open(url); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.friend { |
|||
line-height: 64px; |
|||
background: #fff; |
|||
font-size: 12px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.item-friend { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.item-friend:hover { |
|||
color: #13ACC4; |
|||
} |
|||
</style> |
|||
@ -1,286 +1,36 @@ |
|||
<template> |
|||
<div class="white d-flex flex-row flex-nowrap px-10 align-center"> |
|||
<img |
|||
@click="jumUrl('/',0)" |
|||
alt |
|||
class="logo-img" |
|||
src="@/assets/logo.png" |
|||
style="cursor: pointer" |
|||
/> |
|||
<div class="flex-1 ml-8"> |
|||
<a-dropdown |
|||
:class="activeItem === a ? 'list-down-active' : ''" |
|||
:disabled="item.children.length > 0 ? false : true" |
|||
:key="a" |
|||
class="list-down" |
|||
v-for="(item, a) in list" |
|||
> |
|||
<a @click="jumUrl(item.url,a)" class="ant-dropdown-link"> |
|||
{{ item.name }} |
|||
<a-icon type="down" v-show="item.children.length > 0" /> |
|||
</a> |
|||
<a-menu slot="overlay"> |
|||
<a-menu-item |
|||
:key="b" |
|||
class="px-6 py-3" |
|||
style="text-align: center" |
|||
v-for="(con, b) in item.children" |
|||
> |
|||
<a @click="jumUrl(con.url,a)">{{ con.title }}</a> |
|||
</a-menu-item> |
|||
</a-menu> |
|||
</a-dropdown> |
|||
</div> |
|||
<div class="d-flex flex-nowrap align-center"> |
|||
<a-icon class="icon-head pointer icon-head-right" type="search" /> |
|||
<a-tooltip placement="bottom"> |
|||
<template slot="title"> |
|||
<span>点击查看购物车!</span> |
|||
</template> |
|||
<a-icon |
|||
@click="$router.push('/Cart')" |
|||
class="baseColor icon-head icon-head-right pointer" |
|||
type="shopping-cart" |
|||
/> |
|||
</a-tooltip> |
|||
<router-link tag="span" to="/login" v-if="!nickName"> |
|||
<a-icon class="icon-head pointer" style="right: 50px" type="user" /> |
|||
</router-link> |
|||
<div class="icon-head" v-else>{{ nickName }}</div> |
|||
</div> |
|||
<div class="d-flex align-center justify-center nav"> |
|||
<a-icon type="left" class="back" /> |
|||
<div>考勤管理</div> |
|||
<a-button type="primary" size="small" class="export"> 导出 </a-button> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
str: '这是头部导航', |
|||
activeItem: '', |
|||
list: [ |
|||
{ |
|||
name: '关于我们', |
|||
url: '/About/Introduce', |
|||
children: [ |
|||
{ |
|||
title: '公司介绍', |
|||
url: '/About/Introduce', |
|||
}, |
|||
{ |
|||
title: '组织机构', |
|||
url: '/About/Organ', |
|||
}, |
|||
{ |
|||
title: '合作伙伴', |
|||
url: '/About/Partner', |
|||
}, |
|||
{ |
|||
title: '衍生企业', |
|||
url: '/About/SpinOffs', |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
name: '创新政策', |
|||
children: [], |
|||
url: '/Policy', |
|||
}, |
|||
{ |
|||
name: '创新平台', |
|||
children: [ |
|||
{ |
|||
title: '协同创新中心', |
|||
url: '/NewPlatform/NewCore', |
|||
}, |
|||
{ |
|||
title: '创新资源平台', |
|||
url: '/NewPlatform/News', |
|||
}, |
|||
{ |
|||
title: '创新服务', |
|||
url: '/NewPlatform/NewService', |
|||
}, |
|||
], |
|||
url: '/NewPlatform/NewCore', |
|||
}, |
|||
{ |
|||
name: '孵化平台', |
|||
url: '/IncubationPlatform/MakerSpace', |
|||
children: [ |
|||
{ |
|||
title: '众创空间', |
|||
url: '/IncubationPlatform/MakerSpace', |
|||
}, |
|||
{ |
|||
title: '创业服务', |
|||
url: '/IncubationPlatform/Services', |
|||
}, |
|||
{ |
|||
title: '产品展示', |
|||
url: '/IncubationPlatform/Products', |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
name: '产业平台', |
|||
children: [ |
|||
{ |
|||
title: '产业创新联盟', |
|||
url: '/Industry/Union', |
|||
}, |
|||
{ |
|||
title: '产业服务', |
|||
url: '/Industry/Serve', |
|||
}, |
|||
{ |
|||
title: '衍生企业', |
|||
url: '/Industry/Enterprise', |
|||
}, |
|||
], |
|||
url: '/Industry/Union', |
|||
}, |
|||
{ |
|||
name: '知识平台', |
|||
children: [], |
|||
url: '/Knowledge', |
|||
}, |
|||
{ |
|||
name: '活动公告', |
|||
children: [], |
|||
url: '/Activity', |
|||
}, |
|||
{ |
|||
name: '创新挑战', |
|||
children: [ |
|||
{ |
|||
title: '需求征集', |
|||
url: '/Challenge/Solicitation', |
|||
}, |
|||
{ |
|||
title: '项目发布', |
|||
url: '/Challenge/Release', |
|||
}, |
|||
{ |
|||
title: '结果公告', |
|||
url: '/Challenge/Notice', |
|||
}, |
|||
], |
|||
url: '/Challenge/Solicitation', |
|||
}, |
|||
{ |
|||
name: '交流社区', |
|||
children: [], |
|||
url: '/Community', |
|||
}, |
|||
{ |
|||
name: '联系我们', |
|||
children: [], |
|||
url: '/ContactUs', |
|||
}, |
|||
], |
|||
}; |
|||
return {}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('user', ['anyringToken', 'user']), |
|||
created() {}, |
|||
|
|||
nickName() { |
|||
const anyringToken = sessionStorage.getItem('anyringToken') || this.anyringToken; |
|||
const user = sessionStorage.getItem('user') && JSON.parse(sessionStorage.getItem('user')); |
|||
if (anyringToken) { |
|||
if (user.wxInfo.nickname) { |
|||
return user.wxInfo.nickname; |
|||
} else { |
|||
const account = this.user.account || user.account; |
|||
return account; |
|||
} |
|||
} else { |
|||
return ''; |
|||
} |
|||
}, |
|||
}, |
|||
mounted() {}, |
|||
|
|||
watch: { |
|||
$route: { |
|||
handler(val) { |
|||
const router = val.path.split('/')[1]; |
|||
const arr = []; |
|||
for (let i = 0; i < this.list.length; i++) { |
|||
const item = this.list[i]; |
|||
const url = item.url.split('/')[1]; |
|||
arr.push(url); |
|||
} |
|||
const index = arr.indexOf(router); |
|||
this.activeItem = index; |
|||
}, |
|||
// 深度观察监听 |
|||
deep: true, |
|||
}, |
|||
}, |
|||
|
|||
methods: { |
|||
jumUrl(url, index) { |
|||
if (this.$route.path !== url) { |
|||
this.$router.push(url); |
|||
} |
|||
this.activeItem = index; |
|||
}, |
|||
}, |
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.head { |
|||
height: 80px; |
|||
width: 100%; |
|||
background: white; |
|||
// position: relative; |
|||
<style lang="less" scoped> |
|||
.nav { |
|||
position: relative; |
|||
height: 40px; |
|||
} |
|||
|
|||
.list-down { |
|||
margin-right: 20px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
} |
|||
|
|||
.list-down:hover { |
|||
color: #13ACC4; |
|||
border-bottom: 2px solid #13ACC4; |
|||
} |
|||
|
|||
.list-down-active { |
|||
color: #13ACC4; |
|||
border-bottom: 2px solid #13ACC4; |
|||
} |
|||
|
|||
.logo-img { |
|||
height: 44px; |
|||
} |
|||
|
|||
.icon-head { |
|||
font-size: 24px; |
|||
} |
|||
|
|||
.icon-head-right { |
|||
margin-right: 32px; |
|||
} |
|||
|
|||
@media only screen and (max-width: 1400px) { |
|||
.list-down { |
|||
margin-right: 18px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
// .logo-img { |
|||
// height: 44px; |
|||
// } |
|||
.icon-head { |
|||
font-size: 24px; |
|||
} |
|||
|
|||
.icon-head-right { |
|||
margin-right: 24px; |
|||
.back { |
|||
position: absolute; |
|||
left: 0; |
|||
} |
|||
.export { |
|||
position: absolute; |
|||
right: 0; |
|||
} |
|||
</style> |
|||
|
|||
@ -1,177 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div :class="i === 1 ? 'index-wrap' : 'index-wrap1'"> |
|||
<div class="d-flex flex-column" v-if="i === 0"> |
|||
<div class="d-flex flex-nowrap align-center baseColor"> |
|||
<span class="font-bold-24">行业资讯</span> |
|||
<img class="bullhorn ml-3" 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> |
|||
<a-divider class="my-3" /> |
|||
</div> |
|||
<div class="d-flex flex-column" v-else> |
|||
<div class="d-flex flex-nowrap align-center baseColor"> |
|||
<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> |
|||
<a-divider class="my-3" /> |
|||
</div> |
|||
<div class="policy-box" v-if="lists && lists[i].news && lists[i].news.length>0"> |
|||
<div :key="index" class="div-box mb-2" v-for="(item, index) in lists[i].news"> |
|||
<div @click="jumpDetails(item,i)" class="d-flex flex-nowrap" style="cursor: pointer"> |
|||
<div class="d-flex flex-1 flex-column"> |
|||
<div class="item-title">{{ item.title }}</div> |
|||
<div class="original"></div> |
|||
<div class="item-content1" v-if="i === 0"> |
|||
<span v-dompurify-html="item.content"></span> |
|||
</div> |
|||
<div class="item-content" v-else> |
|||
<span v-dompurify-html="item.intro"></span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div v-else> |
|||
<a-skeleton /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations } from 'vuex'; |
|||
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, i) { |
|||
this.setActDetail(item); |
|||
if (i === 0) { |
|||
this.$router.push('/ItDetails'); |
|||
} else { |
|||
this.$router.push('/ActDetails'); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.index-wrap { |
|||
width: 90%; |
|||
margin: 15px auto 15px auto; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.index-wrap1 { |
|||
width: 96%; |
|||
margin: 15px auto 15px auto; |
|||
overflow: hidden; |
|||
opacity: 1; |
|||
} |
|||
|
|||
.bullhorn { |
|||
width: 24px; |
|||
height: 24px; |
|||
} |
|||
|
|||
.policy-box { |
|||
.div-box { |
|||
position: relative; |
|||
background: #fff; |
|||
|
|||
.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: 25px; |
|||
font-size: 12px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
font-family: Microsoft YaHei; |
|||
-webkit-line-clamp: 2; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.item-content1 { |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
margin-top: 8px; |
|||
line-height: 28px; |
|||
font-size: 12px; |
|||
color: rgba(0, 0, 0, 0.45); |
|||
font-family: Microsoft YaHei; |
|||
-webkit-line-clamp: 1; |
|||
-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,41 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-modal |
|||
:footer="null" |
|||
:title="profile.title" |
|||
:visible="showProfile" |
|||
@cancel="handleCancel" |
|||
@ok="handleCancel" |
|||
> |
|||
<p v-if="profile.description"> |
|||
<span class="font-16 white line-height-36" v-dompurify-html="profile.description"></span> |
|||
</p> |
|||
<p v-else>暂无介绍</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,48 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<!--百度地图容器--> |
|||
<div id="map" style="width:100%;height:392px;"></div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'ContactMap', |
|||
components: {}, |
|||
data() { |
|||
return {}; |
|||
}, |
|||
mounted() { |
|||
// 百度地图API功能 |
|||
var map = new BMap.Map('map'); // 创建Map实例 |
|||
// 初始化地图,设置中心点坐标和地图级别 |
|||
var point = new BMap.Point(112.549977, 37.794254); |
|||
map.centerAndZoom(point, 18); |
|||
var marker = new BMap.Marker(point); // 创建标注 |
|||
// marker.setTitle('绿谷生物'); |
|||
map.addOverlay(marker); // 将标注添加到地图中 |
|||
var content = '<table>'; |
|||
content = content + '<tr><td> 山西绿谷生物科技有限公司</td></tr>'; |
|||
content = content + '<tr><td></td></tr>'; |
|||
content = content + '<tr><td> 山西省太原市晋阳街202号英语周报大厦八层</td></tr>'; |
|||
content += '</table>'; |
|||
var infowindow = new BMap.InfoWindow(content); |
|||
marker.openInfoWindow(infowindow); |
|||
// 设置标注动画效果。如果参数为null,则取消动画效果。该方法需要在addOverlay方法后设置 |
|||
marker.setAnimation(Animation); |
|||
|
|||
//添加地图类型控件 |
|||
map.addControl(new BMap.MapTypeControl({ mapTypes: [BMAP_NORMAL_MAP, BMAP_HYBRID_MAP] })); |
|||
map.setCurrentCity('太原'); // 设置地图显示的城市 此项是必须设置的 |
|||
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 |
|||
}, |
|||
|
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped></style> |
|||
@ -1,115 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div> |
|||
<div class="contact d-flex flex-nowrap"> |
|||
<contact-map class="flex-1" /> |
|||
<div class="contact-right"> |
|||
<div> |
|||
<a-icon class="baseColor icon-size" type="user" /> |
|||
<p> |
|||
高璨 |
|||
<span class="ml-6">19935658782</span> |
|||
</p> |
|||
</div> |
|||
<div> |
|||
<a-icon class="baseColor icon-size" type="phone" /> |
|||
<p> |
|||
0351 5223175 |
|||
<span class="ml-6">0351 5223179</span> |
|||
</p> |
|||
</div> |
|||
<div> |
|||
<a-icon class="baseColor icon-size" type="mail" /> |
|||
<p>lgzc2020@163.com</p> |
|||
</div> |
|||
<div> |
|||
<i class="iconfont icon-local baseColor"></i> |
|||
<p>山西省太原市晋阳街202号英语周报大厦八层</p> |
|||
</div> |
|||
<div class="code-box"> |
|||
<a-icon class="baseColor icon-size" type="wechat" /> |
|||
<img |
|||
alt |
|||
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/lvgu.jpg" |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import ContactMap from './ContactMap.vue'; |
|||
|
|||
export default { |
|||
name: 'RichText', |
|||
components: { ContactMap }, |
|||
data() { |
|||
return { |
|||
sort: [ |
|||
{ id: 1, component: 'title' }, |
|||
{ id: 2, component: 'content' }, |
|||
{ id: 3, component: 'picture' }, |
|||
], |
|||
str: '联系我们组件', |
|||
img: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1641353646,126669045&fm=26&gp=0.jpg', |
|||
}; |
|||
}, |
|||
methods: {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.contact { |
|||
height: 394px; |
|||
position: relative; |
|||
border: 1px solid rgba(112, 112, 112, 0.14901960784313725); |
|||
background: #fff; |
|||
} |
|||
|
|||
.contact-img { |
|||
width: 790px; |
|||
height: 100%; |
|||
} |
|||
|
|||
.contact-right { |
|||
height: 100%; |
|||
width: 360px; |
|||
padding: 0 24px; |
|||
|
|||
div { |
|||
margin-top: 24px; |
|||
height: 24px; |
|||
line-height: 24px; |
|||
position: relative; |
|||
|
|||
p { |
|||
position: absolute; |
|||
left: 40px; |
|||
top: 0; |
|||
font-size: 16px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.code-box { |
|||
margin-top: 44px !important; |
|||
|
|||
img { |
|||
position: absolute; |
|||
width: 120px; |
|||
height: 120px; |
|||
left: 40px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -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,321 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button @click="showModal">{{ btnName }}</a-button> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:title="btnName" |
|||
: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="需求描述" |
|||
> |
|||
<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" |
|||
:before-upload="beforeUpload" |
|||
: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, |
|||
}, |
|||
btnName: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
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.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(); |
|||
}, |
|||
beforeUpload(file) { |
|||
return new Promise((resolve, reject) => { |
|||
const isLt5M = file.size / 1024 / 1024 < 5; |
|||
if (!isLt5M) { |
|||
this.$message.warning('上传附件大小不能超过5m!'); |
|||
return reject(false); |
|||
} |
|||
return resolve(true); |
|||
}); |
|||
}, |
|||
fileChange(info) { |
|||
// console.log(info) |
|||
this.fileList = info.fileList; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
</style> |
|||
@ -1,349 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div> |
|||
<a-button @click="showModal" type="primary">立即加入</a-button> |
|||
<a-modal :confirm-loading="confirmLoading" :visible="visible" @cancel="handleCancel" @ok="handleOk(type)" title="招聘信息" width="50%"> |
|||
<a-form :form="form"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="姓名" required> |
|||
<a-input placeholder="请输入姓名" v-model.trim="recruit.name" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="性别"> |
|||
<!-- 单选 --> |
|||
<a-radio-group v-model="recruit.sex"> |
|||
<a-radio :value="0">男</a-radio> |
|||
<a-radio :value="1">女</a-radio> |
|||
</a-radio-group> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="出生年月" required> |
|||
<!-- 时间选择器(时间点) --> |
|||
<a-date-picker @change="changeBirthday" class="fill-width" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="参加工作时间" required> |
|||
<!-- 时间选择器(时间点) --> |
|||
<a-date-picker @change="changeStartJob" class="fill-width" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="电话" required> |
|||
<a-input @change="changePhone" placeholder="请输入联系电话" type="tel" v-decorator="['tel', { rules: phoneRules }]" /> |
|||
</a-form-item> |
|||
|
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required> |
|||
<div class="d-flex flex-nowrap"> |
|||
<a-input placeholder="图片验证码" type="number" v-model="codeNum" /> |
|||
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" /> |
|||
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button> |
|||
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> --> |
|||
</div> |
|||
</a-form-item> |
|||
|
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required> |
|||
<div class="d-flex flex-nowrap"> |
|||
<a-input placeholder="请输入验证码" type="number" v-model="recruit.code" /> |
|||
<a-button class="code_img ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
|||
<a-button :disabled="recruit.isTel === false" @click="getCode" class="code_img ml-2" type="primary" v-else>获取验证码</a-button> |
|||
</div> |
|||
</a-form-item> |
|||
|
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="电子邮箱"> |
|||
<!-- 电子邮箱 --> |
|||
<a-input @change="changeEamil" placeholder="请输入电子邮箱..." type="email" v-decorator="['email', { rules: emailRules }]" /> |
|||
</a-form-item> |
|||
<!-- 是否在职 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="是否在职"> |
|||
<!-- 单选 --> |
|||
<a-radio-group v-model="recruit.inWork"> |
|||
<a-radio :value="1">是</a-radio> |
|||
<a-radio :value="2">否</a-radio> |
|||
</a-radio-group> |
|||
</a-form-item> |
|||
<!-- 现居住地 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="现居住地"> |
|||
<a-input placeholder="请输入现居住地" v-model.trim="recruit.address" /> |
|||
</a-form-item> |
|||
<!-- 户口所在地 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="户口所在地"> |
|||
<a-input placeholder="请输入户口所在地" v-model.trim="recruit.birthdayPlace" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="求职意向" required> |
|||
<a-textarea placeholder="请输入求职意向..." v-model.trim="recruit.jobWilling" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="工作经历"> |
|||
<a-textarea placeholder="请输入工作经历..." v-model.trim="recruit.jobExpirence" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="教育经历"> |
|||
<a-textarea placeholder="请输入教育经历..." v-model.trim="recruit.educationExpirence" /> |
|||
</a-form-item> |
|||
<!-- 语言能力 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="语言能力"> |
|||
<a-textarea placeholder="请输入语言能力" v-model.trim="recruit.language" /> |
|||
</a-form-item> |
|||
<!-- 专业技能 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="专业技能"> |
|||
<a-textarea placeholder="请输入专业技能" v-model.trim="recruit.skill" /> |
|||
</a-form-item> |
|||
<!-- 获得证书 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="获得证书"> |
|||
<a-textarea placeholder="请输入获得证书" v-model.trim="recruit.zhengShu" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="自我评价"> |
|||
<a-textarea placeholder="请输入自我评价..." v-model.trim="recruit.personalDescription" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="上传附件"> |
|||
<a-upload :action="action" :default-file-list="fileList" @change="fileChange" list-type="picture" name="files"> |
|||
<a-button> <a-icon type="upload" />点击上传附件 </a-button> |
|||
</a-upload> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import { JoinPlatform, upload, joinUs } from 'config/api'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 16 }, |
|||
}; |
|||
|
|||
const formTailLayout = { wrapperCol: { span: 16, offset: 6 } }; |
|||
|
|||
export default { |
|||
name: 'Model', |
|||
components: {}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
confirmLoading: false, |
|||
type: '', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
value: 0, |
|||
inWorkValue: 1, |
|||
recruit: { |
|||
name: '', // 姓名 |
|||
sex: 0, // 性别 |
|||
birthday: '', // 出生年月 |
|||
startJob: '', // 参加工作时间 |
|||
tel: '', // 电话 |
|||
code: '', |
|||
isTel: false, // 是否符合验证的电话号 |
|||
email: '', // 电子邮箱 |
|||
isEmail: false, // 是否符合验证的电子邮箱 |
|||
inWork: 1, // 是否在职 |
|||
address: '', // 现居住地 |
|||
birthdayPlace: '', // 户口所在地 |
|||
jobWilling: '', // 求职意向 |
|||
jobExpirence: '', // 工作经历 |
|||
educationExpirence: '', // 教育经历 |
|||
personalDescription: '', // 自我评价 |
|||
language: '', // 语言能力 |
|||
skill: '', // 专业技能 |
|||
zhengShu: '', // 获得证书 |
|||
files: [], // 附件Id |
|||
}, |
|||
action: upload, |
|||
fileList: [], |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
emailRules: [ |
|||
{ |
|||
pattern: new RegExp(/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/), |
|||
whitespace: true, |
|||
message: '请输入正确的邮箱格式', |
|||
}, |
|||
], |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('user', ['picCode']), |
|||
created() { |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
|
|||
// 验证电话 |
|||
changePhone(e) { |
|||
this.recruit.tel = e.target.value; |
|||
this.recruit.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.recruit.tel); |
|||
}, |
|||
|
|||
// 验证电子邮箱 |
|||
changeEamil(e) { |
|||
this.recruit.email = e.target.value; |
|||
this.recruit.isEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(this.recruit.email); |
|||
}, |
|||
|
|||
handleOk(type) { |
|||
if (!this.recruit.name) { |
|||
this.$message.error('姓名为必填项'); |
|||
} else if (!this.recruit.tel) { |
|||
this.$message.error('电话为必填项'); |
|||
} else if (!this.recruit.jobWilling) { |
|||
this.$message.error('求职意向为必填项'); |
|||
} else if (!this.recruit.birthday) { |
|||
this.$message.error('出生日期为必填项'); |
|||
} else if (!this.recruit.startJob) { |
|||
this.$message.error('参加工作时间必填项'); |
|||
} else if (this.recruit.email && this.recruit.isEmail === false) { |
|||
this.$message.error('请输入正确的邮箱格式'); |
|||
} else { |
|||
if (this.recruit.isTel) { |
|||
for (var i = 0; i < this.fileList.length; i++) { |
|||
this.recruit.files = this.recruit.files.concat(this.fileList[i].response.data[0].id); |
|||
} |
|||
this.subMitAdd(); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// 加入提交 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const { |
|||
name, |
|||
sex, |
|||
birthday, |
|||
startJob, |
|||
tel, |
|||
email, |
|||
inWork, |
|||
address, |
|||
birthdayPlace, |
|||
jobWilling, |
|||
jobExpirence, |
|||
educationExpirence, |
|||
language, |
|||
skill, |
|||
zhengShu, |
|||
personalDescription, |
|||
files, |
|||
} = this.recruit; |
|||
let params = {}; |
|||
let res = {}; |
|||
params = { |
|||
param: { |
|||
name, // 姓名 |
|||
gender: sex, // 性别 |
|||
birthday, // 出生年月 |
|||
startJob, // 参加工作时间 |
|||
phone: tel, // 电话 |
|||
code: this.recruit.code, // 验证码 |
|||
email, // 电子邮箱 |
|||
inWork, // 是否在职 |
|||
address, // 现居住地 |
|||
birthdayPlace, // 户口所在地 |
|||
jobWilling, // 求职意向 |
|||
jobExpirence, // 工作经历 |
|||
educationExpirence, // 教育经历 |
|||
language, // 语言能力 |
|||
skill, // 专业技能 |
|||
zhengShu, // 获得证书 |
|||
personalDescription, // 自我评价 |
|||
files, // 附件Id |
|||
}, |
|||
}; |
|||
res = await joinUs(params); |
|||
const { data, msg, code } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('申请成功'); |
|||
this.visible = false; |
|||
this.confirmLoading = false; |
|||
for (let key in this.recruit) { |
|||
this.recruit[key] = ''; |
|||
} |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
changeBirthday(date, dateString) { |
|||
this.recruit.birthday = this.$moment(date).unix(); |
|||
// console.log(this.$moment(date).unix(), dateString); |
|||
}, |
|||
changeStartJob(date, dateString) { |
|||
this.recruit.startJob = this.$moment(date).unix(); |
|||
// console.log(this.$moment(date).unix(), dateString); |
|||
}, |
|||
|
|||
// 获取验证码 |
|||
async getCode() { |
|||
try { |
|||
const params = { |
|||
phone: this.recruit.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
} |
|||
}, |
|||
|
|||
// 验证码倒计时 |
|||
getCodeInterval() { |
|||
this.showInterval = true; |
|||
this.codeTimer = setInterval(() => { |
|||
if (this.interval === 0) { |
|||
clearInterval(this.codeTimer); |
|||
this.codeTimer = null; |
|||
this.showInterval = false; |
|||
this.interval = 120; |
|||
return; |
|||
} |
|||
this.interval = this.interval - 1; |
|||
}, 1000); |
|||
}, |
|||
|
|||
// 刷新验证码 |
|||
changePicCode() { |
|||
this.sendPicCode(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
</style> |
|||
@ -1,77 +0,0 @@ |
|||
// 合作伙伴 |
|||
.logo-box{ |
|||
width: 18%; |
|||
margin-right: 2.5%; |
|||
border-radius: 2px; |
|||
margin-bottom: 50px; |
|||
|
|||
.logo-pic-box{ |
|||
height: 90px; |
|||
// width: 90px; |
|||
text-align: center; |
|||
|
|||
.logo-pic{ |
|||
height: 90px |
|||
} |
|||
|
|||
.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,99 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="white pt-5" v-if="partners && partners.length > 0"> |
|||
<div :key="index" v-for="(item,index) in partners"> |
|||
<p class="d-flex flex-row justify-center mb-5"> |
|||
<img src="~assets/hzhb02.png" v-if="item.typeOfTech===0" /> |
|||
<img src="~assets/hzhb03.png" v-if="item.typeOfTech===1" /> |
|||
<img src="~assets/hzhb04.png" v-if="item.typeOfTech===2" /> |
|||
</p> |
|||
<div |
|||
class="d-flex flex-wrap pointer" |
|||
v-if="item.backendSearchList && item.backendSearchList.length > 0" |
|||
> |
|||
<div |
|||
:class="(i+1)%5===0? 'logo-box1' : ''" |
|||
:key="i" |
|||
@click="openProfile(list.name,list.description)" |
|||
class="logo-box d-flex flex-column align-center white" |
|||
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-12">{{ 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 : '孵化平台' ? 3 : 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,46 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div> |
|||
<div class="words-content"> |
|||
<span |
|||
class="font-16 textColor line-height-36" |
|||
v-dompurify-html="content" |
|||
v-if="titleCode === title" |
|||
></span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
export default { |
|||
name: 'RichText', |
|||
props: { |
|||
title: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return {}; |
|||
}, |
|||
|
|||
computed: mapState('home', ['content', 'titleCode']), |
|||
|
|||
async created() { |
|||
this.setContent(''); |
|||
await this.getPageDetail(this.title); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', ['setContent']), |
|||
...mapActions('home', ['getPageDetail']), |
|||
}, |
|||
}; |
|||
</script> |
|||
@ -1,442 +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" v-if="current === 0"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="公司名称" required> |
|||
<a-input placeholder="请输入公司名称..." v-model.trim="platform.company" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="成立时间" required> |
|||
<!-- 时间选择器(时间点) --> |
|||
<a-date-picker @change="changeBirthday" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="法人代码" required> |
|||
<a-input placeholder="请输入法人代码..." v-model.trim="platform.legalPerson" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="现注册地址" required> |
|||
<a-input placeholder="请输入现注册地址..." v-model.trim="platform.registerSite" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="注册资金(单位:万)"> |
|||
<a-input placeholder="请输入注册资金..." type="number" v-model.trim="platform.registerMoney" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="员工人数"> |
|||
<a-input placeholder="请输入员工人数..." type="number" v-model.trim="platform.staffCount" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="其中研发人数"> |
|||
<a-input placeholder="请输入研发人数..." type="number" v-model.trim="platform.resarchStaff" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="大专以上人员"> |
|||
<a-input placeholder="请输入员工人数..." type="number" v-model.trim="platform.juniorCollege" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="主营业务"> |
|||
<a-input placeholder="请输入主营业务..." v-model.trim="platform.mainBusiness" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="营业收入(单位:万)"> |
|||
<a-input placeholder="请输入营业收入..." type="number" v-model.trim="platform.businessIncome" /> |
|||
</a-form-item> |
|||
</a-form> |
|||
<a-form :form="form" v-if="current === 1"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="产品/技术阶段" required> |
|||
<!-- 单选 --> |
|||
<a-radio-group v-model="platform.productTech"> |
|||
<a-radio :value="0" style="margin-right: 20px">创意阶段</a-radio> |
|||
<a-radio :value="1" style="margin-right: 20px">研发阶段</a-radio> |
|||
<a-radio :value="2" style="margin-right: 20px">转化阶段</a-radio> |
|||
<a-radio :value="3" style="margin-right: 20px">原型样品</a-radio> |
|||
<a-radio :value="4">产业化开发</a-radio> |
|||
</a-radio-group> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="申请专利数"> |
|||
<a-input placeholder="请输入申请专利数..." type="number" v-model.trim="platform.patentApply" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="授权专利数"> |
|||
<a-input placeholder="请输入授权专利数..." type="number" v-model.trim="platform.patentGrented" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="发明专利数"> |
|||
<a-input placeholder="请输入发明专利数..." type="number" v-model.trim="platform.patentInvent" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="软件著作权"> |
|||
<a-input placeholder="请输入软件著作权..." v-model.trim="platform.softwareRegister" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="动植物新品种"> |
|||
<a-input placeholder="请输入动植物新品种..." v-model.trim="platform.plantKind" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="集成电路布图设计"> |
|||
<a-input placeholder="请输入集成电路布图设计..." v-model.trim="platform.electricDesign" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="合作单位"> |
|||
<a-input placeholder="请输入合作单位..." v-model.trim="platform.friendCompany" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="上传附件"> |
|||
<a-upload |
|||
:action="action" |
|||
:before-upload="beforeUpload" |
|||
:default-file-list="fileList" |
|||
@change="fileChange" |
|||
list-type="picture" |
|||
name="files" |
|||
> |
|||
<p>1.营业执照复印件(尚无注册的无需梯控)</p> |
|||
<p>2.法定代表或授权代表身份证复印件</p> |
|||
<p>3.主导产品或技术简介</p> |
|||
<a-button> <a-icon type="upload" />点击上传附件 </a-button> |
|||
</a-upload> |
|||
</a-form-item> |
|||
</a-form> |
|||
<a-form :form="form" v-if="current === 2"> |
|||
<!-- <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 placeholder="请输入申请人姓名..." v-model.trim="platform.manName" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="性别" required> |
|||
<!-- 单选 --> |
|||
<a-radio-group v-model="platform.sex"> |
|||
<a-radio :value="1" style="margin-right: 100px">男</a-radio> |
|||
<a-radio :value="0">女</a-radio> |
|||
</a-radio-group> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="职务" required> |
|||
<a-input placeholder="请输入申请人职务..." v-model.trim="platform.position" /> |
|||
</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="电子邮箱"> |
|||
<!-- 电子邮箱 --> |
|||
<a-input @change="changeEamil" placeholder="请输入电子邮箱..." type="email" v-decorator="['email', { rules: emailRules }]" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="身份证号" required> |
|||
<!-- 身份证号 --> |
|||
<a-input @change="changeIdCard" placeholder="请输入身份证号..." v-decorator="['idCard', { rules: idCardRules }]" /> |
|||
</a-form-item> |
|||
</a-form> |
|||
<a-steps :current="current"> |
|||
<a-step @click="current = 0" style="cursor: pointer"> |
|||
<template slot="title"> |
|||
<span v-if="current === 0">Waiting...</span> |
|||
<span v-else>完成</span> |
|||
</template> |
|||
<span slot="description">企业基本信息</span> |
|||
</a-step> |
|||
<a-step :title="current > 1 ? '完成' : 'Waiting...'" @click="current = 1" description="企业详细信息" style="cursor: pointer" /> |
|||
<a-step :title="current > 2 ? '完成' : 'Waiting...'" @click="current = 2" description="申请人基本信息" style="cursor: pointer" /> |
|||
</a-steps> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions, mapMutations } from 'vuex'; |
|||
import { Settled, 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: 'SettledModel', |
|||
props: { |
|||
typeNum: { |
|||
type: Number, |
|||
default: 1, |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
visible: false, |
|||
current: 0, |
|||
action: upload, |
|||
fileList: [], |
|||
title: '入驻企业注册', |
|||
str: '申请加入', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
platform: { |
|||
manName: '', // 姓名 |
|||
sex: 1, // 性别 0:女,1:男 |
|||
position: '', // 职务 |
|||
tel: '', // 联系电话 |
|||
isTel: false, |
|||
email: '', // 电子邮箱 |
|||
isEmail: false, |
|||
code: '', // 验证码 |
|||
idCard: '', // 身份证号 |
|||
isIdCard: false, |
|||
company: '', // 公司名称 |
|||
buildTime: 0, // 成立时间(时间戳) |
|||
legalPerson: '', // 法人代码 |
|||
registerMoney: 0, // 注册资金 |
|||
staffCount: 0, // 员工人数 |
|||
resarchStaff: 0, // 研发人数 |
|||
juniorCollege: 0, // 大专以上人员 |
|||
mainBusiness: '', // 主营业务 |
|||
businessIncome: 0, // 营业收入 |
|||
registerSite: '', // 现注册地址 |
|||
productTech: 0, // 产品阶段 |
|||
patentApply: 0, // 申请专利数 |
|||
patentGrented: 0, // 授权专利数 |
|||
patentInvent: 0, // 发明专利数 |
|||
softwareRegister: '', // 软件著作权 |
|||
plantKind: '', // 动植物新品种 |
|||
electricDesign: '', // 集成电路布图设计 |
|||
friendCompany: '', // 合作单位 |
|||
files: [], // 文件id |
|||
}, |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
emailRules: [ |
|||
{ |
|||
pattern: new RegExp(/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/), |
|||
whitespace: true, |
|||
message: '请输入正确的邮箱格式', |
|||
}, |
|||
], |
|||
idCardRules: [ |
|||
{ |
|||
required: true, |
|||
pattern: new RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/), |
|||
whitespace: true, |
|||
message: '请输入身份证号', |
|||
}, |
|||
], |
|||
codeNum: '', |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
}; |
|||
}, |
|||
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']), |
|||
...mapMutations('home', ['setPagePath']), |
|||
// 显示表单输入框 |
|||
showModal() { |
|||
const anyringToken = sessionStorage.getItem('anyringToken'); |
|||
if (!anyringToken) { |
|||
this.setPagePath(this.$route.path); |
|||
this.$router.push('/login'); |
|||
this.$message.warning('请先登录'); |
|||
} else { |
|||
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); |
|||
}, |
|||
// 验证电子邮箱 |
|||
changeEamil(e) { |
|||
this.platform.email = e.target.value; |
|||
this.platform.isEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(this.platform.email); |
|||
}, |
|||
// 验证身份证号 |
|||
changeIdCard(e) { |
|||
this.platform.idCard = e.target.value; |
|||
this.platform.isIdCard = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(this.platform.idCard); |
|||
}, |
|||
// 获取验证码 |
|||
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(); |
|||
}, |
|||
// 成立时间 |
|||
changeBirthday(date, dateString) { |
|||
this.platform.buildTime = this.$moment(date).unix() * 1000; |
|||
// console.log(this.$moment(date).unix(), dateString); |
|||
}, |
|||
// 点击确定 |
|||
handleOk() { |
|||
if (this.current !== 2) { |
|||
this.current++; |
|||
} else { |
|||
if (this.platform.company === '') { |
|||
this.$message.error('请输入公司名称'); |
|||
} else if (this.platform.buildTime === 0) { |
|||
this.$message.error('请选择成立时间'); |
|||
} else if (this.platform.legalPerson === '') { |
|||
this.$message.error('请输入法人代码'); |
|||
} else if (this.platform.registerSite === '') { |
|||
this.$message.error('请输入现注册地址'); |
|||
} else if (this.platform.manName === '') { |
|||
this.$message.error('请输入姓名'); |
|||
} else if (this.platform.position === '') { |
|||
this.$message.error('请输入职务'); |
|||
} else if (this.platform.isTel === false) { |
|||
this.$message.error('请输入联系电话'); |
|||
} else if (this.platform.idCard === '') { |
|||
this.$message.error('请输入身份证号'); |
|||
} else { |
|||
for (var i = 0; i < this.fileList.length; i++) { |
|||
this.platform.files = this.platform.files.concat(this.fileList[i].response.data[0].id); |
|||
} |
|||
this.addSettled(); |
|||
} |
|||
} |
|||
}, |
|||
async addSettled() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
const params = { |
|||
param: { |
|||
buildTime: this.platform.buildTime, |
|||
businessIncome: this.platform.businessIncome, |
|||
company: this.platform.company, |
|||
electricDesign: this.platform.electricDesign, |
|||
email: this.platform.email, |
|||
fileList: this.platform.files, |
|||
friendCompany: this.platform.friendCompany, |
|||
gender: this.platform.sex, |
|||
code: this.platform.code, |
|||
idCard: this.platform.idCard, |
|||
juniorCollege: this.platform.juniorCollege, |
|||
legalPerson: this.platform.legalPerson, |
|||
mainBusiness: this.platform.mainBusiness, |
|||
name: this.platform.manName, |
|||
patentApply: this.platform.patentApply, |
|||
patentGrented: this.platform.patentGrented, |
|||
patentInvent: this.platform.patentInvent, |
|||
phone: this.platform.tel, |
|||
placeType: this.typeNum, // 自己带过来 0:虚拟,1:实体 |
|||
plantKind: this.platform.plantKind, |
|||
position: this.platform.position, |
|||
productTech: this.platform.productTech, |
|||
registerMoney: this.platform.registerMoney, |
|||
registerSite: this.platform.registerSite, |
|||
resarchStaff: this.platform.resarchStaff, |
|||
softwareRegister: this.platform.softwareRegister, |
|||
staffCount: this.platform.staffCount, |
|||
}, |
|||
}; |
|||
// console.log(params); |
|||
const res = await Settled(params); |
|||
// console.log(res); |
|||
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; |
|||
this.platform.isEmail = false; |
|||
this.platform.isIdCard = false; |
|||
} else { |
|||
throw msg; |
|||
// console.log('失败1'); |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
// console.log('失败2'); |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
beforeUpload(file) { |
|||
return new Promise((resolve, reject) => { |
|||
const isLt5M = file.size / 1024 / 1024 < 5; |
|||
if (!isLt5M) { |
|||
this.$message.warning('上传附件大小不能超过5m!'); |
|||
return reject(false); |
|||
} |
|||
return resolve(true); |
|||
}); |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,190 @@ |
|||
<template> |
|||
<div class="mt-5"> |
|||
<div class="d-flex flex-nowrap table-head"> |
|||
<div style="width: 10%"></div> |
|||
<div class="table-head-item">姓名</div> |
|||
<div class="table-head-item">早</div> |
|||
<div class="table-head-item">晚</div> |
|||
<div class="table-head-item">审核人</div> |
|||
</div> |
|||
<div v-for="(list, listIndex) in lists" :key="listIndex"> |
|||
<div class="my-2 table-time px-2">{{ list.dateTime }}</div> |
|||
<a-table :pagination="false" :showHeader="false" :columns="columns" :data-source="list.clockList"> |
|||
<template slot="actions" slot-scope="text, record, index"> |
|||
<img src="https://www.tall.wiki/staticrec/drag.svg" /> |
|||
</template> |
|||
<template slot="morning" slot-scope="text, record, index"> |
|||
<div class="clock-in"> |
|||
<div v-if="record.morningStatus"> |
|||
{{ $moment(record.morning - 0).format('HH:mm') }} |
|||
</div> |
|||
<div v-else> |
|||
<a-button type="primary" size="small" class="clock-btn"> 打卡 </a-button> |
|||
<a-date-picker show-time @change="onChange($event, listIndex, index, 1)" class="clock-select" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<template slot="night" slot-scope="text, record, index"> |
|||
<div class="clock-in"> |
|||
<div v-if="record.nightStatus"> |
|||
{{ $moment(record.night - 0).format('HH:mm') }} |
|||
</div> |
|||
<div v-else> |
|||
<a-button type="primary" size="small" class="clock-btn"> 打卡 </a-button> |
|||
<a-date-picker show-time @change="onChange($event, listIndex, index, 2)" class="clock-select" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
</a-table> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
const columns = [ |
|||
{ title: ' ', dataIndex: 'actions', key: 'actions', scopedSlots: { customRender: 'actions' }, width: '10%' }, |
|||
{ title: '姓名', dataIndex: 'memberName', key: 'memberName', align: 'center', width: '22.5%' }, |
|||
{ title: '早', dataIndex: 'morning', key: 'morning', scopedSlots: { customRender: 'morning' }, align: 'center', width: '22.5%' }, |
|||
{ title: '晚', dataIndex: 'night', key: 'night', scopedSlots: { customRender: 'night' }, align: 'center', width: '22.5%' }, |
|||
{ |
|||
title: '审核人', |
|||
dataIndex: 'checkerName', |
|||
key: 'checkerName', |
|||
scopedSlots: { customRender: 'checkerName' }, |
|||
align: 'center', |
|||
width: '22.5%', |
|||
}, |
|||
]; |
|||
|
|||
const lists = [ |
|||
{ |
|||
dateTime: '2021-08-27', |
|||
clockList: [ |
|||
{ |
|||
id: 1, |
|||
morning: '1630283371000', |
|||
morningStatus: true, |
|||
night: '1630319371000', |
|||
nightStatus: true, |
|||
memberName: '赵同学', |
|||
checkerName: '周勇', |
|||
}, |
|||
{ |
|||
key: 2, |
|||
morning: '1630283371000', |
|||
morningStatus: true, |
|||
night: '1630319371000', |
|||
nightStatus: false, |
|||
memberName: '张野', |
|||
checkerName: '武慧娟', |
|||
}, |
|||
{ |
|||
key: 3, |
|||
morning: '1630283371000', |
|||
morningStatus: false, |
|||
night: '1630319371000', |
|||
nightStatus: true, |
|||
memberName: '李亚男', |
|||
checkerName: '姚工', |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
dateTime: '2021-08-27', |
|||
clockList: [ |
|||
{ |
|||
id: 4, |
|||
morning: '1630283371000', |
|||
morningStatus: true, |
|||
night: '1630319371000', |
|||
nightStatus: true, |
|||
memberName: '赵同学', |
|||
checkerName: '周勇', |
|||
}, |
|||
{ |
|||
key: 5, |
|||
morning: '1630283371000', |
|||
morningStatus: true, |
|||
night: '1630319371000', |
|||
nightStatus: false, |
|||
memberName: '张野', |
|||
checkerName: '武慧娟', |
|||
}, |
|||
{ |
|||
key: 6, |
|||
morning: '1630283371000', |
|||
morningStatus: false, |
|||
night: '1630319371000', |
|||
nightStatus: true, |
|||
memberName: '李亚男', |
|||
checkerName: '姚工', |
|||
}, |
|||
], |
|||
}, |
|||
]; |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
columns, |
|||
lists, |
|||
}; |
|||
}, |
|||
|
|||
methods: { |
|||
onChange(dateString, listIndex, index, type) { |
|||
const selectTime = this.$moment(dateString).format('x'); |
|||
console.log('selectTime: ', selectTime); |
|||
if (type === 1) { |
|||
this.lists[listIndex].clockList[index].morning = selectTime; |
|||
} else { |
|||
this.lists[listIndex].clockList[index].night = selectTime; |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.table-head { |
|||
border-bottom: 1px solid #e8e8e8; |
|||
background: #fafafa; |
|||
height: 54px; |
|||
line-height: 54px; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.table-time { |
|||
height: 54px; |
|||
line-height: 54px; |
|||
border-bottom: 1px solid #e8e8e8; |
|||
} |
|||
|
|||
.table-head-item { |
|||
width: 22.5%; |
|||
text-align: center; |
|||
} |
|||
|
|||
img { |
|||
width: 22px; |
|||
max-width: auto !important; |
|||
} |
|||
|
|||
.clock-in { |
|||
position: relative; |
|||
} |
|||
|
|||
.clock-btn { |
|||
position: absolute; |
|||
} |
|||
|
|||
.clock-select { |
|||
position: relative; |
|||
min-width: auto !important; |
|||
width: 47px; |
|||
height: 20px; |
|||
overflow: hidden; |
|||
z-index: 9; |
|||
opacity: 0; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,27 @@ |
|||
<template> |
|||
<div class="mt-3"> |
|||
<!-- 多选 --> |
|||
<a-select mode="multiple" :default-value="defaultValue" style="width: 100%" placeholder="请选择成员" @change="handleChange"> |
|||
<a-select-option v-for="i in 25" :key="(i + 9).toString(36) + i"> |
|||
{{ (i + 9).toString(36) + i }} |
|||
</a-select-option> |
|||
</a-select> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return {defaultValue: [],}; |
|||
}, |
|||
|
|||
methods: { |
|||
handleChange(value) { |
|||
console.log(`selected ${value}`); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
</style> |
|||
@ -1,142 +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 :btn-name="btnName" :type-data="getId(item.id)" style="cursor: pointer" /> |
|||
</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: '', |
|||
}, |
|||
btnName: '技术需求', |
|||
}; |
|||
}, |
|||
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,272 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner d-flex flex-wrap"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
@click="jump(item)" |
|||
class="item-box mb-8 d-flex flex-column pointer" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img :src="item.picUrl" :title="item.name" class="con-img" v-if="item.picUrl" /> |
|||
<img :src="item.visitLocation" :title="item.name" class="con-img" v-else /> |
|||
<p class="font-24 my-4 title">{{ item.name }}</p> |
|||
<p 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; |
|||
// console.log('this.listState: ', this.listState); |
|||
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(item) { |
|||
if (this.listState === 0) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/Institute', |
|||
name: 'Institute', |
|||
params: { |
|||
id: item.id, |
|||
description: item.description, |
|||
name: item.name, |
|||
direction: item.direction, |
|||
experiments: item.experiments, |
|||
projectKind: item.projectKind, |
|||
vertify: item.vertify, |
|||
}, |
|||
}); |
|||
} else if (this.listState === 1) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/InsDet', |
|||
name: 'InsDet', |
|||
params: { id: item.id }, |
|||
}); |
|||
} else if (this.listState === 3) { |
|||
this.$router.push({ |
|||
path: '/NewPlatform/Share/InsDet', |
|||
name: 'InsDet', |
|||
params: { id: item.id }, |
|||
}); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.pagination { |
|||
margin: 40px 0; |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
width: 20.5%; |
|||
margin-right: 6%; |
|||
border-radius: 4px; |
|||
// position: relative; |
|||
margin-bottom: 30px; |
|||
} |
|||
|
|||
.title { |
|||
text-align: center; |
|||
// position: absolute; |
|||
// bottom: 0; |
|||
height: 90px; |
|||
width: 100%; |
|||
color: rgba(0, 0, 0, 0.85); |
|||
font-size: 24px; |
|||
} |
|||
|
|||
@media screen and (min-width: 1400px) and (max-width: 1650px) { |
|||
.title { |
|||
height: 48px; |
|||
font-size: 20px; |
|||
} |
|||
} |
|||
|
|||
@media only screen and (max-width: 1400px) { |
|||
.title { |
|||
height: 48px; |
|||
font-size: 16px; |
|||
} |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.con-img { |
|||
height: 270px; |
|||
width: 100%; |
|||
border: none; |
|||
} |
|||
</style> |
|||
@ -1,83 +0,0 @@ |
|||
<template> |
|||
<div class="head"> |
|||
<img |
|||
@click="$router.push('/IncubationPlatform/MakerSpace')" |
|||
class="settle-in pointer" |
|||
src="~assets/settleIn.png" |
|||
/> |
|||
<a-carousel :autoplay-speed="time" autoplay> |
|||
<div :key="item.id" class="img-box" v-for="item in lists"> |
|||
<img :src="item.url" alt /> |
|||
</div> |
|||
</a-carousel> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { queryRotation } from 'config/api'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
time: 10000, |
|||
lists: [], |
|||
}; |
|||
}, |
|||
created() { |
|||
this.getData(); |
|||
}, |
|||
methods: { |
|||
async getData() { |
|||
try { |
|||
const params = { param: { showPage: 0 } }; |
|||
const res = await queryRotation(params); |
|||
const { code, data, msg } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data; |
|||
} else { |
|||
this.$message.error(error); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus"> |
|||
.head { |
|||
background: white; |
|||
overflow: hidden; |
|||
position: relative; |
|||
} |
|||
|
|||
.settle-in { |
|||
position: absolute; |
|||
top: 5%; |
|||
right: 9%; |
|||
z-index: 9; |
|||
height: 90%; |
|||
} |
|||
|
|||
.img-box { |
|||
// height: 380px; |
|||
width: 100%; |
|||
|
|||
img { |
|||
height: 100%; |
|||
width: 100%; |
|||
} |
|||
} |
|||
|
|||
.ant-carousel >>> .slick-slide { |
|||
text-align: center; |
|||
height: 160px; |
|||
line-height: 160px; |
|||
background: #364d79; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.ant-carousel >>> .slick-slide h3 { |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
@ -1,259 +0,0 @@ |
|||
<template> |
|||
<div class="fast-box"> |
|||
<div class="d-flex flex-nowrap flex-row-reverse mb-5"> |
|||
<a-input-search |
|||
@search="getBusiness" |
|||
enter-button="搜索" |
|||
placeholder="请输入..." |
|||
style="width: 50%" |
|||
v-model="business" |
|||
/> |
|||
</div> |
|||
<div class="con-box" id="bobaodiv"> |
|||
<div |
|||
:key="0 + `${i}`" |
|||
@click="openProfile(item.company,item.introduce)" |
|||
class="ent-box-div" |
|||
v-for="(item, i) in lists" |
|||
> |
|||
<div class="ent-box pointer"> |
|||
<p class="ent-index">{{ i + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item.company }}</span> |
|||
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span> |
|||
</div> |
|||
</div> |
|||
<!-- <div |
|||
:key="0 + `${i}`" |
|||
@click="openProfile(item.company,item.introduce)" |
|||
class="ent-box-div" |
|||
v-for="(item, i) in lists" |
|||
> |
|||
<div class="ent-box pointer"> |
|||
<p class="ent-index">{{ i + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item.company }}</span> |
|||
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span> |
|||
</div> |
|||
</div> |
|||
<div |
|||
:key="j" |
|||
@click="openProfile(item.company,item.introduce)" |
|||
class="ent-box-div" |
|||
v-for="(item, j) in lists" |
|||
> |
|||
<div class="ent-box pointer"> |
|||
<p class="ent-index">{{ j + 1 }}</p> |
|||
<span class="ent-name" style="margin-left: 50px">{{ item.company }}</span> |
|||
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span> |
|||
</div> |
|||
</div>--> |
|||
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapMutations } from 'vuex'; |
|||
import CompanyProfile from '../Introduce/CompanyProfile.vue'; |
|||
|
|||
export default { |
|||
name: 'SettledEnterprise', |
|||
components: { CompanyProfile }, |
|||
props: { |
|||
lists: { |
|||
type: Array, |
|||
default: () => [], |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
business: '', // 入驻企业 |
|||
height: '', |
|||
width: '', |
|||
liHeight: '', |
|||
oMarquee: null, //播报的容器 |
|||
BBLineH: null, |
|||
BBScrollAmount: 1, |
|||
BBLineCount: 0, |
|||
rollRestTime: 500, |
|||
rollTime: 10, |
|||
length: 0, |
|||
showProfile: false, |
|||
}; |
|||
}, |
|||
|
|||
mounted() { |
|||
const length = this.lists.length / 100; |
|||
this.BBLineH = 76; |
|||
// this.scrollBox(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setProfile']), |
|||
|
|||
// 点击搜索按钮 |
|||
getBusiness() { |
|||
console.log('value: ', this.business); |
|||
this.$emit('searchEnt', this.business); |
|||
}, |
|||
|
|||
scrollBox() { |
|||
/* |
|||
* 启动播报滚动事件 |
|||
*/ |
|||
const that = this; |
|||
|
|||
// window.onload = function() { |
|||
// console.log('滚动'); |
|||
// BBAllTime = 0; |
|||
that.oMarquee = document.getElementById('bobaodiv'); //滚动对象 |
|||
window.setTimeout(function() { |
|||
that.run(); |
|||
}, that.rollRestTime); |
|||
// }; |
|||
}, |
|||
/* |
|||
* 播报滚动事件主逻辑 |
|||
*/ |
|||
run() { |
|||
const that = this; |
|||
|
|||
that.BBLineCount = this.lists.length; |
|||
|
|||
if (that.BBScrollAmount == 0) { |
|||
//若单次滚动的距离为0,则开始下一次监听,不计数 |
|||
window.setTimeout(function() { |
|||
that.run(); |
|||
}, that.rollTime); |
|||
return; |
|||
} |
|||
if (that.oMarquee.scrollTop >= that.BBLineCount * that.BBLineH) { |
|||
//滚动完一次数据后,复位 |
|||
that.oMarquee.scrollTop = 0; |
|||
} |
|||
that.oMarquee.scrollTop += that.BBScrollAmount; |
|||
if (that.oMarquee.scrollTop % that.BBLineH < 1 && that.oMarquee.scrollTop > 0) { |
|||
window.setTimeout(function() { |
|||
that.run(); |
|||
}, that.rollRestTime); |
|||
} else { |
|||
window.setTimeout(function() { |
|||
that.run(); |
|||
}, that.rollTime); |
|||
} |
|||
}, |
|||
|
|||
// 介绍 |
|||
openProfile(title, description) { |
|||
if (!description) return; |
|||
this.setProfile(null); |
|||
const profile = { |
|||
title, |
|||
description, |
|||
}; |
|||
this.setProfile(profile); |
|||
this.showProfile = true; |
|||
}, |
|||
|
|||
closeProfile() { |
|||
this.showProfile = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.ent-box-div { |
|||
width: 100%; |
|||
margin-right: 11%; |
|||
position: relative; |
|||
height: 76px; |
|||
} |
|||
|
|||
.ent-box { |
|||
width: 100%; |
|||
// 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 { |
|||
position: absolute; |
|||
left: 0; |
|||
width: 50%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.ent-mainBusiness { |
|||
position: absolute; |
|||
left: 60%; |
|||
width: 25%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
// .fast-box { |
|||
// position: relative; |
|||
// height: 456px; |
|||
// } |
|||
|
|||
// .con-box { |
|||
// top: 0; |
|||
// left: 0; |
|||
// position: absolute; |
|||
// width: 100%; |
|||
// height: 100%; |
|||
// overflow: hidden; |
|||
|
|||
// div { |
|||
// justify-content: center; |
|||
// align-items: center; |
|||
// } |
|||
// } |
|||
.con-box { |
|||
width: 100%; |
|||
height: 100%; |
|||
overflow: hidden; |
|||
|
|||
div { |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,83 @@ |
|||
<template> |
|||
<div class="d-flex flex-nowrap"> |
|||
<a-date-picker |
|||
v-model="startValue" |
|||
:disabled-date="disabledStartDate" |
|||
show-time |
|||
:format="monthFormat" |
|||
placeholder="起始时间" |
|||
class="box box1" |
|||
@openChange="handleStartOpenChange" |
|||
/> |
|||
<a-date-picker |
|||
v-model="endValue" |
|||
:disabled-date="disabledEndDate" |
|||
show-time |
|||
:format="monthFormat" |
|||
class="box box2" |
|||
placeholder="截止时间" |
|||
:open="endOpen" |
|||
@openChange="handleEndOpenChange" |
|||
/> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
monthFormat: 'YYYY-MM-DD', |
|||
startValue: null, |
|||
endValue: null, |
|||
endOpen: false, |
|||
}; |
|||
}, |
|||
watch: { |
|||
startValue(val) { |
|||
console.log('startValue', val); |
|||
}, |
|||
endValue(val) { |
|||
console.log('endValue', val); |
|||
}, |
|||
}, |
|||
methods: { |
|||
disabledStartDate(startValue) { |
|||
const endValue = this.endValue; |
|||
if (!startValue || !endValue) { |
|||
return false; |
|||
} |
|||
return startValue.valueOf() > endValue.valueOf(); |
|||
}, |
|||
disabledEndDate(endValue) { |
|||
const startValue = this.startValue; |
|||
if (!endValue || !startValue) { |
|||
return false; |
|||
} |
|||
return startValue.valueOf() >= endValue.valueOf(); |
|||
}, |
|||
handleStartOpenChange(open) { |
|||
if (!open) { |
|||
this.endOpen = true; |
|||
} |
|||
}, |
|||
handleEndOpenChange(open) { |
|||
this.endOpen = open; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
.box { |
|||
min-width: auto !important; |
|||
width: 53% !important; |
|||
} |
|||
|
|||
.box1 { |
|||
margin-right: 2%; |
|||
} |
|||
|
|||
.box2 { |
|||
margin-left: 2%; |
|||
} |
|||
</style> |
|||
@ -1,218 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<!-- 机构注册 --> |
|||
<a-row class="d-flex flex-nowrap mt-4 pb-10" type="flex"> |
|||
<a-col :span="8" class="explain" flex="auto"> |
|||
<a-form :form="form" @submit="handleSignUp"> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
help="支持中文、字母、数字、“_”的组合且不能为纯数字,4-20位字符" |
|||
label="登录用户名" |
|||
required |
|||
> |
|||
<a-input v-decorator="['account']" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="单位性质" required> |
|||
<a-select placeholder="请选择单位性质" v-decorator="['nature']"> |
|||
<a-select-option value="1">高校</a-select-option> |
|||
<a-select-option value="2">初中</a-select-option> |
|||
</a-select> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
help="不能超过100个字符" |
|||
label="机构全称" |
|||
required |
|||
> |
|||
<a-input v-decorator="['fullName']" /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
help="统一社会信用代码、组织机构代码由字母和数字组成,分别为18/9位字符" |
|||
label="统一社会信用代码或组织机构代码" |
|||
required |
|||
> |
|||
<a-input v-decorator="['code1']" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="登录密码" required> |
|||
<a-input-password placeholder="密码由字母和数字混合组成,6-16位字符" v-decorator="['password', { rules: passwordRules }]" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="确认密码"> |
|||
<a-input-password placeholder="请再次输入您设置的密码" v-decorator="['againCredential', { rules: againPassword }]" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="手机"> |
|||
<a-input |
|||
@change="changePhone" |
|||
placeholder="该手机号用于账号激活、登录及找回密码" |
|||
type="number" |
|||
v-decorator="['phone', { 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" type="primary" v-else>重新获取</a-button> |
|||
</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-decorator="['smsCode', { rules: codeRules }]" /> |
|||
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
|||
<a-button :disabled="phone && phone.length !== 11" @click="getCode" class="ml-2" type="primary" v-else>获取验证码</a-button> |
|||
</div> |
|||
</a-form-item> |
|||
<!-- <a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="来源" |
|||
> |
|||
<a-select placeholder="请选择来源" v-decorator="['source', {initialValue: source }]"> |
|||
<a-select-option value="1">绿谷</a-select-option> |
|||
</a-select> |
|||
</a-form-item> --> |
|||
<div class="d-flex flex-row-reverse"> |
|||
<a-button block class="my-5" html-type="submit" style="width: 75%" type="primary">立即注册</a-button> |
|||
</div> |
|||
</a-form> |
|||
<div class="d-flex flex-row-reverse mt-1"> |
|||
<div class="d-flex flex-wrap" style="width: 75%"> |
|||
<div class="flex-1"></div> |
|||
<router-link tag="span" to="/login"> |
|||
<span class="baseColor pointer">已有账号,去登录</span> |
|||
</router-link> |
|||
</div> |
|||
</div> |
|||
</a-col> |
|||
<a-col :span="4" flex="150px"> |
|||
<div class="d-flex flex-column"> |
|||
<div>说明</div> |
|||
<div>1. 注册后即可登录,部分功能需平台人员审核后才能使用。</div> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapActions, mapState } from 'vuex'; |
|||
import mixin from 'views/User/mixin'; |
|||
import { saveUserMes } from '@/config/api'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
|
|||
export default { |
|||
name: 'MechanismSignUp', |
|||
mixins: [mixin], |
|||
data() { |
|||
return { |
|||
formItemLayout, |
|||
formTailLayout, |
|||
form: this.$form.createForm(this, { name: 'mechanismSignUp' }), |
|||
phone: '', |
|||
codeNum: '', |
|||
source: '1', |
|||
info: null, |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('user', ['picCode']), |
|||
|
|||
created() { |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapActions('user', ['signUp', 'sendCode', 'sendPicCode']), |
|||
|
|||
changePhone(e) { |
|||
this.phone = e.target.value; |
|||
}, |
|||
|
|||
// 刷新验证码 |
|||
changePicCode() { |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
// 获取验证码 |
|||
async getCode() { |
|||
try { |
|||
const params = { |
|||
phone: this.form.getFieldValue('phone'), |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
throw new Error(`mechanismSignUp.vue method getCode: ${error}`); |
|||
} |
|||
}, |
|||
|
|||
// 注册 |
|||
async handleSignUp(e) { |
|||
e.preventDefault(); |
|||
this.form.validateFields(async (err, values) => { |
|||
if (!err) { |
|||
// console.log('Received values of form: ', values); |
|||
try { |
|||
const { account, nature, fullName, code1, password, phone, smsCode, source } = values; |
|||
this.info = values; |
|||
const params = { account, password, phone, smsCode, source: 1 }; |
|||
await this.signUp(params); |
|||
this.saveUserMes(); |
|||
} catch (error) { |
|||
// console.log(`mechanismSignUp.vue methods handleSignUp: ${error}`); |
|||
} |
|||
} |
|||
}); |
|||
return; |
|||
}, |
|||
|
|||
// 登陆人信息保存 |
|||
async saveUserMes() { |
|||
try { |
|||
const { account, nature, fullName, code1, password, phone, smsCode, source } = this.info; |
|||
// console.log('this.info: ', this.info); |
|||
const params = { param: { code: code1, companyName: fullName, mold: nature, name: account, nickname: '', phone, type: 2 } }; |
|||
// console.log('params: ', params); |
|||
const res = await saveUserMes(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
// // 没有特殊情况就跳转到首页 |
|||
const { query } = this.$route; |
|||
this.$router.replace({ path: '/', query }); |
|||
} else { |
|||
message.error(msg || '注册失败'); |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
// console.log(`mechanismSignUp.vue methods saveUserMes: ${error}`); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.explain { |
|||
padding-right: 28px; |
|||
margin-right: 28px; |
|||
border-right: 1px solid #EEEEEE; |
|||
} |
|||
|
|||
.code_img { |
|||
width: 102px !important; |
|||
height: 32px !important; |
|||
} |
|||
</style> |
|||
@ -1,204 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<!-- 个人注册 --> |
|||
<a-row class="d-flex flex-nowrap mt-4 pb-10" type="flex"> |
|||
<a-col :span="8" class="explain" flex="auto"> |
|||
<a-form :form="form" @submit="handleSignUp"> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
help="支持中文、字母、数字、“_”的组合且不能为纯数字,4-20位字符" |
|||
label="登录用户名" |
|||
required |
|||
> |
|||
<a-input v-decorator="['account']" /> |
|||
</a-form-item> |
|||
<a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
help="不能超过20个字符" |
|||
label="昵称" |
|||
required |
|||
> |
|||
<a-input maxlength="20" v-decorator="['nickname']" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="登录密码"> |
|||
<a-input-password placeholder="密码由字母和数字混合组成,6-16位字符" v-decorator="['password', { rules: passwordRules }]" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="确认密码"> |
|||
<a-input-password placeholder="请再次输入您设置的密码" v-decorator="['againCredential', { rules: againPassword }]" /> |
|||
</a-form-item> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="手机"> |
|||
<a-input |
|||
@change="changePhone" |
|||
placeholder="该手机号用于账号激活、登录及找回密码" |
|||
type="number" |
|||
v-decorator="['phone', { 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" type="primary" v-else>重新获取</a-button> |
|||
</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-decorator="['smsCode', { rules: codeRules }]" /> |
|||
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
|||
<a-button :disabled="phone && phone.length !== 11" @click="getCode" class="ml-2" type="primary" v-else>获取验证码</a-button> |
|||
</div> |
|||
</a-form-item> |
|||
|
|||
<!-- <a-form-item |
|||
:label-col="formItemLayout.labelCol" |
|||
:wrapper-col="formItemLayout.wrapperCol" |
|||
label="来源" |
|||
> |
|||
<a-select placeholder="请选择来源" v-decorator="['source', {initialValue: source }]"> |
|||
<a-select-option value="1">绿谷</a-select-option> |
|||
</a-select> |
|||
</a-form-item> --> |
|||
<div class="d-flex flex-row-reverse"> |
|||
<a-button block class="my-5" html-type="submit" style="width: 75%" type="primary">立即注册</a-button> |
|||
</div> |
|||
</a-form> |
|||
<div class="d-flex flex-row-reverse mt-1"> |
|||
<div class="d-flex flex-wrap" style="width: 75%"> |
|||
<div class="flex-1"></div> |
|||
<router-link tag="span" to="/login"> |
|||
<span class="baseColor pointer">已有账号,去登录</span> |
|||
</router-link> |
|||
</div> |
|||
</div> |
|||
</a-col> |
|||
<a-col :span="4" flex="150px"> |
|||
<div class="d-flex flex-column"> |
|||
<div>说明</div> |
|||
<div>1. 个人用户无法享受完整服务,尽可能使用公司 注册</div> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapActions, mapState } from 'vuex'; |
|||
import mixin from 'views/User/mixin'; |
|||
import { saveUserMes } from '@/config/api'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
|
|||
export default { |
|||
name: 'PersonalSignUp', |
|||
mixins: [mixin], |
|||
data() { |
|||
return { |
|||
formItemLayout, |
|||
formTailLayout, |
|||
form: this.$form.createForm(this, { name: 'personalSignUp' }), |
|||
phone: '', |
|||
codeNum: '', |
|||
source: '1', |
|||
info: null, |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('user', ['picCode']), |
|||
|
|||
created() { |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapActions('user', ['signUp', 'sendCode', 'sendPicCode']), |
|||
|
|||
changePhone(e) { |
|||
this.phone = e.target.value; |
|||
}, |
|||
|
|||
// 刷新验证码 |
|||
changePicCode() { |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
// 获取验证码 |
|||
async getCode() { |
|||
try { |
|||
const params = { |
|||
phone: this.form.getFieldValue('phone'), |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
throw new Error(`personalSignUp.vue method getCode: ${error}`); |
|||
} |
|||
}, |
|||
|
|||
// 注册 |
|||
async handleSignUp(e) { |
|||
e.preventDefault(); |
|||
this.form.validateFields(async (err, values) => { |
|||
if (!err) { |
|||
// console.log('Received values of form: ', values); |
|||
try { |
|||
const { account, nickname, password, phone, smsCode, source } = values; |
|||
this.info = values; |
|||
const params = { account, password, phone, smsCode, source: 1 }; |
|||
await this.signUp(params); |
|||
this.saveUserMes(); |
|||
} catch (error) { |
|||
// console.log(`personalSignUp.vue methods handleSignUp: ${error}`); |
|||
} |
|||
} |
|||
}); |
|||
return; |
|||
}, |
|||
|
|||
// 登陆人信息保存 |
|||
async saveUserMes() { |
|||
try { |
|||
const { account, nickname, password, phone, smsCode, source } = this.info; |
|||
// console.log('this.info: ', this.info); |
|||
const params = { param: { name: account, nickname, phone, type: 1 } }; |
|||
// console.log('params: ', params); |
|||
const res = await saveUserMes(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
// // 没有特殊情况就跳转到首页 |
|||
const { query } = this.$route; |
|||
this.$router.replace({ path: '/', query }); |
|||
} else { |
|||
message.error(msg || '注册失败'); |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
// console.log(`personalSignUp.vue methods saveUserMes: ${error}`); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.explain { |
|||
padding-right: 28px; |
|||
margin-right: 28px; |
|||
border-right: 1px solid #EEEEEE; |
|||
} |
|||
|
|||
.code_img { |
|||
width: 102px !important; |
|||
height: 32px !important; |
|||
} |
|||
</style> |
|||
@ -1,29 +0,0 @@ |
|||
/* |
|||
* Copyright (c) 2020. |
|||
* author: wally |
|||
* email: 18603454788@163.com |
|||
*/ |
|||
import axios from 'axios'; |
|||
let { proxyUrl, msgUrl } = require('@/config/setting'); |
|||
|
|||
const tall = `${proxyUrl}/tall/v1.0`; |
|||
// console.log('tall: ', tall);
|
|||
const users = `${tall}/users`; |
|||
|
|||
// 用户登录
|
|||
export const signIn = params => axios.post(`${users}/signin`, params); |
|||
|
|||
// 注册
|
|||
export const signUp = params => axios.post(`${users}/signup`, params); |
|||
|
|||
// 图片验证码
|
|||
export const getPicCode = () => axios.get(`${users}/code`); |
|||
|
|||
// 发送验证码
|
|||
export const getSmscode = params => axios.get(`${users}/smscode`, params); |
|||
|
|||
// 通过手机号修改密码
|
|||
export const changePassword = params => axios.post(`${users}/password`, params); |
|||
|
|||
// 通过userId获取token
|
|||
export const getUserId = params => axios.get(`${users}/userId`, params); |
|||
@ -1,19 +0,0 @@ |
|||
/* |
|||
* Copyright (c) 2019. |
|||
* author: wally |
|||
* email: 18603454788@163.com |
|||
*/ |
|||
import axios from 'axios'; |
|||
let { proxyUrl, msgUrl } = require('@/config/setting'); |
|||
|
|||
const greenvalley = `${proxyUrl}/greenvalley`; |
|||
const comment = `${greenvalley}/comment`; // 交流社区
|
|||
|
|||
// 发帖
|
|||
export const addComment = params => axios.post(`${comment}/addComment`, params); |
|||
// 发帖查询
|
|||
export const selComment = params => axios.post(`${comment}/selComment`, params); |
|||
// 跟帖发表(评论发表)
|
|||
export const insComment = params => axios.post(`${comment}/insComment`, params); |
|||
// 跟帖查询(评论查询)
|
|||
export const selCommunity = params => axios.post(`${comment}/selCommunity`, params); |
|||
@ -1,144 +1,3 @@ |
|||
import axios from 'axios'; |
|||
import { message } from 'ant-design-vue'; |
|||
import { getSmscode, getPicCode, signIn, changePassword, signUp, getUserId } from '@/config/api-user'; |
|||
|
|||
const actions = { |
|||
/** |
|||
* sendCode 发送验证码 |
|||
* @param {any} commit |
|||
* @param {object} params 提交的数据 |
|||
* @param {string} params.phone 手机号 |
|||
*/ |
|||
async sendCode({ commit }, params) { |
|||
try { |
|||
const res = await getSmscode({ params }); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
return data; |
|||
} else { |
|||
message.error(msg || '发送失败'); |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
throw error || '发送失败'; |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* sendPicCode 获取图片验证码 |
|||
* @param {any} commit |
|||
* @param {object} params 提交的数据 |
|||
*/ |
|||
async sendPicCode({ commit }) { |
|||
try { |
|||
const res = await getPicCode(); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
commit('setPicCode', data); |
|||
return data; |
|||
} else { |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
throw error || '获取失败'; |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* signIn 登录 |
|||
* @param {any} commit |
|||
* @param {string} identifier 身份标识 手机号 用户名 |
|||
* @param {string} credential 身份凭证 验证码 密码 |
|||
* @return {Promise} result 服务器返回信息 |
|||
*/ |
|||
async signIn({ commit }, params) { |
|||
const hideLoading = message.loading('登录中', 0); |
|||
try { |
|||
const res = await signIn(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
commit('sign', data.token); |
|||
commit('setUser', data); |
|||
hideLoading(); |
|||
message.success('登录成功'); |
|||
return data; |
|||
} else { |
|||
hideLoading(); |
|||
throw msg || '登录失败'; |
|||
} |
|||
} catch (error) { |
|||
hideLoading(); |
|||
throw error || '登录失败'; |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* 修改密码 忘记密码 |
|||
* @param {any} commit |
|||
* @param {object} params 要提交的参数 |
|||
*/ |
|||
async changePassword({ commit }, params) { |
|||
try { |
|||
const res = await changePassword(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
message.success('修改密码成功'); |
|||
return data; |
|||
} else { |
|||
throw msg || '修改密码失败'; |
|||
} |
|||
} catch (error) { |
|||
throw error || '修改密码失败'; |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* singUp 注册新用户 |
|||
* @param {any} commit |
|||
* @param {object} params 提交的数据 |
|||
* @param {string} params.account 用户名 |
|||
* @param {string} params.password 密码 |
|||
* @param {string} params.phone 手机号 |
|||
* @param {string} params.smsCode 验证码 |
|||
*/ |
|||
async signUp({ commit }, params) { |
|||
try { |
|||
const res = await signUp(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
commit('sign', data.token); |
|||
commit('setUser', data); |
|||
message.success('注册成功'); |
|||
return data; |
|||
} else { |
|||
throw msg || '注册失败'; |
|||
} |
|||
} catch (error) { |
|||
throw error || '注册失败'; |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* 通过userId获取token |
|||
* @param {any} commit |
|||
* @param {object} params 提交的参数 |
|||
*/ |
|||
async getUserId({ commit }, params) { |
|||
console.log("getUserId") |
|||
try { |
|||
const res = await getUserId({ params }); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
commit('sign', data.token); |
|||
commit('setUser', data); |
|||
return data; |
|||
} else { |
|||
throw msg; |
|||
} |
|||
} catch (error) { |
|||
throw error || '获取个人信息失败'; |
|||
} |
|||
}, |
|||
}; |
|||
const actions = {}; |
|||
|
|||
export default actions; |
|||
|
|||
@ -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,66 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-03-11 21:00:50 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-04-08 16:21:18 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<div class="white my-5 d-flex flex-nowrap"> |
|||
<img src="~assets/gywm01.jpg" /> |
|||
<div class="d-flex flex-column pa-5"> |
|||
<img class="mb-3" src="~assets/gywm02.png" style="width: 96px; height: 41px" /> |
|||
<rich-text :title="title" /> |
|||
</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: '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,126 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<div class="white"> |
|||
<!-- <rich-text :title="title" /> --> |
|||
<div :style="{ height: '500px' }" id="treeChart"></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: 'Introduce', |
|||
components: { Banner, HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
title: '关于我们-组织机构', |
|||
showPage: 12, |
|||
arr: [ |
|||
{ name: '关于我们', url: '/About/Introduce' }, |
|||
{ name: '组织机构', url: '' }, |
|||
], |
|||
treedata: [ |
|||
{ |
|||
//一定一定要注意这里有[] |
|||
name: '绿谷公司', |
|||
children: [ |
|||
{ name: '行政事业部' }, |
|||
{ |
|||
name: '创新事业部', |
|||
children: [ |
|||
{ |
|||
name: '协同创新中心', |
|||
collapsed: false, |
|||
children: [ |
|||
{ name: '科技资源开放共享服务平台' }, |
|||
{ name: '知识产权与技术转移转化服务平台' }, |
|||
{ name: '知识培训服务平台' }, |
|||
{ name: '科技创新人才服务平台' }, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
name: '孵化事业部', |
|||
collapsed: false, |
|||
children: [ |
|||
{ name: '虚拟空间' }, |
|||
{ |
|||
name: '实体空间', |
|||
collapsed: false, |
|||
children: [{ name: '办公场所' }, { name: '公共实验室' }, { name: '中试基地' }], |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
name: '产业事业部', |
|||
children: [{ 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: '-5%', |
|||
left: '5%', |
|||
bottom: '0%', |
|||
right: '25%', |
|||
symbolSize: 7, |
|||
lineStyle: { width: 1 }, |
|||
itemStyle: { borderWidth: 3, borderColor: '#AACD06' }, |
|||
label: { position: 'top', verticalAlign: 'middle', align: 'center', 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: 20px auto; |
|||
} |
|||
</style> |
|||
@ -1,41 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner"> |
|||
<div> |
|||
<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: 20px auto; |
|||
} |
|||
</style> |
|||
@ -1,39 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<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,195 +0,0 @@ |
|||
<template> |
|||
<div class="box"> |
|||
<div> |
|||
<div class="policy-title"> |
|||
<span>{{ actDetail.title }}</span> |
|||
</div> |
|||
<!-- && hdDetail.content --> |
|||
<div v-if="hdDetail !== null"> |
|||
<div class="policy-info"> |
|||
<div> |
|||
<span> |
|||
<a-icon |
|||
class="baseColor" |
|||
style="font-size: 14px; margin-right: 10px" |
|||
type="clock-circle" |
|||
/> |
|||
<span> |
|||
{{ hdDetail.releaseTime }} |
|||
<span v-if="hdDetail.closeTime">- {{ hdDetail.closeTime }}</span> |
|||
</span> |
|||
</span> |
|||
<span style="margin-left: 60px"> |
|||
<a-icon class="baseColor" style="margin-right: 10px" type="environment" /> |
|||
<span>{{ hdDetail.address }}</span> |
|||
</span> |
|||
</div> |
|||
<!-- </div> --> |
|||
<!-- <div class="policy-info"> --> |
|||
</div> |
|||
<div class="policy-content" v-dompurify-html="hdDetail.content"></div> |
|||
<div class="policy-other"> |
|||
<div> |
|||
<span style="font-size: 14px">会议主题:</span> |
|||
<span>{{ hdDetail.theme }}</span> |
|||
</div> |
|||
<div> |
|||
<span>{{ hdDetail.organization }}</span> |
|||
</div> |
|||
<div> |
|||
<span style="font-size: 14px">主讲嘉宾:</span> |
|||
<span>{{ hdDetail.name }}</span> |
|||
</div> |
|||
<div v-if="hdDetail.other">其他事宜:{{ hdDetail.other }}</div> |
|||
</div> |
|||
<a-button |
|||
disabled |
|||
style="margin: 50px 25px" |
|||
v-if="hdDetail.releaseTime && Date.parse(hdDetail.releaseTime) < Date.parse(nowData)" |
|||
>报名已结束</a-button> |
|||
<enroll |
|||
:act-name="hdDetail.title" |
|||
:activity-id="hdDetail.activityId" |
|||
style="margin: 50px 25px" |
|||
v-else |
|||
/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
import Enroll from './components/Enroll.vue'; |
|||
import { activeDetail } from 'config/api'; |
|||
|
|||
export default { |
|||
name: 'ActDetails', |
|||
components: { Enroll }, |
|||
data() { |
|||
return { nowData: '', hdDetail: null }; |
|||
}, |
|||
computed: mapState('home', ['actDetail']), |
|||
async created() { |
|||
await 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: { |
|||
// 获取活动公告列表 |
|||
async getData() { |
|||
try { |
|||
const params = {param: {activityId: this.actDetail.activityId,}, }; |
|||
const res = await activeDetail(params); |
|||
const { data, msg, code } = res.data; |
|||
if (code === 200) { |
|||
this.hdDetail = data; |
|||
} |
|||
} catch (error) { |
|||
// console.log(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; |
|||
} |
|||
|
|||
.policy-other { |
|||
margin: 50px 25px; |
|||
font-size: 16px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-weight: 400; |
|||
font-family: Microsoft YaHei; |
|||
} |
|||
</style> |
|||
@ -1,316 +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="list-box d-flex flex-row flex-nowrap align-center" |
|||
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> |
|||
<div class="d-flex flex-column flex-1"> |
|||
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p> |
|||
<div class="d-flex flex-nowrap justify-space-between"> |
|||
<p class="source-time"> |
|||
<span class="source" v-if="item.releaseTime"> |
|||
时间:{{ item.releaseTime }} |
|||
<span v-if="item.closeTime">-{{ item.closeTime }}</span> |
|||
</span> |
|||
<span class="source" v-if="item.address">地点:{{ item.address }}</span> |
|||
</p> |
|||
<p class="original"> |
|||
<a-button |
|||
disabled |
|||
v-if="item.releaseTime && Date.parse(item.releaseTime) < Date.parse(nowData)" |
|||
>报名已结束</a-button> |
|||
<enroll :act-name="item.title" :activity-id="item.activityId" v-else /> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</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: 20, |
|||
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: 20, |
|||
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 { |
|||
.list-box { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
margin-top: 24px; |
|||
padding: 10px 25px; |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
margin-bottom: 10px; |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.item-content { |
|||
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 { |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
opacity: 1; |
|||
margin-bottom: 0; |
|||
|
|||
span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
.date-box { |
|||
width: 160px !important; |
|||
text-align: center; |
|||
box-shadow: none !important; |
|||
margin-top: 0 !important; |
|||
padding: 0 !important; |
|||
|
|||
p { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.date-mon { |
|||
font-size: 26px; |
|||
height: 26px; |
|||
line-height: 26px; |
|||
font-weight: 500; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.date-day { |
|||
font-size: 46px; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.source-time { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 68px; |
|||
text-align: right; |
|||
} |
|||
</style> |
|||
@ -1,321 +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,174 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" class="my-1" /> |
|||
<div class="white pa-5 mb-5 d-flex flex-nowrap align-center justify-space-between"> |
|||
<div> |
|||
<span class="font-16 textColor">联系人:</span> |
|||
<a-input style="width: auto" v-model="name" /> |
|||
</div> |
|||
<div> |
|||
<span class="font-16 textColor">联系电话:</span> |
|||
<a-input @change="onChange" style="width: auto" v-model="phone" /> |
|||
</div> |
|||
<div> |
|||
<span class="font-16 textColor">公司名称:</span> |
|||
<a-input style="width: 200px" v-model="company" /> |
|||
</div> |
|||
</div> |
|||
<div class="cart-box" v-if="cart && cart.length > 0"> |
|||
<div :key="list.id" class="d-flex flex-column pa-5 white div-box mb-8" v-for="list in cart"> |
|||
<p class="font-bold-20 title-color">{{ list.type === 0 ? '服务' : list.type === 1 ? '设备' : '成果' }}</p> |
|||
<div :key="index" class="d-flex flex-nowrap flex-row mb-8" v-for="(item, index) in list.carDetailList"> |
|||
<img :src="item.picUrl" class="cart-pic mr-8" /> |
|||
<div class="flex-1 flex-column"> |
|||
<p class="font-bold-20 title-color">{{ item.name }}</p> |
|||
<p class="font-14 textColor">{{ item.description }}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="d-flex flex-row-reverse pb-10"> |
|||
<a-button @click="handleSubmit" type="primary">提交</a-button> |
|||
<cart-model :phone="phone" :show-model="showModel" @handleCancel="handleCancel" @submitCart="submitCart" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapMutations, mapActions } from 'vuex'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import CartModel from './CartModel.vue'; |
|||
import { searchCar, carAndBuy } from 'config/api'; |
|||
|
|||
export default { |
|||
name: 'Cart', |
|||
components: { BreadCrumb, CartModel }, |
|||
data() { |
|||
return { |
|||
arr: [{ name: '购物车', url: '' }], |
|||
name: '', |
|||
phone: '', |
|||
company: '', |
|||
cart: {}, |
|||
showModel: false, |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('home', ['userSer']), |
|||
|
|||
async created() { |
|||
await this.getData(); |
|||
await this.getUserSer(); |
|||
if (this.userSer) { |
|||
if (this.userSer.name) { |
|||
this.name = this.userSer.name; |
|||
} |
|||
if (this.userSer.phone) { |
|||
this.phone = this.userSer.phone; |
|||
} |
|||
if (this.userSer.companyName) { |
|||
this.company = this.userSer.companyName; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
...mapMutations('home', []), |
|||
...mapActions('home', ['getUserSer']), |
|||
|
|||
// 获取购物车列表 |
|||
async getData() { |
|||
try { |
|||
const params = { param: { pageNum: 1, pageSize: 10 } }; |
|||
const res = await searchCar(params); |
|||
const { data, msg, code } = res.data; |
|||
if (code === 200) { |
|||
this.cart = data; |
|||
} |
|||
} catch (error) { |
|||
// console.log(error); |
|||
} |
|||
}, |
|||
|
|||
// 电话变化 |
|||
onChange(e) { |
|||
this.phone = e.target.value; |
|||
}, |
|||
|
|||
handleSubmit() { |
|||
if (this.userSer.phone !== this.phone) { |
|||
this.openModel(); |
|||
} else { |
|||
this.submitCart(); |
|||
} |
|||
}, |
|||
|
|||
// 提交 |
|||
async submitCart(tel) { |
|||
try { |
|||
if (tel) { |
|||
this.phone = tel; |
|||
} |
|||
const { name, phone, company, cart } = this; |
|||
const ids = cart[0].carId; |
|||
const params = { |
|||
param: { |
|||
contactName: company, |
|||
contactPhone: phone, |
|||
companyName: name, |
|||
ids, |
|||
}, |
|||
}; |
|||
const res = await carAndBuy(params); |
|||
const { data, msg, code } = res.data; |
|||
if (code === 200) { |
|||
this.$message.success('提交成功'); |
|||
this.confirmLoading = false; |
|||
} else { |
|||
throw msg; |
|||
this.confirmLoading = false; |
|||
} |
|||
} catch (error) { |
|||
this.$message.error(error); |
|||
this.confirmLoading = false; |
|||
} |
|||
}, |
|||
|
|||
// 打开弹窗 |
|||
openModel() { |
|||
this.showModel = true; |
|||
}, |
|||
|
|||
// 关闭弹窗 |
|||
handleCancel() { |
|||
this.showModel = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.cart-box { |
|||
.div-box { |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
} |
|||
|
|||
.cart-pic { |
|||
width: 233px; |
|||
height: 128px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,171 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: song |
|||
email: 15235360226@163.com |
|||
--> |
|||
|
|||
<template> |
|||
<div> |
|||
<a-modal :confirm-loading="confirmLoading" :visible="showModel" @cancel="handleCancel" @ok="handleOk()" title="电话验证" width="50%"> |
|||
<a-form :form="form"> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系电话" required> |
|||
<a-input placeholder="请输入手机号" type="tel" v-model="tel" /> |
|||
</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="请输入图片验证码" required 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" type="primary" v-else>重新获取</a-button> |
|||
</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="code" /> |
|||
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button> |
|||
<a-button :disabled="!showCode" @click="getCode" class="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 { carAndBuy } from 'config/api'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
|
|||
export default { |
|||
name: 'CartModel', |
|||
components: {}, |
|||
|
|||
props: { |
|||
showModel: { |
|||
type: Boolean, |
|||
default: false, |
|||
}, |
|||
phone: { |
|||
type: String, |
|||
default: '', |
|||
}, |
|||
}, |
|||
data() { |
|||
return { |
|||
confirmLoading: false, |
|||
formItemLayout, |
|||
formTailLayout, |
|||
form: this.$form.createForm(this, { name: 'submitPhone' }), |
|||
tel: '', |
|||
code: '', |
|||
codeNum: '', |
|||
phoneRules: [ |
|||
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' }, |
|||
], |
|||
codeRules: [ |
|||
{ required: true, message: '请输入验证码' }, |
|||
{ min: 4, max: 4, message: '请输入4位短信验证码' }, |
|||
], |
|||
showInterval: false, |
|||
codeTimer: null, |
|||
interval: 120, // 验证码有效时间倒计时 |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('user', ['picCode']), |
|||
|
|||
showCode() { |
|||
return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.tel); |
|||
}, |
|||
}, |
|||
|
|||
watch: { |
|||
phone(val) { |
|||
this.tel = this.phone; |
|||
}, |
|||
}, |
|||
|
|||
created() { |
|||
// if (this.phone) this.tel = this.phone; |
|||
this.sendPicCode(); |
|||
}, |
|||
|
|||
methods: { |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
|
|||
handleOk() { |
|||
if (!this.tel) { |
|||
this.$message.error('电话为必填项'); |
|||
} else { |
|||
if (this.tel) { |
|||
const phoneRule = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.tel); |
|||
if (phoneRule) { |
|||
this.$emit('submitCart', this.tel); |
|||
this.$emit('handleCancel'); |
|||
} else { |
|||
this.$message.error('请输入正确的联系电话'); |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
|
|||
handleCancel() { |
|||
this.$emit('handleCancel'); |
|||
}, |
|||
|
|||
// 获取验证码 |
|||
async getCode() { |
|||
try { |
|||
const params = { |
|||
phone: this.tel, |
|||
verificationCodeId: this.picCode.verificationCodeId, |
|||
verificationCodeValue: this.codeNum, |
|||
}; |
|||
await this.sendCode(params); |
|||
this.getCodeInterval(); |
|||
} catch (error) { |
|||
throw new Error(`SignIn.vue method getCode: ${error}`); |
|||
} |
|||
}, |
|||
|
|||
// 验证码倒计时 |
|||
getCodeInterval() { |
|||
this.showInterval = true; |
|||
this.codeTimer = setInterval(() => { |
|||
if (this.interval === 0) { |
|||
clearInterval(this.codeTimer); |
|||
this.codeTimer = null; |
|||
this.showInterval = false; |
|||
this.interval = 120; |
|||
return; |
|||
} |
|||
this.interval = this.interval - 1; |
|||
}, 1000); |
|||
}, |
|||
|
|||
// 刷新验证码 |
|||
changePicCode() { |
|||
this.sendPicCode(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
</style> |
|||
@ -1,23 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<!-- <div class="dev-box"> |
|||
<img src="~assets/build.png" /> |
|||
</div>--> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'Challenge', |
|||
data() { |
|||
return { |
|||
str: '创新挑战', |
|||
title: '创新挑战', |
|||
typeOfPlatform: '创新挑战', |
|||
arr: [{ name: '创新挑战', url: '/Challenge' }], |
|||
list: [], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
@ -1,248 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<!-- <div class="top-box" style="margin-bottom: 100px; min-height: 200px"> |
|||
<div class="top-title">结果公告</div> |
|||
<div class="top-content">结果公告在建中</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' : ''" |
|||
: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; |
|||
} |
|||
|
|||
.top-box { |
|||
background: -webkit-linear-gradient(left, #13ACC4, #A9C300) !important; |
|||
} |
|||
|
|||
.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,257 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<!-- <div class="top-box" style="margin-bottom: 100px; min-height: 200px"> |
|||
<div class="top-title">项目发布</div> |
|||
<div class="top-content">项目发布在建中</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' : ''" |
|||
: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; |
|||
} |
|||
|
|||
.top-box { |
|||
background: -webkit-linear-gradient(left, #13ACC4, #A9C300) !important; |
|||
} |
|||
|
|||
.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,105 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box" style="height: 110px"> |
|||
<div class="top-title">创新挑战</div> |
|||
<div class="top-txt">针对企业具体技术创新需求,通过“揭榜+比拼”方式,面向社会公开征集解决方案的服务。</div> |
|||
</div> |
|||
<div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">目的及意义</div> |
|||
</div> |
|||
<div |
|||
class="center-txt" |
|||
>创新挑战有助于解决企业发展实际问题,有效降低创新成本;有助于需求与技术精准对接,促进科技成果转移转化;有助于解决产业关键共性问题,推动区域产业经济发展。</div> |
|||
</div> |
|||
<div class="center-box"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">挑战流程</div> |
|||
</div> |
|||
<div class="center-txt"> |
|||
<img class="fill-weight" src="../../../assets/solicitation.png" /> |
|||
</div> |
|||
</div> |
|||
<div class="center-box" style="margin-bottom: 100px"> |
|||
<div class="center-title"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">有关要求</div> |
|||
</div> |
|||
<div class="center-txt d-flex flex-column"> |
|||
<div>1. 重视信息公开。各有关地方要按规定对通知文件、需求信息、现场赛情况、赛事结果等及时公开和公布,保障信息公开渠道顺畅、快捷,确保赛事运行公平、公开、公正。</div> |
|||
<div>2. 加强技术秘密和知识产权保护。参与挑战的需求方、挑战者和评审专家均需签订“保密协议”和“免责声明”法律文本。</div> |
|||
<div>3. 加强监督,确保公平公正。严格按照事先确定的流程和规则进行,建立投诉和纠纷处理机制。</div> |
|||
<div class="d-flex flex-row-reverse"> |
|||
<!-- <a-button class="mt-3" type="primary">需求填报</a-button> --> |
|||
<enroll /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import Enroll from '../components/Enroll.vue'; |
|||
|
|||
export default { |
|||
name: 'Solicitation', |
|||
components: { HNav, BreadCrumb, Enroll }, |
|||
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 { |
|||
height: 110px; |
|||
line-height: 110px; |
|||
background: -webkit-linear-gradient(left, #13ACC4, #A9C300) !important; |
|||
|
|||
.top-title { |
|||
top: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.top-txt { |
|||
float: right; |
|||
margin-right: 12%; |
|||
width: 62%; |
|||
padding: 0; |
|||
font-size: 16px; |
|||
color: #fff; |
|||
} |
|||
|
|||
.center-txt { |
|||
float: right; |
|||
margin: 22px 0; |
|||
width: 79%; |
|||
line-height: 36px; |
|||
font-size: 16px; |
|||
} |
|||
|
|||
.center-title { |
|||
top: 30% !important; |
|||
} |
|||
</style> |
|||
@ -1,194 +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" class="mb-3" label="需求名称"> |
|||
<a-input placeholder="请输入需求名称..." v-model.trim="platform.needName" /> |
|||
</a-form-item> |
|||
<!-- 技术领域 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="技术领域"> |
|||
<a-input placeholder="请输入技术领域..." v-model.trim="platform.technicalField" /> |
|||
</a-form-item> |
|||
<!-- 需求截止时间 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求截止时间"> |
|||
<a-date-picker @change="changeNeedTime" style="width: 100%" /> |
|||
</a-form-item> |
|||
<!-- 需求类别 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求类别"> |
|||
<a-checkbox-group @change="onChange" class="line-height-30"> |
|||
<a-checkbox value="1">技术研发(关键、核心技术)</a-checkbox> |
|||
<a-checkbox value="2">产品研发(产品升级、新产品研发)</a-checkbox> |
|||
<a-checkbox value="3">技术改造(设备研发、生产条件)</a-checkbox> |
|||
<a-checkbox value="4">技术配套(技术、产品等配套合作)</a-checkbox> |
|||
</a-checkbox-group> |
|||
</a-form-item> |
|||
<!-- 需求内容 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="需求内容"> |
|||
<quill-editor |
|||
:options="editorOption" |
|||
@blur="onEditorBlur($event)" |
|||
@change="onEditorChange($event)" |
|||
@focus="onEditorFocus($event)" |
|||
class="editor-box" |
|||
ref="myQuillEditor" |
|||
v-model="needContent" |
|||
></quill-editor> |
|||
</a-form-item> |
|||
<!-- 现有基础 --> |
|||
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" class="mb-3" label="现有基础"> |
|||
<a-textarea |
|||
placeholder="(已经开展的工作、所处阶段、投入资金和人力、仪器 设备、生产条件等)" |
|||
style="min-height: 100px" |
|||
v-model.trim="platform.basics" |
|||
/> |
|||
</a-form-item> |
|||
</a-form> |
|||
</a-modal> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import { quillEditor } from 'vue-quill-editor'; //调用编辑器 |
|||
import 'quill/dist/quill.core.css'; |
|||
import 'quill/dist/quill.snow.css'; |
|||
import 'quill/dist/quill.bubble.css'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
export default { |
|||
name: 'Enroll', |
|||
components: { quillEditor }, |
|||
data() { |
|||
return { |
|||
form: this.$form.createForm(this, { name: 'submit' }), |
|||
visible: false, |
|||
title: '需求征集', |
|||
formItemLayout, |
|||
formTailLayout, |
|||
confirmLoading: false, |
|||
needContent: ``, |
|||
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'], //上传图片、上传视频 |
|||
], |
|||
}, |
|||
}, |
|||
platform: { |
|||
needName: '', |
|||
technicalField: '', |
|||
basics: '', |
|||
}, |
|||
}; |
|||
}, |
|||
|
|||
methods: { |
|||
// 需求截止时间 |
|||
changeNeedTime(date, dateString) { |
|||
this.platform.buildTime = this.$moment(date).unix() * 1000; |
|||
// console.log(this.$moment(date).unix(), dateString); |
|||
}, |
|||
|
|||
onEditorReady(editor) { |
|||
// 准备编辑器 |
|||
}, |
|||
onEditorBlur() {}, // 失去焦点事件 |
|||
onEditorFocus() {}, // 获得焦点事件 |
|||
onEditorChange() { |
|||
// 内容改变事件 |
|||
// console.log(this.content); |
|||
}, |
|||
// 上传图片事件 |
|||
fileChange(info) { |
|||
console.log(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); |
|||
// } |
|||
}, |
|||
|
|||
// 显示表单输入框 |
|||
showModal() { |
|||
this.visible = true; |
|||
}, |
|||
// 取消显示 |
|||
handleCancel(e) { |
|||
this.visible = false; |
|||
}, |
|||
|
|||
// 点击确定 |
|||
handleOk() { |
|||
console.log(this.needContent); |
|||
// this.subMitAdd(); |
|||
}, |
|||
// 加入接口 |
|||
async subMitAdd() { |
|||
this.confirmLoading = true; |
|||
try { |
|||
// const params = { param: {} }; |
|||
// 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; |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.must-color { |
|||
color: red; |
|||
} |
|||
|
|||
.code_img { |
|||
height: 32px; |
|||
width: 120px; |
|||
} |
|||
|
|||
.ql-editor { |
|||
min-height: 600px; |
|||
max-height: 800px; |
|||
} |
|||
|
|||
.editor-box >>> .ql-editor { |
|||
min-height: 150px; |
|||
} |
|||
</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,180 +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,135 +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) { |
|||
console.log(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,44 +0,0 @@ |
|||
<template> |
|||
<div class="inner"> |
|||
<bread-crumb :arr="arr" class="my-1" /> |
|||
<!-- 联系我们 --> |
|||
<div> |
|||
<p class="font-bold-24 title-color">联系我们</p> |
|||
<contact /> |
|||
</div> |
|||
<!-- 加入我们 --> |
|||
<div> |
|||
<p class="font-bold-24 title-color">加入我们</p> |
|||
<rich-text :title="title" /> |
|||
<model class="mt-8" /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import Contact from 'components/Introduce/ContactUs.vue'; |
|||
import RichText from 'components/Introduce/RichText.vue'; |
|||
import Model from 'components/Introduce/Model.vue'; |
|||
|
|||
export default { |
|||
name: 'ContactUs', |
|||
components: { BreadCrumb, Contact, RichText, Model }, |
|||
data() { |
|||
return { |
|||
title: '联系我们', |
|||
arr: [{ name: '联系我们', url: '' }], |
|||
}; |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
p { |
|||
margin-top: 2rem; |
|||
} |
|||
</style> |
|||
@ -1,263 +1,32 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
<template> |
|||
<div> |
|||
<rotation /> |
|||
<div class="inner"> |
|||
<a-row> |
|||
<a-col :span="18" id="hy-news"> |
|||
<a-row> |
|||
<a-col :key="server.id" :span="8" v-for="server in services"> |
|||
<div @click="$router.push(server.path)" class="mr-4 d-flex pointer"> |
|||
<div class="server-box d-flex fill-width"> |
|||
<img :src="server.url" style="width:100%" /> |
|||
</div> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
<a-row class="mt-8"> |
|||
<a-col :span="8" class="fill-width d-flex flex-nowrap flex-row justify-space-between"> |
|||
<div |
|||
:key="platform.id" |
|||
@click="$router.push(platform.path)" |
|||
class="platform-box" |
|||
v-for="platform in platforms" |
|||
> |
|||
<div class="d-flex flex-column align-center pointer"> |
|||
<img :src="platform.url" style="width:48%" /> |
|||
<div class="platform-txt mt-3">{{ platform.firstName }}</div> |
|||
<div class="platform-txt">{{ platform.secondName }}</div> |
|||
</div> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
<a-row class="mt-8 mr-4 flex-1"> |
|||
<a-col :span="24"> |
|||
<div class="white d-flex flex-column justify-center"> |
|||
<index-new-list :i="0" :lists="lists" /> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
</a-col> |
|||
<a-col :span="6" :style="{ height: height }" class="hd-news"> |
|||
<div class="white d-flex flex-column justify-center"> |
|||
<index-new-list :i="1" :lists="lists" /> |
|||
</div> |
|||
</a-col> |
|||
</a-row> |
|||
</div> |
|||
<!-- 时间选择 --> |
|||
<TimePicker /> |
|||
<!-- 成员选择 --> |
|||
<MemberPicker /> |
|||
<!-- 列表 --> |
|||
<List /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState, mapActions } from 'vuex'; |
|||
import Rotation from 'components/Rotation/Rotation.vue'; |
|||
import IndexNewList from 'components/Index/IndexNewList.vue'; |
|||
import { frontSearchFriend, frontSearchCompany } from 'config/api'; |
|||
import TimePicker from '@/components/TimePicker/TimePicker.vue'; |
|||
import MemberPicker from '@/components/MemberPicker/MemberPicker.vue'; |
|||
import List from '@/components/List/List.vue'; |
|||
|
|||
export default { |
|||
components: { Rotation, IndexNewList }, |
|||
components: { TimePicker, MemberPicker, List }, |
|||
data() { |
|||
return { |
|||
services: [ |
|||
{ |
|||
id: '01', |
|||
chinese: '创新服务', |
|||
english: 'INNOVATIVE', |
|||
path: '/NewPlatform/NewService', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index06.png', |
|||
}, |
|||
{ |
|||
id: '02', |
|||
chinese: '孵化服务', |
|||
english: 'INCUBATION', |
|||
path: '/IncubationPlatform/Services', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index07.png', |
|||
}, |
|||
{ |
|||
id: '03', |
|||
chinese: '产业服务', |
|||
english: 'INDUSTRIAL', |
|||
path: '/Industry/Serve', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index08.png', |
|||
}, |
|||
], |
|||
platforms: [ |
|||
{ |
|||
id: '04', |
|||
firstName: '创新挑战', |
|||
secondName: '', |
|||
path: '/Challenge/Solicitation', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index01.png', |
|||
}, |
|||
{ |
|||
id: '05', |
|||
firstName: '科技资源开放共享服务平台', |
|||
secondName: '', |
|||
path: '/NewPlatform/Share', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index02.png', |
|||
}, |
|||
{ |
|||
id: '06', |
|||
firstName: '知识产权与技术转移转化服务平台', |
|||
secondName: '', |
|||
path: '/NewPlatform/Transfer', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index03.png', |
|||
}, |
|||
{ |
|||
id: '07', |
|||
firstName: '知识培训与科技人才服务平台', |
|||
secondName: '', |
|||
path: '/NewPlatform/Develop', |
|||
url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index04.png', |
|||
}, |
|||
// { |
|||
// id: '08', |
|||
// firstName: '知识平台', |
|||
// secondName: '', |
|||
// path: '/Knowledge', |
|||
// url: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/index05.png', |
|||
// }, |
|||
], |
|||
lists: [ |
|||
{ |
|||
id: 1, |
|||
name: '行业资讯', |
|||
news: [], |
|||
}, |
|||
{ |
|||
id: 2, |
|||
name: '活动公告', |
|||
news: [], |
|||
}, |
|||
], |
|||
height: '', |
|||
}; |
|||
}, |
|||
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']), |
|||
created() { |
|||
this.getData1(); |
|||
this.getData2(); |
|||
this.getIndustryInfoLists(); |
|||
this.getFrontLists(); |
|||
}, |
|||
mounted() { |
|||
var oDiv = document.getElementById('hy-news'); |
|||
this.height = oDiv.offsetHeight + 60 + 'px'; |
|||
}, |
|||
methods: { |
|||
...mapActions('home', ['getIndustryInfoList', 'getFrontList']), |
|||
|
|||
// 查询衍生企业 |
|||
async getData1() { |
|||
const params = { |
|||
param: { |
|||
pageNum: 1, |
|||
pageSize: 5, |
|||
type: 1, |
|||
typeOfPlatform: 1, |
|||
}, |
|||
}; |
|||
const res = await frontSearchFriend(params); |
|||
const { data, code, msg } = res.data; |
|||
if (code === 200) { |
|||
// console.log(data); |
|||
} else { |
|||
// console.log(msg); |
|||
} |
|||
}, |
|||
|
|||
// 查询合作伙伴 |
|||
async getData2() { |
|||
const params = { |
|||
param: { |
|||
pageNum: 1, |
|||
pageSize: 5, |
|||
type: 2, |
|||
typeOfPlatform: 2, |
|||
}, |
|||
}; |
|||
const res = await frontSearchCompany(params); |
|||
const { data, code, msg } = res.data; |
|||
if (code === 200) { |
|||
// console.log(data); |
|||
} else { |
|||
// console.log(msg); |
|||
} |
|||
return {}; |
|||
}, |
|||
|
|||
// 获取行业资讯列表 |
|||
async getIndustryInfoLists() { |
|||
const params = { |
|||
param: { |
|||
pageNum: 1, |
|||
pageSize: 3, |
|||
}, |
|||
}; |
|||
const res = await this.getIndustryInfoList(params); |
|||
this.lists[0].news = res.list; |
|||
}, |
|||
|
|||
// 获取活动公告列表 |
|||
async getFrontLists() { |
|||
const params = { |
|||
param: { |
|||
activityType: [], |
|||
pageNum: 1, |
|||
pageSize: 6, |
|||
title: '', |
|||
}, |
|||
}; |
|||
const res = await this.getFrontList(params); |
|||
this.lists[1].news = res.list; |
|||
methods: { |
|||
handleChange(value) { |
|||
console.log(`selected ${value}`); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="less" scoped> |
|||
.inner { |
|||
margin: 20px auto; |
|||
} |
|||
|
|||
.platform-box { |
|||
width: 25%; |
|||
|
|||
.platform-txt { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
@media only screen and (max-width: 1400px) { |
|||
.platform-txt { |
|||
font-size: 12px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.platform-box div { |
|||
transition: all 0.2s ease 0s; |
|||
} |
|||
|
|||
.platform-box:hover div { |
|||
transform: translate(0, -3px); |
|||
} |
|||
|
|||
.server-box:hover img { |
|||
transform: translate(0, -3px); |
|||
} |
|||
|
|||
.server-box img { |
|||
transition: all 0.2s ease 0s; |
|||
} |
|||
|
|||
.hy-news { |
|||
height: 746px; |
|||
} |
|||
|
|||
.hd-news { |
|||
background: white; |
|||
} |
|||
</style> |
|||
|
|||
@ -1,56 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-01-13 17:21:29 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-01-19 13:07:46 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<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 }, |
|||
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,172 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<div> |
|||
<div class="d-flex flex-column white"> |
|||
<div class="font-bold-32 title-color pt-3 px-2">众创空间介绍</div> |
|||
<div class="pa-3 font-16"> |
|||
<div> |
|||
本众创空间分为线下实体众创空间与线上虚拟众创空间,重点面向功能食品、生物医药和大健康产业 |
|||
领域科技型中小微企业、创客和创新创业团队开展创业孵化,培育高新技术企业,促进科技成果转化和产业集聚发展。 |
|||
</div> |
|||
<div> |
|||
本众创空间以建设专业化、市场化、网络化、品牌化双创孵化基地为目标,致力打造以公共技术服务平台 |
|||
为支撑,以创新创业服务为主导,以创新创业大讲堂为带动,以创新创业投融资为拓展,线上线下相结合,实 |
|||
体虚拟相融合的全要素专业化开放式创新创业孵化平台,着力构建“众创空间-孵化器-加速器-产业园”创新创业 |
|||
孵化链,构筑创新创业生态系统。 |
|||
</div> |
|||
<div> |
|||
目前空间已引入科创咨询专业服务机构,并与多家 |
|||
<span |
|||
@click="$router.push('/IncubationPlatform/Partner')" |
|||
class="pointer baseColor" |
|||
>第三方专业机构</span> |
|||
建立战略合作,聘请 |
|||
<span @click="$router.push('')" class="pointer baseColor">创业导师</span> |
|||
30余名,服务领域涵盖专业技术、企业管理、科创咨询、财务税务、法务咨询等,可随时为入孵企业提供针 对性、一对一创业辅导服务。 |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- <div :key="index" style="margin-top: 20px" v-for="(item, index) in list"> |
|||
<div class="d-flex justify-space-between space-box" v-if="index % 2 === 0"> |
|||
<div class="introduce-box"> |
|||
<p |
|||
@click="item.imgUrl ? jump(item.url) : openModel()" |
|||
class="introduce-title pointer" |
|||
> |
|||
{{ item.title }} |
|||
<a-icon class="baseColor ml-3" type="right-circle" /> |
|||
</p> |
|||
<p class="introduce-content" v-if="index === 0"> |
|||
实体空间由 |
|||
<span @click="$router.push('')" class="pointer baseColor">孵化场所</span>、 |
|||
<span @click="$router.push('')" class="pointer baseColor">公共实验室</span>、 |
|||
<span @click="$router.push('')" 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" |
|||
/> |
|||
</div> |
|||
<div |
|||
@click="item.url ? jump(item.url) : ''" |
|||
class="d-flex justify-space-between pointer space-box" |
|||
v-else |
|||
> |
|||
<img :src="item.imgUrl" style="width: 452px" /> |
|||
<div class="introduce-box"> |
|||
<p class="introduce-title"> |
|||
{{ item.title }} |
|||
<a-icon class="baseColor ml-3" type="right-circle" /> |
|||
</p> |
|||
<p class="introduce-content">{{ item.content }}</p> |
|||
</div> |
|||
</div> |
|||
<add-model :value="1" ref="child" style="width: 452px" /> |
|||
</div>--> |
|||
<div style="margin-top: 20px"> |
|||
<div class="d-flex justify-space-between"> |
|||
<img |
|||
class="pointer mr-3" |
|||
src="../../../assets/zckj.png" |
|||
style="width: 320px;height: 228px;" |
|||
/> |
|||
<div class="flex-1 d-flex flex-column white"> |
|||
<div |
|||
:key="index" |
|||
class="introduce-box d-flex flex-column pb-5" |
|||
style="width: 100%" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<p |
|||
@click="item.imgUrl ? jump(item.url) : openModel()" |
|||
class="introduce-title pointer" |
|||
> |
|||
{{ item.title }} |
|||
<a-icon class="baseColor ml-3" type="right-circle" /> |
|||
</p> |
|||
<p class="introduce-content" v-if="index === 0"> |
|||
实体空间由 |
|||
<span @click="$router.push('')" class="pointer baseColor">孵化场所</span>、 |
|||
<span @click="$router.push('')" class="pointer baseColor">公共实验室</span>、 |
|||
<span @click="$router.push('')" class="pointer baseColor">中试基地</span>部分组成。 |
|||
</p> |
|||
<p |
|||
@click="item.imgUrl ? jump(item.url) : openModel()" |
|||
class="introduce-content pointer" |
|||
v-else |
|||
>{{ item.content }}</p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<add-model :value="1" ref="child" style="width: 452px" /> |
|||
</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/20210119/xn.png', |
|||
url: '/IncubationPlatform/MakerSpace/EntitySpace', |
|||
}, |
|||
{ |
|||
title: '虚拟空间', |
|||
content: |
|||
'虚拟众创空间主要面向非入驻实体空间从事功能食品、生物医药和大健康产业相关研发服务和生产的企业。虚拟众创空间依托绿谷数字化平台进行建设,入驻企业可享受实体众创空间的各种创新创业服务,参加相关创新创业活动。', |
|||
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210119/st.png', |
|||
url: '/IncubationPlatform/MakerSpace/VirtualSpace', |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
jump(url) { |
|||
this.$router.push(url); |
|||
}, |
|||
|
|||
openModel() { |
|||
this.$refs.child[0].showModal(); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 0 auto 40px; |
|||
} |
|||
</style> |
|||
@ -1,41 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner"> |
|||
<div> |
|||
<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: 20px auto; |
|||
} |
|||
</style> |
|||
@ -1,46 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<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,170 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner"> |
|||
<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,46 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<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,472 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="flow-path" style="padding: 15px 9%;"> |
|||
<div class="flow-title" style="top: 30%;">服务流程</div> |
|||
<div class="flow-content1"> |
|||
<img src="~assets/image.png" style="width: 100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap" style="margin: 20px auto"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
class="item-box pointer d-flex flex-column" |
|||
style="position: relative" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img |
|||
:src="item.picUrl" |
|||
:title="item.intro" |
|||
@click="showModal(item.id)" |
|||
style="height: 220px; width: 100%; border: 1px solid #ccc" |
|||
/> |
|||
<p @click="showModal(item.id)" class="font-24 my-2 text-center">{{ item.name }}</p> |
|||
<div v-if="item.intro.length>45" class="font-16 textColor item-intro mb-2"> |
|||
{{ item.intro.slice(0,45) }} |
|||
<a-button |
|||
@click="showIntro(index)" |
|||
class="font-16 baseColor" |
|||
type="link" |
|||
style="height:20px;float:right;padding:0px" |
|||
> |
|||
more |
|||
<a-icon style="font-size:12px" type="right" /> |
|||
</a-button> |
|||
|
|||
</div> |
|||
|
|||
<div v-if="item.intro.length<=45" class="font-16 textColor item-intro"> |
|||
<p>{{ item.intro }}</p> |
|||
</div> |
|||
<!-- <p @click="showDiv(index)" class="baseColor d-flex flex-row-reverse">{{ showList[index] }}</p> --> |
|||
</div> |
|||
</div> |
|||
<a-modal v-model="showModelIntro" :footer="null"> |
|||
<p class="mt-3"> {{ modelIntro }} </p> |
|||
</a-modal> |
|||
<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> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
title="技术需求" |
|||
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="需求描述" |
|||
> |
|||
<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" |
|||
:before-upload="beforeUpload" |
|||
: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 { mapMutations, mapState, mapActions } from 'vuex'; |
|||
import { selService, serviceApply, upload } from 'config/api'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
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, |
|||
intro: '', |
|||
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: '请输入正确的手机号' }, |
|||
], |
|||
showList: ['查看全部', '查看全部', '查看全部', '查看全部', '查看全部', '查看全部', '查看全部', '查看全部'], |
|||
typeData: { |
|||
type: 0, |
|||
id: '', |
|||
}, |
|||
showModelIntro: false, |
|||
modelIntro: '' |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['picCode']), |
|||
|
|||
async created() { |
|||
this.getService(); |
|||
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: { |
|||
...mapMutations('home', ['setServiceArr']), |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
showIntro(index){ |
|||
this.showModelIntro = true |
|||
this.modelIntro = this.list[index].intro |
|||
}, |
|||
// 获取服务列表 |
|||
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 }, |
|||
}); |
|||
}, |
|||
// 显示表单输入框 |
|||
showModal(id) { |
|||
this.typeData.id = id; |
|||
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.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(); |
|||
}, |
|||
beforeUpload(file) { |
|||
return new Promise((resolve, reject) => { |
|||
const isLt5M = file.size / 1024 / 1024 < 5; |
|||
if (!isLt5M) { |
|||
this.$message.warning('上传附件大小不能超过5m!'); |
|||
return reject(false); |
|||
} |
|||
return resolve(true); |
|||
}); |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
showDiv(index) { |
|||
var divs = document.getElementsByClassName('item-intro'); |
|||
let list = ['查看全部', '查看全部', '查看全部', '查看全部']; |
|||
for (let i = 0; i < divs.length; i++) { |
|||
if (index === i) { |
|||
if (divs[index].style.height === '90px' || divs[index].style.height === '') { |
|||
list[i] = '收起'; |
|||
divs[i].style.height = 'auto'; |
|||
} else { |
|||
divs[i].style.height = '90px'; |
|||
list[i] = '查看全部'; |
|||
} |
|||
} else { |
|||
divs[i].style.height = '90px'; |
|||
list[i] = '查看全部'; |
|||
} |
|||
} |
|||
this.showList = list; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.pagination { |
|||
text-align: right; |
|||
} |
|||
|
|||
.item-box { |
|||
width: 22%; |
|||
margin-right: 4%; |
|||
border-radius: 4px; |
|||
// text-align: center; |
|||
} |
|||
.text-center{ |
|||
text-align: center; |
|||
} |
|||
|
|||
.margin-0 { |
|||
margin-right: 0 !important; |
|||
} |
|||
|
|||
.item-intro { |
|||
// display: -webkit-box; |
|||
// -webkit-line-clamp: 3; |
|||
// -webkit-box-orient: vertical; |
|||
// text-align: left; |
|||
// height: 90px; |
|||
// overflow: hidden; |
|||
} |
|||
</style> |
|||
@ -1,97 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="inner"> |
|||
<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,342 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<banner :show-page="49" /> |
|||
<!-- <add-model :value="2" class="add-mol" style="height: 32px" /> --> |
|||
<settled-model :type-num="1" class="add-mol" ref="childModel" style="height: 32px" /> |
|||
<a-button |
|||
@click="$router.push('/IncubationPlatform/MakerSpace/InformationFilling')" |
|||
class="set-mol" |
|||
type="primary" |
|||
>统计信息填报</a-button> |
|||
|
|||
<!-- <div class="top-title">实体众创空间</div> |
|||
<div class="top-content"> |
|||
山西绿谷生物科技股份有限公司立足功能食品、生物医药和大健康产业,聚焦“创新”、聚力“孵化”、聚合“产业”, |
|||
致力建设集创新链、孵化链和产业链为一体,产学研协同、多学科交叉、大中小企业融通、 |
|||
线上线下相结合的融合发展机制和开放式创新创业平台,培育打造全链条一体化新型社会研发机构和创新创业生态系统, |
|||
构筑专业化、集群化、园区化、产业发展新模式和新业态。公司秉持“创新、开放、协同、融合”发展理 |
|||
念,以“赋能健康中国,筑梦绿色未来”为愿景,以“构建创新创业生态,发展特色产业集群,打造全链条一体化开放 |
|||
式创新创业高地”为使命,大力推动建设“共融共生,共建 共创”价值共同体。 |
|||
</div>--> |
|||
</div> |
|||
<!-- 孵化场所 --> |
|||
<div @click="$router.push('')" 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-nowrap"> |
|||
孵化场所分为运营办公区、公共空间区、独立空间区和开放办公区。公共空间区包括路演厅 |
|||
(项目路演、知识培训、产品展示等多项功能)、会议室、洽谈室、第三空间(创业咖啡)。 |
|||
开放空间区按功能食品、生物医药、数字健康领域进行分区设置。 |
|||
</div> |
|||
</div> |
|||
<!-- 公共实验室 --> |
|||
<div @click="$router.push('')" class="center-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"> |
|||
<span> |
|||
公共实验室位于太原市师范街50号山西省生物研究院有限公司,总面积1320平方米。 |
|||
建有“医药生物技术山西省重点实验室”、“山西省发酵工程中试基地”及“山西省乳品 |
|||
发酵中试基地”等省级科技创新平台;具有检验检测机构资质认定证书(CMA);实验室 |
|||
拥有20万以上仪器设备26台套,包括AKTA蛋白纯化系统、多功能酶标仪、原子吸收光谱仪、 |
|||
液相色谱仪、万级无菌工作间、P2实验室等多种高端、大型实验仪器设备;可提供生物医药、 |
|||
食品检测、食用菌、肠道微生物等方面的科学实验、检验检测、小试中试等技术服务与科研成果转化。 |
|||
</span> |
|||
<img |
|||
class="center-img" |
|||
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210120/eb472126971a47438a3227df967ed2cb.png" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<!-- 中试基地 --> |
|||
<div @click="$router.push('')" 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> |
|||
<img |
|||
class="center-img" |
|||
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210120/d80b7f22aabc4c7194324b0f93793a41.png" |
|||
/> |
|||
</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> |
|||
<add-model :value="2" class="center-btn" style="height: 32px" /> |
|||
</div>--> |
|||
<!-- 入驻企业名录 --> |
|||
<div class="center-box" style="margin-bottom: 15px"> |
|||
<div class="center-title" style="top: 105px;"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">入驻企业名录</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<settled-enterprise :lists="lists" @searchEnt="searchEnt" /> |
|||
<!-- <div :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.company }}</span> |
|||
<span class="ent-mainBusiness" style="margin-left: 50px">{{ item.mainBusiness }}</span> |
|||
</div>--> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from '../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
// import AddModel from './../../components/AddModel.vue'; |
|||
import SettledModel from 'components/Introduce/SettledModel.vue'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue'; |
|||
import { searchEnt } from 'config/api'; |
|||
|
|||
export default { |
|||
name: 'EntitySpace', |
|||
components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise }, |
|||
data() { |
|||
return { |
|||
title: '实体众创空间', |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '实体众创空间', url: '' }, |
|||
], |
|||
list: [], |
|||
pageSize: 18, |
|||
current: 1, |
|||
lists: [], |
|||
}; |
|||
}, |
|||
|
|||
beforeRouteEnter(to, from, next) { |
|||
if (from.path === '/login' || from.path === '/register') { |
|||
return next(vm => { |
|||
vm.$refs.childModel.showModal(); |
|||
}); |
|||
} |
|||
next(); |
|||
}, |
|||
|
|||
created() { |
|||
console.log(this.$router); |
|||
this.searchEnt(); |
|||
}, |
|||
|
|||
methods: { |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
async searchEnt(business) { |
|||
try { |
|||
const params = { param: { placeType: 1, company: business ? business : '' } }; |
|||
const res = await searchEnt(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data; |
|||
} else { |
|||
this.$message.error('查询失败'); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error('查询失败'); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</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: 100%; |
|||
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 { |
|||
position: absolute; |
|||
left: 0; |
|||
width: 50%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.ent-mainBusiness { |
|||
position: absolute; |
|||
left: 60%; |
|||
width: 30%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.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%; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.add-mol { |
|||
position: absolute; |
|||
bottom: 7%; |
|||
left: 25%; |
|||
} |
|||
|
|||
.set-mol { |
|||
position: absolute; |
|||
bottom: 7%; |
|||
left: 33%; |
|||
} |
|||
|
|||
@media only screen and (max-width: 1500px) { |
|||
.set-mol { |
|||
left: 35%; |
|||
} |
|||
} |
|||
|
|||
@media only screen and (max-width: 950px) { |
|||
.set-mol { |
|||
left: 40%; |
|||
} |
|||
} |
|||
|
|||
.center-img { |
|||
width: 79%; |
|||
} |
|||
</style> |
|||
@ -1,69 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-04-19 14:42:52 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-04-19 14:58:46 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner"> |
|||
<div style="border: 1px solid #e8e8e8;"> |
|||
<div class="white" id="custom-mount" style="min-height: 600px"></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from '../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import WebOfficeSDK from '@/assets/js/web-office-sdk-v1.1.2.es.js'; |
|||
|
|||
export default { |
|||
name: 'InformationFilling', |
|||
components: { HNav, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '统计信息填报', url: '' }, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
mounted() { |
|||
this.mountWps(); |
|||
}, |
|||
|
|||
methods: { |
|||
/** |
|||
* 加载wps页面 |
|||
* @param {string} url 服务端返回的wps在线文档路径 |
|||
*/ |
|||
mountWps() { |
|||
console.log('加载wps页面'); |
|||
const url = |
|||
'https://wwo.wps.cn/office/s/1380475802910593024?_w_appid=09d77d2eb919438e8ae4f2a9ec6ec8dd' + |
|||
'&_w_signature=J7Yp09rUDuRqql9Gcp5ZKvaH2e4%3D&_w_token=eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MTg' + |
|||
'4MTM5NDksInN1YiI6IjEzODE1NDgyNzExNjc3Mzc4NTciLCJhdXRoSWQiOiIxMzgxNTQ4MjcxMTcxOTMyMTYxIiwiZ' + |
|||
'XhwIjoxNjUwMzQ5OTQ5fQ.0gL0RM1AmInHeIlku_LYHvReLbR54mAffc46Yqd4gWU'; |
|||
var demo = WebOfficeSDK.config({ |
|||
mount: document.getElementById('custom-mount'), |
|||
url, |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
</style> |
|||
@ -1,258 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<banner :show-page="48" /> |
|||
<!-- <add-model :value="3" class="add-mol" style="height: 32px" /> --> |
|||
<settled-model :type-num="0" class="add-mol" ref="childModel" style="height: 32px" /> |
|||
<a-button |
|||
@click="$router.push('/IncubationPlatform/MakerSpace/InformationFilling')" |
|||
class="set-mol" |
|||
type="primary" |
|||
>统计信息填报</a-button> |
|||
</div> |
|||
<div class="center-box c-box" style="margin-bottom: 160px"> |
|||
<div class="center-title" style="top: 105px;"> |
|||
<div class="circular"></div> |
|||
<div style="margin-left: 40px">入驻企业名录</div> |
|||
</div> |
|||
<div class="center-content"> |
|||
<settled-enterprise :lists="lists" @searchEnt="searchEnt" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import HNav from '../../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
// import AddModel from './../../components/AddModel.vue'; |
|||
import SettledModel from 'components/Introduce/SettledModel.vue'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import { searchEnt } from 'config/api'; |
|||
import SettledEnterprise from 'components/SettledEnterprise/SettledEnterprise.vue'; |
|||
|
|||
export default { |
|||
name: 'VirtualSpace', |
|||
components: { HNav, BreadCrumb, SettledModel, Banner, SettledEnterprise }, |
|||
data() { |
|||
return { |
|||
title: '虚拟众创空间', |
|||
arr: [ |
|||
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' }, |
|||
{ name: '虚拟众创空间', url: '' }, |
|||
], |
|||
list: [], |
|||
pageSize: 18, |
|||
current: 1, |
|||
lists: [], |
|||
isShowModel: 0, |
|||
}; |
|||
}, |
|||
|
|||
beforeRouteEnter(to, from, next) { |
|||
if (from.path === '/login' || from.path === '/register') { |
|||
return next(vm => { |
|||
vm.$refs.childModel.showModal(); |
|||
}); |
|||
} |
|||
next(); |
|||
}, |
|||
|
|||
created() { |
|||
this.searchEnt(); |
|||
}, |
|||
|
|||
methods: { |
|||
// 改变单当前页数 |
|||
onShowSizeChange(current, size) { |
|||
this.current = current; |
|||
}, |
|||
async searchEnt(business) { |
|||
try { |
|||
const params = { param: { placeType: 0, company: business ? business : '' } }; |
|||
const res = await searchEnt(params); |
|||
const { code, msg, data } = res.data; |
|||
if (code === 200) { |
|||
this.lists = data; |
|||
} else { |
|||
this.$message.error('查询失败'); |
|||
} |
|||
} catch (error) { |
|||
this.$message.error('查询失败'); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</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: 100%; |
|||
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; |
|||
} |
|||
|
|||
.ent-name { |
|||
position: absolute; |
|||
left: 0; |
|||
width: 30%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.ent-mainBusiness { |
|||
position: absolute; |
|||
left: 35%; |
|||
width: 20%; |
|||
height: 24px; |
|||
top: 50%; |
|||
margin-top: -12px; |
|||
font-size: 22px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
line-height: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
opacity: 1; |
|||
overflow: hidden; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
|
|||
.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%; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.add-mol { |
|||
position: absolute; |
|||
bottom: 7%; |
|||
left: 25%; |
|||
} |
|||
|
|||
.set-mol { |
|||
position: absolute; |
|||
bottom: 7%; |
|||
left: 33%; |
|||
} |
|||
|
|||
@media only screen and (max-width: 1500px) { |
|||
.set-mol { |
|||
left: 35%; |
|||
} |
|||
} |
|||
|
|||
@media only screen and (max-width: 950px) { |
|||
.set-mol { |
|||
left: 40%; |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,14 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view></router-view> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'IncubationPlatform', |
|||
data() { |
|||
return {}; |
|||
}, |
|||
}; |
|||
</script> |
|||
@ -1,228 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<a-button @click="showModal" style="height: 100%; width: 100%" type="primary" v-if="value !== 1">{{ 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="platform.val"> |
|||
<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="合作信息简述"> |
|||
<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: '', // 验证码 |
|||
val: 0, |
|||
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.val) { |
|||
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.platform.val, |
|||
}, |
|||
}; |
|||
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 my-1"> |
|||
<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,427 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="flow-path" style="padding: 15px 9%;"> |
|||
<div class="flow-title" style="top: 30%;">服务流程</div> |
|||
<div class="flow-content"> |
|||
<img src="~assets/image.png" style="width: 100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap" style="margin: 20px 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" |
|||
@click="showModal(item.id)" |
|||
style="height: 220px; width: 100%; border: 1px solid #ccc" |
|||
/> |
|||
<p @click="showModal(item.id)" class="font-24 my-4" style="text-align: center"> |
|||
<span>{{ item.name }}</span> |
|||
</p> |
|||
<div v-if="item.intro.length>45" class="font-16 textColor item-intro mb-2"> |
|||
{{ item.intro.slice(0,45) }} |
|||
<a-button |
|||
@click="showIntro(index)" |
|||
class="font-16 baseColor" |
|||
type="link" |
|||
style="height:20px;float:right;padding:0px" |
|||
> |
|||
more |
|||
<a-icon style="font-size:12px" type="right" /> |
|||
</a-button> |
|||
|
|||
</div> |
|||
|
|||
<div v-if="item.intro.length<=45" class="font-16 textColor item-intro"> |
|||
<p>{{ item.intro }}</p> |
|||
</div> |
|||
<!-- <p |
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p>--> |
|||
</div> |
|||
</div> |
|||
<a-modal v-model="showModelIntro" :footer="null"> |
|||
<p class="mt-3"> {{ modelIntro }} </p> |
|||
</a-modal> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
title="技术需求" |
|||
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="需求描述" |
|||
> |
|||
<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" |
|||
:before-upload="beforeUpload" |
|||
: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 { mapMutations, mapState, mapActions } from 'vuex'; |
|||
import { selService, serviceApply, upload } from 'config/api'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './components/HNav.vue'; |
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
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, |
|||
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: '请输入正确的手机号' }, |
|||
], |
|||
typeData: { |
|||
type: 0, |
|||
id: '', |
|||
}, |
|||
showModelIntro: false, |
|||
modelIntro: '' |
|||
}; |
|||
}, |
|||
|
|||
computed: mapState('user', ['picCode']), |
|||
async created() { |
|||
this.getService(); |
|||
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: { |
|||
...mapMutations('home', ['setServiceArr']), |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
...mapActions('home', ['getUserSer']), |
|||
|
|||
showIntro(index){ |
|||
this.showModelIntro = true |
|||
this.modelIntro = this.list[index].intro |
|||
}, |
|||
// 获取服务列表 |
|||
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); |
|||
} |
|||
}, |
|||
// 显示表单输入框 |
|||
showModal(id) { |
|||
this.typeData.id = id; |
|||
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.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(); |
|||
}, |
|||
beforeUpload(file) { |
|||
return new Promise((resolve, reject) => { |
|||
const isLt5M = file.size / 1024 / 1024 < 5; |
|||
if (!isLt5M) { |
|||
this.$message.warning('上传附件大小不能超过5m!'); |
|||
return reject(false); |
|||
} |
|||
return resolve(true); |
|||
}); |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
}, |
|||
}; |
|||
</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,179 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box" style="margin-bottom: 100px; min-height: 200px"> |
|||
<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" /> |
|||
</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 }, |
|||
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,129 +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.time }}</span> |
|||
</span> |
|||
<span style="margin-left: 60px"> |
|||
<a-icon class="baseColor" style="margin-right: 10px" type="environment" /> |
|||
<span>{{ actDetail.site }}</span> |
|||
</span> |
|||
</div> |
|||
<div class="policy-content" v-dompurify-html="actDetail.content"></div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapState } from 'vuex'; |
|||
export default { |
|||
name: 'ItDetails', |
|||
data() { |
|||
return { nowData: '' }; |
|||
}, |
|||
computed: mapState('home', ['actDetail']), |
|||
created() { |
|||
// 获取当前时间 |
|||
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: {}, |
|||
}; |
|||
</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,203 +0,0 @@ |
|||
<!-- |
|||
Copyright (c) 2020. |
|||
author: bin |
|||
email: binbin0314@126.com |
|||
--> |
|||
|
|||
<template> |
|||
<div class="inner"> |
|||
<div class="policy-box"> |
|||
<div |
|||
:key="index" |
|||
class="list-box d-flex flex-row flex-nowrap align-center" |
|||
v-for="(item, index) in lists" |
|||
> |
|||
<div |
|||
@click="jumpDetails(item)" |
|||
class="date-box d-flex flex-column" |
|||
v-if="item.time !== null" |
|||
> |
|||
<p class="date-mon">{{ monthEnglish[item.time.split('-')[1] - 1] }}.</p> |
|||
<p class="date-day">{{ item.time.split(' ')[0].split('-')[2] }}</p> |
|||
</div> |
|||
<div class="d-flex flex-column flex-1"> |
|||
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p> |
|||
<div class="d-flex flex-nowrap justify-space-between"> |
|||
<p class="source-time"> |
|||
<span class="source" v-if="item.time !== null">时间:{{ item.time }}</span> |
|||
<span class="source" v-if="item.site">地点:{{ item.site }}</span> |
|||
</p> |
|||
</div> |
|||
</div> |
|||
</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: 20, |
|||
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); |
|||
} 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('/ItDetails'); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style scoped lang="stylus"> |
|||
.inner { |
|||
margin: 40px auto; |
|||
} |
|||
|
|||
.policy-box { |
|||
.list-box { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
background: #fff; |
|||
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16); |
|||
margin-top: 24px; |
|||
padding: 10px 25px; |
|||
} |
|||
} |
|||
|
|||
.item-title { |
|||
margin-bottom: 10px; |
|||
font-size: 24px; |
|||
color: rgba(0, 0, 0, 0.65); |
|||
font-family: Microsoft YaHei; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.item-content { |
|||
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 { |
|||
font-size: 14px; |
|||
font-family: Microsoft YaHei; |
|||
font-weight: 400; |
|||
line-height: 22px; |
|||
opacity: 1; |
|||
margin-bottom: 0; |
|||
|
|||
span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
.date-box { |
|||
width: 160px !important; |
|||
text-align: center; |
|||
box-shadow: none !important; |
|||
margin-top: 0 !important; |
|||
padding: 0 !important; |
|||
|
|||
p { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
} |
|||
|
|||
.date-mon { |
|||
font-size: 26px; |
|||
height: 26px; |
|||
line-height: 26px; |
|||
font-weight: 500; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.date-day { |
|||
font-size: 46px; |
|||
height: 56px; |
|||
line-height: 56px; |
|||
font-weight: bold; |
|||
color: #13ACC4; |
|||
} |
|||
|
|||
.source-time { |
|||
margin-bottom: 0; |
|||
} |
|||
|
|||
.pagination { |
|||
margin-top: 68px; |
|||
text-align: right; |
|||
} |
|||
</style> |
|||
@ -1,48 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-01-13 17:21:29 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-01-20 15:17:25 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<div class="inner my-1"> |
|||
<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,170 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner" style="margin-top: 40px"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<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: 100px"> |
|||
<p>成果名字:</p> |
|||
<p>专利类型:</p> |
|||
<p>专利号:</p> |
|||
<p>联系人:</p> |
|||
<p>联系方式:</p> |
|||
</div> |
|||
<div style="width: 500px"> |
|||
<p>{{ obj.registerName }}</p> |
|||
<p>{{ obj.style }}</p> |
|||
<p>{{ obj.registerNum }}</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="equ-btn"> |
|||
<!-- <a-button style="margin-right: 20px">转化意向</a-button> --> |
|||
<intention-model |
|||
:btn-name="btnName" |
|||
: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> |
|||
</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'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
export default { |
|||
name: 'AchDet', |
|||
components: { IntentionModel, AddShopping, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
typeOfPlatform: '成果详情', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '知识产权与技术转移转化服务平台', url: '/NewPlatform/Transfer' }, |
|||
{ name: '成果详情', url: '' }, |
|||
], |
|||
obj: {}, |
|||
typeData: { |
|||
type: 2, |
|||
Id: '', |
|||
}, |
|||
btnName: '产品购买', |
|||
}; |
|||
}, |
|||
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: 30px 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,246 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="top-box"> |
|||
<div class="top-title"> |
|||
协同创新中心 |
|||
<new-model ref="childModel" /> |
|||
</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 :style="{ height: '500px' }" id="treeChart"></div> |
|||
<div class="absolute-box" style="top: 2.5%" v-if="showDiv"> |
|||
<div class="case"></div> |
|||
<div class="d-flex flex-column"> |
|||
<div class="mb-8">科技资源共享服务平台</div> |
|||
<div class="mb-8">知识产权与技术转移转化服务平台</div> |
|||
<div>知识培训与科技人才服务平台</div> |
|||
</div> |
|||
</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: '' }, |
|||
], |
|||
showDiv: true, |
|||
list: [], |
|||
treedata: [ |
|||
{ |
|||
//一定一定要注意这里有[] |
|||
name: '协同创新中心', |
|||
children: [ |
|||
{ |
|||
name: '功能食品协同创新平台', |
|||
collapsed: false, |
|||
children: [ |
|||
{ name: '功能食品资源开发' }, |
|||
{ name: '营养健康功能因子分再鉴定及作用机制探究' }, |
|||
{ name: '功能食品关键加工技术研发' }, |
|||
{ name: '功能食品安全评价与风险监测' }, |
|||
], |
|||
}, |
|||
{ |
|||
name: '现代医药协同创新平台', |
|||
collapsed: false, |
|||
children: [ |
|||
{ name: '中医药与天然药物资源开发利用' }, |
|||
{ name: '医药生物先进技术' }, |
|||
{ name: '创新药物研发' }, |
|||
{ name: '药理药效研究与安全评价' }, |
|||
], |
|||
}, |
|||
{ |
|||
name: '生物医学工程协同创新平台', |
|||
collapsed: false, |
|||
children: [{ name: '生物信息技术' }, { name: '生物医学工程研发' }, { name: '生物力学和生物材料' }], |
|||
}, |
|||
{ |
|||
name: '数字健康开发协同创新平台', |
|||
collapsed: false, |
|||
children: [{ name: '生物医学成像与图像处理' }, { name: '传染病预测预警数字技术' }], |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
|
|||
beforeRouteEnter(to, from, next) { |
|||
if (from.path === '/login' || from.path === '/register') { |
|||
return next(vm => { |
|||
vm.$refs.childModel.showModal(); |
|||
}); |
|||
} |
|||
next(); |
|||
}, |
|||
|
|||
mounted() { |
|||
this.showChart(); |
|||
}, |
|||
methods: { |
|||
showChart() { |
|||
// 基于准备好的dom,初始化echarts实例 |
|||
var myChart = this.$echarts.init(document.getElementById('treeChart')); |
|||
// 配置图表的点击事件 |
|||
// myChart.on('click', this.clickFun); |
|||
// 指定图表的配置项和数据 |
|||
var option = { |
|||
tooltip: { |
|||
trigger: 'item', |
|||
triggerOn: 'mousemove', |
|||
}, |
|||
series: [ |
|||
{ |
|||
type: 'tree', |
|||
data: this.treedata, |
|||
top: '2%', |
|||
left: '6%', |
|||
bottom: '1%', |
|||
right: '40%', |
|||
symbolSize: 7, |
|||
lineStyle: { width: 1 }, |
|||
itemStyle: { borderWidth: 3, borderColor: '#AACD06' }, |
|||
label: { |
|||
position: 'top', |
|||
verticalAlign: 'middle', |
|||
align: 'center', |
|||
fontSize: 16, |
|||
}, |
|||
leaves: { |
|||
label: { |
|||
position: 'right', |
|||
verticalAlign: 'middle', |
|||
align: 'left', |
|||
}, |
|||
}, |
|||
expandAndCollapse: true, |
|||
animationDuration: 550, |
|||
animationDurationUpdate: 750, |
|||
}, |
|||
], |
|||
}; |
|||
// 使用刚指定的配置项和数据显示图表。 |
|||
myChart.setOption(option); |
|||
}, |
|||
clickFun(param) { |
|||
if (typeof param.seriesIndex == 'undefined') { |
|||
return; |
|||
} |
|||
if (param.type == 'click') { |
|||
// console.log(param); |
|||
for (let i = 0; i < this.treedata[0].children.length; i++) { |
|||
if (param.data.name === this.treedata[0].children[i].name) { |
|||
this.treedata[0].children[i].collapsed = !this.treedata[0].children[i].collapsed; |
|||
if (this.treedata[0].children[i].collapsed) { |
|||
this.showDiv = false; |
|||
return; |
|||
} else { |
|||
this.showDiv = true; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="stylus" scoped> |
|||
.inner { |
|||
margin: 10px auto 15px; |
|||
} |
|||
|
|||
.absolute-box { |
|||
position: absolute; |
|||
right: 0; |
|||
height: 100%; |
|||
// border: 1px solid #ccc; |
|||
// box-shadow: 0 0 6px rgba(19, 172, 196, 0.6); |
|||
width: 70px; |
|||
padding: 4px; |
|||
align-items: center; |
|||
text-align: center; |
|||
font-size: 14px; |
|||
display: flex; |
|||
justify-content: center; |
|||
|
|||
.case { |
|||
width: 40px; |
|||
height: 100%; |
|||
border-radius: 10px; |
|||
margin-right: 10px; |
|||
box-shadow: 2px 0 0 rgb(170 205 6); |
|||
} |
|||
} |
|||
|
|||
@media only screen and (max-width: 1400px) { |
|||
.absolute-box { |
|||
right: -40px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -1,46 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner my-1"> |
|||
<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,131 +0,0 @@ |
|||
<!-- |
|||
* @Author: wally |
|||
* @email: 18603454788@163.com |
|||
* @Date: 2021-01-13 17:21:29 |
|||
* @LastEditors: wally |
|||
* @LastEditTime: 2021-01-20 09:56:56 |
|||
--> |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div style="padding-bottom: 50px"> |
|||
<div class="inner d-flex flex-nowrap justify-space-between"> |
|||
<div :key="index" @click="jump(item.url)" class="content-box" v-for="(item, index) in list"> |
|||
<img :src="item.imgUrl" /> |
|||
<div class="con-title">{{ item.title }}</div> |
|||
<div class="con-con">{{ item.content }}</div> |
|||
<!-- <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> |
|||
</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/20210120/ccf39757579647cd975ddaebfc571d93.png', |
|||
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; |
|||
} |
|||
|
|||
.content-box { |
|||
padding: 0 !important; |
|||
width: 30%; |
|||
height: auto !important; |
|||
margin: 50px 0; |
|||
cursor: pointer; |
|||
position: relative; |
|||
|
|||
img { |
|||
width: 100%; |
|||
} |
|||
} |
|||
|
|||
.con-title { |
|||
position: absolute; |
|||
bottom: 23px; |
|||
color: #ffffff; |
|||
font-size: 1.6rem; |
|||
text-align: center; |
|||
width: 100%; |
|||
background-image: linear-gradient(rgba(#545454, 0), rgba(0, 0, 0, 0.6)); |
|||
} |
|||
|
|||
@media only screen and (max-width: 1650px) { |
|||
.con-title { |
|||
font-size: 1.3rem; |
|||
} |
|||
} |
|||
|
|||
.con-con { |
|||
background: white; |
|||
box-shadow: 0 0 6px #ccc; |
|||
height: 26%; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
font-size: 16px; |
|||
} |
|||
</style> |
|||
@ -1,427 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<banner :show-page="showPage" /> |
|||
<div class="flow-path" style="padding: 15px 9%;"> |
|||
<div class="flow-title" style="top: 30%;">服务流程</div> |
|||
<div class="flow-content"> |
|||
<img src="~assets/image.png" style="width: 100%" /> |
|||
</div> |
|||
</div> |
|||
<div class="inner d-flex flex-wrap" style="margin: 20px auto"> |
|||
<div |
|||
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''" |
|||
:key="index" |
|||
|
|||
class="item-box mb-8 pointer" |
|||
v-for="(item, index) in list" |
|||
> |
|||
<img @click="showModal(item.id)" :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" /> |
|||
<p class="font-24 my-4" style="text-align: center"> |
|||
<span>{{ item.name }}</span> |
|||
</p> |
|||
<!-- <p |
|||
class="font-16 my-4 textColor line-height-30 item-content" |
|||
v-if="item.intro" |
|||
>{{ item.intro }}</p> --> |
|||
<div v-if="item.intro === null? false: item.intro.length>45" class="font-16 textColor item-intro mb-2"> |
|||
{{ item.intro.slice(0,45) }} |
|||
<a-button |
|||
@click="showIntro(index)" |
|||
class="font-16 baseColor" |
|||
type="link" |
|||
style="height:20px;float:right;padding:0px" |
|||
> |
|||
more |
|||
<a-icon style="font-size:12px" type="right" /> |
|||
</a-button> |
|||
|
|||
</div> |
|||
|
|||
<div v-if="item.intro === null? false:item.intro.length<=45" class="font-16 textColor item-intro"> |
|||
<p>{{ item.intro }}</p> |
|||
</div> |
|||
<!-- <p |
|||
|
|||
@click="jump(item.id)" |
|||
class="font-16 baseColor" |
|||
style="text-align: right; cursor: pointer" |
|||
>了解更多→</p>--> |
|||
</div> |
|||
</div> |
|||
<a-modal v-model="showModelIntro" :footer="null"> |
|||
<p class="mt-3"> {{ modelIntro }} </p> |
|||
</a-modal> |
|||
<a-modal |
|||
:confirm-loading="confirmLoading" |
|||
:visible="visible" |
|||
@cancel="handleCancel" |
|||
@ok="handleOk" |
|||
title="服务需求" |
|||
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="需求描述" |
|||
> |
|||
<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="上传附件" |
|||
> |
|||
<a-upload |
|||
:action="action" |
|||
:before-upload="beforeUpload" |
|||
: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 { mapMutations, mapState, mapActions } from 'vuex'; |
|||
import { selService, serviceApply, upload } from 'config/api'; |
|||
import Banner from 'components/Banner/Banner.vue'; |
|||
import HNav from './../components/HNav.vue'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
const formItemLayout = { |
|||
labelCol: { span: 5 }, |
|||
wrapperCol: { span: 18 }, |
|||
}; |
|||
const formTailLayout = { |
|||
labelCol: { span: 6 }, |
|||
wrapperCol: { span: 18, offset: 6 }, |
|||
}; |
|||
|
|||
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, |
|||
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: '请输入正确的手机号' }, |
|||
], |
|||
typeData: { |
|||
type: 0, |
|||
Id: '', |
|||
}, |
|||
showModelIntro: false, |
|||
modelIntro: '' |
|||
}; |
|||
}, |
|||
computed: mapState('user', ['picCode']), |
|||
created() { |
|||
this.getService(); |
|||
}, |
|||
methods: { |
|||
...mapMutations('home', ['setServiceArr', 'getUserSer']), |
|||
...mapActions('user', ['sendCode', 'sendPicCode']), |
|||
|
|||
showIntro(index){ |
|||
this.showModelIntro = true |
|||
this.modelIntro = this.list[index].intro |
|||
}, |
|||
// 获取服务列表 |
|||
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 }, |
|||
}); |
|||
}, |
|||
|
|||
// 显示表单输入框 |
|||
showModal(id) { |
|||
this.typeData.Id = id; |
|||
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.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(); |
|||
}, |
|||
beforeUpload(file) { |
|||
return new Promise((resolve, reject) => { |
|||
const isLt5M = file.size / 1024 / 1024 < 5; |
|||
if (!isLt5M) { |
|||
this.$message.warning('上传附件大小不能超过5m!'); |
|||
return reject(false); |
|||
} |
|||
return resolve(true); |
|||
}); |
|||
}, |
|||
fileChange(info) { |
|||
this.fileList = info.fileList; |
|||
}, |
|||
}, |
|||
}; |
|||
</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,106 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner my-1"> |
|||
<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> |
|||
<banner :show-page="showPage" /> |
|||
<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> |
|||
<!-- <a-button>直接申请</a-button> --> |
|||
<intention-model |
|||
:btn-name="btnName" |
|||
: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: '', |
|||
}, |
|||
btnName: '服务申请', |
|||
}; |
|||
}, |
|||
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,239 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner my-1"> |
|||
<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' : ''" |
|||
:key="index" |
|||
@click="choose(index, 0)" |
|||
class="ins-name" |
|||
v-for="(item, index) in laboratory" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search |
|||
@search="searchLab" |
|||
class="item-search" |
|||
enter-button="搜索" |
|||
placeholder="搜索实验室" |
|||
v-model="LabIpt" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="flex-3 flex-wrap" style="border-top: 1px solid rgba(0, 0, 0, 0.06)"> |
|||
<div class="flex-3 flex-wrap"> |
|||
<span class="ins-title">大型科研设施与仪器:</span> |
|||
<span |
|||
:class="item.isActive ? 'act-color' : ''" |
|||
:key="index" |
|||
@click="choose(index, 1)" |
|||
class="ins-name" |
|||
v-for="(item, index) in instrument" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search |
|||
@search="searchIns" |
|||
class="item-search" |
|||
enter-button="搜索" |
|||
placeholder="搜索仪器" |
|||
v-model="InsIpt" |
|||
/> |
|||
</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,222 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<div class="inner" style="margin-top: 40px"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<div class="inner equ-box"> |
|||
<div class="equ-info d-flex"> |
|||
<img :src="obj.visitLocation" /> |
|||
<!-- <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" style="margin-top: 20px" v-if="listState === 1"> |
|||
<div class="equ-info-left" style="width: 100px"> |
|||
<!-- <p>仪器名字:</p> --> |
|||
<p>制造商:</p> |
|||
<p>型号:</p> |
|||
<p>规格:</p> |
|||
<p>性能指标:</p> |
|||
<p>联系人:</p> |
|||
<p>联系方式:</p> |
|||
</div> |
|||
<div> |
|||
<!-- <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" style="margin-top: 20px" v-if="listState === 3"> |
|||
<div class="equ-info-left" style="width: 100px"> |
|||
<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 |
|||
:btn-name="btnName" |
|||
: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> |
|||
</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'; |
|||
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue'; |
|||
|
|||
export default { |
|||
name: 'InsDet', |
|||
components: { IntentionModel, AddShopping, BreadCrumb }, |
|||
data() { |
|||
return { |
|||
typeOfPlatform: '设备详情', |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '科技资源开放共享服务平台', url: '/NewPlatform/Share' }, |
|||
{ name: '设备详情', url: '' }, |
|||
], |
|||
obj: {}, |
|||
typeData: { |
|||
type: 1, |
|||
Id: '', |
|||
}, |
|||
typeProductData: { |
|||
type: 3, |
|||
Id: '', |
|||
}, |
|||
id: 0, |
|||
btnName: '产品购买', |
|||
}; |
|||
}, |
|||
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: 30px 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,315 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<h-nav /> |
|||
<div class="inner my-1"> |
|||
<bread-crumb :arr="arr" /> |
|||
</div> |
|||
<!-- <banner :show-page="showPage" /> --> |
|||
<div class="inner ins-box"> |
|||
<p class="font-bold-24 item-title" v-if="description">{{ shareName }}</p> |
|||
<div class="font-20" v-if="description">{{ description }}</div> |
|||
<!-- <p class="font-bold-24 item-title" v-if="direction">科研条件:</p> |
|||
<div class="font-20" v-dompurify-html="direction" v-if="direction"></div>--> |
|||
|
|||
<p class="font-bold-24 item-title" v-if="list[0]">设备列表</p> |
|||
<div class="d-flex flex-wrap" v-if="list[0]"> |
|||
<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> |
|||
<div class="mt-5"> |
|||
<!-- <a-button>直接申请</a-button> --> |
|||
<intention-model |
|||
:btn-name="btnName" |
|||
:type-data="typeData" |
|||
style="float: left; margin-right: 20px" |
|||
/> |
|||
<!-- <a-button type="primary">加入购物车</a-button> --> |
|||
<add-shopping :type-data="typeData" /> |
|||
</div> |
|||
<!-- <p |
|||
class="font-bold-24 item-title" |
|||
v-if="teamHead.name !== '' || teamHead.name !== null" |
|||
>人才团队带头人情况</p> |
|||
<div class="d-flex" v-if="teamHead.name !== '' || teamHead.name !== null"> |
|||
<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" |
|||
v-if="teamHead.name !== '' || teamHead.name !== null" |
|||
> |
|||
<p style="border-bottom: 1px solid #eee">{{ teamHead.name }}</p> |
|||
<p> |
|||
<span v-if="teamHead.gender - 0 === 1">男</span> |
|||
<span v-else-if="teamHead.gender - 0 === 2">女</span> |
|||
</p> |
|||
<p>{{ teamHead.famousFamily }}</p> |
|||
<p>{{ teamHead.birthday }}</p> |
|||
<p>{{ teamHead.education }}</p> |
|||
<p>{{ teamHead.position }}</p> |
|||
<p>{{ teamHead.major }}</p> |
|||
<p>{{ teamHead.professional }}</p> |
|||
<p>{{ teamHead.teamName }}</p> |
|||
<p>{{ teamHead.workUnit }}</p> |
|||
<p>{{ teamHead.direction }}</p> |
|||
</div> |
|||
</div>--> |
|||
<p class="font-bold-24 item-title" v-if="obj !== null">团队成员信息</p> |
|||
<div style="background: #fff" v-if="obj !== null"> |
|||
<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> |
|||
<div v-if="obj.teamMemberList && obj.teamMemberList.length > 0"> |
|||
<div :key="index" class="d-flex" v-for="(item, index) in obj.teamMemberList"> |
|||
<div class="con-box" style="flex: 1">{{ item.tmName }}</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">{{ 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> |
|||
</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'; |
|||
import AddShopping from 'components/Introduce/AddShopping.vue'; |
|||
import IntentionModel from 'components/Introduce/IntentionModel.vue'; |
|||
|
|||
export default { |
|||
name: 'Institute', |
|||
components: { HNav, BreadCrumb, AddShopping, IntentionModel }, |
|||
data() { |
|||
return { |
|||
id: 0, |
|||
title: '研究院详情', |
|||
typeOfPlatform: '创新平台', |
|||
showPage: 32, |
|||
arr: [ |
|||
{ name: '创新平台', url: '/NewPlatform/NewCore' }, |
|||
{ name: '创新资源平台', url: '/NewPlatform/News' }, |
|||
{ name: '科技资源开放共享服务平台', url: '/NewPlatform/Share' }, |
|||
{ name: '研究院详情', url: '' }, |
|||
], |
|||
teamHead: { |
|||
name: '', |
|||
gender: '', |
|||
famousFamily: '', |
|||
birthday: '', |
|||
education: '', |
|||
position: '', |
|||
major: '', |
|||
professional: '', |
|||
teamName: '', |
|||
workUnit: '', |
|||
direction: '', |
|||
}, |
|||
obj: null, |
|||
list: [], |
|||
description: '', |
|||
shareName: '', |
|||
direction: '', // 研究方向 |
|||
experiments: '', // 科研能力 |
|||
projectKind: '', // 项目分类 |
|||
vertify: '', // 校验 |
|||
typeData: { |
|||
type: 0, |
|||
Id: '', |
|||
}, |
|||
btnName: '服务申请', |
|||
}; |
|||
}, |
|||
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; |
|||
} |
|||
if (this.$route.params.description) { |
|||
this.description = this.$route.params.description; |
|||
} |
|||
if (this.$route.params.name) { |
|||
this.shareName = this.$route.params.name; |
|||
} |
|||
if (this.$route.params.direction) { |
|||
this.direction = this.$route.params.direction; |
|||
} |
|||
if (this.$route.params.experiments) { |
|||
this.experiments = this.$route.params.experiments; |
|||
} |
|||
if (this.$route.params.projectKind) { |
|||
this.projectKind = this.$route.params.projectKind; |
|||
} |
|||
if (this.$route.params.vertify) { |
|||
this.vertify = this.$route.params.vertify; |
|||
} |
|||
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) { |
|||
if (data.list && data.list.length > 0) { |
|||
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.teamHead.name = data[0].name; |
|||
this.teamHead.gender = data[0].gender; |
|||
this.teamHead.famousFamily = data[0].famousFamily; |
|||
this.teamHead.birthday = data[0].birthday; |
|||
this.teamHead.education = data[0].education; |
|||
this.teamHead.position = data[0].position; |
|||
this.teamHead.major = data[0].major; |
|||
this.teamHead.professional = data[0].professional; |
|||
this.teamHead.teamName = data[0].teamName; |
|||
this.teamHead.workUnit = data[0].workUnit; |
|||
this.teamHead.direction = data[0].direction; |
|||
if (data && data[0].teamMemberList.length > 0) { |
|||
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,155 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<sen-nav /> |
|||
<div class="inner my-1"> |
|||
<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' : ''" |
|||
:key="index" |
|||
@click="choose(index)" |
|||
class="ins-name" |
|||
v-for="(item, index) in list" |
|||
>{{ item.name }}</span> |
|||
</div> |
|||
<div class="flex-1 align-center"> |
|||
<a-input-search |
|||
@search="searchFruit" |
|||
class="item-search" |
|||
enter-button="搜索" |
|||
placeholder="搜索成果" |
|||
v-model="fruitIpt" |
|||
/> |
|||
</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> |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue