140aec3888e7e10ac5ff58b6b82bd857777b0696.svn-base 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. <template>
  2. <div>
  3. <div class="serch row item-center allAlignment" v-if="noShow">
  4. <div class="row center all pointer hover br05 fz14" @click="elasticFrame()">
  5. <span style="font-size:.14rem;color:#ccc;">选择联赛</span>
  6. </div>
  7. <div class="row item-center">
  8. <div class="row item-center">
  9. <input
  10. class="fz14"
  11. type="text"
  12. placeholder="请输入联赛和球队名称"
  13. v-model="serchTxt"
  14. onkeyup="this.value=this.value.replace(/\s+/g,'')"
  15. color="#AAA"
  16. >
  17. <div class="row center serch-img pointer hover" @click="Serch()">
  18. <img src="@/assets/st-imges/serch.png" alt>
  19. </div>
  20. </div>
  21. <div class="row item-center">
  22. <div class="row center clear pointer hover br05 fz14" @click="clearSerchTxt()">清除</div>
  23. <div class="row center redraw pointer hover br05" @click="red()">
  24. <img src="@/assets/st-imges/redraw.png" alt>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. <!-- 日期 -->
  30. <div v-if="(this.$store.getters.getActivity == 'StMorningPlate'||this.$store.getters.getActivity == 'StStringScene')" class="date row item-center pdg20">
  31. <nav class="row datebox scroll allAlignment">
  32. <p @click="dateActive(item.id)" :class="dateClick == item.id?'dateShow':''" v-for="(item,index) in date" :key="index">{{item.title}}</p>
  33. </nav>
  34. </div>
  35. <div class="singleAndDouble" v-for="(item,index) in data" :key="index">
  36. <div class="singleAndDouble-header pdg20 row">
  37. <div style="width:26%;height:100%;font-size:.16rem;" class="row item-center">{{item.leagueName}}</div>
  38. <div style="width:35%;height:100%" class="singleAndDouble-header-title">
  39. <div class="row center">全场</div>
  40. <div class="row item-center allAlignment" style="padding:0 .75rem;color:#999">
  41. <p>单</p>
  42. <p>双</p>
  43. </div>
  44. </div>
  45. <div style="width:35%;height:100%" class="singleAndDouble-header-title">
  46. <div class="row center">上半场</div>
  47. <div class="row item-center allAlignment" style="padding:0 .75rem;color:#999">
  48. <p>单</p>
  49. <p>双</p>
  50. </div>
  51. </div>
  52. </div>
  53. <div
  54. class="singleAndDouble-body row pdg20"
  55. style="border-bottom:.01rem solid #ddd"
  56. v-for="(items,i) in item.matchData"
  57. :key="i"
  58. >
  59. <div style="width:25%;" class="row item-center">
  60. <div
  61. style="width:.8rem;text-align:center;height:100%;margin-right:.2rem;flex-wrap: wrap;padding:.05rem 0;"
  62. class="row center"
  63. >
  64. <p style="width:100%;">{{items.match_date}}</p>
  65. <p style="font-size:.12rem;color:#F76649;width:100%">{{items.match_time}}</p>
  66. <p style="width:100%;">
  67. <img style="width:.14rem;height:.14rem" src="@/assets/st-imges/shizhong.png">
  68. </p>
  69. </div>
  70. <div>
  71. <p>{{items.home_team}}</p>
  72. <p style="margin-top:.1rem;">{{items.guest_team}}</p>
  73. </div>
  74. </div>
  75. <!-- 全场 -->
  76. <div style="width:35%;padding:0 .25rem;border-right:.01rem solid #ddd;position: relative;" class="row item-center allAlignment">
  77. <div v-for="(itemList,idx) in items.oddsData" :key="itemList.id" style="">
  78. <div v-if="itemList.odds_code == 'tss' || itemList.odds_code == 'tsd'" :class="itemList.odds_code == 'tss'?'list-left':'list-right'">
  79. <p class="singleAndDouble-list-btn" v-if="itemList.odds_code == 'tss' " :class="{col:itemList.isTrue,rising:itemList.change == 'rising',falling:itemList.change == 'falling'}" @click="selection(index,i,idx,itemList.id,itemList.p_code,items.match_id,items.home_team,items.guest_team,'','进球:单/双')">{{itemList.odds?itemList.odds:'-'}}</p>
  80. <p class="singleAndDouble-list-btn" v-if="itemList.odds_code == 'tsd' " :class="{col:itemList.isTrue,rising:itemList.change == 'rising',falling:itemList.change == 'falling'}" @click="selection(index,i,idx,itemList.id,itemList.p_code,items.match_id,items.home_team,items.guest_team,'','进球:单/双')">{{itemList.odds?itemList.odds:'-'}}</p>
  81. </div>
  82. </div>
  83. </div>
  84. <!-- 半场 -->
  85. <div style="width:35%;padding:0 .25rem;position: relative;" class="row item-center allAlignment">
  86. <div v-for="(itemList,idx) in items.oddsData" :key="itemList.id" style="">
  87. <div v-if="itemList.odds_code == 'tss_h' || itemList.odds_code == 'tsd_h' " :class="itemList.odds_code == 'tss_h'?'list-left':'list-right'">
  88. <p class="singleAndDouble-list-btn" v-if="itemList.odds_code == 'tss_h' " :class="{col:itemList.isTrue,rising:itemList.change == 'rising',falling:itemList.change == 'falling'}" @click="selection(index,i,idx,itemList.id,itemList.p_code,items.match_id,items.home_team,items.guest_team,'','进球:单/双-上半场')">{{itemList.odds?itemList.odds:'-'}}</p>
  89. <p class="singleAndDouble-list-btn" v-if="itemList.odds_code == 'tsd_h' " :class="{col:itemList.isTrue,rising:itemList.change == 'rising',falling:itemList.change == 'falling'}" @click="selection(index,i,idx,itemList.id,itemList.p_code,items.match_id,items.home_team,items.guest_team,'','进球:单/双-上半场')">{{itemList.odds?itemList.odds:'-'}}</p>
  90. </div>
  91. </div>
  92. </div>
  93. <div @click="promptInfo()" class="right-img">
  94. <img style="margin-bottom:.1rem" src="@/assets/st-imges/TheGame.png">
  95. <br>
  96. <img src="@/assets/st-imges/TheScore.png">
  97. </div>
  98. </div>
  99. </div>
  100. <div v-if="noData">
  101. <noData/>
  102. </div>
  103. </div>
  104. </template>
  105. <script>
  106. import "@/css/index.css";
  107. import noData from '@/components/noData';
  108. export default {
  109. name: "singleAndDouble",
  110. components:{
  111. noData
  112. },
  113. data() {
  114. return {
  115. date: [{id:'all',title:'全部'}],//日期
  116. dateClick:'all',//激活的日期
  117. data: [],
  118. serchTxt: "",
  119. // pCode: this.$store.getters.getPaly_code, //传入接口的值
  120. activity: this.$store.getters.getActivity,
  121. // ballCode: this.$store.getters.getBallCode,
  122. timers:true,
  123. noData : false, // 暂无数据显示
  124. limit : '',
  125. passLimit:'',
  126. dataList:[],
  127. noShow : true,
  128. lg_id:'',//联赛
  129. };
  130. },
  131. mounted() {
  132. //获取选择的联赛id
  133. if(this.$store.getters.getLeagueData.length >0 ){
  134. if(this.$store.getters.getLeagueData.length == 1){
  135. this.lg_id = this.$store.getters.getLeagueData[0]
  136. }else{
  137. this.lg_id = this.$store.getters.getLeagueData.join(',');
  138. }
  139. }
  140. this.$store.dispatch("GETLOADING", true);
  141. this.getAJAX(this.lg_id);
  142. this.$store.dispatch("SET_BETTING",[]);
  143. let _this = this;
  144. this.$public.ajaxTimerFun((timing)=>{
  145. if(_this.timers){
  146. _this.getAJAX(_this.lg_id,_this.serchTxt)
  147. }else{
  148. clearInterval(timing)
  149. }
  150. })
  151. },
  152. beforeDestroy(){
  153. this.timers = false
  154. },
  155. methods:{
  156. /*******************直播比赛数据提示*******************/
  157. promptInfo(){
  158. this.$dialog.alert({mes: '此功能占未开放'});
  159. },
  160. getAJAX(lg_id,search){
  161. if(this.$store.getters.getActivity == 'StStringScene'){
  162. this.$store.dispatch("SET_BETTINGTYPE", 2);
  163. }else{
  164. this.$store.dispatch("SET_BETTINGTYPE", 1);
  165. }
  166. this.$http.get(this.$ports.home.gameList,{
  167. type:this.$store.getters.getActivity,
  168. p_code : this.$store.getters.getPaly_code,
  169. game_code : this.$store.getters.getBallCode,
  170. match_date:this.dateClick == 'all'? '': this.dateClick,
  171. lg_id,
  172. search
  173. }).then(res =>{
  174. if(res.data.status == 1 && res.data.data.length > 0){
  175. this.noData = false;
  176. // if(this.dataList.length){
  177. // this.$public.oddsDataUpdate(res.data.data[0],this.dataList,1)
  178. // }
  179. this.data = res.data.data[0];
  180. // console.log(this.data,'res')
  181. //临时储存数据
  182. this.dataList = res.data.data[0];
  183. let betting = '';
  184. if(this.$store.getters.getActivity == 'StStringScene'){
  185. betting = this.$store.getters.getPassBetting;
  186. }else{
  187. betting = this.$store.getters.getBetting;
  188. }
  189. this.dataGroup(this.data,betting)
  190. this.$store.dispatch("GETLOADING", false);
  191. }else{
  192. this.noData = true;
  193. }
  194. this.noShow = true;
  195. this.$store.dispatch("GETLOADING", false);
  196. }
  197. )
  198. },
  199. // 进入添加选中效果
  200. dataGroup(data,betting){
  201. if(betting != null && betting.length > 0){
  202. // console.log('bet',betting)
  203. data.forEach(e =>{
  204. e.matchData.forEach(k =>{
  205. k.oddsData.forEach(item =>{
  206. betting.forEach(i =>{
  207. i.data.forEach(j =>{
  208. if(j.id == item.id){
  209. item.isTrue = true
  210. }
  211. })
  212. })
  213. })
  214. })
  215. })
  216. }
  217. },
  218. // 修改样式
  219. // 选中
  220. selection(idx,i,index,id,p_code,match_id,homeName,guestName,name,playName) {
  221. //调用投注公共方法
  222. let _this = this;
  223. let ballId = this.$store.getters.getBallCode;
  224. let teamName = {
  225. home : homeName,
  226. guest : guestName
  227. }
  228. let acty = this.$store.getters.getActivity;
  229. if(this.$store.getters.getActivity == 'StStringScene'){
  230. let betting = this.$store.getters.getPassBetting;
  231. if(betting == null){
  232. betting = [];
  233. }
  234. this.$public.strandPublicBetting(this.data,p_code,id,idx,i,index,betting,acty,match_id,playName,name,ballId,homeName,guestName,this.passLimit,function(data,type){
  235. if(type){
  236. _this.$dialog.toast({ mes: "亲,超出表格上限啦。", timeout: 2000 });
  237. }
  238. _this.$store.dispatch("SET_PASSBETTING",[]);
  239. _this.$store.dispatch("SET_PASSBETTING",data);
  240. })
  241. }else{
  242. let betting = this.$store.getters.getBetting;
  243. this.$public.publicBetting(this.data,p_code,id,idx,i,index,betting,acty,match_id,teamName,playName,name,ballId,this.limit,function(data,type){
  244. if(type){
  245. _this.$dialog.toast({ mes: "亲,超出表格上限啦。", timeout: 2000 });
  246. }
  247. _this.$store.dispatch("SET_BETTING",[]);
  248. _this.$store.dispatch("SET_BETTING",data);
  249. })
  250. }
  251. // 串场为单串
  252. if(this.limit < 10){
  253. this.data[idx].matchData.forEach((val,i) =>{
  254. val.oddsData.forEach(item =>{
  255. if(this.$store.getters.getActivity == 'StStringScene'){
  256. if(this.passLimit < 10){
  257. if(val.match_id == match_id){
  258. // 当isTrue值为true时,点击时置为false
  259. if(item.id == id){
  260. console.log(item.isTrue)
  261. if(item.isTrue == true){
  262. this.$forceUpdate();
  263. item.isTrue = false
  264. }else if(item.isTrue = false){
  265. this.$forceUpdate();
  266. item.isTrue = true
  267. }else{
  268. this.$forceUpdate();
  269. this.$set(item, "isTrue", item.isTrue ? false : true);
  270. }
  271. }else{
  272. if(item.isTrue == true){
  273. item.isTrue = false;
  274. }
  275. }
  276. }
  277. }else{
  278. if(item.id == id){
  279. this.$forceUpdate();
  280. this.$set(item,'isTrue',false)
  281. }
  282. }
  283. }else{
  284. if(item.id == id){
  285. this.$forceUpdate();
  286. this.$set(item, "isTrue", item.isTrue ? false : true);
  287. }
  288. }
  289. })
  290. })
  291. }else{
  292. this.data[idx].matchData.forEach(val =>{
  293. val.oddsData.forEach(item =>{
  294. if(item.id == id){
  295. this.$set(item,'isTrue',false)
  296. }
  297. })
  298. })
  299. }
  300. },
  301. //搜索按钮被点击
  302. Serch() {
  303. //判断搜索框内是否有值,没有值中断函数
  304. if (this.serchTxt === "") {
  305. this.$dialog.toast({ mes: "请输入您想要搜索的内容。", timeout: 2000 });
  306. return false;
  307. } else {
  308. this.data = [];
  309. this.$store.dispatch("SET_LEAGUEDATA",[]); //需要拷贝
  310. this.getAJAX('',this.serchTxt)
  311. }
  312. },
  313. // 删除搜索框内容
  314. clearSerchTxt() {
  315. if(this.serchTxt != ""){
  316. this.data = [];
  317. this.serchTxt = "";
  318. this.$store.dispatch("SET_LEAGUEDATA",[]); //需要拷贝
  319. this.getAJAX();
  320. }
  321. },
  322. // 刷新
  323. red() {
  324. this.serchTxt = "";
  325. this.lg_id ="";
  326. this.$store.dispatch("SET_LEAGUEDATA",[]); //需要拷贝
  327. if (this.serchTxt.length > 0) {
  328. this.Serch();
  329. } else {
  330. this.data = []
  331. this.getAJAX();
  332. }
  333. },
  334. //跳转到联赛选择页
  335. elasticFrame() {
  336. this.$store.dispatch("SET_CONTROLROUTING", 10015);
  337. },
  338. // 日期计算
  339. fun_date() {
  340. let date = new Date();
  341. let MonthNum = 0;
  342. let lastMonth = new Date(date.getFullYear(),date.getMonth() + 1,0).getDate();
  343. for (let i = 1; i < 7; i++) {
  344. let years = date.getFullYear();
  345. let month = date.getMonth() + 1;
  346. let day =
  347. date.getDate() + i < 10
  348. ? "0" + (date.getDate() + i)
  349. : date.getDate() + i;
  350. if (date.getDate() + i > lastMonth) {
  351. MonthNum++;
  352. month = date.getMonth() + 2;
  353. day = "0" + MonthNum;
  354. }
  355. let time = {};
  356. time.id = years + "-" + month + "-" + day;
  357. time.title =years+' - '+month + " - " + day;
  358. this.date.push(time);
  359. }
  360. },
  361. dateActive(str){
  362. this.dateClick = str;
  363. this.data = []
  364. this.getAJAX(this.lg_id,this.serchTxt);
  365. },
  366. },
  367. created(){
  368. this.fun_date();
  369. },
  370. computed:{
  371. getActy() {
  372. return this.$store.getters.getActivity;
  373. },
  374. // getPaly_code() {
  375. // return this.$store.getters.getPaly_code;
  376. // },
  377. // getBallId() {
  378. // return this.$store.getters.getBallCode;
  379. // },
  380. getDeleteType() {
  381. return this.$store.getters.getDeleteType;
  382. },
  383. // 获取投注数量
  384. getLimit() {
  385. return this.$store.getters.getLimit;
  386. },
  387. getPassLimit(){
  388. return this.$store.getters.getPassLimit;
  389. }
  390. },
  391. watch:{
  392. getActy(val) {
  393. this.activity = val;
  394. // this.data = '';
  395. this.getAJAX();
  396. this.$store.dispatch("SET_BETTING",[]);
  397. if(val != 'StStringScene'){
  398. this.$store.dispatch("SET_PASSBETTING",[]);
  399. }
  400. },
  401. // getPaly_code(val) {
  402. // this.pCode = val;
  403. // this.getAJAX();
  404. // },
  405. // getBallId(val) {
  406. // this.ballCode = val;
  407. // this.getAJAX();
  408. // },
  409. getDeleteType(val){
  410. let jumpOut = false;
  411. for(var i = 0; i < this.data.length; i++){
  412. for(var k = 0; k < this.data[i].matchData.length; k++){
  413. for(var j = 0; j < this.data[i].matchData[k].oddsData.length;j++){
  414. if(this.data[i].matchData[k].oddsData[j].id == val){
  415. this.$forceUpdate();
  416. this.data[i].matchData[k].oddsData[j].isTrue = false;
  417. jumpOut = true;
  418. break;
  419. }
  420. }
  421. if(jumpOut == true){
  422. break;
  423. }
  424. }
  425. if(jumpOut == true){
  426. break;
  427. }
  428. }
  429. },
  430. getLimit(val){
  431. this.limit = val;
  432. if(this.$store.getters.getActivity == 'StStringScene'){
  433. }else{
  434. if(val == 0){
  435. this.data.forEach(e =>{
  436. e.matchData.forEach(k =>{
  437. k.oddsData.forEach(item =>{
  438. if(item.isTrue){
  439. item.isTrue = false;
  440. }
  441. })
  442. })
  443. })
  444. }
  445. }
  446. },
  447. getPassLimit(val){
  448. this.passLimit = val;
  449. if(this.$store.getters.getActivity == 'StStringScene'){
  450. if(val == 0){
  451. this.data.forEach(e =>{
  452. e.matchData.forEach(k =>{
  453. k.oddsData.forEach(item =>{
  454. if(item.isTrue){
  455. this.$forceUpdate();
  456. item.isTrue = false;
  457. }
  458. })
  459. })
  460. })
  461. }
  462. }
  463. },
  464. }
  465. };
  466. </script>
  467. <style scoped>
  468. .list-left {
  469. position: absolute;
  470. left: 0.7rem;
  471. bottom: 25%;
  472. }
  473. .list-right {
  474. position: absolute;
  475. left: 2rem;
  476. bottom: 25%;
  477. }
  478. .pdg20 {
  479. padding: 0 0.2rem;
  480. }
  481. .singleAndDouble-header {
  482. height: 0.5rem;
  483. background: #e5e5e5;
  484. }
  485. .singleAndDouble-header-title div {
  486. height: 0.25rem;
  487. }
  488. .singleAndDouble-body {
  489. position: relative;
  490. background: #fff;
  491. }
  492. .singleAndDouble-body:hover{
  493. background: #fff5e9;
  494. }
  495. .singleAndDouble-list-btn {
  496. width: 0.48rem;
  497. height: 0.3rem;
  498. border: 0.01rem solid #ccc;
  499. line-height: 0.3rem;
  500. text-align: center;
  501. border-radius: 0.05rem;
  502. cursor: pointer;
  503. }
  504. .singleAndDouble-list-btn:hover{
  505. background: #ddd;
  506. color: #f76649;
  507. }
  508. .right-img {
  509. width: 0.15rem;
  510. position: absolute;
  511. right: 0.3rem;
  512. bottom: -2%;
  513. }
  514. .right-img img {
  515. width: 0.22rem;
  516. height: 0.2rem;
  517. }
  518. * {
  519. font-size: 0.14rem;
  520. }
  521. .serch {
  522. width: 100%;
  523. height: 0.5rem;
  524. background: #aaa;
  525. padding: 0 0.2rem;
  526. }
  527. input {
  528. border: none;
  529. background: #efefef;
  530. padding-left: 0.2rem;
  531. width: 4.6rem;
  532. height: 0.3rem;
  533. border-radius: 0.05rem 0 0 0.05rem;
  534. }
  535. .serch-img {
  536. width: 0.5rem;
  537. height: 0.3rem;
  538. background: #666;
  539. border-radius: 0 0.05rem 0.05rem 0;
  540. margin-right: 0.3rem;
  541. }
  542. .all {
  543. width: 1.2rem;
  544. height: 0.3rem;
  545. background: #666;
  546. color: #333;
  547. }
  548. .clear {
  549. width: 0.6rem;
  550. height: 0.3rem;
  551. background: #666;
  552. color: #ccc;
  553. margin-right: 0.1rem;
  554. }
  555. .redraw {
  556. width: 0.3rem;
  557. height: 0.3rem;
  558. background: #666;
  559. }
  560. img {
  561. width: 0.2rem;
  562. height: 0.2rem;
  563. }
  564. .br05 {
  565. border-radius: 0.05rem;
  566. }
  567. .fz14 {
  568. font-size: 0.14rem;
  569. }
  570. .hover:hover {
  571. background: #bbb;
  572. color: #fff!important;
  573. }
  574. .hover:hover span{
  575. color: #fff!important;
  576. }
  577. .pointer {
  578. cursor: pointer;
  579. }
  580. .col{
  581. border-radius: 2px;
  582. background: #F76649;
  583. color: #fff;
  584. }
  585. /* 日期样式 */
  586. .date {
  587. height: 0.4rem;
  588. background: #898989;
  589. font-size: .16rem;
  590. color: #fff;
  591. font-weight: bold;
  592. }
  593. .date > p {
  594. width: 0.26rem;
  595. height: 0.26rem;
  596. background: #bbb;
  597. border-radius: 0.05rem;
  598. }
  599. .date div {
  600. width: 100%;
  601. height: 100%;
  602. }
  603. .datebox {
  604. overflow-x: auto;
  605. overflow-y: hidden;
  606. width: 100%;
  607. height: 0.4rem;
  608. }
  609. .datebox p {
  610. text-align: center;
  611. line-height: .4rem;
  612. padding: 0 .05rem;
  613. cursor: pointer;
  614. font-size: .16rem;
  615. }
  616. .dateShow{
  617. color: #f76649;
  618. }
  619. </style>