c7ebe74f9454e7cf4530781ff9ea09b40f9ff23b.svn-base 21 KB

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