index.vue 59 KB

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