LightMatrix.vue 24 KB

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