4e9ee560418b8fd2e8bc84f76fb5895c269860c7.svn-base 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <div>
  3. <div v-if="data.length >0 " class="bettingTable">
  4. <div>
  5. <div v-for="(item,index) in data" :key="index" style="border-bottom:.02rem solid #bbb" >
  6. <div class="list-header row item-center allAlignment list">
  7. <p class="br05 row center" style="padding:.05rem .1rem;background:#F00;">{{item.playName}}</p>
  8. <div @click="deleteList(index,item.id,item.p_code)" class="row center"
  9. style="width:.26rem;height:.26rem; border-radius:50%;background:#F76649;" >
  10. <img src="@/assets/st-imges/del.png">
  11. </div>
  12. </div>
  13. <div class="list-body list" >
  14. <div class="condition row item-center">
  15. <span >{{item.name}}</span>
  16. <span v-if="item.p_code != 'capot'" style="padding-left:.1rem;">{{item.condition}}</span>
  17. <p style="padding-left:.1rem;">
  18. @
  19. <span style="color:#F76649">{{item.odds}}</span>
  20. </p>
  21. <!-- <span> <i>01 / 04</i></span> -->
  22. </div>
  23. <div class="duel row item-center">
  24. <p>{{item.home_team}}</p>
  25. <span style="color:#F76649;font-size:.12rem;">&emsp;vs&emsp;</span>
  26. <p>{{item.guest_team}}</p>&nbsp;
  27. </div>
  28. </div>
  29. <div class="list-input row item-center allAlignment list">
  30. <div class="br05" style="border:.01rem solid #F76649;position: relative;">
  31. <input type="text" @click="activation(index)" oncopy="return false" onpaste="return false" @keyup="keyMatch($event,index)" v-model=" item.money " placeholder="投注额">
  32. <img @click="removeData(index)"
  33. style="position: absolute;width:.2rem;height:.2rem;right:.1rem;top:.05rem;"
  34. src="@/assets/st-imges/delbetting.png"
  35. >
  36. </div>
  37. <div class="br05 canWin row item-center" >{{item.money ? (item.money*item.odds).toFixed(2) :'可赢额' }}</div>
  38. </div>
  39. <div v-show="state == index" class="key">
  40. <div>
  41. <div class="row average item-center">
  42. <p @click ="addNum(index,100)">+100</p >
  43. <p @click ="addNum(index,500)">+500</p>
  44. <p @click ="addNum(index,1000)">+1000</p>
  45. </div>
  46. <div class="row average item-center">
  47. <p @click ="addNum(index,5000)">+5000</p>
  48. <p @click ="addNum(index,10000)">+10000</p>
  49. <p @click ="addNum(index,50000)">+50000</p>
  50. </div>
  51. </div>
  52. </div>
  53. <!-- <p style="font-size:.14rem;color:#777">最低限额:10</p> -->
  54. </div>
  55. </div>
  56. <div class="statistics">
  57. <div class="statistics-list">
  58. <p class="row allAlignment">
  59. <span>
  60. <i style="color:#F76649">{{data.length}}</i>&emsp;所有投注:
  61. </span>
  62. <span>{{investment?investment :'0.00' }}RMB</span>
  63. </p>
  64. <p class="row allAlignment">
  65. <span>可赢金额:</span>
  66. <span style="color:#F76649;font-size:.16rem;">{{profit?profit:'0.00'}}RMB</span>
  67. </p>
  68. </div>
  69. <!-- <div
  70. style="height:.5rem;background:#A83131;padding-left:.2rem;margin-top:.2rem;"
  71. class="row item-center"
  72. >
  73. <img style="width:.17rem;height:.15rem;" src="@/assets/st-imges/warning.png">&nbsp;
  74. <p style="color:#fff;font-size:.14rem;">您的余额不足。 请您先进行存款</p>
  75. </div> -->
  76. <!-- <div class="row center" style="height:.5rem;background:rgb(247, 102, 73);color:#fff;margin-top:.2rem;font-size:.14rem;">赔率信息已更改,请重新投注</div> -->
  77. <div class="statistics-btn">
  78. <!-- <div class="row center" style="color:#F00;font-size:.16rem;">投注失败</div> -->
  79. <div class="row center" v-if="!login" style="font-size:.16rem;color:#999">请先登陆再进去投注</div>
  80. <div class="row center" v-else style="background:#F76649;color:#fff;" @click='submit'>投注</div>
  81. <div class="row center" @click="cancel()" style="background:#CCC;color:#666;">取消</div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </template>
  87. <script>
  88. import "@/css/index.css";
  89. export default {
  90. name: "oddBettingTable",
  91. data() {
  92. return {
  93. data:[],
  94. cacheData:[],
  95. dataMoney:[],//
  96. state:0,//激活数
  97. login:false,
  98. investment:'',//投注资金
  99. profit:'',//利润(可赢额)
  100. };
  101. },
  102. /***
  103. * 方法
  104. */
  105. methods: {
  106. /*-------------------------------------*/
  107. //切换激活状态
  108. activation(index){
  109. this.state = index;
  110. //console.log(this.data)
  111. },
  112. /*-------------------------------------*/
  113. //小键盘加法
  114. addNum(index,num){
  115. let money = this.data[index].money ? this.data[index].money * 1 : 0;
  116. //console.log(money)
  117. if(money*1 > 999999999){
  118. money = 999999999
  119. }
  120. this.$set(this.data[index],'money', (money*1 + num*1 ) < 999999999 ? money*1 + num*1 :999999999 )
  121. this.calculateMoney();
  122. },
  123. /*---------------------------------------*/
  124. //数据提交
  125. submit(){
  126. let list =[],dataList=[],objData = [];
  127. let money = 0;
  128. let limit = JSON.parse(this.$public.getItem('limit'));
  129. this.data.forEach(e =>{
  130. if(e.money*1 >= 1){
  131. list.push(e);
  132. money += e.money*1;
  133. }
  134. })
  135. list.forEach((res,index) =>{
  136. dataList.push({
  137. type: "1",
  138. index: index,
  139. bet_amount: res.money
  140. })
  141. })
  142. // dataList.push(objData);
  143. dataList.push(list);
  144. console.log(dataList)
  145. if (list.length > 0 ) {
  146. if(limit.lower_limit*1 <= money && limit.upper_limit >= money ){
  147. let token = localStorage.getItem("token");
  148. this.$http.post(this.$ports.betOrder.Bet, {
  149. data: dataList,
  150. token,
  151. bet_money:money
  152. }).then(res => {
  153. //console.log('数据',res.data);
  154. if (res.data.status == 1) {
  155. // this.alldel();
  156. this.$store.dispatch("SET_BETTING",[]);
  157. this.cash = (this.cash - this.dataNumbe * 1).toFixed(2);
  158. this.$dialog.alert({ mes: "亲!你已经投注成功啦。" });
  159. } else if (res.data.status == "-4001") {
  160. this.isLogin = false;
  161. this.$dialog.alert({ mes: "亲!你的登陆已过期。" });
  162. } else if (res.data.status == "4204") {
  163. this.$dialog.alert({ mes: "亲!你的余额不足。" });
  164. }else if(res.data.status == '7027' ){
  165. this.$dialog.alert({ mes: "亲!赔率发生变法,请重新选择。" });
  166. // this.alldel();
  167. this.$store.dispatch("SET_BETTING",[]);
  168. }else{
  169. this.$dialog.alert({ mes: "错误代码:"+res.data.status});
  170. }
  171. this.isSubmit = false;
  172. });
  173. }else if(limit.lower_limit*1 > money ){
  174. this.$dialog.alert({ mes: `亲!投注额小于最低投注额${limit.lower_limit}元` });
  175. }else if(limit.upper_limit*1 < money ){
  176. this.$dialog.alert({ mes: `亲!投注额大于最高投注额${limit.upper_limit}元` });
  177. }
  178. } else {
  179. this.$dialog.alert({ mes: "亲!你还未输入投注金额啦。" });
  180. this.isSubmit = false;
  181. }
  182. },
  183. /*--------------------------------------*/
  184. //限制输入内容
  185. keyMatch(e,index) {
  186. e.currentTarget.value = e.currentTarget.value.replace(/[^0-9]/g, "");
  187. if(e.currentTarget.value.length > 9){
  188. e.currentTarget.value = 999999999
  189. }
  190. this.$set(this.data[index],'money',e.currentTarget.value);
  191. this.calculateMoney();
  192. },
  193. /*-------------------------------------*/
  194. //删除一条数据
  195. deleteList(index,id,code){
  196. let betting= this.$store.getters.getBetting
  197. for(let i=0;i < betting.length ;i++ ){
  198. if(code == betting[i].title){
  199. for(let j = 0;j < betting[i].data.length ; j++){
  200. if(id == betting[i].data[j].id){
  201. this.data[index].money ='';
  202. betting[i].data.splice(j,1);
  203. break;
  204. }
  205. }
  206. break;
  207. }
  208. }
  209. this.$store.dispatch("DEL_TYPE", id);
  210. this.$store.dispatch("SET_BETTING",[]);
  211. this.$store.dispatch("SET_BETTING",betting);
  212. //console.log(betting);
  213. },
  214. /*----------------------------------*/
  215. //清除数据
  216. removeData(index){
  217. this.$set(this.data[index],'money','')
  218. this.calculateMoney();
  219. },
  220. /*----------------------------------*/
  221. //计算可赢额和投注金额
  222. calculateMoney(){
  223. let investment = 0
  224. let profit = 0
  225. this.data.forEach(e=>{
  226. if(e.money){
  227. investment +=e.money*1;
  228. profit += e.money*1 * e.odds*1
  229. }
  230. })
  231. this.investment = investment;
  232. this.profit = profit.toFixed(2);
  233. },
  234. /*----------------------------------*/
  235. // 取消
  236. cancel(){
  237. this.$store.dispatch("SET_BETTING",[]);
  238. },
  239. },
  240. /**
  241. * 计算属性
  242. */
  243. computed: {
  244. getBetting(){
  245. return this.$store.getters.getBetting
  246. },
  247. // 判断登录状态
  248. getToken(){
  249. return this.$store.getters.getToken
  250. }
  251. },
  252. /**
  253. * 监听器
  254. */
  255. watch: {
  256. getBetting(val){
  257. let dataList = [];
  258. if(this.$store.getters.getLimit > 0){
  259. val.forEach(e =>{
  260. dataList = dataList.concat(e.data)
  261. })
  262. }
  263. //console.log(this.data)
  264. // 清除v-model 的数据
  265. if(this.data.length > dataList.length){
  266. this.data.forEach((e,index)=>{
  267. let isDel = false;
  268. dataList.forEach(res=>{
  269. if( e.id == res.id ){
  270. isDel = true;
  271. }
  272. })
  273. if(!isDel){
  274. this.data[index].money ='';
  275. }
  276. })
  277. }
  278. this.data = [];
  279. this.data = dataList;
  280. //console.log(this.data);
  281. },
  282. // 获取登录状态,判断登录
  283. getToken(val){
  284. this.login = val? true: false
  285. }
  286. },
  287. mounted(){
  288. if(localStorage.getItem("token")){
  289. this.login = true;
  290. }
  291. }
  292. };
  293. </script>
  294. <style scoped>
  295. img {
  296. cursor: pointer;
  297. }
  298. .canWin{
  299. border:.01rem solid #BFE2B3;
  300. background:#E7FFDA;
  301. padding-left: .05rem;
  302. }
  303. .br05 {
  304. border-radius: 0.05rem;
  305. }
  306. .bettingTable {
  307. min-height: 0.8rem;
  308. background: #e5e5e5;
  309. }
  310. .dataNo {
  311. background: #777;
  312. }
  313. .list {
  314. width: 90%;
  315. margin: 0 auto;
  316. }
  317. .list img {
  318. width: 0.15rem;
  319. height: 0.15rem;
  320. }
  321. .list-header {
  322. min-height: 0.5rem;
  323. }
  324. .list-header p {
  325. font-size: 0.14rem;
  326. color: #fff;
  327. }
  328. .list-body {
  329. min-height: 0.6rem;
  330. }
  331. .list-body > div {
  332. min-height: 0.3rem;
  333. }
  334. .condition {
  335. font-size: 0.16rem;
  336. font-weight: bold;
  337. color: #666;
  338. }
  339. .duel {
  340. font-size: 0.14rem;
  341. color: #666;
  342. }
  343. .list-input {
  344. min-height: 0.6rem;
  345. }
  346. .list-input > div {
  347. width: 48%;
  348. height: 0.35rem;
  349. color: #999;
  350. font-size: 0.14rem;
  351. }
  352. .list-input > div input {
  353. width: 100%;
  354. height: 100%;
  355. border: none;
  356. border-radius: 0.05rem;
  357. background: #fff;
  358. padding-left: 0.05rem;
  359. }
  360. .key {
  361. min-height: 1rem;
  362. background: #ccc;
  363. }
  364. .key > div {
  365. width: 90%;
  366. margin: 0 auto;
  367. }
  368. .key > div > div {
  369. min-height: 0.5rem;
  370. }
  371. .key p {
  372. width: 30%;
  373. height: 0.34rem;
  374. background: #fff;
  375. border-radius: 0.05rem;
  376. display: flex;
  377. justify-content: center;
  378. align-items: center;
  379. color: #f76649;
  380. font-size: 0.14rem;
  381. cursor: pointer;
  382. box-shadow: -2px 0px 5px 1px rgba(0, 0, 0, 0.05),
  383. 0px -2px 5px 1px rgba(0, 0, 0, 0.05), 2px 0px 5px 1px rgba(0, 0, 0, 0.05),
  384. 0px 2px 5px 1px rgba(0, 0, 0, 0.05);
  385. }
  386. .statistics {
  387. min-height: 1.9rem;
  388. background: #fff;
  389. }
  390. .statistics > div {
  391. width: 90%;
  392. margin: 0 auto;
  393. padding: 0.2rem 0;
  394. }
  395. .statistics-list {
  396. min-height: 0.6rem;
  397. font-size: 0.14rem;
  398. }
  399. .statistics-list > p {
  400. line-height: 0.3rem;
  401. }
  402. .statistics-btn > div {
  403. height: 0.34rem;
  404. border-radius: 0.05rem;
  405. margin-top: 0.1rem;
  406. cursor: pointer;
  407. }
  408. </style>