lucky 5 years ago
parent
commit
a63c74680f
  1. 16
      src/components/HeadNav/HeadNav.vue
  2. 157
      src/components/Introduce/DeriveEnterprise.vue
  3. 81
      src/components/Introduce/PartnerShip.styl
  4. 77
      src/router/index.js
  5. 8
      src/views/About/About.vue
  6. 17
      src/views/About/Children/SpinOffs.vue
  7. 123
      src/views/Activity/ActDetails.vue
  8. 324
      src/views/Activity/Activity.vue
  9. 321
      src/views/Activity/components/Enroll.vue
  10. 95
      src/views/Business/Business.vue
  11. 31
      src/views/Challenge/Challenge.vue
  12. 215
      src/views/Challenge/Children/Notice.vue
  13. 223
      src/views/Challenge/Children/Release.vue
  14. 73
      src/views/Challenge/Children/Solicitation.vue
  15. 54
      src/views/Challenge/components/LeftNav.vue
  16. 85
      src/views/Develop/Develop.vue
  17. 14
      src/views/FirstPage/FirstPage.vue
  18. 176
      src/views/Study/StuDetails.vue
  19. 255
      src/views/Study/Study.vue

16
src/components/HeadNav/HeadNav.vue

@ -104,37 +104,37 @@ export default {
},
{
name: '数智开发',
url: '',
url: '/Develop',
},
{
name: '双创活动',
url: '',
url: '/Activity',
},
{
name: '创新挑战',
url: '',
children: [
{
title: '需求征集',
url: '',
url: '/Challenge/Solicitation',
},
{
title: '项目发布',
url: '',
url: '/Challenge/Release',
},
{
title: '结果公示',
url: '',
url: '/Challenge/Notice',
},
],
url: '/Challenge/Solicitation',
},
{
name: '创业学院',
url: '',
url: '/Business',
},
{
name: '学习平台',
url: '',
url: '/Study',
},
{
name: '关于我们',

157
src/components/Introduce/DeriveEnterprise.vue

@ -0,0 +1,157 @@
<!--
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 px-5">
<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="item.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="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, //
newPartners: [
{
description: '132',
name: '测试公司1',
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2816433753,267880517&fm=26&gp=0.jpg',
},
{
description: '132',
name: '测试公司1',
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2816433753,267880517&fm=26&gp=0.jpg',
},
{
description: '132',
name: '测试公司1',
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2816433753,267880517&fm=26&gp=0.jpg',
},
{
description: '132',
name: '测试公司1',
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2816433753,267880517&fm=26&gp=0.jpg',
},
{
description: '132',
name: '测试公司1',
logoUrl: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2816433753,267880517&fm=26&gp=0.jpg',
},
],
};
},
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>

81
src/components/Introduce/PartnerShip.styl

@ -0,0 +1,81 @@
//
.logo-box{
width: 22%;
margin-right: 4%;
border-radius: 4px;
margin-bottom: 50px;
.logo-pic-box{
height: 90px;
width: 90px;
border-radius: 50%;
background: #fff;
line-height: 90px;
text-align: center;
box-shadow: 6px 6px 6px #eee;
.logo-pic{
height: 70px
}
.logo-text{
height: 100%;
font-size: 12px;
line-height: 20px;
}
}
}
.logo-box1{
margin-right: 0!important;
}
//
.enterprise-bg{
width: 100%;
// background: url('../../assets/enterprise-banner.png') right no-repeat;
background-size: 100% 100%;
}
.enterprise-box{
width: 26%;
height: 382px;
margin-right: 11%;
position: relative;
padding: 0 16px;
.enterprise-pic{
height: 166px
}
.enterprise-txt{
display: -webkit-box;
overflow: hidden;
white-space: normal !important;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
text-align: justify;
line-height: 28px;
}
.enterprise-more{
position: absolute;
bottom: 0;
right: 12px;
}
}
.enterprise-box1{
margin-right: 0!important;
}
.enterprise-page >>> .ant-pagination-item-active{
background: #13ACC4;
}
.enterprise-page >>> .ant-pagination-item-active a{
color: #fff;
}

77
src/router/index.js

@ -3,7 +3,7 @@
* @email: 18603454788@163.com
* @Date: 2021-01-13 16:33:32
* @LastEditors: wally
* @LastEditTime: 2021-01-13 17:33:53
* @LastEditTime: 2021-01-14 16:32:22
*/
import Vue from 'vue';
import VueRouter from 'vue-router';
@ -55,30 +55,95 @@ const routes = [
{
path: '/About/Introduce',
name: 'About',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/About.vue'),
component: () => import(/* webpackChunkName: "About-About" */ 'views/About/About.vue'),
children: [
{
path: '/About/Introduce',
name: 'Introduce',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Introduce.vue'),
component: () => import(/* webpackChunkName: "About-Introduce" */ 'views/About/Children/Introduce.vue'),
},
{
path: '/About/Organ',
name: 'Organ',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Organ.vue'),
component: () => import(/* webpackChunkName: "About-Organ" */ 'views/About/Children/Organ.vue'),
},
{
path: '/About/Partner',
name: 'Partner',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Partner.vue'),
component: () => import(/* webpackChunkName: "About-Partner" */ 'views/About/Children/Partner.vue'),
},
{
path: '/About/SpinOffs',
name: 'SpinOffs',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/SpinOffs.vue'),
component: () => import(/* webpackChunkName: "About-SpinOffs" */ 'views/About/Children/SpinOffs.vue'),
},
],
},
// 学习平台
{
path: '/Study',
name: 'Study',
component: () => import(/* webpackChunkName: "Study-Study" */ 'views/Study/Study.vue'),
},
// 学习平台详情页
{
path: '/StuDetails',
name: 'StuDetails',
component: () => import(/* webpackChunkName: "Study-StuDetails" */ 'views/Study/StuDetails.vue'),
},
// 创业学院
{
path: '/Business',
name: 'Business',
component: () => import(/* webpackChunkName: "Business-Business" */ 'views/Business/Business.vue'),
},
// 创新挑战
{
path: '/Challenge/Solicitation',
name: 'Challenge',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Challenge/Challenge.vue'),
children: [
{
path: '/Challenge/Solicitation',
name: 'Solicitation',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Challenge/Children/Solicitation.vue'),
},
{
path: '/Challenge/Release',
name: 'Release',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Challenge/Children/Release.vue'),
},
{
path: '/Challenge/Notice',
name: 'Notice',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Challenge/Children/Notice.vue'),
},
],
},
// 活动公告界面
{
path: '/Activity',
name: 'Activity',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Activity/Activity.vue'),
},
// 活动公告详情界面
{
path: '/ActDetails',
name: 'ActDetails',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Activity/ActDetails.vue'),
},
// 数智开发界面
{
path: '/Develop',
name: 'Develop',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Develop/Develop.vue'),
},
// 政策界面
{
path: '/Policy',

8
src/views/About/About.vue

@ -1,11 +1,3 @@
<!--
* @Author: wally
* @email: 18603454788@163.com
* @Date: 2021-01-13 17:18:13
* @LastEditors: wally
* @LastEditTime: 2021-01-13 18:03:42
-->
<template>
<div class="inner" style="margin-top: 50px; margin-bottom: 100px">
<left-nav style="float: left" />

17
src/views/About/Children/SpinOffs.vue

@ -1,21 +1,18 @@
<!--
* @Author: wally
* @email: 18603454788@163.com
* @Date: 2021-01-13 17:30:54
* @LastEditors: wally
* @LastEditTime: 2021-01-13 18:19:11
-->
<template>
<div>生态企业</div>
<div>
<derive-enterprise :title="title" :type-of-platform="typeOfPlatform" />
</div>
</template>
<script>
import DeriveEnterprise from 'components/Introduce/DeriveEnterprise.vue';
export default {
name: 'Partner',
components: { DeriveEnterprise },
data() {
return {
title: '生企业',
title: '生企业',
typeOfPlatform: '关于我们',
arr: [
{ name: '关于我们', url: '/About/Introduce' },

123
src/views/Activity/ActDetails.vue

@ -0,0 +1,123 @@
<template>
<div class="box">
<div>
<div class="policy-title">
<span>{{ actDetail.title }}</span>
</div>
<div class="policy-info">
<span>
<a-icon
class="baseColor"
style="font-size: 14px; margin-right: 10px"
type="clock-circle"
/>
<span>{{ actDetail.releaseTime }}-{{ actDetail.closeTime }}</span>
</span>
<span style="margin-left: 60px">
<a-icon class="baseColor" style="margin-right: 10px" type="environment" />
<span>{{ actDetail.address }}</span>
</span>
</div>
<div class="policy-content" v-dompurify-html="actDetail.content"></div>
<enroll
:act-name="actDetail.title"
:activity-id="actDetail.activityId"
style="margin: 50px 25px"
/>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import Enroll from './components/Enroll.vue';
export default {
name: 'ActDetails',
components: { Enroll },
data() {
return {};
},
computed: mapState('home', ['actDetail']),
created() {},
methods: {},
};
</script>
<style lang="stylus" scoped>
.box {
width: 1260px;
position: relative;
margin: 80px auto;
background: #fff;
min-height: 1037px;
overflow: hidden;
opacity: 1;
padding-bottom: 480px;
}
.back-btn {
width: 80px;
position: absolute;
right: 0;
}
.policy-title {
height: 120px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
padding: 0 150px;
border-bottom: 1px solid #707070;
}
.policy-info {
height: 76px;
line-height: 76px;
text-align: center;
}
.policy-content {
padding: 0 25px;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
font-weight: 400;
font-family: Microsoft YaHei;
}
.coms-style {
height: 480px;
padding: 25px 0;
border-top: 2px solid #ccc;
position: absolute;
bottom: 0;
width: 100%;
}
.coms-top {
height: 280px;
padding: 0 25px;
overflow: auto;
box-shadow: 0 0 5px #ccc;
}
.coms-btm {
margin-top: 20px;
padding: 0 10px;
}
.coms-content {
background: rgba(19, 172, 196, 0.1);
}
.sub {
position: absolute;
right: 20px;
bottom: 20px;
}
</style>

324
src/views/Activity/Activity.vue

@ -0,0 +1,324 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<div class="inner">
<div class="search-list">
<span>
<a-checkbox :checked="sta.ly === 1" @click="cSta('ly')">路演</a-checkbox>
<a-checkbox :checked="sta.jz === 1" @click="cSta('jz')">讲座</a-checkbox>
<a-checkbox :checked="sta.sl === 1" @click="cSta('sl')">沙龙</a-checkbox>
</span>
<a-input-search @search="getData" class="search" enter-button="搜索" placeholder="请输入..." style="width: 381px" v-model="iptCon" />
</div>
<div class="policy-box">
<div :key="index" class="policy-list" v-for="(item, index) in lists">
<div @click="jumpDetails(item)" class="date-box pointer" v-if="item.releaseTime">
<!-- <p class="date-mon">{{ monthEnglish[item.releaseTime.split('-')[1] - 1] }}.</p>
<p class="date-day">{{ item.releaseTime.split(' ')[0].split('-')[2] }}</p> -->
<a-icon type="notification" class="pol-icon" />
</div>
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p>
<p @click="jumpDetails(item)" class="item-content pointer">{{ item.content }}</p>
<p class="source-time">
<span class="source">
时间{{ item.releaseTime }}
<span v-if="item.closeTime">-{{ item.closeTime }}</span>
</span>
<span class="source">地点{{ item.address }}</span>
</p>
<p class="original">
<a-button disabled v-if="item.releaseTime && Date.parse(item.releaseTime) < Date.parse(nowData)">报名已结束</a-button>
<enroll :act-name="item.title" :activity-id="item.activityId" v-else />
</p>
</div>
</div>
<a-pagination
:current="actCurrent"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 5"
/>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { front } from 'config/api';
import Enroll from './components/Enroll.vue';
export default {
name: 'Activity',
components: { Enroll },
data() {
return {
str: '这是活动公告界面',
total: 0,
pageSize: 5,
iptCon: '',
sta: {
ly: 0,
jz: 0,
sl: 0,
},
aList: [],
lists: [],
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'],
nowData: '',
};
},
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']),
created() {
this.iptCon = this.actIpCon;
this.aList = this.actList;
for (var i = 0; i < this.aList.length; i++) {
if (this.aList[i] === 0) {
this.sta.ly = 1;
}
if (this.aList[i] === 1) {
this.sta.jz = 1;
}
if (this.aList[i] === 2) {
this.sta.sl = 1;
}
}
this.getData();
//
var aData = new Date();
console.log(aData); //Wed Aug 21 2019 10:00:58 GMT+0800 ()
this.nowData =
aData.getFullYear() +
'-' +
(aData.getMonth() + 1) +
'-' +
aData.getDate() +
' ' +
aData.getHours() +
':' +
aData.getMinutes() +
':' +
aData.getSeconds();
console.log(this.nowData); //2019-8-20
},
methods: {
...mapMutations('home', ['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']),
//
async getData() {
try {
this.setActIpCon(this.iptCon);
const params = {
param: {
activityType: this.actList,
pageNum: this.actCurrent,
pageSize: 5,
titleKey: this.iptCon,
},
};
const res = await front(params);
const { data, msg, code } = res.data;
if (code === 200) {
this.lists = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
cSta(index) {
this.aList = [];
if (this.sta[index] === 0) {
this.sta[index] = 1;
console.log(this.sta);
} else {
this.sta[index] = 0;
console.log(this.sta);
}
if (this.sta.ly === 1) {
this.aList = this.aList.concat(0);
}
if (this.sta.jz === 1) {
this.aList = this.aList.concat(1);
}
if (this.sta.sl === 1) {
this.aList = this.aList.concat(2);
}
this.setActList(this.aList);
this.getData();
},
//
onShowSizeChange(current, size) {
this.setActCurrent(current);
this.getData();
},
//
jumpDetails(item) {
this.setActDetail(item);
this.$router.push('/ActDetails');
},
//
formatDate() {
var date = new Date('2020-04-07 18:08:58');
//
var time1 = date.getTime();
var time2 = date.valueOf();
var time3 = Date.parse(date);
console.log(time1); //1586254138000
console.log(time2); //1586254138000
console.log(time3); //1586254138000
},
},
};
</script>
<style scoped lang="stylus">
.inner {
margin: 40px auto;
}
.search-list {
height: 72px;
line-height: 72px;
position: relative;
padding-left: 24px;
background: #fff;
}
.search {
position: absolute;
right: 24px;
top: 20px;
}
.policy-box {
.policy-list {
position: relative;
width: 100%;
height: 238px;
overflow: hidden;
background: #fff;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
margin-top: 24px;
padding: 25px;
}
}
.item-title {
margin-left: 200px;
overflow: hidden;
display: -webkit-box;
font-size: 24px;
color: rgba(0, 0, 0, 0.65);
font-family: Microsoft YaHei;
font-weight: bold;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.item-content {
margin-left: 200px;
text-indent: 2em;
font-size: 16px;
line-height: 36px;
color: rgba(0, 0, 0, 0.35);
font-family: Microsoft YaHei;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.source {
cursor: pointer;
font-family: Microsoft YaHei;
font-weight: 400;
opacity: 1;
margin-right: 24px;
}
.time {
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.25);
opacity: 1;
}
.original {
position: absolute;
right: 25px;
bottom: 25px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
opacity: 1;
margin-bottom: 0;
span {
cursor: pointer;
}
}
.date-box {
height: 188px !important;
width: 188px !important;
position: absolute !important;
top: 0 !important;
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
text-align: center;
box-shadow: none !important;
padding: 40px;
margin-top: 24px;
}
.date-mon {
font-size: 40px;
height: 40px;
line-height: 40px;
font-weight: 500;
color: #13ACC4;
}
.date-day {
font-size: 70px;
height: 80px;
line-height: 80px;
font-weight: bold;
color: #13ACC4;
}
.source-time {
margin-left: 200px;
position: absolute;
bottom: 26px;
margin-bottom: 0;
}
.pagination {
margin-top: 68px;
text-align: right;
}
.pol-icon {
height: 108px;
line-height: 108px;
width: 108px;
text-align: center;
border-radius: 50%;
background: rgba(231, 120, 22, 0.9);
color: white;
font-size: 50px;
}
</style>

321
src/views/Activity/components/Enroll.vue

@ -0,0 +1,321 @@
<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>

95
src/views/Business/Business.vue

@ -0,0 +1,95 @@
<template>
<div>
<rotation />
<div class="inner content-box" style="margin-top: 50px; margin-bottom: 50px">
<div :key="index" v-for="(item, index) in list">
<div class="d-flex justify-space-between" v-if="index % 2 === 0">
<div class="introduce-box" style="width: 50% !important">
<p class="introduce-title">{{ item.title }}</p>
<p class="introduce-content">{{ item.content }}</p>
</div>
<img />
<video width="50%" :poster="item.imgUrl" controls>
<source src="https://www.sxwikionline.com/greenvalley/01.mp4" type="video/mp4" />
<source src="https://www.sxwikionline.com/greenvalley/01.mp4" type="video/ogg" />
</video>
</div>
<div class="d-flex justify-space-between" v-else>
<video width="50%" :poster="item.imgUrl" controls>
<source src="https://www.sxwikionline.com/greenvalley/02.mp4" type="video/mp4" />
<source src="https://www.sxwikionline.com/greenvalley/02.mp4" type="video/ogg" />
</video>
<div class="introduce-box" style="width: 50% !important">
<p class="introduce-title">{{ item.title }}</p>
<p class="introduce-content">{{ item.content }}</p>
</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 > 2"
/>
</div>
</div>
</template>
<script>
import Rotation from 'components/Rotation/Rotation.vue';
export default {
name: 'Introduce',
components: { Rotation },
data() {
return {
title: '关于我们-公司介绍',
arr: [
{ name: '关于我们', url: '/About/Introduce' },
{ name: '公司介绍', url: '' },
],
list: [
{
title: '山西维基智汇科技有限公司',
content:
'研究院的介绍包含研究院,公司架构,和各中心的介绍。' +
'各中心介绍包含科创体系与科创能力咨询服务中心、知识产权与技术转移咨询服务中心、' +
'数字化转型咨询服务中心、科技信息咨询服务中心、科创战略协同研究中心、' +
'山西奥依工业设计咨询服务中心;研究院的介绍包含研究院,公司架构,和各中心的介绍。',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/86d502b304944e0c849bff8dcf55ac08.jpg',
videoUr: 'https://www.sxwikionline.com/greenvalley/01.mp4',
},
{
title: '山西维基智汇科技有限公司',
content:
'各中心介绍包含科创体系与科创能力咨询服务中心、' +
'知识产权与技术转移咨询服务中心、数字化转型咨询服务中心、科技信息咨询服务中心、' +
'科创战略协同研究中心、山西奥依工业设计咨询服务中心',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/4f9b898da25e48d3b73b47345ed14a9a.jpg',
videoUr: 'https://www.sxwikionline.com/greenvalley/02.mp4',
},
],
current: 1,
pageSize: 2,
total: 10,
};
},
methods: {
onShowSizeChange(current, size) {
console.log(current, size);
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.pagination {
margin-top: 48px;
text-align: right;
}
</style>

31
src/views/Challenge/Challenge.vue

@ -0,0 +1,31 @@
<!--
* @Author: wally
* @email: 18603454788@163.com
* @Date: 2021-01-14 12:20:06
* @LastEditors: wally
* @LastEditTime: 2021-01-14 12:29:14
-->
<template>
<div class="inner" style="margin-top: 50px; margin-bottom: 100px">
<left-nav style="float: left" />
<div style="width: 83%; float: right">
<router-view></router-view>
</div>
</div>
</template>
<script>
import LeftNav from './components/LeftNav.vue';
export default {
name: 'Challenge',
components: { LeftNav },
data() {
return {
title: '创新挑战',
arr: [{ name: '创新挑战', url: '' }],
};
},
};
</script>
<style scoped lang="stylus"></style>

215
src/views/Challenge/Children/Notice.vue

@ -0,0 +1,215 @@
<template>
<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="d-flex flex-wrap">
<div :class="(index + 1) % 3 === 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>
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 6"
/>
</div>
</div>
</template>
<script>
export default {
name: 'Notice',
data() {
return {
str: '发布界面',
title: '结果公告',
typeOfPlatform: '创新挑战',
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',
},
],
};
},
methods: {
choose(index) {
const that = this;
// that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
// for (let i = 0; i < list.length; i++) {
// if (list[i].isActive) {
// this.achList.push(list[i].id);
// }
// }
// this.setAchList(this.achList);
},
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
margin-bottom: 40px;
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: 26%;
margin-right: 11%;
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>

223
src/views/Challenge/Children/Release.vue

@ -0,0 +1,223 @@
<template>
<div>
<div class="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>
<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>
export default {
name: 'Release',
data() {
return {
title: '项目发布',
typeOfPlatform: '创新挑战',
arr: [
{ name: '创新挑战', url: '/Challenge/Solicitation' },
{ name: '项目发布', url: '' },
],
str: '发布界面',
current: 1,
pageSize: 8,
total: 10,
list: [
{
id: 1,
name: '功能食品',
isActive: false,
},
{
id: 2,
name: '生物医药',
isActive: false,
},
{
id: 3,
name: '大健康',
isActive: false,
},
],
lists: [
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
],
};
},
methods: {
choose(index) {
const that = this;
// that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
// for (let i = 0; i < list.length; i++) {
// if (list[i].isActive) {
// this.achList.push(list[i].id);
// }
// }
// this.setAchList(this.achList);
},
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto;
line-height: 44px;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
.margin-0 {
margin-right: 0% !important;
}
.pro-box {
width: 20.5%;
margin-right: 6%;
height: 300px;
background: #FFFFFF;
padding: 24px 20px;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
position: relative;
margin-bottom: 20px;
opacity: 1;
}
.pro-title {
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
}
.pro-content {
font-size: 16px;
overflow: hidden;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 24px;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
}
.pro-time {
position: absolute;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
color: rgba(0, 0, 0, 0.45);
opacity: 1;
bottom: 60px;
}
.pro-btn {
position: absolute;
bottom: 24px;
width: 100px;
}
</style>

73
src/views/Challenge/Children/Solicitation.vue

@ -0,0 +1,73 @@
<template>
<div class="white">
<div class="words-content">
<p class="words-title">需求征集</p>
<p class="con-con">
研究院的介绍包含研究院公司架构和各中心的介绍各中心介绍包含科创体系与科创能力咨询服务中心
知识产权与技术转移咨询服务中心数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心
山西奥依工业设计咨询服务中心研究院的介绍包含研究院公司架构和各中心的介绍
各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心数字化转型咨询服务中心
科技信息咨询服务中心科创战略协同研究中心山西奥依工业设计咨询服务中心
</p>
<p class="words-title">征集流程</p>
<p class="con-con">
研究院的介绍包含研究院公司架构和各中心的介绍各中心介绍包含科创体系与科创能力咨询服务中心
知识产权与技术转移咨询服务中心数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心
山西奥依工业设计咨询服务中心研究院的介绍包含研究院公司架构和各中心的介绍
各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心数字化转型咨询服务中心
科技信息咨询服务中心科创战略协同研究中心山西奥依工业设计咨询服务中心
研究院的介绍包含研究院公司架构和各中心的介绍各中心介绍包含科创体系与科创能力咨询服务中心
知识产权与技术转移咨询服务中心数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心
山西奥依工业设计咨询服务中心研究院的介绍包含研究院公司架构和各中心的介绍
各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心数字化转型咨询服务中心
科技信息咨询服务中心科创战略协同研究中心山西奥依工业设计咨询服务中心
研究院的介绍包含研究院公司架构和各中心的介绍各中心介绍包含科创体系与科创能力咨询服务中心
知识产权与技术转移咨询服务中心数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心
山西奥依工业设计咨询服务中心研究院的介绍包含研究院公司架构和各中心的介绍
各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心数字化转型咨询服务中心
科技信息咨询服务中心科创战略协同研究中心山西奥依工业设计咨询服务中心
</p>
</div>
<a-button type="primary" class="btn">我要发榜</a-button>
</div>
</template>
<script>
export default {
name: 'Solicitation',
data() {
return {
title: '需求征集',
typeOfPlatform: '创新挑战',
arr: [
{ name: '创新挑战', url: '/Challenge/Solicitation' },
{ name: '需求征集', url: '' },
],
};
},
};
</script>
<style lang="stylus" scoped>
.white {
padding: 40px 25px 100px 25px;
position: relative;
}
.words-title {
font-size: 20px;
font-weight: bold;
color: rgba(0, 0, 0, 0.85);
text-align: center;
margin-bottom: 40px;
}
.con-con {
margin-bottom: 40px;
}
.btn {
position: absolute;
right: 25px;
}
</style>

54
src/views/Challenge/components/LeftNav.vue

@ -0,0 +1,54 @@
<template>
<div class="nav-box">
<div :class="activeNum === index ? 'nav-box-active' : ''" :key="index" @click="jump(item.url, index)" v-for="(item, index) in list">
{{ item.title }}
</div>
</div>
</template>
<script>
export default {
name: 'LeftNav',
data() {
return {
str: '创新挑战导航条',
activeNum: 0,
list: [
{
title: '需求征集',
url: '/Challenge/Solicitation',
},
{
title: '项目发布',
url: '/Challenge/Release',
},
{
title: '结果公示',
url: '/Challenge/Notice',
},
],
};
},
created() {
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, index) {
if (this.$route.fullPath === url) {
this.$message.success('已在当前界面');
} else {
this.$router.push(url);
this.activeNum = index;
}
},
},
};
</script>
<style scoped lang="stylus"></style>

85
src/views/Develop/Develop.vue

@ -0,0 +1,85 @@
<template>
<div>
<rotation />
<div class="inner" style="padding: 0 25px; position: relative; padding-bottom: 50px">
<p class="dev-title">数智开发界面</p>
<p class="dev-content">
研究院的介绍包含研究院公司架构和各中心的介绍 各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心
数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心
山西奥依工业设计咨询服务中心研究院的介绍包含研究院公司架构和各中心的介绍
各中心介绍包含科创体系与科创能力咨询服务中心知识产权与技术转移咨询服务中心
数字化转型咨询服务中心科技信息咨询服务中心科创战略协同研究中心山西奥依工业设计咨询服务中心
</p>
<a-button type="primary" class="dev-btn">项目合作</a-button>
</div>
<div class="inner dev-img-box d-flex flex-wrap" style="margin-top: 40px !important; margin-bottom: 40px !important">
<div v-for="(item, index) in lists" :key="index" class="d-flex" style="width: 50%">
<img :src="item" style="width: 100%; cursor: pointer" @click="showProfile = true" />
</div>
</div>
<a-modal width="50%" :footer="null" title="XX项目介绍" :visible="showProfile" @cancel="handleCancel" @ok="handleCancel">
<p>
公司采取理事会经理层事业部组织架构公司理事会组成按理事会章程执行经理层设总经理 1 副总经理 2-3 各事业部设部长 1
副部长 1
公司以协同创新中心为引擎以创业孵化平台为基石以产业集聚发展为导向基于创新链孵化链和产业链进行整体布局下设行政事业部创新事业部孵化事业部和产业事业部
行政事业部统筹行政办公人力资源财务管理公共关系和数字平台建设等工作组织编制发展战略和 年度计划;组织开展绩效考评;
协同推进创新孵化和产业事 业部联合协作及全链条一体化融通发展
创新事业部负责功能食品与生物医药协同创新中心的建设和运营集聚整合股东及外部优势创新资源着力打造产学研用协同多学科交叉融合
覆盖全创新链的开放式协同创新平台搭建专业化科技资源开放共享服务平台和技术转移转化平台面向入孵企业及外部企业需求组织开展技术研发
技术转化技术咨询技术评估技术培训检验检测等一站式创新服务
孵化事业部负责功能食品与生物医药专业化众创空间的建设和运营构建众创空间一孵化器一加速器-产业园专业化创新创业孵化链
打造以公共研发与检验检测平台为支撑以创新创业增值服务为主导以创新创业学院(大讲堂)为带动以创新创业投融资为拓展线上线下相结合
实体虚拟相融合的全要素专业化开放式创新创业孵化平台促进技术转移转化和科技型中小微企业集聚发展
产业事业部负责产业发展市场开发和产业技术创新战略联盟的建设与运营基于协同创新中心和专业化众创空间发挥股东场所
技术资本市场渠道和产业化优势推动政产学研金介用合作组织举办技术创新论坛
构建专业化集群化园区化产业发展布局培育发展衍生企业 拓展发展领域和空间打造产业园区和特色产业基地
推动大中小企业融通产业集群化园区化发展
</p>
</a-modal>
</div>
</template>
<script>
import Rotation from 'components/Rotation/Rotation.vue';
export default {
name: 'Activity',
components: { Rotation },
data() {
return {
lists: [
'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210114/f8d1790b78ca4afca3cfb15e350a53ef.jpg',
'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210114/0b883954d7ae4fd1a74be0c7943a3e52.jpg',
'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210114/e92c71d276dd4689a43c643472762c12.jpg',
'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210114/bc60bf21daa6431b9dcf3c575121dabd.jpg',
],
showProfile: false,
};
},
methods: {
handleCancel() {
this.showProfile = false;
},
},
};
</script>
<style scoped lang="stylus">
.dev-title {
margin: 50px 0 !important;
font-size: 30px;
font-weight: bold;
color: #000;
}
.dev-content {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
}
.dev-btn {
position: absolute;
right: 25px;
}
</style>

14
src/views/FirstPage/FirstPage.vue

@ -38,19 +38,12 @@
</div>
</div>
<!-- 行业资讯 -->
<div class="d-flex flex-column" style="margin-top:60px">
<div class="d-flex flex-column" style="margin-top: 60px">
<div class="new-title base-bg font-bold-30 white--text">行业资讯</div>
<div class="py-8 white">
<div
:key="index"
class="font-20 d-flex flex-nowrap justify-start px-10 py-4"
v-for="(list,index) in lists"
>
<div :key="index" class="font-20 d-flex flex-nowrap justify-start px-10 py-4" v-for="(list, index) in lists">
<div class="textColor new-txt">{{ list.title }}</div>
<div
class="secondary new-time"
v-if="list.time"
>{{ $moment(+list.time).format('YYYY-MM-DD') }}</div>
<div class="secondary new-time" v-if="list.time">{{ $moment(+list.time).format('YYYY-MM-DD') }}</div>
</div>
</div>
</div>
@ -72,6 +65,7 @@ export default {
components: { Rotation },
data() {
return {
str: '',
lists: [],
};
},

176
src/views/Study/StuDetails.vue

@ -0,0 +1,176 @@
<template>
<div class="box">
<div>
<div class="policy-title">
<span>{{ postDetail.title }}</span>
</div>
<div class="policy-info">
<span>
时间
<span>{{ postDetail.createdTime }}</span>
</span>
<span style="margin-left: 60px"> 地点太原 </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: 2em" v-for="(item, index) in coms">
<p style="color: #999">
<a-avatar :size="30" :src="item.avatarUrl" alt style="margin-top: -4px; margin-right: 4px" />
<span style="margin-right: 10px">{{ item.userName }}</span>
<span class="coms-content">{{ item.content }}{{ item.content }}{{ item.content }}</span>
</p>
</div>
</div>
<div class="coms-btm">
<a-textarea placeholder="请输入内容..." 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: 'StuDetails',
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: left;
display: flex;
align-items: center;
justify-content: left;
padding: 0 25px;
}
.policy-info {
position: absolute;
height: 76px;
line-height: 76px;
right: 25px;
bottom: 500px;
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>

255
src/views/Study/Study.vue

@ -0,0 +1,255 @@
<!--
Copyright (c) 2020.
author: bin
email: binbin0314@126.com
-->
<template>
<div class="inner">
<div class="search-list">
<a-input-search
@search="searchData"
class="search"
enter-button="搜索"
placeholder="请输入..."
style="width: 381px"
v-model="iptCon"
/>
</div>
<div :key="index" class="post" v-for="(item, index) in lists">
<div class="d-flex flex-nowrap">
<img :src="item.visitLocation" alt class="post-img" v-if="item.visitLocation" />
<div>
<div class="post-content">
<p class="post-title">{{ item.title }}</p>
<div class="con-con" v-dompurify-html="item.content"></div>
</div>
<p style="color: rgba(0, 0, 0, 0.45); line-height: 30px; margin: 0 0 0 30px !important; margin-left: 0 !important">
<span>{{ item.createdTime }}</span>
<span style="margin-left: 20px"> 地点太原 </span>
</p>
</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: 'Study',
// 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('/StuDetails');
},
// 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();
},
},
};
</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;
}
.search {
position: absolute;
right: 0;
top: 20px;
}
.btn {
width: 75px;
height: 32px;
position: absolute;
right: 25px;
top: 20px;
}
.post {
width: 100%;
padding: 25px;
position: relative;
overflow: hidden;
height: 270px;
background: #fff;
border-bottom: 1px solid #ccc;
transition: all 0.25s;
}
.post-img {
width: 233px;
height: 100%;
border: none !important;
margin-right: 30px;
}
.post-content {
// margin-left: 30px;
overflow: hidden;
height: 180px;
text-indent: left;
}
.con-con {
max-height: 130px;
display: -webkit-box;
-webkit-line-clamp: 4;
-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;
margin: 0 20px;
}
</style>
Loading…
Cancel
Save