Browse Source

first commit

master
lucky 5 years ago
parent
commit
27ab958385
  1. 162
      package-lock.json
  2. 4
      src/App.vue
  3. 32
      src/components/BreadCrumb/BreadCrumb.vue
  4. 65
      src/components/CoreOrgan/CoreOrgan.vue
  5. 28
      src/components/FooterPage/FriendShip.vue
  6. 141
      src/components/HeadNav/HeadNav.vue
  7. 148
      src/components/Index/IndexNewList.vue
  8. 140
      src/components/Introduce/AddShopping.vue
  9. 38
      src/components/Introduce/CompanyProfile.vue
  10. 132
      src/components/Introduce/DeriveEnterprise.vue
  11. 308
      src/components/Introduce/IntentionModel.vue
  12. 81
      src/components/Introduce/PartnerShip.styl
  13. 97
      src/components/Introduce/PartnerShip.vue
  14. 132
      src/components/PlatformList/Fruit.vue
  15. 238
      src/components/PlatformList/PlatformList.vue
  16. 263
      src/router/index.js
  17. 16
      src/views/About/About.vue
  18. 53
      src/views/About/Children/Introduce.vue
  19. 42
      src/views/About/Children/Organ.vue
  20. 39
      src/views/About/Children/Partner.vue
  21. 39
      src/views/About/Children/SpinOffs.vue
  22. 62
      src/views/About/components/HNav.vue
  23. 123
      src/views/Activity/ActDetails.vue
  24. 326
      src/views/Activity/Activity.vue
  25. 323
      src/views/Activity/components/Enroll.vue
  26. 23
      src/views/Cart/Cart.vue
  27. 13
      src/views/Challenge/Challenge.vue
  28. 240
      src/views/Challenge/Children/Notice.vue
  29. 249
      src/views/Challenge/Children/Release.vue
  30. 71
      src/views/Challenge/Children/Solicitation.vue
  31. 54
      src/views/Challenge/components/HNav.vue
  32. 193
      src/views/Community/ComDetails.vue
  33. 268
      src/views/Community/Community.vue
  34. 142
      src/views/Community/Posting.vue
  35. 4
      src/views/ContactUs/ContactUs.vue
  36. 200
      src/views/FirstPage/FirstPage.vue
  37. 47
      src/views/IncubationPlatform/Children/Incubator.vue
  38. 120
      src/views/IncubationPlatform/Children/MakerSpace.vue
  39. 39
      src/views/IncubationPlatform/Children/Partner.vue
  40. 44
      src/views/IncubationPlatform/Children/PilotBase.vue
  41. 168
      src/views/IncubationPlatform/Children/Products.vue
  42. 44
      src/views/IncubationPlatform/Children/PublicLaboratory.vue
  43. 140
      src/views/IncubationPlatform/Children/Services.vue
  44. 97
      src/views/IncubationPlatform/Children/Tutor.vue
  45. 57
      src/views/IncubationPlatform/Children/components/SenNav.vue
  46. 274
      src/views/IncubationPlatform/Children/place/EntitySpace.vue
  47. 228
      src/views/IncubationPlatform/Children/place/VirtualSpace.vue
  48. 14
      src/views/IncubationPlatform/IncubationPlatform.vue
  49. 292
      src/views/IncubationPlatform/components/AddModel.vue
  50. 68
      src/views/IncubationPlatform/components/HNav.vue
  51. 37
      src/views/Industry/Children/Enterprise.vue
  52. 121
      src/views/Industry/Children/Serve.vue
  53. 184
      src/views/Industry/Children/Union.vue
  54. 54
      src/views/Industry/Children/components/HNav.vue
  55. 14
      src/views/Industry/Industry.vue
  56. 213
      src/views/ItInformation/ItInformation.vue
  57. 41
      src/views/Knowledge/Knowledge.vue
  58. 171
      src/views/NewPlatform/Children/AchDet.vue
  59. 171
      src/views/NewPlatform/Children/Core.vue
  60. 46
      src/views/NewPlatform/Children/Develop.vue
  61. 85
      src/views/NewPlatform/Children/Platform.vue
  62. 122
      src/views/NewPlatform/Children/Service.vue
  63. 108
      src/views/NewPlatform/Children/ServiceDet.vue
  64. 231
      src/views/NewPlatform/Children/Share.vue
  65. 206
      src/views/NewPlatform/Children/ShareChild/InsDet.vue
  66. 233
      src/views/NewPlatform/Children/ShareChild/Institute.vue
  67. 150
      src/views/NewPlatform/Children/Transfer.vue
  68. 151
      src/views/NewPlatform/Children/components/DeEnt.vue
  69. 57
      src/views/NewPlatform/Children/components/SenNav.vue
  70. 27
      src/views/NewPlatform/NewPlatform.vue
  71. 59
      src/views/NewPlatform/components/HNav.vue
  72. 218
      src/views/NewPlatform/components/NewModel.vue
  73. 231
      src/views/NewPlatform/components/myTransition.vue
  74. 40
      src/views/Policy/Policy.vue
  75. 107
      src/views/Policy/PolicyDetails.vue
  76. 305
      src/views/Policy/components/PolicyList.vue

162
package-lock.json

@ -1808,16 +1808,6 @@
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"dev": true "dev": true
}, },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"cacache": { "cacache": {
"version": "13.0.1", "version": "13.0.1",
"resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594427999421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz", "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594427999421&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
@ -1850,34 +1840,6 @@
"integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
"dev": true "dev": true
}, },
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"css-loader": { "css-loader": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1604507107408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz", "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1604507107408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
@ -1931,13 +1893,6 @@
"universalify": "^0.1.0" "universalify": "^0.1.0"
} }
}, },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"icss-utils": { "icss-utils": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1602527330977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz", "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1602527330977&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
@ -2052,16 +2007,6 @@
"minipass": "^3.1.1" "minipass": "^3.1.1"
} }
}, },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"terser-webpack-plugin": { "terser-webpack-plugin": {
"version": "2.3.8", "version": "2.3.8",
"resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1603881757308&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz", "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1603881757308&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
@ -2078,32 +2023,6 @@
"terser": "^4.6.12", "terser": "^4.6.12",
"webpack-sources": "^1.4.3" "webpack-sources": "^1.4.3"
} }
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.2",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
}
}
} }
} }
}, },
@ -12738,6 +12657,87 @@
} }
} }
}, },
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.2",
"resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-16.1.2.tgz?cache=0&sync_timestamp=1608188050165&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-16.1.2.tgz",
"integrity": "sha1-XAO2xQ0qX5g8fOuhXFDXjKKymPQ=",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792302448&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
"integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz",
"integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
"integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
"integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
"integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-2.0.0.tgz",
"integrity": "sha1-5MrOW4FtQloWa18JfhDNErNgZLA=",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz",
"integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-quill-editor": { "vue-quill-editor": {
"version": "3.0.6", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz", "resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",

4
src/App.vue

@ -3,7 +3,6 @@
<div id="app"> <div id="app">
<head-nav class="head-nav" /> <head-nav class="head-nav" />
<router-view></router-view> <router-view></router-view>
<friend-ship class="friend" />
<footer-page class="footer" /> <footer-page class="footer" />
<div id="components-back-top-demo-custom"> <div id="components-back-top-demo-custom">
<a-back-top> <a-back-top>
@ -19,11 +18,10 @@ import { mapState, mapActions, mapMutations } from 'vuex';
import zh_CN from 'ant-design-vue/lib/locale-provider/zh_CN'; import zh_CN from 'ant-design-vue/lib/locale-provider/zh_CN';
import HeadNav from './components/HeadNav/HeadNav.vue'; import HeadNav from './components/HeadNav/HeadNav.vue';
import FooterPage from './components/FooterPage/FooterPage.vue'; import FooterPage from './components/FooterPage/FooterPage.vue';
import FriendShip from './components/FooterPage/FriendShip.vue';
export default { export default {
name: 'App', name: 'App',
components: { HeadNav, FooterPage, FriendShip }, components: { HeadNav, FooterPage },
data() { data() {
return { zh_CN }; return { zh_CN };
}, },

32
src/components/BreadCrumb/BreadCrumb.vue

@ -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>

65
src/components/CoreOrgan/CoreOrgan.vue

@ -1,65 +0,0 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<div>
<div class="words-content">
<span class="font-16 white line-height-36" v-dompurify-html="content"></span>
</div>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import { getPageDetail } from 'config/api';
export default {
name: 'RichText',
props: {
title: {
type: String,
default: '',
},
},
data() {
return { content: '' };
},
// computed: mapState('home', ['titleCode']),
async created() {
// this.setContent('');
await this.getPageDetail(this.title);
},
methods: {
// ...mapMutations('home', ['setContent']),
// ...mapActions('home', ['getPageDetail']),
async getPageDetail(titleCode) {
try {
const params = {
param: { titleCode },
};
const res = await getPageDetail(params);
const { code, msg, data } = res.data;
if (code === 200) {
if (data && data.length > 0 && data[0] && data[0].length > 0 && data[0][0].detail) {
this.content = data[0][0].detail.content;
}
} else {
message.error(msg || '查询失败');
throw msg;
}
} catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`);
console.log(error);
}
},
},
};
</script>

28
src/components/FooterPage/FriendShip.vue

@ -1,28 +0,0 @@
<template>
<div class="friend">
<div class="inner">
{{ str }}
<span :key="index" class="mx-2" v-for="(list,index) in lists">{{ list }}</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
str: '友情链接:',
lists: ['科技部', '发改委', '工信部', '太原市综改区', '山西省科技厅', '山西省工信厅', '山西省发改委', '太原市科技厅', '太原市发改委'],
};
},
};
</script>
<style lang="stylus" scoped>
.friend {
line-height: 64px;
background: #fff;
font-size: 12px;
color: rgba(0, 0, 0, 0.65);
}
</style>

141
src/components/HeadNav/HeadNav.vue

@ -3,14 +3,14 @@
<img @click="jumUrl('/')" alt class="logo-img" src="@/assets/logo.png" style="cursor: pointer" /> <img @click="jumUrl('/')" alt class="logo-img" src="@/assets/logo.png" style="cursor: pointer" />
<div class="flex-1 ml-8"> <div class="flex-1 ml-8">
<a-dropdown <a-dropdown
:disabled="item.children.length > 0 ? false : true" :disabled="item.children && item.children.length > 0 ? false : true"
:key="a" :key="a"
class="list-down" class="list-down"
v-for="(item, a) in list" v-for="(item, a) in list"
> >
<a @click="jumUrl(item.url)" class="ant-dropdown-link"> <a @click="jumUrl(item.url)" class="ant-dropdown-link">
{{ item.name }}&nbsp;&nbsp; {{ item.name }}&nbsp;&nbsp;
<a-icon type="down" v-show="item.children.length > 0" /> <a-icon type="down" v-show="item.children && item.children.length > 0" />
</a> </a>
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item <a-menu-item
@ -51,138 +51,115 @@ export default {
str: '这是头部导航', str: '这是头部导航',
list: [ list: [
{ {
name: '关于我们', name: '创新政策',
url: '/About/Introduce', url: '',
},
{
name: '服务超市',
url: '',
children: [ children: [
{ {
title: '公司介绍', title: '智慧创新研究院',
url: '/About/Introduce', url: '',
}, },
{ {
title: '组织机构', title: '科技创新服务',
url: '/About/Organ', url: '',
}, },
{ {
title: '合作伙伴', title: '合作伙伴',
url: '/About/Partner', url: '',
},
{
title: '衍生企业',
url: '/About/SpinOffs',
}, },
], ],
}, },
{ {
name: '创新政策', name: '孵化平台',
children: [], url: '',
url: '/Policy',
},
{
name: '创新平台',
children: [ children: [
{ {
title: '协同创新中心', title: '高新众创空间',
url: '/NewPlatform/NewCore', url: '',
}, },
{ {
title: '创新资源平台', title: '数字创时代企业孵化器',
url: '/NewPlatform/News', url: '',
}, },
{ {
title: '创新服务', title: '虚拟孵化器',
url: '/NewPlatform/NewService', url: '',
},
],
url: '/NewPlatform/NewCore',
}, },
{ {
name: '孵化平台', title: '创业导师',
url: '/IncubationPlatform/MakerSpace', url: '',
children: [ },
{ {
title: '众创空间', title: '合作伙伴',
url: '/IncubationPlatform/MakerSpace', url: '',
}, },
// {
// title: '',
// url: '/IncubationPlatform/PublicLaboratory',
// },
// {
// title: '',
// url: '/IncubationPlatform/PilotBase',
// },
// {
// title: '',
// url: '/IncubationPlatform/Tutor',
// },
// {
// title: '',
// url: '/IncubationPlatform/Partner',
// },
{ {
title: '创业服务', title: '创业服务',
url: '/IncubationPlatform/Services', url: '',
},
],
}, },
{ {
title: '产品展示', name: '数智开发',
url: '/IncubationPlatform/Products', url: '',
}, },
], {
name: '双创活动',
url: '',
}, },
{ {
name: '产业平台', name: '创新挑战',
url: '',
children: [ children: [
{ {
title: '产业创新联盟', title: '需求征集',
url: '/Industry/Union', url: '',
}, },
{ {
title: '产业服务', title: '项目发布',
url: '/Industry/Serve', url: '',
}, },
{ {
title: '衍生企业', title: '结果公示',
url: '/Industry/Enterprise', url: '',
}, },
], ],
url: '/Industry/Union',
}, },
{ {
name: '知识平台', name: '创业学院',
children: [], url: '',
url: '/Knowledge',
}, },
{ {
name: '活动公告', name: '学习平台',
children: [], url: '',
url: '/Activity',
}, },
{ {
name: '创新挑战', name: '关于我们',
url: '',
children: [ children: [
{ {
title: '需求征集', title: '公司介绍',
url: '/Challenge/Solicitation', url: '',
}, },
{ {
title: '项目发布', title: '组织机构',
url: '/Challenge/Release', url: '',
}, },
{ {
title: '结果公告', title: '合作伙伴',
url: '/Challenge/Notice', url: '',
},
],
url: '/Challenge/Solicitation',
}, },
{ {
name: '交流社区', title: '生态企业',
children: [], url: '',
url: '/Community', },
],
}, },
{ {
name: '联系我们', name: '联系我们',
children: [],
url: '/ContactUs', url: '/ContactUs',
}, },
], ],

148
src/components/Index/IndexNewList.vue

@ -1,148 +0,0 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<div class="index-wrap">
<div class="d-flex flex-nowrap align-center baseColor" v-if="i === 0">
<span class="font-bold-24">行业资讯</span>
<img class="bullhorn ml-4" src="@/assets/bullhorn.png" />
<div class="flex-1"></div>
<a-button
@click="$router.push('/ItInformation')"
class="d-flex align-end font-16 baseColor pa-0"
style="display: inline-block;"
type="link"
>
more
<a-icon style="font-size:12px" type="right" />
</a-button>
</div>
<div class="d-flex flex-nowrap align-center baseColor" v-else>
<span class="font-bold-24">活动公告</span>
<img class="bullhorn ml-4" src="@/assets/bullhorn.png" />
<div class="flex-1"></div>
<a-button
@click="$router.push('/Activity')"
class="d-flex align-end font-16 baseColor pa-0"
style="display: inline-block;"
type="link"
>
more
<a-icon style="font-size:12px" type="right" />
</a-button>
</div>
<div class="policy-box" v-if="lists && lists[i].news && lists[i].news.length>0">
<div :key="index" class="div-box" v-for="(item, index) in lists[i].news">
<div @click="jumpDetails(item)" class="d-flex flex-nowrap" style="cursor: pointer">
<div class="time d-flex flex-column align-center mr-5" v-if="item.releaseTime">
<span class="font-20">{{ monthEnglish[item.releaseTime.split('-')[1] - 1] }}.</span>
<span class="font-bold-32 day">{{ item.releaseTime.split(' ')[0].split('-')[2] }}</span>
</div>
<div class="d-flex flex-1 flex-column">
<div class="item-title">{{ item.title }}</div>
<div class="original"></div>
<div class="item-content">{{ item.content }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { front } from 'config/api';
export default {
name: 'IndexNewList',
props: {
i: {
type: Number,
default: 0,
},
lists: {
type: Array,
default: () => [],
},
},
data() {
return { monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'] };
},
methods: {
...mapMutations('home', ['setActDetail']),
//
jumpDetails(item) {
this.setActDetail(item);
this.$router.push('/ActDetails');
},
},
};
</script>
<style scoped lang="stylus">
.index-wrap {
width: 90%;
height: 400px;
margin: 15px auto 15px auto;
overflow: hidden;
opacity: 1;
}
.bullhorn {
width: 25px;
height: 25px;
}
.policy-box {
.div-box {
position: relative;
background: #fff;
padding-top: 24px;
height: 114px;
.time {
color: rgba(0, 0, 0, 0.25);
.day {
position: relative;
top: -15px;
}
}
}
}
.item-title {
overflow: hidden;
display: -webkit-box;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
font-family: Microsoft YaHei;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.original {
position: relative;
top: 1px;
left: 0;
width: 30px;
height: 2px;
background: #13ACC4;
}
.item-content {
overflow: hidden;
display: -webkit-box;
margin-top: 8px;
line-height: 28px;
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
font-family: Microsoft YaHei;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>

140
src/components/Introduce/AddShopping.vue

@ -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>

38
src/components/Introduce/CompanyProfile.vue

@ -1,38 +0,0 @@
<template>
<div>
<a-modal
:footer="null"
:title="profile.title"
:visible="showProfile"
@cancel="handleCancel"
@ok="handleCancel"
>
<p>{{ profile.description }}</p>
</a-modal>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
export default {
props: {
showProfile: {
type: Boolean,
default: false,
},
},
data() {
return { ModalText: 'Content of the modal', };
},
computed: mapState('home', ['profile']),
methods: {
handleCancel(e) {
this.$emit('closeProfile');
},
},
};
</script>

132
src/components/Introduce/DeriveEnterprise.vue

@ -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>

308
src/components/Introduce/IntentionModel.vue

@ -1,308 +0,0 @@
<template>
<div>
<a-button @click="showModal">{{ typeData.type === 1 ? '意向填报' : '直接购买' }}</a-button>
<a-modal
:confirm-loading="confirmLoading"
:title="typeData.type === 1 ? '意向填报' : '产品购买'"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
width="50%"
>
<a-form :form="form">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="公司名称"
>
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系人"
required
>
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系电话"
required
>
<a-input
@change="changePhone"
placeholder="请输入联系电话.."
type="tel"
v-decorator="['tel', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button>
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> -->
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" />
<a-button
class="code_img ml-2"
disabled
type="primary"
v-if="showInterval"
>重新发送 {{ interval }}</a-button>
<a-button
:disabled="platform.isTel === false"
@click="getCode"
class="code_img ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="项目信息简述"
required
>
<a-textarea
placeholder="请输入项目信息简述..."
style="height: 120px"
v-model.trim="platform.describe"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="上传附件"
v-show="typeData.type === 0"
>
<a-upload
:action="action"
:default-file-list="fileList"
@change="fileChange"
list-type="picture"
name="files"
>
<a-button>
<a-icon type="upload" />点击上传附件
</a-button>
</a-upload>
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import { serviceApply, upload } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
export default {
name: 'NewModel',
props: {
typeData: {
type: Object,
default: null,
},
},
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
action: upload,
fileList: [],
visible: false,
formItemLayout,
formTailLayout,
confirmLoading: false,
platform: {
companyName: '', //
manName: '', //
tel: '', //
describe: '', //
code: '', //
files: [], // Id
isTel: false,
},
codeRules: [
{ required: true, message: '请输入验证码' },
{ min: 4, max: 4, message: '请输入4位短信验证码' },
],
codeNum: '',
showInterval: false,
codeTimer: null,
interval: 120, //
phoneRules: [
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' },
],
};
},
computed: mapState('user', ['picCode']),
async created() {
this.sendPicCode();
await this.getUserSer();
if (this.userSer) {
if (this.userSer.name) {
this.platform.manName = this.userSer.name;
}
if (this.userSer.phone) {
this.platform.tel = this.userSer.phone;
}
if (this.userSer.companyName) {
this.platform.companyName = this.userSer.companyName;
}
}
},
methods: {
...mapActions('user', ['sendCode', 'sendPicCode']),
...mapActions('home', ['getUserSer']),
//
showModal() {
this.visible = true;
},
//
handleCancel(e) {
this.visible = false;
},
//
changePhone(e) {
this.platform.tel = e.target.value;
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel);
},
//
handleOk() {
if (!this.platform.manName) {
this.$message.error('请输入联系人');
} else if (!this.platform.tel) {
this.$message.error('请输入联系电话');
} else if (!this.platform.code) {
this.$message.error('请输入验证码');
} else if (!this.platform.describe) {
this.$message.error('请输入项目信息简述');
} else {
if (this.platform.isTel) {
for (var i = 0; i < this.fileList.length; i++) {
this.platform.files = this.platform.files.concat(this.fileList[i].response.data[0].id);
}
this.subMitAdd();
// console.log(this.platform.files);
} else {
this.$message.error('请输入正确的联系电话');
}
}
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
code: this.platform.code,
companyName: this.platform.companyName,
contactName: this.platform.manName,
contactPhone: this.platform.tel,
description: this.platform.describe,
filesId: this.platform.files,
serviceId: this.typeData.Id,
type: this.typeData.type,
},
};
const res = await serviceApply(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('申请成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
this.platform.isTel = false;
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
//
async getCode() {
console.log(111);
try {
const params = {
phone: this.platform.tel,
verificationCodeId: this.picCode.verificationCodeId,
verificationCodeValue: this.codeNum,
};
await this.sendCode(params);
this.getCodeInterval();
} catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`);
console.log(error);
}
},
//
getCodeInterval() {
this.showInterval = true;
this.codeTimer = setInterval(() => {
if (this.interval === 0) {
clearInterval(this.codeTimer);
this.codeTimer = null;
this.showInterval = false;
this.interval = 120;
return;
}
this.interval = this.interval - 1;
}, 1000);
},
//
changePicCode() {
this.sendPicCode();
},
fileChange(info) {
this.fileList = info.fileList;
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
</style>

81
src/components/Introduce/PartnerShip.styl

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

97
src/components/Introduce/PartnerShip.vue

@ -1,97 +0,0 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<div v-if="partners && partners.length > 0">
<div :key="index" class="mb-4" v-for="(item,index) in partners">
<p
class="font-bold-24 title-color"
>{{ item.typeOfTech===0 ? '高校' : item.typeOfTech===1 ? '院所' : '企业' }}</p>
<div
class="d-flex flex-wrap pointer"
v-if="item.backendSearchList && item.backendSearchList.length > 0"
>
<div
:class="(i+1)%4===0? 'logo-box1' : ''"
:key="i"
@click="openProfile(list.name,list.description)"
class="logo-box d-flex flex-column align-center justify-center"
v-for="(list,i) in item.backendSearchList"
>
<div class="logo-pic-box">
<img :src="list.logoUrl" class="logo-pic pa-2" v-if="list.logoUrl" />
<div class="d-flex flex-column justify-center logo-text" v-else>{{ list.name }}</div>
</div>
<div class="font-16 title-color mt-3">{{ list.name }}</div>
</div>
</div>
</div>
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" />
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import CompanyProfile from './CompanyProfile.vue';
export default {
name: 'PartnerShip',
components: { CompanyProfile },
props: {
title: {
type: String,
default: '',
},
typeOfPlatform: {
type: String,
default: '',
},
},
data() {
return { showProfile: false };
},
computed: mapState('home', ['partners', 'profile']),
async created() {
this.setPartners([]);
const { title, typeOfPlatform } = this;
const params = {
param: {
pageNum: 1,
// pageSize: -1,
type: title === '合作伙伴' ? 1 : 2,
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1,
},
};
await this.getFrontSearchCompany(params);
},
methods: {
...mapMutations('home', ['setPartners', 'setProfile']),
...mapActions('home', ['getFrontSearchCompany']),
//
openProfile(title, description) {
this.setProfile(null);
const profile = {
title,
description,
};
this.setProfile(profile);
this.showProfile = true;
},
closeProfile() {
this.showProfile = false;
},
},
};
</script>
<style lang="stylus" scoped>
@import './PartnerShip.styl';
</style>

132
src/components/PlatformList/Fruit.vue

@ -1,132 +0,0 @@
<template>
<div>
<div class="inner d-flex flex-wrap">
<div :class="(index + 1) % 4 === 0 ? 'margin-0' : ''" :key="index" class="item-box" v-for="(item, index) in list">
<p @click="detail(item.id)" class="font-24 my-3" style="cursor: pointer">{{ item.name }}</p>
<p @click="detail(item.id)" class="font-16" style="color: rgba(0, 0, 0, 0.45); cursor: pointer">编号{{ item.identifier }}</p>
<p class="font-16 baseColor item-more">
<!-- <a-button type="primary" style="cursor: pointer">转化意向填报</a-button> -->
<intention-model style="cursor: pointer" :type-data="getId(item.id)" />
</p>
</div>
</div>
<div class="inner">
<a-pagination
:current="achCurrent"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 12"
/>
</div>
</div>
</template>
<script>
import { mapMutations, mapState } from 'vuex';
import { selRes } from 'config/api';
import IntentionModel from '../Introduce/IntentionModel.vue';
export default {
name: 'PlatformList',
components: { IntentionModel },
data() {
return {
list: [],
pageSize: 12,
total: 0,
typeData: {
type: 2,
Id: '',
},
};
},
computed: mapState('home', ['achList', 'achIpt', 'achCurrent']),
watch: {
achList(val) {
this.getData();
},
achIpt(val) {
if (val.isBtn === 1) {
this.getData();
}
},
},
created() {
this.getData();
},
methods: {
...mapMutations('home', ['setAchCurrent', 'setAchId']),
//
onShowSizeChange(current, size) {
this.setAchCurrent(current);
this.getData();
},
//
async getData() {
try {
const params = {
param: {
content: this.achIpt.content,
modelIds: this.achList,
pageNum: this.achCurrent,
pageSize: 12,
},
};
const res = await selRes(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.list = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
detail(id) {
this.setAchId(id);
this.$router.push('/NewPlatform/AchDet');
},
getId(Id) {
return (this.typeData = {
type: 2,
Id,
});
},
},
};
</script>
<style lang="stylus" scoped>
.pagination {
margin: 40px 0;
text-align: right;
}
.item-box {
position: relative;
width: 20.5%;
background: #fff;
margin-right: 6%;
border-radius: 4px;
margin-bottom: 40px;
padding: 10px;
padding-bottom: 60px;
}
.margin-0 {
margin-right: 0% !important;
}
.item-more {
position: absolute;
bottom: 10px;
right: 10px;
text-align: right;
margin-bottom: 0 !important;
margin-top: 40px;
}
</style>

238
src/components/PlatformList/PlatformList.vue

@ -1,238 +0,0 @@
<template>
<div>
<div class="inner d-flex flex-wrap">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8"
v-for="(item, index) in list"
>
<img :src="item.picUrl" style="height: 220px; width: 100%" v-if="item.picUrl" />
<img :src="item.visitLocation" style="height: 220px; width: 100%" v-else />
<p class="font-24 my-4 title">{{ item.name }}</p>
<p
@click="jump(item.id)"
class="font-16 baseColor"
style="text-align: right; cursor: pointer"
>了解更多</p>
</div>
</div>
<div class="inner">
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 8"
/>
</div>
</div>
</template>
<script>
import { mapMutations, mapState } from 'vuex';
import { selInstrument, searchFront, selProduct } from 'config/api';
export default {
name: 'PlatformList',
data() {
return {
list: [],
pageSize: 8,
total: 20,
current: 1,
};
},
computed: mapState('home', ['listState', 'labList', 'LabIpt', 'insList', 'InsIpt', 'shareCurrent', 'productList', 'productIpt']),
watch: {
shareCurrent(val) {
console.log(val);
this.monitor(this.listState);
},
labList(val) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
},
LabIpt(val) {
if (this.LabIpt.isBtn === 1) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
}
},
insList(val) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
},
InsIpt(val) {
if (this.InsIpt.isBtn === 1) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
}
},
productList(val) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
},
productIpt(val) {
if (this.productIpt.isBtn === 1) {
if (this.shareCurrent === 1) {
this.monitor(this.listState);
}
this.current = 1;
this.setShareCurrent(1);
}
},
},
created() {
this.current = this.shareCurrent;
if (this.listState === 0) {
this.getSear();
} else if (this.listState === 1) {
this.getSelI();
} else {
this.getProductLists();
}
},
methods: {
...mapMutations('home', ['setShareCurrent']),
//
async getSelI() {
try {
const params = {
param: {
content: this.InsIpt.content, //
modelIds: this.insList, // ID
pageNum: this.shareCurrent,
pageSize: this.pageSize,
},
};
const res = await selInstrument(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.list = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
async getSear() {
try {
const params = {
param: {
name: this.LabIpt.content, //
moldIds: this.labList, // ID
pageNum: this.shareCurrent,
pageSize: this.pageSize,
},
};
const res = await searchFront(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.list = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
async getProductLists() {
try {
const params = {
param: {
content: this.productIpt.content, //
modelIds: this.productList, // ID
pageNum: this.shareCurrent,
pageSize: this.pageSize,
},
};
const res = await selProduct(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.list = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
onShowSizeChange(current, size) {
this.current = current;
this.setShareCurrent(this.current);
},
//
monitor(val) {
if (val === 0) {
this.getSear();
} else if (val === 1) {
this.getSelI();
} else {
this.getProductLists();
}
},
// /
jump(id) {
if (this.listState === 0) {
this.$router.push({
path: '/NewPlatform/Share/Institute',
name: 'Institute',
params: { id },
});
} else if (this.listState === 1) {
this.$router.push({
path: '/NewPlatform/Share/InsDet',
name: 'InsDet',
params: { id },
});
} else if (this.listState === 3) {
this.$router.push({
path: '/NewPlatform/Share/InsDet',
name: 'InsDet',
params: { id },
});
}
},
},
};
</script>
<style lang="stylus" scoped>
.pagination {
margin: 40px 0;
text-align: right;
}
.item-box {
width: 20.5%;
margin-right: 6%;
border-radius: 4px;
.title {
text-align: center;
}
}
.margin-0 {
margin-right: 0 !important;
}
</style>

263
src/router/index.js

@ -29,279 +29,20 @@ const routes = [
name: 'ForgetPassword', name: 'ForgetPassword',
component: () => import(/* webpackChunkName: "forget-password" */ 'views/User/ForgetPassword.vue'), component: () => import(/* webpackChunkName: "forget-password" */ 'views/User/ForgetPassword.vue'),
}, },
// 关于我们界面
{
path: '/About/Introduce',
name: 'About',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/About.vue'),
children: [
{
path: '/About/Introduce',
name: 'Introduce',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Introduce.vue'),
},
{
path: '/About/Organ',
name: 'Organ',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Organ.vue'),
},
{
path: '/About/Partner',
name: 'Partner',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/Partner.vue'),
},
{
path: '/About/SpinOffs',
name: 'SpinOffs',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/About/Children/SpinOffs.vue'),
},
],
},
// 政策界面
{
path: '/Policy',
name: 'Policy',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Policy/Policy.vue'),
},
// 政策详情界面
{
path: '/Policy/PolicyDetails',
name: 'PolicyDetails',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Policy/PolicyDetails.vue'),
},
// 交流社区界面
{
path: '/Community',
name: 'Community',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Community/Community.vue'),
},
// 交流社区发帖界面
{
path: '/Posting',
name: 'Posting',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Community/Posting.vue'),
},
// 交流帖子详情页
{
path: '/ComDetails',
name: 'ComDetails',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Community/ComDetails.vue'),
},
// 行业资讯界面
{
path: '/ItInformation',
name: 'ItInformation',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/ItInformation/ItInformation.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: '/ContactUs', path: '/ContactUs',
name: 'ContactUs', name: 'ContactUs',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/ContactUs/ContactUs.vue'), component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/ContactUs/ContactUs.vue'),
}, },
// 创新平台
{
path: '/NewPlatform/NewCore',
name: 'NewPlatform',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/NewPlatform.vue'),
children: [
{
path: '/NewPlatform/NewCore',
name: 'Core',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Core.vue'),
},
{
path: '/NewPlatform/News',
name: 'News',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Platform.vue'),
},
{
path: '/NewPlatform/NewService',
name: 'Service',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Service.vue'),
},
{
path: '/NewPlatform/ServiceDet',
name: 'ServiceDet',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/ServiceDet.vue'),
},
{
// 科技资源开放共享服务平台
path: '/NewPlatform/Share',
name: 'Share',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Share.vue'),
},
{
// 科技资源开放共享服务平台 > 研究院(实验室)详情页
path: '/NewPlatform/Share/Institute',
name: 'Institute',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/ShareChild/Institute.vue'),
},
{
// 科技资源开放共享服务平台 > 仪器详情页
path: '/NewPlatform/Share/InsDet',
name: 'InsDet',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/ShareChild/InsDet.vue'),
},
{
// 知识产权与技术转移转化服务平台
path: '/NewPlatform/Transfer',
name: 'Transfer',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Transfer.vue'),
},
{
// 创新服务
path: '/NewPlatform/Develop',
name: 'Develop',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/Develop.vue'),
},
{
// 成果详情页
path: '/NewPlatform/AchDet',
name: 'AchDet',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/NewPlatform/Children/AchDet.vue'),
},
],
},
// 孵化平台
{
path: '/IncubationPlatform/MakerSpace',
name: 'IncubationPlatform',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/IncubationPlatform.vue'),
children: [
// 众创空间
{
path: '/IncubationPlatform/MakerSpace',
name: 'MakerSpace',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/MakerSpace.vue'),
},
// 孵化场所
{
path: '/IncubationPlatform/Incubator',
name: 'Incubator',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/Incubator.vue'),
},
// 公共实验室
{
path: '/IncubationPlatform/PublicLaboratory',
name: 'PublicLaboratory',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/PublicLaboratory.vue'),
},
// 中试基地
{
path: '/IncubationPlatform/PilotBase',
name: 'PilotBase',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/PilotBase.vue'),
},
// 创业导师
{
path: '/IncubationPlatform/Tutor',
name: 'Tutor',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/Tutor.vue'),
},
// 合作伙伴
{
path: '/IncubationPlatform/Partner',
name: 'Partner',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/Partner.vue'),
},
// 创业服务
{
path: '/IncubationPlatform/Services',
name: 'Services',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/Services.vue'),
},
// 产品展示
{
path: '/IncubationPlatform/Products',
name: 'Products',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/Products.vue'),
},
// 实体众创空间
{
path: '/IncubationPlatform/MakerSpace/EntitySpace',
name: 'EntitySpace',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/place/EntitySpace.vue'),
},
// 虚拟众创空间
{
path: '/IncubationPlatform/MakerSpace/VirtualSpace',
name: 'VirtualSpace',
component: () =>
import(/* webpackChunkName: "cooperative-enterprise" */ 'views/IncubationPlatform/Children/place/VirtualSpace.vue'),
},
],
},
// 购物车 // 购物车
{ {
path: '/Cart', path: '/Cart',
name: 'Cart', name: 'Cart',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Cart/Cart.vue'), component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Cart/Cart.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: '/Industry/Union',
name: 'Industry',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Industry/Industry.vue'),
children: [
{
path: '/Industry/Union',
name: 'Union',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Industry/Children/Union.vue'),
},
{
path: '/Industry/Serve',
name: 'Serve',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Industry/Children/Serve.vue'),
},
{
path: '/Industry/Enterprise',
name: 'Enterprise',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Industry/Children/Enterprise.vue'),
},
],
},
// 知识平台界面
{
path: '/Knowledge',
name: 'Knowledge',
component: () => import(/* webpackChunkName: "cooperative-enterprise" */ 'views/Knowledge/Knowledge.vue'),
},
]; ];
const router = new VueRouter({ const router = new VueRouter({

16
src/views/About/About.vue

@ -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>

53
src/views/About/Children/Introduce.vue

@ -1,53 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="white pa-5 my-5">
<rich-text :title="title" />
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import RichText from 'components/Introduce/RichText.vue';
export default {
name: 'Introduce',
components: { Banner, HNav, BreadCrumb, RichText },
// mounted() {
// window.addEventListener('scroll', this.handleScroll);
// setTimeout(() => {
// document.querySelector('#nav').scrollIntoView({
// behavior: 'smooth', //
// block: 'start', //
// });
// }, 2000);
// },
data() {
return {
title: '关于我们-公司介绍',
showPage: 11,
arr: [
{ name: '关于我们', url: '/About/Introduce' },
{ name: '公司介绍', url: '' },
],
};
},
methods: {},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

42
src/views/About/Children/Organ.vue

@ -1,42 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="white pa-5 my-5">
<rich-text :title="title" />
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import RichText from 'components/Introduce/RichText.vue';
export default {
name: 'Introduce',
components: { Banner, HNav, BreadCrumb, RichText },
data() {
return {
title: '关于我们-组织机构',
showPage: 12,
arr: [
{ name: '关于我们', url: '/About/Introduce' },
{ name: '组织机构', url: '' },
],
};
},
methods: {},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

39
src/views/About/Children/Partner.vue

@ -1,39 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="py-5 my-5">
<partner-ship :title="title" :type-of-platform="typeOfPlatform" />
</div>
</div>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import PartnerShip from 'components/Introduce/PartnerShip.vue';
export default {
name: 'Partner',
components: { HNav, BreadCrumb, PartnerShip },
data() {
return {
title: '合作伙伴',
typeOfPlatform: '关于我们',
arr: [
{ name: '关于我们', url: '/About/Introduce' },
{ name: '合作伙伴', url: '' },
],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

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

@ -1,39 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div>
<derive-enterprise :title="title" :type-of-platform="typeOfPlatform" />
</div>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import DeriveEnterprise from 'components/Introduce/DeriveEnterprise.vue';
export default {
name: 'Partner',
components: { HNav, BreadCrumb, DeriveEnterprise },
data() {
return {
title: '衍生企业',
typeOfPlatform: '关于我们',
arr: [
{ name: '关于我们', url: '/About/Introduce' },
{ name: '衍生企业', url: '' },
],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
</style>

62
src/views/About/components/HNav.vue

@ -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>

123
src/views/Activity/ActDetails.vue

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

326
src/views/Activity/Activity.vue

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

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

@ -1,323 +0,0 @@
<template>
<div>
<a-button @click="showModal" type="primary">立即报名</a-button>
<a-modal
:confirm-loading="confirmLoading"
:title="title"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
width="50%"
>
<a-form :form="form">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="活动名称"
>
<a-input :value="actName" disabled />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="申请单位"
required
>
<a-input placeholder="请输入申请单位..." v-model.trim="platform.companyName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
class="mb-3"
label="参加人员"
required
>
<div :key="index" class="d-flex flex-nowrap mb-3" v-for="(item,index) in people">
<a-input class="flex-1 mr-3" placeholder="姓名" v-model.trim="item.name" />
<a-input class="flex-1 mr-3" placeholder="职称" v-model.trim="item.duties" />
<a-input class="flex-1 mr-3" placeholder="职务" v-model.trim="item.positional" />
<a-button
@click="changePerson(index)"
icon="plus"
type="link"
v-if="index === people.length -1"
/>
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系人"
required
>
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系电话"
required
>
<a-input
@change="changePhone"
placeholder="请输入联系电话.."
type="tel"
v-decorator="['tel', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button>
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> -->
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" />
<a-button
class="code_img ml-2"
disabled
type="primary"
v-if="showInterval"
>重新发送 {{ interval }}</a-button>
<a-button
:disabled="platform.isTel === false"
@click="getCode"
class="code_img ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import { apply } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
export default {
name: 'Enroll',
props: {
activityId: {
type: Number,
default: 0,
},
actName: {
type: String,
default: '',
},
},
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
title: '活动报名',
formItemLayout,
formTailLayout,
confirmLoading: false,
//
people: [
{
name: '',
duties: '',
positional: '',
},
],
platform: {
companyName: '', //
manName: '', //
tel: '', //
code: '', //
isTel: false,
},
codeRules: [
{ required: true, message: '请输入验证码' },
{ min: 4, max: 4, message: '请输入4位短信验证码' },
],
codeNum: '',
showInterval: false,
codeTimer: null,
interval: 120, //
phoneRules: [
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' },
],
};
},
computed: {
...mapState('user', ['picCode']),
},
async created() {
this.sendPicCode();
await this.getUserSer();
if (this.userSer) {
if (this.userSer.name) {
this.platform.manName = this.userSer.name;
}
if (this.userSer.phone) {
this.platform.tel = this.userSer.phone;
}
if (this.userSer.companyName) {
this.platform.companyName = this.userSer.companyName;
}
}
},
methods: {
...mapActions('user', ['sendCode', 'sendPicCode']),
...mapActions('home', ['getUserSer']),
changePerson(index) {
// if (this.people[index].name && this.people[index].positional && this.people[index].duties) {
const a = { name: '', positional: '', duties: '' };
this.people.push(a);
// }
},
//
showModal() {
this.visible = true;
},
//
handleCancel(e) {
this.visible = false;
},
//
changePhone(e) {
this.platform.tel = e.target.value;
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel);
},
//
handleOk() {
if (!this.platform.companyName) {
this.$message.error('请输入申请单位');
} else if (!this.people[0].name || !this.people[0].positional || !this.people[0].duties) {
this.$message.error('请至少输入一名参加人员');
} else if (!this.platform.tel) {
this.$message.error('请输入联系电话');
} else if (!this.platform.code) {
this.$message.error('请输入验证码');
} else {
if (this.platform.isTel) {
this.subMitAdd();
} else {
this.$message.error('请输入正确的联系电话');
}
}
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const { activityId, platform, people } = this;
people.forEach(item => {
item.activityId = activityId;
});
const params = {
param: {
activityId,
code: platform.code,
companyName: platform.companyName,
contactName: platform.manName,
contactPhone: platform.tel,
peoples: people,
},
};
console.log('params: ', params);
const res = await apply(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('申请成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
this.platform.isTel = false;
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
//
async getCode() {
console.log(111);
try {
const params = {
phone: this.platform.tel,
verificationCodeId: this.picCode.verificationCodeId,
verificationCodeValue: this.codeNum,
};
await this.sendCode(params);
this.getCodeInterval();
} catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`);
console.log(error);
}
},
//
getCodeInterval() {
this.showInterval = true;
this.codeTimer = setInterval(() => {
if (this.interval === 0) {
clearInterval(this.codeTimer);
this.codeTimer = null;
this.showInterval = false;
this.interval = 120;
return;
}
this.interval = this.interval - 1;
}, 1000);
},
//
changePicCode() {
this.sendPicCode();
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
</style>

23
src/views/Cart/Cart.vue

@ -6,7 +6,6 @@
<template> <template>
<div class="inner"> <div class="inner">
<bread-crumb :arr="arr" class="pb-5 mb-5" />
<div class="white pa-5 mb-5 d-flex flex-nowrap align-center justify-space-between"> <div class="white pa-5 mb-5 d-flex flex-nowrap align-center justify-space-between">
<div> <div>
<span class="font-16 textColor">联系人</span> <span class="font-16 textColor">联系人</span>
@ -22,9 +21,17 @@
</div> </div>
</div> </div>
<div class="cart-box" v-if="cart.lists && cart.lists.length > 0"> <div class="cart-box" v-if="cart.lists && cart.lists.length > 0">
<div :key="list.id" class="d-flex flex-column pa-5 white div-box mb-8" v-for="list in cart.lists"> <div
:key="list.id"
class="d-flex flex-column pa-5 white div-box mb-8"
v-for="list in cart.lists"
>
<p class="font-bold-20 title-color">{{ list.title }}</p> <p class="font-bold-20 title-color">{{ list.title }}</p>
<div :key="index" class="d-flex flex-nowrap flex-row mb-8" v-for="(item, index) in list.list"> <div
:key="index"
class="d-flex flex-nowrap flex-row mb-8"
v-for="(item, index) in list.list"
>
<img :src="item.src" class="cart-pic mr-8" /> <img :src="item.src" class="cart-pic mr-8" />
<div class="flex-1 flex-column"> <div class="flex-1 flex-column">
<p class="font-bold-20 title-color">{{ item.title }}</p> <p class="font-bold-20 title-color">{{ item.title }}</p>
@ -34,7 +41,12 @@
</div> </div>
<div class="d-flex flex-row-reverse pb-10"> <div class="d-flex flex-row-reverse pb-10">
<a-button @click="handleSubmit" type="primary">提交</a-button> <a-button @click="handleSubmit" type="primary">提交</a-button>
<cart-model :phone="phone" :show-model="showModel" @handleCancel="handleCancel" @submitCart="submitCart" /> <cart-model
:phone="phone"
:show-model="showModel"
@handleCancel="handleCancel"
@submitCart="submitCart"
/>
</div> </div>
</div> </div>
</div> </div>
@ -42,13 +54,12 @@
<script> <script>
import { mapState, mapMutations, mapActions } from 'vuex'; import { mapState, mapMutations, mapActions } from 'vuex';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import CartModel from './CartModel.vue'; import CartModel from './CartModel.vue';
import { searchCar, carAndBuy } from 'config/api'; import { searchCar, carAndBuy } from 'config/api';
export default { export default {
name: 'Cart', name: 'Cart',
components: { BreadCrumb, CartModel }, components: { CartModel },
data() { data() {
return { return {
arr: [{ name: '购物车', url: '' }], arr: [{ name: '购物车', url: '' }],

13
src/views/Challenge/Challenge.vue

@ -1,13 +0,0 @@
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
export default {
data() {
return {};
},
};
</script>

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

@ -1,240 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="search-background">
<div class="d-flex">
<div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span>
<span
:class="item.isActive ? 'act-color' : ''"
:key="index"
@click="choose(index)"
class="ins-name"
v-for="(item, index) in list"
>{{ item.name }}</span>
</div>
</div>
</div>
<div class="inner d-flex flex-wrap">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="pro-box"
v-for="(item, index) in lists"
>
<p class="pro-title">{{ item.title }}</p>
<p class="pro-content">{{ item.content }}</p>
<p class="pro-time">时间{{ item.time }}</p>
</div>
</div>
<div class="inner">
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 8"
/>
</div>
</div>
</template>
<script>
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Release',
components: { HNav, BreadCrumb },
data() {
return {
str: '发布界面',
title: '结果公告',
typeOfPlatform: '创新挑战',
arr: [
{ name: '创新挑战', url: '/Challenge/Solicitation' },
{ name: '结果公告', url: '' },
],
current: 1,
pageSize: 8,
total: 10,
list: [
{
id: 1,
name: '功能食品',
isActive: false,
},
{
id: 2,
name: '生物医药',
isActive: false,
},
{
id: 3,
name: '大健康',
isActive: false,
},
],
lists: [
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
{
title: '需求标题',
content: 'XXX挑战成功',
time: '2020-11-20',
},
],
};
},
methods: {
choose(index) {
const that = this;
// that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
// for (let i = 0; i < list.length; i++) {
// if (list[i].isActive) {
// this.achList.push(list[i].id);
// }
// }
// this.setAchList(this.achList);
},
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto;
line-height: 44px;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
.margin-0 {
margin-right: 0% !important;
}
.pro-box {
width: 20.5%;
margin-right: 6%;
height: auto;
background: #FFFFFF;
padding: 24px 20px;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
position: relative;
margin-bottom: 20px;
opacity: 1;
}
.pro-title {
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
}
.pro-content {
font-size: 30px;
overflow: hidden;
font-family: Microsoft YaHei;
font-weight: bold;
color: #13ACC4;
margin-bottom: 60px;
opacity: 1;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
}
.pro-time {
position: absolute;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
color: rgba(0, 0, 0, 0.45);
opacity: 1;
bottom: 0;
}
.pro-btn {
position: absolute;
bottom: 24px;
width: 100px;
}
</style>

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

@ -1,249 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="search-background">
<div class="d-flex">
<div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span>
<span
:class="item.isActive ? 'act-color' : ''"
:key="index"
@click="choose(index)"
class="ins-name"
v-for="(item, index) in list"
>{{ item.name }}</span>
</div>
</div>
</div>
<div class="inner d-flex flex-wrap">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="pro-box"
v-for="(item, index) in lists"
>
<p class="pro-title">{{ item.title }}</p>
<p class="pro-content">{{ item.content }}</p>
<p class="pro-time">时间{{ item.time }}</p>
<a-button class="pro-btn" type="primary">揭榜</a-button>
</div>
</div>
<div class="inner">
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 8"
/>
</div>
</div>
</template>
<script>
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Release',
components: { HNav, BreadCrumb },
data() {
return {
title: '项目发布',
typeOfPlatform: '创新挑战',
arr: [
{ name: '创新挑战', url: '/Challenge/Solicitation' },
{ name: '项目发布', url: '' },
],
str: '发布界面',
current: 1,
pageSize: 8,
total: 10,
list: [
{
id: 1,
name: '功能食品',
isActive: false,
},
{
id: 2,
name: '生物医药',
isActive: false,
},
{
id: 3,
name: '大健康',
isActive: false,
},
],
lists: [
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
{
title: '需求标题',
content:
'需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容需求内容求内容需求内容求内容需求内容',
time: '2020-11-20',
},
],
};
},
methods: {
choose(index) {
const that = this;
// that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
// for (let i = 0; i < list.length; i++) {
// if (list[i].isActive) {
// this.achList.push(list[i].id);
// }
// }
// this.setAchList(this.achList);
},
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto;
line-height: 44px;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
.margin-0 {
margin-right: 0% !important;
}
.pro-box {
width: 20.5%;
margin-right: 6%;
height: 300px;
background: #FFFFFF;
padding: 24px 20px;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
position: relative;
margin-bottom: 20px;
opacity: 1;
}
.pro-title {
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
}
.pro-content {
font-size: 16px;
overflow: hidden;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 24px;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
}
.pro-time {
position: absolute;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
color: rgba(0, 0, 0, 0.45);
opacity: 1;
bottom: 60px;
}
.pro-btn {
position: absolute;
bottom: 24px;
width: 100px;
}
</style>

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

@ -1,71 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="top-box">
<div class="top-title">创新挑战</div>
<div class="top-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
</div>
<div class="center-box" style="margin-bottom: 160px">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">需求征集</div>
</div>
<div class="center-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
<a-button class="center-btn" type="primary">需求填报</a-button>
</div>
</div>
</template>
<script>
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Solicitation',
components: { HNav, BreadCrumb },
data() {
return {
title: '需求征集',
typeOfPlatform: '创新挑战',
arr: [
{ name: '创新挑战', url: '/Challenge/Solicitation' },
{ name: '需求征集', url: '' },
],
str: '征集界面',
list: [],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.top-box {
background: -webkit-linear-gradient(left, #13ACC4, #A9C300) !important;
}
.center-btn {
position: absolute;
left: 26%;
bottom: 100px;
}
</style>

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

@ -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>

193
src/views/Community/ComDetails.vue

@ -1,193 +0,0 @@
<template>
<div class="box">
<div>
<div class="policy-title">
<span>{{ postDetail.title }}</span>
</div>
<div class="policy-info">
<span>
<a-avatar
:size="20"
:src="postDetail.avatarUrl"
style="margin-top: -4px; margin-right: 10px"
/>
<span style="margin-right: 60px">{{ postDetail.userName }}</span>
<a-icon
class="baseColor"
style="font-size: 14px; margin-right: 10px"
type="clock-circle"
/>
<span>{{ postDetail.createdTime }}</span>
</span>
<span style="margin-left: 60px">
<a-icon class="baseColor" style="margin-right: 10px" type="message" />
<span>{{ postDetail.commentNum }}</span>
</span>
</div>
<div class="policy-content" v-dompurify-html="postDetail.content"></div>
</div>
<div class="coms-style">
<div class="coms-top">
<div :key="index" style="margin-top: 1em" v-for="(item, index) in coms">
<p style="color: #999">
<a-avatar
:size="20"
:src="item.avatarUrl"
alt
style="margin-top: -4px; margin-right: 4px"
/>
<span style="margin-right: 10px">{{ item.userName }}</span>
<span>{{ item.creatTime }}</span>
</p>
<span class="coms-content">{{ item.content }}</span>
</div>
</div>
<div class="coms-btm">
<a-textarea style="height: 140px;min-height: 140px;max-height: 140px" v-model="comment" />
<a-button @click="sub" class="sub" type="primary">提交</a-button>
</div>
<!-- <div class="txtara">
<a-textarea placeholder="请输入..." :rows="4" v-model="comment" />
<a-button class="txt-btn" type="primary" @click="sub(index)">提交</a-button>
</div>-->
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { selCommunity, insComment } from 'config/selComment';
export default {
name: 'ComDetails',
data() {
return {
comment: '',
coms: {},
};
},
computed: mapState('home', ['postDetail']),
created() {
this.getData();
},
methods: {
async getData() {
//
try {
const params = { param: { commentId: this.postDetail.id } };
const res = await selCommunity(params);
const { msg, data, code } = res.data;
if (code === 200) {
this.coms = data;
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
},
//
async sub(index) {
try {
const params = {
param: {
communityId: this.postDetail.id,
content: this.comment,
},
};
const res = await insComment(params);
const { msg, data, code } = res.data;
if (code === 200) {
this.comment = '';
this.$message.success('评论成功');
this.getData();
} else {
console.log(msg);
this.$message.error('评论失败');
}
} catch (error) {
console.log(error);
this.$message.error('评论失败');
}
},
},
};
</script>
<style lang="stylus" scoped>
.box {
width: 1260px;
position: relative;
margin: 80px auto;
background: #fff;
min-height: 1037px;
overflow: hidden;
opacity: 1;
padding-bottom: 480px;
}
.back-btn {
width: 80px;
position: absolute;
right: 0;
}
.policy-title {
height: 120px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
padding: 0 150px;
border-bottom: 1px solid #707070;
}
.policy-info {
height: 76px;
line-height: 76px;
text-align: center;
}
.policy-content {
padding: 0 25px;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
font-weight: 400;
font-family: Microsoft YaHei;
}
.coms-style {
height: 480px;
padding: 25px 0;
border-top: 2px solid #ccc;
position: absolute;
bottom: 0;
width: 100%;
}
.coms-top {
height: 280px;
padding: 0 25px;
overflow: auto;
box-shadow: 0 0 5px #ccc;
}
.coms-btm {
margin-top: 20px;
padding: 0 10px;
}
.coms-content {
background: rgba(19, 172, 196, 0.1);
}
.sub {
position: absolute;
right: 20px;
bottom: 20px;
}
</style>

268
src/views/Community/Community.vue

@ -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>

142
src/views/Community/Posting.vue

@ -1,142 +0,0 @@
<template>
<div class="wrap">
<!-- {{ str }} -->
<h2>标题</h2>
<a-input style="margin-bottom: 20px" v-model.trim="title" />
<h2>封面图片</h2>
<a-upload
:action="action"
:default-file-list="fileList"
@change="fileChange"
list-type="picture"
name="files"
>
<a-button v-show="fileList.length === 0">
<a-icon type="upload" />点击上传
</a-button>
</a-upload>
<h2 style="margin-top: 20px">内容</h2>
<div class="edit_container" style="height: auto; margin-bottom: 40px">
<quill-editor
:options="editorOption"
@blur="onEditorBlur($event)"
@change="onEditorChange($event)"
@focus="onEditorFocus($event)"
ref="myQuillEditor"
v-model="content"
></quill-editor>
</div>
<a-button @click="subMit" type="primary">发表</a-button>
<router-link @click="subMit" style="margin-left: 40px" tag="a-button" to="Community">取消</router-link>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { quillEditor } from 'vue-quill-editor'; //
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
import { upload } from 'config/api';
import { addComment } from 'config/selComment';
export default {
name: 'Posting',
components: { quillEditor },
data() {
return {
str: '发帖界面',
title: '',
content: ``,
editorOption: {
placeholder: '请在这里输入',
modules: {
toolbar: [
['bold', 'italic', 'underline', 'strike'], //线线
['blockquote', 'code-block'], //
[{ header: 1 }, { header: 2 }], // 12
[{ list: 'ordered' }, { list: 'bullet' }], //
[{ script: 'sub' }, { script: 'super' }], //
[{ indent: '-1' }, { indent: '+1' }], //
[{ direction: 'rtl' }], //
[{ size: ['small', false, 'large', 'huge'] }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ color: [] }, { background: [] }], //
[{ font: [] }], //
[{ align: [] }], //
['clean'], //
['image', 'video'], //
],
},
},
action: upload,
fileList: [], //
files: '', // Id
};
},
computed: {
...mapState('home', ['postDetail', 'postVal']),
editor() {
return this.$refs.myQuillEditor.quill;
},
},
methods: {
onEditorReady(editor) {
//
},
onEditorBlur() {}, //
onEditorFocus() {}, //
onEditorChange() {
//
// console.log(this.content);
},
//
fileChange(info) {
this.fileList = info.fileList;
if (info.file.status === 'done') {
this.files = [];
this.files = info.fileList[0].response.data[0].id;
console.log(this.files);
}
},
//
async subMit() {
try {
const params = {
param: {
content: this.content,
category: this.postVal,
picId: this.files,
title: this.title,
},
};
const res = await addComment(params);
const { msg, data, code } = res.data;
if (code === 200) {
this.$message.success('发表成功');
this.$router.push('/Community');
} else {
this.$message.error('发表失败');
}
} catch (error) {
this.$message.error(error);
}
},
},
};
</script>
<style lang="stylus" >
.wrap {
width: 1260px;
min-height: 1037px;
margin: 80px auto 28px auto;
overflow: hidden;
opacity: 1;
}
.ql-editor {
min-height: 600px;
max-height: 800px;
}
</style>

4
src/views/ContactUs/ContactUs.vue

@ -1,6 +1,5 @@
<template> <template>
<div class="inner"> <div class="inner">
<bread-crumb :arr="arr" />
<!-- 联系我们 --> <!-- 联系我们 -->
<div> <div>
<p class="font-bold-24 title-color">联系我们</p> <p class="font-bold-24 title-color">联系我们</p>
@ -16,14 +15,13 @@
</template> </template>
<script> <script>
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import Contact from 'components/Introduce/ContactUs.vue'; import Contact from 'components/Introduce/ContactUs.vue';
import RichText from 'components/Introduce/RichText.vue'; import RichText from 'components/Introduce/RichText.vue';
import Model from 'components/Introduce/Model.vue'; import Model from 'components/Introduce/Model.vue';
export default { export default {
name: 'ContactUs', name: 'ContactUs',
components: { BreadCrumb, Contact, RichText, Model }, components: { Contact, RichText, Model },
data() { data() {
return { return {
title: '联系我们', title: '联系我们',

200
src/views/FirstPage/FirstPage.vue

@ -6,182 +6,22 @@
<template> <template>
<div> <div>
<rotation /> <rotation />
<div class="inner"> <div class="inner"></div>
<a-row>
<a-col :span="18">
<a-row>
<a-col :key="server.id" :span="8" v-for="server in services">
<div @click="$router.push(server.url)" class="base-bg mr-8 d-flex pointer">
<div class="server-box pa-5 mb-3 d-flex flex-column white--text fill-width">
<span class="font-big">{{ server.chinese }}</span>
<span class="font-small">{{ server.english }}</span>
<span class="font-small">SERVICE</span>
<div class="d-flex flex-nowrap">
<div class="flex-1"></div>
<a-icon class="font-24" type="arrow-right" />
</div>
</div>
</div>
</a-col>
</a-row>
<a-row class="mt-8">
<a-col :span="12">
<div class="white mr-8 d-flex flex-column justify-center">
<index-new-list :i="0" :lists="lists" />
</div>
</a-col>
<a-col :span="12">
<div class="white mr-8 d-flex flex-column justify-center">
<index-new-list :i="1" :lists="lists" />
</div>
</a-col>
</a-row>
</a-col>
<a-col :span="6">
<div
:key="platform.id"
@click="$router.push(platform.url)"
class="second-base-bg white--text platform-box mb-8 d-flex flex-column justify-center align-center pointer"
v-for="platform in platforms"
>
<div class="font-small font-bold">{{ platform.firstName }}</div>
<div class="font-small font-bold">{{ platform.secondName }}</div>
</div>
</a-col>
</a-row>
</div>
</div> </div>
</template> </template>
<script> <script>
import { mapState, mapActions } from 'vuex'; import { mapState, mapActions } from 'vuex';
import Rotation from 'components/Rotation/Rotation.vue'; import Rotation from 'components/Rotation/Rotation.vue';
import IndexNewList from 'components/Index/IndexNewList.vue'; import {} from 'config/api';
import { frontSearchFriend, frontSearchCompany } from 'config/api';
export default { export default {
components: { Rotation, IndexNewList }, components: { Rotation },
data() { data() {
return { return {};
services: [
{ id: '01', chinese: '创新服务', english: 'INNOVATIVE', url: '/NewPlatform/NewService' },
{ id: '02', chinese: '孵化服务', english: 'INCUBATION', url: '/IncubationPlatform/Services' },
{ id: '03', chinese: '产业服务', english: 'INDUSTRIAL', url: '/Industry/Serve' },
],
platforms: [
{
id: '04',
firstName: '创新挑战',
secondName: '',
url: '/Challenge/Solicitation',
},
{
id: '05',
firstName: '科技资源开放共享',
secondName: '服务平台',
url: '/NewPlatform/Share',
},
{
id: '06',
firstName: '知识产权与技术',
secondName: '转移转化服务平台',
url: '/NewPlatform/Transfer',
},
{
id: '07',
firstName: '知识培训与科技人才',
secondName: '服务平台',
url: '/NewPlatform/NewService',
},
],
lists: [
{
id: 1,
name: '行业资讯',
news: [],
},
{
id: 2,
name: '活动公告',
news: [],
},
],
};
},
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']),
created() {
this.getData1();
this.getData2();
this.getIndustryInfoLists();
this.getFrontLists();
},
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);
}
},
//
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: 3,
title: '',
},
};
const res = await this.getFrontList(params);
this.lists[1].news = res.list;
},
}, },
created() {},
methods: {},
}; };
</script> </script>
@ -189,32 +29,4 @@ export default {
.inner { .inner {
margin: 40px auto; margin: 40px auto;
} }
.platform-box {
height: 100px;
}
.platform-box div {
transition: all 0.2s ease 0s;
}
.platform-box:hover div {
transform: translate(0, -3px);
}
.server-box span {
transition: all 0.2s ease 0s;
}
.server-box div {
transition: all 0.2s ease 0s;
}
.server-box:hover span {
transform: translate(0, -3px);
}
.server-box:hover div {
transform: translate(0, -3px);
}
</style> </style>

47
src/views/IncubationPlatform/Children/Incubator.vue

@ -1,47 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="white pa-5 my-5">
<!-- <rich-text :title="title" /> -->
<div class="words-content">
<img src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/fhcs.png" />
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import RichText from 'components/Introduce/RichText.vue';
export default {
name: 'Incubator',
components: { Banner, HNav, BreadCrumb, RichText },
data() {
return {
title: '孵化平台-孵化场所',
showPage: 45,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' },
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' },
{ name: '孵化场所', url: '' },
],
};
},
methods: {},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

120
src/views/IncubationPlatform/Children/MakerSpace.vue

@ -1,120 +0,0 @@
<template>
<div>
<div @click="openModel()">
<banner :show-page="showPage" class="pointer" />
</div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div>
<div :key="index" style="margin-top: 50px;" v-for="(item, index) in list">
<div class="d-flex justify-space-between" v-if="index % 2 === 0">
<div class="introduce-box">
<p
@click="item.imgUrl ? jump(item.url) : openModel()"
class="introduce-title pointer"
>{{ item.title }}</p>
<p class="introduce-content" v-if="index === 0">
实体空间由
<span
@click="$router.push('/IncubationPlatform/Incubator')"
class="pointer baseColor"
>孵化场所</span>
<span
@click="$router.push('/IncubationPlatform/PublicLaboratory')"
class="pointer baseColor"
>公共实验室</span>
<span
@click="$router.push('/IncubationPlatform/PilotBase')"
class="pointer baseColor"
>中试基地</span>部分组成
</p>
<p
@click="item.imgUrl ? jump(item.url) : openModel()"
class="introduce-content pointer"
v-else
>{{ item.content }}</p>
</div>
<img
:src="item.imgUrl"
@click="item.url ? jump(item.url) : ''"
class="pointer"
style="width: 452px"
v-if="item.imgUrl"
/>
<!-- <a-button v-else style="width: 452px; height: 100%">123</a-button> -->
<add-model :value="1" ref="child" style="width: 452px" v-else />
</div>
<div
@click="item.url ? jump(item.url) : ''"
class="d-flex justify-space-between pointer"
v-else
>
<img :src="item.imgUrl" style="width: 452px" />
<div class="introduce-box">
<p class="introduce-title">{{ item.title }}</p>
<p class="introduce-content">{{ item.content }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import AddModel from '../components/AddModel.vue';
export default {
name: 'MakerSpace',
components: { BreadCrumb, HNav, Banner, AddModel },
data() {
return {
showPage: 41,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '' },
],
list: [
{
title: '实体空间',
content: '实体空间由孵化场所、公共实验室、中试基地部分组成。',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210106/9059bddfe0254a269bf8f575c917b199.png',
url: '/IncubationPlatform/MakerSpace/EntitySpace',
},
{
title: '虚拟空间',
content:
'虚拟众创空间主要面向非入驻实体空间从事功能食品、生物医药和大健康产业相关研发服务和生产的企业。虚拟众创空间依托绿谷数字化平台进行建设,入驻企业可享受实体众创空间的各种创新创业服务,参加相关创新创业活动。',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210106/73cba2c598e24bc99d4b988185138f44.png',
url: '/IncubationPlatform/MakerSpace/VirtualSpace',
},
{
title: '加入我们',
content: '绿谷众创空间有专业的团队,专业的资源,专业的服务,让我们一起做专业的事,让每一个梦想在这里腾飞。',
imgUrl: '',
url: '',
},
],
};
},
methods: {
jump(url) {
this.$router.push(url);
},
openModel() {
this.$refs.child[0].showModal();
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

39
src/views/IncubationPlatform/Children/Partner.vue

@ -1,39 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="py-5 my-5">
<partner-ship :title="title" :type-of-platform="typeOfPlatform" />
</div>
</div>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import PartnerShip from 'components/Introduce/PartnerShip.vue';
export default {
name: 'Partner',
components: { HNav, BreadCrumb, PartnerShip },
data() {
return {
title: '合作伙伴',
typeOfPlatform: '孵化平台',
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '合作伙伴', url: '' },
],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

44
src/views/IncubationPlatform/Children/PilotBase.vue

@ -1,44 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="white pa-5 my-5">
<rich-text :title="title" />
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import RichText from 'components/Introduce/RichText.vue';
export default {
name: 'PilotBase',
components: { Banner, HNav, BreadCrumb, RichText },
data() {
return {
title: '孵化平台-中试基地',
showPage: 43,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' },
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' },
{ name: '中试基地', url: '' },
],
};
},
methods: {},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

168
src/views/IncubationPlatform/Children/Products.vue

@ -1,168 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div>
<div class="search-background">
<div class="d-flex">
<div class="flex-3 flex-wrap">
<span class="ins-title">产品类目</span>
<span
:class="item.isActive ? 'act-color' : ''"
:key="index"
@click="choose(index)"
class="ins-name"
v-for="(item, index) in productLists"
>{{ item.name }}</span>
</div>
<div class="flex-1 align-center">
<a-input-search
@search="searchProduct"
class="item-search"
enter-button="搜索"
placeholder="请输入"
v-model="productIpt"
/>
</div>
</div>
</div>
</div>
<p class="font-bold-24">产品展示</p>
</div>
<platform-list />
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { selModel } from 'config/api';
import PlatformList from 'components/PlatformList/PlatformList.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Products',
components: { BreadCrumb, HNav, PlatformList },
data() {
return {
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '产品展示', url: '' },
],
productIpt: '', //
productLists: [], //
productList: [], //
};
},
watch: {
productIpt(val) {
const obj = {
content: this.productIpt,
isBtn: 0,
};
this.setProductIpt(obj);
},
},
created() {
const obj = {
content: '',
isBtn: 0,
};
this.setListState(3);
this.setProductList([]);
this.setProductIpt(obj);
this.getType(3);
},
methods: {
...mapMutations('home', ['setProductIpt', 'setProductList', 'setListState']),
async getType(num) {
try {
const params = { param: { model: num } };
const res = await selModel(params);
const { code, mst, data } = res.data;
if (code === 200) {
this.productLists = data;
for (let i = 0; i < this.productLists.length; i++) {
this.productLists[i].isActive = false;
}
}
} catch (error) {
console.log(error);
}
},
//
choose(index) {
this.productList = [];
const { productLists } = this;
for (let i = 0; i < productLists.length; i++) {
productLists[i].isActive = false;
}
this.setListState(3);
productLists[index].isActive = !productLists[index].isActive;
this.productLists = [...productLists];
for (let i = 0; i < productLists.length; i++) {
if (productLists[i].isActive) {
this.productList.push(productLists[i].id);
}
}
this.setProductList(this.productList);
},
//
searchProduct() {
const { productLists } = this;
for (let i = 0; i < productLists.length; i++) {
productLists[i].isActive = false;
}
this.productLists = [...productLists];
this.setListState(3);
this.productIpt = '';
const obj = {
content: this.productIpt,
isBtn: 1,
};
this.setProductList(obj);
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 100%;
margin: 40px auto;
line-height: 44px;
}
.item-search {
width: 100%;
height: 32px;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
</style>

44
src/views/IncubationPlatform/Children/PublicLaboratory.vue

@ -1,44 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="white pa-5 my-5">
<rich-text :title="title" />
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import RichText from 'components/Introduce/RichText.vue';
export default {
name: 'PublicLaboratory',
components: { Banner, HNav, BreadCrumb, RichText },
data() {
return {
title: '孵化平台-公共实验室',
showPage: 42,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' },
{ name: '实体众创空间', url: '/IncubationPlatform/MakerSpace/EntitySpace' },
{ name: '公共实验室', url: '' },
],
};
},
methods: {},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
</style>

140
src/views/IncubationPlatform/Children/Services.vue

@ -1,140 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="flow-path">
<div class="flow-title">服务流程</div>
<div class="flow-content">
<img src="~assets/image.png" style="width:100%" />
</div>
</div>
<div class="inner d-flex flex-wrap">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8"
v-for="(item, index) in list"
>
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" />
<p class="font-24 my-4">{{ item.name }}</p>
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p>
<p
@click="jump(item.id)"
class="font-16 baseColor"
style="text-align: right; cursor: pointer"
>了解更多</p>
</div>
</div>
<div class="inner">
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 8"
/>
</div>
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { selService } from 'config/api';
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Services',
components: { Banner, HNav, BreadCrumb },
data() {
return {
title: '创业服务',
showPage: 46,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '创业服务', url: '/IncubationPlatform/Services' },
],
list: [],
current: 1,
pageSize: 8,
total: 0,
};
},
created() {
this.getService();
},
methods: {
...mapMutations('home', ['setServiceArr']),
//
onShowSizeChange(current, size) {
this.current = current;
},
//
async getService() {
try {
const params = { param: { serviceType: 2 } };
const res = await selService(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.list = data;
}
} catch (error) {
console.log(data);
}
},
//
jump(id) {
console.log(id);
this.setServiceArr([]);
this.setServiceArr(this.arr);
this.$router.push({
path: '/NewPlatform/ServiceDet',
name: 'ServiceDet',
params: { id },
});
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
.pagination {
text-align: right;
}
.item-box {
width: 20.5%;
margin-right: 6%;
border-radius: 4px;
}
.item-content {
display: -webkit-box;
overflow: hidden;
white-space: normal !important;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 60px;
}
.margin-0 {
margin-right: 0 !important;
}
</style>

97
src/views/IncubationPlatform/Children/Tutor.vue

@ -1,97 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
<div class="py-5 my-5" v-if="teachers && teachers.length > 0">
<div :key="teacher.categoryId" class="mb-4" v-for="teacher in teachers">
<p class="font-bold-24 title-color">{{ teacher.categoryName }}</p>
<div class="d-flex flex-wrap mb-10" v-if="teacher.services && teacher.services.length">
<div
:class="(index + 1) % 5 === 0 ? 'teacher-item1' : ''"
:key="index"
class="teacher-item font-24 mb-3"
v-for="(item, index) in teacher.services"
>
{{ item.name }}
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import { selTeacher } from 'config/api';
export default {
name: 'Tutor',
components: { Banner, HNav, BreadCrumb },
data() {
return {
title: '孵化平台-创业导师',
showPage: 44,
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '创业导师', url: '' },
],
teachers: [],
};
},
created() {
this.handleTeacher();
},
methods: {
//
async handleTeacher() {
try {
const res = await selTeacher();
const { code, msg, data } = res.data;
if (code === 200) {
this.teachers = data;
for (let i = 0; i < this.teachers.length; i++) {
const element = this.teachers[i];
for (let j = 0; j < element.services.length; j++) {
for (let k = 0; k < element.services.length - j; k++) {
if (element.services[k].order > element.services[k + 1].order) {
let a = {};
a = element.services[k + 1].order;
element.services[k + 1].order = element.services[k].order;
element.services[k].order = a;
}
}
}
}
} else {
this.$message.error(msg);
}
} catch (error) {
this.$message.error(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 40px auto;
}
.teacher-item {
width: 12%;
margin-right: 10%;
text-indent: 1em;
}
.teacher-item1 {
margin-right: 0;
}
</style>

57
src/views/IncubationPlatform/Children/components/SenNav.vue

@ -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>

274
src/views/IncubationPlatform/Children/place/EntitySpace.vue

@ -1,274 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="top-box">
<div class="top-title">实体众创空间</div>
<div class="top-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
</div>
<!-- 孵化场所 -->
<div @click="$router.push('/IncubationPlatform/Incubator')" class="center-box c-box pointer">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">孵化场所</div>
</div>
<div class="center-content">
孵化场所分为运营办公区公共空间区独立空间区和开放办公区公共空间区包括路演厅
项目路演知识培训产品展示等多项功能会议室洽谈室第三空间创业咖啡
开放空间区按功能食品生物医药数字健康领域进行分区设置
</div>
</div>
<!-- 公共实验室 -->
<div @click="$router.push('/IncubationPlatform/PublicLaboratory')" class="center-box pointer">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">公共实验室</div>
</div>
<div class="center-content">
公共实验室位于太原市师范街50号山西省生物研究院有限公司总面积1320平方米
建有医药生物技术山西省重点实验室山西省发酵工程中试基地山西省乳品
发酵中试基地等省级科技创新平台具有检验检测机构资质认定证书CMA实验室
拥有20万以上仪器设备26台套包括AKTA蛋白纯化系统多功能酶标仪原子吸收光谱仪
液相色谱仪万级无菌工作间P2实验室等多种高端大型实验仪器设备可提供生物医药
食品检测食用菌肠道微生物等方面的科学实验检验检测小试中试等技术服务与科研成果转化
</div>
</div>
<!-- 中试基地 -->
<div @click="$router.push('/IncubationPlatform/PilotBase')" class="center-box c-box pointer">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">中试基地</div>
</div>
<div class="center-content d-flex flex-column">
<div>发酵工程中试基地位于山西维尔乳制品有限公司基地具有发酵乳制品等生产加工条件可提供微生物发酵实验及相关中试</div>
<div>超高压食品加工中试基地位于太原市小店区正阳街43号的山西力德福科技有限公司基地具有非热杀菌保鲜生产线超高压设备制造生产线及中试车间可提供超高压加工实验及相关中试和产业化服务</div>
<div>干果精深加工中试基地位于吕梁的交城天娇红农业科技有限公司 拥有300余万元的先进分析检测仪器设备及免洗干枣生产车间浓缩枣汁生产车间等生产加工条件可提供相关中试研究</div>
</div>
</div>
<!-- 加入流程 -->
<div class="center-box">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">加入流程</div>
</div>
<div class="center-content">
<div class="join-us-box">
<img class="fill-width" src="~assets/join-us.png" />
<div class="material-box d-flex flex-row justify-center">
<a-tooltip placement="top">
<template slot="title">
<div>
<p>资料</p>
<p>1.入孵申请表</p>
<p>2.营业执照复印件尚未注册的无须提供未注册提供注册信息登记表</p>
<p>3.法定代表或授权代表身份证复印件</p>
<p>4.主导产品或技术简介</p>
</div>
</template>
<div class="material"></div>
</a-tooltip>
</div>
</div>
</div>
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> -->
<add-model :value="2" class="center-btn" style="height: 32px" />
</div>
<!-- 入驻企业名录 -->
<div class="center-box c-box" style="margin-bottom: 160px">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">入驻企业名录</div>
</div>
<div class="center-content">
<div class="d-flex flex-wrap">
<div
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''"
:key="index"
class="ent-box"
v-for="(item, index) in lists"
>
<p class="ent-index">{{ index + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item }}</span>
</div>
</div>
</div>
<div class="reg-box">
<a-button class style="float: left" type="primary">入驻企业注册</a-button>
<a-pagination
:current="current"
:page-size="pageSize"
:total="lists.length"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="lists.length > 18"
/>
</div>
</div>
</div>
</template>
<script>
import HNav from '../../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import AddModel from './../../components/AddModel.vue';
export default {
name: 'EntitySpace',
components: { HNav, BreadCrumb, AddModel },
data() {
return {
title: '实体众创空间',
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' },
{ name: '实体众创空间', url: '' },
],
list: [],
pageSize: 18,
current: 1,
lists: [
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
],
};
},
methods: {
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.center-btn {
position: absolute;
left: 26.2%;
bottom: 100px;
}
.pagination {
float: right;
}
.c-box {
background: none !important;
}
.big-btn {
width: 213px;
height: 166px;
background: #13ACC4;
opacity: 1;
}
.big-con {
width: 96px;
height: 31px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: #FFFFFF;
opacity: 1;
}
.margin-0 {
margin-right: 0 !important;
}
.ent-box {
width: 26%;
margin-right: 11%;
position: relative;
height: 56px;
line-height: 56px;
padding: 0 14px;
background: #FFFFFF;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
opacity: 1;
margin-bottom: 20px;
}
.ent-index {
width: 28px;
position: absolute;
top: 14px;
line-height: 28px;
text-align: center;
font-size: 20px;
font-family: Segoe UI;
color: #FFFFFF;
height: 28px;
border-radius: 50%;
background: #13ACC4;
margin-bottom: 0;
}
.ent-name {
font-size: 20px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 24px;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
}
.reg-box {
position: absolute;
left: 26.2%;
bottom: 100px;
width: 64.8%;
overflow: hidden;
}
.join-us-box {
width: 100%;
position: relative;
.material-box {
width: 100%;
height: 88px;
position: absolute;
top: 0px;
left: 0px;
.material {
width: 10%;
height: 100%;
}
}
}
</style>

228
src/views/IncubationPlatform/Children/place/VirtualSpace.vue

@ -1,228 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="top-box">
<div class="top-title">虚拟众创空间</div>
<div
class="top-content"
>虚拟众创空间主要面向非入驻实体空间从事功能食品生物医药和大健康产业相关研发服务和生产的企业虚拟众创空间依托绿谷数字化平台进行建设入驻企业可享受实体众创空间的各种创新创业服务参加相关创新创业活动</div>
</div>
<div class="center-box">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">加入流程</div>
</div>
<div class="center-content">
<div class="join-us-box">
<img class="fill-width" src="~assets/join-us.png" />
<div class="material-box d-flex flex-row justify-center">
<a-tooltip placement="top">
<template slot="title">
<div>
<p>资料</p>
<p>1.入孵申请表</p>
<p>2.营业执照复印件尚未注册的无须提供未注册提供注册信息登记表</p>
<p>3.法定代表或授权代表身份证复印件</p>
<p>4.主导产品或技术简介</p>
</div>
</template>
<div class="material"></div>
</a-tooltip>
</div>
</div>
</div>
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> -->
<add-model :value="3" class="center-btn" style="height: 32px" />
</div>
<div class="center-box c-box" style="margin-bottom: 160px">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">入驻企业名录</div>
</div>
<div class="center-content">
<div class="d-flex flex-wrap">
<div
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''"
:key="index"
class="ent-box"
v-for="(item, index) in lists"
>
<p class="ent-index">{{ index + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item }}</span>
</div>
</div>
</div>
<div class="reg-box">
<a-button class style="float: left" type="primary">入驻企业注册</a-button>
<a-pagination
:current="current"
:page-size="pageSize"
:total="lists.length"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="lists.length > 18"
/>
</div>
</div>
</div>
</template>
<script>
import HNav from '../../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import AddModel from './../../components/AddModel.vue';
export default {
name: 'VirtualSpace',
components: { HNav, BreadCrumb, AddModel },
data() {
return {
title: '虚拟众创空间',
arr: [
{ name: '孵化平台', url: '/IncubationPlatform/MakerSpace' },
{ name: '众创空间', url: '/IncubationPlatform/MakerSpace' },
{ name: '虚拟众创空间', url: '' },
],
list: [],
pageSize: 18,
current: 1,
lists: [
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
'XX企业',
],
};
},
methods: {
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.center-btn {
position: absolute;
left: 26.2%;
bottom: 100px;
}
.pagination {
float: right;
}
.c-box {
background: none !important;
}
.big-btn {
width: 213px;
height: 166px;
background: #13ACC4;
opacity: 1;
}
.big-con {
width: 96px;
height: 31px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: #FFFFFF;
opacity: 1;
}
.margin-0 {
margin-right: 0 !important;
}
.ent-box {
width: 26%;
margin-right: 11%;
position: relative;
height: 56px;
line-height: 56px;
padding: 0 14px;
background: #FFFFFF;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
opacity: 1;
margin-bottom: 20px;
}
.ent-index {
width: 28px;
position: absolute;
top: 14px;
line-height: 28px;
text-align: center;
font-size: 20px;
font-family: Segoe UI;
color: #FFFFFF;
height: 28px;
border-radius: 50%;
background: #13ACC4;
margin-bottom: 0;
}
.ent-name {
font-size: 20px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 24px;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
}
.reg-box {
position: absolute;
left: 26.2%;
bottom: 100px;
width: 64.8%;
overflow: hidden;
}
.join-us-box {
width: 100%;
position: relative;
.material-box {
width: 100%;
height: 88px;
position: absolute;
top: 0px;
left: 0px;
.material {
width: 10%;
height: 100%;
}
}
}
</style>

14
src/views/IncubationPlatform/IncubationPlatform.vue

@ -1,14 +0,0 @@
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'IncubationPlatform',
data() {
return {};
},
};
</script>

292
src/views/IncubationPlatform/components/AddModel.vue

@ -1,292 +0,0 @@
<template>
<div>
<img
@click="showModal"
class="fill-width fill-height pointer"
src="https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/logo/join-space.png"
v-if="value === 1"
/>
<a-button @click="showModal" style="height: 100%; width: 100%" type="primary" v-else>{{ str }}</a-button>
<a-modal
:confirm-loading="confirmLoading"
:title="title"
:visible="visible"
@cancel="handleCancel"
@ok="handleOk"
width="50%"
>
<p style="text-align: center" v-show="value !== 1">
<a-radio-group style="margin-bottom: 20px !important" v-model="value">
<a-radio :value="2" style="margin-right: 100px">实体空间</a-radio>
<a-radio :value="3">虚拟空间</a-radio>
</a-radio-group>
</p>
<a-form :form="form">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="公司名称"
>
<a-input placeholder="请输入公司名称..." v-model.trim="platform.companyName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系人"
required
>
<a-input placeholder="请输入联系人..." v-model.trim="platform.manName" />
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="联系电话"
required
>
<a-input
@change="changePhone"
placeholder="请输入联系电话.."
type="tel"
v-decorator="['tel', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button>
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> -->
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" />
<a-button
class="code_img ml-2"
disabled
type="primary"
v-if="showInterval"
>重新发送 {{ interval }}</a-button>
<a-button
:disabled="platform.isTel === false"
@click="getCode"
class="code_img ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="合作信息简述"
required
>
<a-textarea
placeholder="请输入合作信息简述..."
style="height: 120px"
v-model.trim="platform.describe"
/>
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import { JoinPlatform } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
export default {
name: 'AddModel',
props: {
value: {
type: Number,
default: 1,
},
},
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
title: '申请加入',
str: '申请加入',
formItemLayout,
formTailLayout,
confirmLoading: false,
platform: {
companyName: '', //
manName: '', //
tel: '', //
describe: '', //
code: '', //
isTel: false,
},
codeRules: [
{ required: true, message: '请输入验证码' },
{ min: 4, max: 4, message: '请输入4位短信验证码' },
],
codeNum: '',
showInterval: false,
codeTimer: null,
interval: 120, //
phoneRules: [
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' },
],
};
},
computed: mapState('user', ['picCode']),
async created() {
this.sendPicCode();
await this.getUserSer();
if (this.userSer) {
if (this.userSer.name) {
this.platform.manName = this.userSer.name;
}
if (this.userSer.phone) {
this.platform.tel = this.userSer.phone;
}
if (this.userSer.companyName) {
this.platform.companyName = this.userSer.companyName;
}
}
},
methods: {
...mapActions('user', ['sendCode', 'sendPicCode']),
...mapActions('home', ['getUserSer']),
//
showModal() {
this.visible = true;
},
//
handleCancel(e) {
this.visible = false;
},
//
changePhone(e) {
this.platform.tel = e.target.value;
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel);
},
//
handleOk() {
if (!this.platform.manName) {
this.$message.error('请输入联系人');
} else if (!this.platform.tel) {
this.$message.error('请输入联系电话');
} else if (!this.platform.code) {
this.$message.error('请输入验证码');
} else if (!this.platform.describe) {
this.$message.error('请输入项目信息简述');
} else {
if (this.platform.isTel) {
this.subMitAdd();
} else {
this.$message.error('请输入正确的联系电话');
}
}
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
code: this.platform.code,
companyName: this.platform.companyName,
contactName: this.platform.manName,
contactPhone: this.platform.tel,
description: this.platform.describe,
type: this.value,
},
};
const res = await JoinPlatform(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('申请成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
this.platform.isTel = false;
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
//
async getCode() {
console.log(111);
try {
const params = {
phone: this.platform.tel,
verificationCodeId: this.picCode.verificationCodeId,
verificationCodeValue: this.codeNum,
};
await this.sendCode(params);
this.getCodeInterval();
} catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`);
console.log(error);
}
},
//
getCodeInterval() {
this.showInterval = true;
this.codeTimer = setInterval(() => {
if (this.interval === 0) {
clearInterval(this.codeTimer);
this.codeTimer = null;
this.showInterval = false;
this.interval = 120;
return;
}
this.interval = this.interval - 1;
}, 1000);
},
//
changePicCode() {
this.sendPicCode();
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
</style>

68
src/views/IncubationPlatform/components/HNav.vue

@ -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>

37
src/views/Industry/Children/Enterprise.vue

@ -1,37 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div>
<derive-enterprise :title="title" :type-of-platform="typeOfPlatform" />
</div>
</div>
</template>
<script>
import HNav from './components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import DeriveEnterprise from 'components/Introduce/DeriveEnterprise.vue';
export default {
name: 'Enterprise',
components: { HNav, BreadCrumb, DeriveEnterprise },
data() {
return {
title: '衍生企业',
typeOfPlatform: '产业平台',
arr: [
{ name: '产业平台', url: '/Challenge/Union' },
{ name: '衍生企业', url: '' },
],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
</style>

121
src/views/Industry/Children/Serve.vue

@ -1,121 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="flow-path">
<div class="flow-title">服务流程</div>
<div class="flow-content">
<img src="~assets/image.png" style="width:100%" />
</div>
</div>
<div class="inner d-flex flex-wrap" style="margin: 60px auto">
<div
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8"
v-for="(item, index) in list"
>
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" />
<p class="font-24 my-4">{{ item.name }}</p>
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p>
<p
@click="jump(item.id)"
class="font-16 baseColor"
style="text-align: right; cursor: pointer"
>了解更多</p>
</div>
</div>
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { selService } from 'config/api';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import Banner from 'components/Banner/Banner.vue';
import HNav from './components/HNav.vue';
export default {
name: 'Serve',
components: { HNav, Banner, BreadCrumb },
data() {
return {
title: '产业服务',
typeOfPlatform: '产业平台',
arr: [
{ name: '产业平台', url: '/Challenge/Union' },
{ name: '产业服务', url: '/Industry/Serve' },
],
showPage: 52,
list: [],
current: 1,
pageSize: 8,
total: 0,
};
},
created() {
this.getService();
},
methods: {
...mapMutations('home', ['setServiceArr']),
//
async getService() {
try {
const params = { param: { serviceType: 3 } };
const res = await selService(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.list = data;
}
} catch (error) {
console.log(data);
}
},
//
jump(id) {
this.setServiceArr([]);
this.setServiceArr(this.arr);
this.$router.push({
path: '/NewPlatform/ServiceDet',
name: 'ServiceDet',
params: { id },
});
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.item-box {
position: relative;
width: 26%;
margin-right: 11%;
border-radius: 4px;
}
.margin-0 {
margin-right: 0 !important;
}
.item-content {
display: -webkit-box;
overflow: hidden;
white-space: normal !important;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 60px;
}
</style>

184
src/views/Industry/Children/Union.vue

@ -1,184 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="top-box">
<div class="top-title">产业创新联盟</div>
<div class="top-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
</div>
<div class="center-box">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">加入流程</div>
</div>
<div class="center-content">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通
线上线下相结合的融合发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统
构筑专业化集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理
赋能健康中国筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放
式创新创业高地为使命大力推动建设共融共生共建 共创价值共同体
</div>
<new-model class="center-btn" />
<!-- <a-button class="center-btn" type="primary">申请加入</a-button> -->
</div>
<div class="center-box c-box" style="margin-bottom: 160px">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">联盟名录</div>
</div>
<div class="center-content">
<div class="d-flex flex-wrap">
<div
:class="(index + 1) % 3 === 0 ? 'margin-0' : ''"
:key="index"
class="ent-box"
v-for="(item, index) in lists"
>
<p class="ent-index">{{ index + 1 }}</p>
<span class="ent-name" style="margin-left: 50px">{{ item }}</span>
</div>
</div>
</div>
<div class="reg-box">
<a-button class style="float: left" type="primary">入驻企业注册</a-button>
<a-pagination
:current="current"
:page-size="pageSize"
:total="lists.length"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="lists.length > 18"
/>
</div>
</div>
</div>
</template>
<script>
import HNav from './components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import NewModel from '../../NewPlatform/components/NewModel.vue';
export default {
name: 'Union',
components: { HNav, BreadCrumb, NewModel },
data() {
return {
title: '产业创新联盟',
typeOfPlatform: '产业平台',
arr: [
{ name: '产业平台', url: '/Challenge/Union' },
{ name: '产业创新联盟', url: '' },
],
list: [],
pageSize: 18,
current: 1,
lists: ['XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业', 'XX企业'],
};
},
methods: {
//
onShowSizeChange(current, size) {
this.current = current;
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.center-btn {
position: absolute;
left: 26.2%;
bottom: 100px;
}
.pagination {
float: right;
}
.c-box {
background: none !important;
}
.big-btn {
width: 213px;
height: 166px;
background: #13ACC4;
opacity: 1;
}
.big-con {
width: 96px;
height: 31px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: #FFFFFF;
opacity: 1;
}
.margin-0 {
margin-right: 0 !important;
}
.ent-box {
width: 26%;
margin-right: 11%;
position: relative;
height: 56px;
line-height: 56px;
padding: 0 14px;
background: #FFFFFF;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
opacity: 1;
margin-bottom: 20px;
}
.ent-index {
width: 28px;
position: absolute;
top: 14px;
line-height: 28px;
text-align: center;
font-size: 20px;
font-family: Segoe UI;
color: #FFFFFF;
height: 28px;
border-radius: 50%;
background: #13ACC4;
margin-bottom: 0;
}
.ent-name {
font-size: 20px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 24px;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
}
.reg-box {
position: absolute;
left: 26.2%;
bottom: 100px;
width: 64.8%;
overflow: hidden;
}
</style>

54
src/views/Industry/Children/components/HNav.vue

@ -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>

14
src/views/Industry/Industry.vue

@ -1,14 +0,0 @@
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'Industry',
data() {
return {};
},
};
</script>

213
src/views/ItInformation/ItInformation.vue

@ -1,213 +0,0 @@
<!--
Copyright (c) 2020.
author: bin
email: binbin0314@126.com
-->
<template>
<div class="inner">
<div class="policy-box">
<div :key="index" class="policy-list" v-for="(item, index) in lists">
<div @click="jumpDetails(item)" class="date-box pointer" v-if="item.time">
<p class="date-mon">{{ monthEnglish[item.time.split('-')[1] - 1] }}.</p>
<p class="date-day">{{ item.time.split(' ')[0].split('-')[2] }}</p>
</div>
<p @click="jumpDetails(item)" class="item-title pointer">{{ item.title }}</p>
<p @click="jumpDetails(item)" class="item-content pointer">{{ item.content }}</p>
<p class="source-time">
<span class="source">时间{{ item.time }}</span>
<span class="source">地点{{ item.site }}</span>
</p>
</div>
</div>
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 5"
/>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { industryInfo } from 'config/api';
export default {
name: 'ItInformation',
data() {
return {
str: '这是行业资讯界面',
lists: [],
total: 0,
pageSize: 5,
current: 1,
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'],
};
},
created() {
this.getData();
},
methods: {
...mapMutations('home', ['setActDetail']),
async getData() {
try {
const params = {
param: {
pageNum: this.current,
pageSize: this.pageSize,
},
};
const res = await industryInfo(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.lists = data.list;
this.total = parseInt(data.total);
for (var i = 0; i < this.lists.length; i++) {
// this.lists[i].time = moment(this.lists[i].time).format('YYYY-MM-DD');
this.lists[i].time = this.$moment(parseInt(this.lists[i].time) * 1000).format('YYYY-MM-DD');
}
} else {
console.log(msg);
}
} catch (error) {
this.$message.error(error);
}
},
onShowSizeChange(current) {
this.current = current;
this.getData();
},
//
jumpDetails(item) {
this.setActDetail(item);
this.$router.push('/ActDetails');
},
},
};
</script>
<style scoped lang="stylus">
.inner {
margin: 40px auto;
}
.policy-box {
.policy-list {
position: relative;
width: 100%;
height: 238px;
overflow: hidden;
background: #fff;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
margin-top: 24px;
padding: 25px;
}
}
.item-title {
margin-left: 200px;
overflow: hidden;
display: -webkit-box;
font-size: 24px;
color: rgba(0, 0, 0, 0.65);
font-family: Microsoft YaHei;
font-weight: bold;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.item-content {
margin-left: 200px;
text-indent: 2em;
font-size: 16px;
color: rgba(0, 0, 0, 0.35);
line-height: 36px;
font-family: Microsoft YaHei;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.source {
cursor: pointer;
font-family: Microsoft YaHei;
font-weight: 400;
opacity: 1;
margin-right: 24px;
}
.time {
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.25);
opacity: 1;
}
.original {
position: absolute;
right: 25px;
bottom: 25px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
opacity: 1;
margin-bottom: 0;
span {
cursor: pointer;
}
}
.date-box {
height: 188px !important;
width: 188px !important;
position: absolute !important;
top: 0 !important;
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
text-align: center;
box-shadow: none !important;
padding: 25px;
margin-top: 24px;
p {
margin-bottom: 0 !important;
}
}
.date-mon {
font-size: 40px;
height: 40px;
line-height: 40px;
font-weight: 500;
color: #13ACC4;
}
.date-day {
font-size: 70px;
height: 80px;
line-height: 80px;
font-weight: bold;
color: #13ACC4;
}
.source-time {
margin-left: 200px;
position: absolute;
bottom: 26px;
margin-bottom: 0;
}
.pagination {
margin-top: 68px;
text-align: right;
}
</style>

41
src/views/Knowledge/Knowledge.vue

@ -1,41 +0,0 @@
<template>
<div>
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="dev-box">
<img src="~assets/build.png" />
</div>
</div>
</template>
<script>
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Knowledge',
components: { BreadCrumb },
data() {
return {
str: '知识培训服务平台',
title: '知识平台',
typeOfPlatform: '知识平台',
arr: [{ name: '知识平台', url: '/Knowledge' }],
list: [],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 20px auto;
}
.dev-box {
width: 100%;
img {
width: 100%;
}
}
</style>

171
src/views/NewPlatform/Children/AchDet.vue

@ -1,171 +0,0 @@
<template>
<div class="inner equ-box">
<div class="equ-info d-flex">
<img :src="obj.visitLocation" />
<div class="equ-info-box mb-5">
<p class="equ-name">{{ obj.name }}</p>
<div class="d-flex flex-wrap">
<div class="equ-info-left" style="width: 200px">
<p>成果名字</p>
<p>学科分类</p>
<p>联系人</p>
<p>联系方式</p>
<p>转让形式</p>
<p>成果表现形式</p>
<p>成果阶段</p>
</div>
<div style="width: 500px">
<p>{{ obj.name }}</p>
<p>{{ obj.classification === 0 ? '中医药学' : '' }}</p>
<p>
<span :key="index" v-for="(item, index) in obj.selPeoList">{{ item.contactsName }}</span>
</p>
<p>
<span :key="index" v-for="(item, index) in obj.selPeoList">{{ item.contactsPhone }}</span>
</p>
<p>
{{ obj.layout === 0 ? '产权转让' :
obj.layout === 1 ? '资金入股' :
obj.layout === 2 ? '技术入股' :
obj.layout === 3 ? '合作开发' :
obj.layout === 0 ? '技术服务' : '其他'}}
</p>
<p>
{{ obj.performance === 0 ? '国际标准' :
obj.performance === 1 ? '国家标准' :
obj.performance === 2 ? '行业标准' :
obj.performance === 3 ? '地方标准' :
obj.performance === 4 ? '企业标准' :
obj.performance === 5 ? '新技术' :
obj.performance === 6 ? '新工艺' :
obj.performance === 7 ? '新产品' :
obj.performance === 8 ? '新材料' :
obj.performance === 9 ? '新装备' :
obj.performance === 10 ? '农业、生物新品种' :
obj.performance === 11 ? '矿产新品种' : '其他应用技术'}}
</p>
<p>
{{ obj.stage === 0 ? '初期阶段' :
obj.stage === 1 ? '中期阶段' : '成熟应用阶段' }}
</p>
</div>
</div>
<div class="equ-btn">
<!-- <a-button style="margin-right: 20px">转化意向</a-button> -->
<intention-model :type-data="typeData" style="margin-right: 20px; float: left" />
<!-- <a-button type="primary">加入购物车</a-button> -->
<add-shopping :type-data="typeData" style="margin-right: 20px; float: right" />
</div>
</div>
</div>
<div class="content-box">
<div v-dompurify-html="obj.content"></div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { selResMes } from 'config/api';
import IntentionModel from 'components/Introduce/IntentionModel.vue';
import AddShopping from 'components/Introduce/AddShopping.vue';
export default {
name: 'AchDet',
components: { IntentionModel, AddShopping },
data() {
return {
obj: {},
typeData: {
type: 2,
Id: '',
},
};
},
computed: mapState('home', ['achId']),
created() {
this.typeData.Id = this.achId;
this.getData();
},
methods: {
async getData() {
try {
const params = { param: { id: this.achId } };
const res = await selResMes(params);
const { code, data, msg } = res.data;
if (code === 200) {
console.log(data);
this.obj = data;
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.equ-box {
background: #fff;
padding: 20px;
margin: 60px auto;
}
.equ-info {
border-bottom: 1px solid rgba(0, 0, 0, 0.14901960784313725);
position: relative;
img {
width: 300px;
height: 300px;
}
}
.equ-name {
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
}
.equ-info-box {
position: relative;
font-size: 16px;
margin-left: 20px;
height: 300px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
p {
margin-bottom: 6px;
}
}
.equ-info-left {
font-size: 16px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.45);
opacity: 1;
p {
margin-bottom: 6px;
}
}
.equ-btn {
position: absolute;
bottom: 0;
}
.content-box {
min-height: 400px;
padding: 20px;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
}
</style>

171
src/views/NewPlatform/Children/Core.vue

@ -1,171 +0,0 @@
<template>
<div>
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="top-box">
<div class="top-title">协同创新中心</div>
<div class="top-content">
<!-- <div class="white pa-5 my-5"> -->
<core-organ :title="title" />
<!-- </div> -->
</div>
</div>
<!-- <div class="center-box">
<div class="center-title">
<div class="circular"></div>
<div style="margin-left: 40px">组织机构</div>
</div>
<div class="center-content">
<rich-text :title="title1" />
</div>
</div>-->
<div class="bottom-box white">
<div class="bottom-title">
<div class="circular"></div>
<div style="margin-left: 40px">中心架构</div>
</div>
<div class="bottom-content">
<div
class="font-16 textColor line-height-36"
>协同创新中心围绕研发领域设立功能食品现代医药生物医学工程及数字健康开发四大协同创新平台根据研发方向设若干研发单元</div>
<div :style="{ height: '500px' }" id="treeChart"></div>
</div>
</div>
<!-- <div class="partner-box">
<div class="partner-title">
<div class="circular"></div>
<div style="margin-left: 40px">合作伙伴</div>
</div>
<div class="partner-content">
<de-ent />
</div>
</div>-->
<div class="join-box">
<div class="join-title">
<div class="circular"></div>
<div style="margin-left: 40px">申请加入</div>
</div>
<div class="join-content">
申请加入
<div>
<new-model />
</div>
</div>
</div>
</div>
</template>
<script>
import '@/common/platform.styl';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
// import DeEnt from './components/DeEnt.vue';
import NewModel from './../components/NewModel.vue';
// import RichText from 'components/Introduce/RichText.vue';
import CoreOrgan from 'components/CoreOrgan/CoreOrgan.vue';
export default {
name: 'Core',
components: { HNav, BreadCrumb, NewModel, CoreOrgan },
data() {
return {
str: '这是中心界面',
title: '创新平台-协同创新中心',
title1: '创新平台-组织机构',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '协同创新中心', url: '' },
],
list: [],
treedata: [
{
//[]
name: '协同创新中心',
children: [
{
name: '功能食品协同创新平台',
children: [
{ name: '功能食品资源开发' },
{ name: '营养健康功能因子分再鉴定及作用机制探究' },
{ name: '功能食品关键加工技术研发' },
{ name: '功能食品安全评价与风险监测' },
],
},
{
name: '现代医药协同创新平台',
children: [
{ name: '中医药与天然药物资源开发利用' },
{ name: '医药生物技术' },
{ name: '新药研发' },
{ name: '药理药效研究与安全评价' },
],
},
{
name: '生物医学工程协同创新平台',
children: [{ name: '生物信息技术' }, { name: '生物医学工程研发' }, { name: '生物力学和生物材料' }],
},
{
name: '数字健康开发协同创新平台',
children: [{ name: '健康医疗大数据挖掘与分析' }, { name: '基于纳米传感器的医疗健康' }, { name: '传染病预测预鉴数字技术' }],
},
{ name: '科技资源共享服务平台' },
{ name: '知识产权与技术转移转化服务平台' },
{ name: '创新服务' },
],
},
],
};
},
mounted() {
this.showChart();
},
methods: {
showChart() {
// domecharts
var myChart = this.$echarts.init(document.getElementById('treeChart'));
//
var option = {
tooltip: {
trigger: 'item',
triggerOn: 'mousemove',
},
series: [
{
type: 'tree',
data: this.treedata,
top: '2%',
left: '12%',
bottom: '1%',
right: '36%',
symbolSize: 7,
lineStyle: { width: 4 },
itemStyle: { borderWidth: 3, borderColor: '#AACD06' },
label: { position: 'left', verticalAlign: 'middle', align: 'right', fontSize: 16 },
leaves: {
label: {
position: 'right',
verticalAlign: 'middle',
align: 'left',
},
},
expandAndCollapse: true,
animationDuration: 550,
animationDurationUpdate: 750,
},
],
};
// 使
myChart.setOption(option);
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
</style>

46
src/views/NewPlatform/Children/Develop.vue

@ -1,46 +0,0 @@
<template>
<div>
<sen-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="dev-box">
<img src="~assets/build.png" />
</div>
</div>
</template>
<script>
import SenNav from './components/SenNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Develop',
components: { SenNav, BreadCrumb },
data() {
return {
title: '创新服务',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '/NewPlatform/News' },
{ name: '创新服务', url: '' },
],
list: [],
};
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 20px auto;
}
.dev-box {
width: 100%;
img {
width: 100%;
}
}
</style>

85
src/views/NewPlatform/Children/Platform.vue

@ -1,85 +0,0 @@
<template>
<div style="padding-bottom: 50px">
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="content-box">
<div
:key="index"
@click="jump(item.url)"
style="margin-top: 50px; cursor: pointer"
v-for="(item, index) in list"
>
<div class="d-flex justify-space-between" v-if="index % 2 === 0">
<div class="introduce-box">
<p class="introduce-title">{{ item.title }}</p>
<p class="introduce-content">{{ item.content }}</p>
</div>
<img :src="item.imgUrl" style="width: 452px" />
</div>
<div class="d-flex justify-space-between" v-else>
<img :src="item.imgUrl" style="width: 452px" />
<div class="introduce-box">
<p class="introduce-title">{{ item.title }}</p>
<p class="introduce-content">{{ item.content }}</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'News',
components: { HNav, Banner, BreadCrumb },
data() {
return {
str: '这是政策界面',
title: '创新资源平台',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '' },
],
showPage: 32,
list: [
{
title: '科技资源开放共享服务平台',
content: '研发试验、检验检测、资源共享',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/86d502b304944e0c849bff8dcf55ac08.jpg',
url: '/NewPlatform/Share',
},
{
title: '知识产权与技术转移转化服务平台',
content: '知识产权、成果转化、技术转移',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/4f9b898da25e48d3b73b47345ed14a9a.jpg',
url: '/NewPlatform/Transfer',
},
{
title: '知识培训与科技人才服务平台',
content: '技术培训、管理培训、知识讲座',
imgUrl: 'https://www.sxwikionline.com/gateway/greenvalley/uploads/upload/20210104/f5fb570cfd7547279138a591818325e0.jpg',
url: '/NewPlatform/Develop',
},
],
};
},
methods: {
jump(url) {
this.$router.push(url);
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
</style>

122
src/views/NewPlatform/Children/Service.vue

@ -1,122 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="flow-path">
<div class="flow-title">服务流程</div>
<div class="flow-content">
<img src="~assets/image.png" style="width:100%" />
</div>
</div>
<div class="inner d-flex flex-wrap" style="margin: 60px auto">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8"
v-for="(item, index) in list"
>
<img :src="item.picUrl" style="height: 220px; width: 100%; border: 1px solid #ccc" />
<p class="font-24 my-4">{{ item.name }}</p>
<p class="font-16 my-4 textColor line-height-30 item-content">{{ item.intro }}</p>
<p
@click="jump(item.id)"
class="font-16 baseColor"
style="text-align: right; cursor: pointer"
>了解更多</p>
</div>
</div>
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { selService } from 'config/api';
import Banner from 'components/Banner/Banner.vue';
import HNav from './../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Service',
components: { HNav, Banner, BreadCrumb },
data() {
return {
str: '这是服务界面',
title: '创新服务',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新服务', url: '/NewPlatform/NewService' },
],
showPage: 33,
list: [],
current: 1,
pageSize: 8,
total: 0,
};
},
created() {
this.getService();
},
methods: {
...mapMutations('home', ['setServiceArr']),
//
async getService() {
try {
const params = { param: { serviceType: 1 } };
const res = await selService(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.list = data;
}
} catch (error) {
console.log(data);
}
},
//
jump(id) {
this.setServiceArr([]);
this.setServiceArr(this.arr);
this.$router.push({
path: '/NewPlatform/ServiceDet',
name: 'ServiceDet',
params: { id },
});
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.item-box {
position: relative;
width: 20.5%;
margin-right: 6%;
border-radius: 4px;
}
.margin-0 {
margin-right: 0 !important;
}
.item-content {
display: -webkit-box;
overflow: hidden;
white-space: normal !important;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
height: 60px;
}
</style>

108
src/views/NewPlatform/Children/ServiceDet.vue

@ -1,108 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<div class="inner" style="margin-top:40px">
<a-breadcrumb>
<a-breadcrumb-item>绿谷生物</a-breadcrumb-item>
<a-breadcrumb-item :key="index" v-for="(item,index) in serviceArr">
<router-link :to="item.url">{{ item.name }}</router-link>
</a-breadcrumb-item>
</a-breadcrumb>
</div>
<div class="posi-name">
<p class="service-name">{{ obj.name }}</p>
<p class="service-eng">SERVICE</p>
</div>
<div class="inner service-box">
<!-- <div style="margin-bottom: 40px" v-dompurify-html="obj.content"></div> -->
<div style="margin-bottom: 40px">
山西绿谷生物科技股份有限公司立足功能食品生物医药和大健康产业聚焦创新聚力孵化聚合产业
致力建设集创新链孵化链和产业链为一体产学研协同多学科交叉大中小企业融通线上线下相结合的融合
发展机制和开放式创新创业平台培育打造全链条一体化新型社会研发机构和创新创业生态系统构筑专业化
集群化园区化产业发展新模式和新业态公司秉持创新开放协同融合发展理 赋能健康中国
筑梦绿色未来为愿景构建创新创业生态发展特色产业集群打造全链条一体化开放 式创新创业高地为使命
大力推动建设共融共生共建 共创价值共同体
</div>
<div>
<!-- <a-button>直接申请</a-button> -->
<intention-model :type-data="typeData" style="float: left; margin-right: 20px" />
<!-- <a-button type="primary">加入购物车</a-button> -->
<add-shopping :type-data="typeData" />
</div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { selContent } from 'config/api';
import IntentionModel from 'components/Introduce/IntentionModel.vue';
import Banner from 'components/Banner/Banner.vue';
import AddShopping from 'components/Introduce/AddShopping.vue';
export default {
name: 'ServiceDet',
components: { IntentionModel, Banner, AddShopping },
data() {
return {
showPage: 100,
obj: {
name: '',
id: '',
content: '',
},
typeData: {
type: 0,
Id: '',
},
};
},
computed: mapState('home', ['serviceArr']),
async created() {
this.typeData.Id = this.$route.params.id;
await this.getData(this.$route.params.id);
},
methods: {
async getData(id) {
try {
const params = { param: { id } };
const res = await selContent(params);
const { code, msg, data } = res.data;
if (code === 200) {
console.log(data);
this.obj = data;
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.service-box {
margin: 60px auto;
min-height: 400px;
padding: 20px;
background: #fff;
}
.posi-name {
position: absolute;
left: 20%;
top: 300px;
color: #fff;
text-align: center;
}
.service-name {
font-size: 40px;
margin-bottom: 0 !important;
}
.service-eng {
font-size: 16px;
}
</style>

231
src/views/NewPlatform/Children/Share.vue

@ -1,231 +0,0 @@
<template>
<div>
<sen-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div>
<div class="search-background">
<div class="d-flex">
<div class="flex-3 flex-wrap">
<span class="ins-title">研究开发实验室</span>
<span
v-for="(item, index) in laboratory"
:key="index"
:class="item.isActive ? 'act-color' : ''"
class="ins-name"
@click="choose(index, 0)"
>
{{ item.name }}
</span>
</div>
<div class="flex-1 align-center">
<a-input-search class="item-search" v-model="LabIpt" placeholder="搜索实验室" enter-button="搜索" @search="searchLab" />
</div>
</div>
<div style="border-top: 1px solid rgba(0, 0, 0, 0.06)" class="flex-3 flex-wrap">
<div class="flex-3 flex-wrap">
<span class="ins-title">大型科研设施与仪器</span>
<span
v-for="(item, index) in instrument"
:key="index"
:class="item.isActive ? 'act-color' : ''"
class="ins-name"
@click="choose(index, 1)"
>
{{ item.name }}
</span>
</div>
<div class="flex-1 align-center">
<a-input-search class="item-search" v-model="InsIpt" placeholder="搜索仪器" enter-button="搜索" @search="searchIns" />
</div>
</div>
</div>
</div>
<platform-list />
</div>
</template>
<script>
import { selModel } from 'config/api';
import PlatformList from 'components/PlatformList/PlatformList.vue';
import SenNav from './components/SenNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import { mapMutations } from 'vuex';
export default {
name: 'Share',
components: { SenNav, PlatformList, BreadCrumb },
data() {
return {
str: '这是科技资源开放共享服务平台',
title: '科技资源开放共享服务平台',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '/NewPlatform/News' },
{ name: '科技资源开放共享服务平台', url: '' },
],
LabIpt: '', //
laboratory: [], //
labList: [], //
InsIpt: '', //
instrument: [], //
insList: [], //
};
},
watch: {
LabIpt(val) {
const obj = {
content: this.LabIpt,
isBtn: 0,
};
this.setLabIpt(obj);
},
InsIpt(val) {
const obj = {
content: this.InsIpt,
isBtn: 0,
};
this.setInsIpt(obj);
},
},
created() {
const obj = {
content: '',
isBtn: 0,
};
this.setLabList([]);
this.setInsList([]);
this.setLabIpt(obj);
this.setInsIpt(obj);
this.getType(1);
this.getType(2);
},
methods: {
...mapMutations('home', ['setLabList', 'setInsList', 'setLabIpt', 'setInsIpt', 'setListState']),
async getType(num) {
try {
const params = { param: { model: num } };
const res = await selModel(params);
const { code, mst, data } = res.data;
if (code === 200) {
if (num === 1) {
this.instrument = data;
for (let i = 0; i < this.instrument.length; i++) {
this.instrument[i].isActive = false;
}
} else if (num === 2) {
this.laboratory = data;
for (let i = 0; i < this.laboratory.length; i++) {
this.laboratory[i].isActive = false;
}
}
}
} catch (error) {
console.log(error);
}
},
//
choose(index, num) {
const that = this;
if (num === 0) {
this.labList = [];
const { laboratory, instrument } = this;
for (let i = 0; i < instrument.length; i++) {
instrument[i].isActive = false;
}
this.setListState(0);
laboratory[index].isActive = !laboratory[index].isActive;
this.laboratory = [...laboratory];
for (let i = 0; i < laboratory.length; i++) {
if (laboratory[i].isActive) {
this.labList.push(laboratory[i].id);
}
}
this.setLabList(this.labList);
} else if (num === 1) {
this.insList = [];
const { laboratory, instrument } = this;
for (let i = 0; i < laboratory.length; i++) {
laboratory[i].isActive = false;
}
this.setListState(1);
instrument[index].isActive = !instrument[index].isActive;
this.instrument = [...instrument];
for (let i = 0; i < instrument.length; i++) {
if (instrument[i].isActive) {
this.insList.push(instrument[i].id);
}
}
this.setInsList(this.insList);
}
},
searchLab() {
const { instrument } = this;
for (let i = 0; i < instrument.length; i++) {
instrument[i].isActive = false;
}
this.instrument = [...instrument];
this.setListState(0);
this.InsIpt = '';
const obj = {
content: this.LabIpt,
isBtn: 1,
};
this.setLabIpt(obj);
},
searchIns() {
const { laboratory } = this;
for (let i = 0; i < laboratory.length; i++) {
laboratory[i].isActive = false;
}
this.laboratory = [...laboratory];
this.setListState(1);
this.LabIpt = '';
const obj = {
content: this.InsIpt,
isBtn: 1,
};
this.setInsIpt(obj);
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto;
line-height: 44px;
}
.item-search {
width: 100%;
height: 32px;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
</style>

206
src/views/NewPlatform/Children/ShareChild/InsDet.vue

@ -1,206 +0,0 @@
<template>
<div class="inner equ-box">
<div class="equ-info d-flex">
<img :src="obj.img" alt v-if="listState === 1" />
<img :src="obj.visitLocation" alt v-if="listState === 3" />
<div class="equ-info-box">
<p class="equ-name">{{ obj.name }}</p>
<div class="d-flex flex-wrap" v-if="listState === 1">
<div class="equ-info-left" style="width: 200px">
<p>仪器名字</p>
<p>制造商</p>
<p>型号</p>
<p>规格</p>
<p>性能指标</p>
<p>联系人</p>
<p>联系方式</p>
</div>
<div style="width: 500px">
<p>{{ obj.name }}</p>
<p>{{ obj.manufactor }}</p>
<p>{{ obj.model }}</p>
<p>{{ obj.specifications }}</p>
<p>{{ obj.performance }}</p>
<p>
<span :key="index" v-for="(item, index) in obj.selPeoList">
{{ item.contactsName }}
<span v-if="index !== obj.selPeoList.length-1"></span>
</span>
</p>
<p>
<span :key="index" v-for="(item, index) in obj.selPeoList">
{{ item.contactsPhone }}
<span v-if="index !== obj.selPeoList.length-1"></span>
</span>
</p>
</div>
</div>
<div class="d-flex flex-wrap" v-if="listState === 3">
<div class="equ-info-left" style="width: 200px">
<p>公司名称</p>
<p>产品编号</p>
<p>联系人</p>
</div>
<div style="width: 500px">
<p>{{ obj.companyname }}</p>
<p>{{ obj.identifier }}</p>
<p>
<span :key="index" v-for="(item, index) in obj.selPeoList">
{{ item.contactsName }}
<span v-if="index !== obj.selPeoList.length-1"></span>
</span>
</p>
</div>
</div>
<p class="equ-btn">
<intention-model
:type-data="listState === 1 ? typeData : typeProductData"
style="margin-right: 20px; float: left"
/>
<!-- <a-button style="margin-right: 20px">转化意向</a-button> -->
<!-- <a-button type="primary">加入购物车</a-button> -->
<add-shopping :type-data="typeData" style="margin-right: 20px; float: right" />
</p>
</div>
</div>
<div class="content-box">
<div v-dompurify-html="obj.purpose" v-if="listState === 1"></div>
<div v-dompurify-html="obj.details" v-if="listState === 3"></div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { selInstrumentMes, selProductMes } from 'config/api';
import IntentionModel from 'components/Introduce/IntentionModel.vue';
import AddShopping from 'components/Introduce/AddShopping.vue';
export default {
name: 'InsDet',
components: { IntentionModel, AddShopping },
data() {
return {
obj: {},
typeData: {
type: 1,
Id: '',
},
typeProductData: {
type: 3,
Id: '',
},
id: 0,
};
},
computed: mapState('home', ['listState']),
created() {
this.id = this.$route.params.id;
if (this.listState === 1) {
this.typeData.Id = this.$route.params.id;
this.getData();
}
if (this.listState === 3) {
this.typeProductData.Id = this.$route.params.id;
this.getProductData();
}
},
methods: {
async getData() {
try {
const params = { param: { id: this.id } };
const res = await selInstrumentMes(params);
const { code, data, msg } = res.data;
if (code === 200) {
this.obj = data;
}
} catch (error) {
console.log(error);
}
},
//
async getProductData() {
try {
const params = { param: { id: this.id } };
const res = await selProductMes(params);
const { code, data, msg } = res.data;
if (code === 200) {
console.log(data);
this.obj = data;
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style lang="stylus" scoped>
.equ-box {
background: #fff;
padding: 20px;
margin: 60px auto;
}
.equ-info {
border-bottom: 1px solid rgba(0, 0, 0, 0.14901960784313725);
position: relative;
padding-bottom: 24px;
img {
width: 300px;
height: 300px;
}
}
.equ-name {
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: bold;
line-height: 31px;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
}
.equ-info-box {
position: relative;
font-size: 16px;
margin-left: 20px;
height: 300px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
opacity: 1;
p {
height: 24px;
margin-bottom: 6px;
}
}
.equ-info-left {
font-size: 16px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.45);
opacity: 1;
p {
height: 24px;
margin-bottom: 6px;
}
}
.equ-btn {
position: absolute;
bottom: 0;
}
.content-box {
min-height: 400px;
padding: 20px;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
}
</style>

233
src/views/NewPlatform/Children/ShareChild/Institute.vue

@ -1,233 +0,0 @@
<template>
<div>
<banner :show-page="showPage" />
<h-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div class="inner ins-box">
<p class="font-bold-24 item-title">设备列表</p>
<div class="d-flex flex-wrap">
<div
:class="(index + 1) % 4 === 0 ? 'margin-0' : ''"
:key="index"
class="item-box mb-8"
v-for="(item, index) in list"
>
<img :src="item.visitLocation" style="height: 220px; width: 100%" />
<p class="font-24 my-4">{{ item.name }}</p>
<p @click="jump(item.id)" class="font-16 baseColor item-more">了解更多</p>
</div>
</div>
<p class="font-bold-24 item-title">人才团队带头人情况</p>
<div class="d-flex">
<div class="header-box" style="flex: 1">
<p style="background: #11b7ce; color: #fff">姓名</p>
<p>性别</p>
<p>民族</p>
<p>出生年月</p>
<p>学历</p>
<p>职称</p>
<p>所学专业</p>
<p>从事专业</p>
<p>团队名称</p>
<p>工作单位</p>
<p>研究方向</p>
</div>
<div class="header-box" style="flex: 5; background: #fff">
<p style="border-bottom: 1px solid #eee">{{ obj.name }}</p>
<p>
<span v-if="obj.gender - 0 === 1"></span>
<span v-else-if="obj.gender - 0 === 2"></span>
</p>
<p>{{ obj.famousFamily }}</p>
<p>{{ obj.birthday }}</p>
<p>{{ obj.education }}</p>
<p>{{ obj.position }}</p>
<p>{{ obj.major }}</p>
<p>{{ obj.professional }}</p>
<p>{{ obj.teamName }}</p>
<p>{{ obj.workUnit }}</p>
<p>{{ obj.direction }}</p>
</div>
</div>
<p class="font-bold-24 item-title">团队成员信息</p>
<div style="background: #fff">
<div class="d-flex">
<div class="h-box" style="flex: 1">姓名</div>
<div class="h-box" style="flex: 1">性别</div>
<!-- <div class="h-box" style="flex: 1">所在单位</div> -->
<div class="h-box" style="flex: 1">出生年月</div>
<div class="h-box" style="flex: 1">学历学位</div>
<div class="h-box" style="flex: 1">职称职务</div>
<div class="h-box" style="flex: 1">研究方向</div>
</div>
<div :key="index" class="d-flex" v-for="(item, index) in obj.teamMemberList">
<div class="con-box" style="flex: 1">{{ item.name }}</div>
<div class="con-box" style="flex: 1">
<span v-if="item.gender - 0 === 1"></span>
<span v-else-if="item.gender - 0 === 2"></span>
</div>
<!-- <div class="con-box" style="flex: 1">???????????????</div> -->
<div class="con-box" style="flex: 1">{{ item.birthday }}</div>
<div class="con-box" style="flex: 1">{{ item.education }}</div>
<div class="con-box" style="flex: 1">{{ item.position }}</div>
<div class="con-box" style="flex: 1">{{ item.direction }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapMutations, mapState } from 'vuex';
import { selInstrumentByRes, teamSearch } from 'config/api';
import Banner from 'components/Banner/Banner.vue';
import HNav from './../../components/HNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Institute',
components: { Banner, HNav, BreadCrumb },
data() {
return {
id: 0,
title: '研究院详情',
typeOfPlatform: '创新平台',
showPage: 32,
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '/NewPlatform/News' },
{ name: '科技资源开放共享服务平台', url: '/NewPlatform/Share' },
{ name: '研究院详情', url: '' },
],
obj: {},
list: [],
};
},
computed: mapState('home', ['LabId']),
created() {
if (this.$route.params.id) {
this.setLabId(this.$route.params.id);
this.id = this.$route.params.id;
} else {
this.id = this.LabId;
}
this.getData();
this.getTeam();
},
methods: {
...mapMutations('home', ['setLabId']),
//
async getData() {
try {
const params = {
param: {
id: this.id,
pageNum: 1,
pageSize: 6,
},
};
const res = await selInstrumentByRes(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.list = data.list;
this.total = parseInt(data.total);
}
} catch (error) {
console.log(error);
}
},
//
async getTeam() {
try {
const params = { param: { instituteId: this.id } };
const res = await teamSearch(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.obj = data[0];
}
} catch (error) {
console.log(error);
}
},
// /
jump(id) {
this.$router.push({
path: '/NewPlatform/Share/InsDet',
name: 'InsDet',
params: { id },
});
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.ins-box {
min-height: 500px;
height: auto;
margin: 40px auto;
}
.pagination {
margin: 40px 0;
text-align: right;
}
.item-more {
right: 10px;
bottom: 0px;
cursor: pointer;
position: absolute;
}
.item-box {
position: relative;
width: 20.5%;
margin-right: 6%;
border-radius: 4px;
padding-bottom: 40px;
}
.margin-0 {
margin-right: 0 !important;
}
.item-title {
color: rgba(0, 0, 0, 0.85);
margin-top: 60px;
}
.header-box {
text-align: center;
p {
font-size: 24px;
color: rgba(0, 0, 0, 0.66);
height: 56px;
line-height: 56px;
margin-bottom: 0 !important;
}
}
.h-box {
text-align: center;
font-size: 22px;
color: #096DD9;
height: 56px;
line-height: 56px;
}
.con-box {
text-align: center;
font-size: 18px;
height: 46px;
line-height: 46px;
color: rgba(112, 112, 112, 0.66);
}
</style>

150
src/views/NewPlatform/Children/Transfer.vue

@ -1,150 +0,0 @@
<template>
<div>
<sen-nav />
<div class="inner">
<bread-crumb :arr="arr" />
</div>
<div>
<div class="search-background">
<div class="d-flex">
<div class="flex-3 flex-wrap">
<span class="ins-title">技术领域</span>
<span
:class="item.isActive ? 'act-color' : ''"
v-for="(item, index) in list"
:key="index"
class="ins-name"
@click="choose(index)"
>
{{ item.name }}
</span>
</div>
<div class="flex-1 align-center">
<a-input-search class="item-search" v-model="fruitIpt" placeholder="搜索成果" enter-button="搜索" @search="searchFruit" />
</div>
</div>
</div>
</div>
<fruit />
</div>
</template>
<script>
import { mapMutations } from 'vuex';
import { selModel } from 'config/api';
import Fruit from 'components/PlatformList/Fruit.vue';
import SenNav from './components/SenNav.vue';
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
export default {
name: 'Transfer',
components: { SenNav, Fruit, BreadCrumb },
data() {
return {
str: '这是知识产权与技术转移转化服务平台',
title: '知识产权与技术转移转化服务平台',
typeOfPlatform: '创新平台',
arr: [
{ name: '创新平台', url: '/NewPlatform/NewCore' },
{ name: '创新资源平台', url: '/NewPlatform/News' },
{ name: '知识产权与技术转移转化服务平台', url: '' },
],
list: [],
achList: [],
fruitIpt: '',
};
},
watch: {
fruitIpt(val) {
const obj = {
content: this.fruitIpt,
isBtn: 0,
};
this.setAchIpt(obj);
},
},
created() {
this.getType();
this.setAchList([]);
},
methods: {
...mapMutations('home', ['setAchList', 'setAchIpt']),
//
async getType() {
try {
const params = { param: { model: 0 } };
const res = await selModel(params);
const { code, mst, data } = res.data;
if (code === 200) {
this.list = data;
for (var i = 0; i < this.list.length; i++) {
this.list[i].isActive = false;
}
console.log(this.list);
}
} catch (error) {
console.log(error);
}
},
//
searchFruit() {
const obj = {
content: this.fruitIpt,
isBtn: 1,
};
this.setAchIpt(obj);
},
//
choose(index) {
const that = this;
that.achList = [];
const { list } = this;
list[index].isActive = !list[index].isActive;
this.list = [...list];
for (let i = 0; i < list.length; i++) {
if (list[i].isActive) {
this.achList.push(list[i].id);
}
}
this.setAchList(this.achList);
},
},
};
</script>
<style lang="stylus" scoped>
.inner {
margin: 10px auto 15px;
}
.search-background {
background: rgba(0, 0, 0, 0.02);
border: 1px solid rgba(0, 0, 0, 0.06);
height: auto;
padding: 0 20px;
width: 82%;
margin: 40px auto;
line-height: 44px;
}
.item-search {
width: 100%;
height: 32px;
}
.ins-title {
font-size: 16px;
font-weight: bold;
color: rgba(0, 0, 0, 0.65);
}
.ins-name {
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
padding: 0 10px;
cursor: pointer;
}
.act-color {
color: #13ACC4 !important;
}
</style>

151
src/views/NewPlatform/Children/components/DeEnt.vue

@ -1,151 +0,0 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<!-- <div v-if="newPartners && newPartners.length > 0">
<div class="d-flex flex-wrap">
<div
:class="(index + 1) % 3 === 0 ? 'enterprise-box1' : ''"
:key="index"
@click="openProfile(item.name, item.description)"
class="enterprise-box d-flex flex-column align-center white mb-8"
v-for="(item, index) in newPartners"
>
<img :src="item.logoUrl" class="enterprise-pic my-2" />
<div class="font-bold-24 title-color my-2">{{ item.name }}</div>
<div
class="font-16 textColor d-flex flex-wrap align-start fill-width enterprise-txt"
>{{ item.description }}</div>
<div class="d-flex flex-nowrap fill-width py-5 enterprise-more">
<div class="flex-1"></div>
<span class="font-16 baseColor">
了解更多
<a-icon type="arrow-right" />
</span>
</div>
</div>
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" />
</div>
<div class="inner d-flex flex-row-reverse pb-10 enterprise-page">
<a-pagination
:page-size="pageSize"
:total="newPartners.length"
@change="onChange"
show-less-items
v-model="current"
v-show="newPartners.length > 6"
/>
</div>
</div>-->
<div v-if="newPartners && newPartners.length > 0">
<div :key="index" class="mb-4" v-for="(item,index) in newPartners">
<p
class="font-bold-24 title-color"
>{{ item.typeOfTech===0 ? '高校' : item.typeOfTech===1 ? '院所' : '企业' }}</p>
<div class="d-flex flex-wrap pointer">
<div
:class="(index+1)%4===0? 'logo-box1' : ''"
@click="openProfile(item.name,item.description)"
class="logo-box d-flex flex-column align-center justify-center white mb-8"
>
<img :src="item.logoUrl" class="logo-pic my-2" v-if="list.logoUrl" />
<div class="font-16 title-color">{{ item.name }}</div>
</div>
</div>
</div>
<company-profile :show-profile="showProfile" @closeProfile="closeProfile" v-if="showProfile" />
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex';
import 'components/Introduce/PartnerShip.styl';
import CompanyProfile from 'components/Introduce/CompanyProfile.vue';
export default {
name: 'DeEnt',
components: { CompanyProfile },
props: {
title: {
type: String,
default: '',
},
typeOfPlatform: {
type: String,
default: '',
},
},
data() {
return {
current: 1,
pageSize: 6,
showProfile: false, //
};
},
computed: {
...mapState('home', ['partners', 'profile']),
newPartners() {
let { partners } = this;
let arr = [];
if (partners && partners.length > 0) {
for (let i = 0; i < partners.length; i++) {
const element = partners[i];
for (let j = 0; j < element.backendSearchList.length; j++) {
const item = element.backendSearchList[j];
arr.push(item);
}
}
console.log('arr: ', arr);
return arr;
}
return arr;
},
},
async created() {
this.setPartners([]);
const { title, typeOfPlatform } = this;
const params = {
param: {
pageNum: this.current,
pageSize: 6,
type: title === '合作伙伴' ? 1 : 2,
typeOfPlatform: typeOfPlatform === '关于我们' ? 2 : 1,
},
};
await this.getFrontSearchCompany(params);
},
methods: {
...mapMutations('home', ['setPartners', 'setProfile']),
...mapActions('home', ['getFrontSearchCompany']),
//
onChange(current) {
this.current = current;
},
//
openProfile(title, description) {
this.setProfile(null);
const profile = {
title,
description,
};
this.setProfile(profile);
this.showProfile = true;
},
closeProfile() {
this.showProfile = false;
},
},
};
</script>
<style lang="stylus" scoped></style>

57
src/views/NewPlatform/Children/components/SenNav.vue

@ -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>

27
src/views/NewPlatform/NewPlatform.vue

@ -1,27 +0,0 @@
<template>
<div>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'NewPlatform',
data() {
return {
str: '创新平台界面',
list: [],
};
},
};
</script>
<style lang="stylus" scoped>
.wrap {
width: 1260px;
min-height: 1037px;
margin: 80px auto 28px auto;
overflow: hidden;
opacity: 1;
}
</style>

59
src/views/NewPlatform/components/HNav.vue

@ -1,59 +0,0 @@
<template>
<div class="nav-box d-flex">
<div
:class="activeNum === index ? 'nav-box-active' : ''"
:key="index"
@click="jump(item.url)"
v-for="(item, index) in list"
>{{ item.title }}</div>
</div>
</template>
<script>
export default {
name: 'HNav',
data() {
return {
str: '导航条',
activeNum: 0,
list: [
{
title: '协同创新中心',
url: '/NewPlatform/NewCore',
},
{
title: '创新资源平台',
url: '/NewPlatform/News',
},
{
title: '创新服务',
url: '/NewPlatform/NewService',
},
],
};
},
created() {
console.log();
if (this.$route.fullPath === '/NewPlatform/News') {
this.activeNum = 1;
} else if (this.$route.fullPath === '/NewPlatform/Share/Institute') {
this.activeNum = 1;
} else if (this.$route.fullPath === '/NewPlatform/NewService') {
this.activeNum = 2;
} else {
this.activeNum = 0;
}
},
methods: {
jump(url) {
if (this.$route.fullPath === url) {
this.$message.success('已在当前界面');
} else {
this.$router.push(url);
}
},
},
};
</script>
<style lang="stylus" scoped></style>

218
src/views/NewPlatform/components/NewModel.vue

@ -1,218 +0,0 @@
<template>
<div>
<a-button type="primary" @click="showModal">
{{ str }}
</a-button>
<a-modal width="50%" :title="title" :visible="visible" :confirm-loading="confirmLoading" @ok="handleOk" @cancel="handleCancel">
<a-form :form="form">
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="公司名称">
<a-input v-model.trim="platform.companyName" placeholder="请输入公司名称..." />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系人" required>
<a-input v-model.trim="platform.manName" placeholder="请输入联系人..." />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="联系电话" required>
<a-input @change="changePhone" type="tel" v-decorator="['tel', { rules: phoneRules }]" placeholder="请输入联系电话.." />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required>
<div class="d-flex flex-nowrap">
<a-input placeholder="图片验证码" type="number" v-model="codeNum" />
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" />
<a-button @click="changePicCode" class="code_img ml-2" size="small" v-else>获取验证码</a-button>
<!-- <a-input v-decorator="['account', { rules: rules.account }]" /> -->
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="platform.code" />
<a-button class="code_img ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button>
<a-button :disabled="platform.isTel === false" @click="getCode" class="code_img ml-2" type="primary" v-else>
获取验证码
</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="项目信息简述" required>
<a-textarea v-model.trim="platform.describe" style="height: 120px" placeholder="请输入项目信息简述..." />
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import { JoinPlatform } from 'config/api';
const formItemLayout = {
labelCol: { span: 5 },
wrapperCol: { span: 18 },
};
const formTailLayout = {
labelCol: { span: 6 },
wrapperCol: { span: 18, offset: 6 },
};
export default {
name: 'NewModel',
data() {
return {
form: this.$form.createForm(this, { name: 'submit' }),
visible: false,
title: '协同创新中心加入申请',
str: '申请加入',
formItemLayout,
formTailLayout,
confirmLoading: false,
platform: {
companyName: '', //
manName: '', //
tel: '', //
describe: '', //
code: '', //
isTel: false,
},
codeRules: [
{ required: true, message: '请输入验证码' },
{ min: 4, max: 4, message: '请输入4位短信验证码' },
],
codeNum: '',
showInterval: false,
codeTimer: null,
interval: 120, //
phoneRules: [
{ required: true, pattern: new RegExp(/^[1][3,4,5,6,7,8,9][0-9]{9}$/), whitespace: true, message: '请输入正确的手机号' },
],
};
},
computed: mapState('user', ['picCode']),
async created() {
this.sendPicCode();
await this.getUserSer();
if (this.userSer) {
if (this.userSer.name) {
this.platform.manName = this.userSer.name;
}
if (this.userSer.phone) {
this.platform.tel = this.userSer.phone;
}
if (this.userSer.companyName) {
this.platform.companyName = this.userSer.companyName;
}
}
},
methods: {
...mapActions('user', ['sendCode', 'sendPicCode']),
...mapActions('home', ['getUserSer']),
//
showModal() {
this.visible = true;
},
//
handleCancel(e) {
this.visible = false;
},
//
changePhone(e) {
this.platform.tel = e.target.value;
this.platform.isTel = /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(this.platform.tel);
},
//
handleOk() {
if (!this.platform.manName) {
this.$message.error('请输入联系人');
} else if (!this.platform.tel) {
this.$message.error('请输入联系电话');
} else if (!this.platform.code) {
this.$message.error('请输入验证码');
} else if (!this.platform.describe) {
this.$message.error('请输入项目信息简述');
} else {
if (this.platform.isTel) {
this.subMitAdd();
} else {
this.$message.error('请输入正确的联系电话');
}
}
},
//
async subMitAdd() {
this.confirmLoading = true;
try {
const params = {
param: {
code: this.platform.code,
companyName: this.platform.companyName,
contactName: this.platform.manName,
contactPhone: this.platform.tel,
description: this.platform.describe,
type: 0,
},
};
const res = await JoinPlatform(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.$message.success('申请成功');
this.visible = false;
this.confirmLoading = false;
for (let key in this.platform) {
this.platform[key] = '';
}
this.platform.isTel = false;
} else {
throw msg;
this.confirmLoading = false;
}
} catch (error) {
this.$message.error(error);
this.confirmLoading = false;
}
},
//
async getCode() {
console.log(111);
try {
const params = {
phone: this.platform.tel,
verificationCodeId: this.picCode.verificationCodeId,
verificationCodeValue: this.codeNum,
};
await this.sendCode(params);
this.getCodeInterval();
} catch (error) {
// throw new Error(`SignIn.vue method getCode: ${error}`);
console.log(error);
}
},
//
getCodeInterval() {
this.showInterval = true;
this.codeTimer = setInterval(() => {
if (this.interval === 0) {
clearInterval(this.codeTimer);
this.codeTimer = null;
this.showInterval = false;
this.interval = 120;
return;
}
this.interval = this.interval - 1;
}, 1000);
},
//
changePicCode() {
this.sendPicCode();
},
},
};
</script>
<style lang="stylus" scoped>
.must-color {
color: red;
}
.code_img {
height: 32px;
width: 120px;
}
</style>

231
src/views/NewPlatform/components/myTransition.vue

@ -1,231 +0,0 @@
<template>
<div class="transition_test">
<h2>过渡效果</h2>
<button @click="show = !show">click</button>
<!-- <transition name="slide-fade">
<div v-if="show" class="circle"></div>
</transition> -->
<div>
图片放大效果:
<transition name="img-fade">
<img
class="bigimg"
v-if="show"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="shop_cart">
加入购物车动画(css实现):
<div class="add">
<button @click="addShopCart">add</button>
<transition name="shop_cart">
<img
class="add_img"
v-if="addShow"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="cart">
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" />
</div>
</div>
<div class="shop_cart">
加入购物车动画(JavaScript钩子函数实现):
<div class="add">
<button @click="addShopCart1">add</button>
<transition v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter="afterEnter">
<img
class="add_img_js"
v-if="addShow1"
src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg"
alt=""
/>
</transition>
</div>
<div class="cart">
<img src="https://dss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1672824262,2727256094&fm=111&gp=0.jpg" alt="" />
</div>
</div>
<!-- 动画数组效果 -->
<ul class="group_list">
<button @click="addItem">addItem</button>
<button @click="removeItem">removeItem</button>
<transition-group name="list">
<li class="group_item" v-for="item in list" :key="item">{{ item }}</li>
</transition-group>
</ul>
</div>
</template>
<script>
export default {
name: 'myTransition',
components: {},
data() {
return {
show: false,
addShow: false,
addShow1: false,
list: [1, 2, 3],
};
},
created() {},
methods: {
addShopCart() {
this.addShow = true;
setTimeout(() => {
this.addShow = false;
}, 1000);
},
addShopCart1() {
this.addShow1 = true;
},
//
//
beforeEnter(el) {
el.style.left = '-20px';
el.style.top = '-15px';
el.style.transform = 'scale(1)';
},
//
enter(el, done) {
// offset,,
el.offsetWidth;
el.style.left = '600px';
el.style.top = '-160px';
el.style.transform = 'scale(.5)';
done();
},
//
afterEnter() {
this.addShow1 = false;
},
//
addItem() {
this.list.push(this.list.length + 1);
},
//
removeItem() {
if (this.list.length > 1) {
this.list.pop();
}
},
},
};
</script>
<style scoped>
.transition_test {
text-align: left;
padding-bottom: 300px;
}
.circle {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: aquamarine;
}
.slide-fade-enter-active,
.slide-fade-leave-active {
transition: all 0.5s ease-out;
}
.slide-fade-enter,
.slide-fade-leave-to {
/* transform: translateX(500px); */
opacity: 0;
}
.bigimg {
width: 300px;
}
.img-fade-enter-active {
transition: all 1s ease-out;
}
.img-fade-enter {
transform: scale(0.5);
/* width: 50px; */
}
.shop_cart {
padding: 20px;
}
.shop_cart .add {
position: relative;
margin-top: 100px;
width: 500px;
display: inline-block;
}
.shop_cart .add button {
position: absolute;
z-index: 99;
}
.shop_cart .cart {
width: 300px;
display: inline-block;
}
.shop_cart .cart img {
width: 100%;
}
.shop_cart .add_img {
width: 100px;
position: absolute;
left: 600px;
top: -160px;
}
/* 动画效果实现 */
/* @keyframes bounce-in {
0% {
transform: scale(1);
transform: translate(-610px, 100px);
}
100% {
transform: scale(.5);
transform: translate(0px, 0px);
}
}
.shop_cart-enter-active {
animation: bounce-in 1s;
} */
/* CSS类名实现 */
.shop_cart-enter-active {
transition: all 1s ease-out;
}
.shop_cart-enter {
opacity: 0;
transform: scale(0.5);
transform: translate(-610px, 100px);
}
.shop_cart .add_img_js {
width: 100px;
position: absolute;
left: 600px;
top: -160px;
transition: all 1s;
}
.group_list {
padding: 30px;
}
.group_list .group_item {
width: 200px;
height: 100px;
border: 1px solid orangered;
margin: 10px;
}
.list-enter-active,
.list-leave-active {
transition: all 0.8s;
}
.list-enter,
.list-leave-to {
opacity: 0;
transform: translateX(40px);
}
</style>

40
src/views/Policy/Policy.vue

@ -1,40 +0,0 @@
<!--
Copyright (c) 2020.
author: bin
email: binbin0314@126.com
-->
<template>
<div class="inner">
<bread-crumb :arr="arr" />
<policy-list class="py-5 my-5" />
<!-- <policy-details v-else/> -->
</div>
</template>
<script>
import BreadCrumb from 'components/BreadCrumb/BreadCrumb.vue';
import PolicyList from './components/PolicyList.vue';
export default {
name: 'Policy',
components: {
BreadCrumb,
PolicyList,
// PolicyDetails,
},
data() {
return {
showType: 1,
list: [],
arr: [{ name: '创新政策', url: '' }],
};
},
methods: {},
};
</script>
<style scoped lang="stylus">
.inner {
margin: 40px auto;
}
</style>

107
src/views/Policy/PolicyDetails.vue

@ -1,107 +0,0 @@
<!--
Copyright (c) 2020.
author: bin
email: binbin0314@126.com
-->
<template>
<div class="white inner">
<div class="policy-title">
<span>{{ obj.title }}</span>
</div>
<div class="policy-info">
<span>
<a-icon class="baseColor" type="clock-circle" />&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{ obj.time }}</span>
</span>
<span class="ml-8">
<!-- <a-icon type="form" />&nbsp;&nbsp;&nbsp;&nbsp; -->
<a-icon style="color: #ff1857" type="tag" />&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{ obj.source }}</span>
</span>
</div>
<div class="policy-content" v-dompurify-html="obj.content"></div>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { selPolicy } from 'config/api';
export default {
name: 'PolicyDetails',
data() {
return {
str: '这是政策详情界面',
obj: {
title: '',
content: '',
time: '',
source: '',
},
};
},
computed: mapState('home', ['policyId']),
created() {
this.getPolicyDet();
},
methods: {
async getPolicyDet() {
try {
const params = { param: { id: this.policyId } };
const res = await selPolicy(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.obj.title = data.title;
this.obj.content = data.content;
this.obj.time = data.publishTime;
this.obj.source = data.publishDepartName;
window.scroll(0, 0);
}
} catch (error) {
console.log(error);
}
},
},
};
</script>
<style scoped lang="stylus">
.inner {
margin: 40px auto;
}
.back-btn {
width: 80px;
position: absolute;
right: 0;
}
.policy-title {
height: 120px;
font-size: 24px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.85);
opacity: 1;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
padding: 0 150px;
border-bottom: 1px solid #707070;
}
.policy-info {
height: 76px;
line-height: 76px;
text-align: center;
}
.policy-content {
padding: 0 25px 25px;
font-size: 16px;
color: rgba(0, 0, 0, 0.65);
font-weight: 400;
font-family: Microsoft YaHei;
}
</style>

305
src/views/Policy/components/PolicyList.vue

@ -1,305 +0,0 @@
<!--
Copyright (c) 2020.
author: bin
email: binbin0314@126.com
-->
<template>
<div class="box">
<div class="search-list">
<!-- <search-list @iptCon="getInput" /> -->
<span>
<a-checkbox :checked="pStatus.bw - 0 === 1" @click="changeStatus('bw')">国家</a-checkbox>
<a-checkbox :checked="pStatus.sx - 0 === 1" @click="changeStatus('sx')">山西省</a-checkbox>
<a-checkbox :checked="pStatus.zg - 0 === 1" @click="changeStatus('zg')">山西省综改区</a-checkbox>
<a-checkbox :checked="pStatus.ty - 0 === 1" @click="changeStatus('ty')">太原市</a-checkbox>
</span>
<a-input-group class="search" compact>
<a-select
@change="changeCode"
style="width: 120px; height: 40px"
v-model="pStatus.policyText[pStatus.value - 1]"
>
<a-select-option value="1">标题</a-select-option>
<a-select-option value="2">地区</a-select-option>
<a-select-option value="3">发布部门</a-select-option>
</a-select>
<a-input-search
@search="getPolicy"
enter-button="搜索"
placeholder="请输入..."
style="width: 76.2%"
v-model="pStatus.iptCon"
/>
</a-input-group>
</div>
<div class="policy-box">
<div :key="index" v-for="(item, index) in lists">
<div class="date-box">
<p class="date-mon">{{ monthEnglish[item.publishTime.split('-')[1] - 1] }}.</p>
<p class="date-day">{{ item.publishTime.split('-')[2] }}</p>
</div>
<p class="item-title">{{ item.title }}</p>
<p class="item-content">{{ item.intro }}</p>
<!-- <p class="item-content" v-html="item.content"></p> -->
<p class="source-time">
<span
@click="openWin(item.titleUrl)"
class="baseColor source"
>来源{{ item.publishDepartName }}</span>
<span class="time">{{ item.publishTime }}</span>
</p>
<p class="original baseColor">
<span @click="LookSource(item.id)">
了解更多
<a-icon type="arrow-right" />
</span>
</p>
</div>
</div>
<a-pagination
:current="current"
:page-size="pageSize"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
v-show="total > 5"
/>
</div>
</template>
<script>
import { mapState, mapMutations } from 'vuex';
import { selLikePolicy } from 'config/api';
export default {
name: 'PolicyList',
data() {
return {
str: '这是创新政策界面',
lists: [],
total: 0,
pageSize: 5,
monthEnglish: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Spt', 'Oct', 'Nov', 'Dec'],
pCode: ['title', 'area', 'area'],
pStatus: {
bw: 0,
sx: 0,
zg: 0,
ty: 0,
value: 1, // value
code: 'title', // code
policyText: ['标题', '地区', '发布部门'], //
iptCon: '', // input
},
};
},
computed: mapState('home', ['current', 'policyStatus']),
watch: {
policyStatus(val) {
this.setCurrent(1);
this.getPolictList();
},
},
created() {
this.pStatus = this.policyStatus;
this.getPolictList();
},
methods: {
...mapMutations('home', ['setPolicyId', 'setCurrent', 'setPolicyStatus']),
async getPolictList() {
try {
const params = {
param: {
bw: this.policyStatus.bw,
code: this.policyStatus.code,
input: this.policyStatus.iptCon,
pageNum: this.current,
pageSize: 5,
sx: this.policyStatus.sx,
zg: this.policyStatus.zg,
ty: this.policyStatus.ty,
},
};
const res = await selLikePolicy(params);
const { code, msg, data } = res.data;
if (code === 200) {
this.lists = data.list;
this.total = data.total - 0;
window.scroll(0, 0);
}
} catch (error) {
console.log(error);
}
},
//
LookSource(id) {
this.setPolicyId(id);
this.$router.push('/Policy/PolicyDetails');
},
//
onShowSizeChange(current, size) {
this.setCurrent(current);
this.getPolictList();
},
//
changeStatus(str) {
if (this.pStatus[str]) {
this.pStatus[str] = 0;
} else {
this.pStatus[str] = 1;
}
this.setPolicyStatus(this.pStatus);
},
//
changeCode(value) {
this.pStatus.code = this.pCode[value - 1];
},
//
getPolicy() {
this.setCurrent(1);
this.setPolicyStatus(this.pStatus);
},
},
};
</script>
<style scoped lang="stylus">
.box {
width: 100%;
min-height: 1037px;
overflow: hidden;
opacity: 1;
}
.search-list {
height: 72px;
line-height: 72px;
background: #fff;
padding: 0 24px;
position: relative;
}
.search {
width: 500px;
position: absolute;
right: 25px;
top: 20px;
}
.policy-box {
div {
position: relative;
width: 100%;
height: 238px;
overflow: hidden;
background: #fff;
box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
margin-top: 24px;
padding: 25px;
}
}
.item-title {
margin-left: 200px;
overflow: hidden;
display: -webkit-box;
font-size: 24px;
color: rgba(0, 0, 0, 0.65);
font-family: Microsoft YaHei;
font-weight: bold;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.item-content {
margin-left: 200px;
text-indent: 2em;
font-size: 16px;
line-height: 36px;
color: rgba(0, 0, 0, 0.35);
font-family: Microsoft YaHei;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.source {
cursor: pointer;
font-family: Microsoft YaHei;
font-weight: 400;
opacity: 1;
margin-right: 24px;
}
.time {
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
color: rgba(0, 0, 0, 0.25);
opacity: 1;
}
.original {
position: absolute;
right: 25px;
bottom: 25px;
font-size: 14px;
font-family: Microsoft YaHei;
font-weight: 400;
line-height: 22px;
opacity: 1;
margin-bottom: 0;
span {
cursor: pointer;
}
}
.date-box {
height: 188px !important;
width: 188px !important;
position: absolute !important;
top: 0 !important;
// box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.16);
text-align: center;
box-shadow: none !important;
p {
margin-bottom: 0 !important;
}
}
.date-mon {
font-size: 40px;
height: 40px;
line-height: 40px;
font-weight: 500;
color: #13ACC4;
}
.date-day {
font-size: 70px;
height: 80px;
line-height: 80px;
font-weight: bold;
color: #13ACC4;
}
.source-time {
margin-left: 200px;
position: absolute;
bottom: 26px;
margin-bottom: 0;
}
.pagination {
margin-top: 68px;
text-align: right;
}
</style>
Loading…
Cancel
Save