xcx před 4 roky
rodič
revize
5e06c51391

+ 11
- 30
package-lock.json Zobrazit soubor

@@ -5521,8 +5521,7 @@
5521 5521
         "ansi-regex": {
5522 5522
           "version": "2.1.1",
5523 5523
           "bundled": true,
5524
-          "dev": true,
5525
-          "optional": true
5524
+          "dev": true
5526 5525
         },
5527 5526
         "aproba": {
5528 5527
           "version": "1.2.0",
@@ -5543,14 +5542,12 @@
5543 5542
         "balanced-match": {
5544 5543
           "version": "1.0.0",
5545 5544
           "bundled": true,
5546
-          "dev": true,
5547
-          "optional": true
5545
+          "dev": true
5548 5546
         },
5549 5547
         "brace-expansion": {
5550 5548
           "version": "1.1.11",
5551 5549
           "bundled": true,
5552 5550
           "dev": true,
5553
-          "optional": true,
5554 5551
           "requires": {
5555 5552
             "balanced-match": "^1.0.0",
5556 5553
             "concat-map": "0.0.1"
@@ -5565,20 +5562,17 @@
5565 5562
         "code-point-at": {
5566 5563
           "version": "1.1.0",
5567 5564
           "bundled": true,
5568
-          "dev": true,
5569
-          "optional": true
5565
+          "dev": true
5570 5566
         },
5571 5567
         "concat-map": {
5572 5568
           "version": "0.0.1",
5573 5569
           "bundled": true,
5574
-          "dev": true,
5575
-          "optional": true
5570
+          "dev": true
5576 5571
         },
5577 5572
         "console-control-strings": {
5578 5573
           "version": "1.1.0",
5579 5574
           "bundled": true,
5580
-          "dev": true,
5581
-          "optional": true
5575
+          "dev": true
5582 5576
         },
5583 5577
         "core-util-is": {
5584 5578
           "version": "1.0.2",
@@ -5695,8 +5689,7 @@
5695 5689
         "inherits": {
5696 5690
           "version": "2.0.3",
5697 5691
           "bundled": true,
5698
-          "dev": true,
5699
-          "optional": true
5692
+          "dev": true
5700 5693
         },
5701 5694
         "ini": {
5702 5695
           "version": "1.3.5",
@@ -5708,7 +5701,6 @@
5708 5701
           "version": "1.0.0",
5709 5702
           "bundled": true,
5710 5703
           "dev": true,
5711
-          "optional": true,
5712 5704
           "requires": {
5713 5705
             "number-is-nan": "^1.0.0"
5714 5706
           }
@@ -5723,7 +5715,6 @@
5723 5715
           "version": "3.0.4",
5724 5716
           "bundled": true,
5725 5717
           "dev": true,
5726
-          "optional": true,
5727 5718
           "requires": {
5728 5719
             "brace-expansion": "^1.1.7"
5729 5720
           }
@@ -5731,14 +5722,12 @@
5731 5722
         "minimist": {
5732 5723
           "version": "0.0.8",
5733 5724
           "bundled": true,
5734
-          "dev": true,
5735
-          "optional": true
5725
+          "dev": true
5736 5726
         },
5737 5727
         "minipass": {
5738 5728
           "version": "2.2.4",
5739 5729
           "bundled": true,
5740 5730
           "dev": true,
5741
-          "optional": true,
5742 5731
           "requires": {
5743 5732
             "safe-buffer": "^5.1.1",
5744 5733
             "yallist": "^3.0.0"
@@ -5757,7 +5746,6 @@
5757 5746
           "version": "0.5.1",
5758 5747
           "bundled": true,
5759 5748
           "dev": true,
5760
-          "optional": true,
5761 5749
           "requires": {
5762 5750
             "minimist": "0.0.8"
5763 5751
           }
@@ -5838,8 +5826,7 @@
5838 5826
         "number-is-nan": {
5839 5827
           "version": "1.0.1",
5840 5828
           "bundled": true,
5841
-          "dev": true,
5842
-          "optional": true
5829
+          "dev": true
5843 5830
         },
5844 5831
         "object-assign": {
5845 5832
           "version": "4.1.1",
@@ -5851,7 +5838,6 @@
5851 5838
           "version": "1.4.0",
5852 5839
           "bundled": true,
5853 5840
           "dev": true,
5854
-          "optional": true,
5855 5841
           "requires": {
5856 5842
             "wrappy": "1"
5857 5843
           }
@@ -5937,8 +5923,7 @@
5937 5923
         "safe-buffer": {
5938 5924
           "version": "5.1.1",
5939 5925
           "bundled": true,
5940
-          "dev": true,
5941
-          "optional": true
5926
+          "dev": true
5942 5927
         },
5943 5928
         "safer-buffer": {
5944 5929
           "version": "2.1.2",
@@ -5974,7 +5959,6 @@
5974 5959
           "version": "1.0.2",
5975 5960
           "bundled": true,
5976 5961
           "dev": true,
5977
-          "optional": true,
5978 5962
           "requires": {
5979 5963
             "code-point-at": "^1.0.0",
5980 5964
             "is-fullwidth-code-point": "^1.0.0",
@@ -5994,7 +5978,6 @@
5994 5978
           "version": "3.0.1",
5995 5979
           "bundled": true,
5996 5980
           "dev": true,
5997
-          "optional": true,
5998 5981
           "requires": {
5999 5982
             "ansi-regex": "^2.0.0"
6000 5983
           }
@@ -6038,14 +6021,12 @@
6038 6021
         "wrappy": {
6039 6022
           "version": "1.0.2",
6040 6023
           "bundled": true,
6041
-          "dev": true,
6042
-          "optional": true
6024
+          "dev": true
6043 6025
         },
6044 6026
         "yallist": {
6045 6027
           "version": "3.0.2",
6046 6028
           "bundled": true,
6047
-          "dev": true,
6048
-          "optional": true
6029
+          "dev": true
6049 6030
         }
6050 6031
       }
6051 6032
     },

+ 31
- 1
src/pages/index/DaLeTou/index.vue Zobrazit soubor

@@ -98,7 +98,7 @@
98 98
           <span v-else>至少选5橙球2蓝球</span>
99 99
         </div>
100 100
       </div>
101
-      <a class="Btn" :class="{'active': CanCreateRes}">加入选号</a>
101
+      <a class="Btn" :class="{'active': CanCreateRes}" @click="AddToCart">加入选号</a>
102 102
       <a class="Btn" :class="{'active': CanCreateRes}" @click="CreateOrder">投注</a>
103 103
     </div>
104 104
 
@@ -145,6 +145,36 @@ export default {
145 145
     ...mapUserMutations([
146 146
       'AddDaLeTouCart' // 新增大乐透购物车
147 147
     ]),
148
+    AddToCart () { // 加入选号
149
+      if (this.DataLock || !this.CanCreateRes) return
150
+      this.DataLock = true
151
+      let FirstSortArr = []
152
+      this.ResObj.FirstRes.Dan.map((item) => {
153
+        FirstSortArr.push({ Num: item, IsDan: true, IsFirst: true })
154
+      })
155
+      this.ResObj.FirstRes.Tuo.map((item) => {
156
+        FirstSortArr.push({ Num: item, IsDan: false, IsFirst: true })
157
+      })
158
+      FirstSortArr.sort((a, b) => { return a.Num - b.Num })
159
+      let LastSortArr = []
160
+      this.ResObj.LastRes.Dan.map((item) => {
161
+        LastSortArr.push({ Num: item, IsDan: true, IsFirst: false })
162
+      })
163
+      this.ResObj.LastRes.Tuo.map((item) => {
164
+        LastSortArr.push({ Num: item, IsDan: false, IsFirst: false })
165
+      })
166
+      LastSortArr.sort((a, b) => { return a.Num - b.Num })
167
+      this.AddShuangSeQiuCart({ ...this.ResObj, SortArr: FirstSortArr.concat(LastSortArr), Count: this.TotalResNum, Multiple: 1 })
168
+      this.FirstList.map((item) => {
169
+        item.Active = 0
170
+      })
171
+      this.LastList.map((item) => {
172
+        item.Active = 0
173
+      })
174
+      this.TotalResNum = 0
175
+      this.FastSelectIndex = null
176
+      this.DataLock = false
177
+    },
148 178
     CreateOrder () { // 去投注
149 179
       if (this.DataLock || !this.CanCreateRes) return
150 180
       this.DataLock = true

+ 1
- 0
src/pages/index/DaLeTouDingDan/page.scss Zobrazit soubor

@@ -128,6 +128,7 @@
128 128
         > .OtherTab {
129 129
           padding: 0 0.15rem;
130 130
           position: relative;
131
+          margin-bottom: 0.15rem;
131 132
           > div {
132 133
             padding: 0.15rem;
133 134
             background: #fff;

+ 262
- 19
src/pages/index/ShuangSeQiu/index.vue Zobrazit soubor

@@ -2,7 +2,7 @@
2 2
   <div class="Page flex-v">
3 3
 
4 4
     <div class="Top">
5
-      <div class="Time flex-h">
5
+      <!-- <div class="Time flex-h">
6 6
         <div class="Icon">
7 7
           <img src="../../../assets/img/icon5.png" class="centerLabel contain" alt="">
8 8
         </div>
@@ -18,7 +18,7 @@
18 18
             <span class="active">20:20 开奖</span>
19 19
           </div>
20 20
         </div>
21
-      </div>
21
+      </div> -->
22 22
       <div class="PrevRes flex-h">
23 23
         <span>077期</span>
24 24
         <div class="flex-item">
@@ -44,14 +44,14 @@
44 44
             <div class="NumberList">
45 45
               <div class="Title flex-h">
46 46
                 <span class="flex-item">选中号码两次设胆</span>
47
-                <a @click="ShowMiss = !ShowMiss">{{ShowMiss ? '隐藏' : '显示'}}遗漏</a>
47
+                <!-- <a @click="ShowMiss = !ShowMiss">{{ShowMiss ? '隐藏' : '显示'}}遗漏</a> -->
48 48
               </div>
49 49
               <ul>
50 50
                 <li v-for="(item, index) in FirstList" :key="index">
51 51
                   <a :class="{'active': item.Active - 0 !== 0}" @click="SelectFirstItem(item, index)">
52 52
                     <div class="centerLabel">
53 53
                       <span>{{item.Num}}</span>
54
-                      <span v-if="item.active - 0 === 2">胆</span>
54
+                      <span v-if="item.Active - 0 === 2">胆</span>
55 55
                     </div>
56 56
                   </a>
57 57
                   <span v-if="ShowMiss">{{item.MissNum}}</span>
@@ -62,7 +62,7 @@
62 62
                   <a :class="{'active': item.Active - 0 !== 0}" @click="SelectLastItem(item, index)">
63 63
                     <div class="centerLabel">
64 64
                       <span>{{item.Num}}</span>
65
-                      <span v-if="item.active - 0 === 2">胆</span>
65
+                      <span v-if="item.Active - 0 === 2">胆</span>
66 66
                     </div>
67 67
                   </a>
68 68
                   <span v-if="ShowMiss">{{item.MissNum}}</span>
@@ -74,9 +74,9 @@
74 74
             <div class="FastSelect">
75 75
               <span>快速选区</span>
76 76
               <div>
77
-                <a>+机选1注</a>
78
-                <a>+机选5注</a>
79
-                <a>后区全包 <span>必中</span></a>
77
+                <a @click="RandomOne" :class="{'active': FastSelectIndex === 0}">+机选1注</a>
78
+                <a :class="{'active': FastSelectIndex === 1}" @click="RandomFive">+机选5注</a>
79
+                <a @click="SelectAllLastArr" :class="{'active': FastSelectIndex === 2}">后区全包 <span>必中</span></a>
80 80
               </div>
81 81
             </div>
82 82
 
@@ -90,27 +90,33 @@
90 90
       <a class="iconfont iconjian Delete"></a>
91 91
       <div class="flex-item">
92 92
         <div>
93
-          <div>
94
-            <span>¥2</span>
95
-            <span>1注</span>
93
+          <div v-if="TotalResNum">
94
+            <span>¥{{TotalResNum * 2}}</span>
95
+            <span>{{TotalResNum}}注</span>
96 96
           </div>
97
-          <span>至少选6橙球1蓝球</span>
97
+          <span v-else>至少选6橙球1蓝球</span>
98 98
         </div>
99 99
       </div>
100
-      <a class="Btn">加入选号</a>
101
-      <a class="Btn">投注</a>
100
+      <a class="Btn" :class="{'active': CanCreateRes}" @click="AddToCart">加入选号</a>
101
+      <a class="Btn" :class="{'active': CanCreateRes}" @click="CreateOrder">投注</a>
102 102
     </div>
103 103
 
104 104
   </div>
105 105
 </template>
106 106
 
107 107
 <script>
108
-import { mapMutations } from 'vuex'
108
+import { mapMutations, createNamespacedHelpers } from 'vuex'
109
+const { mapMutations: mapUserMutations } = createNamespacedHelpers('user')
109 110
 export default {
110 111
   name: '',
111 112
   data () {
112 113
     return {
114
+      TotalResNum: 0, // 总注数
115
+      FastSelectIndex: null, // 快速选取索引值
116
+      CanCreateRes: false, // 选取结果是否合法
117
+      DataLock: false, // 数据锁
113 118
       ShowMiss: false, // 显隐遗漏
119
+      ResObj: { FirstRes: null, LastRes: null }, // 结果数据
114 120
       FirstList: [], // 前区号码池
115 121
       LastList: [] // 后区号码池
116 122
     }
@@ -135,19 +141,256 @@ export default {
135 141
     ...mapMutations([
136 142
       'EditMainData' // 配置页面框架数据
137 143
     ]),
144
+    ...mapUserMutations([
145
+      'AddShuangSeQiuCart' // 新增双色球购物车
146
+    ]),
147
+    AddToCart () { // 加入选号
148
+      if (this.DataLock || !this.CanCreateRes) return
149
+      this.DataLock = true
150
+      let FirstSortArr = []
151
+      this.ResObj.FirstRes.Dan.map((item) => {
152
+        FirstSortArr.push({ Num: item, IsDan: true, IsFirst: true })
153
+      })
154
+      this.ResObj.FirstRes.Tuo.map((item) => {
155
+        FirstSortArr.push({ Num: item, IsDan: false, IsFirst: true })
156
+      })
157
+      FirstSortArr.sort((a, b) => { return a.Num - b.Num })
158
+      let LastSortArr = []
159
+      this.ResObj.LastRes.Dan.map((item) => {
160
+        LastSortArr.push({ Num: item, IsDan: true, IsFirst: false })
161
+      })
162
+      this.ResObj.LastRes.Tuo.map((item) => {
163
+        LastSortArr.push({ Num: item, IsDan: false, IsFirst: false })
164
+      })
165
+      LastSortArr.sort((a, b) => { return a.Num - b.Num })
166
+      this.AddShuangSeQiuCart({ ...this.ResObj, SortArr: FirstSortArr.concat(LastSortArr), Count: this.TotalResNum, Multiple: 1 })
167
+      this.FirstList.map((item) => {
168
+        item.Active = 0
169
+      })
170
+      this.LastList.map((item) => {
171
+        item.Active = 0
172
+      })
173
+      this.TotalResNum = 0
174
+      this.FastSelectIndex = null
175
+      this.DataLock = false
176
+    },
177
+    CreateOrder () { // 去投注
178
+      if (this.DataLock || !this.CanCreateRes) return
179
+      this.DataLock = true
180
+      let FirstSortArr = []
181
+      this.ResObj.FirstRes.Dan.map((item) => {
182
+        FirstSortArr.push({ Num: item, IsDan: true, IsFirst: true })
183
+      })
184
+      this.ResObj.FirstRes.Tuo.map((item) => {
185
+        FirstSortArr.push({ Num: item, IsDan: false, IsFirst: true })
186
+      })
187
+      FirstSortArr.sort((a, b) => { return a.Num - b.Num })
188
+      let LastSortArr = []
189
+      this.ResObj.LastRes.Dan.map((item) => {
190
+        LastSortArr.push({ Num: item, IsDan: true, IsFirst: false })
191
+      })
192
+      this.ResObj.LastRes.Tuo.map((item) => {
193
+        LastSortArr.push({ Num: item, IsDan: false, IsFirst: false })
194
+      })
195
+      LastSortArr.sort((a, b) => { return a.Num - b.Num })
196
+      this.AddShuangSeQiuCart({ ...this.ResObj, SortArr: FirstSortArr.concat(LastSortArr), Count: this.TotalResNum, Multiple: 1 })
197
+      this.DataLock = false
198
+      this.$router.push({ name: 'ShuangSeQiuDingDan' })
199
+    },
138 200
     CreatNumList () { // 创建号码池数据
139
-      for (let n = 0; n < 35; n++) {
201
+      for (let n = 0; n < 33; n++) {
140 202
         this.FirstList.push({ Num: n + 1 > 9 ? n + 1 : `0${n + 1}`, Active: 0, MissNum: 5 })
141 203
       }
142
-      for (let n = 0; n < 14; n++) {
204
+      for (let n = 0; n < 16; n++) {
143 205
         this.LastList.push({ Num: n + 1 > 9 ? n + 1 : `0${n + 1}`, Active: 0, MissNum: 5 })
144 206
       }
145 207
     },
146
-    SelectFirstItem (item, index) { // 前区选号
208
+    SelectRandomIndexFromArr (max, num, arr = []) { // 数字区间中选取随机n个数值
209
+      if (arr.length < num) {
210
+        let Random = Math.floor(max * Math.random())
211
+        let Bool = true
212
+        arr.map((item) => {
213
+          if (item - 0 === Random) {
214
+            Bool = false
215
+          }
216
+        })
217
+        if (Bool) {
218
+          arr.push(Random)
219
+        }
220
+        this.SelectRandomIndexFromArr(max, num, arr)
221
+        return arr
222
+      } else {
223
+        return arr
224
+      }
225
+    },
226
+    RandomFive () { // 机选5注
227
+      if (this.DataLock) return false
228
+      this.DataLock = true
229
+      this.FastSelectIndex = 1
230
+      this.FirstList.map((item) => { // 前区清空
231
+        item.Active = 0
232
+      })
233
+      this.LastList.map((item) => { // 后区清空
234
+        item.Active = 0
235
+      })
236
+      for (let n = 0; n < 5; n++) {
237
+        let FirstArr = this.SelectRandomIndexFromArr(33, 6)
238
+        let Res = { FirstArr: [], LastArr: [] }
239
+        FirstArr.map((item) => {
240
+          Res.FirstArr.push(this.FirstList[item].Num - 0)
241
+        })
242
+        let LastArr = this.SelectRandomIndexFromArr(16, 1)
243
+        LastArr.map((item) => {
244
+          Res.LastArr.push(this.LastList[item].Num - 0)
245
+        })
246
+        let FirstSortArr = []
247
+        Res.FirstArr.map((item) => {
248
+          FirstSortArr.push({ Num: item, IsDan: false, IsFirst: true })
249
+        })
250
+        FirstSortArr.sort((a, b) => { return a.Num - b.Num })
251
+        let LastSortArr = []
252
+        Res.LastArr.map((item) => {
253
+          LastSortArr.push({ Num: item, IsDan: false, IsFirst: false })
254
+        })
255
+        LastSortArr.sort((a, b) => { return a.Num - b.Num })
256
+        this.AddShuangSeQiuCart({ FirstRes: { Dan: [], Tuo: Res.FirstArr }, LastRes: { Dan: [], Tuo: Res.LastArr }, SortArr: FirstSortArr.concat(LastSortArr), Count: 1, Multiple: 1 })
257
+      }
258
+      this.DataLock = false
259
+      this.$router.push({ name: 'ShuangSeQiuDingDan' })
260
+    },
261
+    RandomOne () { // 机选1注
262
+      if (this.DataLock) return false
263
+      this.DataLock = true
264
+      this.FastSelectIndex = 0
265
+      this.FirstList.map((item) => { // 前区清空
266
+        item.Active = 0
267
+      })
268
+      this.LastList.map((item) => { // 后区清空
269
+        item.Active = 0
270
+      })
271
+      let FirstArr = this.SelectRandomIndexFromArr(33, 6)
272
+      let Res = { FirstArr: [], LastArr: [] }
273
+      FirstArr.map((item) => {
274
+        this.FirstList[item].Active = 1
275
+        Res.FirstArr.push(this.FirstList[item].Num - 0)
276
+      })
277
+      let LastArr = this.SelectRandomIndexFromArr(16, 1)
278
+      LastArr.map((item) => {
279
+        this.LastList[item].Active = 1
280
+        Res.LastArr.push(this.LastList[item].Num - 0)
281
+      })
282
+      this.CreateTotalRes({ Dan: [], Tuo: Res.FirstArr }, { Dan: [], Tuo: Res.LastArr }) // 计算总注数
283
+      this.ResObj.FirstRes = { Dan: [], Tuo: Res.FirstArr }
284
+      this.ResObj.LastRes = { Dan: [], Tuo: Res.LastArr }
285
+      this.CanCreateRes = true
286
+      this.DataLock = false
287
+    },
288
+    SelectAllLastArr () { // 后区全包
289
+      if (this.DataLock) return false
290
+      this.DataLock = true
291
+      this.FastSelectIndex = 2
292
+      let Res = { FirstArr: [], LastArr: [] }
293
+      this.FirstList.map((item) => { // 前区清空
294
+        item.Active = 0
295
+      })
296
+      this.LastList.map((item) => { // 后区全选
297
+        item.Active = 1
298
+        Res.LastArr.push(item.Num - 0)
299
+      })
300
+      let FirstArr = this.SelectRandomIndexFromArr(33, 6)
301
+      FirstArr.map((item) => {
302
+        this.FirstList[item].Active = 1
303
+        Res.FirstArr.push(this.FirstList[item].Num - 0)
304
+      })
305
+      this.CreateTotalRes({ Dan: [], Tuo: Res.FirstArr }, { Dan: [], Tuo: Res.LastArr }) // 计算总注数
306
+      this.ResObj.FirstRes = { Dan: [], Tuo: Res.FirstArr }
307
+      this.ResObj.LastRes = { Dan: [], Tuo: Res.LastArr }
308
+      this.CanCreateRes = true
309
+      this.DataLock = false
310
+    },
311
+    CalcRes () { // 计算结果
312
+      let CurrentFirstList = []
313
+      let CurrentLastList = []
314
+      this.FirstList.map((item) => { // 前区
315
+        if (item.Active !== 0) {
316
+          CurrentFirstList.push({ ...item })
317
+        }
318
+      })
319
+      this.LastList.map((item) => { // 后区
320
+        if (item.Active !== 0) {
321
+          CurrentLastList.push({ ...item })
322
+        }
323
+      })
324
+      this.CanCreateRes = CurrentFirstList.length >= 6 && CurrentLastList.length >= 1 // 前区选号个数必须大于等于5 && 后区选号个数必须大于等于2
325
+      if (this.CanCreateRes) { // 选取结果合法时,计算选取结果
326
+        this.CreateTotalRes(this.CreateTuoDanRes(CurrentFirstList), this.CreateTuoDanRes(CurrentLastList))
327
+        this.ResObj.FirstRes = this.CreateTuoDanRes(CurrentFirstList)
328
+        this.ResObj.LastRes = this.CreateTuoDanRes(CurrentLastList)
329
+      }
330
+      this.DataLock = false
331
+    },
332
+    CreateTuoDanRes (arr) { // 生成拖胆结果
333
+      let DanArr = []
334
+      let TuoArr = []
335
+      arr.map((item) => {
336
+        if (item.Active === 2) { // 选出胆号
337
+          DanArr.push(item.Num - 0)
338
+        } else { // 选出拖号
339
+          TuoArr.push(item.Num - 0)
340
+        }
341
+      })
342
+      return { Dan: DanArr.sort((a, b) => { return a - b }), Tuo: TuoArr.sort((a, b) => { return a - b }) }
343
+    },
344
+    CreateTotalRes (FirstRes, LastRes) { // 生成所有注数
345
+      let FirstResNum = 0
346
+      let LastResNum = 0
347
+      let m = 0
348
+      let n = 0
349
+      if (FirstRes.Dan.length) {
350
+        m = FirstRes.Tuo.length
351
+        n = 6 - FirstRes.Dan.length
352
+      } else {
353
+        m = FirstRes.Tuo.length
354
+        n = 6
355
+      }
356
+      FirstResNum = this.JieCheng(m) / (this.JieCheng(n) * this.JieCheng(m - n))
147 357
 
358
+      if (LastRes.Dan.length) {
359
+        m = LastRes.Tuo.length
360
+        n = 1 - LastRes.Dan.length
361
+      } else {
362
+        m = LastRes.Tuo.length
363
+        n = 1
364
+      }
365
+      LastResNum = this.JieCheng(m) / (this.JieCheng(n) * this.JieCheng(m - n))
366
+      this.TotalResNum = FirstResNum * LastResNum
367
+    },
368
+    JieCheng (num) {
369
+      return num > 0 ? num * this.JieCheng(num - 1) : 1
370
+    },
371
+    SelectFirstItem (item, index) { // 前区选号
372
+      if (this.DataLock) return
373
+      this.DataLock = true
374
+      this.FastSelectIndex = null
375
+      let DanCount = 0
376
+      this.FirstList.map((item) => {
377
+        if (item.Active === 2) {
378
+          DanCount += 1
379
+        }
380
+      })
381
+      if (DanCount < 4) { // 胆号个数不能超过4个
382
+        item.Active = item.Active === 0 ? 1 : item.Active === 1 ? 2 : 0
383
+      } else {
384
+        item.Active = item.Active === 0 ? 1 : 0
385
+      }
386
+      this.CalcRes() // 计算结果
148 387
     },
149 388
     SelectLastItem (item, index) { // 后区选号
150
-
389
+      if (this.DataLock) return
390
+      this.DataLock = true
391
+      this.FastSelectIndex = null
392
+      item.Active = item.Active === 0 ? 1 : 0
393
+      this.CalcRes() // 计算结果
151 394
     }
152 395
   }
153 396
 }

+ 15
- 3
src/pages/index/ShuangSeQiu/page.scss Zobrazit soubor

@@ -229,6 +229,10 @@
229 229
                 &:nth-child(2n + 1) {
230 230
                   margin-left: 0;
231 231
                 }
232
+                &.active {
233
+                  background: #ff5200;
234
+                  color: #fff;
235
+                }
232 236
                 > span {
233 237
                   display: inline-block;
234 238
                   position: absolute;
@@ -297,15 +301,23 @@
297 301
     > .Btn {
298 302
       line-height: 0.28rem;
299 303
       font-size: 0.13rem;
300
-      color: #ff5200;
301
-      border: 0.01rem solid #ff5200;
304
+      color: #ccc;
305
+      border: 0.01rem solid #ccc;
302 306
       border-radius: 0.02rem;
303 307
       margin-left: 0.15rem;
304 308
       width: 0.6rem;
305 309
       text-align: center;
306 310
       &:last-child {
307 311
         color: #fff;
308
-        background: #ff5200;
312
+        background: #ccc;
313
+      }
314
+      &.active {
315
+        color: #ff5200;
316
+        border: 0.01rem solid #ff5200;
317
+        &:last-child {
318
+          color: #fff;
319
+          background: #ff5200;
320
+        }
309 321
       }
310 322
     }
311 323
   }

+ 178
- 0
src/pages/index/ShuangSeQiuDingDan/index.vue Zobrazit soubor

@@ -0,0 +1,178 @@
1
+<template>
2
+  <div class="Page flex-v">
3
+    <div class="flex-item">
4
+      <div>
5
+
6
+        <ul>
7
+          <li v-for="(item, index) in PageList" :key="index">
8
+            <a class="iconfont iconguanbi Close" @click="DeleteItem(index)"></a>
9
+            <div class="flex-h">
10
+              <span class="flex-item">{{ReturnType(item)}}<em>{{item.Count}}</em>注<em>{{item.Count * 2}}</em>元</span>
11
+              <span>
12
+                <a class="iconfont iconjianhao" @click="MultipleLess(item)"></a>
13
+                <input type="number" v-model="item.Multiple" disabled="disabled">
14
+                <span>倍</span>
15
+                <a class="iconfont iconjiahao" @click="MultipleMore(item)"></a>
16
+              </span>
17
+            </div>
18
+            <ul>
19
+              <li v-for="(subItem, subIndex) in item.SortArr" :key="subIndex" :class="{'active': !subItem.IsFirst}">
20
+                <div class="centerLabel">
21
+                  <span>{{subItem.Num}}</span>
22
+                  <span v-if="subItem.IsDan">胆</span>
23
+                </div>
24
+              </li>
25
+            </ul>
26
+          </li>
27
+        </ul>
28
+
29
+        <div class="OtherTab">
30
+          <div class="flex-h">
31
+            <span class="flex-item">是否追期?</span>
32
+            <span>追号喜中二等奖</span>
33
+            <van-switch v-model="IsAdd" active-color="#07c160" inactive-color="#ccc" size="0.13rem" @change="SwitchChange" />
34
+          </div>
35
+        </div>
36
+
37
+      </div>
38
+    </div>
39
+    <div class="Bottom">
40
+      <div class="Store">
41
+        <a @click="ShowStore = true">店铺:请选择</a>
42
+      </div>
43
+      <div class="Count">
44
+        <span><em>{{TotalCount}}</em>注</span>
45
+        <span>金额:<em>{{TotalPrize}}</em>元</span>
46
+      </div>
47
+      <a>立即购买</a>
48
+    </div>
49
+    <div class="Layer" v-if="ShowStore">
50
+      <div class="centerLabel">
51
+        <span>推荐店铺:</span>
52
+        <ul>
53
+          <li v-for="(item, index) in 3" :key="index" class="flex-h">
54
+            <div class="flex-item">
55
+              <div>
56
+                <span>彩票供销社{{index + 1}}</span>
57
+              </div>
58
+            </div>
59
+            <i class="iconfont iconweigouxuan"></i>
60
+          </li>
61
+        </ul>
62
+        <span>选择附近店铺:</span>
63
+        <ul class="ScrollList">
64
+          <li v-for="(item, index) in 20" :key="index" class="flex-h">
65
+            <div class="flex-item">
66
+              <div>
67
+                <span>彩票供销社{{index + 1}}</span>
68
+              </div>
69
+            </div>
70
+            <span>200m</span>
71
+            <i class="iconfont iconweigouxuan"></i>
72
+          </li>
73
+        </ul>
74
+        <div class="Bottom flex-h">
75
+          <a class="flex-item" @click="ShowStore = false">取消</a>
76
+          <a class="flex-item active">确定</a>
77
+        </div>
78
+      </div>
79
+    </div>
80
+  </div>
81
+</template>
82
+
83
+<script>
84
+import { Switch } from 'vant'
85
+import { mapMutations, createNamespacedHelpers } from 'vuex'
86
+const { mapState: mapUserState, mapMutations: mapUserMutations } = createNamespacedHelpers('user')
87
+export default {
88
+  name: '',
89
+  data () {
90
+    return {
91
+      ShowStore: false, // 是否显示店铺选择弹窗
92
+      TotalCount: 0, // 总注数
93
+      TotalPrize: 0, // 总金额
94
+      IsAdd: false, // 是否追加
95
+      PageList: [],
96
+      DataLock: false
97
+    }
98
+  },
99
+  computed: {
100
+    ...mapUserState({
101
+      ShuangSeQiuCart: x => x.ShuangSeQiuCart // 双色球购物车
102
+    })
103
+  },
104
+  components: {
105
+    'van-switch': Switch
106
+  },
107
+  created () {
108
+    this.EditMainData([ // 配置页面框架数据
109
+      { name: 'ShowMainHeader', value: true },
110
+      { name: 'MainHeaderTitle', value: '双色球' },
111
+      { name: 'ShowMainHeaderBack', value: true }
112
+    ])
113
+    this.PageList = [...this.ShuangSeQiuCart]
114
+    this.CheckOrderCount() // 计算订单倍数、金额
115
+  },
116
+  mounted () {
117
+    this.$nextTick(() => {
118
+    })
119
+  },
120
+  methods: {
121
+    ...mapMutations([
122
+      'EditMainData' // 配置页面框架数据
123
+    ]),
124
+    ...mapUserMutations([
125
+      'DeleteShuangSeQiuCart'
126
+    ]),
127
+    SwitchChange () { // 追加状态改变
128
+      this.CheckOrderCount()
129
+    },
130
+    DeleteItem (index) { // 删除投注
131
+      this.DeleteShuangSeQiuCart(index)
132
+      this.PageList = [...this.ShuangSeQiuCart]
133
+      this.CheckOrderCount()
134
+    },
135
+    ReturnType (item) {
136
+      if (item.FirstRes.Dan.length || item.LastRes.Dan.length) {
137
+        return '拖胆'
138
+      } else if (item.Count > 1) {
139
+        return '复式'
140
+      } else {
141
+        return '单式'
142
+      }
143
+    },
144
+    MultipleLess (item) { // 减少倍数
145
+      if (item.Multiple > 1 && !this.DataLock) {
146
+        this.DataLock = true
147
+        item.Multiple -= 1
148
+        this.CheckOrderCount() // 计算订单倍数、金额
149
+        this.DataLock = false
150
+      }
151
+    },
152
+    MultipleMore (item) { // 增加倍数
153
+      if (!this.DataLock) {
154
+        this.DataLock = true
155
+        item.Multiple += 1
156
+        this.CheckOrderCount() // 计算订单倍数、金额
157
+        this.DataLock = false
158
+      }
159
+    },
160
+    CheckOrderCount () { // 计算订单倍数、金额
161
+      let Count = 0 // 注数
162
+      let Money = 0 // 金额
163
+      let ItemPrize = this.IsAdd ? 3 : 2
164
+      this.PageList.map((item) => {
165
+        Count += item.Count
166
+        Money += item.Count * item.Multiple * ItemPrize
167
+      })
168
+      this.TotalCount = Count
169
+      this.TotalPrize = Money
170
+    }
171
+  }
172
+}
173
+</script>
174
+
175
+<!-- Add "scoped" attribute to limit CSS to this component only -->
176
+<style lang="scss" scoped>
177
+@import "page.scss";
178
+</style>

+ 320
- 0
src/pages/index/ShuangSeQiuDingDan/page.scss Zobrazit soubor

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

+ 4
- 0
src/router/index.js Zobrazit soubor

@@ -41,6 +41,10 @@ let router = new Router({
41 41
             path: '/index/ShuangSeQiu', // 双色球
42 42
             name: 'ShuangSeQiu',
43 43
             component: resolve => (require(['@/pages/index/ShuangSeQiu'], resolve))
44
+          }, {
45
+            path: '/index/ShuangSeQiuDingDan', // 双色球订单
46
+            name: 'ShuangSeQiuDingDan',
47
+            component: resolve => (require(['@/pages/index/ShuangSeQiuDingDan'], resolve))
44 48
           }, {
45 49
             path: '/index/PaiLie3', // 排列3
46 50
             name: 'PaiLie3',