aBin 5 years ago
parent
commit
a8f3cccac1
  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. 74
      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=", "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"
}
}
}
} }
} }
}, },
@ -12663,6 +12582,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",

19
src/App.vue

@ -7,10 +7,7 @@
<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>
<div class="ant-back-top-inner"> <div class="ant-back-top-inner"></div>
回到顶部
<a-icon type="vertical-align-top" />
</div>
</a-back-top> </a-back-top>
</div> </div>
</div> </div>
@ -31,7 +28,7 @@ export default {
return { zh_CN }; return { zh_CN };
}, },
computed: mapState(['anyringToken']), computed: mapState('user', ['anyringToken']),
updated() { updated() {
window.scroll(0, 0); window.scroll(0, 0);
}, },
@ -48,7 +45,7 @@ export default {
}); });
}, },
methods: { ...mapActions(['getUserId']) }, methods: { ...mapActions('user', ['getUserId']) },
}; };
</script> </script>
@ -82,7 +79,6 @@ body::-webkit-scrollbar {
height: 64px; height: 64px;
} }
.footer { .footer {
height: 397px;
width: 100%; width: 100%;
background: #0d1f32; background: #0d1f32;
bottom: 0; bottom: 0;
@ -93,12 +89,9 @@ body::-webkit-scrollbar {
} }
#components-back-top-demo-custom .ant-back-top-inner { #components-back-top-demo-custom .ant-back-top-inner {
height: 40px; height: 40px;
width: 120px; width: 40px;
line-height: 40px; line-height: 40px;
border-radius: 4px; background: url('assets/t-top.png') center no-repeat;
background-color: #13acc4; background-size: contain;
color: #fff;
text-align: center;
font-size: 14px;
} }
</style> </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; padding: 12px;
} }
.pa-4 {
padding: 16px;
}
.pa-5 {
padding: 20px;
}
.pb-3 { .pb-3 {
padding-bottom: 12px; padding-bottom: 12px;
} }
@ -19,6 +27,21 @@
padding-bottom: 40px; 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 // margin
.ma-3 { .ma-3 {
margin: 12px; margin: 12px;
@ -60,6 +83,10 @@
margin-top: 16px; margin-top: 16px;
} }
.mt-8{
margin-top: 32px;
}
.mb-1{ .mb-1{
margin-bottom: 4px; margin-bottom: 4px;
} }
@ -76,6 +103,22 @@
margin-bottom: 16px; 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{ .ml-2{
margin-left: 8px; margin-left: 8px;
} }
@ -128,6 +171,14 @@
margin-right: 24px; margin-right: 24px;
} }
.mr-7{
margin-right: 28px;
}
.mr-8{
margin-right: 32px;
}
// background // background
.white { .white {
background: white; background: white;
@ -170,12 +221,25 @@
justify-content: space-between; justify-content: space-between;
} }
.align-center{
align-items: center
}
.align-end{
align-items: flex-end
}
.flex-1{ .flex-1{
display: flex; display: flex;
flex: 1; flex: 1;
} }
// other // other
.inner {
width: 82%;
margin: 0 auto;
}
.pointer{ .pointer{
cursor:pointer; cursor:pointer;
} }
@ -184,7 +248,44 @@
height:100%; height:100%;
} }
.fill-width{
width:100%;
}
// font // 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-bold-24{
font-size: 24px; font-size: 24px;
font-weight: bold; font-weight: bold;
@ -194,6 +295,10 @@
font-size: 24px; font-size: 24px;
} }
.font-20{
font-size: 20px;
}
.font-bold-16{ .font-bold-16{
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
@ -212,6 +317,10 @@
font-size: 14px; font-size: 14px;
} }
.font-12{
font-size: 12px;
}
.icon-size{ .icon-size{
font-size: 20px; font-size: 20px;
} }
@ -242,3 +351,15 @@ h2{
.ant-btn-link:hover, .ant-btn-link:focus{ .ant-btn-link:hover, .ant-btn-link:focus{
color: #13ACC4; color: #13ACC4;
} }
.base-bg{
background: #13ACC4
}
.second-base-bg{
background: #AACD06
}
.white--text{
color: #fff
}

74
src/components/FooterPage/FooterPage.vue

@ -1,6 +1,42 @@
<template> <template>
<div>
<div class="footer"> <div class="footer">
{{ str }} <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> </div>
</template> </template>
@ -12,4 +48,38 @@ export default {
}; };
</script> </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> <template>
<div class="friend"> <div class="friend">
<div class="friend-content"> <div class="inner">
{{ str }} {{ str }}
<span :key="index" class="mx-2" v-for="(list,index) in lists">{{ list }}</span>
</div> </div>
</div> </div>
</template> </template>
@ -9,7 +10,10 @@
<script> <script>
export default { export default {
data() { data() {
return { str: '友情链接' }; return {
str: '友情链接:',
lists: ['科技部', '发改委', '工信部', '太原市综改区', '山西省科技厅', '山西省工信厅', '山西省发改委', '太原市科技厅', '太原市发改委'],
};
}, },
}; };
</script> </script>
@ -17,11 +21,8 @@ export default {
<style lang="stylus" scoped> <style lang="stylus" scoped>
.friend { .friend {
line-height: 64px; line-height: 64px;
background: #ffffff; background: #fff;
} font-size: 12px;
color: rgba(0, 0, 0, 0.65);
.friend-content {
width: 1260px;
margin: auto;
} }
</style> </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> <template>
<div class="head"> <div class="head">
<a-carousel autoplay :autoplay-speed="time"> <img class="settle-in" src="~assets/settleIn.png" />
<div class="img-box" v-for="item in lists" :key="item.id"> <a-carousel :autoplay-speed="time" autoplay>
<img :src="item.url" alt="" /> <div :key="item.id" class="img-box" v-for="item in lists">
<img :src="item.url" alt />
</div> </div>
</a-carousel> </a-carousel>
</div> </div>
@ -42,12 +43,20 @@ export default {
<style lang="stylus"> <style lang="stylus">
.head { .head {
background: white; background: white;
max-height: 460px; max-height: 340px;
overflow: hidden; overflow: hidden;
position: relative;
}
.settle-in {
position: absolute;
top: 3%;
right: 10%;
z-index: 9;
} }
.img-box { .img-box {
height: 460px; height: 340px;
width: 100%; width: 100%;
img { img {

89
src/components/User/MechanismSignUp.vue

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

81
src/components/User/PersonalSignUp.vue

@ -22,13 +22,31 @@
> >
<a-input maxlength="20" v-decorator="['nickname']" /> <a-input maxlength="20" v-decorator="['nickname']" />
</a-form-item> </a-form-item>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="登录密码"> <a-form-item
<a-input-password placeholder="密码由字母和数字混合组成,6-16位字符" v-decorator="['password', { rules: passwordRules }]" /> :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>
<a-form-item :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol" label="确认密码"> <a-form-item
<a-input-password placeholder="请再次输入您设置的密码" v-decorator="['againCredential', { rules: againPassword }]" /> :label-col="formItemLayout.labelCol"
:wrapper-col="formItemLayout.wrapperCol"
label="确认密码"
>
<a-input-password
placeholder="请再次输入您设置的密码"
v-decorator="['againCredential', { rules: againPassword }]"
/>
</a-form-item> </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 <a-input
@change="changePhone" @change="changePhone"
placeholder="该手机号用于账号激活、登录及找回密码" placeholder="该手机号用于账号激活、登录及找回密码"
@ -36,22 +54,57 @@
v-decorator="['phone', { rules: phoneRules }]" v-decorator="['phone', { rules: phoneRules }]"
/> />
</a-form-item> </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"> <div class="d-flex flex-nowrap">
<a-input placeholder="请输入图片验证码" type="number" v-model="codeNum" /> <a-input placeholder="请输入图片验证码" type="number" v-model="codeNum" />
<img :src="picCode.imageBase64" @click="changePicCode" class="code_img ml-2" v-if="picCode && picCode.imageBase64" /> <img
<a-button @click="changePicCode" class="code_img ml-2" size="small" type="primary" v-else>重新获取</a-button> :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> </div>
</a-form-item> </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"> <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 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> </div>
</a-form-item> </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 placeholder="请选择来源" v-decorator="['source']">
<a-select-option value="1">绿谷</a-select-option> <a-select-option value="1">绿谷</a-select-option>
</a-select> </a-select>
@ -105,14 +158,14 @@ export default {
}; };
}, },
computed: mapState(['picCode']), computed: mapState('user', ['picCode']),
created() { created() {
this.sendPicCode(); this.sendPicCode();
}, },
methods: { methods: {
...mapActions(['signUp', 'sendCode', 'sendPicCode']), ...mapActions('user', ['signUp', 'sendCode', 'sendPicCode']),
changePhone(e) { changePhone(e) {
this.phone = e.target.value; 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); 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, BackTop,
Carousel, Carousel,
Avatar, Avatar,
Layout,
} from 'ant-design-vue'; } from 'ant-design-vue';
import { ConfigProvider } from 'ant-design-vue'; import { ConfigProvider } from 'ant-design-vue';
Vue.component(ConfigProvider.name, ConfigProvider); Vue.component(ConfigProvider.name, ConfigProvider);
@ -57,6 +58,7 @@ Vue.use(Checkbox);
Vue.use(BackTop); Vue.use(BackTop);
Vue.use(Carousel); Vue.use(Carousel);
Vue.use(Avatar); Vue.use(Avatar);
Vue.use(Layout);
Vue.prototype.$message = message; Vue.prototype.$message = message;
Vue.prototype.$notification = notification; Vue.prototype.$notification = notification;

19
src/store/index.js

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

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'; import { List } from 'ant-design-vue';
const mutations = { 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 * 获取显示政策的ID
* @param {object} state * @param {object} state

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

@ -1,6 +1,4 @@
const state = { const state = {
anyringToken: '',
user: { id: '', phone: '', account: '' },
policyId: 0, policyId: 0,
current: 1, // 政策当前处于第几页,默认1 current: 1, // 政策当前处于第几页,默认1
comCurrent: 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 axios from 'axios';
import { message } from 'ant-design-vue'; 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 = { const actions = {
/** /**
@ -123,21 +123,21 @@ const actions = {
* @param {any} commit * @param {any} commit
* @param {object} params 提交的参数 * @param {object} params 提交的参数
*/ */
// async getUserId({ commit }, params) { async getUserId({ commit }, params) {
// try { try {
// const res = await getUserId({ params }); const res = await getUserId({ params });
// const { code, msg, data } = res.data; const { code, msg, data } = res.data;
// if (code === 200) { if (code === 200) {
// commit('sign', data.token); commit('sign', data.token);
// commit('setUser', data); commit('setUser', data);
// return data; return data;
// } else { } else {
// throw msg; throw msg;
// } }
// } catch (error) { } catch (error) {
// throw error || '获取个人信息失败'; throw error || '获取个人信息失败';
// } }
// }, },
}; };
export default actions; 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>
<div class="policy-info"> <div class="policy-info">
<span> <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>{{ actDetail.releaseTime }}-{{ actDetail.closeTime }}</span>
</span> </span>
<span style="margin-left: 60px"> <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>{{ actDetail.address }}</span>
</span> </span>
</div> </div>
<div class="policy-content" v-dompurify-html="actDetail.content"></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>
</div> </div>
</template> </template>
@ -29,7 +33,7 @@ export default {
data() { data() {
return {}; return {};
}, },
computed: mapState(['actDetail']), computed: mapState('home', ['actDetail']),
created() {}, created() {},
methods: {}, methods: {},
}; };

30
src/views/Activity/Activity.vue

@ -8,14 +8,21 @@
<div class="wrap"> <div class="wrap">
<div class="search-list"> <div class="search-list">
<span> <span>
<a-checkbox :checked="sta.ly === 1" @click="cSta('ly')"> 路演 </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.jz === 1" @click="cSta('jz')">讲座</a-checkbox>
<a-checkbox :checked="sta.sl === 1" @click="cSta('sl')"> 沙龙 </a-checkbox> <a-checkbox :checked="sta.sl === 1" @click="cSta('sl')">沙龙</a-checkbox>
</span> </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>
<div class="policy-box"> <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"> <div @click="jumpDetails(item)" style="cursor: pointer">
<p class="item-title">{{ item.title }}</p> <p class="item-title">{{ item.title }}</p>
<p class="item-content">{{ item.content }}</p> <p class="item-content">{{ item.content }}</p>
@ -30,7 +37,14 @@
</p> </p>
</div> </div>
</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> </div>
</template> </template>
@ -55,7 +69,7 @@ export default {
lists: [], lists: [],
}; };
}, },
computed: mapState(['actList', 'actIpCon', 'actCurrent']), computed: mapState('home', ['actList', 'actIpCon', 'actCurrent']),
created() { created() {
this.iptCon = this.actIpCon; this.iptCon = this.actIpCon;
this.aList = this.actList; this.aList = this.actList;
@ -73,7 +87,7 @@ export default {
this.getData(); this.getData();
}, },
methods: { methods: {
...mapMutations(['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']), ...mapMutations('home', ['setActList', 'setActIpCon', 'setActCurrent', 'setActDetail']),
// //
async getData() { async getData() {
try { try {

37
src/views/Community/ComDetails.vue

@ -6,13 +6,21 @@
</div> </div>
<div class="policy-info"> <div class="policy-info">
<span> <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> <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>{{ postDetail.createdTime }}</span>
</span> </span>
<span style="margin-left: 60px"> <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>{{ postDetail.commentNum }}</span>
</span> </span>
</div> </div>
@ -20,25 +28,28 @@
</div> </div>
<div class="coms-style"> <div class="coms-style">
<div class="coms-top"> <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"> <p style="color: #999">
<a-avatar :src="item.avatarUrl" :size="20" style="margin-top: -4px; margin-right: 4px" alt="" /> <a-avatar
<span style="margin-right: 10px"> {{ item.userName }}</span> :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> <span>{{ item.creatTime }}</span>
</p> </p>
<span class="coms-content"> <span class="coms-content">{{ item.content }}</span>
{{ item.content }}
</span>
</div> </div>
</div> </div>
<div class="coms-btm"> <div class="coms-btm">
<a-textarea v-model="comment" style="height: 140px;min-height: 140px;max-height: 140px" /> <a-textarea style="height: 140px;min-height: 140px;max-height: 140px" v-model="comment" />
<a-button type="primary" class="sub" @click="sub">提交</a-button> <a-button @click="sub" class="sub" type="primary">提交</a-button>
</div> </div>
<!-- <div class="txtara"> <!-- <div class="txtara">
<a-textarea placeholder="请输入..." :rows="4" v-model="comment" /> <a-textarea placeholder="请输入..." :rows="4" v-model="comment" />
<a-button class="txt-btn" type="primary" @click="sub(index)">提交</a-button> <a-button class="txt-btn" type="primary" @click="sub(index)">提交</a-button>
</div> --> </div>-->
</div> </div>
</div> </div>
</template> </template>
@ -54,7 +65,7 @@ export default {
coms: {}, coms: {},
}; };
}, },
computed: mapState(['postDetail']), computed: mapState('home', ['postDetail']),
created() { created() {
this.getData(); this.getData();
}, },

45
src/views/Community/Community.vue

@ -8,46 +8,49 @@
<div class="wrap"> <div class="wrap">
<div class="search-list"> <div class="search-list">
<a-radio-group v-model="value"> <a-radio-group v-model="value">
<a-radio :style="radioStyle" :value="1"> 主题论坛 </a-radio> <a-radio :style="radioStyle" :value="1">主题论坛</a-radio>
<a-radio :style="radioStyle" :value="2"> 创新社区 </a-radio> <a-radio :style="radioStyle" :value="2">创新社区</a-radio>
<a-radio :style="radioStyle" :value="3"> 孵化社区 </a-radio> <a-radio :style="radioStyle" :value="3">孵化社区</a-radio>
<a-radio :style="radioStyle" :value="4"> 产业社区 </a-radio> <a-radio :style="radioStyle" :value="4">产业社区</a-radio>
</a-radio-group> </a-radio-group>
<a-input-search <a-input-search
@search="searchData"
class="search" class="search"
v-model="iptCon"
style="width: 381px"
placeholder="请输入..."
enter-button="搜索" 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>
<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 class="post-title">{{ item.title }}</p>
<p style="color: rgba(0, 0, 0, 0.45)"> <p style="color: rgba(0, 0, 0, 0.45)">
<span> <span>
<!-- <a-icon type="user" class="baseColor" /> --> <!-- <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 }} {{ item.userName }}
</span> </span>
<span style="margin-left: 20px">{{ item.createdTime }}</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" /> <a-icon type="message" />
{{ item.commentNum }} {{ item.commentNum }}
</span> </span>
</p> </p>
<div class="d-flex flex-nowrap"> <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 class="post-content" v-dompurify-html="item.content"></div>
</div> </div>
<p class="look-down"> <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> </p>
<div class="comment"> <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"> <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>{{ a.userName }}</span>
<span style="margin-left: 20px">{{ a.creatTime }}</span> <span style="margin-left: 20px">{{ a.creatTime }}</span>
</p> </p>
@ -56,13 +59,13 @@
</div> </div>
</div> </div>
<a-pagination <a-pagination
show-quick-jumper
class="pagination"
:current="comCurrent" :current="comCurrent"
:page-size="pageSize" :page-size="pageSize"
:total="total" :total="total"
show-less-items
@change="onShowSizeChange" @change="onShowSizeChange"
class="pagination"
show-less-items
show-quick-jumper
/> />
</div> </div>
</template> </template>
@ -91,7 +94,7 @@ export default {
lists: [], lists: [],
}; };
}, },
computed: mapState(['comCurrent', 'postVal', 'postIpCon']), computed: mapState('home', ['comCurrent', 'postVal', 'postIpCon']),
watch: { watch: {
value(val) { value(val) {
this.setPostVal(val - 1); this.setPostVal(val - 1);
@ -105,7 +108,7 @@ export default {
this.searchData(); this.searchData();
}, },
methods: { methods: {
...mapMutations(['setComCurrent', 'setPostDetail', 'setPostVal', 'setPostIpCon']), ...mapMutations('home', ['setComCurrent', 'setPostDetail', 'setPostVal', 'setPostIpCon']),
// //
async getDet(id, index) { async getDet(id, index) {
this.setPostDetail(this.lists[index]); this.setPostDetail(this.lists[index]);

27
src/views/Community/Posting.vue

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

162
src/views/FirstPage/FirstPage.vue

@ -5,25 +5,120 @@
--> -->
<template> <template>
<div> <div>
<p>首页</p>
<rotation /> <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> </div>
</template> </template>
<script> <script>
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 { FrontSearchFriend, FrontSearchCompany } from 'config/api'; import { FrontSearchFriend, FrontSearchCompany } from 'config/api';
export default { export default {
components: { Rotation }, components: { Rotation, IndexNewList },
data() { 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() { created() {
this.getData1(); this.getData1();
this.getData2(); this.getData2();
this.getIndustryInfoLists();
this.getFrontLists();
}, },
methods: { methods: {
...mapActions('home', ['getIndustryInfoList', 'getFrontList']),
//
async getData1() { async getData1() {
const params = { const params = {
param: { param: {
@ -41,6 +136,8 @@ export default {
console.log(msg); console.log(msg);
} }
}, },
//
async getData2() { async getData2() {
const params = { const params = {
param: { param: {
@ -58,9 +155,66 @@ export default {
console.log(msg); 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> </script>
<style lang="less" scoped> <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> </style>

6
src/views/Policy/PolicyDetails.vue

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

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

@ -9,21 +9,31 @@
<div class="search-list"> <div class="search-list">
<!-- <search-list @iptCon="getInput" /> --> <!-- <search-list @iptCon="getInput" /> -->
<span> <span>
<a-checkbox :checked="pStatus.bw - 0 === 1" @click="changeStatus('bw')"> 部委 </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.sx - 0 === 1" @click="changeStatus('sx')">山西</a-checkbox>
<a-checkbox :checked="pStatus.zg - 0 === 1" @click="changeStatus('zg')"> 山西转型综改示范区 </a-checkbox> <a-checkbox :checked="pStatus.zg - 0 === 1" @click="changeStatus('zg')">山西转型综改示范区</a-checkbox>
</span> </span>
<a-input-group class="search" compact> <a-input-group class="search" compact>
<a-select v-model="pStatus.policyText[pStatus.value - 1]" style="width: 120px; height: 40px" @change="changeCode"> <a-select
<a-select-option value="1"> 标题 </a-select-option> @change="changeCode"
<a-select-option value="2"> 地区 </a-select-option> style="width: 120px; height: 40px"
<a-select-option value="3"> 发布部门 </a-select-option> 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-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> </a-input-group>
</div> </div>
<div class="policy-box"> <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"> <div class="date-box">
<p class="date-mon">{{ monthEnglish[item.publishTime.split('-')[1] - 1] }}.</p> <p class="date-mon">{{ monthEnglish[item.publishTime.split('-')[1] - 1] }}.</p>
<p class="date-day">{{ item.publishTime.split('-')[2] }}</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">{{ item.intro }}</p>
<!-- <p class="item-content" v-html="item.content"></p> --> <!-- <p class="item-content" v-html="item.content"></p> -->
<p class="source-time"> <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> <span class="time">{{ item.publishTime }}</span>
</p> </p>
<p class="original baseColor"> <p class="original baseColor">
@ -43,7 +56,14 @@
</p> </p>
</div> </div>
</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> </div>
</template> </template>
@ -70,7 +90,7 @@ export default {
}, },
}; };
}, },
computed: mapState(['current', 'policyStatus']), computed: mapState('home', ['current', 'policyStatus']),
watch: { watch: {
policyStatus(val) { policyStatus(val) {
@ -85,7 +105,7 @@ export default {
}, },
methods: { methods: {
...mapMutations(['setPolicyId', 'setCurrent', 'setPolicyStatus']), ...mapMutations('home', ['setPolicyId', 'setCurrent', 'setPolicyStatus']),
async getPolictList() { async getPolictList() {
try { try {
const params = { const params = {

71
src/views/User/ForgetPassword.vue

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

Loading…
Cancel
Save