LightMatrix3.vue 25 KB

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