index.vue 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715
  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>MW</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>MW</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. margin-top: 20px;
  1441. display: flex;
  1442. flex-direction: column;
  1443. height: 100%;
  1444. padding-right: 20px;
  1445. padding-left: 20px;
  1446. padding-bottom: 5px;
  1447. .body-title {
  1448. display: flex;
  1449. flex-direction: row;
  1450. align-items: center;
  1451. width: 100%;
  1452. height: 78px;
  1453. background-color: rgba(0, 0, 0, 0.45);
  1454. border-radius: 10px;
  1455. .base-inf {
  1456. display: flex;
  1457. flex-direction: row;
  1458. align-items: center;
  1459. width: 100%;
  1460. height: 100%;
  1461. .title-name {
  1462. display: flex;
  1463. flex-direction: row;
  1464. align-items: center;
  1465. width: 10%;
  1466. height: 100%;
  1467. .imgs {
  1468. display: flex;
  1469. flex-direction: row;
  1470. align-items: center;
  1471. height: 100%;
  1472. margin-left: 11px;
  1473. }
  1474. .base-num {
  1475. display: flex;
  1476. flex-direction: column;
  1477. align-items: center;
  1478. justify-content: center;
  1479. cursor: pointer;
  1480. .nums {
  1481. font-size: 18px;
  1482. font-family: Arial;
  1483. color: #ffffff;
  1484. }
  1485. .base-name {
  1486. font-size: 14px;
  1487. font-family: Microsoft YaHei;
  1488. color: #b3b3b3;
  1489. margin-bottom: 10px;
  1490. }
  1491. &.active {
  1492. font-weight: 700;
  1493. }
  1494. }
  1495. .all_img {
  1496. width: 20px;
  1497. position: relative;
  1498. left: -34px;
  1499. top: 1px;
  1500. margin-right: 10px;
  1501. animation: move 1s infinite linear;
  1502. }
  1503. .qty_img {
  1504. position: relative;
  1505. left: -39px;
  1506. top: 1px;
  1507. animation: move 1s infinite linear;
  1508. }
  1509. @keyframes move {
  1510. 0% {
  1511. top: 0px;
  1512. }
  1513. 20% {
  1514. top: -1px;
  1515. }
  1516. 40% {
  1517. top: -2px;
  1518. }
  1519. 80% {
  1520. top: -1px;
  1521. }
  1522. 100% {
  1523. top: 0px;
  1524. }
  1525. }
  1526. }
  1527. .matrix-status {
  1528. width: 90%;
  1529. display: flex;
  1530. flex-direction: row;
  1531. align-items: center;
  1532. height: 80%;
  1533. }
  1534. .title-status {
  1535. display: flex;
  1536. flex-direction: column;
  1537. width: 17%;
  1538. height: 100%;
  1539. padding-right: 5px;
  1540. cursor: pointer;
  1541. &.static {
  1542. cursor: auto;
  1543. }
  1544. .status-first {
  1545. width: 100%;
  1546. height: 34%;
  1547. display: flex;
  1548. flex-direction: row;
  1549. align-items: center;
  1550. justify-content: space-between;
  1551. .matrix-status-left {
  1552. margin-left: 6px;
  1553. font-size: 14px;
  1554. font-family: Microsoft YaHei;
  1555. }
  1556. .matrix-status-right {
  1557. margin-right: 6px;
  1558. font-size: 16px;
  1559. font-family: Arial;
  1560. }
  1561. &.active {
  1562. font-weight: 700;
  1563. .matrix-status-left {
  1564. font-size: 15px;
  1565. }
  1566. .matrix-status-right {
  1567. font-size: 17px;
  1568. }
  1569. }
  1570. }
  1571. .status-end {
  1572. width: 100%;
  1573. // height: 33%;
  1574. height: 50%;
  1575. display: flex;
  1576. flex-direction: row;
  1577. align-items: center;
  1578. justify-content: space-between;
  1579. .matrix-status-left {
  1580. margin-left: 6px;
  1581. font-size: 12px;
  1582. font-family: Microsoft YaHei;
  1583. }
  1584. .matrix-status-right {
  1585. margin-right: 6px;
  1586. font-size: 14px;
  1587. font-family: Arial;
  1588. }
  1589. &.active {
  1590. font-weight: 700;
  1591. .matrix-status-left {
  1592. font-size: 13px;
  1593. }
  1594. .matrix-status-right {
  1595. font-size: 15px;
  1596. }
  1597. }
  1598. }
  1599. .matrix-status-right {
  1600. margin-right: 6px;
  1601. }
  1602. &.green {
  1603. .status-first {
  1604. background-color: rgba(5, 187, 76, 0.28);
  1605. border-top: 1px solid #0b3d26;
  1606. border-left: 1px solid #0b3d26;
  1607. border-right: 1px solid #0b3d26;
  1608. .matrix-status-left {
  1609. color: #05bb4c;
  1610. }
  1611. .matrix-status-right {
  1612. color: #05bb4c;
  1613. }
  1614. }
  1615. .status-end {
  1616. background-color: rgba(5, 187, 76, 0.16);
  1617. border-left: 1px solid #0b3d26;
  1618. border-right: 1px solid #0b3d26;
  1619. border-bottom: 1px solid #0b3d26;
  1620. .matrix-status-left {
  1621. color: #05bb4c;
  1622. }
  1623. .matrix-status-right {
  1624. color: #05bb4c;
  1625. }
  1626. }
  1627. .matrix-status-right {
  1628. margin-right: 6px;
  1629. }
  1630. }
  1631. &.blue {
  1632. .status-first {
  1633. background-color: rgba(0, 70, 199, 0.48);
  1634. border-top: 1px solid #1e2341;
  1635. border-left: 1px solid #1e2341;
  1636. border-right: 1px solid #1e2341;
  1637. .matrix-status-left {
  1638. color: #1c99ff;
  1639. }
  1640. .matrix-status-right {
  1641. color: #1c99ff;
  1642. }
  1643. }
  1644. .status-end {
  1645. background-color: rgba(0, 70, 199, 0.16);
  1646. border-left: 1px solid #1e2341;
  1647. border-right: 1px solid #1e2341;
  1648. border-bottom: 1px solid #1e2341;
  1649. .matrix-status-left {
  1650. color: #1c99ff;
  1651. }
  1652. .matrix-status-right {
  1653. color: #1c99ff;
  1654. }
  1655. }
  1656. .matrix-status-right {
  1657. margin-right: 6px;
  1658. }
  1659. }
  1660. &.pink {
  1661. .status-first {
  1662. background-color: rgba(197, 48, 200, 0.28);
  1663. border-top: 1px solid #3e1a48;
  1664. border-left: 1px solid #3e1a48;
  1665. border-right: 1px solid #3e1a48;
  1666. .matrix-status-left {
  1667. color: #c530c8;
  1668. }
  1669. .matrix-status-right {
  1670. color: #c530c8;
  1671. }
  1672. }
  1673. .status-end {
  1674. background-color: rgba(197, 48, 200, 0.16);
  1675. border-left: 1px solid #3e1a48;
  1676. border-right: 1px solid #3e1a48;
  1677. border-bottom: 1px solid #3e1a48;
  1678. .matrix-status-left {
  1679. color: #c530c8;
  1680. }
  1681. .matrix-status-right {
  1682. color: #c530c8;
  1683. }
  1684. }
  1685. .matrix-status-right {
  1686. margin-right: 6px;
  1687. }
  1688. }
  1689. &.red {
  1690. .status-first {
  1691. background-color: rgba(186, 50, 55, 0.28);
  1692. border-top: 1px solid #3c1c1f;
  1693. border-left: 1px solid #3c1c1f;
  1694. border-right: 1px solid #3c1c1f;
  1695. .matrix-status-left {
  1696. color: #ba3237;
  1697. }
  1698. .matrix-status-right {
  1699. color: #ba3237;
  1700. }
  1701. }
  1702. .status-end {
  1703. background-color: rgba(186, 50, 55, 0.16);
  1704. border-left: 1px solid #3c1c1f;
  1705. border-right: 1px solid #3c1c1f;
  1706. border-bottom: 1px solid #3c1c1f;
  1707. .matrix-status-left {
  1708. color: #ba3237;
  1709. }
  1710. .matrix-status-right {
  1711. color: #ba3237;
  1712. }
  1713. }
  1714. .matrix-status-right {
  1715. margin-right: 6px;
  1716. }
  1717. }
  1718. &.orange {
  1719. .status-first {
  1720. background-color: rgba(225, 125, 36, 0.28);
  1721. border-top: 1px solid #46301a;
  1722. border-left: 1px solid #46301a;
  1723. border-right: 1px solid #46301a;
  1724. .matrix-status-left {
  1725. color: #e17d24;
  1726. }
  1727. .matrix-status-right {
  1728. color: #e17d24;
  1729. }
  1730. }
  1731. .status-end {
  1732. background-color: rgba(225, 125, 36, 0.16);
  1733. border-left: 1px solid #46301a;
  1734. border-right: 1px solid #46301a;
  1735. border-bottom: 1px solid #46301a;
  1736. .matrix-status-left {
  1737. color: #e17d24;
  1738. }
  1739. .matrix-status-right {
  1740. color: #e17d24;
  1741. }
  1742. }
  1743. .matrix-status-right {
  1744. margin-right: 6px;
  1745. }
  1746. }
  1747. &.gray {
  1748. .status-first {
  1749. background-color: rgba(96, 103, 105, 0.28);
  1750. border-top: 1px solid #262b32;
  1751. border-left: 1px solid #262b32;
  1752. border-right: 1px solid #262b32;
  1753. .matrix-status-left {
  1754. color: #606769;
  1755. }
  1756. .matrix-status-right {
  1757. color: #606769;
  1758. }
  1759. }
  1760. .status-end {
  1761. background-color: rgba(96, 103, 105, 0.16);
  1762. border-left: 1px solid #262b32;
  1763. border-right: 1px solid #262b32;
  1764. border-bottom: 1px solid #262b32;
  1765. .matrix-status-left {
  1766. color: #606769;
  1767. }
  1768. .matrix-status-right {
  1769. color: #606769;
  1770. }
  1771. }
  1772. .matrix-status-right {
  1773. margin-right: 6px;
  1774. }
  1775. }
  1776. &.write {
  1777. .status-first {
  1778. background-color: rgba(255, 255, 255, 0.28);
  1779. border-top: 1px solid #3f4349;
  1780. border-left: 1px solid #3f4349;
  1781. border-right: 1px solid #3f4349;
  1782. .matrix-status-left {
  1783. color: #ffffff;
  1784. }
  1785. .matrix-status-right {
  1786. color: #ffffff;
  1787. }
  1788. }
  1789. .status-end {
  1790. background-color: rgba(255, 255, 255, 0.16);
  1791. border-left: 1px solid #3f4349;
  1792. border-right: 1px solid #3f4349;
  1793. border-bottom: 1px solid #3f4349;
  1794. .matrix-status-left {
  1795. color: #ffffff;
  1796. }
  1797. .matrix-status-right {
  1798. color: #ffffff;
  1799. }
  1800. }
  1801. .matrix-status-right {
  1802. margin-right: 6px;
  1803. }
  1804. }
  1805. &.pansy {
  1806. .status-first {
  1807. background-color: rgba(64, 224, 205, 0.28);
  1808. border-top: 1px solid #335f5b;
  1809. border-left: 1px solid #335f5b;
  1810. border-right: 1px solid #335f5b;
  1811. .matrix-status-left {
  1812. color: #40e0d0;
  1813. }
  1814. .matrix-status-right {
  1815. color: #40e0d0;
  1816. }
  1817. }
  1818. .status-end {
  1819. background-color: rgba(64, 224, 205, 0.16);
  1820. border-left: 1px solid #335f5b;
  1821. border-right: 1px solid #335f5b;
  1822. border-bottom: 1px solid #335f5b;
  1823. .matrix-status-left {
  1824. color: #40e0d0;
  1825. }
  1826. .matrix-status-right {
  1827. color: #40e0d0;
  1828. }
  1829. }
  1830. .matrix-status-right {
  1831. margin-right: 6px;
  1832. }
  1833. }
  1834. &.peachpuff {
  1835. .status-first {
  1836. background-color: rgba(255, 218, 185, 0.28);
  1837. border-top: 1px solid #554135;
  1838. border-left: 1px solid #554135;
  1839. border-right: 1px solid #554135;
  1840. .matrix-status-left {
  1841. color: #ffbe98;
  1842. }
  1843. .matrix-status-right {
  1844. color: #ffbe98;
  1845. }
  1846. }
  1847. .status-end {
  1848. background-color: rgba(255, 218, 185, 0.16);
  1849. border-left: 1px solid #554135;
  1850. border-right: 1px solid #554135;
  1851. border-bottom: 1px solid #554135;
  1852. .matrix-status-left {
  1853. color: #ffbe98;
  1854. }
  1855. .matrix-status-right {
  1856. color: #ffbe98;
  1857. }
  1858. }
  1859. .matrix-status-right {
  1860. margin-right: 6px;
  1861. }
  1862. }
  1863. }
  1864. }
  1865. .unpaid {
  1866. display: flex;
  1867. flex-direction: row;
  1868. align-items: center;
  1869. width: 40%;
  1870. height: 100%;
  1871. .unpaid-item {
  1872. width: 20%;
  1873. height: 80%;
  1874. margin-right: 5px;
  1875. padding: 0 10px;
  1876. .unpaid-img {
  1877. width: 115px;
  1878. height: 39px;
  1879. }
  1880. .unpaid-value {
  1881. width: 90%;
  1882. display: flex;
  1883. flex-direction: row-reverse;
  1884. font-size: 18px;
  1885. font-family: Arial;
  1886. font-weight: 400;
  1887. color: #ff9f1f;
  1888. margin-top: -20px;
  1889. }
  1890. .unpaid-name {
  1891. width: 90%;
  1892. font-size: 14px;
  1893. font-family: Microsoft YaHei;
  1894. font-weight: 400;
  1895. color: #b3b3b3;
  1896. transform: translate(50%, -100%);
  1897. }
  1898. }
  1899. .unpaid-item1 {
  1900. width: 20%;
  1901. height: 80%;
  1902. margin-right: 5px;
  1903. &.upGreen {
  1904. .percent {
  1905. background-color: rgba(87, 207, 58, 0.8);
  1906. border-top: 1px solid rgba(87, 207, 58, 0.35);
  1907. border-left: 1px solid rgba(87, 207, 58, 0.35);
  1908. border-right: 1px solid rgba(87, 207, 58, 0.35);
  1909. }
  1910. .nums {
  1911. background-color: rgba(87, 207, 58, 0.35);
  1912. border-left: 1px solid rgba(87, 207, 58, 0.35);
  1913. border-right: 1px solid rgba(87, 207, 58, 0.35);
  1914. border-bottom: 1px solid rgba(87, 207, 58, 0.35);
  1915. }
  1916. }
  1917. &.upSkyBlue {
  1918. .percent {
  1919. background-color: rgba(14, 199, 220, 0.8);
  1920. border-top: 1px solid rgba(14, 199, 220, 0.35);
  1921. border-left: 1px solid rgba(14, 199, 220, 0.35);
  1922. border-right: 1px solid rgba(14, 199, 220, 0.35);
  1923. }
  1924. .nums {
  1925. background-color: rgba(14, 199, 220, 0.35);
  1926. border-left: 1px solid rgba(14, 199, 220, 0.35);
  1927. border-right: 1px solid rgba(14, 199, 220, 0.35);
  1928. border-bottom: 1px solid rgba(14, 199, 220, 0.35);
  1929. }
  1930. }
  1931. &.upBlue {
  1932. .percent {
  1933. background-color: rgba(25, 116, 255, 0.8);
  1934. border-top: 1px solid rgba(25, 116, 255, 0.35);
  1935. border-left: 1px solid rgba(25, 116, 255, 0.35);
  1936. border-right: 1px solid rgba(25, 116, 255, 0.35);
  1937. }
  1938. .nums {
  1939. background-color: rgba(25, 116, 255, 0.35);
  1940. border-left: 1px solid rgba(25, 116, 255, 0.35);
  1941. border-right: 1px solid rgba(25, 116, 255, 0.35);
  1942. border-bottom: 1px solid rgba(25, 116, 255, 0.35);
  1943. }
  1944. }
  1945. &.upPurple {
  1946. .percent {
  1947. background-color: rgba(205, 76, 221, 0.8);
  1948. border-top: 1px solid rgba(205, 76, 221, 0.35);
  1949. border-left: 1px solid rgba(205, 76, 221, 0.35);
  1950. border-right: 1px solid rgba(205, 76, 221, 0.35);
  1951. }
  1952. .nums {
  1953. background-color: rgba(205, 76, 221, 0.35);
  1954. border-left: 1px solid rgba(205, 76, 221, 0.35);
  1955. border-right: 1px solid rgba(205, 76, 221, 0.35);
  1956. border-bottom: 1px solid rgba(205, 76, 221, 0.35);
  1957. }
  1958. }
  1959. &.upPink {
  1960. .percent {
  1961. background-color: rgba(255, 60, 128, 0.8);
  1962. border-top: 1px solid rgba(255, 60, 128, 0.35);
  1963. border-left: 1px solid rgba(255, 60, 128, 0.35);
  1964. border-right: 1px solid rgba(255, 60, 128, 0.35);
  1965. }
  1966. .nums {
  1967. background-color: rgba(255, 60, 128, 0.35);
  1968. border-left: 1px solid rgba(255, 60, 128, 0.35);
  1969. border-right: 1px solid rgba(255, 60, 128, 0.35);
  1970. border-bottom: 1px solid rgba(255, 60, 128, 0.35);
  1971. }
  1972. }
  1973. .percent {
  1974. width: 100%;
  1975. height: 50%;
  1976. display: flex;
  1977. align-items: center;
  1978. justify-content: center;
  1979. font-size: 14px;
  1980. font-family: Arial;
  1981. font-weight: 400;
  1982. color: #ffffff;
  1983. }
  1984. .nums {
  1985. width: 100%;
  1986. height: 50%;
  1987. display: flex;
  1988. flex-direction: row;
  1989. align-items: center;
  1990. justify-content: center;
  1991. font-size: 16px;
  1992. font-family: Arial;
  1993. font-weight: 400;
  1994. color: #ffffff;
  1995. padding: 0 8px;
  1996. }
  1997. }
  1998. }
  1999. }
  2000. .matrix-box {
  2001. // background-color: rgba(0, 0, 0, 0.45);
  2002. background: #1f2d5b;
  2003. }
  2004. .matrixs {
  2005. width: 100%;
  2006. margin-top: 7px;
  2007. .matrix-title {
  2008. display: flex;
  2009. flex-direction: row;
  2010. align-items: center;
  2011. width: 100%;
  2012. height: 32px;
  2013. background-color: rgba(96, 103, 105, 0.4);
  2014. font-size: 12px;
  2015. font-family: SourceHanSansCN;
  2016. font-weight: 400;
  2017. color: #05bb4c;
  2018. padding: 0 12px;
  2019. .matrix-svg {
  2020. flex: 0 0 auto;
  2021. margin-right: 10px;
  2022. display: flex;
  2023. align-items: center;
  2024. }
  2025. &.active {
  2026. color: #fc8004;
  2027. }
  2028. .station-name {
  2029. margin-left: 5px;
  2030. margin-right: 18px;
  2031. }
  2032. .indicator {
  2033. display: flex;
  2034. flex-direction: row;
  2035. align-items: center;
  2036. width: 93%;
  2037. height: 100%;
  2038. white-space: nowrap;
  2039. }
  2040. .sub-title-item {
  2041. display: flex;
  2042. flex-direction: row;
  2043. align-items: center;
  2044. // width: 7%;
  2045. width: 8%;
  2046. height: 100%;
  2047. margin-right: 20px;
  2048. font-size: 12px;
  2049. font-family: Microsoft YaHei;
  2050. font-weight: 400;
  2051. color: #b3b3b3;
  2052. &.active {
  2053. cursor: pointer;
  2054. }
  2055. &.active1 {
  2056. // width: 5%;
  2057. width: 6%;
  2058. }
  2059. .sub-value {
  2060. font-size: 14px;
  2061. font-family: Arial;
  2062. font-weight: 400;
  2063. margin-left: 5px;
  2064. }
  2065. }
  2066. }
  2067. .matrix-list {
  2068. display: grid;
  2069. justify-content: space-between;
  2070. grid-template-columns: repeat(auto-fill, 142px);
  2071. width: 100%;
  2072. margin-top: 5px;
  2073. .matrix-card {
  2074. display: flex;
  2075. flex-direction: column;
  2076. width: 142px;
  2077. height: 59px;
  2078. margin-right: 2px;
  2079. margin-bottom: 2px;
  2080. background-color: rgba(0, 0, 0, 0.5);
  2081. .info {
  2082. display: flex;
  2083. flex-direction: row;
  2084. align-items: center;
  2085. width: 100%;
  2086. height: 50px;
  2087. position: relative;
  2088. .isWarn {
  2089. position: absolute;
  2090. left: 3px;
  2091. top: 3px;
  2092. width: 8px;
  2093. height: 8px;
  2094. background: #ffd700;
  2095. border-radius: 20px;
  2096. }
  2097. .card-left {
  2098. width: 55px;
  2099. height: 100%;
  2100. display: flex;
  2101. flex-direction: column;
  2102. align-items: center;
  2103. .lock {
  2104. width: 0;
  2105. height: 0;
  2106. border-top: 8px solid #fff;
  2107. border-right: 8px solid transparent;
  2108. position: absolute;
  2109. top: 0;
  2110. left: 0;
  2111. }
  2112. .card-name {
  2113. font-size: 13px;
  2114. font-family: Arial;
  2115. font-weight: 400;
  2116. margin-top: 5px;
  2117. margin-bottom: 5px;
  2118. }
  2119. }
  2120. .card-right {
  2121. width: calc(100% - 1px - 55px);
  2122. display: flex;
  2123. flex-direction: column;
  2124. padding-left: 10px;
  2125. position: relative;
  2126. .right-item {
  2127. display: flex;
  2128. flex-direction: row;
  2129. align-items: center;
  2130. height: 15px;
  2131. .right-value {
  2132. font-size: 12px;
  2133. font-family: Arial;
  2134. font-weight: 400;
  2135. margin-left: 3px;
  2136. }
  2137. }
  2138. .card-hover {
  2139. position: absolute;
  2140. // width: 100px;
  2141. // height: 50px;
  2142. background-color: rgba(0, 0, 0, 1);
  2143. left: -30px;
  2144. top: -50px;
  2145. display: none;
  2146. }
  2147. }
  2148. .card-right:hover {
  2149. .card-hover {
  2150. display: block;
  2151. }
  2152. }
  2153. }
  2154. .matrix-progress {
  2155. display: flex;
  2156. flex-direction: row;
  2157. align-items: center;
  2158. width: 100%;
  2159. padding: 0 4px;
  2160. height: 8px;
  2161. .progress-block {
  2162. // width: 19px;
  2163. height: 3px;
  2164. background-color: #05bb4c;
  2165. // margin-right: 2px;
  2166. &.upGreen {
  2167. background-color: rgba(87, 207, 58, 1);
  2168. }
  2169. &.upSkyBlue {
  2170. background-color: rgba(14, 199, 220, 1);
  2171. }
  2172. &.upBlue {
  2173. background-color: rgba(25, 116, 255, 1);
  2174. }
  2175. &.upPurple {
  2176. background-color: rgba(205, 76, 221, 1);
  2177. }
  2178. &.upPink {
  2179. background-color: rgba(255, 60, 128, 1);
  2180. }
  2181. }
  2182. }
  2183. &.green {
  2184. border: 1px solid #05bb4c;
  2185. color: #05bb4c;
  2186. .info {
  2187. border-bottom: 1px solid #05bb4c;
  2188. background-color: rgba(5, 187, 76, 0.15);
  2189. .dashed {
  2190. width: 1px;
  2191. height: 100%;
  2192. background-image: linear-gradient(
  2193. #05bb4c 0%,
  2194. #05bb4c 40%,
  2195. transparent 50%
  2196. );
  2197. background-size: 1px 9px;
  2198. }
  2199. }
  2200. }
  2201. &.blue {
  2202. border: 1px solid #074ead;
  2203. color: #1c99ff;
  2204. .info {
  2205. border-bottom: 1px solid #074ead;
  2206. background-color: rgba(0, 70, 199, 0.25);
  2207. .dashed {
  2208. width: 1px;
  2209. height: 100%;
  2210. background-image: linear-gradient(
  2211. #074ead 0%,
  2212. #074ead 40%,
  2213. transparent 50%
  2214. );
  2215. background-size: 1px 9px;
  2216. }
  2217. }
  2218. }
  2219. &.pink {
  2220. border: 1px solid #c530c8;
  2221. color: #c530c8;
  2222. .info {
  2223. border-bottom: 1px solid #c530c8;
  2224. background-color: rgba(197, 48, 200, 0.15);
  2225. .dashed {
  2226. width: 1px;
  2227. height: 100%;
  2228. background-image: linear-gradient(
  2229. #c530c8 0%,
  2230. #c530c8 40%,
  2231. transparent 50%
  2232. );
  2233. background-size: 1px 9px;
  2234. }
  2235. }
  2236. }
  2237. &.red {
  2238. border: 1px solid #ba3237;
  2239. color: #ffffff;
  2240. .info {
  2241. border-bottom: 1px solid #ba3237;
  2242. background-color: rgba(186, 50, 55, 1);
  2243. .dashed {
  2244. width: 1px;
  2245. height: 100%;
  2246. background-image: linear-gradient(
  2247. #e17d24 0%,
  2248. #e17d24 40%,
  2249. transparent 50%
  2250. );
  2251. background-size: 1px 9px;
  2252. }
  2253. }
  2254. }
  2255. &.orange {
  2256. border: 1px solid #e17d24;
  2257. color: #e17d24;
  2258. .info {
  2259. border-bottom: 1px solid #e17d24;
  2260. background-color: rgba(225, 125, 36, 0.15);
  2261. .dashed {
  2262. width: 1px;
  2263. height: 100%;
  2264. background-image: linear-gradient(
  2265. #e17d24 0%,
  2266. #e17d24 40%,
  2267. transparent 50%
  2268. );
  2269. background-size: 1px 9px;
  2270. }
  2271. }
  2272. }
  2273. &.write {
  2274. border: 1px solid #51555a;
  2275. color: #ffffff;
  2276. .info {
  2277. border-bottom: 1px solid #51555a;
  2278. background-color: rgba(81, 85, 90, 1);
  2279. .dashed {
  2280. width: 1px;
  2281. height: 100%;
  2282. background-image: linear-gradient(
  2283. #262626 0%,
  2284. #262626 40%,
  2285. transparent 50%
  2286. );
  2287. background-size: 1px 9px;
  2288. }
  2289. }
  2290. }
  2291. &.gray {
  2292. border: 1px solid #606769;
  2293. color: #a7a7a7;
  2294. .info {
  2295. border-bottom: 1px solid #606769;
  2296. background-color: rgba(96, 103, 105, 0.2);
  2297. .dashed {
  2298. width: 1px;
  2299. height: 100%;
  2300. background-image: linear-gradient(
  2301. #262626 0%,
  2302. #262626 40%,
  2303. transparent 50%
  2304. );
  2305. background-size: 1px 9px;
  2306. }
  2307. }
  2308. }
  2309. &.pansy {
  2310. border: 1px solid #40e0d0;
  2311. color: #a7a7a7;
  2312. .info {
  2313. border-bottom: 1px solid #40e0d0;
  2314. background-color: rgba(64, 224, 205, 0.2);
  2315. .dashed {
  2316. width: 1px;
  2317. height: 100%;
  2318. background-image: linear-gradient(
  2319. #40e0d0 0%,
  2320. #40e0d0 40%,
  2321. transparent 50%
  2322. );
  2323. background-size: 1px 9px;
  2324. }
  2325. }
  2326. }
  2327. &.peachpuff {
  2328. border: 1px solid #ffbe98;
  2329. color: #a7a7a7;
  2330. .info {
  2331. border-bottom: 1px solid #ffbe98;
  2332. background-color: rgba(255, 218, 185, 0.2);
  2333. .dashed {
  2334. width: 1px;
  2335. height: 100%;
  2336. background-image: linear-gradient(
  2337. #ffbe98 0%,
  2338. #ffbe98 40%,
  2339. transparent 50%
  2340. );
  2341. background-size: 1px 9px;
  2342. }
  2343. }
  2344. }
  2345. }
  2346. }
  2347. }
  2348. .active_vie {
  2349. width: 100%;
  2350. margin-top: 0;
  2351. margin-bottom: 5px;
  2352. .matrix-list {
  2353. display: grid;
  2354. justify-content: space-between;
  2355. grid-template-columns: repeat(auto-fill, 114px);
  2356. width: 100%;
  2357. margin-top: 0;
  2358. }
  2359. }
  2360. }
  2361. }
  2362. .clearfix::after {
  2363. content: "";
  2364. clear: both;
  2365. height: 0;
  2366. line-height: 0;
  2367. visibility: hidden;
  2368. display: block;
  2369. }
  2370. .clearfix {
  2371. zoom: 1;
  2372. }
  2373. .jzBox {
  2374. display: flex;
  2375. justify-content: flex-start;
  2376. align-items: center;
  2377. flex-wrap: wrap;
  2378. .jzItem {
  2379. width: 12%;
  2380. height: 100px;
  2381. background: #506382;
  2382. display: flex;
  2383. justify-content: flex-start;
  2384. align-items: center;
  2385. font-size: 12px;
  2386. margin-top: 10px;
  2387. margin-left: 10px;
  2388. position: relative;
  2389. .jzWarn {
  2390. position: absolute;
  2391. left: 7px;
  2392. top: 4px;
  2393. width: 8px;
  2394. height: 8px;
  2395. background: #ffd700;
  2396. border-radius: 20px;
  2397. cursor: pointer;
  2398. }
  2399. &:nth-child(1),
  2400. &:nth-child(8n + 1) {
  2401. margin-left: 0;
  2402. }
  2403. .l {
  2404. width: 3px;
  2405. height: 100%;
  2406. }
  2407. .c {
  2408. width: 70px;
  2409. height: 100px;
  2410. cursor: pointer;
  2411. img {
  2412. width: 100%;
  2413. height: 100%;
  2414. margin: 0;
  2415. padding: 0;
  2416. border: 0;
  2417. }
  2418. }
  2419. .r {
  2420. flex: 1;
  2421. height: 100%;
  2422. display: flex;
  2423. flex-direction: column;
  2424. justify-content: flex-start;
  2425. align-items: flex-start;
  2426. .zb {
  2427. width: 100%;
  2428. padding: 0 10px;
  2429. display: flex;
  2430. justify-content: flex-start;
  2431. align-items: center;
  2432. color: #fff;
  2433. margin-top: 5px;
  2434. .name {
  2435. width: 40px;
  2436. font-weight: 700;
  2437. margin-right: 5px;
  2438. }
  2439. .key {
  2440. width: 35px;
  2441. margin-right: 10px;
  2442. display: flex;
  2443. justify-content: space-between;
  2444. align-items: center;
  2445. font-size: 0;
  2446. span {
  2447. font-size: 12px;
  2448. }
  2449. }
  2450. .value,
  2451. .unit {
  2452. display: flex;
  2453. justify-content: center;
  2454. align-items: center;
  2455. }
  2456. .unit {
  2457. margin-left: 5px;
  2458. }
  2459. }
  2460. }
  2461. }
  2462. }
  2463. .jzBox,
  2464. .matrix-status {
  2465. .zcyx {
  2466. background: #71af81;
  2467. }
  2468. .djzt {
  2469. background: #d18d6a;
  2470. }
  2471. .xgyx {
  2472. background: #608ec6;
  2473. }
  2474. .txzd {
  2475. background: #a0a3a7;
  2476. }
  2477. .zctj {
  2478. background: #756a66;
  2479. }
  2480. .gztj {
  2481. background: #f26060;
  2482. }
  2483. .dwgz {
  2484. background: #a980b6;
  2485. }
  2486. .tjwh {
  2487. background: #cca15e;
  2488. }
  2489. .tqtj {
  2490. background: #46aab0;
  2491. }
  2492. .jhtj {
  2493. background: #645b43;
  2494. }
  2495. .qd {
  2496. background: #3b2e7e;
  2497. }
  2498. .xgtj {
  2499. background: #8988c3;
  2500. }
  2501. .jlzt {
  2502. background: #519ef8;
  2503. }
  2504. }
  2505. </style>