rankOverview.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. <!--
  2. [报名] 样式3 - 排名总览
  3. http://localhost:5173/card/#/pages/bm/style3/rankOverview
  4. https://oss-mbh5.colormaprun.com/card/#/pages/bm/style3/rankOverview
  5. -->
  6. <template>
  7. <view class="body">
  8. <view class="content uni-column">
  9. <view class="uni-column" :class="cssTop">
  10. <my-topbar :mcName="mcName" :class="cssTopbarColor"
  11. @btnBackClick="btnBack" @btnInfoClick="btnInfo"></my-topbar>
  12. </view>
  13. <view class="mid uni-column">
  14. <view class="mid-1 uni-row uni-jcsb">
  15. <text class="mid-1-name">{{nickName}}</text>
  16. <text>总场次:{{totalNum}}</text>
  17. </view>
  18. <view class="mid-2 uni-row uni-jcsa">
  19. <view class="uni-column">
  20. <text class="mid-2-value" style="color: #ff0045;">{{totalSysPoint}}</text>
  21. <text class="mid-2-text">百味豆(个)</text>
  22. </view>
  23. <view class="mid-line"></view>
  24. <view class="uni-column">
  25. <text class="mid-2-value">{{fmtDistanct(totalDistanct)}}</text>
  26. <text class="mid-2-text">总里程km</text>
  27. </view>
  28. <view class="mid-line"></view>
  29. <view class="uni-column">
  30. <text class="mid-2-value">{{totalCp}}</text>
  31. <text class="mid-2-text">打点数(个)</text>
  32. </view>
  33. <view class="mid-line"></view>
  34. <view class="uni-column">
  35. <text class="mid-2-value">{{fmtPace(fastPace)}}</text>
  36. <text class="mid-2-text">最快配速</text>
  37. </view>
  38. </view>
  39. </view>
  40. <view class="main uni-column">
  41. <text class="main-title">选择比赛路线</text>
  42. <my-pathList :style="pathListStyle.style" :pathList="pathList" :mcState="mcState" :showLine="pathListStyle.showLine"></my-pathList>
  43. </view>
  44. <my-popup ref="mypopup" :dataList="popupDataList" :acttime="acttime"></my-popup>
  45. <!-- <my-popup-map ref="mypopupmap" :point="navPoint"></my-popup-map> -->
  46. </view>
  47. </view>
  48. </template>
  49. <script>
  50. import tools from '/common/tools';
  51. import {
  52. defaultPopUpDataList
  53. } from '/common/define';
  54. import {
  55. token,
  56. apiMatchRsDetailQuery,
  57. apiCardConfigQuery,
  58. checkResCode
  59. } from '/common/api';
  60. export default {
  61. data() {
  62. return {
  63. // audioSrc: "/static/audio/2.mp3",
  64. // audioSrc: "https://oss-mbh5.colormaprun.com/card/static/audio/2.mp3",
  65. // audioSrc: "http://t-oss-mbh5.colormaprun.com/card/static/audio/2.mp3",
  66. pageName: "rankOverview",
  67. firstEnterKey: 'firstEnter-bm-style3',
  68. rankKey: "rank-bm-style3",
  69. queryObj: {},
  70. queryString: "",
  71. token: "",
  72. ecId: 0, // 卡片id
  73. mcId: 0, // 赛事id
  74. mcType: 0, // 赛事类型 1 普通活动 2 线下赛 3 线上赛
  75. mcName: "", // 赛事名称
  76. acttime: "", // 活动时间
  77. beginSecond: null, // 活动或赛事开始时间戳,单位秒
  78. endSecond: null, // 活动或赛事结束时间戳,单位秒
  79. nickName: "", // 昵称
  80. totalNum: null, // 总场次
  81. totalDistanct: null, // 总距离,单位米
  82. totalDistanctRankNum: null, // 总距离排名
  83. totalCp: null, // 总打点数
  84. totalCpRankNum: null, // 总打点数排名
  85. totalSysPoint: null, // 总百味豆
  86. totalSysPointRankNum: null, // 总百味豆排名
  87. fastPace: null, // 个人最快配速
  88. fastPaceRankNum: null, // 个人最快配速排名
  89. ocaRs: [], // 卡片对应活动集合
  90. interval: null,
  91. mcState: 0, // 赛事/活动状态 0: 未开始 1: 进行中 2: 已结束
  92. cssTop: "",
  93. cssTopbarColor: "",
  94. pathList: {},
  95. pathListStyle: {},
  96. popupDataList: [],
  97. navPoint: {},
  98. }
  99. },
  100. computed: {
  101. pathListLen() {
  102. return Object.keys(this.pathList).length;
  103. }
  104. },
  105. onLoad(query) { // 类型非必填,可自动推导
  106. // console.log("query:", query);
  107. this.queryObj = query;
  108. this.queryString = tools.objectToQueryString(this.queryObj);
  109. // console.log(queryString);
  110. this.token = query["token"] ?? token;
  111. this.ecId = query["id"] ?? 0;
  112. this.firstEnterKey += "-" + this.ecId;
  113. console.log("firstEnterKey:", this.firstEnterKey);
  114. this.rankKey += "-" + this.ecId;
  115. console.log("rankKey:", this.rankKey);
  116. tools.removeCssCode();
  117. this.getCardConfigQuery();
  118. },
  119. // 页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用
  120. onReady() {
  121. // this.dealFirstEnter();
  122. // this.playMusic();
  123. },
  124. onShow() {
  125. // uni.showToast({
  126. // icon: "none",
  127. // title: "[rankOverview] onShow"
  128. // })
  129. // if (this.$audio.audioStatus == 2 && this.$audio.audioSrc == this.audioSrc) {
  130. // this.$audio.play();
  131. // }
  132. },
  133. onUnload() {
  134. this.clear();
  135. },
  136. methods: {
  137. playMusic() {
  138. return;
  139. // uni.showToast({
  140. // title: 'playMusic',
  141. // icon: 'none',
  142. // duration: 2000
  143. // });
  144. // if (this.$audio.audioStatus == 0 || this.$audio.audioSrc != this.audioSrc) {
  145. // this.$audio.playAudio(this.audioSrc);
  146. // }
  147. },
  148. dealNotice(rank) {
  149. // console.log('[dealFirstEnter]');
  150. let that = this;
  151. uni.getStorage({
  152. key: that.rankKey,
  153. success: (res) => {
  154. console.log('[getStorage]', that.rankKey, res.data);
  155. const oldRank = res.data;
  156. if (oldRank != rank) {
  157. // that.notice = true;
  158. that.setRankValue(rank);
  159. }
  160. },
  161. fail: (e) => {
  162. console.log('[getStorage] fail', that.rankKey, e);
  163. // that.notice = false;
  164. that.setRankValue(rank);
  165. },
  166. })
  167. },
  168. setRankValue(data) {
  169. let that = this;
  170. uni.setStorage({
  171. key: that.rankKey,
  172. data: data,
  173. success: () => {
  174. console.log('[setStorage] success', that.rankKey, data);
  175. },
  176. fail: (e) => {
  177. console.log('[setStorage] fail', that.rankKey, e);
  178. },
  179. })
  180. },
  181. dealFirstEnter() {
  182. // console.log('[dealFirstEnter]');
  183. let that = this;
  184. uni.getStorage({
  185. key: that.firstEnterKey,
  186. success: (res) => {
  187. console.log('[getStorage]', that.firstEnterKey, res.data);
  188. },
  189. fail: (e) => {
  190. console.log('[getStorage] fail', that.firstEnterKey, e);
  191. that.btnInfo();
  192. that.setFirstEnterValue(true);
  193. },
  194. })
  195. },
  196. setFirstEnterValue(data) {
  197. let that = this;
  198. uni.setStorage({
  199. key: that.firstEnterKey,
  200. data: data,
  201. success: () => {
  202. console.log('[setStorage] success', that.firstEnterKey, data);
  203. },
  204. fail: (e) => {
  205. console.log('[setStorage] fail', that.firstEnterKey, e);
  206. },
  207. })
  208. },
  209. clear() {
  210. if (this.interval != null) {
  211. clearInterval(this.interval);
  212. this.interval = null;
  213. }
  214. },
  215. loadConfig(config) {
  216. // console.log("config", config);
  217. // 加载CSS样式
  218. const css = config.css;
  219. if (css != undefined && css.length > 0) {
  220. tools.loadCssCode(css);
  221. if (css.indexOf(".top{") >= 0) {
  222. this.cssTop = "top";
  223. }
  224. if (css.indexOf(".topbar-color{") >= 0) {
  225. this.cssTopbarColor = "topbar-color";
  226. }
  227. }
  228. if (this.cssTop == "") {
  229. this.cssTop = "top-default";
  230. }
  231. if (this.cssTopbarColor == "") {
  232. this.cssTopbarColor = "topbar-color-default";
  233. }
  234. console.log("[loadConfig] cssTop:", this.cssTop);
  235. console.log("[loadConfig] cssTopbarColor:", this.cssTopbarColor);
  236. // 加载比赛路线数据
  237. const pathList = config.pathList;
  238. // console.log("[loadConfig] pathList:", pathList);
  239. if (pathList != undefined) {
  240. this.pathList = pathList;
  241. }
  242. // 加载比赛路线样式
  243. const pathListStyle = config.pathListStyle;
  244. // console.log("[loadConfig] pathList:", pathList);
  245. if (pathListStyle != undefined) {
  246. this.pathListStyle = pathListStyle;
  247. }
  248. // 加载弹窗数据
  249. const popupDataList = config.popupDataList;
  250. // console.log("[loadConfig] popupDataList:", popupDataList);
  251. if (popupDataList != undefined && popupDataList.length > 0) {
  252. for (var i = 0; i < popupDataList.length; i++) {
  253. // console.log("[loadConfig] popupDataList", i, popupDataList[i]);
  254. if (popupDataList[i] == 'default') {
  255. for (var j = 0; j < defaultPopUpDataList.length; j++) {
  256. this.popupDataList.push(defaultPopUpDataList[j]);
  257. }
  258. } else {
  259. this.popupDataList.push(popupDataList[i]);
  260. }
  261. }
  262. } else {
  263. this.popupDataList = defaultPopUpDataList;
  264. console.log("[loadConfig] popupDataList 加载默认列表");
  265. }
  266. // console.log("[loadConfig] popupDataList:", this.popupDataList);
  267. },
  268. // 获取倒计时
  269. getCountdown() {
  270. // console.log(this.endSecond)
  271. if (this.endSecond > 0) {
  272. const now = Date.now() / 1000;
  273. const dif = this.endSecond - now;
  274. // const dif = 3600*24 - 60;
  275. if (dif > 0) {
  276. this.countdown = '距结束 ' + tools.convertSecondsToDHM(dif);
  277. } else {
  278. this.countdown = "活动已结束";
  279. }
  280. // this.countdown = tools.convertSecondsToHMS(dif);
  281. } else {
  282. this.countdown = "距结束 --天--小时";
  283. }
  284. },
  285. // 格式化 距离
  286. fmtDistanct(val) {
  287. if (val < 1000)
  288. return Math.round(val * 10 / 1000) / 10;
  289. else
  290. return Math.round(val / 1000);
  291. },
  292. // 格式化 配速
  293. fmtPace(val) {
  294. return tools.convertSecondsToHMS(val, 2);
  295. },
  296. fmtMcTime(timestamp) {
  297. return tools.fmtMcTime(timestamp);
  298. },
  299. // 获取活动时间
  300. getActtime() {
  301. this.acttime = tools.getActtime(this.beginSecond, this.endSecond);
  302. },
  303. getCardConfigQuery() {
  304. uni.request({
  305. url: apiCardConfigQuery,
  306. header: {
  307. "Content-Type": "application/x-www-form-urlencoded",
  308. "token": this.token,
  309. },
  310. method: "POST",
  311. data: {
  312. ecId: this.ecId,
  313. pageName: this.pageName
  314. },
  315. success: (res) => {
  316. // console.log("getCardConfigQuery", res)
  317. const data = res.data.data;
  318. // console.log("configJson", data.configJson);
  319. const config = data.configJson != "" ? JSON.parse(data.configJson) : "";
  320. // console.log("configJson", data.configJson);
  321. /* const config = {
  322. "css": `
  323. .top{
  324. position: relative;
  325. z-index: 10;
  326. width: 100%;
  327. height: 270px;
  328. padding-top: 36px;
  329. justify-content: space-between;
  330. background-image: url('static/backgroud/top_bg_guoqing.png');
  331. background-repeat: no-repeat;
  332. background-position-x: center;
  333. background-position-y: -8px;
  334. background-size: 100% 100%;
  335. }
  336. .topbar-color{
  337. color: #ffffff;
  338. }
  339. `,
  340. "pathList": {
  341. "row1": [{
  342. "type": 3,
  343. "pathImg": "/static/common/领秀城A区.png",
  344. "path": {
  345. "ocaId": 1,
  346. "mcType": 3
  347. },
  348. "navImg": "/static/common/nav.png",
  349. "point": {
  350. "longitude": 117.022194,
  351. "latitude": 36.661612,
  352. "name": "领秀城A区起始点"
  353. }
  354. },
  355. {
  356. "type": 3,
  357. "pathImg": "/static/common/领秀城B区.png",
  358. "path": {
  359. "ocaId": 1,
  360. "mcType": 3
  361. },
  362. "navImg": "/static/common/nav.png",
  363. "point": {
  364. "longitude": 117.022194,
  365. "latitude": 36.661612,
  366. "name": "领秀城B区起始点"
  367. }
  368. }
  369. ],
  370. "row2": [{
  371. "type": 3,
  372. "pathImg": "/static/common/领秀城C区.png",
  373. "path": {
  374. "ocaId": 1,
  375. "mcType": 3
  376. },
  377. "navImg": "/static/common/nav.png",
  378. "point": {
  379. "longitude": 117.022194,
  380. "latitude": 36.661612,
  381. "name": "领秀城C区起始点"
  382. }
  383. },
  384. {
  385. "type": 3,
  386. "pathImg": "/static/common/领秀城D区.png",
  387. "path": {
  388. "ocaId": 1,
  389. "mcType": 3
  390. },
  391. "navImg": "/static/common/nav.png",
  392. "point": {
  393. "longitude": 117.022194,
  394. "latitude": 36.661612,
  395. "name": "领秀城D区起始点"
  396. }
  397. }
  398. ],
  399. "row3": [{
  400. "type": 3,
  401. "pathImg": "/static/common/领秀城E区.png",
  402. "path": {
  403. "ocaId": 1,
  404. "mcType": 3
  405. },
  406. "navImg": "/static/common/nav.png",
  407. "point": {
  408. "longitude": 117.022194,
  409. "latitude": 36.661612,
  410. "name": "领秀城E区起始点"
  411. }
  412. },
  413. {
  414. "type": 3,
  415. "pathImg": "/static/common/领秀城F区.png",
  416. "path": {
  417. "ocaId": 1,
  418. "mcType": 3
  419. },
  420. "navImg": "/static/common/nav.png",
  421. "point": {
  422. "longitude": 117.022194,
  423. "latitude": 36.661612,
  424. "name": "领秀城F区起始点"
  425. }
  426. }
  427. ],
  428. "row4": [{
  429. "type": 3,
  430. "pathImg": "/static/common/贵和购物中心.png",
  431. "path": {
  432. "ocaId": 1,
  433. "mcType": 3
  434. },
  435. "navImg": "/static/common/nav.png",
  436. "point": {
  437. "longitude": 117.022194,
  438. "latitude": 36.661612,
  439. "name": "贵和购物中心起始点"
  440. }
  441. },
  442. {
  443. "type": 3,
  444. "pathImg": "/static/common/中心花园.png",
  445. "path": {
  446. "ocaId": 1,
  447. "mcType": 3
  448. },
  449. "navImg": "/static/common/nav.png",
  450. "point": {
  451. "longitude": 117.022194,
  452. "latitude": 36.661612,
  453. "name": "中心花园起始点"
  454. }
  455. }
  456. ]
  457. },
  458. "pathListStyle" : {
  459. "showLine" : true,
  460. "style": "justify-content: flex-start;"
  461. },
  462. "popupDataList": [
  463. {
  464. "type": 2,
  465. "data": {
  466. "title": "基本图例",
  467. "img": "/static/common/jbtl.png"
  468. }
  469. }, {
  470. "type": 2,
  471. "data": {
  472. "title": "基本标识",
  473. "img": "/static/common/jbbs2.png"
  474. }
  475. },
  476. {
  477. "type": 7,
  478. "data": {
  479. "title": "活动规则",
  480. "content": "<li>赛期内随时参赛、不限完赛次数、起点任选、实时排名 <li>起点-各途经点-结束点完整打卡为1次有效完赛 <li>赛事如有疑问,请咨询微信客服",
  481. "imageList": [
  482. {
  483. "src": "/static/common/qrcode_wxkf.png",
  484. "width": "100px",
  485. "height": "100px"
  486. }
  487. ]
  488. }
  489. },
  490. {
  491. "type": 7,
  492. "data": {
  493. "title": "活动奖励",
  494. "content": "<li>途经点打卡1次,获1个百味豆<br><li>每次正确答题,再获1个百味豆<br><li>20个百味豆兑换1个鸡蛋<br><li>上不封顶!随时兑换!<br><text style='font-size:12px;color:#999999;'>(限本次活动百味豆,兑换以“蛋叔券”为准)</text><br><li>健身又能“薅羊毛”~",
  495. "imageList": [
  496. {
  497. "src": "/static/common/jidanquan.png",
  498. "width": "80px",
  499. "height": "80px"
  500. }
  501. ]
  502. }
  503. },
  504. {
  505. "type": 5,
  506. "data": {
  507. "title": "兑换地点",
  508. "img": "/static/common/wslgwcs.png",
  509. "point": {
  510. "longitude": 117.022194,
  511. "latitude": 36.661612,
  512. "name": "万盛隆购物超市"
  513. }
  514. }
  515. }
  516. ]
  517. }; */
  518. this.loadConfig(config);
  519. this.matchRsDetailQuery();
  520. setTimeout(this.dealFirstEnter, 500);
  521. },
  522. fail: (err) => {
  523. console.log("getCardConfigQuery err", err)
  524. },
  525. });
  526. },
  527. // 卡片对应线上赛多个活动查询
  528. matchRsDetailQuery() {
  529. uni.request({
  530. url: apiMatchRsDetailQuery,
  531. header: {
  532. "Content-Type": "application/x-www-form-urlencoded",
  533. "token": this.token,
  534. },
  535. method: "POST",
  536. data: {
  537. ecId: this.ecId
  538. },
  539. success: (res) => {
  540. console.log("matchRsDetailQuery", res);
  541. if (checkResCode(res)) {
  542. const data = res.data.data;
  543. this.mcType = data.mcType;
  544. this.mcId = data.mcId;
  545. this.mcName = data.mcName;
  546. this.beginSecond = data.beginSecond;
  547. this.endSecond = data.endSecond;
  548. this.nickName = data.nickName;
  549. this.totalNum = data.totalNum;
  550. this.totalDistanct = data.totalDistanct;
  551. this.totalDistanctRankNum = data.totalDistanctRankNum;
  552. this.totalCp = data.totalCp;
  553. this.totalCpRankNum = data.totalCpRankNum;
  554. this.totalSysPoint = data.totalSysPoint;
  555. this.totalSysPointRankNum = data.totalSysPointRankNum;
  556. this.fastPace = data.fastPace;
  557. this.fastPaceRankNum = data.fastPaceRankNum;
  558. this.ocaRs = data.ocaRs;
  559. this.mcState = tools.checkMcState(this.beginSecond, this.endSecond);
  560. const rank = JSON.stringify(data);
  561. this.dealNotice(rank);
  562. this.getCountdown();
  563. this.getActtime();
  564. this.clear();
  565. this.interval = setInterval(this.getCountdown, 60000);
  566. }
  567. },
  568. fail: (err) => {
  569. console.log("matchRsDetailQuery err", err)
  570. },
  571. });
  572. },
  573. btnBack() {
  574. // const url = `action://to_home/`;
  575. // tools.appAction(url);
  576. // uni.navigateTo({
  577. // url: "/pages/bm/style3/rankList?" + this.queryString
  578. // });
  579. const url = "/pages/bm/style3/rankList?" + this.queryString;
  580. tools.appAction(url, "uni.navigateTo");
  581. },
  582. btnInfo() {
  583. // console.log(this.$refs.mypopup);
  584. this.$refs.mypopup.popupOpen();
  585. },
  586. onOverviewClick(ovtype) {
  587. this.queryObj.ovtype = ovtype;
  588. this.queryString = tools.objectToQueryString(this.queryObj);
  589. // uni.navigateTo({
  590. // url: "/pages/bm/style3/rankList?" + this.queryString
  591. // });
  592. const url = "/pages/bm/style3/rankList?" + this.queryString;
  593. tools.appAction(url, "uni.navigateTo");
  594. },
  595. }
  596. }
  597. </script>
  598. <style scoped>
  599. .content {
  600. width: 100vw;
  601. /* height: 100vh; */
  602. overflow-x: scroll;
  603. }
  604. .top-default {
  605. position: relative;
  606. z-index: 10;
  607. width: 100%;
  608. height: 270px;
  609. padding-top: 36px;
  610. justify-content: space-between;
  611. background-image: url("/static/backgroud/top_bg_egg2.png");
  612. background-repeat: no-repeat;
  613. background-position-x: center;
  614. background-position-y: -8px;
  615. background-size: 100% 100%;
  616. /* background-size: cover; */
  617. }
  618. /* .top-oval {
  619. position: relative;
  620. z-index: 0;
  621. margin-top: -180px;
  622. margin-left: -10%;
  623. width: 120%;
  624. height: 280px;
  625. background: linear-gradient(180deg, #ffffff 12.18%, #eeeeee 100%);
  626. border-radius: 50%;
  627. text-align: center;
  628. }
  629. .top-oval-text {
  630. color: #333333;
  631. font-size: 13px;
  632. line-height: 386px;
  633. pointer-events: auto;
  634. }
  635. */
  636. .topbar-color-default {
  637. color: #333333;
  638. }
  639. .topbtm {
  640. width: 100%;
  641. /* height: 60rpx; */
  642. margin-bottom: 40px;
  643. justify-content: space-evenly;
  644. }
  645. .topbtm-name {
  646. /* width: 320rpx; */
  647. /* height: 28px; */
  648. padding: 5px 12px;
  649. background-color: #9fda39;
  650. border-radius: 5px;
  651. /* backdrop-filter: blur(30px); */
  652. text-align: center;
  653. font-weight: 500;
  654. color: #497400;
  655. font-size: 14px;
  656. }
  657. .mid {
  658. width: 90%;
  659. height: 120px;
  660. position: relative;
  661. z-index: 20;
  662. margin-top: -100px;
  663. background: #ffffff;
  664. border-radius: 9px;
  665. box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.13);
  666. font-family: Source Han Sans CN;
  667. }
  668. .mid-1 {
  669. width: 90%;
  670. margin: 12px;
  671. font-weight: 500;
  672. color: #8e8e8e;
  673. font-size: 14px;
  674. }
  675. .mid-1-name {
  676. max-width: 360rpx;
  677. white-space: nowrap;
  678. overflow: hidden;
  679. text-overflow: ellipsis;
  680. }
  681. .mid-2 {
  682. width: 92%;
  683. /* margin: 0 10px; */
  684. }
  685. .mid-2-value {
  686. font-weight: 900;
  687. font-size: 22px;
  688. }
  689. .mid-2-text {
  690. color: #989898;
  691. font-size: 12px;
  692. }
  693. .mid-line {
  694. width: 0px;
  695. height: 45.04px;
  696. border: 1px solid;
  697. border-color: #e6e6e6;
  698. }
  699. .overview-1 {
  700. width: 111px;
  701. height: 54px;
  702. background: #ffb40b;
  703. border-radius: 50%;
  704. box-shadow: 3px 3px 0px rgba(140, 140, 140, 1);
  705. pointer-events: auto;
  706. }
  707. .overview-2 {
  708. margin-top: -43px;
  709. color: #ffffff;
  710. font-size: 18px;
  711. pointer-events: auto;
  712. }
  713. .overview-3 {
  714. width: 111px;
  715. height: 54px;
  716. background: #f39509;
  717. border-radius: 50%;
  718. box-shadow: 3px 3px 0px rgba(140, 140, 140, 1);
  719. pointer-events: auto;
  720. }
  721. .overview-4 {
  722. width: 111px;
  723. height: 54px;
  724. background: #81cd00;
  725. border-radius: 50%;
  726. box-shadow: 3px 3px 0px rgba(140, 140, 140, 1);
  727. pointer-events: auto;
  728. }
  729. .overview-5 {
  730. width: 111px;
  731. height: 54px;
  732. background: #64cbb0;
  733. border-radius: 50%;
  734. box-shadow: 3px 3px 0px rgba(140, 140, 140, 1);
  735. pointer-events: auto;
  736. }
  737. .ovline1 {
  738. margin-top: 9px;
  739. color: #ffffff;
  740. font-size: 12px;
  741. }
  742. .ovline2 {
  743. color: #ffffff;
  744. font-size: 16px;
  745. }
  746. .main {
  747. width: 100%;
  748. margin-top: 20px;
  749. margin-bottom: 10px;
  750. /* height: 70vh; */
  751. justify-content: space-around;
  752. /* justify-content: space-between; */
  753. }
  754. .main-title {
  755. margin-bottom: 10px;
  756. font-weight: 550;
  757. color: #333333;
  758. font-size: 16px;
  759. }
  760. </style>