LightMatrix3.vue 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150
  1. <template>
  2. <div class="light-matrix">
  3. <div class="panel">
  4. <div class="dot left top"></div>
  5. <div class="dot left bottom"></div>
  6. <div class="dot right top"></div>
  7. <div class="dot right bottom"></div>
  8. <Row>
  9. <Col :span="3">
  10. <div class="panel-item-gf">
  11. <div class="panel-item-gf-left">
  12. <span class="svg-icon svg-icon-write svg-icon-md">
  13. <SvgIcon :svgid="panelData.first.icon"></SvgIcon>
  14. </span>
  15. </div>
  16. <div class="panel-item-gf-right">
  17. <div class="panel-item-gf-up">{{ panelData.first.text }}</div>
  18. <div class="panel-item-gf-down">{{ sourceMap[panelData.first.key] || "---" }}</div>
  19. </div>
  20. </div>
  21. </Col>
  22. <Col :span="3" v-for="(data, index) of panelData.datas" :key="index">
  23. <div class="panel-item" :class="data.color">
  24. <div class="panel-item-left">
  25. <div class="panel-item-li">
  26. <span>{{ data.name }}</span>
  27. <span class="svg-icon svg-icon-sm" :class="'svg-icon-' + data.color">
  28. <SvgIcon :svgid="data.nameIcon"></SvgIcon>
  29. </span>
  30. </div>
  31. <div class="panel-item-li">
  32. <span v-if="data.calcStr && sourceMap">{{ calcGfStr(data.calcStr) || "---" }}</span>
  33. <span v-else>{{ sourceMap[data.key] || "---" }}</span>
  34. <span class="svg-icon svg-icon-sm" :class="'svg-icon-' + data.color">
  35. <SvgIcon :svgid="data.numIcon"></SvgIcon>
  36. </span>
  37. </div>
  38. </div>
  39. <div class="panel-item-right">
  40. <div class="panel-item-ri">
  41. <span>{{ data.text1 }}</span>
  42. <span>{{ sourceMap[data.key1] || "---" }}</span>
  43. </div>
  44. <div class="panel-item-ri">
  45. <span>{{ data.text2 }}</span>
  46. <span>{{ sourceMap[data.key2] || "---" }}</span>
  47. </div>
  48. </div>
  49. </div>
  50. </Col>
  51. </Row>
  52. </div>
  53. <div class="panel-box scroll">
  54. <div v-for="(pItem, pIndex) in sourceMap.fjmap" :key="pIndex">
  55. <div class="panel-title">
  56. <div class="panel-title-name">
  57. <i class="svg-icon svg-icon-sm svg-icon-green">
  58. <SvgIcon :svgid="'svg-wind-site'"></SvgIcon>
  59. </i>
  60. <span>{{ sourceMap.fczbmap[pItem[pIndex].wpId].name }}</span>
  61. <div class="sub-title-item" v-for="(data, index) of tables[0].subTitleDatas" :key="index">
  62. <span class="sub-title">{{ data.text }}</span>
  63. <span class="sub-count" :class="data.color">{{ sourceMap.fczbmap[pItem[pIndex].wpId][data.key] }}</span>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="panel-body">
  68. <div class="card" v-for="(cItem, cIndex) in pItem" :key="cIndex" :class="cItem.color" @click="goDetails(cItem)">
  69. <div class="circle">
  70. <span class="center-icon svg-icon svg-icon-md" :class="cItem.color == 'black' ? 'svg-icon-black' : 'svg-icon-write'">
  71. <SvgIcon :svgid="mapping[cItem.color]"></SvgIcon>
  72. </span>
  73. </div>
  74. <div class="card-panel">
  75. <div class="card-left">
  76. <div class="tag">{{ cItem.wtnum }}</div>
  77. <div class="num">
  78. <i class="svg-icon svg-icon-sm" :class="'svg-icon-' + cItem.color">
  79. <SvgIcon svgid="svg-W"></SvgIcon>
  80. </i>
  81. <div>{{ cItem.gl }}</div>
  82. </div>
  83. </div>
  84. <div class="card-right">
  85. <div class="num">
  86. <i class="svg-icon svg-icon-sm" :class="'svg-icon-' + cItem.color">
  87. <!-- <SvgIcon svgid="svg-R"></SvgIcon> -->
  88. </i>
  89. <div>{{ cItem.fdl || "&nbsp;" }}</div>
  90. </div>
  91. <div class="num">
  92. <i class="svg-icon svg-icon-sm" :class="'svg-icon-' + cItem.color">
  93. <SvgIcon svgid="svg-P"></SvgIcon>
  94. </i>
  95. <div>{{ cItem.fs }}</div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <!-- 站位用 保证卡片布局最后一行不会有问题 -->
  101. <i class="blank" v-for="i in pItem.length" :key="i"></i>
  102. </div>
  103. </div>
  104. </div>
  105. </div>
  106. </template>
  107. <script>
  108. import Row from "@/components/coms/grid/row.vue";
  109. import Col from "@/components/coms/grid/col.vue";
  110. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  111. import util from "@/helper/util.js";
  112. import store from "@store/index.js";
  113. export default {
  114. // 名称
  115. name: "LightMatrix3",
  116. // 使用组件
  117. components: {
  118. Row,
  119. Col,
  120. SvgIcon,
  121. },
  122. // 数据
  123. data() {
  124. return {
  125. timmer: null, // 遮罩开关
  126. sourceMap: {}, // 核心数据
  127. mapping: {
  128. green: "svg-standby",
  129. blue: "svg-normal-power",
  130. pink: "svg-limit-power",
  131. red: "svg-gz-downtime",
  132. orange: "svg-jx-downtime",
  133. gray: "svg-offline",
  134. black: "svg-intranet-involvement",
  135. },
  136. panelData: {
  137. first: {
  138. icon: "svg-photovoltaic",
  139. text: "接入风场",
  140. key: "fcjrnum",
  141. },
  142. datas: [
  143. {
  144. color: "green",
  145. name: "待机",
  146. nameIcon: "svg-standby",
  147. calcStr: ["fcdjnum", "fcsdtjnum"],
  148. numIcon: "svg-manual",
  149. text1: "待风",
  150. key1: "fcdjnum",
  151. text2: "手动停机",
  152. key2: "fcsdtjnum",
  153. },
  154. {
  155. color: "blue",
  156. name: "运行",
  157. nameIcon: "svg-normal-power",
  158. calcStr: ["fczcfdnum", "fcqxjclnum"],
  159. numIcon: "svg-drop-output",
  160. text1: "正常发电",
  161. key1: "fczcfdnum",
  162. text2: "降出力运行",
  163. key2: "fcqxjclnum",
  164. },
  165. {
  166. color: "pink",
  167. name: "限电",
  168. nameIcon: "svg-limit-power",
  169. calcStr: ["fcxdjclnum", "fcxdtjnum"],
  170. numIcon: "svg-downtime",
  171. text1: "限电降出力",
  172. key1: "fcxdjclnum",
  173. text2: "停机",
  174. key2: "fcxdtjnum",
  175. },
  176. {
  177. color: "red",
  178. name: "故障",
  179. nameIcon: "svg-gz-downtime",
  180. calcStr: ["fcgztjnum", "fccnsltjnum"],
  181. numIcon: "svg-field-involved",
  182. text1: "故障停机",
  183. key1: "fcgztjnum",
  184. text2: "场内受累",
  185. key2: "fccnsltjnum",
  186. },
  187. {
  188. color: "orange",
  189. name: "检休",
  190. nameIcon: "svg-jx-downtime",
  191. calcStr: ["fcjcnum", "fccnsljxnum"],
  192. numIcon: "svg-field-involved",
  193. text1: "检修停机",
  194. key1: "fcjxtjnum",
  195. text2: "产内受累",
  196. key2: "fccnsljxnum",
  197. },
  198. {
  199. color: "write",
  200. name: "受累",
  201. calcStr: ["fcdwslnum", "fchjslnum"],
  202. nameIcon: "svg-intranet-involvement",
  203. numIcon: "svg-environment",
  204. text1: "电网",
  205. key1: "fcdwslnum",
  206. text2: "环境",
  207. key2: "fchjslnum",
  208. },
  209. {
  210. color: "gray",
  211. name: "离线",
  212. nameIcon: "svg-offline",
  213. key: "fclxnum",
  214. numIcon: "svg-unknown",
  215. text1: "离线",
  216. key1: "fclxnum",
  217. text2: "未知",
  218. key2: "fcwznum",
  219. },
  220. ],
  221. },
  222. tables: [
  223. {
  224. col: 15,
  225. subTitleDatas: [
  226. {
  227. text: "接入台数",
  228. color: "write",
  229. key: "jrts",
  230. },
  231. {
  232. text: "待机台数",
  233. color: "green",
  234. key: "djts",
  235. },
  236. {
  237. text: "并网台数",
  238. color: "blue",
  239. key: "yxts",
  240. },
  241. {
  242. text: "限电台数",
  243. color: "pink",
  244. key: "xdts",
  245. },
  246. {
  247. text: "故障台数",
  248. color: "red",
  249. key: "gzts",
  250. },
  251. {
  252. text: "检修台数",
  253. color: "orange",
  254. key: "whts",
  255. },
  256. {
  257. text: "受累台数",
  258. color: "write",
  259. key: "slts",
  260. },
  261. {
  262. text: "离线台数",
  263. color: "gray",
  264. key: "lxts",
  265. },
  266. {
  267. text: "风速",
  268. color: "gray",
  269. key: "ssfs",
  270. },
  271. {
  272. text: "预测功率",
  273. color: "gray",
  274. key: "ycgl",
  275. },
  276. {
  277. text: "保证功率",
  278. color: "gray",
  279. key: "bzgl",
  280. },
  281. {
  282. text: "应发功率",
  283. color: "gray",
  284. key: "yfgl",
  285. },
  286. {
  287. text: "实际功率",
  288. color: "gray",
  289. key: "sjgl",
  290. },
  291. {
  292. text: "AGC指令",
  293. color: "gray",
  294. key: "agcygsd",
  295. },
  296. {
  297. text: "出线功率",
  298. color: "gray",
  299. key: "agccxyg",
  300. },
  301. ],
  302. datas: [
  303. {
  304. tag: "A-11",
  305. num1: 1234.56,
  306. num2: 1234.56,
  307. num3: 1234.56,
  308. color: "blue",
  309. },
  310. ],
  311. },
  312. ],
  313. };
  314. },
  315. // 函数
  316. methods: {
  317. // 根据风机状态码返回对应 class
  318. getColor(fjzt) {
  319. switch (fjzt) {
  320. case 0: // 待机
  321. return "green";
  322. break;
  323. case 1: // 手动停机
  324. return "green";
  325. break;
  326. case 2: // 正常发电
  327. return "blue";
  328. break;
  329. case 3: // 缺陷降出力
  330. return "blue";
  331. break;
  332. case 4: // 限电降出力
  333. return "purple";
  334. break;
  335. case 5: // 限电停机
  336. return "purple";
  337. break;
  338. case 6: // 故障停机
  339. return "red";
  340. break;
  341. case 7: // 场内受累停机
  342. return "red";
  343. break;
  344. case 8: // 检修停机
  345. return "orange";
  346. break;
  347. case 9: // 离线
  348. return "orange";
  349. break;
  350. case 10: // 电网受累
  351. return "gray";
  352. break;
  353. case 11: // 环境受累
  354. return "gray";
  355. break;
  356. case 12: // 离线
  357. return "black";
  358. break;
  359. }
  360. },
  361. calcGfStr(calcStr) {
  362. return parseInt(this.sourceMap[calcStr[0]]) + parseInt(this.sourceMap[calcStr[1]]) + "";
  363. },
  364. // 请求服务
  365. requestData(showLoading) {
  366. let that = this;
  367. that.API.requestData({
  368. showLoading,
  369. method: "POST",
  370. subUrl: "matrix/matrixDetialPush",
  371. success(res) {
  372. if (res.data) {
  373. let sourceMap = res.data;
  374. for (let key in sourceMap) {
  375. if (key !== "fczbmap" && key !== "fjmap") {
  376. sourceMap[key] += "";
  377. } else if (key === "fjmap") {
  378. sourceMap[key].forEach((pItem) => {
  379. pItem.forEach((cItem) => {
  380. cItem.color = that.getColor(cItem.fjzt);
  381. cItem.isShow = true;
  382. });
  383. });
  384. }
  385. }
  386. that.sourceMap = sourceMap;
  387. } else {
  388. that.sourceMap = {};
  389. }
  390. },
  391. });
  392. }
  393. },
  394. created() {
  395. let that = this;
  396. that.$nextTick(() => {
  397. that.requestData(false);
  398. that.timmer = setInterval(() => {
  399. that.requestData(false);
  400. }, that.$store.state.websocketTimeSec);
  401. });
  402. },
  403. mounted() {},
  404. unmounted() {
  405. clearInterval(this.timmer);
  406. this.timmer = null;
  407. },
  408. };
  409. </script>
  410. <style lang="less" scoped>
  411. @panelHeight: 6.481vh;
  412. @titleHeight: 3.704vh;
  413. .light-matrix {
  414. width: calc(100% - 1.111vh);
  415. height: calc(100vh - 7.222vh);
  416. display: flex;
  417. flex-direction: column;
  418. .panel {
  419. width: 100%;
  420. border: 0.093vh solid @darkgray;
  421. position: relative;
  422. padding: 1.111vh 2.222vh;
  423. background-color: fade(@darkgray, 20%);
  424. .dot {
  425. width: 0.185vh;
  426. height: 0.185vh;
  427. border-radius: 50%;
  428. background-color: @write;
  429. position: absolute;
  430. &.left {
  431. left: 0.37vh;
  432. }
  433. &.right {
  434. right: 0.37vh;
  435. }
  436. &.top {
  437. top: 0.37vh;
  438. }
  439. &.bottom {
  440. bottom: 0.37vh;
  441. }
  442. }
  443. .panel-item-gf {
  444. width: 100%;
  445. background-color: fade(@darkgray, 20%);
  446. display: flex;
  447. height: @panelHeight;
  448. .panel-item-gf-left {
  449. width: @panelHeight;
  450. height: @panelHeight;
  451. background-color: fade(@darkgray, 40%);
  452. display: flex;
  453. align-items: center;
  454. justify-content: center;
  455. i {
  456. font-size: 2.778vh;
  457. color: @write;
  458. }
  459. }
  460. .panel-item-gf-right {
  461. flex-grow: 1;
  462. color: @write;
  463. text-align: right;
  464. .panel-item-gf-up {
  465. height: @panelHeight / 2;
  466. border-bottom: 0.093vh solid fade(@darkgray, 40%);
  467. line-height: @panelHeight / 2;
  468. padding-right: 1.111vh;
  469. font-size: @fontsize;
  470. }
  471. .panel-item-gf-down {
  472. height: @panelHeight / 2;
  473. line-height: @panelHeight / 2;
  474. padding-right: 1.111vh;
  475. font-weight: 600;
  476. font-size: @fontsize;
  477. }
  478. }
  479. }
  480. .panel-item {
  481. width: 100%;
  482. height: @panelHeight;
  483. display: flex;
  484. font-size: @fontsize-s;
  485. .panel-item-left {
  486. width: @panelHeight;
  487. height: @panelHeight;
  488. .panel-item-li {
  489. width: 100%;
  490. height: @panelHeight / 2;
  491. line-height: @panelHeight / 2;
  492. padding: 0 1.111vh;
  493. display: flex;
  494. align-items: center;
  495. font-size: @fontsize-s;
  496. .svg-icon {
  497. margin-left: auto;
  498. }
  499. }
  500. }
  501. .panel-item-right {
  502. flex-grow: 1;
  503. height: @panelHeight;
  504. .panel-item-ri {
  505. height: @panelHeight / 2;
  506. line-height: @panelHeight / 2;
  507. padding: 0 1.111vh;
  508. &:first-child {
  509. border-bottom: 0.093vh solid;
  510. }
  511. span {
  512. &:first-child {
  513. float: left;
  514. }
  515. &:last-child {
  516. float: right;
  517. color: @write;
  518. }
  519. }
  520. }
  521. }
  522. &.green {
  523. background-color: fade(@green, 15%);
  524. color: @green;
  525. .panel-item-left {
  526. background-color: fade(@green, 15%);
  527. }
  528. .panel-item-right {
  529. .panel-item-ri {
  530. &:first-child {
  531. border-color: @green;
  532. }
  533. }
  534. }
  535. }
  536. &.blue {
  537. background-color: fade(@darkBlue, 15%);
  538. color: @darkBlue;
  539. .panel-item-left {
  540. background-color: fade(@darkBlue, 15%);
  541. }
  542. .panel-item-right {
  543. .panel-item-ri {
  544. &:first-child {
  545. border-color: @darkBlue;
  546. }
  547. }
  548. }
  549. }
  550. &.pink {
  551. background-color: fade(@pink, 15%);
  552. color: @pink;
  553. .panel-item-left {
  554. background-color: fade(@pink, 15%);
  555. }
  556. .panel-item-right {
  557. .panel-item-ri {
  558. &:first-child {
  559. border-color: @pink;
  560. }
  561. }
  562. }
  563. }
  564. &.red {
  565. background-color: fade(@red, 15%);
  566. color: @red;
  567. .panel-item-left {
  568. background-color: fade(@red, 15%);
  569. }
  570. .panel-item-right {
  571. .panel-item-ri {
  572. &:first-child {
  573. border-color: @red;
  574. }
  575. }
  576. }
  577. }
  578. &.orange {
  579. background-color: fade(@orange, 15%);
  580. color: @orange;
  581. .panel-item-left {
  582. background-color: fade(@orange, 15%);
  583. }
  584. .panel-item-right {
  585. .panel-item-ri {
  586. &:first-child {
  587. border-color: @orange;
  588. }
  589. }
  590. }
  591. }
  592. &.gray {
  593. background-color: fade(@darkgray, 15%);
  594. color: @gray;
  595. .panel-item-left {
  596. background-color: fade(@darkgray, 15%);
  597. }
  598. .panel-item-right {
  599. .panel-item-ri {
  600. &:first-child {
  601. border-color: @darkgray;
  602. }
  603. }
  604. }
  605. }
  606. &.write {
  607. background-color: fade(@write, 15%);
  608. color: @write;
  609. .panel-item-left {
  610. background-color: fade(@write, 15%);
  611. }
  612. .panel-item-right {
  613. .panel-item-ri {
  614. &:first-child {
  615. border-color: @write;
  616. }
  617. }
  618. }
  619. }
  620. }
  621. }
  622. .panel-box {
  623. margin-top: 1.481vh;
  624. flex-grow: 1;
  625. .panel-title {
  626. width: 100%;
  627. height: @titleHeight;
  628. line-height: @titleHeight;
  629. background-color: fade(@darkgray, 40%);
  630. .panel-title-name {
  631. font-size: @fontsize-s;
  632. color: @green;
  633. display: flex;
  634. align-items: center;
  635. padding: 0 16px;
  636. i {
  637. margin-right: 0.7407vh;
  638. }
  639. .sub-title-item {
  640. display: flex;
  641. flex: 1;
  642. .sub-title {
  643. flex: 0 0 auto;
  644. color: @gray;
  645. font-size: 12px;
  646. margin: 0 0.556vh 0 1.481vh;
  647. padding-top: 1px;
  648. }
  649. .sub-count {
  650. flex: 1 0 auto;
  651. font-size: 14px;
  652. font-family: "Bicubik";
  653. font-weight: 500;
  654. &.write {
  655. color: @write;
  656. }
  657. &.green {
  658. color: @green;
  659. }
  660. &.blue {
  661. color: @blue;
  662. }
  663. &.pink {
  664. color: @pink;
  665. }
  666. &.red {
  667. color: @red;
  668. }
  669. &.orange {
  670. color: @orange;
  671. }
  672. &.gray {
  673. color: @gray;
  674. }
  675. }
  676. }
  677. }
  678. }
  679. .panel-body {
  680. background-color: fade(@darkgray, 20%);
  681. padding: 0.741vh;
  682. margin-bottom: 1.481vh;
  683. width: 100%;
  684. display: flex;
  685. flex-direction: row;
  686. flex-wrap: wrap;
  687. justify-content: space-between;
  688. .blank {
  689. margin-right: 4px;
  690. flex: 1 0 165px;
  691. }
  692. .card {
  693. margin-right: 4px;
  694. margin-top: 4px;
  695. flex: 1 0 165px;
  696. }
  697. .card {
  698. border: 0.093vh solid;
  699. position: relative;
  700. .circle {
  701. width: 1.4815vh;
  702. position: absolute;
  703. height: 1.4815vh;
  704. border: 0.0926vh solid #ffffff;
  705. border-radius: 100%;
  706. top: calc(50% - 0.7407vh);
  707. left: calc(50% - 0.7407vh);
  708. background-color: fade(#000, 30);
  709. .center-icon {
  710. font-size: 2.222vh;
  711. position: absolute;
  712. left: calc(50% - 1.111vh);
  713. top: calc(50% - 1.111vh);
  714. }
  715. }
  716. .card-panel {
  717. display: flex;
  718. .card-left {
  719. flex: 1 0 auto;
  720. border-right: 0.093vh solid;
  721. .tag {
  722. color: @write;
  723. font-size: 14px;
  724. width: 100%;
  725. text-align: center;
  726. border-bottom: 0.093vh solid;
  727. padding: 0.7407vh 0;
  728. }
  729. .num {
  730. display: flex;
  731. align-items: center;
  732. justify-content: space-around;
  733. width: 100%;
  734. font-size: 14px;
  735. text-align: left;
  736. padding: 0.7407vh 0;
  737. div {
  738. min-width: 5.463vh;
  739. display: inline-block;
  740. margin-right: 0.3704vh;
  741. }
  742. i {
  743. margin-top: 0.2778vh;
  744. margin-left: 0.7407vh;
  745. }
  746. }
  747. }
  748. .card-right {
  749. flex: 1 0 auto;
  750. .num {
  751. display: flex;
  752. align-items: center;
  753. justify-content: space-around;
  754. width: 100%;
  755. font-size: 14px;
  756. text-align: left;
  757. padding: 0.7407vh 0;
  758. &:first-child {
  759. border-bottom: 0.093vh solid;
  760. }
  761. div {
  762. min-width: 5.463vh;
  763. display: inline-block;
  764. margin-right: 0.3704vh;
  765. }
  766. i {
  767. margin-top: 0.2778vh;
  768. margin-left: 0.7407vh;
  769. }
  770. }
  771. }
  772. }
  773. .card-percent {
  774. height: 0.926vh;
  775. padding: 0.093vh 0.185vh;
  776. position: relative;
  777. border-top: 0.093vh solid;
  778. background-color: transparent;
  779. .percent {
  780. height: 0.648vh;
  781. background-color: @green;
  782. position: absolute;
  783. left: 0.185vh;
  784. top: 0.093vh;
  785. }
  786. }
  787. &.blue {
  788. border-color: @darkBlue;
  789. background-color: fade(@darkBlue, 15%);
  790. .circle {
  791. border-color: @darkBlue;
  792. background-color: #0e062b;
  793. }
  794. .center-icon {
  795. color: @write;
  796. }
  797. .card-panel {
  798. .card-left {
  799. border-color: @darkBlue;
  800. .tag {
  801. border-color: @darkBlue;
  802. }
  803. .num {
  804. color: @darkBlue;
  805. }
  806. }
  807. .card-right {
  808. .num {
  809. color: @darkBlue;
  810. border-color: @darkBlue;
  811. }
  812. }
  813. }
  814. .card-percent {
  815. border-color: @darkBlue;
  816. }
  817. }
  818. &.pink {
  819. border-color: @pink;
  820. background-color: fade(@pink, 15%);
  821. .circle {
  822. border-color: @pink;
  823. background-color: #26062d;
  824. }
  825. .center-icon {
  826. color: @write;
  827. }
  828. .card-panel {
  829. .card-left {
  830. border-color: @pink;
  831. .tag {
  832. border-color: @pink;
  833. }
  834. .num {
  835. color: @pink;
  836. }
  837. }
  838. .card-right {
  839. .num {
  840. color: @pink;
  841. border-color: @pink;
  842. }
  843. }
  844. }
  845. .card-percent {
  846. border-color: @pink;
  847. }
  848. }
  849. &.orange {
  850. border-color: @orange;
  851. background-color: fade(@orange, 15%);
  852. .center-icon {
  853. color: @write;
  854. }
  855. .circle {
  856. border-color: @orange;
  857. background-color: #2d1e07;
  858. }
  859. .card-panel {
  860. .card-left {
  861. border-color: @orange;
  862. .tag {
  863. border-color: @orange;
  864. }
  865. .num {
  866. color: @orange;
  867. }
  868. }
  869. .card-right {
  870. .num {
  871. color: @orange;
  872. border-color: @orange;
  873. }
  874. }
  875. }
  876. .card-percent {
  877. border-color: @orange;
  878. }
  879. }
  880. &.green {
  881. border-color: @green;
  882. background-color: fade(@green, 15%);
  883. .center-icon {
  884. color: @write;
  885. padding-left: 4px;
  886. }
  887. .circle {
  888. border-color: @green;
  889. background-color: #0f2a09;
  890. }
  891. .card-panel {
  892. .card-left {
  893. border-color: @green;
  894. .tag {
  895. border-color: @green;
  896. }
  897. .num {
  898. color: @green;
  899. }
  900. }
  901. .card-right {
  902. .num {
  903. color: @green;
  904. border-color: @green;
  905. }
  906. }
  907. }
  908. .card-percent {
  909. border-color: @green;
  910. }
  911. }
  912. &.gray {
  913. border-color: @darkgray;
  914. background-color: fade(@darkgray, 15%);
  915. .center-icon {
  916. color: @write;
  917. }
  918. .circle {
  919. border-color: @darkgray;
  920. background-color: #2b2b2b;
  921. }
  922. .card-panel {
  923. .card-left {
  924. border-color: @darkgray;
  925. .tag {
  926. border-color: @darkgray;
  927. }
  928. .num {
  929. color: @gray;
  930. }
  931. }
  932. .card-right {
  933. .num {
  934. color: @gray;
  935. border-color: @darkgray;
  936. }
  937. }
  938. }
  939. .card-percent {
  940. border-color: @darkgray;
  941. }
  942. }
  943. &.red {
  944. border-color: @red;
  945. .center-icon {
  946. color: @write;
  947. }
  948. .circle {
  949. border-color: @red;
  950. background-color: #840c0e;
  951. }
  952. .card-panel {
  953. background-color: @red;
  954. .card-left {
  955. border-color: @darkRed;
  956. .tag {
  957. border-color: @darkRed;
  958. }
  959. .num {
  960. color: @write;
  961. }
  962. }
  963. .card-right {
  964. .num {
  965. color: @write;
  966. border-color: @darkRed;
  967. }
  968. }
  969. }
  970. .card-percent {
  971. border-color: @red;
  972. }
  973. }
  974. &.black {
  975. border-color: @write;
  976. .center-icon {
  977. color: @black;
  978. }
  979. .circle {
  980. border-color: @black;
  981. background-color: #ffffff;
  982. }
  983. .card-panel {
  984. background-color: @write;
  985. .card-left {
  986. border-color: @black;
  987. .tag {
  988. color: @black;
  989. border-color: @black;
  990. }
  991. .num {
  992. color: @black;
  993. }
  994. }
  995. .card-right {
  996. .num {
  997. color: @black;
  998. border-color: @black;
  999. }
  1000. }
  1001. }
  1002. }
  1003. }
  1004. }
  1005. }
  1006. }
  1007. </style>