1002884655 4 år sedan
förälder
incheckning
c7fe123ca7

+ 169
- 0
src/pages/Register/index.vue Visa fil

@@ -0,0 +1,169 @@
1
+<template>
2
+  <div class="Page">
3
+
4
+    <!-- 背景 -->
5
+    <div class="TopContainer">
6
+      <span class="centerLabel">欢迎来到牛彩!</span>
7
+    </div>
8
+
9
+    <!-- 表单 -->
10
+    <ul class="Form">
11
+      <li class="flex-h">
12
+        <i class="iconfont iconshouji"></i>
13
+        <div class="flex-item">
14
+          <div>
15
+            <input type="number" placeholder="请输入您的手机号码" v-model="Phone">
16
+          </div>
17
+        </div>
18
+      </li>
19
+      <li class="flex-h">
20
+        <i class="iconfont iconmima"></i>
21
+        <div class="flex-item">
22
+          <div>
23
+            <input type="password" placeholder="请输入密码" v-model="Password">
24
+          </div>
25
+        </div>
26
+      </li>
27
+      <li class="flex-h">
28
+        <i class="iconfont iconmima"></i>
29
+        <div class="flex-item">
30
+          <div>
31
+            <input type="number" placeholder="请输入验证码" v-model="Code">
32
+          </div>
33
+        </div>
34
+        <a v-if="TimeNum === 60" @click="GetCode">获取验证码</a>
35
+        <span v-else>{{TimeNum > 9 ? TimeNum : `0${TimeNum}`}}s后重新获取</span>
36
+      </li>
37
+      <li class="flex-h">
38
+        <i class="iconfont iconshouji"></i>
39
+        <div class="flex-item">
40
+          <div>
41
+            <input type="number" placeholder="请输入邀请码" v-model="InviteCode">
42
+          </div>
43
+        </div>
44
+      </li>
45
+    </ul>
46
+
47
+    <span>已有账号? <router-link :to="{ name: 'SignIn' }">去登录</router-link></span>
48
+
49
+    <div class="Btn">
50
+      <a @click="ToReg" :class="{'active': this.IsPhone(this.Phone) && this.Code !== '' && this.Password !== ''}">开始使用</a>
51
+    </div>
52
+
53
+    <!-- 三方登录 -->
54
+    <!-- <div class="OtherSignIn">
55
+      <span>
56
+        <span>第三方账号登录</span>
57
+      </span>
58
+      <div>
59
+        <a class="iconfont iconzhifubao"></a>
60
+        <a class="iconfont iconweixin"></a>
61
+      </div>
62
+    </div> -->
63
+
64
+  </div>
65
+</template>
66
+
67
+<script>
68
+// import md5 from 'js-md5'
69
+import { mapMutations, createNamespacedHelpers } from 'vuex'
70
+const { mapActions: mapUserActions } = createNamespacedHelpers('user')
71
+export default {
72
+  name: '',
73
+  data () {
74
+    return {
75
+      Phone: '',
76
+      Code: '',
77
+      InviteCode: '',
78
+      Password: '',
79
+      DataLock: false,
80
+      Timer: null,
81
+      TimeNum: 60
82
+    }
83
+  },
84
+  computed: {
85
+  },
86
+  components: {
87
+  },
88
+  created () {
89
+    this.EditMainData([])
90
+    this.Init()
91
+  },
92
+  mounted () {
93
+    this.$nextTick(() => {
94
+    })
95
+  },
96
+  methods: {
97
+    ...mapMutations([
98
+      'EditMainData' // 配置页面框架数据
99
+    ]),
100
+    ...mapUserActions([
101
+      'UserRegister',
102
+      'GetRegPhoneCode',
103
+      'CheckRegPhoneCode'
104
+    ]),
105
+    Init () { // 初始化
106
+      // this.GetRegPhoneCode({ urlData: { phone: 18267901393 } })
107
+    },
108
+    ToReg () { // 去注册
109
+      if (this.DataLock || !this.IsPhone(this.Phone) || this.Code === '' || this.Password === '') return
110
+      this.DataLock = true
111
+      this.CheckRegPhoneCode({ urlData: { phone: this.Phone }, queryData: { captcha: this.Code } }).then((res) => {
112
+        this.UserRegister({
113
+          data: {
114
+            captcha: this.Code,
115
+            name: this.Phone,
116
+            password: this.Password,
117
+            referralCode: this.InviteCode,
118
+            phone: this.Phone
119
+          }
120
+        }).then((res) => {
121
+        }).catch((res) => {
122
+          this.Dialog.alert({
123
+            title: '错误',
124
+            message: res.data.message
125
+          })
126
+        })
127
+        this.DataLock = false
128
+      }).catch((res) => {
129
+        this.Dialog.alert({
130
+          title: '错误',
131
+          message: res.data.message
132
+        })
133
+        this.DataLock = false
134
+      })
135
+    },
136
+    IsPhone (str) { // 校验手机号
137
+      let myreg = /^[1][3,4,5,7,8][0-9]{9}$/
138
+      return !!myreg.test(str)
139
+    },
140
+    GetCode () { // 获取手机验证码
141
+      if (this.DataLock || this.TimeNum !== 60 || !this.IsPhone(this.Phone)) return
142
+      this.DataLock = false
143
+      window.clearInterval(this.Timer)
144
+      this.GetRegPhoneCode({ urlData: { phone: this.Phone } }).then(() => {
145
+        this.DataLock = false
146
+        window.setInterval(() => {
147
+          if (this.TimeNum) {
148
+            this.TimeNum -= 1
149
+          } else {
150
+            window.clearInterval(this.Timer)
151
+            this.TimeNum = 60
152
+          }
153
+        }, 1000)
154
+      }).catch((res) => {
155
+        this.Dialog.alert({
156
+          title: '错误',
157
+          message: res.data.message
158
+        })
159
+        this.DataLock = false
160
+      })
161
+    }
162
+  }
163
+}
164
+</script>
165
+
166
+<!-- Add "scoped" attribute to limit CSS to this component only -->
167
+<style lang="scss" scoped>
168
+@import "page.scss";
169
+</style>

+ 142
- 0
src/pages/Register/page.scss Visa fil

@@ -0,0 +1,142 @@
1
+.Page {
2
+  overflow-y: scroll;
3
+  -webkit-overflow-scrolling: touch;
4
+  > .TopContainer {
5
+    width: 100%;
6
+    padding-bottom: 46.4%;
7
+    position: relative;
8
+    overflow: hidden;
9
+    background-image: linear-gradient(to top right, #fb5f59, #fd9757);
10
+    > span {
11
+      width: 100%;
12
+      font-size: 0.22rem;
13
+      color: #fff;
14
+      line-height: 0.3rem;
15
+      text-indent: 0.35rem;
16
+      font-weight: bold;
17
+    }
18
+  }
19
+  > span {
20
+    display: block;
21
+    font-size: 0.14rem;
22
+    line-height: 0.2rem;
23
+    white-space: nowrap;
24
+    padding-left: 0.15rem;
25
+    margin-top: 0.15rem;
26
+    > a {
27
+      font-size: 0.14rem;
28
+      color: #ff5200;
29
+      line-height: 0.2rem;
30
+    }
31
+  }
32
+  > .Form {
33
+    padding: 0 0.15rem;
34
+    margin-top: 0.2rem;
35
+    > li {
36
+      padding: 0.15rem 0;
37
+      position: relative;
38
+      overflow: hidden;
39
+      align-items: center;
40
+      border-bottom: 0.01rem solid #f7f7f7;
41
+      > * {
42
+        margin-left: 0.05rem;
43
+        &:first-child {
44
+          margin-left: 0;
45
+        }
46
+      }
47
+      > i {
48
+        font-size: 0.18rem;
49
+        line-height: 0.3rem;
50
+        color: #ff5200;
51
+      }
52
+      > div {
53
+        > div {
54
+          width: 100%;
55
+          position: relative;
56
+          overflow: hidden;
57
+          > input {
58
+            width: 100%;
59
+            display: block;
60
+            font-size: 0.14rem;
61
+            line-height: 0.2rem;
62
+          }
63
+        }
64
+      }
65
+      > a {
66
+        font-size: 0.14rem;
67
+        color: #ff5200;
68
+      }
69
+      > span {
70
+        font-size: 0.14rem;
71
+        color: #ccc;
72
+      }
73
+    }
74
+  }
75
+  > .Btn {
76
+    padding: 0 0.15rem;
77
+    margin-top: 0.5rem;
78
+    > a {
79
+      display: block;
80
+      font-size: 0.16rem;
81
+      color: #fff;
82
+      background: #ccc;
83
+      line-height: 0.42rem;
84
+      border-radius: 0.06rem;
85
+      text-align: center;
86
+      &.active {
87
+        background: #ff5200;
88
+      }
89
+    }
90
+  }
91
+  > .OtherSignIn {
92
+    margin-top: 0.4rem;
93
+    padding: 0 0.77rem;
94
+    > span {
95
+      display: block;
96
+      text-align: center;
97
+      position: relative;
98
+      text-align: center;
99
+      &::after {
100
+        content: "";
101
+        display: block;
102
+        width: 100%;
103
+        height: 0.01rem;
104
+        background: #f7f7f7;
105
+        left: 0;
106
+        top: 50%;
107
+        transform: translateY(-50%);
108
+        -webkit-transform: translateY(-50%);
109
+        position: absolute;
110
+        z-index: 1;
111
+      }
112
+      > span {
113
+        display: inline-block;
114
+        position: relative;
115
+        z-index: 2;
116
+        font-size: 0.12rem;
117
+        color: #666;
118
+        line-height: 0.2rem;
119
+        background: #fff;
120
+        padding: 0 0.1rem;
121
+      }
122
+    }
123
+    > div {
124
+      margin-top: 0.2rem;
125
+      font-size: 0;
126
+      white-space: nowrap;
127
+      text-align: center;
128
+      padding-bottom: 0.4rem;
129
+      > a {
130
+        display: inline-block;
131
+        vertical-align: middle;
132
+        font-size: 0.4rem;
133
+        margin-left: 0.28rem;
134
+        color: #32b508;
135
+        &:first-child {
136
+          margin-left: 0;
137
+          color: #09a7e4;
138
+        }
139
+      }
140
+    }
141
+  }
142
+}

+ 35
- 17
src/pages/SignIn/index.vue Visa fil

@@ -12,7 +12,7 @@
12 12
         <i class="iconfont iconshouji"></i>
13 13
         <div class="flex-item">
14 14
           <div>
15
-            <input type="number" placeholder="请输入您的手机号码">
15
+            <input type="number" placeholder="请输入您的手机号码" v-model="Phone">
16 16
           </div>
17 17
         </div>
18 18
       </li>
@@ -20,28 +20,20 @@
20 20
         <i class="iconfont iconmima"></i>
21 21
         <div class="flex-item">
22 22
           <div>
23
-            <input type="number" placeholder="请输入验证码">
24
-          </div>
25
-        </div>
26
-        <a>获取验证码</a>
27
-        <span>59s后重新获取</span>
28
-      </li>
29
-      <li class="flex-h">
30
-        <i class="iconfont iconshouji"></i>
31
-        <div class="flex-item">
32
-          <div>
33
-            <input type="number" placeholder="请输入邀请码">
23
+            <input type="password" placeholder="请输入密码" v-model="Password">
34 24
           </div>
35 25
         </div>
36 26
       </li>
37 27
     </ul>
38 28
 
29
+    <span>没有注册账号? <router-link :to="{ name: 'Register' }">去注册</router-link></span>
30
+
39 31
     <div class="Btn">
40
-      <a>开始使用</a>
32
+      <a :class="{'active': Phone !== '' && Password !== ''}" @click="ToSignIn">登录</a>
41 33
     </div>
42 34
 
43 35
     <!-- 三方登录 -->
44
-    <div class="OtherSignIn">
36
+    <!-- <div class="OtherSignIn">
45 37
       <span>
46 38
         <span>第三方账号登录</span>
47 39
       </span>
@@ -49,33 +41,59 @@
49 41
         <a class="iconfont iconzhifubao"></a>
50 42
         <a class="iconfont iconweixin"></a>
51 43
       </div>
52
-    </div>
44
+    </div> -->
53 45
 
54 46
   </div>
55 47
 </template>
56 48
 
57 49
 <script>
58
-import { mapMutations } from 'vuex'
50
+import md5 from 'js-md5'
51
+import { mapMutations, createNamespacedHelpers } from 'vuex'
52
+const { mapState: mapUserState, mapActions: mapUserActions } = createNamespacedHelpers('user')
59 53
 export default {
60 54
   name: '',
61 55
   data () {
62 56
     return {
57
+      Phone: '',
58
+      Password: '',
59
+      DataLock: false
63 60
     }
64 61
   },
65 62
   computed: {
63
+    ...mapUserState({
64
+      UserInfo: x => x.UserInfo // 用户信息
65
+    })
66 66
   },
67 67
   components: {
68 68
   },
69 69
   created () {
70
+    this.EditMainData([])
70 71
   },
71 72
   mounted () {
72 73
     this.$nextTick(() => {
73 74
     })
74 75
   },
75 76
   methods: {
77
+    ...mapUserActions([
78
+      'SignIn'
79
+    ]),
76 80
     ...mapMutations([
77 81
       'EditMainData' // 配置页面框架数据
78
-    ])
82
+    ]),
83
+    ToSignIn () { // 登录
84
+      if (this.Phone === '' || this.Password === '' || this.DataLock) return
85
+      this.DataLock = true
86
+      this.SignIn({ data: { password: md5(this.Password), userName: this.Phone } }).then(() => { // 登录
87
+        if (this.UserInfo !== null) {
88
+          window.localStorage.niucaiusername = this.Password
89
+          window.localStorage.niucaiuserpassword = this.Phone
90
+          this.$router.push({ name: 'index' })
91
+        }
92
+        this.DataLock = false
93
+      }).catch(() => {
94
+        this.DataLock = false
95
+      })
96
+    }
79 97
   }
80 98
 }
81 99
 </script>

+ 17
- 1
src/pages/SignIn/page.scss Visa fil

@@ -16,6 +16,19 @@
16 16
       font-weight: bold;
17 17
     }
18 18
   }
19
+  > span {
20
+    display: block;
21
+    font-size: 0.14rem;
22
+    line-height: 0.2rem;
23
+    white-space: nowrap;
24
+    padding-left: 0.15rem;
25
+    margin-top: 0.15rem;
26
+    > a {
27
+      font-size: 0.14rem;
28
+      color: #ff5200;
29
+      line-height: 0.2rem;
30
+    }
31
+  }
19 32
   > .Form {
20 33
     padding: 0 0.15rem;
21 34
     margin-top: 0.2rem;
@@ -66,10 +79,13 @@
66 79
       display: block;
67 80
       font-size: 0.16rem;
68 81
       color: #fff;
69
-      background: #ff5200;
82
+      background: #ccc;
70 83
       line-height: 0.42rem;
71 84
       border-radius: 0.06rem;
72 85
       text-align: center;
86
+      &.active {
87
+        background: #ff5200;
88
+      }
73 89
     }
74 90
   }
75 91
   > .OtherSignIn {

+ 13
- 3
src/pages/WoDe/GeRenSheZhi/SheZhi/index.vue Visa fil

@@ -10,12 +10,13 @@
10 10
         <i class="iconfont iconjiantouright"></i>
11 11
       </router-link>
12 12
     </ul>
13
-    <a>退出登录</a>
13
+    <a @click="SignOut">退出登录</a>
14 14
   </div>
15 15
 </template>
16 16
 
17 17
 <script>
18
-import { mapMutations } from 'vuex'
18
+import { mapMutations, createNamespacedHelpers } from 'vuex'
19
+const { mapMutations: mapUserMutations } = createNamespacedHelpers('user')
19 20
 export default {
20 21
   name: '',
21 22
   data () {
@@ -40,7 +41,16 @@ export default {
40 41
   methods: {
41 42
     ...mapMutations([
42 43
       'EditMainData' // 配置页面框架数据
43
-    ])
44
+    ]),
45
+    ...mapUserMutations([
46
+      'EmptyUserInfo'
47
+    ]),
48
+    SignOut () { // 登出
49
+      this.EmptyUserInfo()
50
+      window.localStorage.removeItem('niucaiusername')
51
+      window.localStorage.removeItem('niucaiuserpassword')
52
+      this.$router.push({ name: 'SignIn' })
53
+    }
44 54
   }
45 55
 }
46 56
 </script>

+ 8
- 3
src/pages/WoDe/UserCenter/index.vue Visa fil

@@ -5,9 +5,10 @@
5 5
     <div class="TopContainer">
6 6
       <div class="centerLabel">
7 7
         <div class="Icon">
8
-          <img src="" class="centerLabel cover" alt="">
8
+          <img v-if="UserInfo !== null" :src="UserInfo.avatar" class="centerLabel cover" alt="">
9 9
         </div>
10
-        <router-link :to="{ name: 'SignIn' }">点击注册/登录</router-link>
10
+        <router-link :to="{ name: 'SignIn' }" v-if="UserInfo === null">点击注册/登录</router-link>
11
+        <span v-else>{{UserInfo.name}}</span>
11 12
       </div>
12 13
     </div>
13 14
 
@@ -32,7 +33,8 @@
32 33
 </template>
33 34
 
34 35
 <script>
35
-import { mapMutations } from 'vuex'
36
+import { mapMutations, createNamespacedHelpers } from 'vuex'
37
+const { mapState: mapUserState } = createNamespacedHelpers('user')
36 38
 export default {
37 39
   name: '',
38 40
   data () {
@@ -47,6 +49,9 @@ export default {
47 49
     }
48 50
   },
49 51
   computed: {
52
+    ...mapUserState({
53
+      UserInfo: x => x.UserInfo // 用户信息
54
+    })
50 55
   },
51 56
   components: {
52 57
   },

+ 12
- 0
src/pages/WoDe/UserCenter/page.scss Visa fil

@@ -30,6 +30,18 @@
30 30
         border-radius: 0.3rem;
31 31
         line-height: 0.3rem;
32 32
       }
33
+      > span {
34
+        width: 1.2rem;
35
+        display: block;
36
+        text-align: center;
37
+        margin: 0.1rem auto 0;
38
+        // background: rgba(255, 255, 255, 0.2);
39
+        font-size: 0.14rem;
40
+        font-weight: bold;
41
+        color: #fff;
42
+        border-radius: 0.3rem;
43
+        line-height: 0.3rem;
44
+      }
33 45
     }
34 46
   }
35 47
   > .List {

+ 47
- 16
src/pages/WoDe/WoDeCaiPiao/index.vue Visa fil

@@ -3,28 +3,28 @@
3 3
     <scroller :on-refresh="Refresh">
4 4
       <div class="Container">
5 5
         <ul>
6
-          <li v-for="(item, index) in UserOrderList" :key="index">
6
+          <li v-for="(item, index) in UserBettingList" :key="index">
7 7
             <div class="Time">
8 8
               <span>下单时间:{{item.createDate}}</span>
9
-              <span>{{item.dateNum}}</span>
9
+              <span>{{item.issueNo}}</span>
10 10
             </div>
11 11
             <div class="flex-h">
12 12
               <div class="Icon">
13
-                <img v-if="item.typeId === 'zq'" src="../../../assets/img/icon3.png" class="centerLabel cover" alt="">
14
-                <img v-if="item.typeId === 'lq'" src="../../../assets/img/icon6.png" class="centerLabel cover" alt="">
15
-                <img v-if="item.typeId === 'dlt'" src="../../../assets/img/icon4.png" class="centerLabel cover" alt="">
16
-                <img v-if="item.typeId === 'ssq'" src="../../../assets/img/icon5.png" class="centerLabel cover" alt="">
17
-                <img v-if="item.typeId === 'pl3'" src="../../../assets/img/icon7.png" class="centerLabel cover" alt="">
18
-                <img v-if="item.typeId === 'pl5'" src="../../../assets/img/icon2.png" class="centerLabel cover" alt="">
13
+                <img v-if="item.lotteryId === 'zq'" src="../../../assets/img/icon3.png" class="centerLabel cover" alt="">
14
+                <img v-if="item.lotteryId === 'lq'" src="../../../assets/img/icon6.png" class="centerLabel cover" alt="">
15
+                <img v-if="item.lotteryId === 'lottery'" src="../../../assets/img/icon4.png" class="centerLabel cover" alt="">
16
+                <img v-if="item.lotteryId === 'double-color'" src="../../../assets/img/icon5.png" class="centerLabel cover" alt="">
17
+                <img v-if="item.lotteryId === 'p3'" src="../../../assets/img/icon7.png" class="centerLabel cover" alt="">
18
+                <img v-if="item.lotteryId === 'p5'" src="../../../assets/img/icon2.png" class="centerLabel cover" alt="">
19 19
               </div>
20 20
               <div class="flex-item">
21
-                <span>{{item.type}}</span>
22
-                <span>{{item.amount}}元</span>
21
+                <span>{{item.lotteryName}}</span>
22
+                <span>{{item.totalPrice}}元</span>
23 23
               </div>
24 24
             </div>
25 25
             <div class="flex-h">
26 26
               <div class="flex-item">
27
-                <span>订单号:{{item.orderNum}}</span>
27
+                <span>订单号:{{null}}</span>
28 28
               </div>
29 29
               <span>{{item.status}}</span>
30 30
             </div>
@@ -37,16 +37,22 @@
37 37
 
38 38
 <script>
39 39
 import { mapMutations, createNamespacedHelpers } from 'vuex'
40
-const { mapState: mapUserState } = createNamespacedHelpers('user')
40
+const { mapState: mapUserState, mapActions: mapUserActions, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
41 41
 export default {
42 42
   name: '',
43 43
   data () {
44 44
     return {
45
+      DataLock: false, // 数据锁
46
+      PageData: {
47
+        pageNum: 1,
48
+        pageSize: 15
49
+      },
50
+      HasNextPage: true
45 51
     }
46 52
   },
47 53
   computed: {
48 54
     ...mapUserState({
49
-      UserOrderList: x => x.UserOrderList // 用户订单
55
+      UserBettingList: x => x.UserBettingList // 用户投注列表
50 56
     })
51 57
   },
52 58
   components: {
@@ -57,6 +63,7 @@ export default {
57 63
       { name: 'MainHeaderTitle', value: '我的彩票' },
58 64
       { name: 'ShowMainHeaderBack', value: true }
59 65
     ])
66
+    this.Init()
60 67
   },
61 68
   mounted () {
62 69
     this.$nextTick(() => {
@@ -66,10 +73,34 @@ export default {
66 73
     ...mapMutations([
67 74
       'EditMainData' // 配置页面框架数据
68 75
     ]),
69
-    Refresh (done) { // 页面下拉刷新
70
-      window.setTimeout(() => {
76
+    ...mapUserActions([
77
+      'GetUserBettingList'
78
+    ]),
79
+    ...mapUserMutations([
80
+      'EmptyUserBettingList'
81
+    ]),
82
+    Init (done = () => { }) { // 初始化
83
+      this.EmptyUserBettingList() // 清空列表
84
+      this.PageData = {
85
+        pageNum: 1,
86
+        pageSize: 15
87
+      }
88
+      this.HasNextPage = true
89
+      this.GetPageList(done) // 获取列表
90
+    },
91
+    GetPageList (done = () => { }) { // 获取列表
92
+      if (this.DataLock && !this.HasNextPage) return
93
+      this.DataLock = true
94
+      this.GetUserBettingList({ queryData: { ...this.PageData } }).then((res) => {
95
+        this.DataLock = false
71 96
         done()
72
-      }, 1000)
97
+      }).catch((res) => {
98
+        done()
99
+        this.DataLock = false
100
+      })
101
+    },
102
+    Refresh (done) { // 页面下拉刷新
103
+      this.Init()
73 104
     }
74 105
   }
75 106
 }

+ 13
- 9
src/pages/index.vue Visa fil

@@ -89,15 +89,19 @@ export default {
89 89
       'SignIn'
90 90
     ]),
91 91
     Init () { // 初始化
92
-      this.SignIn({ data: { password: md5('123456'), userName: '17714208769' } }).then(() => { // 登录
93
-        if (this.UserInfo === null) {
94
-          this.$router.push({ name: 'SignIn' })
95
-        } else {
96
-          this.GetFootballKeys() // 获取足彩相关字典
97
-          this.GetAllLotteryType({ queryData: { pageNum: 1, pageSize: 1000 } })
98
-        }
99
-      }).catch(() => {
100
-      })
92
+      if (window.localStorage.niucaiusername && window.localStorage.niucaiuserpassword) {
93
+        this.SignIn({ data: { password: md5(window.localStorage.niucaiuserpassword), userName: window.localStorage.niucaiusername } }).then(() => { // 登录
94
+          if (this.UserInfo === null) {
95
+            this.$router.push({ name: 'SignIn' })
96
+          } else {
97
+            this.GetFootballKeys() // 获取足彩相关字典
98
+            this.GetAllLotteryType({ queryData: { pageNum: 1, pageSize: 1000 } })
99
+          }
100
+        }).catch(() => {
101
+        })
102
+      } else {
103
+        this.$router.push({ name: 'SignIn' })
104
+      }
101 105
     }
102 106
   }
103 107
 }

+ 1
- 1
src/pages/index/PaiLie3/index.vue Visa fil

@@ -145,7 +145,7 @@
145 145
     <!-- 投注栏 -->
146 146
     <div class="Bottom flex-h">
147 147
       <span class="SelectRes">共<em>{{TotalResNum}}</em>注<em>{{TotalResNum * 2}}</em>元,奖金<em>0</em>元</span>
148
-      <a class="iconfont iconjian"></a>
148
+      <a class="iconfont iconjian" @click="EmptyData"></a>
149 149
       <router-link :to="{ name: 'PaiLie3DingDan' }" class="iconfont icongouwuche"></router-link>
150 150
       <!-- <a class="iconfont iconqushi"></a> -->
151 151
       <div class="flex-item"></div>

+ 225
- 2
src/pages/index/PaiLie3DingDan/index.vue Visa fil

@@ -1,5 +1,139 @@
1 1
 <template>
2
-  <div class="Page">
2
+  <div class="Page flex-v">
3
+
4
+    <a class="Store flex-h" @click="ShowStore = true">
5
+      <div class="flex-item">
6
+        <div>
7
+          <span>投注门店:{{CurrentStoreName || '请选择'}}</span>
8
+        </div>
9
+      </div>
10
+      <span>查看更多</span>
11
+      <i class="iconfont iconjiantouright"></i>
12
+    </a>
13
+
14
+    <div class="flex-item">
15
+      <div>
16
+
17
+        <div class="Title">
18
+          <span>订单信息</span>
19
+        </div>
20
+
21
+        <span v-if="!PageList.length">购物车空空如也</span>
22
+
23
+        <ul>
24
+          <li v-for="(item, index) in PageList" :key="index">
25
+            <a class="iconfont iconguanbi Close" @click="DeleteItem(item, index)"></a>
26
+            <div class="Title">
27
+              <span>{{ReturnType(item.Type)}}</span>
28
+              <span>{{item.Count}}注{{item.Count * 2}}元</span>
29
+            </div>
30
+
31
+            <!-- 直选 -->
32
+            <ul v-if="item.Type === 'ZhiXuan'">
33
+              <li v-for="(subItem, subIndex) in item.BaiWei" :key="`BaiWei-${subIndex}`">
34
+                <div class="centerLabel">
35
+                  <span>{{subItem}}</span>
36
+                  <span>百</span>
37
+                </div>
38
+              </li>
39
+              <li v-for="(subItem, subIndex) in item.ShiWei" :key="`ShiWei-${subIndex}`">
40
+                <div class="centerLabel">
41
+                  <span>{{subItem}}</span>
42
+                  <span>十</span>
43
+                </div>
44
+              </li>
45
+              <li v-for="(subItem, subIndex) in item.GeWei" :key="`GeWei-${subIndex}`">
46
+                <div class="centerLabel">
47
+                  <span>{{subItem}}</span>
48
+                  <span>个</span>
49
+                </div>
50
+              </li>
51
+            </ul>
52
+
53
+            <!-- 组选3 -->
54
+            <ul v-if="item.Type.indexOf('ZuXuan3') > -1">
55
+              <li v-for="(subItem, subIndex) in item.List" :key="subIndex">
56
+                <div class="centerLabel">
57
+                  <span>{{subItem}}</span>
58
+                </div>
59
+              </li>
60
+            </ul>
61
+
62
+            <!-- 组选6 -->
63
+            <ul v-if="item.Type === 'ZuXuan6'">
64
+              <li v-for="(subItem, subIndex) in item.List" :key="subIndex">
65
+                <div class="centerLabel">
66
+                  <span>{{subItem}}</span>
67
+                </div>
68
+              </li>
69
+            </ul>
70
+
71
+          </li>
72
+        </ul>
73
+
74
+        <div class="Tips">
75
+          <span>排列五官方出票时间:</span>
76
+          <span>周一至周五 9:00 ~ 24:00 周六周日 9:00 ~ 次日1:00</span>
77
+        </div>
78
+
79
+      </div>
80
+    </div>
81
+
82
+    <div class="Bottom">
83
+      <div class="flex-h">
84
+        <div class="flex-item">
85
+          <div>
86
+            <span><em>{{TotalCount}}</em>注<em>{{TotalCount * 2 * Multiple}}</em>元</span>
87
+          </div>
88
+        </div>
89
+        <span>
90
+          <a class="iconfont iconjianhao" @click="Multiple = Multiple > 1 ? Multiple - 1 : 1"></a>
91
+          <input type="number" disabled="disabled" v-model="Multiple">
92
+          <span>倍</span>
93
+          <a class="iconfont iconjiahao" @click="Multiple += 1"></a>
94
+        </span>
95
+      </div>
96
+      <div class="flex-h">
97
+        <a @click="$router.go(-1)">自选号码</a>
98
+        <a @click="CutRandomCount(1)">机选一注</a>
99
+        <a class="flex-item" @click="ToPostBetting" :class="{'active': CurrentStoreId !== null && PaiLie3Cart.length}">确认投注</a>
100
+      </div>
101
+    </div>
102
+
103
+    <div class="Layer" v-if="ShowStore">
104
+      <div class="centerLabel">
105
+        <span v-if="RecommendStoreList.length">推荐店铺:</span>
106
+        <ul v-if="RecommendStoreList.length">
107
+          <li v-for="(item, index) in RecommendStoreList" :key="index" v-if="item.status - 0 === 1" class="flex-h" @click="SelectStore(item)">
108
+            <div class="flex-item">
109
+              <div>
110
+                <span>{{item.name}}</span>
111
+              </div>
112
+            </div>
113
+            <i class="iconfont iconweigouxuan" v-if="item.shopId !== CurrentStoreId"></i>
114
+            <i class="iconfont iconyigouxuan active" v-else></i>
115
+          </li>
116
+        </ul>
117
+        <span>选择附近店铺:</span>
118
+        <ul class="ScrollList">
119
+          <li v-for="(item, index) in StoreList" :key="index" v-if="item.status - 0 === 1" class="flex-h" @click="SelectStore(item)">
120
+            <div class="flex-item">
121
+              <div>
122
+                <span>{{item.name}}</span>
123
+              </div>
124
+            </div>
125
+            <!-- <span>200m</span> -->
126
+            <i class="iconfont iconweigouxuan" v-if="item.shopId !== CurrentStoreId"></i>
127
+            <i class="iconfont iconyigouxuan active" v-else></i>
128
+          </li>
129
+        </ul>
130
+        <div class="Bottom flex-h">
131
+          <a class="flex-item" @click="CurrentStoreId = null; CurrentStoreName = null; ShowStore = false">取消</a>
132
+          <a class="flex-item active" @click="ShowStore = false">确定</a>
133
+        </div>
134
+      </div>
135
+    </div>
136
+
3 137
   </div>
4 138
 </template>
5 139
 
@@ -58,7 +192,96 @@ export default {
58 192
       'GetStoreList'
59 193
     ]),
60 194
     Init () {
61
-      console.log(JSON.stringify(this.PaiLie3Cart))
195
+      this.PageList = [...this.PaiLie3Cart]
196
+      this.CalcTotalCount()
197
+      this.GetStoreList({
198
+        queryData: {
199
+          location: '114.16936109999999,22.3193039',
200
+          lotteryId: 'p3'
201
+        }
202
+      }).then((res) => {
203
+        this.StoreList = res.data.data.nearest || []
204
+        this.RecommendStoreList = res.data.data.recommend || []
205
+      })
206
+    },
207
+    ReturnType (type) { // 投注类型返回值
208
+      switch (type) {
209
+        case 'ZhiXuan':
210
+          return '直选'
211
+        case 'ZuXuan3-DanShi':
212
+          return '组选三 单式'
213
+        case 'ZuXuan3-FuShi':
214
+          return '组选三 复式'
215
+        case 'ZuXuan6':
216
+          return '组选六'
217
+        default:
218
+          return '普通投注'
219
+      }
220
+    },
221
+    CalcTotalCount () { // 计算总注数
222
+      this.TotalCount = 0
223
+      this.PageList.map((item) => {
224
+        this.TotalCount += item.Count
225
+      })
226
+    },
227
+    DeleteItem (item, index) { // 删除单注
228
+      if (this.DataLock) return
229
+      this.DataLock = true
230
+      this.DeletePaiLie3Cart(index)
231
+      this.PageList.splice(index, 1)
232
+      this.TotalCount -= item.Count
233
+      this.DataLock = false
234
+    },
235
+    SelectStore (item) { // 选择店铺
236
+      if (this.DataLock) return
237
+      this.DataLock = true
238
+      this.CurrentStoreName = item.shopId === this.CurrentStoreId ? null : item.name
239
+      this.CurrentStoreId = item.shopId === this.CurrentStoreId ? null : item.shopId
240
+      this.DataLock = false
241
+    },
242
+    ToPostBetting () { // 去下注
243
+      if (this.DataLock || !this.PaiLie3Cart.length || this.CurrentStoreId === null) return
244
+      this.DataLock = true
245
+      let ListData = []
246
+      this.PaiLie3Cart.map((item) => {
247
+        ListData.push({
248
+          amount: item.Count, // 购买注数
249
+          charges: item.Count * 2 * 100, // 价格
250
+          playWay: item.Type.indexOf('ZuXuan3') > -1 ? '组选3' : item.Type === 'ZhiXuan' ? '' : '组选6',
251
+          firstDan: '', // 前区胆号, 逗号连接
252
+          firstNums: item.Type === 'ZhiXuan' ? [item.BaiWei.join(' '), item.ShiWei.join(' '), item.GeWei.join(' ')].join(',') : item.List.join(','), // 前区其余数字, 逗号连接
253
+          isDan: false, // 是否胆拖
254
+          isMulti: item.Count > 1 // 是否复式
255
+        })
256
+      })
257
+      let Data = {
258
+        itemList: [...ListData], // 这个是详细购买方案的列表
259
+        lotteryId: 'p3', // 彩种ID
260
+        notesNum: this.TotalCount, // 总注数
261
+        shopId: this.CurrentStoreId, // 店铺ID
262
+        times: this.Multiple, // 倍数
263
+        totalPrice: this.TotalPrize * this.Multiple * 100 // 总金额
264
+      }
265
+      this.PostBetting({
266
+        urlData: { id: 'p3' },
267
+        data: { ...Data }
268
+      }).then((res) => {
269
+        this.Dialog.alert({
270
+          message: '投注成功!'
271
+        })
272
+        this.EmptyPaiLie3Cart()
273
+        this.PageList = []
274
+        this.TotalCount = 0
275
+        this.TotalPrize = 0
276
+        this.Multiple = 1
277
+        this.DataLock = false
278
+      }).catch((res) => {
279
+        this.Dialog.alert({
280
+          title: '错误',
281
+          message: res.data.message
282
+        })
283
+        this.DataLock = false
284
+      })
62 285
     },
63 286
     EmptyCart () { // 清空购物车
64 287
       this.Dialog.confirm({

+ 347
- 1
src/pages/index/PaiLie3DingDan/page.scss Visa fil

@@ -1,3 +1,349 @@
1 1
 .Page {
2
-  
2
+  background: #f8f8f8;
3
+  position: relative;
4
+  > .Store {
5
+    background: #fff;
6
+    padding: 0.15rem;
7
+    box-shadow: 0 0 0.02rem 0.02rem rgba(0, 0, 0, 0.05);
8
+    position: relative;
9
+    overflow: hidden;
10
+    align-items: center;
11
+    z-index: 2;
12
+    > div {
13
+      position: relative;
14
+      > div {
15
+        width: 100%;
16
+        position: relative;
17
+        overflow: hidden;
18
+        > span {
19
+          display: block;
20
+          font-size: 0.15rem;
21
+          font-weight: bold;
22
+          color: #333;
23
+          line-height: 0.2rem;
24
+          white-space: nowrap;
25
+          overflow: hidden;
26
+          text-overflow: ellipsis;
27
+        }
28
+      }
29
+    }
30
+    > span {
31
+      font-size: 0.12rem;
32
+      color: #999;
33
+      margin-left: 0.1rem;
34
+    }
35
+    > i {
36
+      font-size: 0.12rem;
37
+      color: #999;
38
+    }
39
+  }
40
+  > div.flex-item {
41
+    position: relative;
42
+    overflow: hidden;
43
+    z-index: 1;
44
+    > div {
45
+      width: 100%;
46
+      position: absolute;
47
+      left: 0;
48
+      top: 0;
49
+      bottom: 0;
50
+      overflow-y: scroll;
51
+      -webkit-overflow-scrolling: touch;
52
+      > .Title {
53
+        position: relative;
54
+        overflow: hidden;
55
+        text-align: center;
56
+        margin-top: 0.15rem;
57
+        &::after {
58
+          content: "";
59
+          display: block;
60
+          width: 70%;
61
+          height: 0.01rem;
62
+          background: #eee;
63
+          z-index: 1;
64
+          position: absolute;
65
+          left: 50%;
66
+          top: 50%;
67
+          transform: translate(-50%, -50%);
68
+          -webkit-transform: translate(-50%, -50%);
69
+        }
70
+        > span {
71
+          display: inline-block;
72
+          position: relative;
73
+          z-index: 2;
74
+          background: #f8f8f8;
75
+          font-size: 0.15rem;
76
+          font-weight: bold;
77
+          line-height: 0.2rem;
78
+          padding: 0 0.1rem;
79
+        }
80
+      }
81
+      > span {
82
+        font-size: 0.12rem;
83
+        color: #999;
84
+        display: block;
85
+        line-height: 0.2rem;
86
+        text-align: center;
87
+        margin-top: 0.2rem;
88
+      }
89
+      > ul {
90
+        padding: 0.15rem;
91
+        > li {
92
+          background: #fff;
93
+          padding: 0.15rem;
94
+          box-shadow: 0 0 0.02rem 0.02rem rgba(0, 0, 0, 0.05);
95
+          position: relative;
96
+          overflow: hidden;
97
+          border-radius: 0.06rem;
98
+          margin-top: 0.15rem;
99
+          &:first-child {
100
+            margin-top: 0;
101
+          }
102
+          > a.Close {
103
+            display: inline-block;
104
+            position: absolute;
105
+            right: 0;
106
+            top: 0;
107
+            z-index: 2;
108
+            font-size: 0.16rem;
109
+            color: #999;
110
+          }
111
+          > .Title {
112
+            font-size: 0;
113
+            white-space: nowrap;
114
+            > span {
115
+              display: inline-block;
116
+              vertical-align: middle;
117
+              font-size: 0.12rem;
118
+              color: #333;
119
+              line-height: 0.2rem;
120
+              margin-left: 0.1rem;
121
+              &:first-child {
122
+                margin-left: 0;
123
+              }
124
+            }
125
+          }
126
+          > ul {
127
+            font-size: 0;
128
+            > li {
129
+              display: inline-block;
130
+              vertical-align: middle;
131
+              width: 0.3rem;
132
+              height: 0.3rem;
133
+              position: relative;
134
+              overflow: hidden;
135
+              border-radius: 100%;
136
+              background: #ff5200;
137
+              margin-top: 0.1rem;
138
+              margin-right: 0.05rem;
139
+              > div {
140
+                width: 100%;
141
+                > span {
142
+                  font-size: 0.12rem;
143
+                  color: #fff;
144
+                  line-height: 0.14rem;
145
+                  display: block;
146
+                  text-align: center;
147
+                }
148
+              }
149
+            }
150
+          }
151
+        }
152
+      }
153
+      > div.Tips {
154
+        padding: 0.15rem 0;
155
+        > span {
156
+          display: block;
157
+          font-size: 0.1rem;
158
+          color: #666;
159
+          line-height: 0.2rem;
160
+          text-align: center;
161
+        }
162
+      }
163
+    }
164
+  }
165
+  > div.Bottom {
166
+    background: #fff;
167
+    padding: 0.15rem;
168
+    box-shadow: 0 0 0.02rem 0.02rem rgba(0, 0, 0, 0.05);
169
+    position: relative;
170
+    overflow: hidden;
171
+    z-index: 2;
172
+    > div {
173
+      &:nth-child(1) {
174
+        align-items: center;
175
+        > div {
176
+          position: relative;
177
+          > div {
178
+            width: 100%;
179
+            position: relative;
180
+            overflow: hidden;
181
+            > span {
182
+              display: block;
183
+              font-size: 0.13rem;
184
+              color: #333;
185
+              font-weight: bold;
186
+              line-height: 0.2rem;
187
+              > em {
188
+                font-size: 0.13rem;
189
+                color: #d91d36;
190
+                font-weight: bold;
191
+                line-height: 0.2rem;
192
+              }
193
+            }
194
+          }
195
+        }
196
+        > span {
197
+          display: inline-block;
198
+          margin-left: 0.1rem;
199
+          position: relative;
200
+          overflow: hidden;
201
+          border: 0.01rem solid #f7f7f7;
202
+          border-radius: 0.03rem;
203
+          font-size: 0;
204
+          white-space: nowrap;
205
+          > * {
206
+            display: inline-block;
207
+            vertical-align: middle;
208
+            font-size: 0.14rem;
209
+            color: #999;
210
+            line-height: 0.24rem;
211
+            border-left: 0.01rem solid #f7f7f7;
212
+            &:first-child {
213
+              border: none;
214
+              border-right: 0.01rem solid #f7f7f7;
215
+            }
216
+          }
217
+          > a {
218
+            width: 0.24rem;
219
+            text-align: center;
220
+          }
221
+          > input {
222
+            border: none;
223
+            width: 0.35rem;
224
+            text-align: center;
225
+            color: #333;
226
+            &:disabled {
227
+              color: #333;
228
+            }
229
+          }
230
+          > span {
231
+            border: none;
232
+            margin-right: 0.03rem;
233
+          }
234
+        }
235
+      }
236
+      &:nth-child(2) {
237
+        align-items: center;
238
+        margin-top: 0.15rem;
239
+        > a {
240
+          font-size: 0.15rem;
241
+          line-height: 0.4rem;
242
+          border: 0.01rem solid #ff5200;
243
+          color: #ff5200;
244
+          border-radius: 0.02rem;
245
+          margin-left: 0.15rem;
246
+          padding: 0 0.1rem;
247
+          text-align: center;
248
+          &:first-child {
249
+            margin-left: 0;
250
+          }
251
+          &.flex-item {
252
+            color: #fff;
253
+            background: #ccc;
254
+            border-color: #ccc;
255
+            &.active {
256
+              background: #ff5200;
257
+              border-color: #ff5200;
258
+            }
259
+          }
260
+        }
261
+      }
262
+    }
263
+  }
264
+  > div.Layer {
265
+    width: 100%;
266
+    position: absolute;
267
+    left: 0;
268
+    top: 0;
269
+    bottom: 0;
270
+    z-index: 10;
271
+    background: rgba(0, 0, 0, 0.7);
272
+    > div {
273
+      width: 80%;
274
+      background: #fff;
275
+      border-radius: 0.06rem;
276
+      position: relative;
277
+      overflow: hidden;
278
+      padding-top: 0.15rem;
279
+      > span {
280
+        font-size: 0.14rem;
281
+        font-weight: bold;
282
+        color: #000;
283
+        line-height: 0.3rem;
284
+        display: block;
285
+        text-indent: 0.15rem;
286
+      }
287
+      > ul {
288
+        padding: 0 0.15rem;
289
+        position: relative;
290
+        overflow: hidden;
291
+        &.ScrollList {
292
+          max-height: 2.5rem;
293
+          overflow-y: scroll;
294
+          -webkit-overflow-scrolling: touch;
295
+        }
296
+        > li {
297
+          align-items: center;
298
+          border-top: 0.01rem solid #f7f7f7;
299
+          &:first-child {
300
+            border: none;
301
+          }
302
+          > div {
303
+            position: relative;
304
+            > div {
305
+              width: 100%;
306
+              position: relative;
307
+              > span {
308
+                display: block;
309
+                white-space: nowrap;
310
+                overflow: hidden;
311
+                text-overflow: ellipsis;
312
+                font-size: 0.14rem;
313
+                color: #333;
314
+                line-height: 0.42rem;
315
+              }
316
+            }
317
+          }
318
+          > span {
319
+            font-size: 0.14rem;
320
+            color: #999;
321
+            margin-right: 0.1rem;
322
+          }
323
+          > i {
324
+            font-size: 0.2rem;
325
+            color: #999;
326
+            &.active {
327
+              color: #ff5200;
328
+            }
329
+          }
330
+        }
331
+      }
332
+      > .Bottom {
333
+        border-top: 0.01rem solid #f7f7f7;
334
+        > a {
335
+          font-size: 0.16rem;
336
+          line-height: 0.42rem;
337
+          text-align: center;
338
+          border-left: 0.01rem solid #f7f7f7;
339
+          &.active {
340
+            color: #ff5200;
341
+          }
342
+          &:first-child {
343
+            border: none;
344
+          }
345
+        }
346
+      }
347
+    }
348
+  }
3 349
 }

+ 2
- 1
src/pages/index/ShouYe/index.vue Visa fil

@@ -104,11 +104,12 @@ export default {
104 104
       'GetLotteryRes',
105 105
       'GetNewstLotteryRes'
106 106
     ]),
107
-    Init (done = () => {}) { // 初始化
107
+    Init (done = () => { }) { // 初始化
108 108
       this.GetBanner({ queryData: { pageNum: 1, pageSize: 10, status: 1, adType: 'app-index-banner' } }).then(() => { // 获取banner
109 109
         this.GetNewstLotteryRes().then(() => { // 获取最新数字彩开奖结果列表
110 110
           done()
111 111
         })
112
+        // this.GetLotteryRes({ queryData: { pageNum: 1, pageSize: 10 } })
112 113
       })
113 114
     },
114 115
     Refresh (done) { // 页面下拉刷新

+ 6
- 1
src/router/index.js Visa fil

@@ -195,9 +195,14 @@ let router = new Router({
195 195
         ]
196 196
       },
197 197
       {
198
-        path: '/SignIn', // 首页
198
+        path: '/SignIn', // 登录
199 199
         name: 'SignIn',
200 200
         component: resolve => (require(['@/pages/SignIn'], resolve))
201
+      },
202
+      {
203
+        path: '/Register', // 注册
204
+        name: 'Register',
205
+        component: resolve => (require(['@/pages/Register'], resolve))
201 206
       }
202 207
     ]
203 208
   }]

+ 30
- 8
src/store/user/index.js Visa fil

@@ -10,14 +10,7 @@ export default {
10 10
     DaLeTouCart: [], // 大乐透购物车
11 11
     ShuangSeQiuCart: [], // 双色球购物车
12 12
     UserInfo: null, // 用户信息
13
-    UserOrderList: [ // 用户订单
14
-      { createDate: '2020-08-14  15:10:20', dateNum: '202076期', type: '超级大乐透', typeId: 'dlt', amount: 2, id: 1, orderNum: 'TE202008140000146179970', status: '已撤单' },
15
-      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', typeId: 'ssq', amount: 2, id: 2, orderNum: 'TE202008140000146179970', status: '已下单' },
16
-      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', typeId: 'ssq', amount: 4, id: 3, orderNum: 'TE202008140000146179970', status: '已下单' },
17
-      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', typeId: 'ssq', amount: 2, id: 4, orderNum: 'TE202008140000146179970', status: '已下单' },
18
-      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', typeId: 'ssq', amount: 6, id: 5, orderNum: 'TE202008140000146179970', status: '已下单' },
19
-      { createDate: '2020-08-13  17:23:54', dateNum: '202076期', type: '双色球', typeId: 'ssq', amount: 8, id: 6, orderNum: 'TE202008140000146179970', status: '已下单' }
20
-    ],
13
+    UserBettingList: [], // 用户投注列表
21 14
     UserAccountDetails: { // 用户账户明细
22 15
       All: [
23 16
         { type: '充值', id: '', createDate: '2020-08-15 12:00:00', amount: '+200' },
@@ -44,6 +37,9 @@ export default {
44 37
     UpdateUserInfo (state, data) { // 更新用户信息
45 38
       state.UserInfo = data || null
46 39
     },
40
+    EmptyUserInfo (state) { // 清空用户信息
41
+      state.UserInfo = null
42
+    },
47 43
     AddDaLeTouCart (state, data) { // 新增大乐透购物车
48 44
       state.DaLeTouCart.unshift(data)
49 45
     },
@@ -86,9 +82,30 @@ export default {
86 82
       Arr.map((item) => {
87 83
         state.StoreList.push({ ...item, Active: false })
88 84
       })
85
+    },
86
+    UpdateUserBettingList (state, data) { // 更新用户投注列表
87
+      state.UserBettingList = state.UserBettingList.concat(data.records || [])
88
+    },
89
+    EmptyUserBettingList (state) { // 清空用户投注列表
90
+      state.UserBettingList = []
89 91
     }
90 92
   },
91 93
   actions: {
94
+    CheckRegPhoneCode (context, payload) { // 校验注册手机验证码
95
+      return new Promise((resolve, reject) => {
96
+        ToolClass.Axios(resolve, reject, Api.CheckRegPhoneCode, context, payload, 1000)
97
+      })
98
+    },
99
+    GetRegPhoneCode (context, payload) { // 注册获取手机验证码
100
+      return new Promise((resolve, reject) => {
101
+        ToolClass.Axios(resolve, reject, Api.GetRegPhoneCode, context, payload, 1000)
102
+      })
103
+    },
104
+    UserRegister (context, payload) { // 注册
105
+      return new Promise((resolve, reject) => {
106
+        ToolClass.Axios(resolve, reject, Api.UserRegister, context, payload, 1000)
107
+      })
108
+    },
92 109
     SignIn (context, payload) { // 登录
93 110
       return new Promise((resolve, reject) => {
94 111
         ToolClass.Axios(resolve, reject, Api.SignIn, context, payload, 1000, 'UpdateUserInfo')
@@ -103,6 +120,11 @@ export default {
103 120
       return new Promise((resolve, reject) => {
104 121
         ToolClass.Axios(resolve, reject, Api.GetStoreList, context, payload, 1000, 'UpdateStoreList')
105 122
       })
123
+    },
124
+    GetUserBettingList (context, payload) { // 获取用户投注列表
125
+      return new Promise((resolve, reject) => {
126
+        ToolClass.Axios(resolve, reject, Api.GetUserBettingList, context, payload, 1000, 'UpdateUserBettingList')
127
+      })
106 128
     }
107 129
   }
108 130
 }

+ 17
- 0
src/util/Api.js Visa fil

@@ -33,6 +33,23 @@ const $api = {
33 33
   GetStoreList: { // 获取店铺列表
34 34
     method: 'get',
35 35
     url: `${prefix}/app/shop/available`
36
+  },
37
+  GetUserBettingList: { // 获取用户投注列表
38
+    method: 'get',
39
+    url: `${prefix}/app/customer/betting/list`
40
+  },
41
+  UserRegister: { // 注册
42
+    method: 'post',
43
+    url: `${prefix}/app/signup`
44
+  },
45
+  GetRegPhoneCode: { // 注册获取手机验证码
46
+    method: 'get',
47
+    url: `${prefix}/app/sms/captcha/:phone`
48
+  },
49
+  CheckRegPhoneCode: { // 校验注册手机验证码
50
+    method: 'post',
51
+    url: `${prefix}/app/sms/captcha/:phone`
52
+
36 53
   }
37 54
 }
38 55