threepk.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. <template>
  2. <div class="pages">
  3. <Headside></Headside>
  4. <div class="pageTitle">
  5. <em>
  6. {{ classInfo.endTime }}
  7. </em>
  8. </div>
  9. <div class="progressContainer">
  10. <div class="valueDisplay">
  11. <div class="lt">
  12. <span :style="{'left': Redflag+'%'}">
  13. <em>CK {{ redSum }}</em>
  14. </span>
  15. </div>
  16. <div class="md">
  17. <span :style="{'left': BlueFlag+'%'}">
  18. <em>CK {{ blueSum }}</em>
  19. </span>
  20. </div>
  21. <div class="rt">
  22. <span :style="{'left': yellowFlag+'%'}">
  23. <em>CK {{ yellowSum }}</em>
  24. </span>
  25. </div>
  26. </div>
  27. <div class="lineContianer">
  28. <div class="vsContainer">
  29. <img class="leftVs" src="../assets/imgs/pk/vs.png" alt="">
  30. <img class="rightVs" src="../assets/imgs/pk/vs.png" alt="">
  31. </div>
  32. <div class="lt">
  33. <span :style="{'width':RedProgress+'%'}">
  34. </span>
  35. <em>红队{{ redPeron }}人</em>
  36. </div>
  37. <div class="md">
  38. <span :style="{'width':BlueProgress+'%'}"></span>
  39. <em>蓝队{{ bluePerson }}人</em>
  40. </div>
  41. <div class="rt">
  42. <span :style="{'width':yellowProgress+'%'}">
  43. </span>
  44. <em>黄队{{ yellowPerson }}人</em>
  45. </div>
  46. </div>
  47. </div>
  48. <div class="userPart">
  49. <div class="lt">
  50. <threestudent :students="students.redUnite"></threestudent>
  51. <div class="bottomLine redBottom"></div>
  52. </div>
  53. <div class="md">
  54. <threestudent :students="students.blueUnite"></threestudent>
  55. <div class="bottomLine blueBottom"></div>
  56. </div>
  57. <div class="rt">
  58. <threestudent :students="students.yellowUnite"></threestudent>
  59. <div class="bottomLine yellowBottom"></div>
  60. </div>
  61. </div>
  62. <!-- <div class="icons">
  63. <img src="../assets/imgs/pk/icons2.svg" alt="">
  64. </div> -->
  65. <!-- 突破纪录-->
  66. <newRecord :toper-info="toperInfo"></newRecord>
  67. <!-- 欢迎新同学-->
  68. <newStudent :student-info="studentInfo"></newStudent>
  69. </div>
  70. </template>
  71. <script>
  72. import '../libs/rem';
  73. import Headside from '@/components/Headside'
  74. import newRecord from '@/components/newRecord'
  75. import newStudent from '@/components/newStudent'
  76. import threestudent from '@/components/threestudent'
  77. import
  78. {
  79. getHello,
  80. getClassStat,
  81. getRecordBreak,
  82. getNewUser
  83. } from '@/api/getApiRes'
  84. import '../Global'
  85. let qs = require('qs');
  86. export default {
  87. data() {
  88. return {
  89. ClassOn: 1,
  90. trueDate: true,//真实数据 true false
  91. studentsClassName: [
  92. {name: 'max'}
  93. ],
  94. students: {
  95. redUnite: [],
  96. blueUnite: [],
  97. yellowUnite: [],
  98. },
  99. thisClassName: '',
  100. redSum: 0,
  101. blueSum: 0,
  102. yellowSum: 0,
  103. redPeron: 0,
  104. bluePerson: 0,
  105. yellowPerson: 0,
  106. pkVal: '50%',
  107. RedstudentsClassName: [
  108. {name: 'max'}
  109. ],
  110. BluestudentsClassName: [
  111. {name: 'max'}
  112. ],
  113. PlanName: '',
  114. num: 0,
  115. Teacher: '',
  116. classInfo: {
  117. name: '竞技课程',
  118. num: '0',
  119. btTime: '2020-11-13 09:00:00',//时间戳
  120. endTime: '00:00:00',
  121. redSum: 0,
  122. blueSum: 0,
  123. },
  124. // totalTime: 30,
  125. // studentTime: 15,
  126. toperInfo: {
  127. dialogVisible: false,
  128. toper: {},
  129. totalTime: 30,
  130. },
  131. studentInfo: {
  132. dialogVisible: false,
  133. Rs: [],
  134. percent: 0,
  135. studentTime: 15
  136. },
  137. Redflag: 0,
  138. BlueFlag: 0,
  139. yellowFlag: 0,
  140. RedProgress: 28,
  141. BlueProgress: 28,
  142. yellowProgress: 28,
  143. }
  144. },
  145. mounted() {
  146. this.init();
  147. },
  148. watch: {
  149. '$route': function (val) {
  150. let that = this;
  151. if (val.path == '/threepk') {
  152. this.init();
  153. } else {
  154. clearInterval(this.PkTimer);
  155. // clearInterval(this.PkEgg);
  156. clearInterval(this.timer2);
  157. clearInterval(this.timer3);
  158. this.PkTimer = null;
  159. // this.PkEgg = null;
  160. this.timer2 = null;
  161. this.timer3 = null;
  162. }
  163. }
  164. },
  165. beforeDestroy() {
  166. clearInterval(this.PkTimer);
  167. // clearInterval(this.PkEgg);
  168. clearInterval(this.timer2);
  169. clearInterval(this.timer3);
  170. this.PkTimer = null;
  171. // this.PkEgg = null;
  172. this.timer2 = null;
  173. this.timer3 = null;
  174. },
  175. methods: {
  176. init() {
  177. this.GetgetUserList();
  178. this.createEgg();
  179. this.createNewStudent();
  180. this.PkTimer = setInterval(() => {
  181. this.GetgetUserList();
  182. this.ClacClassTime();
  183. this.curgetClassStat();
  184. }, 1000);
  185. this.timer2 = setInterval(() => {
  186. this.createEgg();
  187. }, 25000);
  188. this.timer3 = setInterval(() => {
  189. this.createNewStudent();
  190. }, 20000);
  191. },
  192. // 启动一个成就彩蛋
  193. createEgg() {
  194. let that = this;
  195. let param = {
  196. token: localStorage.token,
  197. eqSn: localStorage.eqSn
  198. };
  199. let postdata = qs.stringify(param);
  200. getRecordBreak(postdata).then(res => {
  201. let json = res;
  202. if (json.Code == 0) {
  203. console.log('破纪录了');
  204. that.OpenEgg(json.Rs);
  205. } else {
  206. // 并没有人破记录
  207. if (json.Code == 999) return false;
  208. if (json.Code != 999) that.$message.error(json.Memo + '[ 错误码]' + json.Code);
  209. }
  210. })
  211. },
  212. // 欢迎新同学
  213. createNewStudent() {
  214. let that = this;
  215. let param = {
  216. token: localStorage.token,
  217. eqSn: localStorage.eqSn
  218. };
  219. let postdata = qs.stringify(param);
  220. getNewUser(postdata).then(res => {
  221. let json = res;
  222. if (json.Code == 0) {
  223. console.log('来新生了');
  224. that.OpenStudent(json.Rs);
  225. } else {
  226. // 并没有人破记录
  227. if (json.Code == 999) return false;
  228. if (json.Code != 999) that.$message.error(json.Memo + '[ 错误码]' + json.Code);
  229. }
  230. })
  231. },
  232. OpenEgg(msg, reshowNum=0) {
  233. let that = this;
  234. if (that.ClassOn == 0) {
  235. console.log('[破纪录] 已下课,取消弹窗 reshowNum: ' + reshowNum);
  236. return false;
  237. }
  238. if (that.studentInfo.dialogVisible == true || that.toperInfo.dialogVisible == true) {
  239. console.log('[破纪录] 弹出窗口尚未关闭,5秒后重试');
  240. setTimeout(() => {
  241. reshowNum++;
  242. that.OpenEgg(msg, reshowNum);
  243. }, 5000);
  244. return false;
  245. }
  246. if (reshowNum > 0) {
  247. console.log('[破纪录] reshowNum: ' + reshowNum);
  248. }
  249. that.toperInfo.toper = msg;
  250. that.toperInfo.dialogVisible = true;
  251. // 倒计时20秒自动关闭
  252. that.toperInfo.totalTime = 20;
  253. let clock = window.setInterval(() => {
  254. that.toperInfo.totalTime--;
  255. if (parseInt(that.toperInfo.totalTime) <= 0) {
  256. that.toperInfo.dialogVisible = false;// 关闭 自动关闭彩蛋
  257. clearInterval(clock);
  258. }
  259. }, 1000)
  260. },
  261. OpenStudent(msg, reshowNum=0) {
  262. let that = this;
  263. if (that.ClassOn == 0) {
  264. console.log('[欢迎新同学] 已下课,取消弹窗 reshowNum: ' + reshowNum);
  265. return false;
  266. }
  267. if (that.studentInfo.dialogVisible == true || that.toperInfo.dialogVisible == true) {
  268. console.log('[欢迎新同学] 弹出窗口尚未关闭,5秒后重试');
  269. setTimeout(() => {
  270. reshowNum++;
  271. that.OpenStudent(msg, reshowNum);
  272. }, 5000);
  273. return false;
  274. }
  275. if (reshowNum > 0) {
  276. console.log('[欢迎新同学] reshowNum: ' + reshowNum);
  277. }
  278. that.studentInfo.Rs = msg;
  279. that.studentInfo.dialogVisible = true;
  280. // 倒计时15秒自动关闭
  281. that.studentInfo.studentTime = 15;
  282. let clock = window.setInterval(() => {
  283. that.studentInfo.studentTime--;
  284. if (parseInt(that.studentInfo.studentTime) <= 0) {
  285. that.studentInfo.dialogVisible = false; //关闭 自动关闭
  286. clearInterval(clock);
  287. }
  288. }, 1000)
  289. },
  290. // 载入课程信息
  291. ReadLessonInfo(Dp) {
  292. this.PlanName = Dp.PlanName;
  293. this.BeginTime = Dp.BeginTime;
  294. this.Teacher = Dp.Teacher;
  295. },
  296. // 分队展示
  297. UniteBreak(Rs) {
  298. let that = this;
  299. that.students.redUnite = [];
  300. that.students.blueUnite = [];
  301. that.students.yellowUnite = [];
  302. if (!Rs) {
  303. that.students.redUnite = [];
  304. that.students.blueUnite = [];
  305. that.students.yellowUnite = [];
  306. } else {
  307. Rs.map(function (item, t) {
  308. item.sportLevel = sportLevel(item.ActivePercent);
  309. if (item.GroupNo == 1) {
  310. that.students.redUnite.push(item);
  311. }
  312. if (item.GroupNo == 2) {
  313. that.students.blueUnite.push(item);
  314. }
  315. if (item.GroupNo == 3) {
  316. that.students.yellowUnite.push(item);
  317. }
  318. })
  319. }
  320. that.giveClassName(that.students.redUnite, 1);
  321. that.giveClassName(that.students.blueUnite, 2);
  322. that.giveClassName(that.students.yellowUnite, 3);
  323. that.calcSumCK(that.students);
  324. },
  325. // 计算各队总分
  326. calcSumCK(Rs) {
  327. let that = this;
  328. let redSum = 0;
  329. let blueSum = 0;
  330. let yellowSum = 0;
  331. // that.redSum
  332. Rs.redUnite.map(function (item, t) {
  333. redSum += parseFloat(item.Ck.toFixed(1));
  334. });
  335. Rs.blueUnite.map(function (item, t) {
  336. blueSum += parseFloat(item.Ck.toFixed(1));
  337. });
  338. Rs.yellowUnite.map(function (item, t) {
  339. yellowSum += parseFloat(item.Ck.toFixed(1));
  340. });
  341. that.redSum = redSum.toFixed(1);
  342. that.blueSum = blueSum.toFixed(1);
  343. that.yellowSum = yellowSum.toFixed(1);
  344. // 进度条 FormatCk
  345. let redFmtSum = 0;
  346. let blueFmtSum = 0;
  347. let yellowFmtSum = 0;
  348. let pkval = 0;
  349. Rs.redUnite.map(function (item, t) {
  350. // redFmtSum += parseFloat(item.FormatCk);
  351. redFmtSum += parseFloat(item.Ck);
  352. });
  353. Rs.blueUnite.map(function (item, t) {
  354. // blueFmtSum += parseFloat(item.FormatCk);
  355. blueFmtSum += parseFloat(item.Ck);
  356. });
  357. Rs.yellowUnite.map(function (item, t) {
  358. // yellowFmtSum += parseFloat(item.FormatCk);
  359. yellowFmtSum += parseFloat(item.Ck);
  360. });
  361. let sumMax = 0;
  362. let maxLength = Rs.redUnite.length;
  363. if (maxLength < Rs.blueUnite.length) {
  364. maxLength = Rs.blueUnite.length;
  365. }
  366. if (maxLength < Rs.yellowUnite.length) {
  367. maxLength = Rs.yellowUnite.length;
  368. }
  369. sumMax = maxLength * 20;
  370. // 当为0时均分
  371. if (redFmtSum == 0) {
  372. that.Redflag = 0;
  373. that.RedProgress = 28;
  374. } else {
  375. // 限制最大
  376. let redPercent = parseInt((redFmtSum / sumMax) * 100);
  377. redPercent = redPercent > 100 ? 100 : redPercent;
  378. that.Redflag = redPercent * 0.71;
  379. that.RedProgress = that.Redflag + 28
  380. if (that.RedProgress > 100) {
  381. that.RedProgress = 100
  382. }
  383. // that.Redflag = 72;
  384. // that.RedProgress = 100;
  385. // console.log("redFmtSum:" + redFmtSum);
  386. // console.log("RedProgress:" + that.RedProgress);
  387. }
  388. if (blueFmtSum == 0) {
  389. that.BlueFlag = 0;
  390. that.BlueProgress = 28;
  391. } else {
  392. // 限制最大
  393. let bluePercent = parseInt((blueFmtSum / sumMax) * 100);
  394. bluePercent = bluePercent > 100 ? 100 : bluePercent;
  395. that.BlueFlag = bluePercent * 0.71;
  396. that.BlueProgress = that.BlueFlag + 28
  397. if (that.BlueProgress > 100) {
  398. that.BlueProgress = 100
  399. }
  400. // that.BlueFlag = 72;
  401. // that.BlueProgress = 100;
  402. // console.log("blueFmtSum:" + blueFmtSum);
  403. // console.log("BlueProgress:" + that.BlueProgress);
  404. }
  405. if (yellowFmtSum == 0) {
  406. that.yellowFlag = 0;
  407. that.yellowProgress = 28;
  408. } else {
  409. // 限制最大
  410. let yellowPercent = parseInt((yellowFmtSum / sumMax) * 100);
  411. yellowPercent = yellowPercent > 100 ? 100 : yellowPercent;
  412. that.yellowFlag = yellowPercent * 0.725;
  413. that.yellowProgress = that.yellowFlag + 28
  414. if (that.yellowProgress > 100) {
  415. that.yellowProgress = 100
  416. }
  417. // that.yellowFlag = 72;
  418. // that.yellowProgress = 100;
  419. // console.log("yellowFmtSum:" + yellowFmtSum);
  420. // console.log("yellowProgress:" + that.yellowProgress);
  421. }
  422. },
  423. // 获取上课学生信息
  424. GetgetUserList() {
  425. let that = this;
  426. let param = {
  427. token: localStorage.token,
  428. eqSn: localStorage.eqSn
  429. };
  430. let postdata = qs.stringify(param);
  431. getHello(postdata).then(res => {
  432. let json = res;
  433. if (json.Code == 0) {
  434. if (!json.Dp) {
  435. // that.$message.error('没有获取到课程信息');
  436. return false
  437. } else {
  438. that.ReadLessonInfo(json.Dp);
  439. }
  440. // 学生分队展示
  441. that.UniteBreak(json.Rs);
  442. // 人口总数
  443. that.num = json.Rs.length ? json.Rs.length : 0;
  444. this.ClacClassTime();
  445. } else {
  446. // 已下课
  447. // console.log("[getHello] 已下课 " + json.Code);
  448. if (json.Code == '999') {
  449. // that.$router.push({path: '/2pkRank'});
  450. } else {
  451. // 已出错
  452. that.$message.error(json.Memo);
  453. }
  454. }
  455. })
  456. },
  457. giveClassName(res, type) {
  458. let that = this;
  459. if (type == 1) {
  460. that.redPeron = parseInt(res.length);
  461. } else if (type == 2) {
  462. that.bluePerson = parseInt(res.length)
  463. } else if (type == 3) {
  464. that.yellowPerson = parseInt(res.length)
  465. }
  466. },
  467. // 计算团队竞技课持续时间
  468. ClacClassTime() {
  469. let BeginTime = new Date(globalcurrent() + ' ' + this.BeginTime);//结束时间
  470. let nowDate = new Date();
  471. let date = new Date(nowDate - BeginTime - 8 * 60 * 60 * 1000);//减掉东八区时区问题
  472. let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
  473. let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
  474. let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
  475. this.classInfo.endTime = h + m + s;
  476. },
  477. // 当前课程状态
  478. curgetClassStat() {
  479. let that = this;
  480. let param = {
  481. token: localStorage.token,
  482. eqSn: localStorage.eqSn
  483. };
  484. let postdata = qs.stringify(param);
  485. getClassStat(postdata).then(res => {
  486. let json = res;
  487. if (json.Code == 0) {
  488. that.$store.commit('setClassOn', json.ClassOn);
  489. // 没开课
  490. if (json.ClassOn == 0) {
  491. that.ClassOn = 0;
  492. if (that.studentInfo.dialogVisible == true || that.toperInfo.dialogVisible == true) {
  493. console.log('[getClassStat] 下课了,等待弹出窗口关闭');
  494. return false
  495. }
  496. console.log("下课了");
  497. // 0: 下课 团课/私教 排名
  498. // 1:团课/私教 todo
  499. // 2:竞技课2PK
  500. // 3:竞技课3PK
  501. that.$router.push({path: '/3pkRank'});
  502. // switch (parseInt(json.dp)) {
  503. // case 3:
  504. // that.$router.push({path: '/3pkRank'});
  505. // break;
  506. // }
  507. }
  508. } else {
  509. // that.$message.error(json.Memo);
  510. }
  511. })
  512. },
  513. },
  514. filters: {
  515. fmtNum(val) {
  516. if (val == 0) {
  517. return '--'
  518. } else {
  519. if (parseInt(val) < 0) return 0;
  520. if (parseInt(val) > 0) return val
  521. }
  522. },
  523. fmtFloat(val) {
  524. if (val == 0) {
  525. return '0.0'
  526. } else {
  527. return parseFloat(val).toFixed(1);
  528. }
  529. },
  530. fmtInt(val) {
  531. if (val == 0) {
  532. return '0'
  533. } else {
  534. return parseInt(val);
  535. }
  536. },
  537. max100(val) {
  538. if (val <= 100) {
  539. return val
  540. } else {
  541. return 100
  542. }
  543. }
  544. },
  545. components: {
  546. Headside, newRecord, newStudent, threestudent
  547. }
  548. }
  549. </script>
  550. <style lang="scss" scoped>
  551. @mixin cube {
  552. width: 100%;
  553. overflow: hidden;
  554. display: block;
  555. margin: 0 auto;
  556. }
  557. @mixin bg {
  558. height: auto;
  559. min-height: 100%;
  560. background-color: #333;
  561. background-repeat: no-repeat;
  562. background-position: top center;
  563. background-size: 100% 100%;
  564. }
  565. .pages {
  566. background: url("../assets/imgs/three/threeBg.png");
  567. @include bg;
  568. .pageTitle {
  569. background: url("../assets/imgs/pk/pageTitle.svg");
  570. background-repeat: no-repeat;
  571. background-position: top center;
  572. background-size: 100% 100%;
  573. @include cube;
  574. width: 98%;
  575. height: 0.65rem;
  576. overflow: visible;
  577. margin-top: -0.36rem;
  578. margin-right: 2.8rem;
  579. em {
  580. position: relative;
  581. top: 0.11rem;
  582. right: 6.3rem;
  583. float: right;
  584. color: white;
  585. font-size: 0.3rem;
  586. font-style: normal;
  587. }
  588. }
  589. .progressContainer {
  590. .valueDisplay {
  591. @include cube;
  592. width: 98%;
  593. overflow: visible;
  594. margin-top: -0.03rem;
  595. .lt {
  596. width: 33.33%;
  597. float: left;
  598. span {
  599. background: url("../assets/imgs/three/redFlag.png");
  600. background-repeat: no-repeat;
  601. background-position: top center;
  602. background-size: 100%;
  603. }
  604. }
  605. .md {
  606. width: 33.33% !important;
  607. float: left;
  608. span {
  609. background: url("../assets/imgs/three/blueFlag.png");
  610. background-repeat: no-repeat;
  611. background-position: top center;
  612. background-size: 100%;
  613. }
  614. }
  615. .rt {
  616. width: 33.33%;
  617. float: left;
  618. span {
  619. background: url("../assets/imgs/three/yellowFlag.png");
  620. background-repeat: no-repeat;
  621. background-position: top center;
  622. background-size: 100%;
  623. }
  624. }
  625. span {
  626. position: relative;
  627. top: 0.1rem;
  628. width: 1.9rem;
  629. height: 0.9rem;
  630. float: left;
  631. em {
  632. @include cube;
  633. font-size: 0.3rem;
  634. color: white;
  635. text-align: center;
  636. font-style: normal;
  637. line-height: 0.6rem;
  638. }
  639. }
  640. }
  641. }
  642. }
  643. .lineContianer {
  644. position: relative;
  645. @include cube;
  646. width: 98%;
  647. z-index: 222;
  648. overflow: visible;
  649. .vsContainer {
  650. position: absolute;
  651. width: 100%;
  652. z-index: 1;
  653. img {
  654. position: relative;
  655. float: left;
  656. width: 1.2rem;
  657. left: 5.87rem;
  658. margin-top: 0.72rem;
  659. &.rightVs {
  660. float: left;
  661. left: 11.33rem;
  662. }
  663. }
  664. }
  665. .lt {
  666. width: 33.33%;
  667. float: left;
  668. background: url("../assets/imgs/three/bar_bg.png");
  669. background-repeat: no-repeat;
  670. background-position: top right;
  671. background-size: 100% 100%;
  672. span {
  673. width: 4rem;
  674. float: left;
  675. // border-radius: 3px;
  676. background: linear-gradient(to left, #d11122 0%, rgba(209, 17, 34, 0.23) 100%);
  677. margin-bottom: 0.03rem;
  678. }
  679. em {
  680. position: absolute;
  681. float: left;
  682. left: 1%;
  683. margin-top: 0.05rem;
  684. width: 1.6rem;
  685. color: white;
  686. text-align: right;
  687. font-size: 0.3rem;
  688. font-style: normal;
  689. }
  690. }
  691. .md {
  692. width: 33.33%;
  693. float: left;
  694. overflow: visible;
  695. background: url("../assets/imgs/three/bar_bg.png");
  696. background-repeat: no-repeat;
  697. background-position: top right;
  698. background-size: 100% 100%;
  699. span {
  700. position: relative;
  701. width: 4rem;
  702. float: left;
  703. background: linear-gradient(to left, #4cbbfc 0%, rgba(0, 125, 198, 0.17) 100%);
  704. margin-bottom: 0.03rem;
  705. }
  706. em {
  707. position: absolute;
  708. float: left;
  709. left: 35%;
  710. margin-top: 0.05rem;
  711. width: 1.6rem;
  712. color: white;
  713. text-align: right;
  714. font-size: 0.3rem;
  715. font-style: normal;
  716. }
  717. }
  718. .rt {
  719. width: 33.33%;
  720. float: right;
  721. background: url("../assets/imgs/three/bar_bg.png");
  722. background-repeat: no-repeat;
  723. background-position: top right;
  724. background-size: 100% 100%;
  725. span {
  726. width: 4rem;
  727. float: left;
  728. // border-radius: 3px;
  729. background: linear-gradient(to left, #fccd4c 0%, rgba(255, 228, 15, 0.26) 100%);
  730. margin-bottom: 0.03rem;
  731. }
  732. em {
  733. position: absolute;
  734. float: left;
  735. left: 69%;
  736. margin-top: 0.05rem;
  737. width: 1.6rem;
  738. color: white;
  739. text-align: right;
  740. font-size: 0.3rem;
  741. font-style: normal;
  742. }
  743. }
  744. span {
  745. height: 0.5rem;
  746. }
  747. }
  748. .userPart {
  749. @include cube;
  750. width: 98%;
  751. position: relative;
  752. padding-top: 0.3rem;
  753. padding-bottom: 0.16rem;
  754. height: 8.2rem;
  755. .lt {
  756. @include cube;
  757. position: relative;
  758. width: 32.5%;
  759. height: 100%;
  760. float: left;
  761. .bottomLine {
  762. position: absolute;
  763. bottom: 0;
  764. @include cube;
  765. height: 0.85rem;
  766. border-radius: 18px;
  767. opacity: 0.8;
  768. background: linear-gradient(rgba(0, 0, 0, 0) 0%, rgba(209, 17, 34, 0.62) 100%);
  769. }
  770. }
  771. .md {
  772. @include cube;
  773. position: relative;
  774. width: 32.5%;
  775. height: 100%;
  776. float: left;
  777. margin-left: 0.26rem;
  778. .bottomLine {
  779. position: absolute;
  780. bottom: 0;
  781. @include cube;
  782. height: 0.85rem;
  783. border-radius: 18px;
  784. opacity: 0.8;
  785. background: linear-gradient(rgba(0, 0, 0, 0) 0%, rgba(0, 134, 232, 0.62) 100%);
  786. }
  787. }
  788. .rt {
  789. @include cube;
  790. position: relative;
  791. width: 32.5%;
  792. height: 100%;
  793. float: right;
  794. margin-left: 0.02rem;
  795. .bottomLine {
  796. position: absolute;
  797. bottom: 0;
  798. @include cube;
  799. height: 0.85rem;
  800. border-radius: 18px;
  801. opacity: 0.8;
  802. background: linear-gradient(rgba(0, 0, 0, 0) 0%, rgba(216, 191, 0, 0.9) 100%);
  803. }
  804. }
  805. }
  806. .icons {
  807. @include cube;
  808. position: absolute;
  809. bottom: 0.2rem;
  810. img {
  811. @include cube;
  812. // width: 40%;
  813. width: 18%;
  814. }
  815. }
  816. // /*响应式调整*/
  817. // @media(min-width: 320px) and (max-width: 1025px) {
  818. // .progressContainer {
  819. // margin-top: 0rem;
  820. // }
  821. // .userPart {
  822. // // height: 10rem;
  823. // overflow-y: scroll;
  824. // }
  825. // }
  826. </style>