Browse Source

首页

master
lucky 5 years ago
parent
commit
1486c5734a
  1. 162
      package-lock.json
  2. 19
      src/App.vue
  3. BIN
      src/assets/bullhorn.png
  4. BIN
      src/assets/code.png
  5. BIN
      src/assets/logo_bottom.png
  6. BIN
      src/assets/new01.png
  7. BIN
      src/assets/new02.png
  8. BIN
      src/assets/server01.png
  9. BIN
      src/assets/server02.png
  10. BIN
      src/assets/server03.png
  11. BIN
      src/assets/settleIn.png
  12. BIN
      src/assets/t-top.png
  13. 121
      src/common/portrait.styl
  14. 76
      src/components/FooterPage/FooterPage.vue
  15. 17
      src/components/FooterPage/FriendShip.vue
  16. 150
      src/components/Index/IndexNewList.vue
  17. 19
      src/components/Rotation/Rotation.vue
  18. 89
      src/components/User/MechanismSignUp.vue
  19. 81
      src/components/User/PersonalSignUp.vue
  20. 3
      src/config/api-user.js
  21. 2
      src/plugins/ant-design-vue.js
  22. 19
      src/store/index.js
  23. 47
      src/store/modules/home/actions.js
  24. 0
      src/store/modules/home/getters.js
  25. 6
      src/store/modules/home/index.js
  26. 31
      src/store/modules/home/mutations.js
  27. 2
      src/store/modules/home/state.js
  28. 32
      src/store/modules/user/actions.js
  29. 7
      src/store/modules/user/getters.js
  30. 6
      src/store/modules/user/index.js
  31. 33
      src/store/modules/user/mutations.js
  32. 6
      src/store/modules/user/state.js
  33. 12
      src/views/Activity/ActDetails.vue
  34. 30
      src/views/Activity/Activity.vue
  35. 37
      src/views/Community/ComDetails.vue
  36. 45
      src/views/Community/Community.vue
  37. 27
      src/views/Community/Posting.vue
  38. 162
      src/views/FirstPage/FirstPage.vue
  39. 6
      src/views/Policy/PolicyDetails.vue
  40. 46
      src/views/Policy/components/PolicyList.vue
  41. 71
      src/views/User/ForgetPassword.vue
  42. 4
      src/views/User/Login.vue

162
package-lock.json

@ -1808,16 +1808,6 @@
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"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": {
"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",
@ -1850,34 +1840,6 @@
"integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
"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": {
"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",
@ -1931,13 +1893,6 @@
"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": {
"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",
@ -2052,16 +2007,6 @@
"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": {
"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",
@ -2078,32 +2023,6 @@
"terser": "^4.6.12",
"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"
}
}
}
}
}
},
@ -12655,6 +12574,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": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",

19
src/App.vue

@ -7,10 +7,7 @@
<footer-page class="footer" />
<div id="components-back-top-demo-custom">
<a-back-top>
<div class="ant-back-top-inner">
回到顶部
<a-icon type="vertical-align-top" />
</div>
<div class="ant-back-top-inner"></div>
</a-back-top>
</div>
</div>
@ -31,7 +28,7 @@ export default {
return { zh_CN };
},
computed: mapState(['anyringToken']),
computed: mapState('user', ['anyringToken']),
updated() {
window.scroll(0, 0);
},
@ -48,7 +45,7 @@ export default {
});
},
methods: { ...mapActions(['getUserId']) },
methods: { ...mapActions('user', ['getUserId']) },
};
</script>
@ -82,7 +79,6 @@ body::-webkit-scrollbar {
height: 64px;
}
.footer {
height: 397px;
width: 100%;
background: #0d1f32;
bottom: 0;
@ -93,12 +89,9 @@ body::-webkit-scrollbar {
}
#components-back-top-demo-custom .ant-back-top-inner {
height: 40px;
width: 120px;
width: 40px;
line-height: 40px;
border-radius: 4px;
background-color: #13acc4;
color: #fff;
text-align: center;
font-size: 14px;
background: url('assets/t-top.png') center no-repeat;
background-size: contain;
}
</style>

BIN
src/assets/bullhorn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

BIN
src/assets/code.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
src/assets/logo_bottom.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
src/assets/new01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
src/assets/new02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/assets/server01.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
src/assets/server02.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
src/assets/server03.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
src/assets/settleIn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
src/assets/t-top.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

121
src/common/portrait.styl

@ -3,6 +3,14 @@
padding: 12px;
}
.pa-4 {
padding: 16px;
}
.pa-5 {
padding: 20px;
}
.pb-3 {
padding-bottom: 12px;
}
@ -19,6 +27,21 @@
padding-bottom: 40px;
}
.px-1{
padding-left: 4px;
padding-right: 4px;
}
.px-2{
padding-left: 8px;
padding-right: 8px;
}
.px-3{
padding-left: 12px;
padding-right: 12px;
}
// margin
.ma-3 {
margin: 12px;
@ -60,6 +83,10 @@
margin-top: 16px;
}
.mt-8{
margin-top: 32px;
}
.mb-1{
margin-bottom: 4px;
}
@ -76,6 +103,22 @@
margin-bottom: 16px;
}
.mb-5{
margin-bottom: 20px;
}
.mb-6{
margin-bottom: 24px;
}
.mb-7{
margin-bottom: 28px;
}
.mb-8{
margin-bottom: 32px;
}
.ml-2{
margin-left: 8px;
}
@ -128,6 +171,14 @@
margin-right: 24px;
}
.mr-7{
margin-right: 28px;
}
.mr-8{
margin-right: 32px;
}
// background
.white {
background: white;
@ -170,12 +221,25 @@
justify-content: space-between;
}
.align-center{
align-items: center
}
.align-end{
align-items: flex-end
}
.flex-1{
display: flex;
flex: 1;
}
// other
.inner {
width: 82%;
margin: 0 auto;
}
.pointer{
cursor:pointer;
}
@ -184,7 +248,44 @@
height:100%;
}
.fill-width{
width:100%;
}
// font
.font-big{
font-size: 60px;
}
.font-small{
font-size: 30px;
line-height: 40px;
}
.font-bold{
font-weight: bold;
}
@media only screen and (max-width: 1400px) {
.font-big{
font-size: 45px;
}
.font-small{
font-size: 26px;
line-height: 36px;
}
}
.font-bold-32{
font-size: 32px;
font-weight: bold;
}
.font-32{
font-size: 32px;
}
.font-bold-24{
font-size: 24px;
font-weight: bold;
@ -194,6 +295,10 @@
font-size: 24px;
}
.font-20{
font-size: 20px;
}
.font-bold-16{
font-size: 16px;
font-weight: bold;
@ -212,6 +317,10 @@
font-size: 14px;
}
.font-12{
font-size: 12px;
}
.icon-size{
font-size: 20px;
}
@ -242,3 +351,15 @@ h2{
.ant-btn-link:hover, .ant-btn-link:focus{
color: #13ACC4;
}
.base-bg{
background: #13ACC4
}
.second-base-bg{
background: #AACD06
}
.white--text{
color: #fff
}

76
src/components/FooterPage/FooterPage.vue

@ -1,6 +1,42 @@
<template>
<div class="footer">
{{ str }}
<div>
<div class="footer">
<div class="d-flex flex-nowrap inner">
<div class="box">
<img class="pic" src="~assets/logo_bottom.png" />
</div>
<div class="box flex-1 d-flex flex-column" style="padding-left: 13%;">
<div class="title">发现</div>
<span>创新挑战</span>
<span>创新平台</span>
<span>孵化平台</span>
<span>产业平台</span>
<span>在线社区</span>
</div>
<div class="box flex-1 d-flex flex-column">
<div class="title">资讯</div>
<span>行业资讯</span>
<span>活动公告</span>
<span>国家政策</span>
<span>行业资讯</span>
<span>省级政策</span>
</div>
<div class="box flex-1 d-flex flex-column">
<div class="title">联系我们</div>
<span>我要入驻</span>
<span>人才招聘</span>
<div>400-789-789</div>
</div>
<div class="box">
<img class="pic" src="~assets/code.png" />
</div>
</div>
</div>
<div class="xian"></div>
<div class="font-12 align-center text">
Copyright © 2020 The Project by
<span style="color:#2E54EA">CCSENS</span>. All Rights Reserved
</div>
</div>
</template>
@ -12,4 +48,38 @@ export default {
};
</script>
<style lang="stylus" scoped></style>
<style lang="stylus" scoped>
.footer {
color: #D7D7D7;
}
.pic {
width: 130px;
}
.box {
margin-top: 58px;
.title {
font-size: 18px;
margin-bottom: 18px;
}
span {
font-size: 12px;
line-height: 24px;
}
}
.xian {
width: 100%;
height: 1px;
background: rgba(204, 204, 204, 0.35);
margin-top: 100px;
}
.text {
text-align: center;
line-height: 90px;
}
</style>

17
src/components/FooterPage/FriendShip.vue

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

150
src/components/Index/IndexNewList.vue

@ -0,0 +1,150 @@
<!--
Copyright (c) 2020.
author: song
email: 15235360226@163.com
-->
<template>
<div class="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
class="d-flex align-center font-16 baseColor"
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
class="d-flex align-center font-16 baseColor"
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-3">
<span class="font-20">Dec.</span>
<span class="font-bold-32 day">03</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 {};
},
created() {
console.log('lists: ', this.lists);
},
methods: {
...mapMutations('home', ['setActDetail']),
//
jumpDetails(item) {
this.setActDetail(item);
this.$router.push('/ActDetails');
},
},
};
</script>
<style scoped lang="stylus">
.wrap {
width: 90%;
height: 342px;
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;
.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;
font-weight: bold;
-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>

19
src/components/Rotation/Rotation.vue

@ -1,8 +1,9 @@
<template>
<div class="head">
<a-carousel autoplay :autoplay-speed="time">
<div class="img-box" v-for="item in lists" :key="item.id">
<img :src="item.url" alt="" />
<img class="settle-in" src="~assets/settleIn.png" />
<a-carousel :autoplay-speed="time" autoplay>
<div :key="item.id" class="img-box" v-for="item in lists">
<img :src="item.url" alt />
</div>
</a-carousel>
</div>
@ -42,12 +43,20 @@ export default {
<style lang="stylus">
.head {
background: white;
max-height: 460px;
max-height: 340px;
overflow: hidden;
position: relative;
}
.settle-in {
position: absolute;
top: 3%;
right: 10%;
z-index: 9;
}
.img-box {
height: 460px;
height: 340px;
width: 100%;
img {

89
src/components/User/MechanismSignUp.vue

@ -13,7 +13,12 @@
>
<a-input v-decorator="['account']" />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="单位性质" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="单位性质"
required
>
<a-select placeholder="请选择单位性质" v-decorator="['nature']">
<a-select-option value="1">高校</a-select-option>
<a-select-option value="2">初中</a-select-option>
@ -37,13 +42,32 @@
>
<a-input v-decorator="['code']" />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="登录密码" required>
<a-input-password placeholder="密码由字母和数字混合组成,6-16位字符" v-decorator="['password', { rules: passwordRules }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="登录密码"
required
>
<a-input-password
placeholder="密码由字母和数字混合组成,6-16位字符"
v-decorator="['password', { rules: passwordRules }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="确认密码">
<a-input-password placeholder="请再次输入您设置的密码" v-decorator="['againCredential', { rules: againPassword }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="确认密码"
>
<a-input-password
placeholder="请再次输入您设置的密码"
v-decorator="['againCredential', { rules: againPassword }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="手机">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="手机"
>
<a-input
@change="changePhone"
placeholder="该手机号用于账号激活、登录及找回密码"
@ -51,21 +75,56 @@
v-decorator="['phone', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入图片验证码" type="number" v-model="codeNum" />
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" />
<a-button @click="changePicCode" class="code_img ml-2" size="small" type="primary" v-else>重新获取</a-button>
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button
@click="changePicCode"
class="code_img ml-2"
size="small"
type="primary"
v-else
>重新获取</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-decorator="['smsCode', { rules: codeRules }]" />
<a-input
placeholder="请输入验证码"
type="number"
v-decorator="['smsCode', { rules: codeRules }]"
/>
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button>
<a-button :disabled="phone && phone.length !== 11" @click="getCode" class="ml-2" type="primary" v-else>获取验证码</a-button>
<a-button
:disabled="phone && phone.length !== 11"
@click="getCode"
class="ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="来源">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="来源"
>
<a-select placeholder="请选择来源" v-decorator="['source']">
<a-select-option value="1">绿谷</a-select-option>
</a-select>
@ -119,14 +178,14 @@ export default {
};
},
computed: mapState(['picCode']),
computed: mapState('user', ['picCode']),
created() {
this.sendPicCode();
},
methods: {
...mapActions(['signUp', 'sendCode', 'sendPicCode']),
...mapActions('user', ['signUp', 'sendCode', 'sendPicCode']),
changePhone(e) {
this.phone = e.target.value;

81
src/components/User/PersonalSignUp.vue

@ -22,13 +22,31 @@
>
<a-input maxlength="20" v-decorator="['nickname']" />
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="登录密码">
<a-input-password placeholder="密码由字母和数字混合组成,6-16位字符" v-decorator="['password', { rules: passwordRules }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="登录密码"
>
<a-input-password
placeholder="密码由字母和数字混合组成,6-16位字符"
v-decorator="['password', { rules: passwordRules }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="确认密码">
<a-input-password placeholder="请再次输入您设置的密码" v-decorator="['againCredential', { rules: againPassword }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="确认密码"
>
<a-input-password
placeholder="请再次输入您设置的密码"
v-decorator="['againCredential', { rules: againPassword }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="手机">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="手机"
>
<a-input
@change="changePhone"
placeholder="该手机号用于账号激活、登录及找回密码"
@ -36,22 +54,57 @@
v-decorator="['phone', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入图片验证码" type="number" v-model="codeNum" />
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" />
<a-button @click="changePicCode" class="code_img ml-2" size="small" type="primary" v-else>重新获取</a-button>
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button
@click="changePicCode"
class="code_img ml-2"
size="small"
type="primary"
v-else
>重新获取</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-decorator="['smsCode', { rules: codeRules }]" />
<a-input
placeholder="请输入验证码"
type="number"
v-decorator="['smsCode', { rules: codeRules }]"
/>
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button>
<a-button :disabled="phone && phone.length !== 11" @click="getCode" class="ml-2" type="primary" v-else>获取验证码</a-button>
<a-button
:disabled="phone && phone.length !== 11"
@click="getCode"
class="ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="来源">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="来源"
>
<a-select placeholder="请选择来源" v-decorator="['source']">
<a-select-option value="1">绿谷</a-select-option>
</a-select>
@ -105,14 +158,14 @@ export default {
};
},
computed: mapState(['picCode']),
computed: mapState('user', ['picCode']),
created() {
this.sendPicCode();
},
methods: {
...mapActions(['signUp', 'sendCode', 'sendPicCode']),
...mapActions('user', ['signUp', 'sendCode', 'sendPicCode']),
changePhone(e) {
this.phone = e.target.value;

3
src/config/api-user.js

@ -24,3 +24,6 @@ export const getSmscode = params => axios.get(`${users}/smscode`, params);
// 通过手机号修改密码
export const changePassword = params => axios.post(`${users}/password`, params);
// 通过userId获取token
export const getUserId = params => axios.post(`${users}/userId`, params);

2
src/plugins/ant-design-vue.js

@ -28,6 +28,7 @@ import {
BackTop,
Carousel,
Avatar,
Layout,
} from 'ant-design-vue';
import { ConfigProvider } from 'ant-design-vue';
Vue.component(ConfigProvider.name, ConfigProvider);
@ -57,6 +58,7 @@ Vue.use(Checkbox);
Vue.use(BackTop);
Vue.use(Carousel);
Vue.use(Avatar);
Vue.use(Layout);
Vue.prototype.$message = message;
Vue.prototype.$notification = notification;

19
src/store/index.js

@ -1,16 +1,7 @@
import Vue from "vue";
import Vuex from "vuex";
import mutations from './mutations';
import actions from './actions';
import state from './state';
import getters from './getters';
import Vue from 'vue';
import Vuex from 'vuex';
import home from './modules/home/index';
import user from './modules/user/index';
Vue.use(Vuex);
const store = new Vuex.Store({
state,
mutations,
actions,
});
export default store;
export default new Vuex.Store({ modules: { home, user } });

47
src/store/modules/home/actions.js

@ -0,0 +1,47 @@
import axios from 'axios';
import { message } from 'ant-design-vue';
import { industryInfo, front } from '@/config/api';
const actions = {
/**
* 获取行业资讯列表
* @param {any} commit
* @param {object} params 提交的数据
*/
async getIndustryInfoList({ commit }, params) {
try {
const res = await industryInfo(params);
const { code, msg, data } = res.data;
if (code === 200) {
return data;
} else {
message.error(msg || '获取失败');
throw msg;
}
} catch (error) {
throw error || '获取失败';
}
},
/**
* 获取活动公告列表
* @param {any} commit
* @param {object} params 提交的数据
*/
async getFrontList({ commit }, params) {
try {
const res = await front(params);
const { code, msg, data } = res.data;
if (code === 200) {
return data;
} else {
message.error(msg || '获取失败');
throw msg;
}
} catch (error) {
throw error || '获取失败';
}
},
};
export default actions;

0
src/store/getters.js → src/store/modules/home/getters.js

6
src/store/modules/home/index.js

@ -0,0 +1,6 @@
import mutations from './mutations';
import actions from './actions';
import state from './state';
import getters from './getters';
export default { namespaced: true, state, getters, mutations, actions };

31
src/store/mutations.js → src/store/modules/home/mutations.js

@ -1,36 +1,5 @@
import { List } from 'ant-design-vue';
const mutations = {
/**
* 设置token
* @param { object } state
* @param { string } token
*/
sign(state, token) {
state.anyringToken = token;
sessionStorage.setItem('anyringToken', token);
},
/**
* 设置user用户信息
* @param {object} state
* @param {object} user {id, account, phone}
*/
setUser(state, user) {
if (!user) return;
state.user = { ...user };
sessionStorage.setItem('user', JSON.stringify(user));
},
/**
* 图片验证码
* @param {object} state
* @param {object} picCode
*/
setPicCode(state, picCode) {
state.picCode = { ...picCode };
},
/**
* 获取显示政策的ID
* @param {object} state

2
src/store/state.js → src/store/modules/home/state.js

@ -1,6 +1,4 @@
const state = {
anyringToken: '',
user: { id: '', phone: '', account: '' },
policyId: 0,
current: 1, // 政策当前处于第几页,默认1
comCurrent: 1, // 帖子列表当前处于第几页,默认1

32
src/store/actions.js → src/store/modules/user/actions.js

@ -1,6 +1,6 @@
import axios from 'axios';
import { message } from 'ant-design-vue';
import { getSmscode, getPicCode, signIn, changePassword, signUp, getUserId } from 'config/api-user';
import { getSmscode, getPicCode, signIn, changePassword, signUp, getUserId } from '@/config/api-user';
const actions = {
/**
@ -123,21 +123,21 @@ const actions = {
* @param {any} commit
* @param {object} params 提交的参数
*/
// async getUserId({ commit }, params) {
// try {
// const res = await getUserId({ params });
// const { code, msg, data } = res.data;
// if (code === 200) {
// commit('sign', data.token);
// commit('setUser', data);
// return data;
// } else {
// throw msg;
// }
// } catch (error) {
// throw error || '获取个人信息失败';
// }
// },
async getUserId({ commit }, params) {
try {
const res = await getUserId({ params });
const { code, msg, data } = res.data;
if (code === 200) {
commit('sign', data.token);
commit('setUser', data);
return data;
} else {
throw msg;
}
} catch (error) {
throw error || '获取个人信息失败';
}
},
};
export default actions;

7
src/store/modules/user/getters.js

@ -0,0 +1,7 @@
const getters = {};
// 域定制导航展示形式
// 0 -> 无特殊导航文字
// 1 -> 横向定制导航
// 2 -> 纵向定制导航
export default getters;

6
src/store/modules/user/index.js

@ -0,0 +1,6 @@
import mutations from './mutations';
import actions from './actions';
import state from './state';
import getters from './getters';
export default { namespaced: true, state, getters, mutations, actions };

33
src/store/modules/user/mutations.js

@ -0,0 +1,33 @@
const mutations = {
/**
* 设置token
* @param { object } state
* @param { string } token
*/
sign(state, token) {
state.anyringToken = token;
sessionStorage.setItem('anyringToken', token);
},
/**
* 设置user用户信息
* @param {object} state
* @param {object} user {id, account, phone}
*/
setUser(state, user) {
if (!user) return;
state.user = { ...user };
sessionStorage.setItem('user', JSON.stringify(user));
},
/**
* 图片验证码
* @param {object} state
* @param {object} picCode
*/
setPicCode(state, picCode) {
state.picCode = { ...picCode };
},
};
export default mutations;

6
src/store/modules/user/state.js

@ -0,0 +1,6 @@
const state = {
anyringToken: '',
user: { id: '', phone: '', account: '' },
};
export default state;

12
src/views/Activity/ActDetails.vue

@ -6,16 +6,20 @@
</div>
<div class="policy-info">
<span>
<a-icon type="clock-circle" class="baseColor" style="font-size: 14px; margin-right: 10px" />
<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 type="environment" style="margin-right: 10px" class="baseColor" />
<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 style="margin: 50px 25px" :fnval="actDetail.activityId" />
<enroll :fnval="actDetail.activityId" style="margin: 50px 25px" />
</div>
</div>
</template>
@ -29,7 +33,7 @@ export default {
data() {
return {};
},
computed: mapState(['actDetail']),
computed: mapState('home', ['actDetail']),
created() {},
methods: {},
};

30
src/views/Activity/Activity.vue

@ -8,14 +8,21 @@
<div class="wrap">
<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>
<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 class="search" v-model="iptCon" style="width: 381px" placeholder="请输入..." enter-button="搜索" @search="getData" />
<a-input-search
@search="getData"
class="search"
enter-button="搜索"
placeholder="请输入..."
style="width: 381px"
v-model="iptCon"
/>
</div>
<div class="policy-box">
<div v-for="(item, index) in lists" :key="index" class="div-box">
<div :key="index" class="div-box" v-for="(item, index) in lists">
<div @click="jumpDetails(item)" style="cursor: pointer">
<p class="item-title">{{ item.title }}</p>
<p class="item-content">{{ item.content }}</p>
@ -30,7 +37,14 @@
</p>
</div>
</div>
<a-pagination show-quick-jumper class="pagination" :current="actCurrent" :total="total" show-less-items @change="onShowSizeChange" />
<a-pagination
:current="actCurrent"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
/>
</div>
</template>
@ -55,7 +69,7 @@ export default {
lists: [],
};
},
computed: mapState(['actList', 'actIpCon', 'actCurrent']),
computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']),
created() {
this.iptCon = this.actIpCon;
this.aList = this.actList;
@ -73,7 +87,7 @@ export default {
this.getData();
},
methods: {
...mapMutations(['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']),
...mapMutations('home', ['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']),
//
async getData() {
try {

37
src/views/Community/ComDetails.vue

@ -6,13 +6,21 @@
</div>
<div class="policy-info">
<span>
<a-avatar :src="postDetail.avatarUrl" :size="20" style="margin-top: -4px; margin-right: 10px" />
<a-avatar
:size="20"
:src="postDetail.avatarUrl"
style="margin-top: -4px; margin-right: 10px"
/>
<span style="margin-right: 60px">{{ postDetail.userName }}</span>
<a-icon type="clock-circle" class="baseColor" style="font-size: 14px; margin-right: 10px" />
<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 type="message" style="margin-right: 10px" class="baseColor" />
<a-icon class="baseColor" style="margin-right: 10px" type="message" />
<span>{{ postDetail.commentNum }}</span>
</span>
</div>
@ -20,25 +28,28 @@
</div>
<div class="coms-style">
<div class="coms-top">
<div v-for="(item, index) in coms" :key="index" style="margin-top: 1em">
<div :key="index" style="margin-top: 1em" v-for="(item, index) in coms">
<p style="color: #999">
<a-avatar :src="item.avatarUrl" :size="20" style="margin-top: -4px; margin-right: 4px" alt="" />
<span style="margin-right: 10px"> {{ item.userName }}</span>
<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>
<span class="coms-content">{{ item.content }}</span>
</div>
</div>
<div class="coms-btm">
<a-textarea v-model="comment" style="height: 140px;min-height: 140px;max-height: 140px" />
<a-button type="primary" class="sub" @click="sub">提交</a-button>
<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>
</div>
</template>
@ -54,7 +65,7 @@ export default {
coms: {},
};
},
computed: mapState(['postDetail']),
computed: mapState('home', ['postDetail']),
created() {
this.getData();
},

45
src/views/Community/Community.vue

@ -8,46 +8,49 @@
<div class="wrap">
<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 :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"
v-model="iptCon"
style="width: 381px"
placeholder="请输入..."
enter-button="搜索"
@search="searchData"
placeholder="请输入..."
style="width: 381px"
v-model="iptCon"
/>
<a-button class="btn" type="primary" @click="jumpPost()">发帖</a-button>
<a-button @click="jumpPost()" class="btn" type="primary">发帖</a-button>
</div>
<div class="post" v-for="(item, index) in lists" :key="index">
<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 :src="item.avatarUrl" :size="20" style="margin-top: -4px" />
<a-avatar :size="20" :src="item.avatarUrl" style="margin-top: -4px" />
{{ item.userName }}
</span>
<span style="margin-left: 20px">{{ item.createdTime }}</span>
<span style="margin-left: 20px" class="baseColor">
<span class="baseColor" style="margin-left: 20px">
<a-icon type="message" />
{{ item.commentNum }}
</span>
</p>
<div class="d-flex flex-nowrap">
<img v-if="item.visitLocation" class="post-img" :src="item.visitLocation" alt="" />
<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">
<span @click="getDet(item.id, index)">查看详情<a-icon type="arrow-right" /></span>
<span @click="getDet(item.id, index)">
查看详情
<a-icon type="arrow-right" />
</span>
</p>
<div class="comment">
<div v-for="(a, b) in coms" :key="b">
<div :key="b" v-for="(a, b) in coms">
<p style="padding-left: 20px">
<a-avatar :src="a.avatarUrl" :size="20" style="margin-top: -4px" />
<a-avatar :size="20" :src="a.avatarUrl" style="margin-top: -4px" />
<span>{{ a.userName }}</span>
<span style="margin-left: 20px">{{ a.creatTime }}</span>
</p>
@ -56,13 +59,13 @@
</div>
</div>
<a-pagination
show-quick-jumper
class="pagination"
:current="comCurrent"
:page-size="pageSize"
:total="total"
show-less-items
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
/>
</div>
</template>
@ -91,7 +94,7 @@ export default {
lists: [],
};
},
computed: mapState(['comCurrent', 'postVal', 'postIpCon']),
computed: mapState('home', ['comCurrent', 'postVal', 'postIpCon']),
watch: {
value(val) {
this.setPostVal(val - 1);
@ -105,7 +108,7 @@ export default {
this.searchData();
},
methods: {
...mapMutations(['setComCurrent', 'setPostDetail', 'setPostVal', 'setPostIpCon']),
...mapMutations('home', ['setComCurrent', 'setPostDetail', 'setPostVal', 'setPostIpCon']),
//
async getDet(id, index) {
this.setPostDetail(this.lists[index]);

27
src/views/Community/Posting.vue

@ -4,23 +4,30 @@
<h2>标题</h2>
<a-input style="margin-bottom: 20px" v-model.trim="title" />
<h2>封面图片</h2>
<a-upload :action="action" :default-file-list="fileList" list-type="picture" @change="fileChange" name="files">
<a-button v-show="fileList.length === 0"> <a-icon type="upload" /> 点击上传 </a-button>
<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
v-model="content"
ref="myQuillEditor"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@change="onEditorChange($event)"
>
</quill-editor>
@focus="onEditorFocus($event)"
ref="myQuillEditor"
v-model="content"
></quill-editor>
</div>
<a-button type="primary" @click="subMit">发表</a-button>
<router-link to="Community" tag="a-button" style="margin-left: 40px" @click="subMit">取消</router-link>
<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>
@ -68,7 +75,7 @@ export default {
};
},
computed: {
...mapState(['postDetail', 'postVal']),
...mapState('home', ['postDetail', 'postVal']),
editor() {
return this.$refs.myQuillEditor.quill;
},

162
src/views/FirstPage/FirstPage.vue

@ -5,25 +5,120 @@
-->
<template>
<div>
<p>首页</p>
<rotation />
<p>界面</p>
<div class="inner">
<a-row>
<a-col :span="18">
<a-row>
<a-col :key="server.id" :span="8" v-for="server in services">
<div class="base-bg mr-8 d-flex">
<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"
class="second-base-bg white--text platform-box mb-8 d-flex flex-column justify-center align-center"
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>
</template>
<script>
import { mapState, mapActions } from 'vuex';
import Rotation from 'components/Rotation/Rotation.vue';
import IndexNewList from 'components/Index/IndexNewList.vue';
import { FrontSearchFriend, FrontSearchCompany } from 'config/api';
export default {
components: { Rotation },
components: { Rotation, IndexNewList },
data() {
return {};
return {
services: [
{ id: '01', chinese: '创新服务', english: 'INNOVATIVE' },
{ id: '02', chinese: '孵化服务', english: 'INCUBATION' },
{ id: '03', chinese: '产业服务', english: 'INDUSTRIAL' },
],
platforms: [
{
id: '04',
firstName: '创新挑战',
secondName: '',
},
{
id: '05',
firstName: '科技资源开放共享',
secondName: '服务平台',
},
{
id: '06',
firstName: '知识产权与技术',
secondName: '转移转化服务平台',
},
{
id: '07',
firstName: '知识培训服务平台',
secondName: '',
},
{
id: '08',
firstName: '资源开发利用平台',
secondName: '',
},
],
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: {
@ -41,6 +136,8 @@ export default {
console.log(msg);
}
},
//
async getData2() {
const params = {
param: {
@ -58,9 +155,66 @@ export default {
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;
},
},
};
</script>
<style lang="less" scoped>
.inner {
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>

6
src/views/Policy/PolicyDetails.vue

@ -11,12 +11,12 @@
</div>
<div class="policy-info">
<span>
<a-icon type="clock-circle" class="baseColor" />&nbsp;&nbsp;&nbsp;&nbsp;
<a-icon class="baseColor" type="clock-circle" />&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{ obj.time }}</span>
</span>
<span style="margin-left: 140px">
<!-- <a-icon type="form" />&nbsp;&nbsp;&nbsp;&nbsp; -->
<a-icon type="tag" style="color: #ff1857" />&nbsp;&nbsp;&nbsp;&nbsp;
<a-icon style="color: #ff1857" type="tag" />&nbsp;&nbsp;&nbsp;&nbsp;
<span>{{ obj.source }}</span>
</span>
</div>
@ -40,7 +40,7 @@ export default {
},
};
},
computed: mapState(['policyId']),
computed: mapState('home', ['policyId']),
created() {
this.getPolicyDet();
},

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

@ -9,21 +9,31 @@
<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.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>
</span>
<a-input-group class="search" compact>
<a-select v-model="pStatus.policyText[pStatus.value - 1]" style="width: 120px; height: 40px" @change="changeCode">
<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
@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 v-model="pStatus.iptCon" style="width: 76.2%" placeholder="请输入..." enter-button="搜索" @search="getPolicy" />
<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 v-for="(item, index) in lists" :key="index">
<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>
@ -32,7 +42,10 @@
<p class="item-content">{{ item.intro }}</p>
<!-- <p class="item-content" v-html="item.content"></p> -->
<p class="source-time">
<span class="baseColor source" @click="openWin(item.titleUrl)">来源{{ item.publishDepartName }}</span>
<span
@click="openWin(item.titleUrl)"
class="baseColor source"
>来源{{ item.publishDepartName }}</span>
<span class="time">{{ item.publishTime }}</span>
</p>
<p class="original baseColor">
@ -43,7 +56,14 @@
</p>
</div>
</div>
<a-pagination show-quick-jumper class="pagination" :total="total" :current="current" show-less-items @change="onShowSizeChange" />
<a-pagination
:current="current"
:total="total"
@change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
/>
</div>
</template>
@ -70,7 +90,7 @@ export default {
},
};
},
computed: mapState(['current', 'policyStatus']),
computed: mapState('home', ['current', 'policyStatus']),
watch: {
policyStatus(val) {
@ -85,7 +105,7 @@ export default {
},
methods: {
...mapMutations(['setPolicyId', 'setCurrent', 'setPolicyStatus']),
...mapMutations('home', ['setPolicyId', 'setCurrent', 'setPolicyStatus']),
async getPolictList() {
try {
const params = {

71
src/views/User/ForgetPassword.vue

@ -12,25 +12,72 @@
<a-row class="d-flex flex-nowrap mt-4" type="flex">
<a-col :span="8" class="explain" flex="auto">
<a-form :form="form" @submit="handleChangePassword">
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="手机号">
<a-input @change="changePhone" placeholder="请输入手机号" type="tel" v-decorator="['phone', { rules: phoneRules }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="手机号"
>
<a-input
@change="changePhone"
placeholder="请输入手机号"
type="tel"
v-decorator="['phone', { rules: phoneRules }]"
/>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="图片验证码" required>
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="图片验证码"
required
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入图片验证码" required type="number" v-model="codeNum" />
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" />
<a-button @click="changePicCode" class="code_img ml-2" size="small" type="primary" v-else>重新获取</a-button>
<img
:src="picCode.imageBase64"
@click="changePicCode"
class="code_img ml-2"
v-if="picCode && picCode.imageBase64"
/>
<a-button
@click="changePicCode"
class="code_img ml-2"
size="small"
type="primary"
v-else
>重新获取</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="短信验证码">
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="短信验证码"
>
<div class="d-flex flex-nowrap">
<a-input placeholder="请输入验证码" type="number" v-model="code" />
<a-button class="ml-2" disabled type="primary" v-if="showInterval">重新发送 {{ interval }}</a-button>
<a-button :disabled="phone && phone.length !== 11" @click="getCode" class="ml-2" type="primary" v-else>获取验证码</a-button>
<a-button
class="ml-2"
disabled
type="primary"
v-if="showInterval"
>重新发送 {{ interval }}</a-button>
<a-button
:disabled="phone && phone.length !== 11"
@click="getCode"
class="ml-2"
type="primary"
v-else
>获取验证码</a-button>
</div>
</a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="新密码">
<a-input-password placeholder="请输入您设置的新密码" v-decorator="['credential', { rules: passwordRules }]" />
<a-form-item
:label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="新密码"
>
<a-input-password
placeholder="请输入您设置的新密码"
v-decorator="['credential', { rules: passwordRules }]"
/>
</a-form-item>
<div class="d-flex flex-row-reverse">
<a-button block class="my-5" html-type="submit" style="width: 75%" type="primary">确认修改</a-button>
@ -87,14 +134,14 @@ export default {
};
},
computed: mapState(['picCode']),
computed: mapState('user', ['picCode']),
created() {
this.sendPicCode();
},
methods: {
...mapActions(['changePassword', 'sendCode', 'sendPicCode']),
...mapActions('user', ['changePassword', 'sendCode', 'sendPicCode']),
changePhone(e) {
this.phone = e.target.value;
},

4
src/views/User/Login.vue

@ -140,14 +140,14 @@ export default {
};
},
computed: mapState(['picCode']),
computed: mapState('user', ['picCode']),
created() {
this.sendPicCode();
},
methods: {
...mapActions(['signIn', 'sendCode', 'sendPicCode']),
...mapActions('user', ['signIn', 'sendCode', 'sendPicCode']),
changePhone(e) {
this.identifier = e.target.value;
},

Loading…
Cancel
Save