LightMatrix3.vue 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082
  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. <div class="page-header">
  9. <div class="panel-item-gf">
  10. <div class="panel-item-gf-left">
  11. <div class="loop"></div>
  12. <span class="svg-icon svg-icon-gray svg-icon-md">
  13. <SvgIcon svgid="svg-wind-site"></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. <div class="header-info">
  22. <div class="panel-item" v-for="(data, index) of panelData.datas" :key="index" :class="data.color">
  23. <div class="panel-item-left">
  24. <div class="panel-item-li">
  25. <span>{{ data.name }}</span>
  26. </div>
  27. <div class="panel-item-li">
  28. <span v-if="data.calcStr && sourceMap">{{ calcGfStr(data.calcStr) || "---" }}</span>
  29. <span v-else>{{ sourceMap[data.key] || "---" }}</span>
  30. </div>
  31. </div>
  32. <div class="panel-item-right">
  33. <div class="panel-item-ri">
  34. <span>
  35. <i class="svg-icon svg-icon-sm" :class="'svg-icon-' + data.color">
  36. <SvgIcon :svgid="data.nameIcon"></SvgIcon>
  37. </i>
  38. {{ data.text1 }}</span>
  39. <span>{{ sourceMap[data.key1] || "---" }}</span>
  40. </div>
  41. <div class="panel-item-ri">
  42. <span>
  43. <i class="svg-icon svg-icon-sm" :class="'svg-icon-' + data.color">
  44. <SvgIcon :svgid="data.numIcon"></SvgIcon>
  45. </i>
  46. {{ data.text2 }}
  47. </span>
  48. <span>{{ sourceMap[data.key2] || "---" }}</span>
  49. </div>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <el-scrollbar>
  56. <div class="panel-box">
  57. <div v-for="(pItem, pIndex) in sourceMap.fjmap" :key="pIndex">
  58. <div class="panel-title">
  59. <div class="panel-title-name">
  60. <i class="svg-icon svg-icon-sm svg-icon-green">
  61. <SvgIcon :svgid="'svg-wind-site'"></SvgIcon>
  62. </i>
  63. <span>{{ sourceMap.fczbmap[pItem[pIndex].wpId].name }}</span>
  64. <div class="sub-title-item" v-for="(data, index) of tables[0].subTitleDatas" :key="index">
  65. <span class="sub-title">{{ data.text }}</span>
  66. <span class="sub-count" :class="data.color">{{ sourceMap.fczbmap[pItem[pIndex].wpId][data.key] }}</span>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="panel-body">
  71. <div class="card" v-for="(cItem, cIndex) in pItem" :key="cIndex" :class="cItem.color" @click="goDetails(cItem)">
  72. <div class="card-panel">
  73. <div class="card-left">
  74. <div class="tag">{{ cItem.wtnum }}</div>
  75. <div class="icon">
  76. <span class="svg-icon svg-icon-sm" :class="cItem.color == 'black' ? 'svg-icon-black' : cItem.color == 'gray' ? 'svg-icon-gray' : 'svg-icon-write'">
  77. <SvgIcon :svgid="mapping[cItem.color]"></SvgIcon>
  78. </span>
  79. </div>
  80. </div>
  81. <div class="card-right">
  82. <div class="num">
  83. <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
  84. <SvgIcon svgid="svg-P"></SvgIcon>
  85. </i>
  86. <span>{{ cItem.fs }}</span>
  87. </div>
  88. <div class="num">
  89. <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
  90. <SvgIcon svgid="svg-W"></SvgIcon>
  91. </i>
  92. <span>{{ cItem.gl }}</span>
  93. </div>
  94. <div class="num">
  95. <i class="svg-icon svg-icon-sm" :class="cItem.color != 'red' ? 'svg-icon-' + cItem.color : 'svg-icon-white'">
  96. <SvgIcon svgid="svg-R"></SvgIcon>
  97. </i>
  98. <span>{{ cItem.fdjzs.toFixed(2) }}</span>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. <!-- 站位用 保证卡片布局最后一行不会有问题 -->
  104. <i class="blank" v-for="i in pItem.length" :key="i"></i>
  105. </div>
  106. </div>
  107. </div>
  108. </el-scrollbar>
  109. </div>
  110. </template>
  111. <script>
  112. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  113. import util from "@/helper/util.js";
  114. import store from "@store/index.js";
  115. export default {
  116. // 名称
  117. name: "LightMatrix3",
  118. // 使用组件
  119. components: {
  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: ["fcjxtjnum", "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. case 1: // 手动停机
  323. return "green";
  324. case 2: // 正常发电
  325. return "blue";
  326. case 3: // 缺陷降出力
  327. return "blue";
  328. case 4: // 限电降出力
  329. return "purple";
  330. case 5: // 限电停机
  331. return "purple";
  332. case 6: // 故障停机
  333. return "red";
  334. case 7: // 场内受累停机
  335. return "red";
  336. case 8: // 检修停机
  337. return "orange";
  338. case 9: // 离线
  339. return "orange";
  340. case 10: // 电网受累
  341. return "gray";
  342. case 11: // 环境受累
  343. return "gray";
  344. case 12: // 离线
  345. return "black";
  346. }
  347. },
  348. calcGfStr(calcStr) {
  349. return parseInt(this.sourceMap[calcStr[0]]) + parseInt(this.sourceMap[calcStr[1]]) + "";
  350. },
  351. // 请求服务
  352. requestData(showLoading) {
  353. let that = this;
  354. that.API.requestData({
  355. showLoading,
  356. method: "POST",
  357. subUrl: "matrix/matrixDetialPush",
  358. success(res) {
  359. if (res.data) {
  360. let sourceMap = res.data;
  361. for (let key in sourceMap) {
  362. if (key !== "fczbmap" && key !== "fjmap") {
  363. sourceMap[key] += "";
  364. } else if (key === "fjmap") {
  365. sourceMap[key].forEach((pItem) => {
  366. pItem.forEach((cItem) => {
  367. cItem.color = that.getColor(cItem.fjzt);
  368. cItem.isShow = true;
  369. });
  370. });
  371. }
  372. }
  373. that.sourceMap = sourceMap;
  374. } else {
  375. that.sourceMap = {};
  376. }
  377. },
  378. });
  379. },
  380. },
  381. created() {
  382. let that = this;
  383. that.$nextTick(() => {
  384. that.requestData(false);
  385. that.timmer = setInterval(() => {
  386. that.requestData(false);
  387. }, that.$store.state.websocketTimeSec);
  388. });
  389. },
  390. mounted() {},
  391. unmounted() {
  392. clearInterval(this.timmer);
  393. this.timmer = null;
  394. },
  395. };
  396. </script>
  397. <style lang="less" scoped>
  398. @panelHeight: 60px;
  399. @titleHeight: 3.704vh;
  400. .light-matrix {
  401. width: calc(100% - 1.111vh);
  402. height: calc(100vh - 7.222vh);
  403. display: flex;
  404. flex-direction: column;
  405. .panel {
  406. width: 100%;
  407. height: 80px;
  408. border: 1px solid @darkgray;
  409. position: relative;
  410. padding: 10px 20px;
  411. background-color: fade(@darkgray, 20%);
  412. .dot {
  413. width: 0.185vh;
  414. height: 0.185vh;
  415. border-radius: 50%;
  416. background-color: @write;
  417. position: absolute;
  418. &.left {
  419. left: 0.37vh;
  420. }
  421. &.right {
  422. right: 0.37vh;
  423. }
  424. &.top {
  425. top: 0.37vh;
  426. }
  427. &.bottom {
  428. bottom: 0.37vh;
  429. }
  430. }
  431. .page-header {
  432. display: flex;
  433. .header-info {
  434. display: flex;
  435. flex: 1 0 auto;
  436. }
  437. }
  438. .panel-item-gf {
  439. flex: 0 0 auto;
  440. margin-right: 16px;
  441. display: flex;
  442. height: @panelHeight;
  443. .panel-item-gf-left {
  444. width: @panelHeight;
  445. height: @panelHeight;
  446. display: flex;
  447. align-items: center;
  448. justify-content: center;
  449. position: relative;
  450. .loop {
  451. position: absolute;
  452. width: 4.444vh;
  453. height: 4.444vh;
  454. border-radius: 50%;
  455. border: 0.093vh solid @darkgray;
  456. background-color: fade(@darkgray, 20);
  457. left: calc(50% - 2.222vh);
  458. top: calc(50% - 2.222vh);
  459. }
  460. }
  461. .panel-item-gf-right {
  462. color: @write;
  463. text-align: right;
  464. margin-left: 24px;
  465. .panel-item-gf-up {
  466. color: @gray;
  467. height: @panelHeight / 2;
  468. line-height: @panelHeight / 2;
  469. font-size: 14px;
  470. }
  471. .panel-item-gf-down {
  472. height: @panelHeight / 2;
  473. line-height: @panelHeight / 2;
  474. font-weight: 600;
  475. font-size: 16px;
  476. }
  477. }
  478. }
  479. .panel-item {
  480. width: 100%;
  481. height: @panelHeight;
  482. font-size: 12px;
  483. margin-left: 8px;
  484. .panel-item-left {
  485. display: flex;
  486. .panel-item-li {
  487. height: @panelHeight / 2;
  488. line-height: @panelHeight / 2;
  489. flex: 1 0 auto;
  490. padding: 0 1.111vh;
  491. align-items: center;
  492. font-size: 14px;
  493. .svg-icon {
  494. margin-left: auto;
  495. }
  496. &.value {
  497. text-align: right;
  498. flex: 0;
  499. font-size: 16px;
  500. color: #fff;
  501. }
  502. }
  503. }
  504. .panel-item-right {
  505. display: flex;
  506. flex-grow: 1;
  507. height: @panelHeight;
  508. .panel-item-ri {
  509. height: @panelHeight / 2;
  510. line-height: @panelHeight / 2;
  511. padding: 0 8px;
  512. flex: 1;
  513. &:first-child {
  514. border-right: 1px solid;
  515. }
  516. & > span {
  517. &:first-child {
  518. float: left;
  519. display: flex;
  520. align-items: center;
  521. i {
  522. margin-right: 4px;
  523. }
  524. }
  525. &:last-child {
  526. float: right;
  527. color: @write;
  528. }
  529. }
  530. }
  531. }
  532. &.green {
  533. background-color: fade(@green, 15%);
  534. color: @green;
  535. .panel-item-left {
  536. background-color: fade(@green, 15%);
  537. }
  538. .panel-item-right {
  539. .panel-item-ri {
  540. &:first-child {
  541. border-color: @green;
  542. }
  543. }
  544. }
  545. }
  546. &.blue {
  547. background-color: fade(@darkBlue, 15%);
  548. color: @darkBlue;
  549. .panel-item-left {
  550. background-color: fade(@darkBlue, 15%);
  551. }
  552. .panel-item-right {
  553. .panel-item-ri {
  554. &:first-child {
  555. border-color: @darkBlue;
  556. }
  557. }
  558. }
  559. }
  560. &.pink {
  561. background-color: fade(@pink, 15%);
  562. color: @pink;
  563. .panel-item-left {
  564. background-color: fade(@pink, 15%);
  565. }
  566. .panel-item-right {
  567. .panel-item-ri {
  568. &:first-child {
  569. border-color: @pink;
  570. }
  571. }
  572. }
  573. }
  574. &.red {
  575. background-color: fade(@red, 15%);
  576. color: @red;
  577. .panel-item-left {
  578. background-color: fade(@red, 15%);
  579. }
  580. .panel-item-right {
  581. .panel-item-ri {
  582. &:first-child {
  583. border-color: @red;
  584. }
  585. }
  586. }
  587. }
  588. &.orange {
  589. background-color: fade(@orange, 15%);
  590. color: @orange;
  591. .panel-item-left {
  592. background-color: fade(@orange, 15%);
  593. }
  594. .panel-item-right {
  595. .panel-item-ri {
  596. &:first-child {
  597. border-color: @orange;
  598. }
  599. }
  600. }
  601. }
  602. &.gray {
  603. background-color: fade(@darkgray, 15%);
  604. color: @gray;
  605. .panel-item-left {
  606. background-color: fade(@darkgray, 15%);
  607. }
  608. .panel-item-right {
  609. .panel-item-ri {
  610. &:first-child {
  611. border-color: @darkgray;
  612. }
  613. }
  614. }
  615. }
  616. &.write {
  617. background-color: fade(@write, 15%);
  618. color: @write;
  619. .panel-item-left {
  620. background-color: fade(@write, 15%);
  621. }
  622. .panel-item-right {
  623. .panel-item-ri {
  624. &:first-child {
  625. border-color: @write;
  626. }
  627. }
  628. }
  629. }
  630. }
  631. }
  632. .panel-box {
  633. margin-top: 1.481vh;
  634. flex-grow: 1;
  635. .panel-title {
  636. width: 100%;
  637. height: @titleHeight;
  638. line-height: @titleHeight;
  639. background-color: fade(@darkgray, 40%);
  640. .panel-title-name {
  641. font-size: @fontsize-s;
  642. color: @green;
  643. display: flex;
  644. align-items: center;
  645. padding: 0 16px;
  646. i {
  647. margin-right: 0.7407vh;
  648. }
  649. .sub-title-item {
  650. display: flex;
  651. flex: 1;
  652. .sub-title {
  653. flex: 0 0 auto;
  654. color: @gray;
  655. font-size: 12px;
  656. margin: 0 0.556vh 0 1.481vh;
  657. padding-top: 1px;
  658. width: 50px;
  659. }
  660. .sub-count {
  661. flex: 1 0 auto;
  662. font-size: 14px;
  663. font-family: "Bicubik";
  664. font-weight: 500;
  665. &.write {
  666. color: @write;
  667. }
  668. &.green {
  669. color: @green;
  670. }
  671. &.blue {
  672. color: @darkBlue;
  673. }
  674. &.pink {
  675. color: @pink;
  676. }
  677. &.red {
  678. color: @red;
  679. }
  680. &.orange {
  681. color: @orange;
  682. }
  683. &.gray {
  684. color: @gray;
  685. }
  686. }
  687. }
  688. }
  689. }
  690. .panel-body {
  691. background-color: fade(@darkgray, 20%);
  692. padding: 0.741vh;
  693. margin-bottom: 1.481vh;
  694. width: 100%;
  695. display: flex;
  696. flex-direction: row;
  697. flex-wrap: wrap;
  698. justify-content: space-between;
  699. .blank {
  700. margin-right: 4px;
  701. flex: 1 0 105px;
  702. }
  703. .card {
  704. margin-right: 4px;
  705. margin-top: 4px;
  706. flex: 1 0 105px;
  707. }
  708. .card {
  709. border: 1px solid;
  710. .card-panel {
  711. display: flex;
  712. flex-grow: row;
  713. .card-left {
  714. width: 40px;
  715. border-right: 0.093vh dotted;
  716. display: flex;
  717. flex-direction: column;
  718. .tag {
  719. color: @write;
  720. font-size: 12px;
  721. width: 100%;
  722. text-align: center;
  723. line-height: 1.5;
  724. }
  725. .icon {
  726. flex-grow: 1;
  727. display: flex;
  728. align-items: center;
  729. justify-content: center;
  730. i {
  731. font-size: 14px;
  732. }
  733. }
  734. }
  735. .card-right {
  736. margin-top: 2px;
  737. .num {
  738. width: 72px;
  739. font-size: 12px;
  740. text-align: left;
  741. padding-right: 0.278vh;
  742. display: flex;
  743. align-items: center;
  744. justify-content: space-around;
  745. i {
  746. margin: 0 2px 0 4px;
  747. }
  748. span {
  749. flex: 1;
  750. }
  751. }
  752. }
  753. }
  754. .card-percent {
  755. height: 0.926vh;
  756. padding: 0.093vh 0.185vh;
  757. position: relative;
  758. border-top: 1px solid;
  759. background-color: transparent;
  760. .percent {
  761. height: 0.648vh;
  762. background-color: @green;
  763. position: absolute;
  764. left: 0.185vh;
  765. top: 0.093vh;
  766. }
  767. }
  768. &.blue {
  769. border-color: @darkBlue;
  770. background-color: fade(@darkBlue, 15%);
  771. .card-panel {
  772. .card-left {
  773. border-color: @darkBlue;
  774. .tag {
  775. background-color: fade(@darkBlue, 30);
  776. }
  777. .icon {
  778. svg {
  779. use {
  780. fill: @write;
  781. }
  782. }
  783. }
  784. }
  785. .card-right {
  786. .num {
  787. color: @darkBlue;
  788. }
  789. }
  790. }
  791. .card-percent {
  792. border-color: @darkBlue;
  793. }
  794. }
  795. &.pink {
  796. border-color: @pink;
  797. background-color: fade(@pink, 15%);
  798. .card-panel {
  799. .card-left {
  800. border-color: @pink;
  801. .tag {
  802. background-color: fade(@pink, 30);
  803. }
  804. .icon {
  805. svg {
  806. use {
  807. fill: @write;
  808. }
  809. }
  810. }
  811. }
  812. .card-right {
  813. .num {
  814. color: @pink;
  815. }
  816. }
  817. }
  818. .card-percent {
  819. border-color: @pink;
  820. }
  821. }
  822. &.orange {
  823. border-color: @orange;
  824. background-color: fade(@orange, 15%);
  825. .card-panel {
  826. .card-left {
  827. border-color: @orange;
  828. .tag {
  829. background-color: fade(@orange, 30);
  830. }
  831. .icon {
  832. use {
  833. fill: @write;
  834. }
  835. }
  836. }
  837. .card-right {
  838. .num {
  839. color: @orange;
  840. }
  841. }
  842. }
  843. .card-percent {
  844. border-color: @orange;
  845. }
  846. }
  847. &.green {
  848. border-color: @green;
  849. background-color: fade(@green, 15%);
  850. .card-panel {
  851. .card-left {
  852. border-color: @green;
  853. .tag {
  854. background-color: fade(@green, 30);
  855. }
  856. .icon {
  857. use {
  858. fill: @write;
  859. }
  860. }
  861. }
  862. .card-right {
  863. .num {
  864. color: @green;
  865. }
  866. }
  867. }
  868. .card-percent {
  869. border-color: @green;
  870. }
  871. }
  872. &.gray {
  873. border-color: @darkgray;
  874. background-color: fade(@darkgray, 15%);
  875. .card-panel {
  876. .card-left {
  877. border-color: @darkgray;
  878. .tag {
  879. background-color: fade(@darkgray, 30%);
  880. }
  881. .icon {
  882. use {
  883. fill: @black;
  884. }
  885. }
  886. }
  887. .card-right {
  888. .num {
  889. color: @gray;
  890. }
  891. }
  892. }
  893. .card-percent {
  894. border-color: @darkgray;
  895. }
  896. }
  897. &.red {
  898. border-color: @red;
  899. .card-panel {
  900. background-color: @red;
  901. .card-left {
  902. border-color: @darkRed;
  903. .tag {
  904. background-color: fade(@darkRed, 50%);
  905. }
  906. .icon {
  907. use {
  908. fill: @write;
  909. }
  910. }
  911. }
  912. .card-right {
  913. .num {
  914. color: @write;
  915. }
  916. }
  917. }
  918. .card-percent {
  919. border-color: @red;
  920. }
  921. }
  922. &.black {
  923. border-color: @write;
  924. .card-panel {
  925. background-color: @write;
  926. .card-left {
  927. border-color: @black;
  928. .tag {
  929. background-color: fade(@darkgray, 80%);
  930. }
  931. .icon {
  932. .svg-icon {
  933. svg {
  934. use {
  935. fill: @black;
  936. }
  937. }
  938. }
  939. }
  940. }
  941. .card-right {
  942. .num {
  943. color: @black;
  944. }
  945. }
  946. }
  947. }
  948. }
  949. }
  950. }
  951. }
  952. </style>