LightMatrix.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050
  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. case 1:
  314. return "blue";
  315. case 2:
  316. return "red";
  317. case 3:
  318. return "gray";
  319. case 4:
  320. return "orange";
  321. case 5:
  322. return "pink";
  323. case 6:
  324. return "pink";
  325. }
  326. },
  327. // 请求服务
  328. requestData(showLoading) {
  329. let that = this;
  330. that.API.requestData({
  331. showLoading,
  332. method: "POST",
  333. subUrl: "matrix/matrixDetialGfPush",
  334. success(res) {
  335. if (res.data) {
  336. let sourceMap = res.data;
  337. for (let key in sourceMap) {
  338. if (key !== "fczbmap" && key !== "fjmap") {
  339. sourceMap[key] += "";
  340. } else if (key === "fjmap") {
  341. sourceMap[key].forEach((pItem) => {
  342. pItem.forEach((cItem) => {
  343. cItem.icon = "svg-photovoltaic";
  344. cItem.color = that.getColor(cItem.fjzt);
  345. cItem.isShow = true;
  346. });
  347. });
  348. }
  349. }
  350. that.sourceMap = sourceMap;
  351. } else {
  352. that.sourceMap = {};
  353. }
  354. },
  355. });
  356. },
  357. gotoInverter(item){
  358. this.$router.push({
  359. path: `/monitor/windsite/inverter-info/${item.wpId}/${item.wtId}`,
  360. });
  361. }
  362. },
  363. created() {
  364. let that = this;
  365. that.$nextTick(() => {
  366. that.requestData(false);
  367. that.timmer = setInterval(() => {
  368. that.requestData(false);
  369. }, that.$store.state.websocketTimeSec);
  370. });
  371. },
  372. mounted() {},
  373. unmounted() {
  374. clearInterval(this.timmer);
  375. this.timmer = null;
  376. },
  377. };
  378. </script>
  379. <style lang="less" scoped>
  380. @panelHeight: 60px;
  381. @titleHeight: 26px;
  382. .light-matrix {
  383. // width: calc(100% - 1.111vh);
  384. height: calc(100vh - 7.222vh);
  385. display: flex;
  386. flex-direction: column;
  387. .panel {
  388. width: 100%;
  389. border: 0.093vh solid @darkgray;
  390. position: relative;
  391. padding: 8px 16px;
  392. background-color: fade(@darkgray, 20%);
  393. .dot {
  394. width: 2px;
  395. height: 2px;
  396. border-radius: 50%;
  397. background-color: @write;
  398. position: absolute;
  399. &.left {
  400. left: 4px;
  401. }
  402. &.right {
  403. right: 4px;
  404. }
  405. &.top {
  406. top: 4px;
  407. }
  408. &.bottom {
  409. bottom: 4px;
  410. }
  411. }
  412. .panel-item-gf {
  413. flex: 0 0 auto;
  414. margin: 0 24px;
  415. display: flex;
  416. height: @panelHeight;
  417. .panel-item-gf-left {
  418. width: @panelHeight;
  419. height: @panelHeight;
  420. display: flex;
  421. align-items: center;
  422. justify-content: center;
  423. position: relative;
  424. .loop {
  425. position: absolute;
  426. width: 4.444vh;
  427. height: 4.444vh;
  428. border-radius: 50%;
  429. border: 0.093vh solid @darkgray;
  430. background-color: fade(@darkgray, 20);
  431. left: calc(50% - 2.222vh);
  432. top: calc(50% - 2.222vh);
  433. }
  434. }
  435. .panel-item-gf-right {
  436. color: @write;
  437. text-align: right;
  438. margin-left: 24px;
  439. .panel-item-gf-up {
  440. color: @gray;
  441. height: @panelHeight / 2;
  442. line-height: @panelHeight / 2;
  443. font-size: 14px;
  444. }
  445. .panel-item-gf-down {
  446. height: @panelHeight / 2;
  447. line-height: @panelHeight / 2;
  448. font-weight: 600;
  449. font-size: 16px;
  450. }
  451. }
  452. }
  453. .panel-item-gf-new {
  454. display: flex;
  455. height: @panelHeight;
  456. align-items: center;
  457. justify-content: center;
  458. .panel-left {
  459. i {
  460. width: 100%;
  461. height: 100%;
  462. display: block;
  463. padding: 10px 15px;
  464. border-radius: 50%;
  465. box-shadow: inset 1.5px -1px 1px 0px @green;
  466. svg {
  467. margin-top: 0.7407vh;
  468. }
  469. }
  470. }
  471. .panel-right {
  472. display: flex;
  473. flex-direction: column;
  474. padding-left: 2.2222vh;
  475. .text {
  476. color: @green;
  477. font-size: @fontsize-s;
  478. padding-bottom: 0.7407vh;
  479. }
  480. .value {
  481. font-size: 2.2222vh;
  482. .unit {
  483. font-size: @fontsize-s;
  484. padding-left: 0.7407vh;
  485. }
  486. }
  487. }
  488. }
  489. .panel-item-new {
  490. display: flex;
  491. height: 60px;
  492. flex-direction: column;
  493. align-items: center;
  494. justify-content: center;
  495. border: 1px solid;
  496. .panel-left {
  497. width: 100%;
  498. display: flex;
  499. flex-direction: column;
  500. align-items: center;
  501. justify-content: center;
  502. height: 30px;
  503. line-height: 30px;
  504. flex: 1 0 auto;
  505. i svg {
  506. width: 16px;
  507. height: 16px;
  508. }
  509. .text {
  510. font-size: 12px;
  511. line-height: 1;
  512. margin-top: 4px;
  513. }
  514. }
  515. .panel-right {
  516. display: flex;
  517. justify-content: space-between;
  518. width: 100%;
  519. height: 100%;
  520. line-height: 30px;
  521. padding: 0 8px;
  522. .text {
  523. font-size: 14px;
  524. }
  525. .value {
  526. color: @white;
  527. font-size: 16px;
  528. }
  529. .unit {
  530. }
  531. }
  532. &.green {
  533. border-color: fade(@green, 50);
  534. i svg {
  535. margin-left: 8px;
  536. }
  537. .panel-left {
  538. background-color: fade(@green, 25);
  539. border-color: fade(@green, 50);
  540. }
  541. .panel-right {
  542. background-color: fade(@green, 15);
  543. }
  544. }
  545. &.purple {
  546. border-color: fade(@purple, 50);
  547. .panel-left {
  548. background-color: fade(@purple, 25);
  549. border-color: fade(@purple, 50);
  550. }
  551. .panel-right {
  552. background-color: fade(@purple, 15);
  553. }
  554. }
  555. &.pink {
  556. border-color: fade(@pink, 50);
  557. .panel-left {
  558. background-color: fade(@pink, 25);
  559. border-color: fade(@pink, 50);
  560. }
  561. .panel-right {
  562. background-color: fade(@pink, 15);
  563. }
  564. }
  565. &.red {
  566. border-color: fade(@red, 50);
  567. .panel-left {
  568. background-color: fade(@red, 25);
  569. border-color: fade(@red, 50);
  570. }
  571. .panel-right {
  572. background-color: fade(@red, 15);
  573. }
  574. }
  575. &.orange {
  576. border-color: fade(@orange, 50);
  577. .panel-left {
  578. background-color: fade(@orange, 25);
  579. border-color: fade(@orange, 50);
  580. }
  581. .panel-right {
  582. background-color: fade(@orange, 15);
  583. }
  584. }
  585. &.gray {
  586. border-color: fade(@gray, 50);
  587. .panel-left {
  588. background-color: fade(@gray, 25);
  589. border-color: fade(@gray, 50);
  590. }
  591. .panel-right {
  592. background-color: fade(@gray, 15);
  593. }
  594. }
  595. &.white {
  596. border-color: fade(@white, 50);
  597. .panel-left {
  598. background-color: fade(@white, 25);
  599. border-color: fade(@white, 50);
  600. }
  601. .panel-right {
  602. background-color: fade(@white, 15);
  603. }
  604. }
  605. }
  606. }
  607. .panel-box {
  608. margin-top: 1.481vh;
  609. flex-grow: 1;
  610. .panel-title {
  611. width: 100%;
  612. line-height: @titleHeight;
  613. background-color: fade(@darkgray, 40%);
  614. .panel-title-name {
  615. font-size: 12px;
  616. color: @green;
  617. display: flex;
  618. align-items: center;
  619. padding-left: 16px;
  620. flex-wrap: wrap;
  621. i {
  622. margin-right: 0.7407vh;
  623. }
  624. .sub-title-item {
  625. display: flex;
  626. flex: 0 0 110px;
  627. .sub-title {
  628. flex: 0 0 auto;
  629. font-size: 12px;
  630. color: @gray;
  631. margin: 0 0.556vh 0 1.481vh;
  632. padding-top: 1px;
  633. }
  634. .sub-count {
  635. font-size: 14px;
  636. font-family: "Bicubik";
  637. font-weight: 500;
  638. flex: 1 0 auto;
  639. &.write {
  640. color: @write;
  641. }
  642. &.green {
  643. color: @green;
  644. }
  645. &.blue {
  646. color: @darkBlue;
  647. }
  648. &.pink {
  649. color: @pink;
  650. }
  651. &.red {
  652. color: @red;
  653. }
  654. &.orange {
  655. color: @orange;
  656. }
  657. &.gray {
  658. color: @gray;
  659. }
  660. }
  661. }
  662. }
  663. }
  664. .panel-body {
  665. background-color: fade(@darkgray, 20%);
  666. padding: 4px 8px 8px 8px;
  667. margin-bottom: 8px;
  668. width: 100%;
  669. display: flex;
  670. flex-direction: row;
  671. flex-wrap: wrap;
  672. justify-content: space-between;
  673. .blank {
  674. margin-right: 4px;
  675. flex: 1 0 112px;
  676. }
  677. .card {
  678. margin-right: 4px;
  679. margin-top: 4px;
  680. flex: 1 0 112px;
  681. }
  682. .card {
  683. border: 1px solid;
  684. cursor: pointer;
  685. .card-panel {
  686. display: flex;
  687. flex-grow: row;
  688. .card-left {
  689. width: 40px;
  690. border-right: 0.093vh dotted;
  691. display: flex;
  692. flex-direction: column;
  693. .tag {
  694. color: @write;
  695. font-size: 12px;
  696. width: 100%;
  697. text-align: center;
  698. line-height: 1.5;
  699. }
  700. .icon {
  701. flex-grow: 1;
  702. display: flex;
  703. align-items: center;
  704. justify-content: center;
  705. i {
  706. font-size: 14px;
  707. }
  708. }
  709. }
  710. .card-right {
  711. margin-top: 2px;
  712. .num {
  713. width: 100%;
  714. font-size: 12px;
  715. text-align: left;
  716. padding-right: 0.278vh;
  717. display: flex;
  718. align-items: center;
  719. justify-content: space-around;
  720. i {
  721. margin: 0 2px 0 4px;
  722. }
  723. span {
  724. flex: 1;
  725. }
  726. }
  727. }
  728. }
  729. .card-percent {
  730. height: 0.926vh;
  731. padding: 0.093vh 0.185vh;
  732. position: relative;
  733. border-top: 1px solid;
  734. background-color: transparent;
  735. .percent {
  736. height: 0.648vh;
  737. background-color: @green;
  738. position: absolute;
  739. left: 0.185vh;
  740. top: 0.093vh;
  741. }
  742. }
  743. &.blue {
  744. border-color: @darkBlue;
  745. background-color: fade(@darkBlue, 15%);
  746. .card-panel {
  747. .card-left {
  748. border-color: @darkBlue;
  749. .tag {
  750. background-color: fade(@darkBlue, 30);
  751. }
  752. .icon {
  753. svg {
  754. use {
  755. fill: @write;
  756. }
  757. }
  758. }
  759. }
  760. .card-right {
  761. .num {
  762. color: @darkBlue;
  763. }
  764. }
  765. }
  766. .card-percent {
  767. border-color: @darkBlue;
  768. }
  769. }
  770. &.pink {
  771. border-color: @pink;
  772. background-color: fade(@pink, 15%);
  773. .card-panel {
  774. .card-left {
  775. border-color: @pink;
  776. .tag {
  777. background-color: fade(@pink, 30);
  778. }
  779. .icon {
  780. svg {
  781. use {
  782. fill: @write;
  783. }
  784. }
  785. }
  786. }
  787. .card-right {
  788. .num {
  789. color: @pink;
  790. }
  791. }
  792. }
  793. .card-percent {
  794. border-color: @pink;
  795. }
  796. }
  797. &.orange {
  798. border-color: @orange;
  799. background-color: fade(@orange, 15%);
  800. .card-panel {
  801. .card-left {
  802. border-color: @orange;
  803. .tag {
  804. background-color: fade(@orange, 30);
  805. }
  806. .icon {
  807. use {
  808. fill: @write;
  809. }
  810. }
  811. }
  812. .card-right {
  813. .num {
  814. color: @orange;
  815. }
  816. }
  817. }
  818. .card-percent {
  819. border-color: @orange;
  820. }
  821. }
  822. &.green {
  823. border-color: @green;
  824. background-color: fade(@green, 15%);
  825. .card-panel {
  826. .card-left {
  827. border-color: @green;
  828. .tag {
  829. background-color: fade(@green, 30);
  830. }
  831. .icon {
  832. use {
  833. fill: @write;
  834. }
  835. }
  836. }
  837. .card-right {
  838. .num {
  839. color: @green;
  840. }
  841. }
  842. }
  843. .card-percent {
  844. border-color: @green;
  845. }
  846. }
  847. &.gray {
  848. border-color: @darkgray;
  849. background-color: fade(@darkgray, 15%);
  850. .card-panel {
  851. .card-left {
  852. border-color: @darkgray;
  853. .tag {
  854. background-color: fade(@darkgray, 30%);
  855. }
  856. .icon {
  857. use {
  858. fill: @black;
  859. }
  860. }
  861. }
  862. .card-right {
  863. .num {
  864. color: @gray;
  865. }
  866. }
  867. }
  868. .card-percent {
  869. border-color: @darkgray;
  870. }
  871. }
  872. &.red {
  873. border-color: @red;
  874. .card-panel {
  875. background-color: @red;
  876. .card-left {
  877. border-color: @darkRed;
  878. .tag {
  879. background-color: fade(@darkRed, 50%);
  880. }
  881. .icon {
  882. use {
  883. fill: @write;
  884. }
  885. }
  886. }
  887. .card-right {
  888. .num {
  889. color: @write;
  890. }
  891. }
  892. }
  893. .card-percent {
  894. border-color: @red;
  895. }
  896. }
  897. &.black {
  898. border-color: @write;
  899. .card-panel {
  900. background-color: @write;
  901. .card-left {
  902. border-color: @black;
  903. .tag {
  904. background-color: fade(@darkgray, 80%);
  905. }
  906. .icon {
  907. .svg-icon {
  908. svg {
  909. use {
  910. fill: @black;
  911. }
  912. }
  913. }
  914. }
  915. }
  916. .card-right {
  917. .num {
  918. color: @black;
  919. }
  920. }
  921. }
  922. }
  923. }
  924. }
  925. }
  926. }
  927. </style>