index.vue 95 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363
  1. <template>
  2. <div :class="$store.state.themeName === 'dark' ? 'dark-matrix' : 'light-matrix'">
  3. <!-- 头部按钮选项 -->
  4. <HeaderNav :isAll="true" @firstRender="typeFlag" />
  5. <div class="matrix-body">
  6. <!-- 接入台数 欠发情况 -->
  7. <div class="body-title">
  8. <div class="base-inf">
  9. <div class="title-name">
  10. <div class="imgs" v-if="tabIndex === 0">
  11. <img src="@assets/imgs/downF.png" />
  12. <img src="@assets/imgs/all.png" class="all_img" />
  13. </div>
  14. <div class="imgs" v-if="tabIndex === -1">
  15. <img src="@assets/imgs/downF.png" />
  16. <img src="@assets/imgs/windup.png" class="qty_img" />
  17. </div>
  18. <div class="imgs" v-if="tabIndex === -2">
  19. <img src="@assets/imgs/downg.png" />
  20. <img src="@assets/imgs/ptyup.png" class="qty_img" />
  21. </div>
  22. <div class="base-num" :class="{ active: fillFjzt == 'all' }" @click="handleClick('all')">
  23. <div class="base-name">接入台数</div>
  24. <div class="nums">{{ sourceMap.jrts || 0 }}</div>
  25. </div>
  26. </div>
  27. <div class="matrix-status">
  28. <div class="title-status" :class="item.color" v-for="(item, index) in titleListNew"
  29. :key="index">
  30. <!-- <div class="status-first" :class="{ active: item.value1 == fillFjzt }"
  31. @click="handleClick(item.value1)">
  32. <div class="matrix-status-left">{{ item.name }}</div>
  33. <div class="matrix-status-right">
  34. {{ sourceMap[item.code] }}
  35. </div>
  36. </div> -->
  37. <div class="status-first">
  38. <div class="matrix-status-left">{{ item.name }}</div>
  39. </div>
  40. <!-- <div class="status-end" style="height: 50px">
  41. <span style="margin-left: 5px">{{item.value1}}</span>
  42. </div> -->
  43. <div class="status-end" :class="{ active: item.value2 == fillFjzt }"
  44. @click="handleClick(item.value2)">
  45. <div class="matrix-status-left">
  46. <i class="svg-icon svg-icon-sm" :class="
  47. $store.state.themeName === 'dark'
  48. ? 'svg-icon-' + item.color
  49. : 'white'
  50. ">
  51. <SvgIcon :svgid="item.icon1"></SvgIcon>
  52. </i>
  53. {{ item.text1 }}
  54. </div>
  55. <div class="matrix-status-right">
  56. <!-- {{ sourceMap[item.code1] }} -->
  57. {{item.value1}}
  58. </div>
  59. </div>
  60. <!-- <div class="status-end" :class="{ active: item.value3 == fillFjzt }"
  61. @click="handleClick(item.value3)">
  62. <div class="matrix-status-left">
  63. <i class="svg-icon svg-icon-sm" :class="
  64. $store.state.themeName === 'dark'
  65. ? 'svg-icon-' + item.color
  66. : 'white'
  67. ">
  68. <SvgIcon :svgid="item.icon2"></SvgIcon>
  69. </i>
  70. {{ item.text2 }}
  71. </div>
  72. <div class="matrix-status-right">
  73. {{ sourceMap[item.code2] }}
  74. </div>
  75. </div> -->
  76. </div>
  77. </div>
  78. </div>
  79. <!-- <div class="unpaid">
  80. <div class="unpaid-item">
  81. <img src="@assets/imgs/unpaid.png" class="unpaid-img" alt="" />
  82. <div class="unpaid-name">欠发情况</div>
  83. </div>
  84. <div
  85. class="unpaid-item1"
  86. v-for="(item, index) in unpaidList"
  87. :key="index"
  88. :class="item.color"
  89. >
  90. <div class="percent">{{ item.num3 }}</div>
  91. <div class="nums">
  92. {{
  93. sourceMap[item.key]
  94. ? (sourceMap[item.key] / 10000).toFixed(2)
  95. : 0
  96. }}
  97. </div>
  98. </div>
  99. </div> -->
  100. </div>
  101. <!-- 风电场/光电站列表 -->
  102. <el-scrollbar height="calc(100% - 72px)">
  103. <div class="matrix-box">
  104. <!-- 单个风场/电站 -->
  105. <div class="matrixs" v-for="(value, index) in showMatrixList" :key="index"
  106. :class="{ active_vie: value.wtlist.length == 0 }">
  107. <!-- wp -->
  108. <div class="matrix-title">
  109. <!--svg + wpname @click="handleToggle(index)"-->
  110. <div class="matrix-svg">
  111. <i v-if="value.czlx == -1" class="svg-icon svg-icon-sm svg-icon-green">
  112. <SvgIcon svgid="svg-wind-site"></SvgIcon>
  113. </i>
  114. <i v-else class="svg-icon svg-icon-sm svg-icon-orange">
  115. <SvgIcon svgid="svg-photovoltaic"></SvgIcon>
  116. </i>
  117. <span class="station-name"
  118. :style="value.czlx == -1 ? '' : 'color:#ff8100'">{{ value.wpname }}</span>
  119. </div>
  120. <!-- 右侧统计项 -->
  121. <div class="indicator">
  122. <div class="sub-title-item" :class="indexs >= 10 && !item.flag ? 'active' : 'active1'"
  123. v-for="(item, indexs) in subTitleDatas" :key="indexs"
  124. @click="handleIndicatorClick(value.czlx, value.wpid)">
  125. <span>{{
  126. item.type == value.czlx ? item.text1 : item.text
  127. }}</span>
  128. <span class="sub-value" :style="{ color: item.color }">
  129. {{
  130. indexs >= 10
  131. ? item.key1
  132. ? value[item.key1]
  133. ? item.ratio
  134. ? (value[item.key1] / item.ratio).toFixed(2)
  135. : value[item.key1].toFixed(2)
  136. : "0.00"
  137. : value[item.key]
  138. ? item.ratio
  139. ? (value[item.key] / item.ratio).toFixed(2)
  140. : value[item.key].toFixed(2)
  141. : "0.00"
  142. : value[item.key]
  143. }}
  144. </span>
  145. </div>
  146. </div>
  147. </div>
  148. <!-- wt v-show="value['switch' + index]"-->
  149. <div class="matrix-list">
  150. <div class="matrix-card" style="cursor: pointer" :class="
  151. val.status !== '' && colorList[Number(val.status)]
  152. ? colorList[Number(val.status)]
  153. : 'gray'
  154. " v-for="(val, indexe) in value.wtlist" :key="indexe">
  155. <div class="info">
  156. <!-- 是否预警 -->
  157. <el-popover placement="top-start" title="预警信息" :width="200" trigger="hover"
  158. content="点击查看详情" v-if="val.isShowWarn">
  159. <template #reference>
  160. <div class="isWarn" @click="showWarnList(val)"></div>
  161. </template>
  162. </el-popover>
  163. <!-- wtname + 状态 -->
  164. <div class="card-left" @click="handleLeftClick(val, value.czlx, value.wpid)">
  165. <!-- <i class="lock" @mouseenter="handleMouse"></i> -->
  166. <div class="card-name">{{ val.wtname }}</div>
  167. <i class="svg-icon svg-icon-sm" :class="
  168. val.status === 4 || val.status === 5
  169. ? 'svg-icon-white'
  170. : `svg-icon-${colorList[Number(val.status)]}`
  171. ">
  172. <SvgIcon :svgid="mapping[val.status]"></SvgIcon>
  173. </i>
  174. </div>
  175. <div class="dashed" />
  176. <!-- 数据项 @click="handleRightClick(value.czlx, val.wtid)"-->
  177. <div class="card-right">
  178. <div class="right-item">
  179. <i class="svg-icon svg-icon-sm" :class="
  180. val.status === 4 || val.status === 5
  181. ? 'svg-icon-white'
  182. : `svg-icon-${colorList[Number(val.status)]}`
  183. ">
  184. <SvgIcon svgid="svg-P"></SvgIcon>
  185. </i>
  186. <div class="right-value">
  187. {{
  188. val.power
  189. ? val && Number(val.power)?.toFixed(2)
  190. : "0.00"
  191. }}
  192. </div>
  193. <!-- <input style="width: 200px" :value="val.power" /> -->
  194. </div>
  195. <div class="right-item">
  196. <i class="svg-icon svg-icon-sm" :class="
  197. val.status === 4 || val.status === 5
  198. ? 'svg-icon-white'
  199. : `svg-icon-${colorList[Number(val.status)]}`
  200. ">
  201. <SvgIcon :svgid="value.czlx == '-1' ? 'svg-W' : 'svg-A'"></SvgIcon>
  202. </i>
  203. <div class="right-value">
  204. {{
  205. value.czlx == "-1"
  206. ? val.speed
  207. ? Number(val.speed)?.toFixed(2)
  208. : "0.00"
  209. : val.current
  210. ? Number(val.current)?.toFixed(2)
  211. : "0.00"
  212. }}
  213. </div>
  214. <!-- <input
  215. style="width: 200px"
  216. :value="
  217. value.czlx == '-1'
  218. ? val.speed
  219. ? Number(val.speed)?.toFixed(2)
  220. : '0.00'
  221. : val.current
  222. ? Number(val.current)?.toFixed(2)
  223. : '0.00'
  224. "
  225. /> -->
  226. </div>
  227. <div class="right-item">
  228. <i class="svg-icon svg-icon-sm" :class="
  229. val.status === 4 || val.status === 5
  230. ? 'svg-icon-white'
  231. : `svg-icon-${colorList[Number(val.status)]}`
  232. ">
  233. <SvgIcon :svgid="value.czlx == '-1' ? 'svg-R' : 'svg-V'"></SvgIcon>
  234. </i>
  235. <div class="right-value">
  236. {{
  237. value.czlx == "-1"
  238. ? val.transfer
  239. ? Number(val.transfer)?.toFixed(2)
  240. : "0.00"
  241. : val.voltage
  242. ? Number(val.voltage)?.toFixed(2)
  243. : "0.00"
  244. }}
  245. </div>
  246. <!-- <input
  247. style="width: 200px"
  248. :value="
  249. value.czlx == '-1'
  250. ? val.transfer
  251. ? Number(val.transfer)?.toFixed(2)
  252. : '0.00'
  253. : val.voltage
  254. ? Number(val.voltage)?.toFixed(2)
  255. : '0.00'
  256. "
  257. /> -->
  258. </div>
  259. </div>
  260. </div>
  261. <div class="matrix-progress">
  262. <div class="progress-block"
  263. :style="{ width: (val.rate > 100 ? 100 : val.rate) + '%' }" :class="
  264. findUpColor(unpaidList, parseInt(Number(val.ssqfzt)) + 1)
  265. "></div>
  266. </div>
  267. </div>
  268. </div>
  269. </div>
  270. </div>
  271. </el-scrollbar>
  272. <qushi-dialog ref="child" :chartName="chartName"></qushi-dialog>
  273. <el-dialog :fullscreen="true" top="40px" v-model="displayMatrix" :show-close="true" destroy-on-close>
  274. <template #title>
  275. <div class="dialog-title">
  276. <div class="title">{{wind.wtname}}号风机 设备详情</div>
  277. </div>
  278. </template>
  279. <div class="dialog-body" style="height: 100vh">
  280. <img class="dialog-img" src="@assets/imgs/dialog.png" />
  281. <windDetail v-if="wtType == -1" ref="windDetail" :wind="wind" :flag="flag"></windDetail>
  282. <lightDetail v-if="wtType == -2" :wind="wind" :flag="flag"></lightDetail>
  283. </div>
  284. </el-dialog>
  285. <el-dialog :fullscreen="true" top="40px" v-model="warnDialog" :show-close="true" destroy-on-close>
  286. <template #title>
  287. <div class="dialog-title">
  288. <div class="title">预警详情</div>
  289. </div>
  290. </template>
  291. <div class="dialog-body" style="height: 100vh">
  292. <el-table
  293. size="mini"
  294. :data="warntableData"
  295. style="width: 100%; height: calc(100% - 35px - 55px)"
  296. stripe
  297. >
  298. <el-table-column
  299. v-for="item in warntableHeader"
  300. :label="item.title"
  301. :prop="item.code"
  302. :key="item.code"
  303. :width="item.width || ''"
  304. show-overflow-tooltip
  305. header-align="center"
  306. align="center"
  307. >
  308. <template #default="scope">
  309. <p >
  310. <span v-if="item.code == 'rank'">
  311. {{ tableFilter(scope.row.rank) }}
  312. </span>
  313. <span v-else-if="item.code == 'ts'">
  314. {{ formatTime(scope.row.ts) }}
  315. </span>
  316. <span :style="`color:${
  317. scope.row.isCloseName === '已解除' ? '#05bb4c' : 'var(--el-color-danger)'
  318. }`" v-else-if="item.code == 'isCloseName'" >{{ scope.row.isCloseName}}</span>
  319. <span
  320. :style="`color:${
  321. scope.row.confirmed ? '#05bb4c' : 'var(--el-color-danger)'
  322. }`"
  323. v-else-if="item.code == 'confirmed'"
  324. >
  325. {{ scope.row.confirmed ? "是" : "否" }}
  326. </span>
  327. <span v-else>
  328. {{
  329. scope.row[item.code] != "NULL" ? scope.row[item.code] : ""
  330. }}
  331. </span>
  332. </p>
  333. </template>
  334. </el-table-column>
  335. </el-table>
  336. <div class="pagination-wrapper">
  337. <el-pagination
  338. layout="total, prev, pager, next"
  339. :current-page="query.page"
  340. :page-size="query.limit"
  341. :total="query.pageTotal"
  342. @current-change="handlePageChange"
  343. ></el-pagination>
  344. </div>
  345. </div>
  346. </el-dialog>
  347. </div>
  348. </div>
  349. </template>
  350. <script>
  351. import qushiDialog from "@/components/qushi/qushiDialog.vue";
  352. import windDetail from "@/components/windDetail/index";
  353. import lightDetail from "@/components/lightDetial/index.vue";
  354. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  355. import {
  356. deepClone,
  357. findUpColor,
  358. chunkArray
  359. } from "@/utills/func.js";
  360. import { GetTableDataXo, alarm_history } from "@/api/zhbj/index.js";
  361. import HeaderNav from "@/components/headerNavSta/index.vue";
  362. import api from "@api/cockpit/matrix/index.js";
  363. import dataJson from "./dataJson2.json"
  364. import dayjs from "dayjs";
  365. export default {
  366. // 名称
  367. name: "DetailMatrix", //明细矩阵
  368. // 使用组件
  369. components: {
  370. SvgIcon,
  371. HeaderNav,
  372. qushiDialog,
  373. windDetail,
  374. lightDetail,
  375. },
  376. // 数据
  377. data() {
  378. return {
  379. loading: false,
  380. warnDialog: false,
  381. query: {
  382. page: 1,
  383. limit: 15,
  384. pageTotal: null,
  385. },
  386. timmer: null, // 定时器开关
  387. sourceMap: {}, // 接口数据
  388. showMatrixList: [], //展示数据
  389. fillFjzt: "all", // 风机/电站状态
  390. mapping: {
  391. 0: "svg-standby",
  392. // 1: "svg-manual",
  393. 1: "svg-intranet-involvement",
  394. 2: "svg-normal-power",
  395. // 3: "svg-drop-output",
  396. 3: "svg-environment",
  397. 4: "svg-gz-downtime",
  398. 5: "svg-unknown",
  399. // 5: "svg-field-involved",
  400. 6: "svg-jx-downtime",
  401. 7: "svg-field-involved",
  402. 8: "svg-limit-power",
  403. 9: "svg-downtime",
  404. 10: "svg-intranet-involvement",
  405. 11: "svg-environment",
  406. 12: "svg-offline",
  407. 13: "svg-unknown",
  408. },
  409. status: "all",
  410. titleArr: [],
  411. // 左侧标签
  412. titleList: [{
  413. color: "blue",
  414. name: "待机",
  415. text1: "待机",
  416. text2: "手动停机",
  417. value1: "dj",
  418. value2: "0",
  419. value3: "1",
  420. code: "djts",
  421. code1: "dfts",
  422. code2: "sdtj",
  423. icon1: "svg-standby",
  424. icon2: "svg-manual",
  425. },
  426. {
  427. color: "green",
  428. name: "并网",
  429. text1: "正常运行",
  430. text2: "降出力运行",
  431. value1: "yx",
  432. value2: "2",
  433. value3: "3",
  434. code: "bwts",
  435. code1: "zcyx",
  436. code2: "jclyx",
  437. icon1: "svg-normal-power",
  438. icon2: "svg-drop-output",
  439. },
  440. {
  441. color: "red",
  442. name: "故障",
  443. text1: "故障停机",
  444. text2: "故障受累",
  445. value1: "gz",
  446. value2: "4",
  447. value3: "5",
  448. code: "gzts",
  449. code1: "gztj",
  450. code2: "gzsl",
  451. icon1: "svg-gz-downtime",
  452. icon2: "svg-field-involved",
  453. },
  454. {
  455. color: "orange",
  456. name: "检修",
  457. text1: "检修停机",
  458. text2: "检修受累",
  459. value1: "jx",
  460. value2: "6",
  461. value3: "7",
  462. code: "jxts",
  463. code1: "jxtj",
  464. code2: "jxsl",
  465. icon1: "svg-jx-downtime",
  466. icon2: "svg-field-involved",
  467. },
  468. {
  469. color: "pink",
  470. name: "限电",
  471. text1: "限电降出力",
  472. text2: "限电停机",
  473. value1: "xd",
  474. value2: "8",
  475. value3: "9",
  476. code: "xdts",
  477. code1: "xdjcl",
  478. code2: "xdtj",
  479. icon1: "svg-limit-power",
  480. icon2: "svg-downtime",
  481. },
  482. {
  483. color: "write",
  484. name: "受累",
  485. text1: "电网受累",
  486. text2: "环境受累",
  487. value1: "sl",
  488. value2: "10",
  489. value3: "11",
  490. code: "slts",
  491. code1: "dwsl",
  492. code2: "hjsl",
  493. icon1: "svg-intranet-involvement",
  494. icon2: "svg-environment",
  495. },
  496. {
  497. color: "gray",
  498. name: "离线",
  499. text1: "离线",
  500. text2: "未知",
  501. value1: "lx",
  502. value2: "12",
  503. value3: "13",
  504. code: "lxz",
  505. code1: "lx",
  506. code2: "wz",
  507. icon1: "svg-offline",
  508. icon2: "svg-unknown",
  509. },
  510. ],
  511. titleListNew: [{
  512. color: "blue",
  513. name: "待机",
  514. value1: "",
  515. code: "djts",
  516. icon1: "svg-standby",
  517. icon2: "svg-manual",
  518. },
  519. {
  520. color: "green",
  521. name: "并网",
  522. value1: "",
  523. code: "bwts",
  524. icon1: "svg-normal-power",
  525. icon2: "svg-drop-output",
  526. },
  527. {
  528. color: "red",
  529. name: "故障",
  530. value1: "",
  531. code: "gzts",
  532. icon1: "svg-gz-downtime",
  533. icon2: "svg-field-involved",
  534. },
  535. {
  536. color: "orange",
  537. name: "检修",
  538. value1: "",
  539. code: "jxts",
  540. icon1: "svg-jx-downtime",
  541. icon2: "svg-field-involved",
  542. },
  543. {
  544. color: "pink",
  545. name: "限电",
  546. value1: "",
  547. code: "xdts",
  548. icon1: "svg-limit-power",
  549. icon2: "svg-downtime",
  550. },
  551. {
  552. color: "write",
  553. name: "停机",
  554. value1: "",
  555. code: "slts",
  556. icon1: "svg-intranet-involvement",
  557. icon2: "svg-environment",
  558. },
  559. {
  560. color: "gray",
  561. name: "离线",
  562. value1: "",
  563. code: "lxts",
  564. icon1: "svg-offline",
  565. icon2: "svg-unknown",
  566. },
  567. {
  568. color: "pansy",
  569. name: "解缆",
  570. value1: "",
  571. code: "jlts",
  572. icon1: "svg-environment",
  573. icon2: "svg-environment",
  574. },
  575. {
  576. color: "peachpuff",
  577. name: "启动",
  578. value1: "",
  579. code: "qdts",
  580. icon1: "svg-unknown",
  581. icon2: "svg-unknown",
  582. },
  583. ],
  584. // 右侧欠发标签
  585. unpaidList: [{
  586. id: 1,
  587. test: "欠发电量",
  588. num1: 0,
  589. key: "qf0",
  590. num3: "0%~5%",
  591. color: "upGreen",
  592. },
  593. {
  594. id: 2,
  595. test: "欠发电量",
  596. num1: 0,
  597. key: "qf1",
  598. num3: "5%~10%",
  599. color: "upSkyBlue",
  600. },
  601. {
  602. id: 3,
  603. test: "欠发电量",
  604. num1: 0,
  605. key: "qf2",
  606. num3: "10%~20%",
  607. color: "upBlue",
  608. },
  609. {
  610. id: 4,
  611. test: "欠发电量",
  612. num1: 0,
  613. key: "qf3",
  614. num3: "20%~40%",
  615. color: "upPurple",
  616. },
  617. {
  618. id: 5,
  619. test: "欠发电量",
  620. num1: 0,
  621. key: "qf4",
  622. num3: ">40%",
  623. color: "upPink",
  624. },
  625. ],
  626. colorList: [
  627. "blue",
  628. "write",
  629. "green",
  630. "pansy",
  631. "red",
  632. "peachpuff",
  633. "orange",
  634. "orange",
  635. "pink",
  636. "pink",
  637. "write",
  638. "write",
  639. "gray",
  640. "gray",
  641. ],
  642. subTitleDatas: [{
  643. text: "接入台数",
  644. color: "#FFFFFF",
  645. key: "jrts",
  646. },
  647. {
  648. text: "待机台数",
  649. color: "#1c99ff",
  650. key: "djts",
  651. },
  652. {
  653. text: "并网台数",
  654. color: "#05BB4C",
  655. key: "bwts",
  656. },
  657. {
  658. text: "故障台数",
  659. color: "#BA3237",
  660. key: "gzts",
  661. },
  662. {
  663. text: "检修台数",
  664. color: "#E17D24",
  665. key: "jxts",
  666. },
  667. {
  668. text: "限电台数",
  669. color: "#C530C8",
  670. key: "xdts",
  671. },
  672. {
  673. text: "受累台数",
  674. color: "#FFFFFF",
  675. key: "slts",
  676. },
  677. {
  678. text: "离线台数",
  679. color: "#606769",
  680. key: "lxts",
  681. },
  682. {
  683. text: "解缆台数",
  684. color: "#40E0D0",
  685. key: "slts",
  686. },
  687. {
  688. text: "启动台数",
  689. color: "#ffbe98",
  690. key: "qdts",
  691. },
  692. {
  693. text: "风速",
  694. color: "#9CA5A8",
  695. key: "spped",
  696. text1: "光照强度",
  697. type: "-2",
  698. },
  699. {
  700. text: "预测功率",
  701. color: "#9CA5A8",
  702. key: "ycgl",
  703. },
  704. {
  705. text: "保证功率",
  706. color: "#9CA5A8",
  707. key: "bzgl",
  708. ratio: 1000,
  709. text1: "理论功率",
  710. key1: "llgl",
  711. type: "-2",
  712. },
  713. // {
  714. // text: "理论功率",
  715. // color: "#9CA5A8",
  716. // key: "llgl",
  717. // ratio: 1000,
  718. // },
  719. {
  720. text: "实际功率",
  721. color: "#9CA5A8",
  722. key: "sjgl",
  723. ratio: 1000,
  724. },
  725. // {
  726. // text: "AGC指令",
  727. // color: "#9CA5A8",
  728. // key: "agc",
  729. // flag: true,
  730. // },
  731. // {
  732. // text: "出线功率",
  733. // color: "#9CA5A8",
  734. // key: "cxgl",
  735. // ratio: 1000,
  736. // flag: true,
  737. // },
  738. ],
  739. activeTab: "fc", //全部 风电 光伏
  740. enterpriseIndex: "all", //公司
  741. tabIndex: -1, //全部 0 风电 -1 光伏-2
  742. // wt指标
  743. ssPv: [{
  744. statiomName: "功率",
  745. stse: "",
  746. sts: "AI114",
  747. },
  748. {
  749. statiomName: "风速",
  750. stse: "",
  751. sts: "AI066",
  752. },
  753. {
  754. statiomName: "发电机转速",
  755. stse: "",
  756. sts: "AI060",
  757. },
  758. ],
  759. // wp指标
  760. stse: [{
  761. statiomName: "风速",
  762. stse: "",
  763. sts: "SSPJFS",
  764. },
  765. {
  766. statiomName: "预测功率",
  767. stse: "",
  768. sts: "FCFGDQDT0001",
  769. },
  770. {
  771. statiomName: "保证功率",
  772. stse: "",
  773. sts: "SSZBZGL",
  774. },
  775. // {
  776. // statiomName: "理论功率",
  777. // stse: "",
  778. // sts: "SSZNHGLZS",
  779. // },
  780. {
  781. statiomName: "实际功率",
  782. stse: "",
  783. sts: "SSZGL",
  784. },
  785. ],
  786. // 弹窗标题
  787. chartName: "对比曲线",
  788. displayMatrix: false,
  789. wind: {},
  790. wtType: -1,
  791. flag: false,
  792. warntableData: [],
  793. warntableHeader: [
  794. { title: "时间", code: "ts", width: "150" },
  795. { title: "场站", code: "wpName", width: "150" },
  796. { title: "机组", code: "code", width: "150" },
  797. { title: "部件", code: "components", width: "200" },
  798. { title: "预警信息", code: "characteristic" },
  799. { title: "报警解除时间", code: "endtsName", width: "150" },
  800. {
  801. title: "状态",
  802. code: "isCloseName",
  803. width: "80",
  804. },
  805. { title: "是否确认", code: "confirmed", width: "100" },
  806. { title: "类型", code: "deviceTypeName", width: "80" },
  807. ],
  808. changeWind: ""
  809. };
  810. },
  811. watch: {
  812. $route: {
  813. handler: function (val, oldVal) {
  814. this.getWarnData()
  815. }
  816. },
  817. },
  818. mounted() {
  819. this.changeData(true, dataJson.data)
  820. // this.requestData(true);
  821. // this.timmer = setInterval(() => {
  822. // this.requestData(true);
  823. // }, 5000);
  824. },
  825. unmounted() {
  826. clearInterval(this.timmer);
  827. this.timmer = null;
  828. },
  829. // 函数
  830. methods: {
  831. showWarnList(val) {
  832. this.changeWind = val
  833. this.warnDialog = true
  834. this.getAlarmHistoryt(val)
  835. },
  836. getColumnStyle(columnItem) {
  837. let style = "color:";
  838. if (columnItem.endts) {
  839. style += "#05bb4c";
  840. } else {
  841. style += "var(--el-color-danger)";
  842. }
  843. return style;
  844. },
  845. tableFilter(val) {
  846. const obj = {
  847. 1: "低级",
  848. 2: "低中级",
  849. 3: "中级",
  850. 4: "中高级",
  851. 5: "高级",
  852. booststation: "升压站",
  853. custom: "自定义",
  854. windturbine: "风机",
  855. inverter: "光伏",
  856. };
  857. return obj[val];
  858. },
  859. formatTime(val) {
  860. return dayjs(val).format("YYYY-MM-DD HH:mm:ss");
  861. },
  862. // 分页导航
  863. handlePageChange(val) {
  864. this.query.page = val;
  865. this.getAlarmHistoryt(this.changeWind);
  866. },
  867. async getAlarmHistoryt(val) {
  868. let params = {
  869. pageNum: this.query.page,
  870. pageSize: this.query.limit,
  871. alarmId: "",
  872. alarmType: "custom",
  873. deviceType: "windturbine",
  874. stationid: "NX_FGS_HA_FDC_STA",
  875. deviceid:val.wtid,
  876. modelId: "",
  877. components: "",
  878. description: "",
  879. begin: dayjs().add(-1, "hour").format("YYYY-MM-DD HH:mm:ss"),
  880. end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
  881. };
  882. const { data } = await alarm_history(params);
  883. if (data) {
  884. this.query.pageTotal = data?.total;
  885. data?.ls?.forEach((ele) => {
  886. ele.isCloseName = ele.endts ? "已解除" : "未解除";
  887. ele.deviceTypeName = this.tableFilter(ele.deviceType);
  888. ele.endtsName = ele.endts > 0 ? this.formatTime(ele.endts) : "--";
  889. });
  890. this.warntableData = data?.ls;
  891. }
  892. },
  893. handleMouse() {},
  894. deepClone,
  895. findUpColor,
  896. chunkArray,
  897. // 头部tab选择
  898. // typeFlag(activeTab) {
  899. // this.activeTab = activeTab;
  900. // this.tabIndex = activeTab;
  901. // this.enterpriseIndex = "all";
  902. // this.requestData(true);
  903. // clearInterval(this.timmer);
  904. // this.timmer = null;
  905. // this.timmer = setInterval(() => {
  906. // this.requestData();
  907. // }, 5000);
  908. // },
  909. // 请求服务
  910. requestData(first) {
  911. if (first) {
  912. // this.BASE.showLoading();
  913. // this.changeData(first, dataJson)
  914. }
  915. api
  916. .matrixDetailPush({
  917. company: this.enterpriseIndex == "all" ?
  918. "0" : this.enterpriseIndex.toString(),
  919. type: this.tabIndex.toString(),
  920. })
  921. .then((res) => {
  922. // this.BASE.closeLoading();
  923. this.changeData(first, res)
  924. });
  925. },
  926. changeData(first, res) {
  927. if (Object.values(res.data).length) {
  928. let sourceMap = res.data;
  929. let windNumData = res.data.powerVos[0]
  930. this.titleListNew.forEach(it => {
  931. it.value1 = windNumData[it.code]
  932. })
  933. this.sourceMap = sourceMap;
  934. if (first) {
  935. const tempWtArray = this.chunkArray(this.sourceMap.powerVos, 3);
  936. this.showMatrixList = tempWtArray[0];
  937. for (let i = 1; i < tempWtArray.length; i++) {
  938. setTimeout(() => {
  939. this.showMatrixList.push(...tempWtArray[i]);
  940. }, 5);
  941. }
  942. } else {
  943. this.handleClick(this.fillFjzt);
  944. }
  945. } else {
  946. this.sourceMap = {};
  947. this.showMatrixList = [];
  948. }
  949. if (this.showMatrixList.length>0) {
  950. this.getWarnData(this.showMatrixList[0].wtlist)
  951. }
  952. },
  953. getWarnData(datas) {
  954. let params = {
  955. begin: dayjs().add(-1, "hour").format("YYYY-MM-DD HH:mm:ss"),
  956. end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
  957. alarmType: "custom",
  958. stationid: "NX_FGS_HA_FDC_STA"
  959. }
  960. GetTableDataXo(params).then(res =>{
  961. if (res && res.data) {
  962. for(let i =0;i<datas.length; i++) {
  963. let itv = datas[i]
  964. itv.isShowWarn = false
  965. if (res.data.indexOf(itv.wtid) !== -1) {
  966. itv.isShowWarn = true
  967. }
  968. }
  969. console.log("32154==>>>", this.showMatrixList[0].wtlist)
  970. }
  971. })
  972. },
  973. // 点击切换状态
  974. handleClick(val) {
  975. this.fillFjzt = val;
  976. this.handleClickWind();
  977. },
  978. // 点击开关闭场站设备
  979. handleToggle(index) {
  980. // this.showMatrixList[index]["switch" + index] =
  981. // !this.showMatrixList[index]["switch" + index];
  982. },
  983. // 状态切换改变数据
  984. handleClickWind() {
  985. // const tempWtArray = this.BASE.deepCopy(sourceMap.powerVos);
  986. // tempWtArray?.forEach((ele) => {
  987. // ele.spWtlist = this.chunkArray(ele.wtlist, 100);
  988. // });
  989. // sourceMap.powerVos.forEach((ele) => {
  990. // ele.wtlist = [];
  991. // });
  992. // for (let i = 0; i < sourceMap.powerVos.length; i++) {
  993. // const ele = sourceMap.powerVos[i];
  994. // for (let j = 0; j < tempWtArray[i]?.spWtlist?.length; j++) {
  995. // setTimeout(() => {
  996. // ele.wtlist = ele.wtlist.concat(tempWtArray[i].spWtlist[j]);
  997. // }, 500);
  998. // }
  999. // }
  1000. // console.log(11, tempWtArray);
  1001. // console.log(22, sourceMap);
  1002. this.showMatrixList = JSON.parse(JSON.stringify(this.sourceMap.powerVos));
  1003. let matrixList = this.sourceMap.powerVos;
  1004. if (this.fillFjzt !== "all") {
  1005. this.showMatrixList.forEach((item) => {
  1006. item.wtlist = [];
  1007. });
  1008. switch (this.fillFjzt) {
  1009. case "dj":
  1010. matrixList.forEach((val, index) => {
  1011. val.wtlist.forEach((item) => {
  1012. if (item.status === 0 || item.status === 1) {
  1013. this.showMatrixList[index].wtlist.push(item);
  1014. }
  1015. });
  1016. });
  1017. break;
  1018. case "0":
  1019. matrixList.forEach((val, index) => {
  1020. val.wtlist.forEach((item) => {
  1021. if (item.status === 0) {
  1022. this.showMatrixList[index].wtlist.push(item);
  1023. }
  1024. });
  1025. });
  1026. break;
  1027. case "1":
  1028. matrixList.forEach((val, index) => {
  1029. val.wtlist.forEach((item) => {
  1030. if (item.status === 1) {
  1031. this.showMatrixList[index].wtlist.push(item);
  1032. }
  1033. });
  1034. });
  1035. break;
  1036. case "yx":
  1037. matrixList.forEach((val, index) => {
  1038. val.wtlist.forEach((item) => {
  1039. if (item.status === 2 || item.status === 3) {
  1040. this.showMatrixList[index].wtlist.push(item);
  1041. }
  1042. });
  1043. });
  1044. break;
  1045. case "2":
  1046. matrixList.forEach((val, index) => {
  1047. val.wtlist.forEach((item) => {
  1048. if (item.status === 2) {
  1049. this.showMatrixList[index].wtlist.push(item);
  1050. }
  1051. });
  1052. });
  1053. break;
  1054. case "3":
  1055. matrixList.forEach((val, index) => {
  1056. val.wtlist.forEach((item) => {
  1057. if (item.status === 3) {
  1058. this.showMatrixList[index].wtlist.push(item);
  1059. }
  1060. });
  1061. });
  1062. break;
  1063. case "gz":
  1064. matrixList.forEach((val, index) => {
  1065. val.wtlist.forEach((item) => {
  1066. if (item.status === 4 || item.status === 5) {
  1067. this.showMatrixList[index].wtlist.push(item);
  1068. }
  1069. });
  1070. });
  1071. break;
  1072. case "4":
  1073. matrixList.forEach((val, index) => {
  1074. val.wtlist.forEach((item) => {
  1075. if (item.status === 4) {
  1076. this.showMatrixList[index].wtlist.push(item);
  1077. }
  1078. });
  1079. });
  1080. break;
  1081. case "5":
  1082. matrixList.forEach((val, index) => {
  1083. val.wtlist.forEach((item) => {
  1084. if (item.status === 5) {
  1085. this.showMatrixList[index].wtlist.push(item);
  1086. }
  1087. });
  1088. });
  1089. break;
  1090. case "jx":
  1091. matrixList.forEach((val, index) => {
  1092. val.wtlist.forEach((item) => {
  1093. if (item.status === 6 || item.status === 7) {
  1094. this.showMatrixList[index].wtlist.push(item);
  1095. }
  1096. });
  1097. });
  1098. break;
  1099. case "6":
  1100. matrixList.forEach((val, index) => {
  1101. val.wtlist.forEach((item) => {
  1102. if (item.status === 6) {
  1103. this.showMatrixList[index].wtlist.push(item);
  1104. }
  1105. });
  1106. });
  1107. break;
  1108. case "7":
  1109. matrixList.forEach((val, index) => {
  1110. val.wtlist.forEach((item) => {
  1111. if (item.status === 7) {
  1112. this.showMatrixList[index].wtlist.push(item);
  1113. }
  1114. });
  1115. });
  1116. break;
  1117. case "xd":
  1118. matrixList.forEach((val, index) => {
  1119. val.wtlist.forEach((item) => {
  1120. if (item.status === 8 || item.status === 9) {
  1121. this.showMatrixList[index].wtlist.push(item);
  1122. }
  1123. });
  1124. });
  1125. break;
  1126. case "8":
  1127. matrixList.forEach((val, index) => {
  1128. val.wtlist.forEach((item) => {
  1129. if (item.status === 8) {
  1130. this.showMatrixList[index].wtlist.push(item);
  1131. }
  1132. });
  1133. });
  1134. break;
  1135. case "9":
  1136. matrixList.forEach((val, index) => {
  1137. val.wtlist.forEach((item) => {
  1138. if (item.status === 9) {
  1139. this.showMatrixList[index].wtlist.push(item);
  1140. }
  1141. });
  1142. });
  1143. break;
  1144. case "sl":
  1145. matrixList.forEach((val, index) => {
  1146. val.wtlist.forEach((item) => {
  1147. if (item.status === 10 || item.status === 11) {
  1148. this.showMatrixList[index].wtlist.push(item);
  1149. }
  1150. });
  1151. });
  1152. break;
  1153. case "10":
  1154. matrixList.forEach((val, index) => {
  1155. val.wtlist.forEach((item) => {
  1156. if (item.status === 10) {
  1157. this.showMatrixList[index].wtlist.push(item);
  1158. }
  1159. });
  1160. });
  1161. break;
  1162. case "11":
  1163. matrixList.forEach((val, index) => {
  1164. val.wtlist.forEach((item) => {
  1165. if (item.status === 11) {
  1166. this.showMatrixList[index].wtlist.push(item);
  1167. }
  1168. });
  1169. });
  1170. break;
  1171. case "lx":
  1172. matrixList.forEach((val, index) => {
  1173. val.wtlist.forEach((item) => {
  1174. if (item.status === 12 || item.status === 13) {
  1175. this.showMatrixList[index].wtlist.push(item);
  1176. }
  1177. });
  1178. });
  1179. break;
  1180. case "12":
  1181. matrixList.forEach((val, index) => {
  1182. val.wtlist.forEach((item) => {
  1183. if (item.status === 12) {
  1184. this.showMatrixList[index].wtlist.push(item);
  1185. }
  1186. });
  1187. });
  1188. break;
  1189. case "13":
  1190. matrixList.forEach((val, index) => {
  1191. val.wtlist.forEach((item) => {
  1192. if (item.status === 13) {
  1193. this.showMatrixList[index].wtlist.push(item);
  1194. }
  1195. });
  1196. });
  1197. break;
  1198. case "all":
  1199. this.showMatrixList = this.sourceMap.powerVos;
  1200. break;
  1201. }
  1202. } else {
  1203. this.showMatrixList = this.sourceMap.powerVos;
  1204. }
  1205. },
  1206. // 点击左侧数据弹出曲线
  1207. handleLeftClick(wt, type, wpid) {
  1208. this.displayMatrix = true;
  1209. this.wtType = type;
  1210. this.$nextTick(() => {
  1211. this.wind = {
  1212. ...wt,
  1213. wtType: type,
  1214. wpid
  1215. };
  1216. this.flag = true;
  1217. });
  1218. },
  1219. // 点击右侧数据弹出曲线
  1220. handleRightClick(type, wtid) {
  1221. let y = this.deepClone(this.ssPv);
  1222. if (type == "-2") {
  1223. y[1].statiomName = "电流";
  1224. y[1].sts = "AI075";
  1225. y[2].statiomName = "电压";
  1226. y[2].sts = "AIG055";
  1227. }
  1228. this.$refs.child.openCurvDatas(y, 2, wtid);
  1229. },
  1230. // 点击统计项弹出曲线
  1231. handleIndicatorClick(czlx, wpid) {
  1232. let y = this.deepClone(this.stse);
  1233. if (czlx == "-2") {
  1234. y[0].statiomName = "光照强度";
  1235. y[0].sts = "SSPJGZD";
  1236. y[2].statiomName = "理论功率";
  1237. y[2].sts = "SSZNHGLZS";
  1238. }
  1239. this.$refs.child.openCurvDatas(y, 1, wpid);
  1240. },
  1241. },
  1242. };
  1243. </script>
  1244. <style lang="less" scoped>
  1245. @panelHeight: 60px;
  1246. @titleHeight: 26px;
  1247. .dark-matrix {
  1248. height: 100%;
  1249. display: flex;
  1250. flex-direction: column;
  1251. .matrix-body {
  1252. display: flex;
  1253. flex-direction: column;
  1254. height: 100%;
  1255. padding-right: 20px;
  1256. padding-left: 20px;
  1257. padding-bottom: 5px;
  1258. .body-title {
  1259. display: flex;
  1260. flex-direction: row;
  1261. align-items: center;
  1262. width: 100%;
  1263. height: 78px;
  1264. background-color: rgba(0, 0, 0, 0.45);
  1265. border-radius: 10px;
  1266. .base-inf {
  1267. display: flex;
  1268. flex-direction: row;
  1269. align-items: center;
  1270. width: 70%;
  1271. height: 100%;
  1272. .title-name {
  1273. display: flex;
  1274. flex-direction: row;
  1275. align-items: center;
  1276. width: 18%;
  1277. height: 100%;
  1278. .imgs {
  1279. display: flex;
  1280. flex-direction: row;
  1281. align-items: center;
  1282. height: 100%;
  1283. margin-left: 11px;
  1284. }
  1285. .base-num {
  1286. display: flex;
  1287. flex-direction: column;
  1288. align-items: center;
  1289. justify-content: center;
  1290. cursor: pointer;
  1291. .nums {
  1292. font-size: 18px;
  1293. font-family: Arial;
  1294. color: #ffffff;
  1295. }
  1296. .base-name {
  1297. font-size: 14px;
  1298. font-family: Microsoft YaHei;
  1299. color: #b3b3b3;
  1300. margin-bottom: 10px;
  1301. }
  1302. &.active {
  1303. font-weight: 700;
  1304. }
  1305. }
  1306. .all_img {
  1307. width: 20px;
  1308. position: relative;
  1309. left: -34px;
  1310. top: 1px;
  1311. margin-right: 10px;
  1312. animation: move 1s infinite linear;
  1313. }
  1314. .qty_img {
  1315. position: relative;
  1316. left: -39px;
  1317. top: 1px;
  1318. animation: move 1s infinite linear;
  1319. }
  1320. @keyframes move {
  1321. 0% {
  1322. top: 0px;
  1323. }
  1324. 20% {
  1325. top: -1px;
  1326. }
  1327. 40% {
  1328. top: -2px;
  1329. }
  1330. 80% {
  1331. top: -1px;
  1332. }
  1333. 100% {
  1334. top: 0px;
  1335. }
  1336. }
  1337. }
  1338. .matrix-status {
  1339. width: 90%;
  1340. display: flex;
  1341. flex-direction: row;
  1342. align-items: center;
  1343. height: 80%;
  1344. }
  1345. .title-status {
  1346. display: flex;
  1347. flex-direction: column;
  1348. width: 17%;
  1349. height: 100%;
  1350. padding-right: 5px;
  1351. cursor: pointer;
  1352. .status-first {
  1353. width: 100%;
  1354. height: 34%;
  1355. display: flex;
  1356. flex-direction: row;
  1357. align-items: center;
  1358. justify-content: space-between;
  1359. .matrix-status-left {
  1360. margin-left: 6px;
  1361. font-size: 14px;
  1362. font-family: Microsoft YaHei;
  1363. }
  1364. .matrix-status-right {
  1365. margin-right: 6px;
  1366. font-size: 16px;
  1367. font-family: Arial;
  1368. }
  1369. &.active {
  1370. font-weight: 700;
  1371. .matrix-status-left {
  1372. font-size: 15px;
  1373. }
  1374. .matrix-status-right {
  1375. font-size: 17px;
  1376. }
  1377. }
  1378. }
  1379. .status-end {
  1380. width: 100%;
  1381. // height: 33%;
  1382. height: 50%;
  1383. display: flex;
  1384. flex-direction: row;
  1385. align-items: center;
  1386. justify-content: space-between;
  1387. .matrix-status-left {
  1388. margin-left: 6px;
  1389. font-size: 12px;
  1390. font-family: Microsoft YaHei;
  1391. }
  1392. .matrix-status-right {
  1393. margin-right: 6px;
  1394. font-size: 14px;
  1395. font-family: Arial;
  1396. }
  1397. &.active {
  1398. font-weight: 700;
  1399. .matrix-status-left {
  1400. font-size: 13px;
  1401. }
  1402. .matrix-status-right {
  1403. font-size: 15px;
  1404. }
  1405. }
  1406. }
  1407. .matrix-status-right {
  1408. margin-right: 6px;
  1409. }
  1410. &.green {
  1411. .status-first {
  1412. background-color: rgba(5, 187, 76, 0.28);
  1413. border-top: 1px solid #0b3d26;
  1414. border-left: 1px solid #0b3d26;
  1415. border-right: 1px solid #0b3d26;
  1416. .matrix-status-left {
  1417. color: #05bb4c;
  1418. }
  1419. .matrix-status-right {
  1420. color: #05bb4c;
  1421. }
  1422. }
  1423. .status-end {
  1424. background-color: rgba(5, 187, 76, 0.16);
  1425. border-left: 1px solid #0b3d26;
  1426. border-right: 1px solid #0b3d26;
  1427. border-bottom: 1px solid #0b3d26;
  1428. .matrix-status-left {
  1429. color: #05bb4c;
  1430. }
  1431. .matrix-status-right {
  1432. color: #05bb4c;
  1433. }
  1434. }
  1435. .matrix-status-right {
  1436. margin-right: 6px;
  1437. }
  1438. }
  1439. &.blue {
  1440. .status-first {
  1441. background-color: rgba(0, 70, 199, 0.48);
  1442. border-top: 1px solid #1e2341;
  1443. border-left: 1px solid #1e2341;
  1444. border-right: 1px solid #1e2341;
  1445. .matrix-status-left {
  1446. color: #1c99ff;
  1447. }
  1448. .matrix-status-right {
  1449. color: #1c99ff;
  1450. }
  1451. }
  1452. .status-end {
  1453. background-color: rgba(0, 70, 199, 0.16);
  1454. border-left: 1px solid #1e2341;
  1455. border-right: 1px solid #1e2341;
  1456. border-bottom: 1px solid #1e2341;
  1457. .matrix-status-left {
  1458. color: #1c99ff;
  1459. }
  1460. .matrix-status-right {
  1461. color: #1c99ff;
  1462. }
  1463. }
  1464. .matrix-status-right {
  1465. margin-right: 6px;
  1466. }
  1467. }
  1468. &.pink {
  1469. .status-first {
  1470. background-color: rgba(197, 48, 200, 0.28);
  1471. border-top: 1px solid #3e1a48;
  1472. border-left: 1px solid #3e1a48;
  1473. border-right: 1px solid #3e1a48;
  1474. .matrix-status-left {
  1475. color: #c530c8;
  1476. }
  1477. .matrix-status-right {
  1478. color: #c530c8;
  1479. }
  1480. }
  1481. .status-end {
  1482. background-color: rgba(197, 48, 200, 0.16);
  1483. border-left: 1px solid #3e1a48;
  1484. border-right: 1px solid #3e1a48;
  1485. border-bottom: 1px solid #3e1a48;
  1486. .matrix-status-left {
  1487. color: #c530c8;
  1488. }
  1489. .matrix-status-right {
  1490. color: #c530c8;
  1491. }
  1492. }
  1493. .matrix-status-right {
  1494. margin-right: 6px;
  1495. }
  1496. }
  1497. &.red {
  1498. .status-first {
  1499. background-color: rgba(186, 50, 55, 0.28);
  1500. border-top: 1px solid #3c1c1f;
  1501. border-left: 1px solid #3c1c1f;
  1502. border-right: 1px solid #3c1c1f;
  1503. .matrix-status-left {
  1504. color: #ba3237;
  1505. }
  1506. .matrix-status-right {
  1507. color: #ba3237;
  1508. }
  1509. }
  1510. .status-end {
  1511. background-color: rgba(186, 50, 55, 0.16);
  1512. border-left: 1px solid #3c1c1f;
  1513. border-right: 1px solid #3c1c1f;
  1514. border-bottom: 1px solid #3c1c1f;
  1515. .matrix-status-left {
  1516. color: #ba3237;
  1517. }
  1518. .matrix-status-right {
  1519. color: #ba3237;
  1520. }
  1521. }
  1522. .matrix-status-right {
  1523. margin-right: 6px;
  1524. }
  1525. }
  1526. &.orange {
  1527. .status-first {
  1528. background-color: rgba(225, 125, 36, 0.28);
  1529. border-top: 1px solid #46301a;
  1530. border-left: 1px solid #46301a;
  1531. border-right: 1px solid #46301a;
  1532. .matrix-status-left {
  1533. color: #e17d24;
  1534. }
  1535. .matrix-status-right {
  1536. color: #e17d24;
  1537. }
  1538. }
  1539. .status-end {
  1540. background-color: rgba(225, 125, 36, 0.16);
  1541. border-left: 1px solid #46301a;
  1542. border-right: 1px solid #46301a;
  1543. border-bottom: 1px solid #46301a;
  1544. .matrix-status-left {
  1545. color: #e17d24;
  1546. }
  1547. .matrix-status-right {
  1548. color: #e17d24;
  1549. }
  1550. }
  1551. .matrix-status-right {
  1552. margin-right: 6px;
  1553. }
  1554. }
  1555. &.gray {
  1556. .status-first {
  1557. background-color: rgba(96, 103, 105, 0.28);
  1558. border-top: 1px solid #262b32;
  1559. border-left: 1px solid #262b32;
  1560. border-right: 1px solid #262b32;
  1561. .matrix-status-left {
  1562. color: #606769;
  1563. }
  1564. .matrix-status-right {
  1565. color: #606769;
  1566. }
  1567. }
  1568. .status-end {
  1569. background-color: rgba(96, 103, 105, 0.16);
  1570. border-left: 1px solid #262b32;
  1571. border-right: 1px solid #262b32;
  1572. border-bottom: 1px solid #262b32;
  1573. .matrix-status-left {
  1574. color: #606769;
  1575. }
  1576. .matrix-status-right {
  1577. color: #606769;
  1578. }
  1579. }
  1580. .matrix-status-right {
  1581. margin-right: 6px;
  1582. }
  1583. }
  1584. &.write {
  1585. .status-first {
  1586. background-color: rgba(255, 255, 255, 0.28);
  1587. border-top: 1px solid #3f4349;
  1588. border-left: 1px solid #3f4349;
  1589. border-right: 1px solid #3f4349;
  1590. .matrix-status-left {
  1591. color: #ffffff;
  1592. }
  1593. .matrix-status-right {
  1594. color: #ffffff;
  1595. }
  1596. }
  1597. .status-end {
  1598. background-color: rgba(255, 255, 255, 0.16);
  1599. border-left: 1px solid #3f4349;
  1600. border-right: 1px solid #3f4349;
  1601. border-bottom: 1px solid #3f4349;
  1602. .matrix-status-left {
  1603. color: #ffffff;
  1604. }
  1605. .matrix-status-right {
  1606. color: #ffffff;
  1607. }
  1608. }
  1609. .matrix-status-right {
  1610. margin-right: 6px;
  1611. }
  1612. }
  1613. &.pansy {
  1614. .status-first {
  1615. background-color: rgba(64, 224,205, 0.28);
  1616. border-top: 1px solid #335f5b;
  1617. border-left: 1px solid #335f5b;
  1618. border-right: 1px solid #335f5b;
  1619. .matrix-status-left {
  1620. color: #40E0D0;
  1621. }
  1622. .matrix-status-right {
  1623. color: #40E0D0;
  1624. }
  1625. }
  1626. .status-end {
  1627. background-color: rgba(64, 224,205, 0.16);
  1628. border-left: 1px solid #335f5b;
  1629. border-right: 1px solid #335f5b;
  1630. border-bottom: 1px solid #335f5b;
  1631. .matrix-status-left {
  1632. color: #40E0D0;
  1633. }
  1634. .matrix-status-right {
  1635. color: #40E0D0;
  1636. }
  1637. }
  1638. .matrix-status-right {
  1639. margin-right: 6px;
  1640. }
  1641. }
  1642. &.peachpuff {
  1643. .status-first {
  1644. background-color: rgba(255, 218, 185, 0.28);
  1645. border-top: 1px solid #554135;
  1646. border-left: 1px solid #554135;
  1647. border-right: 1px solid #554135;
  1648. .matrix-status-left {
  1649. color: #ffbe98;
  1650. }
  1651. .matrix-status-right {
  1652. color: #ffbe98;
  1653. }
  1654. }
  1655. .status-end {
  1656. background-color: rgba(255, 218, 185, 0.16);
  1657. border-left: 1px solid #554135;
  1658. border-right: 1px solid #554135;
  1659. border-bottom: 1px solid #554135;
  1660. .matrix-status-left {
  1661. color: #ffbe98;
  1662. }
  1663. .matrix-status-right {
  1664. color: #ffbe98;
  1665. }
  1666. }
  1667. .matrix-status-right {
  1668. margin-right: 6px;
  1669. }
  1670. }
  1671. }
  1672. }
  1673. .unpaid {
  1674. display: flex;
  1675. flex-direction: row;
  1676. align-items: center;
  1677. width: 40%;
  1678. height: 100%;
  1679. .unpaid-item {
  1680. width: 20%;
  1681. height: 80%;
  1682. margin-right: 5px;
  1683. padding: 0 10px;
  1684. .unpaid-img {
  1685. width: 115px;
  1686. height: 39px;
  1687. }
  1688. .unpaid-value {
  1689. width: 90%;
  1690. display: flex;
  1691. flex-direction: row-reverse;
  1692. font-size: 18px;
  1693. font-family: Arial;
  1694. font-weight: 400;
  1695. color: #ff9f1f;
  1696. margin-top: -20px;
  1697. }
  1698. .unpaid-name {
  1699. width: 90%;
  1700. font-size: 14px;
  1701. font-family: Microsoft YaHei;
  1702. font-weight: 400;
  1703. color: #b3b3b3;
  1704. transform: translate(50%, -100%);
  1705. }
  1706. }
  1707. .unpaid-item1 {
  1708. width: 20%;
  1709. height: 80%;
  1710. margin-right: 5px;
  1711. &.upGreen {
  1712. .percent {
  1713. background-color: rgba(87, 207, 58, 0.8);
  1714. border-top: 1px solid rgba(87, 207, 58, 0.35);
  1715. border-left: 1px solid rgba(87, 207, 58, 0.35);
  1716. border-right: 1px solid rgba(87, 207, 58, 0.35);
  1717. }
  1718. .nums {
  1719. background-color: rgba(87, 207, 58, 0.35);
  1720. border-left: 1px solid rgba(87, 207, 58, 0.35);
  1721. border-right: 1px solid rgba(87, 207, 58, 0.35);
  1722. border-bottom: 1px solid rgba(87, 207, 58, 0.35);
  1723. }
  1724. }
  1725. &.upSkyBlue {
  1726. .percent {
  1727. background-color: rgba(14, 199, 220, 0.8);
  1728. border-top: 1px solid rgba(14, 199, 220, 0.35);
  1729. border-left: 1px solid rgba(14, 199, 220, 0.35);
  1730. border-right: 1px solid rgba(14, 199, 220, 0.35);
  1731. }
  1732. .nums {
  1733. background-color: rgba(14, 199, 220, 0.35);
  1734. border-left: 1px solid rgba(14, 199, 220, 0.35);
  1735. border-right: 1px solid rgba(14, 199, 220, 0.35);
  1736. border-bottom: 1px solid rgba(14, 199, 220, 0.35);
  1737. }
  1738. }
  1739. &.upBlue {
  1740. .percent {
  1741. background-color: rgba(25, 116, 255, 0.8);
  1742. border-top: 1px solid rgba(25, 116, 255, 0.35);
  1743. border-left: 1px solid rgba(25, 116, 255, 0.35);
  1744. border-right: 1px solid rgba(25, 116, 255, 0.35);
  1745. }
  1746. .nums {
  1747. background-color: rgba(25, 116, 255, 0.35);
  1748. border-left: 1px solid rgba(25, 116, 255, 0.35);
  1749. border-right: 1px solid rgba(25, 116, 255, 0.35);
  1750. border-bottom: 1px solid rgba(25, 116, 255, 0.35);
  1751. }
  1752. }
  1753. &.upPurple {
  1754. .percent {
  1755. background-color: rgba(205, 76, 221, 0.8);
  1756. border-top: 1px solid rgba(205, 76, 221, 0.35);
  1757. border-left: 1px solid rgba(205, 76, 221, 0.35);
  1758. border-right: 1px solid rgba(205, 76, 221, 0.35);
  1759. }
  1760. .nums {
  1761. background-color: rgba(205, 76, 221, 0.35);
  1762. border-left: 1px solid rgba(205, 76, 221, 0.35);
  1763. border-right: 1px solid rgba(205, 76, 221, 0.35);
  1764. border-bottom: 1px solid rgba(205, 76, 221, 0.35);
  1765. }
  1766. }
  1767. &.upPink {
  1768. .percent {
  1769. background-color: rgba(255, 60, 128, 0.8);
  1770. border-top: 1px solid rgba(255, 60, 128, 0.35);
  1771. border-left: 1px solid rgba(255, 60, 128, 0.35);
  1772. border-right: 1px solid rgba(255, 60, 128, 0.35);
  1773. }
  1774. .nums {
  1775. background-color: rgba(255, 60, 128, 0.35);
  1776. border-left: 1px solid rgba(255, 60, 128, 0.35);
  1777. border-right: 1px solid rgba(255, 60, 128, 0.35);
  1778. border-bottom: 1px solid rgba(255, 60, 128, 0.35);
  1779. }
  1780. }
  1781. .percent {
  1782. width: 100%;
  1783. height: 50%;
  1784. display: flex;
  1785. align-items: center;
  1786. justify-content: center;
  1787. font-size: 14px;
  1788. font-family: Arial;
  1789. font-weight: 400;
  1790. color: #ffffff;
  1791. }
  1792. .nums {
  1793. width: 100%;
  1794. height: 50%;
  1795. display: flex;
  1796. flex-direction: row;
  1797. align-items: center;
  1798. justify-content: center;
  1799. font-size: 16px;
  1800. font-family: Arial;
  1801. font-weight: 400;
  1802. color: #ffffff;
  1803. padding: 0 8px;
  1804. }
  1805. }
  1806. }
  1807. }
  1808. .matrix-box {
  1809. background-color: rgba(0, 0, 0, 0.45);
  1810. }
  1811. .matrixs {
  1812. width: 100%;
  1813. margin-top: 7px;
  1814. .matrix-title {
  1815. display: flex;
  1816. flex-direction: row;
  1817. align-items: center;
  1818. width: 100%;
  1819. height: 32px;
  1820. background-color: rgba(96, 103, 105, 0.4);
  1821. font-size: 12px;
  1822. font-family: SourceHanSansCN;
  1823. font-weight: 400;
  1824. color: #05bb4c;
  1825. padding: 0 12px;
  1826. .matrix-svg {
  1827. flex: 0 0 auto;
  1828. margin-right: 10px;
  1829. display: flex;
  1830. align-items: center;
  1831. }
  1832. &.active {
  1833. color: #fc8004;
  1834. }
  1835. .station-name {
  1836. margin-left: 5px;
  1837. margin-right: 18px;
  1838. }
  1839. .indicator {
  1840. display: flex;
  1841. flex-direction: row;
  1842. align-items: center;
  1843. width: 93%;
  1844. height: 100%;
  1845. white-space: nowrap;
  1846. }
  1847. .sub-title-item {
  1848. display: flex;
  1849. flex-direction: row;
  1850. align-items: center;
  1851. // width: 7%;
  1852. width: 8%;
  1853. height: 100%;
  1854. margin-right: 20px;
  1855. font-size: 12px;
  1856. font-family: Microsoft YaHei;
  1857. font-weight: 400;
  1858. color: #b3b3b3;
  1859. &.active {
  1860. cursor: pointer;
  1861. }
  1862. &.active1 {
  1863. // width: 5%;
  1864. width: 6%;
  1865. }
  1866. .sub-value {
  1867. font-size: 14px;
  1868. font-family: Arial;
  1869. font-weight: 400;
  1870. margin-left: 5px;
  1871. }
  1872. }
  1873. }
  1874. .matrix-list {
  1875. display: grid;
  1876. justify-content: space-between;
  1877. grid-template-columns: repeat(auto-fill, 142px);
  1878. width: 100%;
  1879. margin-top: 5px;
  1880. .matrix-card {
  1881. display: flex;
  1882. flex-direction: column;
  1883. width: 142px;
  1884. height: 59px;
  1885. margin-right: 2px;
  1886. margin-bottom: 2px;
  1887. background-color: rgba(0, 0, 0, 0.5);
  1888. .info {
  1889. display: flex;
  1890. flex-direction: row;
  1891. align-items: center;
  1892. width: 100%;
  1893. height: 50px;
  1894. position: relative;
  1895. .isWarn {
  1896. position: absolute;
  1897. left: 3px;
  1898. top: 3px;
  1899. width: 8px;
  1900. height: 8px;
  1901. background: #ffd700;
  1902. border-radius: 20px;
  1903. }
  1904. .card-left {
  1905. width: 55px;
  1906. height: 100%;
  1907. display: flex;
  1908. flex-direction: column;
  1909. align-items: center;
  1910. .lock {
  1911. width: 0;
  1912. height: 0;
  1913. border-top: 8px solid #fff;
  1914. border-right: 8px solid transparent;
  1915. position: absolute;
  1916. top: 0;
  1917. left: 0;
  1918. }
  1919. .card-name {
  1920. font-size: 13px;
  1921. font-family: Arial;
  1922. font-weight: 400;
  1923. margin-top: 5px;
  1924. margin-bottom: 5px;
  1925. }
  1926. }
  1927. .card-right {
  1928. width: calc(100% - 1px - 55px);
  1929. display: flex;
  1930. flex-direction: column;
  1931. padding-left: 10px;
  1932. position: relative;
  1933. .right-item {
  1934. display: flex;
  1935. flex-direction: row;
  1936. align-items: center;
  1937. height: 15px;
  1938. .right-value {
  1939. font-size: 12px;
  1940. font-family: Arial;
  1941. font-weight: 400;
  1942. margin-left: 3px;
  1943. }
  1944. }
  1945. .card-hover {
  1946. position: absolute;
  1947. // width: 100px;
  1948. // height: 50px;
  1949. background-color: rgba(0, 0, 0, 1);
  1950. left: -30px;
  1951. top: -50px;
  1952. display: none;
  1953. }
  1954. }
  1955. .card-right:hover {
  1956. .card-hover {
  1957. display: block;
  1958. }
  1959. }
  1960. }
  1961. .matrix-progress {
  1962. display: flex;
  1963. flex-direction: row;
  1964. align-items: center;
  1965. width: 100%;
  1966. padding: 0 4px;
  1967. height: 8px;
  1968. .progress-block {
  1969. // width: 19px;
  1970. height: 3px;
  1971. background-color: #05bb4c;
  1972. // margin-right: 2px;
  1973. &.upGreen {
  1974. background-color: rgba(87, 207, 58, 1);
  1975. }
  1976. &.upSkyBlue {
  1977. background-color: rgba(14, 199, 220, 1);
  1978. }
  1979. &.upBlue {
  1980. background-color: rgba(25, 116, 255, 1);
  1981. }
  1982. &.upPurple {
  1983. background-color: rgba(205, 76, 221, 1);
  1984. }
  1985. &.upPink {
  1986. background-color: rgba(255, 60, 128, 1);
  1987. }
  1988. }
  1989. }
  1990. &.green {
  1991. border: 1px solid #05bb4c;
  1992. color: #05bb4c;
  1993. .info {
  1994. border-bottom: 1px solid #05bb4c;
  1995. background-color: rgba(5, 187, 76, 0.15);
  1996. .dashed {
  1997. width: 1px;
  1998. height: 100%;
  1999. background-image: linear-gradient(#05bb4c 0%,
  2000. #05bb4c 40%,
  2001. transparent 50%);
  2002. background-size: 1px 9px;
  2003. }
  2004. }
  2005. }
  2006. &.blue {
  2007. border: 1px solid #074ead;
  2008. color: #1c99ff;
  2009. .info {
  2010. border-bottom: 1px solid #074ead;
  2011. background-color: rgba(0, 70, 199, 0.25);
  2012. .dashed {
  2013. width: 1px;
  2014. height: 100%;
  2015. background-image: linear-gradient(#074ead 0%,
  2016. #074ead 40%,
  2017. transparent 50%);
  2018. background-size: 1px 9px;
  2019. }
  2020. }
  2021. }
  2022. &.pink {
  2023. border: 1px solid #c530c8;
  2024. color: #c530c8;
  2025. .info {
  2026. border-bottom: 1px solid #c530c8;
  2027. background-color: rgba(197, 48, 200, 0.15);
  2028. .dashed {
  2029. width: 1px;
  2030. height: 100%;
  2031. background-image: linear-gradient(#c530c8 0%,
  2032. #c530c8 40%,
  2033. transparent 50%);
  2034. background-size: 1px 9px;
  2035. }
  2036. }
  2037. }
  2038. &.red {
  2039. border: 1px solid #ba3237;
  2040. color: #ffffff;
  2041. .info {
  2042. border-bottom: 1px solid #ba3237;
  2043. background-color: rgba(186, 50, 55, 1);
  2044. .dashed {
  2045. width: 1px;
  2046. height: 100%;
  2047. background-image: linear-gradient(#e17d24 0%,
  2048. #e17d24 40%,
  2049. transparent 50%);
  2050. background-size: 1px 9px;
  2051. }
  2052. }
  2053. }
  2054. &.orange {
  2055. border: 1px solid #e17d24;
  2056. color: #e17d24;
  2057. .info {
  2058. border-bottom: 1px solid #e17d24;
  2059. background-color: rgba(225, 125, 36, 0.15);
  2060. .dashed {
  2061. width: 1px;
  2062. height: 100%;
  2063. background-image: linear-gradient(#e17d24 0%,
  2064. #e17d24 40%,
  2065. transparent 50%);
  2066. background-size: 1px 9px;
  2067. }
  2068. }
  2069. }
  2070. &.write {
  2071. border: 1px solid #51555a;
  2072. color: #ffffff;
  2073. .info {
  2074. border-bottom: 1px solid #51555a;
  2075. background-color: rgba(81, 85, 90, 1);
  2076. .dashed {
  2077. width: 1px;
  2078. height: 100%;
  2079. background-image: linear-gradient(#262626 0%,
  2080. #262626 40%,
  2081. transparent 50%);
  2082. background-size: 1px 9px;
  2083. }
  2084. }
  2085. }
  2086. &.gray {
  2087. border: 1px solid #606769;
  2088. color: #a7a7a7;
  2089. .info {
  2090. border-bottom: 1px solid #606769;
  2091. background-color: rgba(96, 103, 105, 0.2);
  2092. .dashed {
  2093. width: 1px;
  2094. height: 100%;
  2095. background-image: linear-gradient(#262626 0%,
  2096. #262626 40%,
  2097. transparent 50%);
  2098. background-size: 1px 9px;
  2099. }
  2100. }
  2101. }
  2102. &.pansy {
  2103. border: 1px solid #40E0D0;
  2104. color: #a7a7a7;
  2105. .info {
  2106. border-bottom: 1px solid #40E0D0;
  2107. background-color: rgba(64, 224,205, 0.2);
  2108. .dashed {
  2109. width: 1px;
  2110. height: 100%;
  2111. background-image: linear-gradient(#40E0D0 0%,
  2112. #40E0D0 40%,
  2113. transparent 50%);
  2114. background-size: 1px 9px;
  2115. }
  2116. }
  2117. }
  2118. &.peachpuff {
  2119. border: 1px solid #ffbe98;
  2120. color: #a7a7a7;
  2121. .info {
  2122. border-bottom: 1px solid #ffbe98;
  2123. background-color: rgba(255, 218, 185, 0.2);
  2124. .dashed {
  2125. width: 1px;
  2126. height: 100%;
  2127. background-image: linear-gradient(#ffbe98 0%,
  2128. #ffbe98 40%,
  2129. transparent 50%);
  2130. background-size: 1px 9px;
  2131. }
  2132. }
  2133. }
  2134. }
  2135. }
  2136. }
  2137. .active_vie {
  2138. width: 100%;
  2139. margin-top: 0;
  2140. margin-bottom: 5px;
  2141. .matrix-list {
  2142. display: grid;
  2143. justify-content: space-between;
  2144. grid-template-columns: repeat(auto-fill, 114px);
  2145. width: 100%;
  2146. margin-top: 0;
  2147. }
  2148. }
  2149. }
  2150. }
  2151. .clearfix::after {
  2152. content: "";
  2153. clear: both;
  2154. height: 0;
  2155. line-height: 0;
  2156. visibility: hidden;
  2157. display: block;
  2158. }
  2159. .clearfix {
  2160. zoom: 1;
  2161. }
  2162. </style>