index.vue 73 KB

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