SandTable.vue 59 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255
  1. <template>
  2. <!-- padding: 0 10px; -->
  3. <div style="width: 100%; height: 100%">
  4. <div
  5. class="sand-table"
  6. id="sandTable"
  7. v-if="$route.path === '/integratedAlarm'"
  8. >
  9. <!-- <img :src="require('@assets/png/3dcloud.png')" class="i3dcloud" /> -->
  10. <StBack></StBack>
  11. <ThreeModel1
  12. class="three-model-layer"
  13. :data="mapSource"
  14. @when="when"
  15. @clickMapItem="clickMapItem"
  16. >
  17. </ThreeModel1>
  18. <!-- <img :src="require('@/assets/png/3dback.png')" class="i3dback" /> -->
  19. <!-- v-if="showPanel" -->
  20. <!-- 第一机组 -->
  21. <div class="sand-table-left">
  22. <PanelSand
  23. class="left-panel"
  24. :style="isFullScreen ? 'height: 26vh' : 'height: 27vh'"
  25. title="停机信息-中车"
  26. >
  27. <template v-slot:tools>
  28. <div class="exchange" @click="changeBjSwitch('left')">
  29. <span :class="bjSwitch ? 'gray' : 'white'">故障</span>
  30. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  31. <span :class="bjSwitch ? 'white' : 'gray'">检修</span>
  32. </div>
  33. </template>
  34. <RankTable
  35. :data="selsZC"
  36. @rowClick="clickStopRow('left')"
  37. height="20vh"
  38. ></RankTable>
  39. </PanelSand>
  40. <PanelSandToolbar
  41. class="right-panel mg-t-16"
  42. :style="isFullScreen ? 'height: 19vh' : 'height: 22vh'"
  43. title="预警情况"
  44. >
  45. <template v-slot:tools>
  46. <div class="exchange">
  47. <span
  48. :class="warnSwitch === 'z' ? 'white' : 'gray'"
  49. @click="changeWarnSwitch('z')"
  50. >周</span
  51. >
  52. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  53. <span
  54. :class="warnSwitch === 'y' ? 'white' : 'gray'"
  55. @click="changeWarnSwitch('y')"
  56. >月</span
  57. >
  58. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  59. <span
  60. :class="warnSwitch === 'n' ? 'white' : 'gray'"
  61. @click="changeWarnSwitch('n')"
  62. >年</span
  63. >
  64. </div>
  65. </template>
  66. <template v-slot:toolsL>
  67. <div class="exchange">
  68. <span
  69. :class="warnPC ? 'white' : 'gray'"
  70. @click="changeWarnPC('left')"
  71. >频次</span
  72. >
  73. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  74. <span
  75. :class="warnPC ? 'gray' : 'white'"
  76. @click="changeWarnPC('left')"
  77. >时长</span
  78. >
  79. </div>
  80. </template>
  81. <template v-slot:default>
  82. <RadarPieChart
  83. height="18vh"
  84. :list="warnChartDataZC"
  85. :title="warnPC ? '预警频次情况' : '预警时长情况'"
  86. :unit="warnPC ? '次' : '秒'"
  87. />
  88. </template>
  89. </PanelSandToolbar>
  90. <PanelSandToolbar
  91. class="right-panel mg-t-16"
  92. :style="isFullScreen ? 'height: 19vh' : 'height: 22vh'"
  93. title="故障情况"
  94. style="cursor: pointer"
  95. >
  96. <template v-slot:tools>
  97. <div
  98. style="
  99. position: absolute;
  100. left: -115px;
  101. top: -5px;
  102. width: 100px;
  103. height: 30px;
  104. "
  105. @click.stop="clickTime('WT2000D121H85')"
  106. ></div>
  107. <div class="exchange">
  108. <span
  109. :class="probSwitch === 'z' ? 'white' : 'gray'"
  110. @click.stop="changeProbSwitch('z')"
  111. >周</span
  112. >
  113. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  114. <span
  115. :class="probSwitch === 'y' ? 'white' : 'gray'"
  116. @click.stop="changeProbSwitch('y')"
  117. >月</span
  118. >
  119. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  120. <span
  121. :class="probSwitch === 'n' ? 'white' : 'gray'"
  122. @click.stop="changeProbSwitch('n')"
  123. >年</span
  124. >
  125. </div>
  126. </template>
  127. <template v-slot:toolsL>
  128. <div class="exchange">
  129. <span
  130. :class="probPC ? 'white' : 'gray'"
  131. @click.stop="changeProbPC('left')"
  132. >频次</span
  133. >
  134. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  135. <span
  136. :class="probPC ? 'gray' : 'white'"
  137. @click.stop="changeProbPC('left')"
  138. >时长</span
  139. >
  140. </div>
  141. </template>
  142. <template v-slot:default>
  143. <!-- <RadarPieChartCom height="18vh" :list="probChartData" title="故障情况" /> -->
  144. <RadarPieChart
  145. height="18vh"
  146. :list="probChartDataZC"
  147. :title="probPC ? '故障频次情况' : '故障时长情况'"
  148. :unit="probPC ? '次' : '秒'"
  149. />
  150. </template>
  151. </PanelSandToolbar>
  152. </div>
  153. <!-- <div></div>
  154. v-if="showPanel" -->
  155. <!-- 第二机组 -->
  156. <div class="sand-table-right">
  157. <PanelSand class="left-panel" title="停机信息-联合动力">
  158. <template v-slot:tools>
  159. <div class="exchange" @click="changeBjSwitch('right')">
  160. <span :class="bjSwitch2 ? 'gray' : 'white'">故障</span>
  161. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  162. <span :class="bjSwitch2 ? 'white' : 'gray'">检修</span>
  163. </div>
  164. </template>
  165. <RankTable
  166. :data="selsLH"
  167. @rowClick="clickStopRow('right')"
  168. height="20vh"
  169. ></RankTable>
  170. </PanelSand>
  171. <PanelSandToolbar
  172. class="right-panel mg-t-16"
  173. :style="isFullScreen ? 'height: 19vh' : 'height: 22vh'"
  174. title="预警情况"
  175. >
  176. <template v-slot:tools>
  177. <div class="exchange">
  178. <span
  179. :class="warnSwitch2 === 'z' ? 'white' : 'gray'"
  180. @click="changeWarnSwitch2('z')"
  181. >周</span
  182. >
  183. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  184. <span
  185. :class="warnSwitch2 === 'y' ? 'white' : 'gray'"
  186. @click="changeWarnSwitch2('y')"
  187. >月</span
  188. >
  189. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  190. <span
  191. :class="warnSwitch2 === 'n' ? 'white' : 'gray'"
  192. @click="changeWarnSwitch2('n')"
  193. >年</span
  194. >
  195. </div>
  196. </template>
  197. <template v-slot:toolsL>
  198. <div class="exchange">
  199. <span
  200. :class="warnPC2 ? 'white' : 'gray'"
  201. @click="changeWarnPC('right')"
  202. >频次</span
  203. >
  204. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  205. <span
  206. :class="warnPC2 ? 'gray' : 'white'"
  207. @click="changeWarnPC('right')"
  208. >时长</span
  209. >
  210. </div>
  211. </template>
  212. <template v-slot:default>
  213. <RadarPieChart
  214. height="18vh"
  215. :list="warnChartDataLH"
  216. :title="warnPC2 ? '预警频次情况' : '预警时长情况'"
  217. :unit="warnPC2 ? '次' : '秒'"
  218. />
  219. </template>
  220. </PanelSandToolbar>
  221. <PanelSandToolbar
  222. class="right-panel mg-t-16"
  223. :style="isFullScreen ? 'height: 19vh' : 'height: 22vh'"
  224. title="故障情况"
  225. >
  226. <template v-slot:tools>
  227. <div
  228. style="
  229. position: absolute;
  230. left: -115px;
  231. top: -5px;
  232. width: 100px;
  233. height: 30px;
  234. cursor: pointer;
  235. "
  236. @click.stop="clickTime('UP2000-130')"
  237. ></div>
  238. <div class="exchange">
  239. <span
  240. :class="probSwitch2 === 'z' ? 'white' : 'gray'"
  241. @click.stop="changeProbSwitch2('z')"
  242. >周</span
  243. >
  244. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  245. <span
  246. :class="probSwitch2 === 'y' ? 'white' : 'gray'"
  247. @click.stop="changeProbSwitch2('y')"
  248. >月</span
  249. >
  250. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  251. <span
  252. :class="probSwitch2 === 'n' ? 'white' : 'gray'"
  253. @click.stop="changeProbSwitch2('n')"
  254. >年</span
  255. >
  256. </div>
  257. </template>
  258. <template v-slot:toolsL>
  259. <div class="exchange">
  260. <span
  261. :class="probPC2 ? 'white' : 'gray'"
  262. @click.stop="changeProbPC('right')"
  263. >频次</span
  264. >
  265. <i class="blue fa fa-exchange mg-l-8 mg-r-8"></i>
  266. <span
  267. :class="probPC2 ? 'gray' : 'white'"
  268. @click.stop="changeProbPC('right')"
  269. >时长</span
  270. >
  271. </div>
  272. </template>
  273. <template v-slot:default>
  274. <!-- <RadarPieChartCom height="18vh" :list="probChartData" title="故障情况" style="cursor: pointer" /> -->
  275. <RadarPieChart
  276. height="18vh"
  277. :list="probChartDataLH"
  278. :title="probPC ? '故障频次情况' : '故障时长情况'"
  279. :unit="probPC ? '次' : '秒'"
  280. />
  281. </template>
  282. </PanelSandToolbar>
  283. </div>
  284. <div class="footer" :style="isFullScreen ? 'bottom: 1%' : 'bottom: 2%'">
  285. <div class="hover72Power">
  286. <div
  287. id="problem1"
  288. class="cur"
  289. style="width: 100%; height: 100%"
  290. ></div>
  291. <div class="hidBtn" @click="clickTime('WT2000D121H85')"></div>
  292. </div>
  293. <div class="monthPower">
  294. <div
  295. id="problem2"
  296. class="cur"
  297. style="width: 100%; height: 100%"
  298. ></div>
  299. <div class="hidBtn" @click="clickTime('UP2000-130')"></div>
  300. </div>
  301. </div>
  302. <el-dialog
  303. v-model="noTimeDialog"
  304. :custom-class="noTimeDialogsc"
  305. width="80%"
  306. >
  307. <template #title>
  308. <div class="dialogTitle">
  309. <span style="margin-left: 10px">非停时长占比与故障次数</span>
  310. </div>
  311. </template>
  312. <div class="allStyle">
  313. <div class="radioGroupTime">
  314. <el-date-picker
  315. v-model="radioTime"
  316. type="datetimerange"
  317. range-separator="至"
  318. start-placeholder="开始日期"
  319. end-placeholder="结束日期"
  320. format="YYYY-MM-DD HH:mm:ss"
  321. >
  322. </el-date-picker>
  323. <el-radio-group v-model="radioGroup" @change="changeRadio">
  324. <el-radio :label="1">按日</el-radio>
  325. <el-radio :label="2">按月</el-radio>
  326. </el-radio-group>
  327. </div>
  328. <div class="allMain">
  329. <!-- <span class="mainTit">2025-01-{{it}}</span> -->
  330. <div class="allMsg">
  331. <div class="warnLine">
  332. <RadarLineChartCom
  333. width="45vw"
  334. height="50vh"
  335. :xAxis="problem3.xAxis"
  336. :series="problem3.series"
  337. />
  338. </div>
  339. <div class="warnPie">
  340. <RadarPieChartCom
  341. width="30vw"
  342. height="50vh"
  343. :list="probChartData"
  344. title="非停时长占比"
  345. style="cursor: pointer"
  346. />
  347. </div>
  348. </div>
  349. </div>
  350. </div>
  351. <!-- <template #footer>
  352. <div class="dialog-footer">
  353. <el-button @click="dialogVisible = false">Cancel</el-button>
  354. <el-button type="primary" @click="dialogVisible = false">
  355. Confirm
  356. </el-button>
  357. </div>
  358. </template> -->
  359. </el-dialog>
  360. <el-dialog
  361. v-model="showTableDialog"
  362. :custom-class="noTimeDialogsc"
  363. width="80%"
  364. >
  365. <template #title>
  366. <div class="dialogTitle">
  367. <span style="margin-left: 10px">停机信息</span>
  368. </div>
  369. </template>
  370. <div class="warnTable">
  371. <el-table
  372. size="mini"
  373. :data="tableData"
  374. style="width: 100%; height: calc(100% - 310px)"
  375. max-height="520px"
  376. stripe
  377. >
  378. <el-table-column
  379. v-for="item in tableHeader"
  380. :label="item.name"
  381. :prop="item.code"
  382. :key="item.code"
  383. :width="item.width || ''"
  384. show-overflow-tooltip
  385. header-align="center"
  386. align="center"
  387. >
  388. <template #default="scope">
  389. <span v-if="item.code == 'status'">
  390. <span :style="scope.row.status === 0 ? 'color: red' : ''">{{
  391. scope.row.status === 0 ? "异常" : "正常"
  392. }}</span>
  393. </span>
  394. <span v-else>
  395. {{
  396. scope.row[item.code] != "NULL" ? scope.row[item.code] : ""
  397. }}
  398. </span>
  399. </template>
  400. </el-table-column>
  401. </el-table>
  402. </div>
  403. </el-dialog>
  404. </div>
  405. <router-view v-else />
  406. </div>
  407. </template>
  408. <script>
  409. import ThreeModel1 from "./component/ThreeModel1.vue";
  410. import PanelSand from "@com/coms/panel/panel-sand.vue";
  411. import PanelSandToolbar from "@com/coms/panel/panel-sand-toolbar.vue";
  412. import StBack from "./component/st-back.vue";
  413. import RankTable from "./component/rank-table.vue";
  414. import RadarPieChart from "@com/chart/pie/radar-pie-chart.vue";
  415. import RadarPieChartCom from "./component/radar-pie-chart.vue";
  416. import RadarLineChartCom from "./component/radar-line-chart.vue";
  417. import dataJson from "./component/dataBJJson.json";
  418. import dayjs from "dayjs";
  419. import { onBeforeRouteLeave } from "vue-router";
  420. import { alarm_history } from "@/api/zhbj/index.js";
  421. import {
  422. apiGetqueryshutdowneventlist,
  423. apiGetfindCtFeatureStat,
  424. apiGetqueryShutdownEvent2ByType,
  425. apiGetqueryShutdownEvent2ByDay,
  426. apiGetqueryShutdownEvent2ByMonth,
  427. apiGetqueryShutdownEvent2ByMap,
  428. } from "@/api/sandtable/index.js";
  429. import jsonData from "./component/data.json";
  430. import jsonDataHT from "./component/dataHTjson.json";
  431. export default {
  432. // 名称
  433. name: "SandTable",
  434. // 使用组件
  435. components: {
  436. ThreeModel1,
  437. PanelSand,
  438. PanelSandToolbar,
  439. RadarPieChart,
  440. StBack,
  441. RankTable,
  442. RadarPieChartCom,
  443. RadarLineChartCom,
  444. },
  445. // 数据
  446. data() {
  447. const that = this;
  448. return {
  449. radioGroup: 1,
  450. radioTime: [],
  451. problem1: null,
  452. problem2: null,
  453. problem3: {},
  454. videoShow: true,
  455. showPanel: false,
  456. bjSwitch: false,
  457. bjSwitch2: false,
  458. warnSwitch: "y",
  459. warnSwitch2: "y",
  460. probSwitch: "y",
  461. probSwitch2: "y",
  462. warnPC: true,
  463. warnPC2: true,
  464. probPC: true,
  465. probPC2: true,
  466. timmer1: null,
  467. showWeatherDialog: false,
  468. showTableDialog: false,
  469. showHealthDialog: false,
  470. showMainInfoDialog: false,
  471. noTimeDialog: false,
  472. noTimeType: "",
  473. weathercollapse: "",
  474. weatherChart: [
  475. {
  476. title: "温度",
  477. smooth: true,
  478. value: [],
  479. },
  480. {
  481. title: "湿度",
  482. smooth: true,
  483. value: [],
  484. },
  485. ],
  486. videoDialogClass: "modal animated a1 bounceIn",
  487. tableDialogClass: "modal animated a1 fadeInLeftBig",
  488. mainInfoDialogClass: "modal curModal animated a0 fadeInDownBig",
  489. mainInfo: [],
  490. peopleClass: "",
  491. timeStr: "",
  492. wpId: "0",
  493. tqmap1: {},
  494. tqmap5: [],
  495. gxkmap: {},
  496. tableItem: {},
  497. mapSource: {},
  498. videoArray1: [
  499. // [
  500. // { code: "NSS_FDC_ZK", class: "", switch: true },
  501. // { code: "NSS_FDC_ZK", class: "", switch: true },
  502. // ],
  503. // [
  504. // { code: "NSS_FDC_ZK", class: "", switch: true },
  505. // { code: "QS_FDC_ZK", class: "", switch: true },
  506. // ],
  507. // [
  508. // { code: "QS_FDC_ZK", class: "", switch: true },
  509. // { code: "QS_FDC_ZK", class: "", switch: true },
  510. // ],
  511. [
  512. {
  513. code: "SBQ_FDC_SC",
  514. class: "",
  515. switch: true,
  516. },
  517. {
  518. code: "NSS_FDC_SC",
  519. class: "",
  520. switch: true,
  521. },
  522. ],
  523. [
  524. {
  525. code: "QS_FDC_SC",
  526. class: "",
  527. switch: true,
  528. },
  529. {
  530. code: "MHS_FDC_SC",
  531. class: "",
  532. switch: true,
  533. },
  534. ],
  535. [
  536. {
  537. code: "XS_FDC_SC",
  538. class: "",
  539. switch: true,
  540. },
  541. {
  542. code: "PL_GDC_SC",
  543. class: "",
  544. switch: true,
  545. },
  546. ],
  547. ],
  548. videoArray: [
  549. [
  550. {
  551. url: "http://192.168.10.10:9984/ws.html",
  552. token: "?token=SBQ_FDC_SC&autoplay=true",
  553. class: "",
  554. switch: true,
  555. },
  556. {
  557. url: "http://192.168.10.10:9984/ws.html",
  558. token: "?token=NSS_FDC_SC&autoplay=true",
  559. class: "",
  560. switch: true,
  561. },
  562. ],
  563. [
  564. {
  565. url: "http://192.168.10.10:9984/ws.html",
  566. token: "?token=QS_FDC_SC&autoplay=true",
  567. class: "",
  568. switch: true,
  569. },
  570. {
  571. url: "http://192.168.10.10:9984/ws.html",
  572. token: "?token=MHS_FDC_SC&autoplay=true",
  573. class: "",
  574. switch: true,
  575. },
  576. ],
  577. [
  578. {
  579. url: "http://192.168.10.10:9984/ws.html",
  580. token: "?token=XS_FDC_SC&autoplay=true",
  581. class: "",
  582. switch: true,
  583. },
  584. {
  585. url: "http://192.168.10.10:9984/ws.html",
  586. token: "?token=PL_GDC_SC&autoplay=true",
  587. class: "",
  588. switch: true,
  589. },
  590. ],
  591. ],
  592. showVideoDialog: false,
  593. dialogVideoUrl: "",
  594. warnChartDataZC: dataJson.data.warnChartData,
  595. warnChartDataLH: dataJson.data.warnChartData,
  596. probChartDataZC: dataJson.data.probChartData,
  597. probChartDataLH: dataJson.data.probChartData,
  598. probChartData: dataJson.data.probChartData,
  599. bjChartData: [],
  600. ForecastPower: [
  601. {
  602. name: "今日预测电量",
  603. value: 103.62,
  604. total: 150,
  605. },
  606. {
  607. name: "月预测发电量",
  608. value: 98.62,
  609. total: 100,
  610. },
  611. ],
  612. workDataIndex: 0,
  613. workData: {
  614. column: [
  615. {
  616. name: "人员",
  617. field: "laborname",
  618. is_num: false,
  619. is_light: false,
  620. click(e, row) {
  621. that.changePeople(row.index);
  622. },
  623. },
  624. {
  625. name: "职务",
  626. field: "jobcode",
  627. is_num: false,
  628. is_light: false,
  629. click(e, row) {
  630. that.changePeople(row.index);
  631. },
  632. },
  633. {
  634. name: "开始时间",
  635. field: "starttime",
  636. width: "150px",
  637. is_num: false,
  638. is_light: false,
  639. click(e, row) {
  640. that.changePeople(row.index);
  641. },
  642. },
  643. {
  644. name: "原因",
  645. field: "problem",
  646. is_num: false,
  647. is_light: false,
  648. click(e, row) {
  649. that.changePeople(row.index);
  650. },
  651. },
  652. ],
  653. data: [],
  654. },
  655. selsZC: {
  656. column: [
  657. {
  658. name: "机组",
  659. field: "code",
  660. width: "60px",
  661. },
  662. {
  663. name: "停机时长(h)",
  664. field: "selsTime",
  665. },
  666. {
  667. name: "状态",
  668. field: "isCloseName",
  669. width: "60px",
  670. },
  671. ],
  672. data: dataJson.data.sels.data,
  673. },
  674. selsLH: {
  675. column: [
  676. {
  677. name: "机组",
  678. field: "code",
  679. width: "60px",
  680. },
  681. {
  682. name: "停机时长(h)",
  683. field: "selsTime",
  684. },
  685. {
  686. name: "状态",
  687. field: "isCloseName",
  688. width: "60px",
  689. },
  690. ],
  691. data: dataJson.data.sels.data,
  692. },
  693. rmls: {
  694. column: [
  695. {
  696. // name: "风机编号",
  697. name: "机组",
  698. field: "code",
  699. width: "60px",
  700. },
  701. {
  702. // name: "推荐时间",
  703. name: "报警时间",
  704. field: "rmlsTime",
  705. },
  706. {
  707. // name: "类型",
  708. name: "状态",
  709. // field: "operation",
  710. field: "isCloseName",
  711. width: "60px",
  712. },
  713. ],
  714. data: [],
  715. },
  716. tableHeader: [
  717. {
  718. name: "机组",
  719. code: "code",
  720. },
  721. {
  722. name: "停机开始时间",
  723. code: "stopTime",
  724. },
  725. {
  726. name: "停机恢复时间",
  727. code: "startTime",
  728. },
  729. {
  730. name: "停机时长",
  731. code: "stopHours",
  732. },
  733. {
  734. name: "故障信息",
  735. code: "faultView",
  736. },
  737. // {
  738. // name: "当前状态",
  739. // code: "status"
  740. // }
  741. ],
  742. tableData: [
  743. {
  744. code: "1001",
  745. startTime: "2024-12-31 09:00",
  746. endTime: "2024-12-31 18:00",
  747. selsTime: "8.0",
  748. message: "电气故障,机械故障",
  749. status: "正常",
  750. },
  751. ],
  752. timmer: null, // 定时器开关
  753. isFullScreen: false,
  754. };
  755. },
  756. // 函数
  757. methods: {
  758. init(res) {
  759. let that = this;
  760. // 72小时功率曲线
  761. if (res.dataL) {
  762. let xAxis = [];
  763. let seriesSpeed = [];
  764. let seriesGl = [];
  765. res.dataL.forEach((it) => {
  766. xAxis.push(dayjs(it.stoptime).format("MM-DD HH:mm"));
  767. seriesSpeed.push(it.times);
  768. seriesGl.push(it.hours);
  769. });
  770. const powerMin = Math.min(...seriesSpeed);
  771. const powerMax =
  772. Math.max(...seriesSpeed) < 5 ? 5 : Math.max(...seriesSpeed);
  773. const windSpeedMin = Math.min(...seriesGl);
  774. const windSpeedMax =
  775. Math.max(...seriesGl) < 0.5 ? 0.5 : Math.max(...seriesGl);
  776. const splitNumber = 5;
  777. let series = [
  778. {
  779. name: "故障次数",
  780. data: seriesSpeed,
  781. type: "line",
  782. symbol: "none",
  783. },
  784. {
  785. name: "故障时长",
  786. data: seriesGl,
  787. yAxisIndex: 1,
  788. type: "line",
  789. symbol: "none",
  790. },
  791. ];
  792. that.getPowerLine(
  793. xAxis,
  794. series,
  795. "problem1",
  796. powerMin,
  797. powerMax,
  798. windSpeedMin,
  799. windSpeedMax,
  800. splitNumber
  801. );
  802. }
  803. if (res.dataR) {
  804. let xAxis = [];
  805. let seriesSpeed = [];
  806. let seriesGl = [];
  807. res.dataR.forEach((it) => {
  808. xAxis.push(dayjs(it.stoptime).format("MM-DD HH:mm"));
  809. seriesSpeed.push(it.times);
  810. seriesGl.push(it.hours);
  811. });
  812. const powerMin = Math.min(...seriesSpeed);
  813. const powerMax =
  814. Math.max(...seriesSpeed) < 5 ? 5 : Math.max(...seriesSpeed);
  815. const windSpeedMin = Math.min(...seriesGl);
  816. const windSpeedMax =
  817. Math.max(...seriesGl) < 0.5 ? 0.5 : Math.max(...seriesGl);
  818. const splitNumber = 5;
  819. let series = [
  820. {
  821. name: "故障次数",
  822. data: seriesSpeed,
  823. type: "line",
  824. symbol: "none",
  825. },
  826. {
  827. name: "故障时长",
  828. data: seriesGl,
  829. yAxisIndex: 1,
  830. type: "line",
  831. symbol: "none",
  832. },
  833. ];
  834. that.getPowerLine2(
  835. xAxis,
  836. series,
  837. "problem2",
  838. powerMin,
  839. powerMax,
  840. windSpeedMin,
  841. windSpeedMax,
  842. splitNumber
  843. );
  844. }
  845. },
  846. getDataInfo() {
  847. let that = this;
  848. that.radioTime = [
  849. dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss"),
  850. dayjs().format("YYYY-MM-DD HH:mm:ss"),
  851. ];
  852. that.getShutDownevenList(
  853. !this.bjSwitch ? "gz" : "wh",
  854. "WT2000D121H85",
  855. 5
  856. );
  857. that.getShutDownevenList(!this.bjSwitch2 ? "gz" : "wh", "UP2000-130", 5);
  858. that.getFindCtFeature("WT2000D121H85", this.warnSwitch);
  859. that.getFindCtFeature("UP2000-130", this.warnSwitch2);
  860. that.getShutDownEvent("WT2000D121H85", this.probSwitch);
  861. that.getShutDownEvent("UP2000-130", this.probSwitch2);
  862. that.getShutdownEventByDay("WT2000D121H85", that.radioTime);
  863. that.getShutdownEventByDay("UP2000-130", that.radioTime);
  864. },
  865. changeRadio(val) {
  866. if (val === 1) {
  867. if (this.noTimeType === "WT2000D121H85") {
  868. this.getShutdownEventByDay("WT2000D121H85", this.radioTime, "Dia");
  869. this.getShutdownEventByMap("WT2000D121H85", this.radioTime);
  870. } else {
  871. this.getShutdownEventByDay("UP2000-130", this.radioTime, "Dia");
  872. this.getShutdownEventByMap("UP2000-130", this.radioTime);
  873. }
  874. } else {
  875. if (this.noTimeType === "WT2000D121H85") {
  876. this.getShutdownEventByMonth("WT2000D121H85", this.radioTime);
  877. this.getShutdownEventByMap("WT2000D121H85", this.radioTime);
  878. } else {
  879. this.getShutdownEventByMonth("UP2000-130", this.radioTime);
  880. this.getShutdownEventByMap("UP2000-130", this.radioTime);
  881. }
  882. }
  883. },
  884. //获取停机表格信息
  885. getShutDownevenList(types, modelIds, size) {
  886. let that = this;
  887. let params = {
  888. wpId: "NX_FGS_HA_FDC_STA",
  889. modelId: modelIds,
  890. begin: dayjs().subtract(1, "month").format("YYYY-MM-DD HH:mm:ss"),
  891. end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
  892. pageNum: 1,
  893. pageSize: size,
  894. type: types,
  895. };
  896. apiGetqueryshutdowneventlist(params).then((res) => {
  897. if (res && res.data) {
  898. if (size === 5) {
  899. let result = [];
  900. res.data.result.forEach((it) => {
  901. let obj = {
  902. code: it.code,
  903. selsTime: it.stopHours,
  904. isCloseName: types === "gz" ? "故障" : "检修",
  905. };
  906. result.push(obj);
  907. });
  908. if (modelIds === "WT2000D121H85") {
  909. that.selsZC.data = result;
  910. } else {
  911. that.selsLH.data = result;
  912. }
  913. } else {
  914. res.data.result.forEach((it) => {
  915. it.status = types === "gz" ? "故障" : "检修";
  916. it.startTime = dayjs(it.startTime).format("YYYY-MM-DD HH:mm:ss");
  917. it.stopTime = dayjs(it.stopTime).format("YYYY-MM-DD HH:mm:ss");
  918. });
  919. that.tableData = res.data.result;
  920. }
  921. }
  922. });
  923. },
  924. //获取预警统计
  925. getFindCtFeature(modelIds, dateType) {
  926. let that = this;
  927. let date = "";
  928. if (dateType === "z") {
  929. date = dayjs().subtract(1, "week").format("YYYY-MM-DD HH:mm:ss");
  930. } else if (dateType === "y") {
  931. // date = dayjs().subtract(1, "month").format("YYYY-MM-DD HH:mm:ss");
  932. date = dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss");
  933. } else if (dateType === "n") {
  934. date = dayjs().subtract(1, "year").format("YYYY-MM-DD HH:mm:ss");
  935. } else {
  936. // date = dayjs().subtract(1, "month").format("YYYY-MM-DD HH:mm:ss");
  937. date = dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss");
  938. }
  939. let params = {
  940. stationid: "NX_FGS_HA_FDC_STA",
  941. modelId: modelIds,
  942. begin: date,
  943. end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
  944. deviceType: "windturbine",
  945. };
  946. apiGetfindCtFeatureStat(params).then((res) => {
  947. if (res) {
  948. let result = [];
  949. res.forEach((it) => {
  950. let obj = {
  951. name: it.typeName,
  952. value:
  953. modelIds === "WT2000D121H85"
  954. ? that.warnPC
  955. ? it.total
  956. : it.totalSeconds
  957. : that.warnPC2
  958. ? it.total
  959. : it.totalSeconds,
  960. };
  961. result.push(obj);
  962. });
  963. if (modelIds === "WT2000D121H85") {
  964. that.warnChartDataZC = result;
  965. } else {
  966. that.warnChartDataLH = result;
  967. }
  968. }
  969. });
  970. },
  971. //获取故障统计
  972. getShutDownEvent(modelIds, dateType) {
  973. let that = this;
  974. let date = "";
  975. if (dateType === "z") {
  976. date = dayjs().subtract(1, "week").format("YYYY-MM-DD HH:mm:ss");
  977. } else if (dateType === "y") {
  978. date = dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss");
  979. } else if (dateType === "n") {
  980. date = dayjs().subtract(1, "year").format("YYYY-MM-DD HH:mm:ss");
  981. } else {
  982. date = dayjs().startOf("month").format("YYYY-MM-DD HH:mm:ss");
  983. }
  984. let params = {
  985. wpId: "NX_FGS_HA_FDC_STA",
  986. modelId: modelIds,
  987. begin: date,
  988. end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
  989. };
  990. apiGetqueryShutdownEvent2ByType(params).then((res) => {
  991. if (res && res.data) {
  992. let result = [];
  993. res.data.forEach((it) => {
  994. let obj = {
  995. name: it.name,
  996. value:
  997. modelIds === "WT2000D121H85"
  998. ? that.probPC
  999. ? it.times
  1000. : it.hours?it.hours:0
  1001. : that.probPC2
  1002. ? it.times
  1003. : it.hours?it.hours:0,
  1004. };
  1005. result.push(obj);
  1006. });
  1007. if (modelIds === "WT2000D121H85") {
  1008. that.probChartDataZC = result;
  1009. } else {
  1010. that.probChartDataLH = result;
  1011. }
  1012. }
  1013. });
  1014. },
  1015. //获取故障次数时长----日
  1016. getShutdownEventByDay(modelIds, dates, type) {
  1017. let that = this;
  1018. let params = {
  1019. wpId: "NX_FGS_HA_FDC_STA",
  1020. modelId: modelIds,
  1021. begin: dates[0],
  1022. end: dates[1],
  1023. };
  1024. apiGetqueryShutdownEvent2ByDay(params).then((res) => {
  1025. if (res && res.data) {
  1026. let xAxis = [];
  1027. let seriesSpeed = [];
  1028. let seriesGl = [];
  1029. res.data.forEach((it) => {
  1030. xAxis.push(it.stoptime);
  1031. seriesSpeed.push(it.times);
  1032. seriesGl.push(it.hours);
  1033. });
  1034. let series = [
  1035. {
  1036. name: "故障次数",
  1037. data: seriesSpeed,
  1038. type: "line",
  1039. symbol: "none",
  1040. },
  1041. {
  1042. name: "故障时长",
  1043. data: seriesGl,
  1044. yAxisIndex: 1,
  1045. type: "line",
  1046. symbol: "none",
  1047. },
  1048. ];
  1049. const powerMin = Math.min(...seriesSpeed);
  1050. const powerMax =
  1051. Math.max(...seriesSpeed) < 5 ? 5 : Math.max(...seriesSpeed);
  1052. const windSpeedMin = Math.min(...seriesGl);
  1053. const windSpeedMax =
  1054. Math.max(...seriesGl) < 0.5 ? 0.5 : Math.max(...seriesGl);
  1055. const splitNumber = 5;
  1056. if (modelIds === "WT2000D121H85") {
  1057. if (type === "Dia") {
  1058. that.problem3 = {
  1059. xAxis: xAxis,
  1060. series: series,
  1061. };
  1062. } else {
  1063. that.getPowerLine(
  1064. xAxis,
  1065. series,
  1066. "problem1",
  1067. powerMin,
  1068. powerMax,
  1069. windSpeedMin,
  1070. windSpeedMax,
  1071. splitNumber
  1072. );
  1073. }
  1074. } else {
  1075. if (type === "Dia") {
  1076. that.problem3 = {
  1077. xAxis: xAxis,
  1078. series: series,
  1079. };
  1080. } else {
  1081. that.getPowerLine2(
  1082. xAxis,
  1083. series,
  1084. "problem2",
  1085. powerMin,
  1086. powerMax,
  1087. windSpeedMin,
  1088. windSpeedMax,
  1089. splitNumber
  1090. );
  1091. }
  1092. }
  1093. }
  1094. });
  1095. },
  1096. getShutdownEventByMonth(modelIds, dates) {
  1097. let that = this;
  1098. let params = {
  1099. wpId: "NX_FGS_HA_FDC_STA",
  1100. modelId: modelIds,
  1101. begin: dates[0],
  1102. end: dates[1],
  1103. };
  1104. apiGetqueryShutdownEvent2ByMonth(params).then((res) => {
  1105. if (res && res.data) {
  1106. let xAxis = [];
  1107. let seriesSpeed = [];
  1108. let seriesGl = [];
  1109. res.data.forEach((it) => {
  1110. xAxis.push(it.stoptime);
  1111. seriesSpeed.push(it.times);
  1112. seriesGl.push(it.hours);
  1113. });
  1114. let series = [
  1115. {
  1116. name: "故障次数",
  1117. data: seriesSpeed,
  1118. type: "line",
  1119. symbol: "none",
  1120. },
  1121. {
  1122. name: "故障时长",
  1123. data: seriesGl,
  1124. yAxisIndex: 1,
  1125. type: "line",
  1126. symbol: "none",
  1127. },
  1128. ];
  1129. if (modelIds === "WT2000D121H85") {
  1130. that.problem3 = {
  1131. xAxis: xAxis,
  1132. series: series,
  1133. };
  1134. } else {
  1135. that.problem3 = {
  1136. xAxis: xAxis,
  1137. series: series,
  1138. };
  1139. }
  1140. }
  1141. });
  1142. },
  1143. getShutdownEventByMap(modelIds, dates) {
  1144. let that = this;
  1145. let params = {
  1146. wpId: "NX_FGS_HA_FDC_STA",
  1147. modelId: modelIds,
  1148. begin: dates[0],
  1149. end: dates[1],
  1150. };
  1151. apiGetqueryShutdownEvent2ByMap(params).then((res) => {
  1152. if (res && res.data) {
  1153. let result = [];
  1154. for (let i in res.data) {
  1155. res.data[i].forEach((it) => {
  1156. let obj = {
  1157. name: it.name,
  1158. value: it.times,
  1159. };
  1160. result.push(obj);
  1161. });
  1162. }
  1163. if (modelIds === "WT2000D121H85") {
  1164. that.probChartData = result;
  1165. } else {
  1166. that.probChartData = result;
  1167. }
  1168. }
  1169. });
  1170. },
  1171. getPowerLine(
  1172. xAxis,
  1173. series,
  1174. name,
  1175. powerMin,
  1176. powerMax,
  1177. windSpeedMin,
  1178. windSpeedMax,
  1179. splitNumber
  1180. ) {
  1181. let myChart;
  1182. let legendState = {};
  1183. if (this.problem1?.getOption) {
  1184. legendState = this.problem1.getOption().legend[0].selected;
  1185. }
  1186. let option = {
  1187. title: {
  1188. text: "故障次数时长(中车)",
  1189. left: "5px",
  1190. top: "5px",
  1191. textStyle: {
  1192. fontSize: "16",
  1193. fontWeight: 400,
  1194. color: "#fff",
  1195. },
  1196. },
  1197. tooltip: {
  1198. trigger: "axis",
  1199. },
  1200. color: ["#7981AF", "#1C99FF", "#E57F25", "#f25656"],
  1201. legend: {
  1202. right: "25",
  1203. top: "5",
  1204. itemWidth: 5,
  1205. itemHeight: 5,
  1206. data: ["故障次数", "故障时长"],
  1207. textStyle: {
  1208. color: "#fff",
  1209. },
  1210. selected: legendState,
  1211. },
  1212. grid: {
  1213. left: "3%",
  1214. right: "5%",
  1215. bottom: "5%",
  1216. height: "110px",
  1217. containLabel: true,
  1218. },
  1219. xAxis: {
  1220. type: "category",
  1221. boundaryGap: false,
  1222. data: xAxis,
  1223. axisLine: {
  1224. lineStyle: {
  1225. color: "#fff", // 修改为需要的颜色
  1226. },
  1227. },
  1228. },
  1229. yAxis: [
  1230. {
  1231. type: "value",
  1232. min: powerMin,
  1233. max: powerMax, // 动态设置最大值
  1234. interval: parseFloat(
  1235. ((powerMax - powerMin) / splitNumber).toFixed(4)
  1236. ),
  1237. splitNumber,
  1238. splitLine: {
  1239. lineStyle: {
  1240. color: "#ccc",
  1241. type: "dashed", // 修改为虚线
  1242. opacity: 0.2,
  1243. },
  1244. },
  1245. name: "单位:次",
  1246. nameLocation: "end",
  1247. axisLine: {
  1248. lineStyle: {
  1249. color: "#fff",
  1250. },
  1251. },
  1252. axisLabel: {
  1253. formatter(value) {
  1254. return parseInt(value);
  1255. },
  1256. },
  1257. },
  1258. {
  1259. type: "value",
  1260. min: windSpeedMin,
  1261. max: windSpeedMax,
  1262. interval: parseFloat(
  1263. ((windSpeedMax - windSpeedMin) / splitNumber).toFixed(4)
  1264. ),
  1265. splitNumber,
  1266. splitLine: {
  1267. lineStyle: {
  1268. color: "#ccc",
  1269. type: "dashed", // 修改为虚线
  1270. opacity: 0.2,
  1271. },
  1272. },
  1273. name: "单位:h",
  1274. axisLine: {
  1275. lineStyle: {
  1276. color: "#fff",
  1277. },
  1278. },
  1279. axisLabel: {
  1280. formatter(value) {
  1281. return parseFloat(value.toFixed(1));
  1282. },
  1283. },
  1284. },
  1285. ],
  1286. series: series,
  1287. };
  1288. // 基于准备好的dom,初始化echarts实例
  1289. let dom = document.getElementById(name);
  1290. dom && dom.removeAttribute("_echarts_instance_");
  1291. myChart = this.$echarts.init(dom);
  1292. this.problem1 = myChart;
  1293. myChart.setOption(option);
  1294. window.addEventListener("resize", () => {
  1295. myChart.resize();
  1296. });
  1297. },
  1298. getPowerLine2(
  1299. xAxis,
  1300. series,
  1301. name,
  1302. powerMin,
  1303. powerMax,
  1304. windSpeedMin,
  1305. windSpeedMax,
  1306. splitNumber
  1307. ) {
  1308. let myChart;
  1309. let legendState = {};
  1310. if (this.problem2?.getOption) {
  1311. legendState = this.problem2.getOption().legend[0].selected;
  1312. }
  1313. let option = {
  1314. title: {
  1315. text: "故障次数时长(联合动力)",
  1316. left: "5px",
  1317. top: "5px",
  1318. textStyle: {
  1319. fontSize: "16",
  1320. fontWeight: 400,
  1321. color: "#fff",
  1322. },
  1323. },
  1324. tooltip: {
  1325. trigger: "axis",
  1326. },
  1327. color: ["#7981AF", "#1C99FF", "#E57F25", "#f25656"],
  1328. legend: {
  1329. right: "25",
  1330. top: "5",
  1331. itemWidth: 5,
  1332. itemHeight: 5,
  1333. data: ["故障次数", "故障时长"],
  1334. textStyle: {
  1335. color: "#fff",
  1336. },
  1337. selected: legendState,
  1338. },
  1339. grid: {
  1340. left: "3%",
  1341. right: "5%",
  1342. bottom: "5%",
  1343. height: "110px",
  1344. containLabel: true,
  1345. },
  1346. xAxis: {
  1347. type: "category",
  1348. boundaryGap: false,
  1349. data: xAxis,
  1350. axisLine: {
  1351. lineStyle: {
  1352. color: "#fff", // 修改为需要的颜色
  1353. },
  1354. },
  1355. },
  1356. yAxis: [
  1357. {
  1358. type: "value",
  1359. min: powerMin,
  1360. max: powerMax, // 动态设置最大值
  1361. interval: parseFloat(
  1362. ((powerMax - powerMin) / splitNumber).toFixed(4)
  1363. ),
  1364. splitNumber,
  1365. splitLine: {
  1366. lineStyle: {
  1367. color: "#ccc",
  1368. type: "dashed", // 修改为虚线
  1369. opacity: 0.2,
  1370. },
  1371. },
  1372. name: "单位:次",
  1373. axisLine: {
  1374. lineStyle: {
  1375. color: "#fff",
  1376. },
  1377. },
  1378. axisLabel: {
  1379. formatter(value) {
  1380. return parseInt(value);
  1381. },
  1382. },
  1383. },
  1384. {
  1385. type: "value",
  1386. min: windSpeedMin,
  1387. max: windSpeedMax,
  1388. interval: parseFloat(
  1389. ((windSpeedMax - windSpeedMin) / splitNumber).toFixed(4)
  1390. ),
  1391. splitNumber,
  1392. splitLine: {
  1393. lineStyle: {
  1394. color: "#ccc",
  1395. type: "dashed", // 修改为虚线
  1396. opacity: 0.2,
  1397. },
  1398. },
  1399. name: "单位:h",
  1400. axisLine: {
  1401. lineStyle: {
  1402. color: "#fff",
  1403. },
  1404. },
  1405. axisLabel: {
  1406. formatter(value) {
  1407. return parseFloat(value.toFixed(1));
  1408. },
  1409. },
  1410. },
  1411. ],
  1412. series: series,
  1413. };
  1414. // 基于准备好的dom,初始化echarts实例
  1415. let dom = document.getElementById(name);
  1416. dom && dom.removeAttribute("_echarts_instance_");
  1417. myChart = this.$echarts.init(dom);
  1418. this.problem2 = myChart;
  1419. myChart.setOption(option);
  1420. window.addEventListener("resize", () => {
  1421. myChart.resize();
  1422. });
  1423. },
  1424. clickStopRow(type) {
  1425. this.showTableDialog = true;
  1426. if (type === "left") {
  1427. if (!this.bjSwitch) {
  1428. this.getShutDownevenList("gz", "WT2000D121H85", 100);
  1429. } else {
  1430. this.getShutDownevenList("wh", "WT2000D121H85", 100);
  1431. }
  1432. } else {
  1433. if (!this.bjSwitch2) {
  1434. this.getShutDownevenList("gz", "UP2000-130", 100);
  1435. } else {
  1436. this.getShutDownevenList("wh", "UP2000-130", 100);
  1437. }
  1438. }
  1439. },
  1440. changeBjSwitch(type) {
  1441. if (type === "left") {
  1442. this.bjSwitch = !this.bjSwitch;
  1443. if (!this.bjSwitch) {
  1444. this.getShutDownevenList("gz", "WT2000D121H85", 5);
  1445. } else {
  1446. this.getShutDownevenList("wh", "WT2000D121H85", 5);
  1447. }
  1448. } else {
  1449. this.bjSwitch2 = !this.bjSwitch2;
  1450. if (!this.bjSwitch2) {
  1451. this.getShutDownevenList("gz", "UP2000-130", 5);
  1452. } else {
  1453. this.getShutDownevenList("wh", "UP2000-130", 5);
  1454. }
  1455. }
  1456. },
  1457. changeWarnSwitch(val) {
  1458. this.warnSwitch = val;
  1459. this.getFindCtFeature("WT2000D121H85", val);
  1460. },
  1461. changeWarnSwitch2(val) {
  1462. this.warnSwitch2 = val;
  1463. this.getFindCtFeature("UP2000-130", val);
  1464. },
  1465. changeProbSwitch(val) {
  1466. this.probSwitch = val;
  1467. this.getShutDownEvent("WT2000D121H85", val);
  1468. },
  1469. changeProbSwitch2(val) {
  1470. this.probSwitch2 = val;
  1471. this.getShutDownEvent("UP2000-130", val);
  1472. },
  1473. changeProbPC(type) {
  1474. if (type === "left") {
  1475. this.probPC = !this.probPC;
  1476. this.getShutDownEvent("WT2000D121H85", this.probSwitch);
  1477. } else {
  1478. this.probPC2 = !this.probPC2;
  1479. this.getShutDownEvent("UP2000-130", this.probSwitch2);
  1480. }
  1481. },
  1482. changeWarnPC(type) {
  1483. if (type === "left") {
  1484. this.warnPC = !this.warnPC;
  1485. this.getFindCtFeature("WT2000D121H85", this.warnSwitch);
  1486. } else {
  1487. this.warnPC2 = !this.warnPC2;
  1488. this.getFindCtFeature("UP2000-130", this.warnSwitch2);
  1489. }
  1490. },
  1491. clickTime(type) {
  1492. let res = jsonData;
  1493. this.noTimeDialog = true;
  1494. this.noTimeType = type;
  1495. let that = this;
  1496. // 72小时功率曲线
  1497. if (res.data["72time"] && res.data["72time"].length > 0) {
  1498. let xAxis = [];
  1499. let seriesSpeed = [];
  1500. let seriesGl = [];
  1501. res.data["72time"].forEach((it) => {
  1502. xAxis.push(dayjs(it.time).format("MM-DD HH:mm"));
  1503. seriesSpeed.push(it.speed);
  1504. seriesGl.push(it.expectedpower);
  1505. });
  1506. let series = [
  1507. {
  1508. name: "故障次数",
  1509. data: seriesSpeed,
  1510. type: "line",
  1511. symbol: "none",
  1512. },
  1513. {
  1514. name: "故障时长",
  1515. data: seriesGl,
  1516. yAxisIndex: 1,
  1517. type: "line",
  1518. symbol: "none",
  1519. },
  1520. ];
  1521. this.problem3 = {
  1522. xAxis: xAxis,
  1523. series: series,
  1524. };
  1525. }
  1526. if (type === "left") {
  1527. that.getShutdownEventByDay("WT2000D121H85", that.radioTime, "Dia");
  1528. that.getShutdownEventByMap("WT2000D121H85", that.radioTime);
  1529. } else {
  1530. that.getShutdownEventByDay("UP2000-130", that.radioTime, "Dia");
  1531. that.getShutdownEventByMap("UP2000-130", that.radioTime);
  1532. }
  1533. },
  1534. // 获取历史记录表
  1535. async getAlarmHistoryt(params, type) {
  1536. if (type === "history") {
  1537. (params.alarmType = "windturbine"),
  1538. (params.stationid = "NX_FGS_HA_FDC_STA"),
  1539. (params.deviceid = "");
  1540. } else {
  1541. (params.alarmType = "custom"),
  1542. (params.stationid = "NX_FGS_HA_FDC_STA"),
  1543. (params.deviceid = ""),
  1544. (params.deviceType = "windturbine");
  1545. }
  1546. const { data } = await alarm_history(params);
  1547. if (data) {
  1548. if (type === "history") {
  1549. data?.ls?.forEach((ele) => {
  1550. ele.isCloseName = ele.endts ? "已解除" : "未解除";
  1551. ele.rmlsTime = ele.ts > 0 ? this.formatTime(ele.ts) : "--";
  1552. });
  1553. this.rmls.data = data?.ls;
  1554. } else {
  1555. data?.ls?.forEach((ele) => {
  1556. ele.isCloseName = ele.endts ? "已解除" : "未解除";
  1557. ele.selsTime = ele.ts > 0 ? this.formatTime(ele.ts) : "--";
  1558. });
  1559. this.sels.data = data?.ls;
  1560. }
  1561. } else {
  1562. this.sels.data = dataJson.data.sels.data;
  1563. this.warnChartData = dataJson.data.warnChartData;
  1564. this.probChartData = dataJson.data.probChartData;
  1565. }
  1566. },
  1567. // 时间格式化
  1568. formatTime(val) {
  1569. return dayjs(val).format("YYYY-MM-DD HH:mm:ss");
  1570. },
  1571. // 获取中部地图数据
  1572. getWpHealthInfo() {
  1573. let that = this;
  1574. that.API.requestData({
  1575. method: "POST",
  1576. subUrl: "sandtable/judgeWpHealth",
  1577. data: {
  1578. wpId: that.wpId,
  1579. },
  1580. success(res) {
  1581. that.mapSource = res.data;
  1582. },
  1583. });
  1584. },
  1585. // 获取报警玫瑰图
  1586. getWarnMGT() {
  1587. let that = this;
  1588. that.API.requestData({
  1589. method: "GET",
  1590. baseURL: "http://192.168.1.82:8075/",
  1591. subUrl: "alarm/count/query/alltotal",
  1592. data: {
  1593. stationid: that.wpId,
  1594. },
  1595. success(res) {
  1596. let warnChartData = [];
  1597. for (let key in res.data) {
  1598. const ele = res.data[key];
  1599. warnChartData.push({
  1600. value: ele.count,
  1601. name: ele.relatePartsText,
  1602. });
  1603. }
  1604. that.warnChartData = warnChartData;
  1605. },
  1606. });
  1607. },
  1608. // 获取故障玫瑰图
  1609. getStopMGT() {
  1610. let that = this;
  1611. that.API.requestData({
  1612. method: "GET",
  1613. baseURL: "http://192.168.1.82:8075/",
  1614. subUrl: "shutdown/count/alltotal",
  1615. data: {
  1616. stId: that.wpId,
  1617. },
  1618. success(res) {
  1619. let warnChartData = [];
  1620. for (let key in res.data) {
  1621. const ele = res.data[key];
  1622. warnChartData.push({
  1623. value: ele.count,
  1624. name: ele.type,
  1625. });
  1626. }
  1627. that.warnChartData = warnChartData;
  1628. },
  1629. });
  1630. },
  1631. // 获取库存玫瑰图
  1632. getRepertoryMGT() {
  1633. let that = this;
  1634. that.API.requestData({
  1635. method: "GET",
  1636. baseURL: "http://10.155.32.4:9988/",
  1637. subUrl: "inventory/groupcount",
  1638. data: {
  1639. stId: that.wpId,
  1640. },
  1641. success(res) {
  1642. let bjChartData = [];
  1643. for (let key in res.data) {
  1644. const ele = res.data[key];
  1645. bjChartData.push({
  1646. value: ele.curbal,
  1647. name: ele.description,
  1648. });
  1649. }
  1650. that.bjChartData = bjChartData;
  1651. },
  1652. });
  1653. },
  1654. // 获取记录玫瑰图
  1655. getRecordMGT() {
  1656. let that = this;
  1657. that.API.requestData({
  1658. method: "GET",
  1659. baseURL: "http://10.155.32.4:9988/",
  1660. subUrl: "equoperationrecord/equupdatecount",
  1661. data: {
  1662. stId: that.wpId,
  1663. },
  1664. success(res) {
  1665. let bjChartData = [];
  1666. for (let key in res.data) {
  1667. const ele = res.data[key];
  1668. bjChartData.push({
  1669. value: ele.count,
  1670. name: ele.description,
  1671. });
  1672. }
  1673. that.bjChartData = bjChartData;
  1674. },
  1675. });
  1676. },
  1677. // 获取中部地图数据
  1678. getTop4Info() {
  1679. let that = this;
  1680. that.API.requestData({
  1681. method: "GET",
  1682. baseURL: "http://10.155.32.4:9988/",
  1683. subUrl: "equoperationrecord/top4",
  1684. data: {
  1685. stId: that.wpId,
  1686. },
  1687. success(res) {
  1688. res.data.forEach((ele, index) => {
  1689. ele.index = index;
  1690. ele.jobcode = ele.jobcode || "------";
  1691. });
  1692. that.workData.data = res.data;
  1693. },
  1694. });
  1695. },
  1696. // 获取主要指标
  1697. getWpMainInfo() {
  1698. let that = this;
  1699. that.API.requestData({
  1700. method: "GET",
  1701. baseURL: "http://10.155.32.4:8034/",
  1702. subUrl: "benchmark/zyzb",
  1703. data: {
  1704. windPowerStation: that.wpId,
  1705. },
  1706. success(res) {
  1707. that.mainInfo = res.data;
  1708. that.showMainInfoDialog = true;
  1709. },
  1710. });
  1711. },
  1712. // 切换人员展示
  1713. changePeople(index) {
  1714. if (!this.peopleAnmLock && this.workDataIndex !== index) {
  1715. this.peopleAnmLock = true;
  1716. this.peopleClass = "fadeOutRight";
  1717. setTimeout(() => {
  1718. this.workDataIndex = index;
  1719. this.peopleClass = "fadeInRight";
  1720. this.peopleAnmLock = false;
  1721. }, 150);
  1722. }
  1723. },
  1724. // 点击风场或者光伏
  1725. clickMapItem(videoArray, wpId) {
  1726. this.wpId = wpId;
  1727. // this.videoArray.forEach((pEle, pIndex) => {
  1728. // pEle.forEach((cEle, cIndex) => {
  1729. // setTimeout(() => {
  1730. // // 设置隐藏动画
  1731. // cEle.class = "animated a1 flipOutX";
  1732. // setTimeout(() => {
  1733. // // 修改 token
  1734. // cEle.token =
  1735. // "?token=" + videoArray[pIndex + cIndex] + "&autoplay=true";
  1736. // setTimeout(() => {
  1737. // // 设置显示动画
  1738. // cEle.class = "animated a1 flipInX";
  1739. // }, 150);
  1740. // }, 350);
  1741. // }, (pIndex + cIndex + pIndex) * 150);
  1742. // });
  1743. // });
  1744. this.videoArray1.forEach((pEle, pIndex) => {
  1745. pEle.forEach((cEle, cIndex) => {
  1746. setTimeout(() => {
  1747. // 设置隐藏动画
  1748. cEle.class = "animated a1 flipOutX";
  1749. setTimeout(() => {
  1750. // 修改 token
  1751. cEle.code = videoArray[pIndex + cIndex];
  1752. setTimeout(() => {
  1753. // 设置显示动画
  1754. cEle.class = "animated a1 flipInX";
  1755. }, 150);
  1756. }, 350);
  1757. }, (pIndex + cIndex + pIndex) * 150);
  1758. });
  1759. });
  1760. this.getWtInfo();
  1761. this.getWpHealthInfo();
  1762. this.getTop4Info();
  1763. this.getWarnMGT();
  1764. this.getRepertoryMGT();
  1765. this.getWpMainInfo();
  1766. },
  1767. when() {
  1768. this.showPanel = true;
  1769. },
  1770. },
  1771. // 生命周期钩子
  1772. beforeCreate() {
  1773. // 创建前
  1774. },
  1775. created() {
  1776. const clientHeight =
  1777. document.documentElement.clientHeight || document.body.clientHeight;
  1778. if (clientHeight === 1080) {
  1779. this.isFullScreen = true;
  1780. } else {
  1781. this.isFullScreen = false;
  1782. }
  1783. // this.getWpHealthInfo();
  1784. // this.getTop4Info();
  1785. // this.getWarnMGT();
  1786. // this.getRepertoryMGT();
  1787. this.timeStr = new Date().formatDate("MM-dd hh:mm");
  1788. this.timmer1 = setInterval(() => {
  1789. this.timeStr = new Date().formatDate("MM-dd hh:mm");
  1790. });
  1791. },
  1792. beforeMount() {
  1793. // 渲染前
  1794. },
  1795. mounted() {
  1796. window.onresize = () => {
  1797. const clientHeight =
  1798. document.documentElement.clientHeight || document.body.clientHeight;
  1799. this.isFullScreen = window.screen.height == clientHeight;
  1800. };
  1801. // 渲染后
  1802. this.$nextTick(() => {
  1803. // this.init(jsonDataHT);
  1804. this.getDataInfo();
  1805. this.timmer = setInterval(() => {
  1806. this.getDataInfo();
  1807. }, 10000);
  1808. });
  1809. },
  1810. unmounted() {
  1811. clearInterval(this.timmer);
  1812. this.timmer = null;
  1813. clearInterval(this.timmer1);
  1814. this.timmer1 = null;
  1815. },
  1816. watch: {
  1817. $route: {
  1818. handler(val) {
  1819. if (val.path !== "/integratedAlarm") {
  1820. clearInterval(this.timmer);
  1821. this.timmer = null;
  1822. } else {
  1823. this.timmer = setInterval(() => {
  1824. this.getDataInfo();
  1825. }, 10000);
  1826. }
  1827. },
  1828. },
  1829. },
  1830. beforeUpdate() {
  1831. // 数据更新前
  1832. },
  1833. updated() {
  1834. // 数据更新后
  1835. },
  1836. };
  1837. </script>
  1838. <style lang="less">
  1839. .sand-table {
  1840. width: 100%;
  1841. // height: 91.667vh;
  1842. height: 100%;
  1843. position: relative;
  1844. background-image: url("../../assets/png/3dback_1.png");
  1845. background-repeat: no-repeat;
  1846. background-size: cover;
  1847. .i3dback {
  1848. position: fixed;
  1849. // z-index: -1;
  1850. width: 100vw;
  1851. height: 100%;
  1852. top: 0;
  1853. left: 0;
  1854. }
  1855. .i3dcloud {
  1856. position: absolute;
  1857. z-index: 2;
  1858. width: 100vw;
  1859. height: 100vh;
  1860. top: 0;
  1861. left: 0;
  1862. }
  1863. .left-panel {
  1864. width: 360px;
  1865. margin-top: 20px;
  1866. }
  1867. .right-panel {
  1868. width: 36.852vh;
  1869. .mask {
  1870. width: 100%;
  1871. height: 28vh;
  1872. background: url("~@assets/nxfImg/ship.png");
  1873. background-size: 100% 100%;
  1874. }
  1875. }
  1876. .three-model-layer {
  1877. position: absolute;
  1878. width: 100%;
  1879. height: 100%;
  1880. z-index: 1;
  1881. }
  1882. .sand-table-left {
  1883. height: 79vh;
  1884. position: absolute;
  1885. left: 0;
  1886. top: 0;
  1887. z-index: 2;
  1888. }
  1889. .sand-table-right {
  1890. height: 79vh;
  1891. position: absolute;
  1892. right: 0;
  1893. top: 0;
  1894. z-index: 2;
  1895. }
  1896. .sand-table-bottom {
  1897. position: absolute;
  1898. bottom: 20px;
  1899. z-index: 2;
  1900. display: flex;
  1901. transform: 0.2s;
  1902. .stb-p {
  1903. margin-left: 0.926vh;
  1904. }
  1905. }
  1906. .pre-img-box {
  1907. display: flex;
  1908. align-items: center;
  1909. justify-content: center;
  1910. margin-top: 0.556vh;
  1911. padding: 0;
  1912. position: relative;
  1913. cursor: pointer;
  1914. .sand-table-bottom {
  1915. position: absolute;
  1916. bottom: 0;
  1917. z-index: 2;
  1918. display: flex;
  1919. transition: 0.2s;
  1920. }
  1921. .mask {
  1922. width: 100%;
  1923. height: 8.657vh;
  1924. background: url("~@assets/nxfImg/ship.png");
  1925. background-size: 100% 100%;
  1926. // img {
  1927. // width: 100%;
  1928. // height: 100px;
  1929. // }
  1930. }
  1931. .pre-img {
  1932. position: relative;
  1933. width: 95%;
  1934. height: 8.657vh;
  1935. z-index: 4;
  1936. }
  1937. }
  1938. .person-info-box {
  1939. display: flex;
  1940. .header {
  1941. width: 75px;
  1942. }
  1943. }
  1944. .table {
  1945. width: calc(100% + 2.963vh);
  1946. margin-left: -1.481vh;
  1947. margin-bottom: -1.481vh;
  1948. tr {
  1949. cursor: pointer;
  1950. }
  1951. .com-table thead tr th,
  1952. .com-table tr td {
  1953. padding: 0.556vh 0;
  1954. color: #fff;
  1955. }
  1956. }
  1957. .animated.a0 {
  1958. animation-duration: 0.35s;
  1959. }
  1960. .animated.a1 {
  1961. animation-duration: 0.5s;
  1962. }
  1963. .el-overlay {
  1964. overflow: hidden;
  1965. }
  1966. .footer {
  1967. display: flex;
  1968. justify-content: space-between;
  1969. width: 100%;
  1970. height: 19vh;
  1971. position: absolute;
  1972. z-index: 111;
  1973. .hover72Power,
  1974. .monthPower {
  1975. width: calc(50% - 10px);
  1976. background: rgba(41, 45, 53, 0.4);
  1977. border-radius: 6px;
  1978. position: relative;
  1979. .hidBtn {
  1980. position: absolute;
  1981. left: 5px;
  1982. top: 5px;
  1983. width: 0;
  1984. height: 24px;
  1985. cursor: pointer;
  1986. }
  1987. }
  1988. .hover72Power {
  1989. .hidBtn {
  1990. width: 125px;
  1991. }
  1992. }
  1993. .monthPower {
  1994. .hidBtn {
  1995. width: 75px;
  1996. }
  1997. }
  1998. }
  1999. }
  2000. #sandTable.sand-table .curModal .el-dialog__body {
  2001. max-height: 600px;
  2002. overflow-y: scroll;
  2003. }
  2004. .exchange {
  2005. cursor: pointer;
  2006. }
  2007. .weatherBox {
  2008. width: 100%;
  2009. display: flex;
  2010. justify-content: space-around;
  2011. align-items: center;
  2012. .l,
  2013. .r {
  2014. width: 48%;
  2015. height: 500px;
  2016. padding: 50px 0;
  2017. }
  2018. .el-collapse {
  2019. border-top: 1px solid #999;
  2020. }
  2021. .el-collapse-item .el-collapse-item__wrap {
  2022. border-bottom: 1px solid #999;
  2023. }
  2024. .el-collapse-item__content {
  2025. background: rgba(18, 29, 28, 1);
  2026. color: rgba(255, 255, 255, 0.75);
  2027. padding: 20px;
  2028. }
  2029. .el-collapse-item__header {
  2030. background: rgb(18, 29, 28);
  2031. border-bottom: 1px solid #999;
  2032. color: rgba(255, 255, 255, 0.75);
  2033. }
  2034. .el-card__header,
  2035. .el-collapse,
  2036. .el-collapse-item__header {
  2037. border-bottom: 1px solid #999;
  2038. }
  2039. .collapseItemTitle {
  2040. display: flex;
  2041. justify-content: space-between;
  2042. align-items: center;
  2043. width: 100%;
  2044. .svg {
  2045. width: 20px;
  2046. height: 20px;
  2047. }
  2048. .info {
  2049. margin-left: 4px;
  2050. }
  2051. .otherWea {
  2052. margin-right: 10px;
  2053. }
  2054. }
  2055. .other-info {
  2056. text-align: center;
  2057. font-size: @fontsize-s;
  2058. .text {
  2059. color: @font-color;
  2060. font-size: 12px;
  2061. }
  2062. .value {
  2063. margin: 0.741vh 0 0 0;
  2064. }
  2065. .other-icon {
  2066. margin: 0 auto;
  2067. }
  2068. }
  2069. }
  2070. .videoBoxiframe {
  2071. border: none;
  2072. overflow: hidden;
  2073. cursor: pointer;
  2074. }
  2075. .modal {
  2076. .dialogTitle {
  2077. position: relative;
  2078. left: 10px;
  2079. }
  2080. .jumpBtn {
  2081. position: absolute;
  2082. right: 30px;
  2083. top: 8px;
  2084. cursor: pointer;
  2085. font-size: 20px;
  2086. }
  2087. .el-divider__text {
  2088. background: rgb(17, 28, 27);
  2089. color: #b3bdc0;
  2090. }
  2091. .el-divider {
  2092. background: #b3bdc0;
  2093. }
  2094. animation-duration: 0;
  2095. @keyframes dialog-fade-in {
  2096. 0% {
  2097. transform: translate3d(-1000%, -1000%, 0);
  2098. opacity: 0;
  2099. }
  2100. 100% {
  2101. transform: translate3d(-1000%, -1000%, 0);
  2102. opacity: 1;
  2103. }
  2104. }
  2105. @keyframes dialog-fade-out {
  2106. 0% {
  2107. // transform: translate3d(0, 0, 0);
  2108. transform: translate3d(-1000%, -1000%, 0);
  2109. opacity: 1;
  2110. }
  2111. 100% {
  2112. // transform: translate3d(0, -100%, 0);
  2113. transform: translate3d(-1000%, -1000%, 0);
  2114. opacity: 0;
  2115. }
  2116. }
  2117. }
  2118. .el-overlay {
  2119. .el-overlay-dialog {
  2120. .el-dialog {
  2121. .el-dialog__body {
  2122. padding-top: 0 !important;
  2123. .allStyle {
  2124. // max-height: 55vh;
  2125. // overflow: auto;
  2126. .radioGroupTime {
  2127. display: flex;
  2128. margin-bottom: 10px;
  2129. .el-date-editor {
  2130. margin-right: 10px;
  2131. }
  2132. }
  2133. .allMain {
  2134. .mainTit {
  2135. display: inline-block;
  2136. margin-left: 10px;
  2137. font-size: 20px;
  2138. color: #fff;
  2139. margin-bottom: 10px;
  2140. }
  2141. .allMsg {
  2142. width: 100%;
  2143. height: 500px;
  2144. display: flex;
  2145. .warnLine {
  2146. width: 60%;
  2147. height: 100%;
  2148. }
  2149. .warnPie {
  2150. width: 40%;
  2151. height: 100%;
  2152. }
  2153. }
  2154. }
  2155. }
  2156. }
  2157. }
  2158. }
  2159. }
  2160. </style>