yuantianjiao 6 年之前
父節點
當前提交
b849b3f86e

+ 11
- 1
config/index.js 查看文件

@@ -21,7 +21,17 @@ module.exports = {
21 21
     port: 8081,
22 22
     assetsSubDirectory: 'static',
23 23
     assetsPublicPath: '/',
24
-    proxyTable: {},
24
+    proxyTable: {
25
+      '/api': {
26
+        // target: 'https://dp.huiju360.com.cn/hj_operations',
27
+        // target: 'http://192.168.0.62:8080', //wf
28
+        target: 'http://dev.ycjcjy.com', //zys
29
+        changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
30
+        pathRewrite: {
31
+          '^/api': '/api-v2/api'
32
+        },
33
+      },
34
+    },
25 35
     // CSS Sourcemaps off by default because relative paths are "buggy"
26 36
     // with this option, according to the CSS-Loader README
27 37
     // (https://github.com/webpack/css-loader#sourcemaps)

+ 1
- 0
package.json 查看文件

@@ -20,6 +20,7 @@
20 20
   },
21 21
   "devDependencies": {
22 22
     "autoprefixer": "^6.4.0",
23
+    "axios": "^0.18.0",
23 24
     "babel-core": "^6.0.0",
24 25
     "babel-loader": "^6.0.0",
25 26
     "babel-plugin-transform-runtime": "^6.0.0",

+ 4
- 0
src/common/css/reset.css 查看文件

@@ -60,4 +60,8 @@ select option {
60 60
 	width: 100%;
61 61
 	height: 100%;
62 62
 	position: relative;
63
+}
64
+
65
+.van-toast div{
66
+	color: white;
63 67
 }

二進制
src/common/icon/bg.jpg 查看文件


二進制
src/common/icon/loading.gif 查看文件


二進制
src/common/icon/logo.1.png 查看文件


+ 165
- 0
src/module/user/bindMobile/bindMobile.vue 查看文件

@@ -0,0 +1,165 @@
1
+<template>
2
+  <div class="mainPage">
3
+    <div class="mask">
4
+      <div class="box">
5
+        <div class="title">绑定</div>
6
+
7
+        <div class="mobile">
8
+          <i class="iconfont icon-dianhua"></i>
9
+          <input type="number" max="11" placeholder="手机号" v-model="postData.phone">
10
+        </div>
11
+
12
+        <div class="recommend">
13
+          <span>推荐人</span>
14
+          <div @click="selectCase">
15
+            <span>{{caseName}}</span>
16
+            <i class="iconfont icon-triangle-bottom"></i>
17
+          </div>
18
+          <div @click="selectSales">
19
+            <span>{{salesName}}</span>
20
+            <i class="iconfont icon-triangle-bottom"></i>
21
+          </div>
22
+        </div>
23
+
24
+        <div class="sms">
25
+          <i class="iconfont icon-mima"></i>
26
+          <input type="number" max="6" placeholder="验证码" v-model="postData.captcha">
27
+          <div class="sand" v-if="seconds === 60" @click="sandMsg">发送验证码</div>
28
+          <div class="sand" v-else>{{seconds}}后可重发</div>
29
+        </div>
30
+
31
+        <div class="submit" @click="submit">
32
+          <div>提交</div>
33
+        </div>
34
+      </div>
35
+      <transition name="slide">
36
+        <div class="select" v-if="showCase">
37
+          <van-picker
38
+            show-toolbar
39
+            title="请选择"
40
+            value-key='CaseName'
41
+            :columns="columns"
42
+            @cancel="onCancelC"
43
+            @confirm="onConfirmC"
44
+          />
45
+        </div>
46
+      </transition>
47
+      <transition name="slide">
48
+        <div class="select" v-if="showSales">
49
+          <van-picker
50
+            show-toolbar
51
+            title="请选择"
52
+            value-key='UserName'
53
+            :columns="columnsS"
54
+            @cancel="onCancelS"
55
+            @confirm="onConfirmS"
56
+          />
57
+        </div>
58
+      </transition>
59
+    </div>
60
+  </div>
61
+</template>
62
+
63
+<script>
64
+import { mapState, createNamespacedHelpers } from 'vuex'
65
+const { mapActions: actions } = createNamespacedHelpers('userCenter')
66
+export default {
67
+  data () {
68
+    return {
69
+      showCase: false,
70
+      showSales: false,
71
+      columns: [],
72
+      columnsS: [],
73
+      caseName: '选择案场',
74
+      salesName: '选择销售',
75
+      seconds: 60,
76
+      postData: {
77
+        phone: '',
78
+        case: '',
79
+        sales: '',
80
+        captcha: ''
81
+      }
82
+    }
83
+  },
84
+  computed: {
85
+    ...mapState({
86
+      caseInfo: x => x.userCenter.caseInfo
87
+    })
88
+  },
89
+  created () {
90
+    this.getCaseInfo(1).then(() => {
91
+      this.columns = this.caseInfo.cases
92
+    })
93
+  },
94
+  methods: {
95
+    ...actions(['getCaseInfo']),
96
+    ...actions(['getCaptcha']),
97
+    ...actions(['submitData']),
98
+    onConfirmC (value, index) {
99
+      this.caseName = value.CaseName
100
+      this.postData.case = value.CaseId
101
+      for (let i=0;i<this.caseInfo.sales.length;i++){
102
+        if (this.caseInfo.sales[i].CaseId === this.postData.case){
103
+          this.columnsS.push(this.caseInfo.sales[i])
104
+        }
105
+      }
106
+      this.showCase = false
107
+    },
108
+    onCancelC () {
109
+      this.showCase = false
110
+    },
111
+    onConfirmS (value, index) {
112
+      this.salesName = value.UserName
113
+      this.postData.sales = value.UserId
114
+      this.showSales = false
115
+    },
116
+    onCancelS () {
117
+      this.showSales = false
118
+    },
119
+    selectCase () {
120
+      this.showCase = true
121
+    },
122
+    selectSales () {
123
+      if (!this.postData.case) {
124
+        this.$toast('请先选择案场')
125
+        return
126
+      } else if (!this.columnsS) {
127
+        this.$toast('此案场无销售')
128
+        return
129
+      }
130
+      this.showSales = true
131
+    },
132
+    sandMsg () {
133
+      if (!this.postData.phone) {
134
+        this.$toast('请先填写手机号')
135
+        return
136
+      }
137
+      this.getCaptcha(this.postData.phone)
138
+      this.runTime()
139
+    },
140
+    runTime () {
141
+      setTimeout(() => {
142
+        this.seconds--
143
+        if (this.seconds < 60 && this.seconds >= 1) {
144
+          this.runTime()
145
+        } else if (this.seconds < 1) {
146
+          this.seconds = 60
147
+        }
148
+      }, 1000)
149
+    },
150
+    submit () {
151
+      if (!this.postData.captcha) {
152
+        this.$toast('请先获取验证码')
153
+        return
154
+      }
155
+      this.submitData(this.postData).then((res) => {
156
+        this.$toast(res)
157
+      })
158
+    }
159
+  }
160
+}
161
+</script>
162
+
163
+<style lang="scss" scoped>
164
+@import "page.scss";
165
+</style>

+ 115
- 0
src/module/user/bindMobile/page.scss 查看文件

@@ -0,0 +1,115 @@
1
+.mainPage {
2
+  background: url("../../../common/icon/bg.jpg") no-repeat 0 -0.8rem;
3
+  background-size: 100% calc(100% + 90px);
4
+  position: relative;
5
+  .mask{
6
+    width: 100%;
7
+    height: 100%;
8
+    display: flex;
9
+    justify-content: center;
10
+    align-items: center;
11
+    background: rgba(0,0,0,0.3);
12
+    position: relative;
13
+    .select {
14
+      position: absolute;
15
+      bottom: 0;
16
+      left: 0;
17
+      width: 100%;
18
+    }
19
+    .box{
20
+      width: 3.25rem;
21
+      height: 3.34rem;
22
+      background:rgba(255,255,255,1);
23
+      border-radius:8px;
24
+      padding: .2rem;
25
+      box-sizing: border-box;
26
+      .title{
27
+        font-size: .16rem;
28
+        font-weight: bold;
29
+        text-align: center;
30
+        padding-bottom: .24rem;
31
+      }
32
+      .mobile,.sms{
33
+        width: 2.85rem;
34
+        height: .5rem;
35
+        background:rgba(255,255,255,1);
36
+        border-radius:8px;
37
+        border:1px solid rgba(168,182,200,0.2);
38
+        display: flex;
39
+        align-items: center;
40
+        position: relative;
41
+        i{
42
+          color: rgba(168,182,200,1);
43
+          padding: .14rem;
44
+          font-size: .18rem;
45
+        }
46
+        input{
47
+          flex: 1;
48
+          height: 100%;
49
+        }
50
+        .sand{
51
+          width: .7rem;
52
+          height: .24rem;
53
+          border-radius:20px;
54
+          border:1px solid rgba(218,218,218,1);
55
+          color: rgba(218,218,218,1);
56
+          font-size: 12px;
57
+          text-align: center;
58
+          line-height: .24rem;
59
+          position: absolute;
60
+          right: .1rem;
61
+        }
62
+      }
63
+      .recommend{
64
+        width: 2.85rem;
65
+        height: .4rem;
66
+        padding: .15rem 0;
67
+        display: flex;
68
+        align-items: center;
69
+        justify-content: space-between;
70
+        span{
71
+          color: rgba(168,182,200,1);
72
+        }
73
+        i{
74
+          color: rgba(168,182,200,1);
75
+          padding-left: .14rem;
76
+          font-size: .12rem;
77
+        }
78
+        div{
79
+          height: 100%;
80
+          display: flex;
81
+          align-items: center;
82
+          border-radius:8px;
83
+          border:1px solid rgba(168,182,200,0.2);
84
+          padding: .1rem;
85
+          box-sizing: border-box;
86
+        }
87
+      }
88
+      .submit{
89
+        margin-top: .24rem;
90
+        width: 2.85rem;
91
+        height: .48rem;
92
+        border-radius:25px;
93
+        border:1px solid rgba(255,66,28,1);
94
+        text-align: center;
95
+        line-height: .48rem;
96
+        div{
97
+          font-size: .15rem;
98
+          color: rgba(255,66,28,1);
99
+        }
100
+      }
101
+    }
102
+  }
103
+}
104
+
105
+.slide-enter-active {
106
+  transition: all .3s ease;
107
+}
108
+.slide-leave-active {
109
+  transition: all .3s ease;
110
+}
111
+.slide-enter, .slide-leave-to
112
+/* .slide-fade-leave-active for below version 2.1.8 */ {
113
+  transform: translateY(2.6rem);
114
+  opacity: 0;
115
+}

+ 7
- 3
src/module/user/fiveA/index.vue 查看文件

@@ -44,7 +44,8 @@ import courseItem from '../../../components/courseItem/index'
44 44
 import newsItem from '../../../components/newsItem/index'
45 45
 import { swiper, swiperSlide } from 'vue-awesome-swiper'
46 46
 import 'swiper/dist/css/swiper.css'
47
-
47
+import { mapState, createNamespacedHelpers } from 'vuex'
48
+const { mapActions: mapFiveAActions } = createNamespacedHelpers('fiveA')
48 49
 export default {
49 50
   name: '',
50 51
   data () {
@@ -123,6 +124,9 @@ export default {
123 124
     MySwiperMsg () {
124 125
       return this.$refs.MySwiperMsg.swiper
125 126
     },
127
+    ...mapState({
128
+      nav: x => x.fiveA.nav
129
+    })
126 130
   },
127 131
   components: {
128 132
     newsItem,
@@ -131,10 +135,10 @@ export default {
131 135
     courseItem,
132 136
   },
133 137
   created () {
134
-
138
+    this.getFiveAInfo()
135 139
   },
136 140
   methods: {
137
-
141
+    ...mapFiveAActions(['getFiveAInfo'])
138 142
   }
139 143
 }
140 144
 </script>

+ 8
- 4
src/module/user/mainPage/indexPage/index.vue 查看文件

@@ -71,7 +71,8 @@
71 71
 import newsItem from '../../../../components/newsItem/index'
72 72
 import { swiper, swiperSlide } from 'vue-awesome-swiper'
73 73
 import 'swiper/dist/css/swiper.css'
74
-
74
+import { mapState, createNamespacedHelpers } from 'vuex'
75
+const { mapActions: mapIndexActions } = createNamespacedHelpers('index')
75 76
 export default {
76 77
   name: '',
77 78
   data () {
@@ -120,12 +121,15 @@ export default {
120 121
     }
121 122
   },
122 123
   computed: {
124
+    ...mapState({
125
+      banner: x => x.index.banner
126
+    }),
123 127
     MySwiper() {
124 128
       return this.$refs.mySwiper.swiper
125 129
     },
126 130
     MySwiperMsg() {
127 131
       return this.$refs.MySwiperMsg.swiper
128
-    },
132
+    }
129 133
   },
130 134
   components: {
131 135
     newsItem,
@@ -133,10 +137,10 @@ export default {
133 137
     swiperSlide,
134 138
   },
135 139
   created () {
136
-    
140
+    this.getIndexInfo(123)
137 141
   },
138 142
   methods: {
139
-    
143
+    ...mapIndexActions(['getIndexInfo'])
140 144
   }
141 145
 }
142 146
 </script>

+ 70
- 50
src/module/user/mainPage/userCenter/index.vue 查看文件

@@ -1,83 +1,103 @@
1 1
 <template>
2 2
   <div class="mainPage">
3
-    <div class="userTop_view">
4
-      <div class="gradient_bg"></div>
5
-      <div class="zIndex_bg"></div>
6
-      <div class="userAvatar_Border">
7
-        <div class="userAvatar">
8
-          <img src="" alt="" width="100%" height="100%">
9
-        </div>
10
-      </div>
11
-      <div class="uesr-info">
12
-        <div class="user-name">Rejo Varghese</div>
13
-        <div class="mobile">18833445567</div>
14
-      </div>
3
+    <div class="loading" v-if="isLoading">
4
+      <img :src='loading' alt="">
15 5
     </div>
16
-    <div class="vip-privilege flex-h">
17
-      <div class="flex-item privilege-item">
18
-        <div class="img-box">
19
-          <img src="../../../../common/icon/userCenter-icon-1.png" width="100%" height="100%" alt="">
6
+    <div v-else>
7
+      <div class="userTop_view" >
8
+        <div class="gradient_bg"></div>
9
+        <div class="zIndex_bg"></div>
10
+        <div class="userAvatar_Border">
11
+          <div class="userAvatar">
12
+            <img src="" alt="" width="100%" height="100%">
13
+          </div>
20 14
         </div>
21
-        <span>优惠券</span>
22
-        <span>2张未使用</span>
23
-      </div>
24
-      <div class="flex-item privilege-item">
25
-        <div class="img-box">
26
-          <img src="../../../../common/icon/userCenter-icon-2.png" width="100%" height="100%" alt="">
15
+        <div class="uesr-info">
16
+          <div class="user-name">Rejo Varghese</div>
17
+          <div class="mobile">18833445567</div>
27 18
         </div>
28
-        <span>卡券</span>
29
-        <span>2张未使用</span>
30 19
       </div>
31
-      <div class="flex-item privilege-item">
32
-        <div class="img-box">
33
-          <img src="../../../../common/icon/userCenter-icon-3.png" width="100%" height="100%" alt="">
20
+      <div class="vip-privilege flex-h">
21
+        <div class="flex-item privilege-item">
22
+          <div class="img-box">
23
+            <img src="../../../../common/icon/userCenter-icon-1.png" width="100%" height="100%" alt="">
24
+          </div>
25
+          <span>优惠券</span>
26
+          <span>2张未使用</span>
27
+        </div>
28
+        <div class="flex-item privilege-item">
29
+          <div class="img-box">
30
+            <img src="../../../../common/icon/userCenter-icon-2.png" width="100%" height="100%" alt="">
31
+          </div>
32
+          <span>卡券</span>
33
+          <span>2张未使用</span>
34
+        </div>
35
+        <div class="flex-item privilege-item">
36
+          <div class="img-box">
37
+            <img src="../../../../common/icon/userCenter-icon-3.png" width="100%" height="100%" alt="">
38
+          </div>
39
+          <span>VIP卡</span>
40
+          <span>¥200 <i class="iconfont icon-jiantou-right" style="font-size: 0.1rem;"></i></span>
34 41
         </div>
35
-        <span>VIP卡</span>
36
-        <span>¥200 <i class="iconfont icon-jiantou-right" style="font-size: 0.1rem;"></i></span>
37 42
       </div>
38
-    </div>
39 43
 
40
-    <div class="userCenter-menu">
41
-      <div class="menu-item flex-h">
42
-        <span>课程订单</span>
43
-        <i class="iconfont icon-jiantou-right"></i>
44
-      </div>
45
-      <div class="menu-item flex-h">
46
-        <span>商品订单</span>
47
-        <i class="iconfont icon-jiantou-right"></i>
48
-      </div>
49
-      <div class="menu-item flex-h">
50
-        <span>体检报告</span>
51
-        <i class="iconfont icon-jiantou-right"></i>
52
-      </div>
53
-      <div class="menu-item flex-h">
54
-        <span>消息提醒</span>
55
-        <i class="iconfont icon-jiantou-right"></i>
44
+      <div class="userCenter-menu">
45
+        <div class="menu-item flex-h">
46
+          <span>课程订单</span>
47
+          <i class="iconfont icon-jiantou-right"></i>
48
+        </div>
49
+        <div class="menu-item flex-h">
50
+          <span>商品订单</span>
51
+          <i class="iconfont icon-jiantou-right"></i>
52
+        </div>
53
+        <div class="menu-item flex-h">
54
+          <span>体检报告</span>
55
+          <i class="iconfont icon-jiantou-right"></i>
56
+        </div>
57
+        <div class="menu-item flex-h">
58
+          <span>消息提醒</span>
59
+          <i class="iconfont icon-jiantou-right"></i>
60
+        </div>
56 61
       </div>
57 62
     </div>
58 63
   </div>
59 64
 </template>
60 65
 
61 66
 <script>
62
-
67
+import loading from '../../../../common/icon/loading.gif'
68
+import { mapState, createNamespacedHelpers } from 'vuex'
69
+const { mapActions: actions } = createNamespacedHelpers('userCenter')
63 70
 export default {
64 71
   name: '',
65 72
   data () {
66 73
     return {
74
+      user: {
67 75
 
76
+      },
77
+      loading,
78
+      isLoading: true
68 79
     }
69 80
   },
70 81
   computed: {
71
-
82
+    ...mapState({
83
+      userInfo: x => x.userCenter.userInfo
84
+    })
72 85
   },
73 86
   components: {
74 87
 
75 88
   },
76 89
   created () {
77
-
90
+    this.getUserInfo().then(() => {
91
+      this.user = this.userInfo
92
+      if (this.user.mobile) {
93
+        this.isLoading = false
94
+      } else {
95
+        this.$router.push({ name: 'bindMobile' })
96
+      }
97
+    })
78 98
   },
79 99
   methods: {
80
-
100
+    ...actions(['getUserInfo'])
81 101
   }
82 102
 }
83 103
 </script>

+ 13
- 0
src/module/user/mainPage/userCenter/page.scss 查看文件

@@ -1,3 +1,16 @@
1
+.mainPage{
2
+  overflow-y: scroll;
3
+  overflow-x: hidden;
4
+}
5
+
6
+.loading{
7
+  width: 100%;
8
+  height: 100%;
9
+  display: flex;
10
+  justify-content: center;
11
+  align-items: center;
12
+}
13
+
1 14
 .userTop_view {
2 15
   position: relative;
3 16
   height: 1.7rem;

+ 6
- 0
src/module/user/router.js 查看文件

@@ -8,6 +8,7 @@ import majorProjects from './majorProjects/index' // 项目专题
8 8
 import majorProjectsDetail from './majorProjectsDetail/index' // 项目专题
9 9
 import coffeeIndex from './mainPage/coffeeIndex/index' // 城咖啡
10 10
 import userCenter from './mainPage/userCenter/index' // 个人中心
11
+import bindMobile from './bindMobile/bindMobile' // 绑定手机号
11 12
 
12 13
 Vue.use(Router)
13 14
 
@@ -47,6 +48,11 @@ const router = new Router({
47 48
     name: 'fiveA',
48 49
     component: fiveA,
49 50
     children: []
51
+  },{ // 绑定手机号
52
+    path: '/bindMobile',
53
+    name: 'bindMobile',
54
+    component: bindMobile,
55
+    children: []
50 56
   }],
51 57
   linkActiveClass: 'active',
52 58
 })

+ 1
- 1
src/module/user/user.html 查看文件

@@ -3,7 +3,7 @@
3 3
 <head>
4 4
   <meta charset="utf-8">
5 5
   <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" charset="utf-8" />
6
-  <link rel="stylesheet" href="//at.alicdn.com/t/font_775069_c8w80pqou5c.css">
6
+  <link rel="stylesheet" href="//at.alicdn.com/t/font_775069_198sg7n0wo1.css">
7 7
   <title>城的空间</title>
8 8
 </head>
9 9
 <body>

+ 6
- 1
src/module/user/user.js 查看文件

@@ -5,10 +5,15 @@ import 'vant/lib/vant-css/index.css'
5 5
 import router from './router'
6 6
 import store from '../../store/index'
7 7
 import Vuex from 'vuex'
8
+import Ajax from '../../util/ajax'
9
+import api from '../../util/api'
10
+import toolClass from '../../util/util'
8 11
 
9 12
 Vue.use(Vant)
10 13
 Vue.use(Vuex)
11
-
14
+Vue.prototype.$api = api
15
+Vue.prototype.$ajax = Ajax
16
+Vue.prototype.toolClass = toolClass
12 17
 /* eslint-disable no-new */
13 18
 new Vue({
14 19
   el: '#app',

+ 24
- 0
src/store/app/app.js 查看文件

@@ -0,0 +1,24 @@
1
+
2
+export default {
3
+  namespaced: true,
4
+  state: {
5
+    location: []
6
+  },
7
+  mutations: {
8
+    init (state, data) { // 这里的state对应着上面这个state
9
+      state.location = data
10
+    }
11
+  },
12
+  actions: {
13
+    updateLocationInfo (context) { // 这里的context和我们使用的$store拥有相同的对象和方法
14
+      return new Promise((resolve) => {
15
+        this.$ajax(this.$api.cms.location.url, {
16
+          method: this.$api.cms.location.method
17
+        }).then(res => {
18
+          context.commit('init', res)
19
+          resolve()
20
+        })
21
+      })
22
+    }
23
+  }
24
+}

+ 111
- 0
src/store/fiveA/fiveA.js 查看文件

@@ -0,0 +1,111 @@
1
+import Ajax from '../../util/ajax'
2
+import api from '../../util/api'
3
+const http = new Object
4
+
5
+// 请求数据
6
+http.getNav = (data) => {
7
+  return new Promise((resolve, reject) => {
8
+    Ajax(api.fiveA.nav.url, {
9
+      method: api.fiveA.nav.method
10
+    }).then(res => {
11
+      resolve(res)
12
+    }).catch((err) => {
13
+      reject(err)
14
+    })
15
+  })
16
+}
17
+
18
+http.getBanner = (data) => {
19
+  console.log(data)
20
+  return new Promise((resolve, reject) => {
21
+    Ajax(api.fiveA.banner.url, {
22
+      method: api.fiveA.banner.method
23
+    }).then(res => {
24
+      resolve(res)
25
+    }).catch((err) => {
26
+      reject(err)
27
+    })
28
+  })
29
+}
30
+
31
+http.getList = (data) => {
32
+  console.log(data)
33
+  return new Promise((resolve, reject) => {
34
+    Ajax(api.fiveA.list.url, {
35
+      method: api.fiveA.list.method
36
+    }).then(res => {
37
+      resolve(res)
38
+    }).catch((err) => {
39
+      reject(err)
40
+    })
41
+  })
42
+}
43
+
44
+http.getCms = (data) => {
45
+  console.log(data)
46
+  return new Promise((resolve, reject) => {
47
+    Ajax(api.fiveA.cms.url, {
48
+      method: api.fiveA.cms.method
49
+    }).then(res => {
50
+      resolve(res)
51
+    }).catch((err) => {
52
+      reject(err)
53
+    })
54
+  })
55
+}
56
+
57
+export default {
58
+  namespaced: true,
59
+  state: {
60
+    nav: [],
61
+    banner: [],
62
+    list: [],
63
+    cms: []
64
+  },
65
+  mutations: {
66
+    setNav (state, data) {
67
+      state.nav = data
68
+    },
69
+    setBannet (state, data) {
70
+      state.banner = data
71
+    },
72
+    setList (state, data) {
73
+      state.list = data
74
+    },
75
+    setCms (state, data) {
76
+      state.cms = data
77
+    }
78
+  },
79
+  actions: {
80
+    // async getIndexInfo (context, param) { // 首页全部请求
81
+    //   try {
82
+    //     let banner = await http.getBanner(param)
83
+    //     context.commit('setBanner', banner)
84
+    //     let fiveA = await http.getFiveA(param)
85
+    //     context.commit('setFiveA', fiveA)
86
+    //     let message = await http.getBanner(param)
87
+    //     context.commit('setMessage', message)
88
+    //     let porject = await http.getBanner(param)
89
+    //     context.commit('setPorject', porject)
90
+    //     let cms = await http.getBanner(param)
91
+    //     context.commit('setCms', cms)
92
+    //   } catch (err) {
93
+    //     console.log(err)
94
+    //   }
95
+    // }
96
+    getFiveAInfo (context, data) {
97
+      http.getNav().then((res) => {
98
+        context.commit('setNav', res)
99
+      })
100
+      http.getBanner().then((res) => {
101
+        context.commit('setBanner', res)
102
+      })
103
+      http.getList().then((res) => {
104
+        context.commit('setList', res)
105
+      })
106
+      http.getCms().then((res) => {
107
+        context.commit('setCms', res)
108
+      })
109
+    }
110
+  }
111
+}

+ 24
- 0
src/store/index.js 查看文件

@@ -1 +1,25 @@
1 1
 
2
+import Vue from 'vue'
3
+import Vuex from 'vuex'
4
+Vue.use(Vuex)
5
+
6
+const store = new Vuex.Store({
7
+  state: {
8
+    loadding: false,
9
+    pageSize: 10,
10
+  }
11
+})
12
+export const modules = {
13
+  app: () => require('./app/app').default,
14
+  index: () => require('./index/index').default,
15
+  fiveA: () => require('./fiveA/fiveA').default,
16
+  userCenter: () => require('./userCenter/userCenter').default,
17
+}
18
+
19
+Object.keys(modules).forEach((modKey) => {
20
+  const modNS = modKey.split('/')
21
+  const getMod = modules[modKey]
22
+  store.registerModule(...modNS, getMod())
23
+})
24
+
25
+export default store

+ 115
- 0
src/store/index/index.js 查看文件

@@ -0,0 +1,115 @@
1
+import Ajax from '../../util/ajax'
2
+import api from '../../util/api'
3
+const http = new Object
4
+
5
+// 请求数据
6
+http.getBanner = (data) => {
7
+  console.log(data)
8
+  return new Promise((resolve, reject) => {
9
+    Ajax(api.user.case.url, {
10
+      method: api.user.case.method
11
+    }).then(res => {
12
+      resolve(res)
13
+    }).catch((err) => {
14
+      reject(err)
15
+    })
16
+  })
17
+}
18
+
19
+http.getFiveA = (data) => {
20
+  console.log(data)
21
+  return new Promise((resolve, reject) => {
22
+    Ajax(api.index.fiveA.url, {
23
+      method: api.index.fiveA.method
24
+    }).then(res => {
25
+      resolve(res)
26
+    }).catch((err) => {
27
+      reject(err)
28
+    })
29
+  })
30
+}
31
+
32
+http.getMessage = (data) => {
33
+  console.log(data)
34
+  return new Promise((resolve, reject) => {
35
+    Ajax(api.index.message.url, {
36
+      method: api.index.message.method
37
+    }).then(res => {
38
+      resolve(res)
39
+    }).catch((err) => {
40
+      reject(err)
41
+    })
42
+  })
43
+}
44
+
45
+http.getPorject = (data) => {
46
+  console.log(data)
47
+  return new Promise((resolve, reject) => {
48
+    Ajax(api.index.project.url, {
49
+      method: api.index.project.method
50
+    }).then(res => {
51
+      resolve(res)
52
+    }).catch((err) => {
53
+      reject(err)
54
+    })
55
+  })
56
+}
57
+
58
+http.getCms = (data) => {
59
+  console.log(data)
60
+  return new Promise((resolve, reject) => {
61
+    Ajax(api.index.cms.url, {
62
+      method: api.index.cms.method
63
+    }).then(res => {
64
+      resolve(res)
65
+    }).catch((err) => {
66
+      reject(err)
67
+    })
68
+  })
69
+}
70
+
71
+export default {
72
+  namespaced: true,
73
+  state: {
74
+    banner: [],
75
+    fiveA: [],
76
+    message: [],
77
+    porject: [],
78
+    cms: []
79
+  },
80
+  mutations: {
81
+    setBannet (state, data) { // 获取首页轮播图
82
+      state.banner = data
83
+    },
84
+    setFiveA (state, data) { // 获取5A
85
+      state.fiveA = data
86
+    },
87
+    setMessage (state, data) { // 获取首页消息
88
+      state.message = data
89
+    },
90
+    setPorject (state, data) { // 获取项目专题
91
+      state.porject = data
92
+    },
93
+    setCms (state, data) { // 获取cms
94
+      state.cms = data
95
+    },
96
+  },
97
+  actions: {
98
+    async getIndexInfo (context, param) { // 首页全部请求
99
+      try {
100
+        let banner = await http.getBanner(param)
101
+        context.commit('setBanner', banner)
102
+        let fiveA = await http.getFiveA(param)
103
+        context.commit('setFiveA', fiveA)
104
+        let message = await http.getBanner(param)
105
+        context.commit('setMessage', message)
106
+        let porject = await http.getBanner(param)
107
+        context.commit('setPorject', porject)
108
+        let cms = await http.getBanner(param)
109
+        context.commit('setCms', cms)
110
+      } catch (err) {
111
+        console.log(err)
112
+      }
113
+    }
114
+  }
115
+}

+ 109
- 0
src/store/userCenter/userCenter.js 查看文件

@@ -0,0 +1,109 @@
1
+import Ajax from '../../util/ajax'
2
+import api from '../../util/api'
3
+const http = new Object
4
+
5
+// 请求数据
6
+http.getUserInfo = (data) => {
7
+  return new Promise((resolve, reject) => {
8
+    Ajax(api.user.info.url, {
9
+      method: api.user.info.method
10
+    }).then(res => {
11
+      resolve(res)
12
+    }).catch((err) => {
13
+      reject(err)
14
+    })
15
+  })
16
+}
17
+
18
+http.getCaseInfo = (data) => {
19
+  return new Promise((resolve, reject) => {
20
+    Ajax(api.user.case.url, {
21
+      method: api.user.case.method,
22
+      queryData: {
23
+        org: data
24
+      }
25
+    }).then(res => {
26
+      resolve(res)
27
+    }).catch((err) => {
28
+      reject(err)
29
+    })
30
+  })
31
+}
32
+
33
+http.getCaptcha = (data) => {
34
+  console.log(data)
35
+  return new Promise((resolve, reject) => {
36
+    Ajax(api.user.captcha.url, {
37
+      method: api.user.captcha.method,
38
+      queryData: {
39
+        phone: data
40
+      }
41
+    }).then(res => {
42
+      resolve(res)
43
+    }).catch((err) => {
44
+      reject(err)
45
+    })
46
+  })
47
+}
48
+
49
+http.submitData = (data) => {
50
+  console.log(data)
51
+  return new Promise((resolve, reject) => {
52
+    Ajax(api.user.wxsignup.url, {
53
+      method: api.user.wxsignup.method,
54
+      data: data
55
+    }).then(res => {
56
+      resolve(res)
57
+    }).catch((err) => {
58
+      reject(err)
59
+    })
60
+  })
61
+}
62
+
63
+export default {
64
+  namespaced: true,
65
+  state: {
66
+    userInfo: {},
67
+    caseInfo: {}
68
+  },
69
+  mutations: {
70
+    setUserInfo (state, data) {
71
+      state.userInfo = data
72
+    },
73
+    setCaseInfo (state, data) {
74
+      state.caseInfo = data
75
+    }
76
+  },
77
+  actions: {
78
+    getUserInfo (context, data) {
79
+      return new Promise((resolve) => {
80
+        http.getUserInfo().then((res) => {
81
+          context.commit('setUserInfo', res)
82
+          resolve(res)
83
+        })
84
+      })
85
+    },
86
+    getCaseInfo (context, data) {
87
+      return new Promise((resolve) => {
88
+        http.getCaseInfo(data).then((res) => {
89
+          context.commit('setCaseInfo', res)
90
+          resolve(res)
91
+        })
92
+      })
93
+    },
94
+    getCaptcha (context, data) {
95
+      return new Promise((resolve) => {
96
+        http.getCaptcha(data).then((res) => {
97
+          resolve(res)
98
+        })
99
+      })
100
+    },
101
+    submitData(context, data) {
102
+      return new Promise((resolve) => {
103
+        http.submitData(data).then((res) => {
104
+          resolve(res)
105
+        })
106
+      })
107
+    }
108
+  }
109
+}

+ 66
- 0
src/util/ajax.js 查看文件

@@ -0,0 +1,66 @@
1
+import axios from 'axios'
2
+import qs from 'qs'
3
+import router from '../module/user/router'
4
+
5
+const Axios = axios.create({
6
+  timeout: 60000,
7
+  responseType: 'json',
8
+  withCredentials: true,
9
+  queryData: {},
10
+  urlData: {},
11
+  headers: {
12
+    'Content-Type': 'multipart/form-data'
13
+  }
14
+})
15
+
16
+Axios.interceptors.request.use((config) => {
17
+  // 处理请求data,若为get请求,拼到url后面,若为post请求,直接添加到body中
18
+  let urlData = qs.stringify(config.urlData)
19
+  let queryData = qs.stringify(config.queryData)
20
+  // 判断是通过斜杠传参还是通过query传参
21
+  if (config.url.indexOf(':') > -1) {
22
+    if (typeof config.urlData === 'object') {
23
+      config.url = Object.keys(config.urlData).reduce((url, k) => { // 此方法对每个元素进行处理
24
+        const re = new RegExp(`:${k}(?!w)`, 'i')
25
+        return url.replace(re, config.urlData[k])
26
+      }, config.url)
27
+    }
28
+  } else {
29
+    if (queryData) {
30
+      config.url += '?' + queryData
31
+    }
32
+  }
33
+  let fm = new FormData()
34
+  for (let k in config.data) {
35
+    if (Array.isArray(config.data[k])) {
36
+      fm.append(k, ...config.data[k].map(v => `${k}=${encodeURIComponent(v)}`))
37
+    } else {
38
+      fm.append(k, config.data[k])
39
+    }
40
+  }
41
+  config.data = fm
42
+  return config
43
+}, (error) => {
44
+  console.log(error)
45
+})
46
+
47
+const ajax = (...args) => {
48
+  return new Promise((resolve, reject) => {
49
+    Axios(...args).then(({ data }) => {
50
+      // console.log(111)
51
+      const { code, message, result } = data
52
+      if (code === 200) {
53
+        resolve(result)
54
+      } else if (code === 401) {
55
+        // router.push({ name: 'login' })
56
+      } else {
57
+        Message({
58
+          message: message,
59
+          type: 'error'
60
+        })
61
+      }
62
+    }).catch(reject)
63
+  })
64
+}
65
+
66
+export default ajax

+ 65
- 0
src/util/api.js 查看文件

@@ -0,0 +1,65 @@
1
+const baseUrl = '/api'
2
+const wechat = '/wechat'
3
+const guest = '/guest'
4
+
5
+const $api = {
6
+  index: { // 测试
7
+    banner: {
8
+      method: 'post',
9
+      url: `${baseUrl}${wechat}/wxsignin`
10
+    },
11
+    fiveA: {
12
+      method: 'post',
13
+      url: `${baseUrl}${wechat}/wxsignin`
14
+    },
15
+    message: {
16
+      method: 'post',
17
+      url: `${baseUrl}${wechat}/wxsignin`
18
+    },
19
+    project: {
20
+      method: 'post',
21
+      url: `${baseUrl}${wechat}/wxsignin`
22
+    },
23
+    cms: {
24
+      method: 'post',
25
+      url: `${baseUrl}${wechat}/wxsignin`
26
+    }
27
+  },
28
+  fiveA: {
29
+    nav: {
30
+      method: 'post',
31
+      url: `${baseUrl}${wechat}/wxsignin`
32
+    },
33
+    banner: {
34
+      method: 'post',
35
+      url: `${baseUrl}${wechat}/wxsignin`
36
+    },
37
+    list: {
38
+      method: 'post',
39
+      url: `${baseUrl}${wechat}/wxsignin`
40
+    },
41
+    cms: {
42
+      method: 'post',
43
+      url: `${baseUrl}${wechat}/wxsignin`
44
+    }
45
+  },
46
+  user: {
47
+    info: {
48
+      method: 'post',
49
+      url: `${baseUrl}${wechat}/wxsignin`
50
+    },
51
+    case: {
52
+      method: 'get',
53
+      url: `${baseUrl}${guest}/case`
54
+    },
55
+    wxsignup: {
56
+      method: 'post',
57
+      url: `${baseUrl}${guest}/wxsignup`
58
+    },
59
+    captcha: {
60
+      method: 'get',
61
+      url: `${baseUrl}${guest}/captcha`
62
+    }
63
+  }
64
+}
65
+export default $api

+ 25
- 0
src/util/util.js 查看文件

@@ -0,0 +1,25 @@
1
+const toolClass = {
2
+  dateFormat: (timestamp) => {
3
+    let date = new Date(timestamp)
4
+    let y = date.getFullYear()
5
+    let m = date.getMonth() + 1
6
+    let d = date.getDate()
7
+    let h = date.getHours()
8
+    let min = date.getMinutes()
9
+    if (m < 10) {
10
+      m = '0' + m
11
+    }
12
+    if (d < 10) {
13
+      d = '0' + d
14
+    }
15
+    if (h < 10) {
16
+      h = '0' + h
17
+    }
18
+    if (min < 10) {
19
+      min = '0' + min
20
+    }
21
+    return y + '-' + m + '-' + d + ' ' + h + ':' + min
22
+  }
23
+}
24
+
25
+export default toolClass

+ 1
- 0
wechat

@@ -0,0 +1 @@
1
+Subproject commit 5e21b59049435bb41575957c04fbfa6a13378c41