index_backup.vue 95 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364
  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. background: #1f2d5b;
  1811. }
  1812. .matrixs {
  1813. width: 100%;
  1814. margin-top: 7px;
  1815. .matrix-title {
  1816. display: flex;
  1817. flex-direction: row;
  1818. align-items: center;
  1819. width: 100%;
  1820. height: 32px;
  1821. background-color: rgba(96, 103, 105, 0.4);
  1822. font-size: 12px;
  1823. font-family: SourceHanSansCN;
  1824. font-weight: 400;
  1825. color: #05bb4c;
  1826. padding: 0 12px;
  1827. .matrix-svg {
  1828. flex: 0 0 auto;
  1829. margin-right: 10px;
  1830. display: flex;
  1831. align-items: center;
  1832. }
  1833. &.active {
  1834. color: #fc8004;
  1835. }
  1836. .station-name {
  1837. margin-left: 5px;
  1838. margin-right: 18px;
  1839. }
  1840. .indicator {
  1841. display: flex;
  1842. flex-direction: row;
  1843. align-items: center;
  1844. width: 93%;
  1845. height: 100%;
  1846. white-space: nowrap;
  1847. }
  1848. .sub-title-item {
  1849. display: flex;
  1850. flex-direction: row;
  1851. align-items: center;
  1852. // width: 7%;
  1853. width: 8%;
  1854. height: 100%;
  1855. margin-right: 20px;
  1856. font-size: 12px;
  1857. font-family: Microsoft YaHei;
  1858. font-weight: 400;
  1859. color: #b3b3b3;
  1860. &.active {
  1861. cursor: pointer;
  1862. }
  1863. &.active1 {
  1864. // width: 5%;
  1865. width: 6%;
  1866. }
  1867. .sub-value {
  1868. font-size: 14px;
  1869. font-family: Arial;
  1870. font-weight: 400;
  1871. margin-left: 5px;
  1872. }
  1873. }
  1874. }
  1875. .matrix-list {
  1876. display: grid;
  1877. justify-content: space-between;
  1878. grid-template-columns: repeat(auto-fill, 142px);
  1879. width: 100%;
  1880. margin-top: 5px;
  1881. .matrix-card {
  1882. display: flex;
  1883. flex-direction: column;
  1884. width: 142px;
  1885. height: 59px;
  1886. margin-right: 2px;
  1887. margin-bottom: 2px;
  1888. background-color: rgba(0, 0, 0, 0.5);
  1889. .info {
  1890. display: flex;
  1891. flex-direction: row;
  1892. align-items: center;
  1893. width: 100%;
  1894. height: 50px;
  1895. position: relative;
  1896. .isWarn {
  1897. position: absolute;
  1898. left: 3px;
  1899. top: 3px;
  1900. width: 8px;
  1901. height: 8px;
  1902. background: #ffd700;
  1903. border-radius: 20px;
  1904. }
  1905. .card-left {
  1906. width: 55px;
  1907. height: 100%;
  1908. display: flex;
  1909. flex-direction: column;
  1910. align-items: center;
  1911. .lock {
  1912. width: 0;
  1913. height: 0;
  1914. border-top: 8px solid #fff;
  1915. border-right: 8px solid transparent;
  1916. position: absolute;
  1917. top: 0;
  1918. left: 0;
  1919. }
  1920. .card-name {
  1921. font-size: 13px;
  1922. font-family: Arial;
  1923. font-weight: 400;
  1924. margin-top: 5px;
  1925. margin-bottom: 5px;
  1926. }
  1927. }
  1928. .card-right {
  1929. width: calc(100% - 1px - 55px);
  1930. display: flex;
  1931. flex-direction: column;
  1932. padding-left: 10px;
  1933. position: relative;
  1934. .right-item {
  1935. display: flex;
  1936. flex-direction: row;
  1937. align-items: center;
  1938. height: 15px;
  1939. .right-value {
  1940. font-size: 12px;
  1941. font-family: Arial;
  1942. font-weight: 400;
  1943. margin-left: 3px;
  1944. }
  1945. }
  1946. .card-hover {
  1947. position: absolute;
  1948. // width: 100px;
  1949. // height: 50px;
  1950. background-color: rgba(0, 0, 0, 1);
  1951. left: -30px;
  1952. top: -50px;
  1953. display: none;
  1954. }
  1955. }
  1956. .card-right:hover {
  1957. .card-hover {
  1958. display: block;
  1959. }
  1960. }
  1961. }
  1962. .matrix-progress {
  1963. display: flex;
  1964. flex-direction: row;
  1965. align-items: center;
  1966. width: 100%;
  1967. padding: 0 4px;
  1968. height: 8px;
  1969. .progress-block {
  1970. // width: 19px;
  1971. height: 3px;
  1972. background-color: #05bb4c;
  1973. // margin-right: 2px;
  1974. &.upGreen {
  1975. background-color: rgba(87, 207, 58, 1);
  1976. }
  1977. &.upSkyBlue {
  1978. background-color: rgba(14, 199, 220, 1);
  1979. }
  1980. &.upBlue {
  1981. background-color: rgba(25, 116, 255, 1);
  1982. }
  1983. &.upPurple {
  1984. background-color: rgba(205, 76, 221, 1);
  1985. }
  1986. &.upPink {
  1987. background-color: rgba(255, 60, 128, 1);
  1988. }
  1989. }
  1990. }
  1991. &.green {
  1992. border: 1px solid #05bb4c;
  1993. color: #05bb4c;
  1994. .info {
  1995. border-bottom: 1px solid #05bb4c;
  1996. background-color: rgba(5, 187, 76, 0.15);
  1997. .dashed {
  1998. width: 1px;
  1999. height: 100%;
  2000. background-image: linear-gradient(#05bb4c 0%,
  2001. #05bb4c 40%,
  2002. transparent 50%);
  2003. background-size: 1px 9px;
  2004. }
  2005. }
  2006. }
  2007. &.blue {
  2008. border: 1px solid #074ead;
  2009. color: #1c99ff;
  2010. .info {
  2011. border-bottom: 1px solid #074ead;
  2012. background-color: rgba(0, 70, 199, 0.25);
  2013. .dashed {
  2014. width: 1px;
  2015. height: 100%;
  2016. background-image: linear-gradient(#074ead 0%,
  2017. #074ead 40%,
  2018. transparent 50%);
  2019. background-size: 1px 9px;
  2020. }
  2021. }
  2022. }
  2023. &.pink {
  2024. border: 1px solid #c530c8;
  2025. color: #c530c8;
  2026. .info {
  2027. border-bottom: 1px solid #c530c8;
  2028. background-color: rgba(197, 48, 200, 0.15);
  2029. .dashed {
  2030. width: 1px;
  2031. height: 100%;
  2032. background-image: linear-gradient(#c530c8 0%,
  2033. #c530c8 40%,
  2034. transparent 50%);
  2035. background-size: 1px 9px;
  2036. }
  2037. }
  2038. }
  2039. &.red {
  2040. border: 1px solid #ba3237;
  2041. color: #ffffff;
  2042. .info {
  2043. border-bottom: 1px solid #ba3237;
  2044. background-color: rgba(186, 50, 55, 1);
  2045. .dashed {
  2046. width: 1px;
  2047. height: 100%;
  2048. background-image: linear-gradient(#e17d24 0%,
  2049. #e17d24 40%,
  2050. transparent 50%);
  2051. background-size: 1px 9px;
  2052. }
  2053. }
  2054. }
  2055. &.orange {
  2056. border: 1px solid #e17d24;
  2057. color: #e17d24;
  2058. .info {
  2059. border-bottom: 1px solid #e17d24;
  2060. background-color: rgba(225, 125, 36, 0.15);
  2061. .dashed {
  2062. width: 1px;
  2063. height: 100%;
  2064. background-image: linear-gradient(#e17d24 0%,
  2065. #e17d24 40%,
  2066. transparent 50%);
  2067. background-size: 1px 9px;
  2068. }
  2069. }
  2070. }
  2071. &.write {
  2072. border: 1px solid #51555a;
  2073. color: #ffffff;
  2074. .info {
  2075. border-bottom: 1px solid #51555a;
  2076. background-color: rgba(81, 85, 90, 1);
  2077. .dashed {
  2078. width: 1px;
  2079. height: 100%;
  2080. background-image: linear-gradient(#262626 0%,
  2081. #262626 40%,
  2082. transparent 50%);
  2083. background-size: 1px 9px;
  2084. }
  2085. }
  2086. }
  2087. &.gray {
  2088. border: 1px solid #606769;
  2089. color: #a7a7a7;
  2090. .info {
  2091. border-bottom: 1px solid #606769;
  2092. background-color: rgba(96, 103, 105, 0.2);
  2093. .dashed {
  2094. width: 1px;
  2095. height: 100%;
  2096. background-image: linear-gradient(#262626 0%,
  2097. #262626 40%,
  2098. transparent 50%);
  2099. background-size: 1px 9px;
  2100. }
  2101. }
  2102. }
  2103. &.pansy {
  2104. border: 1px solid #40E0D0;
  2105. color: #a7a7a7;
  2106. .info {
  2107. border-bottom: 1px solid #40E0D0;
  2108. background-color: rgba(64, 224,205, 0.2);
  2109. .dashed {
  2110. width: 1px;
  2111. height: 100%;
  2112. background-image: linear-gradient(#40E0D0 0%,
  2113. #40E0D0 40%,
  2114. transparent 50%);
  2115. background-size: 1px 9px;
  2116. }
  2117. }
  2118. }
  2119. &.peachpuff {
  2120. border: 1px solid #ffbe98;
  2121. color: #a7a7a7;
  2122. .info {
  2123. border-bottom: 1px solid #ffbe98;
  2124. background-color: rgba(255, 218, 185, 0.2);
  2125. .dashed {
  2126. width: 1px;
  2127. height: 100%;
  2128. background-image: linear-gradient(#ffbe98 0%,
  2129. #ffbe98 40%,
  2130. transparent 50%);
  2131. background-size: 1px 9px;
  2132. }
  2133. }
  2134. }
  2135. }
  2136. }
  2137. }
  2138. .active_vie {
  2139. width: 100%;
  2140. margin-top: 0;
  2141. margin-bottom: 5px;
  2142. .matrix-list {
  2143. display: grid;
  2144. justify-content: space-between;
  2145. grid-template-columns: repeat(auto-fill, 114px);
  2146. width: 100%;
  2147. margin-top: 0;
  2148. }
  2149. }
  2150. }
  2151. }
  2152. .clearfix::after {
  2153. content: "";
  2154. clear: both;
  2155. height: 0;
  2156. line-height: 0;
  2157. visibility: hidden;
  2158. display: block;
  2159. }
  2160. .clearfix {
  2161. zoom: 1;
  2162. }
  2163. </style>