Bladeren bron

静态页面

1002884655 4 jaren geleden
bovenliggende
commit
b2aebf26e7

+ 2
- 0
src/components/common/MainPageContainer/index.vue Bestand weergeven

@@ -155,6 +155,8 @@ export default {
155 155
         } else {
156 156
           this.$router.push({ name: 'SignIn' })
157 157
         }
158
+      } else {
159
+        this.$emit('UserInfoChange')
158 160
       }
159 161
     }
160 162
   }

+ 61
- 5
src/pages/WoDe/AnQuanZhongXin/BangDingShouJi/index.vue Bestand weergeven

@@ -7,7 +7,7 @@
7 7
             <i class="iconfont iconshouji"></i>
8 8
             <div class="flex-item">
9 9
               <div>
10
-                <input type="number" placeholder="请输入您的手机号码">
10
+                <input type="number" placeholder="请输入您的手机号码" v-model="Phone">
11 11
               </div>
12 12
             </div>
13 13
           </li>
@@ -15,15 +15,15 @@
15 15
             <i class="iconfont iconmima"></i>
16 16
             <div class="flex-item">
17 17
               <div>
18
-                <input type="number" placeholder="请输入验证码">
18
+                <input type="number" placeholder="请输入验证码" v-model="Code">
19 19
               </div>
20 20
             </div>
21
-            <a>获取验证码</a>
22
-            <span>59s后重新获取</span>
21
+            <a v-if="TimeNum === 60" @click="GetCode">获取验证码</a>
22
+            <span v-else>{{TimeNum > 9 ? TimeNum : `0${TimeNum}`}}s后重新获取</span>
23 23
           </li>
24 24
         </ul>
25 25
         <div class="Btn">
26
-          <a>立即绑定</a>
26
+          <a @click="BindPhone">立即绑定</a>
27 27
         </div>
28 28
       </div>
29 29
     </MainPageContainer>
@@ -32,13 +32,23 @@
32 32
 
33 33
 <script>
34 34
 import MainPageContainer from '../../../../components/common/MainPageContainer'
35
+import { createNamespacedHelpers } from 'vuex'
36
+const { mapState: mapUserState, mapActions: mapUserActions, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
35 37
 export default {
36 38
   name: '',
37 39
   data () {
38 40
     return {
41
+      Phone: '',
42
+      Code: '',
43
+      DataLock: false,
44
+      Timer: null,
45
+      TimeNum: 60
39 46
     }
40 47
   },
41 48
   computed: {
49
+    ...mapUserState({
50
+      UserInfo: x => x.UserInfo
51
+    })
42 52
   },
43 53
   components: {
44 54
     MainPageContainer
@@ -50,6 +60,52 @@ export default {
50 60
     })
51 61
   },
52 62
   methods: {
63
+    ...mapUserMutations([
64
+      'EditUserInfo'
65
+    ]),
66
+    ...mapUserActions([
67
+      'GetRegPhoneCode',
68
+      'UpdateUserInfo',
69
+      'CheckRegPhoneCode'
70
+    ]),
71
+    BindPhone () { // 绑定手机
72
+      if (this.DataLock) return
73
+      this.DataLock = true
74
+      this.CheckRegPhoneCode({ urlData: { phone: this.Phone }, queryData: { captcha: this.Code } }).then((res) => {
75
+        this.UpdateUserInfo({ urlData: { id: this.UserInfo.customerId }, data: { phone: this.Phone } }).then(() => {
76
+          this.Toast('手机绑定成功')
77
+          this.EditUserInfo({ name: 'phone', value: this.Phone })
78
+          this.DataLock = false
79
+          this.$router.go(-1)
80
+        })
81
+      })
82
+    },
83
+    GetCode () { // 获取手机验证码
84
+      if (this.DataLock || this.TimeNum !== 60 || !this.IsPhone(this.Phone)) return
85
+      this.DataLock = false
86
+      window.clearInterval(this.Timer)
87
+      this.GetRegPhoneCode({ urlData: { phone: this.Phone } }).then(() => {
88
+        this.DataLock = false
89
+        if (this.TimeNum === 60) {
90
+          this.TimeNum -= 1
91
+        }
92
+        this.Timer = window.setInterval(() => {
93
+          if (this.TimeNum) {
94
+            this.TimeNum -= 1
95
+          } else {
96
+            window.clearInterval(this.Timer)
97
+            this.TimeNum = 60
98
+          }
99
+        }, 1000)
100
+      }).catch((res) => {
101
+        this.Toast(res.data.message)
102
+        this.DataLock = false
103
+      })
104
+    },
105
+    IsPhone (str) { // 校验手机号
106
+      let myreg = /^[1][3,4,5,7,8][0-9]{9}$/
107
+      return !!myreg.test(str)
108
+    }
53 109
   }
54 110
 }
55 111
 </script>

+ 10
- 14
src/pages/WoDe/AnQuanZhongXin/SubIndex/index.vue Bestand weergeven

@@ -2,8 +2,8 @@
2 2
   <div class="Page">
3 3
     <MainPageContainer :ShowMainHeader="true" :ShowMainHeaderBack="true" MainHeaderTitle="安全中心">
4 4
       <div class="PageContainer">
5
-        <ul>
6
-          <router-link tag="li" :to="{ name: 'YaoQingZhuCe' }" class="flex-h">
5
+        <ul v-if="UserInfo !== null">
6
+          <!-- <router-link tag="li" :to="{ name: 'YaoQingZhuCe' }" class="flex-h">
7 7
             <span class="flex-item">邀请注册</span>
8 8
             <i class="iconfont iconjiantouright"></i>
9 9
           </router-link>
@@ -12,7 +12,7 @@
12 12
             <i class="iconfont iconjinggao"></i>
13 13
             <span>未绑定</span>
14 14
             <i class="iconfont iconjiantouright"></i>
15
-          </li>
15
+          </li> -->
16 16
           <li class="flex-h">
17 17
             <span class="flex-item">绑定支付宝</span>
18 18
             <i class="iconfont iconjinggao"></i>
@@ -21,8 +21,8 @@
21 21
           </li>
22 22
           <router-link tag="li" :to="{ name: 'BangDingShouJi' }" class="flex-h">
23 23
             <span class="flex-item">绑定手机号</span>
24
-            <i class="iconfont iconjinggao"></i>
25
-            <span>未绑定</span>
24
+            <i class="iconfont iconjinggao" v-if="UserInfo.phone === '' || UserInfo.phone === null"></i>
25
+            <span>{{UserInfo.phone || '未绑定'}}</span>
26 26
             <i class="iconfont iconjiantouright"></i>
27 27
           </router-link>
28 28
         </ul>
@@ -33,7 +33,8 @@
33 33
 
34 34
 <script>
35 35
 import MainPageContainer from '../../../../components/common/MainPageContainer'
36
-import { mapMutations } from 'vuex'
36
+import { createNamespacedHelpers } from 'vuex'
37
+const { mapState: mapUserState } = createNamespacedHelpers('user')
37 38
 export default {
38 39
   name: '',
39 40
   data () {
@@ -41,25 +42,20 @@ export default {
41 42
     }
42 43
   },
43 44
   computed: {
45
+    ...mapUserState({
46
+      UserInfo: x => x.UserInfo
47
+    })
44 48
   },
45 49
   components: {
46 50
     MainPageContainer
47 51
   },
48 52
   created () {
49
-    this.EditMainData([ // 配置页面框架数据
50
-      { name: 'ShowMainHeader', value: true },
51
-      { name: 'MainHeaderTitle', value: '安全中心' },
52
-      { name: 'ShowMainHeaderBack', value: true }
53
-    ])
54 53
   },
55 54
   mounted () {
56 55
     this.$nextTick(() => {
57 56
     })
58 57
   },
59 58
   methods: {
60
-    ...mapMutations([
61
-      'EditMainData' // 配置页面框架数据
62
-    ])
63 59
   }
64 60
 }
65 61
 </script>

+ 26
- 3
src/pages/WoDe/GeRenSheZhi/ZhangHuSheZhi/EditUserNick/index.vue Bestand weergeven

@@ -1,13 +1,13 @@
1 1
 <template>
2 2
   <div class="Page">
3
-    <MainPageContainer :ShowMainHeader="true" :ShowMainHeaderBack="true" MainHeaderTitle="设置昵称">
3
+    <MainPageContainer :ShowMainHeader="true" :ShowMainHeaderBack="true" MainHeaderTitle="设置昵称" @UserInfoChange="Init">
4 4
       <div class="PageContainer">
5 5
         <div class="Form">
6
-          <input type="text" placeholder="请输入2~12个字符">
6
+          <input type="text" placeholder="请输入2~12个字符" v-model="Name" @input="Name = Name.substring(0, 12)">
7 7
         </div>
8 8
         <span>填写成功后不可更改</span>
9 9
         <div class="Btn">
10
-          <a>确认</a>
10
+          <a @click="EditName">确认</a>
11 11
         </div>
12 12
       </div>
13 13
     </MainPageContainer>
@@ -16,13 +16,19 @@
16 16
 
17 17
 <script>
18 18
 import MainPageContainer from '../../../../../components/common/MainPageContainer'
19
+import { createNamespacedHelpers } from 'vuex'
20
+const { mapState: mapUserState, mapActions: mapUserActions, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
19 21
 export default {
20 22
   name: '',
21 23
   data () {
22 24
     return {
25
+      Name: ''
23 26
     }
24 27
   },
25 28
   computed: {
29
+    ...mapUserState({
30
+      UserInfo: x => x.UserInfo
31
+    })
26 32
   },
27 33
   components: {
28 34
     MainPageContainer
@@ -34,6 +40,23 @@ export default {
34 40
     })
35 41
   },
36 42
   methods: {
43
+    ...mapUserMutations([
44
+      'EditUserInfo'
45
+    ]),
46
+    ...mapUserActions([
47
+      'UpdateUserInfo'
48
+    ]),
49
+    Init () {
50
+      this.Name = this.UserInfo.name
51
+    },
52
+    EditName () {
53
+      if (this.Name !== '') {
54
+        this.UpdateUserInfo({ urlData: { id: this.UserInfo.customerId }, data: { name: this.Name } }).then(() => {
55
+          this.Toast('昵称更新成功')
56
+          this.EditUserInfo({ name: 'name', value: this.Name })
57
+        })
58
+      }
59
+    }
37 60
   }
38 61
 }
39 62
 </script>

+ 28
- 4
src/pages/WoDe/GeRenSheZhi/ZhangHuSheZhi/UserInfo/index.vue Bestand weergeven

@@ -2,17 +2,18 @@
2 2
   <div class="Page">
3 3
     <MainPageContainer :ShowMainHeader="true" :ShowMainHeaderBack="true" MainHeaderTitle="账户设置">
4 4
       <div class="PageContainer">
5
-        <ul>
6
-          <li class="flex-h">
5
+        <ul v-if="UserInfo !== null">
6
+          <li class="flex-h" @click="$refs.IconFile.click()">
7 7
             <span class="flex-item">头像</span>
8 8
             <div class="Icon">
9
-              <img src="" class="centerLabel cover" alt="">
9
+              <img :src="UserInfo.avatar" class="centerLabel cover" alt="">
10 10
             </div>
11 11
             <i class="iconfont iconjiantouright"></i>
12
+            <input type="file" ref="IconFile" @change="IconFileChange" style="display: none">
12 13
           </li>
13 14
           <router-link tag="li" class="flex-h" :to="{name: 'EditUserNick'}">
14 15
             <span class="flex-item">昵称</span>
15
-            <span>未设置</span>
16
+            <span>{{UserInfo.name || '未设置'}}</span>
16 17
             <i class="iconfont iconjiantouright"></i>
17 18
           </router-link>
18 19
         </ul>
@@ -23,6 +24,8 @@
23 24
 
24 25
 <script>
25 26
 import MainPageContainer from '../../../../../components/common/MainPageContainer'
27
+import { createNamespacedHelpers } from 'vuex'
28
+const { mapState: mapUserState, mapActions: mapUserActions, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
26 29
 export default {
27 30
   name: '',
28 31
   data () {
@@ -30,6 +33,9 @@ export default {
30 33
     }
31 34
   },
32 35
   computed: {
36
+    ...mapUserState({
37
+      UserInfo: x => x.UserInfo
38
+    })
33 39
   },
34 40
   components: {
35 41
     MainPageContainer
@@ -41,6 +47,24 @@ export default {
41 47
     })
42 48
   },
43 49
   methods: {
50
+    ...mapUserMutations([
51
+      'EditUserInfo'
52
+    ]),
53
+    ...mapUserActions([
54
+      'ImgUpload',
55
+      'UpdateUserInfo'
56
+    ]),
57
+    IconFileChange (e) {
58
+      let aFormData = new FormData()
59
+      aFormData.append('file', e.target.files[0])
60
+      this.ImgUpload({ urlData: { plat: 'app' }, data: aFormData, headers: { 'Content-Type': 'multipart/form-data' } }).then((res) => {
61
+        this.$refs.IconFile.value = ''
62
+        this.UpdateUserInfo({ urlData: { id: this.UserInfo.customerId }, data: { avatar: res.data.data } }).then(() => {
63
+          this.Toast('头像更新成功')
64
+          this.EditUserInfo({ name: 'avatar', value: res.data.data })
65
+        })
66
+      })
67
+    }
44 68
   }
45 69
 }
46 70
 </script>

+ 13
- 0
src/store/user/index.js Bestand weergeven

@@ -42,6 +42,9 @@ export default {
42 42
     EmptyUserInfo (state) { // 清空用户信息
43 43
       state.UserInfo = null
44 44
     },
45
+    EditUserInfo (state, data) { // 编辑用户信息
46
+      state.UserInfo[data.name] = data.value
47
+    },
45 48
     AddDaLeTouCart (state, data) { // 新增大乐透购物车
46 49
       state.DaLeTouCart.push(data)
47 50
     },
@@ -111,6 +114,16 @@ export default {
111 114
     }
112 115
   },
113 116
   actions: {
117
+    ImgUpload (context, payload) { // 上传图片
118
+      return new Promise((resolve, reject) => {
119
+        ToolClass.Axios(resolve, reject, Api.ImgUpload, context, payload, 1000)
120
+      })
121
+    },
122
+    UpdateUserInfo (context, payload) { // 更新用户信息
123
+      return new Promise((resolve, reject) => {
124
+        ToolClass.Axios(resolve, reject, Api.UpdateUserInfo, context, payload, 1000)
125
+      })
126
+    },
114 127
     CheckRegPhoneCode (context, payload) { // 校验注册手机验证码
115 128
       return new Promise((resolve, reject) => {
116 129
         ToolClass.Axios(resolve, reject, Api.CheckRegPhoneCode, context, payload, 1000)

+ 8
- 0
src/util/Api.js Bestand weergeven

@@ -65,6 +65,14 @@ const $api = {
65 65
   GetMixData: { // 获取混合比赛数据
66 66
     method: 'get',
67 67
     url: `${prefix}/app/sport/mix-match`
68
+  },
69
+  ImgUpload: { // 图片上传
70
+    method: 'post',
71
+    url: `${prefix}/:plat/image`
72
+  },
73
+  UpdateUserInfo: { // 更新用户信息
74
+    method: 'put',
75
+    url: `${prefix}/app/customer/:id`
68 76
   }
69 77
 }
70 78
 

+ 9
- 3
src/util/PublicMethod.js Bestand weergeven

@@ -78,12 +78,18 @@ const ToolClass = {
78 78
     if (window.localStorage.Jwt !== undefined && window.localStorage.JwtTime !== undefined && window.localStorage.JwtTime + 24 * 60 * 60 * 1000 >= Date.now()) { // 本地获取token
79 79
       Header['x-authorization-jwt'] = window.localStorage.Jwt
80 80
     }
81
-    Axios({
81
+    if (payload.headers !== undefined) {
82
+      for (let key in payload.headers) {
83
+        Header[key] = payload.headers[key]
84
+      }
85
+    }
86
+    let aParams = {
82 87
       method: target.method,
83 88
       url: Url,
84
-      data: { ...Data },
89
+      data: Data,
85 90
       headers: { ...Header }
86
-    }).then(res => {
91
+    }
92
+    Axios({ ...aParams }).then(res => {
87 93
       const token = res.headers['x-authorization-jwt']
88 94
       if (token) { // 更新本地存储token
89 95
         window.localStorage.Jwt = token