index.vue 35 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277
  1. <template>
  2. <div class="dustMonitor">
  3. <customHeader>束管日报分析</customHeader>
  4. <div class="content-container">
  5. <div class="file-list">
  6. <ul>
  7. <li v-for="item in selectList" :key="item.id" :class="{ selected: item.id === selectedFileId }" @click="handleFileClick(item)">
  8. {{ item.fileName }}
  9. </li>
  10. </ul>
  11. </div>
  12. <div class="table-container">
  13. <a-table :columns="computedColumns" :data-source="tableData" size="small" :pagination="false" :scroll="{ y: 250 }" class="tableW">
  14. <template #bodyCell="{ column, record }">
  15. <template v-if="column.dataIndex === 'action'">
  16. <a class="action-link" @click="toDetail(record)">数据分析</a>
  17. </template>
  18. <template v-else>
  19. <template v-if="record[column.dataIndex] === null">
  20. <span>-</span>
  21. </template>
  22. </template>
  23. </template>
  24. </a-table>
  25. <div class="data-container">
  26. <div id="barChart" class="bar-chart"></div>
  27. <div class="data-content">
  28. <div class="title">煤自燃阶段统计分析</div>
  29. <div class="explain">测点共计{{ total }}个</div>
  30. <div class="progress-label">潜伏期阶段:{{ qfqCount }}</div>
  31. <Progress :percent="qfqPercent" size="default" strokeColor="green" :show-info="true" :format="() => qfqCount" />
  32. <div class="progress-label">缓慢氧化升温阶段:{{ latentCount }}</div>
  33. <Progress :percent="latentPercent" size="default" strokeColor="yellow" :show-info="true" :format="() => latentCount" />
  34. <div class="progress-label">加速氧化升温阶段:{{ selfHeatingCount }}</div>
  35. <Progress :percent="selfHeatingPercent" size="default" strokeColor="orange‌" :show-info="true" :format="() => selfHeatingCount" />
  36. <div class="progress-label">剧烈氧化升温阶段:{{ combustionCount }}</div>
  37. <Progress :percent="combustionPercent" size="default" strokeColor="red" :show-info="true" :format="() => combustionCount" />
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. <a-modal style="width: 60%; height: 300px" title="爆炸三角形" v-model:visible="modalVisible" :draggable="true" :footer="null">
  43. <div class="blast-delta-container">
  44. <BlastDelta :posMonitor="posMonitor" style="width: calc(50% - 20px)" />
  45. <BlastDelta1 :posMonitor="posMonitor" style="width: calc(50% - 20px)" />
  46. </div>
  47. </a-modal>
  48. </div>
  49. </template>
  50. <script setup lang="ts">
  51. import { ref, onMounted, computed, shallowRef, reactive, nextTick } from 'vue';
  52. import {
  53. columns,
  54. Hjtcolumns,
  55. Bdcolumns,
  56. Bltcolumns,
  57. Sgtcolumns,
  58. Yjlcolumns,
  59. Cctrkcolumns,
  60. wlmlcolumns,
  61. Cctkcolumns,
  62. Jinjiecolumns,
  63. } from './bundle-table.data';
  64. import { getBundleInfoList, getAllFileList, getAllFileListById } from './bundle-table.api';
  65. import customHeader from '/@/components/vent/customHeader.vue';
  66. // import { blastDelta } from './modal/blastDelta.vue';
  67. import BlastDelta from './modal/blastDelta.vue';
  68. import BlastDelta1 from './modal/blastDelta1.vue';
  69. import * as echarts from 'echarts';
  70. import { Progress } from 'ant-design-vue';
  71. import { useGlobSetting } from '/@/hooks/setting';
  72. // import 'ant-design-vue/dist/antd.css'; // 引入样式
  73. let selectList = ref<any[]>([]);
  74. let jcddArr = ref<any[]>([]);
  75. let formSearch = reactive({
  76. pageNum: 1,
  77. pageSize: 1000,
  78. id: '',
  79. fileName: '',
  80. });
  81. const total = ref(0);
  82. const { sysOrgCode } = useGlobSetting();
  83. const qfqCount = ref(0); // 潜伏期
  84. const latentCount = ref(0); // 缓慢氧化阶段(潜伏期)
  85. const selfHeatingCount = ref(0); // 加速氧化阶段(自热期)
  86. const combustionCount = ref(0); // 剧烈氧化阶段(燃烧期)
  87. const qfqPercent = ref(0); // 潜伏期(潜伏期)
  88. const latentPercent = ref(0); // 缓慢氧化阶段(潜伏期)
  89. const selfHeatingPercent = ref(0); // 加速氧化阶段(自热期)
  90. const combustionPercent = ref(0); // 剧烈氧化阶段(燃烧期)
  91. let tableData = ref<any[]>([]);
  92. let modalVisible = ref(false);
  93. let selectedFileId = ref<string | null>(null);
  94. const posMonitor = shallowRef({});
  95. const computedColumns = computed(() => {
  96. switch (sysOrgCode) {
  97. case 'sdmtjtdltmkhjtj':
  98. return Hjtcolumns; // 活鸡兔对应的列配置
  99. case 'sdmtjtBdmk':
  100. return Bdcolumns; // 保德对应的列配置
  101. case 'sdmtjtbltmk':
  102. return Bltcolumns; // 补连塔对应的列配置
  103. case 'sdmtjtsgtmk':
  104. return Sgtcolumns; // 石圪台对应的列配置
  105. case 'sdmtjtyjlmk':
  106. return Yjlcolumns; // 榆家梁对应的列配置
  107. case 'sdmtjtcctrk':
  108. return Cctrkcolumns; // 寸草塔二矿对应的列配置
  109. case 'sdmtjtwlmlmk':
  110. return wlmlcolumns; // 乌兰木伦对应的列配置
  111. case 'sdmtjtcctmk':
  112. return Cctkcolumns; // 乌兰木伦对应的列配置
  113. case 'sdmtjtjjmk':
  114. return Jinjiecolumns; // 锦界对应的列配置
  115. default:
  116. return columns; // 默认情况下返回的列配置
  117. }
  118. });
  119. function updateChart(data: any) {
  120. const chartDom = document.getElementById('barChart');
  121. const myChart = echarts.init(chartDom);
  122. const categories = data.map((item: any) => item.jcdd);
  123. const c2h2MaxValues = data.map((item: any) => parseFloat(item.c2h2_max));
  124. const c2h2MinValues = data.map((item: any) => parseFloat(item.c2h2_min));
  125. const c2h2AveValues = data.map((item: any) => parseFloat(item.c2h2_ave));
  126. const c2h4MaxValues = data.map((item: any) => parseFloat(item.c2h4_max));
  127. const c2h4MinValues = data.map((item: any) => parseFloat(item.c2h4_min));
  128. const c2h4AveValues = data.map((item: any) => parseFloat(item.c2h4_ave));
  129. const c2h6AveValues = data.map((item: any) => parseFloat(item.c2h6_ave));
  130. const ch4MaxValues = data.map((item: any) => parseFloat(item.ch4_max));
  131. const ch4MinValues = data.map((item: any) => parseFloat(item.ch4_min));
  132. const ch4AveValues = data.map((item: any) => parseFloat(item.ch4_ave));
  133. const co2MaxValues = data.map((item: any) => parseFloat(item.co2_max));
  134. const co2MinValues = data.map((item: any) => parseFloat(item.co2_min));
  135. const co2AveValues = data.map((item: any) => parseFloat(item.co2_ave));
  136. const coMaxValues = data.map((item: any) => parseFloat(item.co_max));
  137. const coMinValues = data.map((item: any) => parseFloat(item.co_min));
  138. const coAveValues = data.map((item: any) => parseFloat(item.co_ave));
  139. const o2MaxValues = data.map((item: any) => parseFloat(item.o2_max));
  140. const o2MinValues = data.map((item: any) => parseFloat(item.o2_min));
  141. const o2AveValues = data.map((item: any) => parseFloat(item.o2_ave));
  142. const n2MaxValues = data.map((item: any) => parseFloat(item.n2_max));
  143. const n2MinValues = data.map((item: any) => parseFloat(item.n2_min));
  144. const n2AveValues = data.map((item: any) => parseFloat(item.n2_ave));
  145. const no2MaxValues = data.map((item: any) => parseFloat(item.no2_max));
  146. const no2MinValues = data.map((item: any) => parseFloat(item.no2_min));
  147. const no2AveValues = data.map((item: any) => parseFloat(item.no2_ave));
  148. const h2MaxValues = data.map((item: any) => parseFloat(item.h2_max));
  149. const h2MinValues = data.map((item: any) => parseFloat(item.h2_min));
  150. const h2AveValues = data.map((item: any) => parseFloat(item.h2_ave));
  151. const getSeriesConfig = (sysOrgCode) => {
  152. switch (sysOrgCode) {
  153. case 'sdmtjtdltmkhjtj':
  154. return [
  155. {
  156. name: 'CO₂最大值',
  157. data: co2MaxValues,
  158. type: 'bar',
  159. },
  160. {
  161. name: 'CO₂平均值',
  162. data: co2AveValues,
  163. type: 'bar',
  164. },
  165. {
  166. name: 'CO最大值',
  167. data: coMaxValues,
  168. type: 'bar',
  169. },
  170. {
  171. name: 'CO平均值',
  172. data: coAveValues,
  173. type: 'bar',
  174. },
  175. {
  176. name: 'O₂最小值',
  177. data: o2MinValues,
  178. type: 'bar',
  179. },
  180. {
  181. name: 'O₂平均值',
  182. data: o2AveValues,
  183. type: 'bar',
  184. },
  185. {
  186. name: 'CH₄最大值',
  187. data: ch4MaxValues,
  188. type: 'bar',
  189. },
  190. {
  191. name: 'CH₄平均值',
  192. data: ch4AveValues,
  193. type: 'bar',
  194. },
  195. {
  196. name: 'N₂最大值',
  197. data: n2MaxValues,
  198. type: 'bar',
  199. },
  200. {
  201. name: 'N₂平均值',
  202. data: n2AveValues,
  203. type: 'bar',
  204. },
  205. {
  206. name: 'C₂H₂最大值',
  207. data: c2h2MaxValues,
  208. type: 'bar',
  209. },
  210. {
  211. name: 'C₂H₂平均值',
  212. data: c2h2AveValues,
  213. type: 'bar',
  214. },
  215. {
  216. name: 'C₂H₄最大值',
  217. data: c2h4MaxValues,
  218. type: 'bar',
  219. },
  220. {
  221. name: 'C₂H₄平均值',
  222. data: c2h4AveValues,
  223. type: 'bar',
  224. },
  225. ];
  226. case 'sdmtjtswmk':
  227. return [
  228. {
  229. name: 'C₂H₂最大值',
  230. data: c2h2MaxValues,
  231. type: 'bar',
  232. },
  233. {
  234. name: 'C₂H₂平均值',
  235. data: c2h2AveValues,
  236. type: 'bar',
  237. },
  238. {
  239. name: 'C₂H₄最大值',
  240. data: c2h4MaxValues,
  241. type: 'bar',
  242. },
  243. {
  244. name: 'C₂H₄平均值',
  245. data: c2h4AveValues,
  246. type: 'bar',
  247. },
  248. {
  249. name: 'CH₄最大值',
  250. data: ch4MaxValues,
  251. type: 'bar',
  252. },
  253. {
  254. name: 'CH₄平均值',
  255. data: ch4AveValues,
  256. type: 'bar',
  257. },
  258. {
  259. name: 'CO₂最大值',
  260. data: co2MaxValues,
  261. type: 'bar',
  262. },
  263. {
  264. name: 'CO₂平均值',
  265. data: co2AveValues,
  266. type: 'bar',
  267. },
  268. {
  269. name: 'CO最大值',
  270. data: coMaxValues,
  271. type: 'bar',
  272. },
  273. {
  274. name: 'CO平均值',
  275. data: coAveValues,
  276. type: 'bar',
  277. },
  278. {
  279. name: 'O₂最小值',
  280. data: o2MinValues,
  281. type: 'bar',
  282. },
  283. {
  284. name: 'O₂平均值',
  285. data: o2AveValues,
  286. type: 'bar',
  287. },
  288. {
  289. name: 'N₂最大值',
  290. data: n2MaxValues,
  291. type: 'bar',
  292. },
  293. {
  294. name: 'N₂平均值',
  295. data: n2AveValues,
  296. type: 'bar',
  297. },
  298. {
  299. name: 'NO₂最大值',
  300. data: no2MaxValues,
  301. type: 'bar',
  302. },
  303. {
  304. name: 'NO₂平均值',
  305. data: no2AveValues,
  306. type: 'bar',
  307. },
  308. ];
  309. case 'sdmtjtBdmk':
  310. return [
  311. {
  312. name: 'O₂最大值',
  313. data: o2MaxValues,
  314. type: 'bar',
  315. },
  316. {
  317. name: 'O₂最小值',
  318. data: o2MinValues,
  319. type: 'bar',
  320. },
  321. {
  322. name: 'O₂平均值',
  323. data: o2AveValues,
  324. type: 'bar',
  325. },
  326. {
  327. name: 'N₂最大值',
  328. data: n2MaxValues,
  329. type: 'bar',
  330. },
  331. {
  332. name: 'N₂最小值',
  333. data: n2MinValues,
  334. type: 'bar',
  335. },
  336. {
  337. name: 'N₂平均值',
  338. data: n2AveValues,
  339. type: 'bar',
  340. },
  341. {
  342. name: 'CO最大值',
  343. data: coMaxValues,
  344. type: 'bar',
  345. },
  346. {
  347. name: 'CO最小值',
  348. data: coMinValues,
  349. type: 'bar',
  350. },
  351. {
  352. name: 'CO平均值',
  353. data: coAveValues,
  354. type: 'bar',
  355. },
  356. {
  357. name: 'CO₂最大值',
  358. data: co2MaxValues,
  359. type: 'bar',
  360. },
  361. {
  362. name: 'CO₂最小值',
  363. data: co2MinValues,
  364. type: 'bar',
  365. },
  366. {
  367. name: 'CO₂平均值',
  368. data: co2AveValues,
  369. type: 'bar',
  370. },
  371. {
  372. name: 'CH₄最大值',
  373. data: ch4MaxValues,
  374. type: 'bar',
  375. },
  376. {
  377. name: 'CH₄最小值',
  378. data: ch4MinValues,
  379. type: 'bar',
  380. },
  381. {
  382. name: 'CH₄平均值',
  383. data: ch4AveValues,
  384. type: 'bar',
  385. },
  386. {
  387. name: 'C₂H₄最大值',
  388. data: c2h4MaxValues,
  389. type: 'bar',
  390. },
  391. {
  392. name: 'C₂H₄最小值',
  393. data: c2h4MinValues,
  394. type: 'bar',
  395. },
  396. {
  397. name: 'C₂H₄平均值',
  398. data: c2h4AveValues,
  399. type: 'bar',
  400. },
  401. {
  402. name: 'C₂H₂最大值',
  403. data: c2h2MaxValues,
  404. type: 'bar',
  405. },
  406. {
  407. name: 'C₂H₂最小值',
  408. data: c2h2MinValues,
  409. type: 'bar',
  410. },
  411. {
  412. name: 'C₂H₂平均值',
  413. data: c2h2AveValues,
  414. type: 'bar',
  415. },
  416. {
  417. name: 'H₂最大值',
  418. data: h2MaxValues,
  419. type: 'bar',
  420. },
  421. {
  422. name: 'H₂最小值',
  423. data: h2MinValues,
  424. type: 'bar',
  425. },
  426. {
  427. name: 'H₂平均值',
  428. data: h2AveValues,
  429. type: 'bar',
  430. },
  431. {
  432. name: 'NO₂最大值',
  433. data: no2MaxValues,
  434. type: 'bar',
  435. },
  436. {
  437. name: 'NO₂最小值',
  438. data: no2MinValues,
  439. type: 'bar',
  440. },
  441. {
  442. name: 'NO₂平均值',
  443. data: no2AveValues,
  444. type: 'bar',
  445. },
  446. ];
  447. case 'sdmtjtBltmk':
  448. return [
  449. {
  450. name: 'O₂最大值',
  451. data: o2MaxValues,
  452. type: 'bar',
  453. },
  454. {
  455. name: 'O₂最小值',
  456. data: o2MinValues,
  457. type: 'bar',
  458. },
  459. {
  460. name: 'O₂平均值',
  461. data: o2AveValues,
  462. type: 'bar',
  463. },
  464. {
  465. name: 'N₂最大值',
  466. data: n2MaxValues,
  467. type: 'bar',
  468. },
  469. {
  470. name: 'N₂最小值',
  471. data: n2MinValues,
  472. type: 'bar',
  473. },
  474. {
  475. name: 'N₂平均值',
  476. data: n2AveValues,
  477. type: 'bar',
  478. },
  479. {
  480. name: 'CO最大值',
  481. data: coMaxValues,
  482. type: 'bar',
  483. },
  484. {
  485. name: 'CO最小值',
  486. data: coMinValues,
  487. type: 'bar',
  488. },
  489. {
  490. name: 'CO平均值',
  491. data: coAveValues,
  492. type: 'bar',
  493. },
  494. {
  495. name: 'CO₂最大值',
  496. data: co2MaxValues,
  497. type: 'bar',
  498. },
  499. {
  500. name: 'CO₂最小值',
  501. data: co2MinValues,
  502. type: 'bar',
  503. },
  504. {
  505. name: 'CO₂平均值',
  506. data: co2AveValues,
  507. type: 'bar',
  508. },
  509. {
  510. name: 'CH₄最大值',
  511. data: ch4MaxValues,
  512. type: 'bar',
  513. },
  514. {
  515. name: 'CH₄最小值',
  516. data: ch4MinValues,
  517. type: 'bar',
  518. },
  519. {
  520. name: 'CH₄平均值',
  521. data: ch4AveValues,
  522. type: 'bar',
  523. },
  524. {
  525. name: 'C₂H₄最大值',
  526. data: c2h4MaxValues,
  527. type: 'bar',
  528. },
  529. {
  530. name: 'C₂H₄最小值',
  531. data: c2h4MinValues,
  532. type: 'bar',
  533. },
  534. {
  535. name: 'C₂H₄平均值',
  536. data: c2h4AveValues,
  537. type: 'bar',
  538. },
  539. {
  540. name: 'C₂H₂最大值',
  541. data: c2h2MaxValues,
  542. type: 'bar',
  543. },
  544. {
  545. name: 'C₂H₂最小值',
  546. data: c2h2MinValues,
  547. type: 'bar',
  548. },
  549. {
  550. name: 'C₂H₂平均值',
  551. data: c2h2AveValues,
  552. type: 'bar',
  553. },
  554. ];
  555. case 'sdmtjtyjlmk':
  556. return [
  557. {
  558. name: 'O₂最小值',
  559. data: o2MinValues,
  560. type: 'bar',
  561. },
  562. {
  563. name: 'O₂平均值',
  564. data: o2AveValues,
  565. type: 'bar',
  566. },
  567. {
  568. name: 'N₂最大值',
  569. data: n2MaxValues,
  570. type: 'bar',
  571. },
  572. {
  573. name: 'N₂平均值',
  574. data: n2AveValues,
  575. type: 'bar',
  576. },
  577. {
  578. name: 'CO最大值',
  579. data: coMaxValues,
  580. type: 'bar',
  581. },
  582. {
  583. name: 'CO平均值',
  584. data: coAveValues,
  585. type: 'bar',
  586. },
  587. {
  588. name: 'CO₂最大值',
  589. data: co2MaxValues,
  590. type: 'bar',
  591. },
  592. {
  593. name: 'CO₂平均值',
  594. data: co2AveValues,
  595. type: 'bar',
  596. },
  597. {
  598. name: 'CH₄最大值',
  599. data: ch4MaxValues,
  600. type: 'bar',
  601. },
  602. {
  603. name: 'CH₄平均值',
  604. data: ch4AveValues,
  605. type: 'bar',
  606. },
  607. {
  608. name: 'C₂H₄最大值',
  609. data: c2h4MaxValues,
  610. type: 'bar',
  611. },
  612. {
  613. name: 'C₂H₄平均值',
  614. data: c2h4AveValues,
  615. type: 'bar',
  616. },
  617. {
  618. name: 'C₂H₂最大值',
  619. data: c2h2MaxValues,
  620. type: 'bar',
  621. },
  622. {
  623. name: 'C₂H₂平均值',
  624. data: c2h2AveValues,
  625. type: 'bar',
  626. },
  627. ];
  628. case 'sdmtjtcctrk':
  629. return [
  630. {
  631. name: 'O₂平均值',
  632. data: o2AveValues,
  633. type: 'bar',
  634. },
  635. {
  636. name: 'N₂平均值',
  637. data: n2AveValues,
  638. type: 'bar',
  639. },
  640. {
  641. name: 'CO平均值',
  642. data: coAveValues,
  643. type: 'bar',
  644. },
  645. {
  646. name: 'CO₂平均值',
  647. data: co2AveValues,
  648. type: 'bar',
  649. },
  650. {
  651. name: 'CH₄平均值',
  652. data: ch4AveValues,
  653. type: 'bar',
  654. },
  655. {
  656. name: 'C₂H₄平均值',
  657. data: c2h4AveValues,
  658. type: 'bar',
  659. },
  660. {
  661. name: 'C₂H₂平均值',
  662. data: c2h2AveValues,
  663. type: 'bar',
  664. },
  665. {
  666. name: 'C₂H₆平均值',
  667. data: c2h6AveValues,
  668. type: 'bar',
  669. },
  670. ];
  671. case 'sdmtjtwlmlmk':
  672. return [
  673. {
  674. name: 'O₂平均值',
  675. data: o2AveValues,
  676. type: 'bar',
  677. },
  678. {
  679. name: 'N₂平均值',
  680. data: n2AveValues,
  681. type: 'bar',
  682. },
  683. {
  684. name: 'CO平均值',
  685. data: coAveValues,
  686. type: 'bar',
  687. },
  688. {
  689. name: 'CO₂平均值',
  690. data: co2AveValues,
  691. type: 'bar',
  692. },
  693. {
  694. name: 'CH₄平均值',
  695. data: ch4AveValues,
  696. type: 'bar',
  697. },
  698. {
  699. name: 'C₂H₄平均值',
  700. data: c2h4AveValues,
  701. type: 'bar',
  702. },
  703. {
  704. name: 'C₂H₂平均值',
  705. data: c2h2AveValues,
  706. type: 'bar',
  707. },
  708. ];
  709. case 'sdmtjtcctmk':
  710. return [
  711. {
  712. name: 'O₂最小值',
  713. data: o2MinValues,
  714. type: 'bar',
  715. },
  716. {
  717. name: 'O₂平均值',
  718. data: o2AveValues,
  719. type: 'bar',
  720. },
  721. {
  722. name: 'N₂最大值',
  723. data: n2MaxValues,
  724. type: 'bar',
  725. },
  726. {
  727. name: 'N₂平均值',
  728. data: n2AveValues,
  729. type: 'bar',
  730. },
  731. {
  732. name: 'CO最大值',
  733. data: coMaxValues,
  734. type: 'bar',
  735. },
  736. {
  737. name: 'CO平均值',
  738. data: coAveValues,
  739. type: 'bar',
  740. },
  741. {
  742. name: 'CO₂最大值',
  743. data: co2MaxValues,
  744. type: 'bar',
  745. },
  746. {
  747. name: 'CO₂平均值',
  748. data: co2AveValues,
  749. type: 'bar',
  750. },
  751. {
  752. name: 'CH₄最大值',
  753. data: ch4MaxValues,
  754. type: 'bar',
  755. },
  756. {
  757. name: 'CH₄平均值',
  758. data: ch4AveValues,
  759. type: 'bar',
  760. },
  761. {
  762. name: 'C₂H₄最大值',
  763. data: c2h4MaxValues,
  764. type: 'bar',
  765. },
  766. {
  767. name: 'C₂H₄平均值',
  768. data: c2h4AveValues,
  769. type: 'bar',
  770. },
  771. {
  772. name: 'C₂H₂最大值',
  773. data: c2h2MaxValues,
  774. type: 'bar',
  775. },
  776. {
  777. name: 'C₂H₂平均值',
  778. data: c2h2AveValues,
  779. type: 'bar',
  780. },
  781. ];
  782. case 'sdmtjtjjmk':
  783. return [
  784. {
  785. name: 'O₂最大值',
  786. data: o2MaxValues,
  787. type: 'bar',
  788. },
  789. {
  790. name: 'O₂最小值',
  791. data: o2MinValues,
  792. type: 'bar',
  793. },
  794. {
  795. name: 'O₂平均值',
  796. data: o2AveValues,
  797. type: 'bar',
  798. },
  799. {
  800. name: 'CO最大值',
  801. data: coMaxValues,
  802. type: 'bar',
  803. },
  804. {
  805. name: 'CO最小值',
  806. data: coMinValues,
  807. type: 'bar',
  808. },
  809. {
  810. name: 'CO平均值',
  811. data: coAveValues,
  812. type: 'bar',
  813. },
  814. {
  815. name: 'CO₂最大值',
  816. data: co2MaxValues,
  817. type: 'bar',
  818. },
  819. {
  820. name: 'CO₂最小值',
  821. data: co2MinValues,
  822. type: 'bar',
  823. },
  824. {
  825. name: 'CO₂平均值',
  826. data: co2AveValues,
  827. type: 'bar',
  828. },
  829. {
  830. name: 'CH₄最大值',
  831. data: ch4MaxValues,
  832. type: 'bar',
  833. },
  834. {
  835. name: 'CH₄最小值',
  836. data: ch4MinValues,
  837. type: 'bar',
  838. },
  839. {
  840. name: 'CH₄平均值',
  841. data: ch4AveValues,
  842. type: 'bar',
  843. },
  844. {
  845. name: 'C₂H₄最大值',
  846. data: c2h4MaxValues,
  847. type: 'bar',
  848. },
  849. {
  850. name: 'C₂H₄最小值',
  851. data: c2h4MinValues,
  852. type: 'bar',
  853. },
  854. {
  855. name: 'C₂H₄平均值',
  856. data: c2h4AveValues,
  857. type: 'bar',
  858. },
  859. {
  860. name: 'C₂H₂最大值',
  861. data: c2h2MaxValues,
  862. type: 'bar',
  863. },
  864. {
  865. name: 'C₂H₂最小值',
  866. data: c2h2MinValues,
  867. type: 'bar',
  868. },
  869. {
  870. name: 'C₂H₂平均值',
  871. data: c2h2AveValues,
  872. type: 'bar',
  873. },
  874. ];
  875. default:
  876. return [
  877. {
  878. name: 'C₂H₂最大值',
  879. data: c2h2MaxValues,
  880. type: 'bar',
  881. },
  882. {
  883. name: 'C₂H₂平均值',
  884. data: c2h2AveValues,
  885. type: 'bar',
  886. },
  887. {
  888. name: 'C₂H₄最大值',
  889. data: c2h4MaxValues,
  890. type: 'bar',
  891. },
  892. {
  893. name: 'C₂H₄平均值',
  894. data: c2h4AveValues,
  895. type: 'bar',
  896. },
  897. {
  898. name: 'CH₄最大值',
  899. data: ch4MaxValues,
  900. type: 'bar',
  901. },
  902. {
  903. name: 'CH₄平均值',
  904. data: ch4AveValues,
  905. type: 'bar',
  906. },
  907. {
  908. name: 'CO₂最大值',
  909. data: co2MaxValues,
  910. type: 'bar',
  911. },
  912. {
  913. name: 'CO₂平均值',
  914. data: co2AveValues,
  915. type: 'bar',
  916. },
  917. {
  918. name: 'CO最大值',
  919. data: coMaxValues,
  920. type: 'bar',
  921. },
  922. {
  923. name: 'CO平均值',
  924. data: coAveValues,
  925. type: 'bar',
  926. },
  927. {
  928. name: 'O₂最小值',
  929. data: o2MinValues,
  930. type: 'bar',
  931. },
  932. {
  933. name: 'O₂平均值',
  934. data: o2AveValues,
  935. type: 'bar',
  936. },
  937. // {
  938. // name: 'N₂最大值',
  939. // data: n2MaxValues,
  940. // type: 'bar',
  941. // },
  942. // {
  943. // name: 'N₂平均值',
  944. // data: n2AveValues,
  945. // type: 'bar',
  946. // },
  947. // {
  948. // name: 'NO₂最大值',
  949. // data: no2MaxValues,
  950. // type: 'bar',
  951. // },
  952. // {
  953. // name: 'NO₂平均值',
  954. // data: no2AveValues,
  955. // type: 'bar',
  956. // },
  957. ];
  958. }
  959. };
  960. const seriesConfig = getSeriesConfig(sysOrgCode);
  961. const option = {
  962. tooltip: {
  963. trigger: 'axis',
  964. backgroundColor: 'rgba(28, 72, 105, 0.5)', // 设置 tooltip 背景为透明
  965. textStyle: {
  966. color: '#ffffff', // 设置 tooltip 字体颜色为白色
  967. },
  968. axisPointer: {
  969. type: 'shadow',
  970. label: {
  971. show: true,
  972. backgroundColor: '#1c4869',
  973. },
  974. },
  975. },
  976. legend: {
  977. top: '2%',
  978. textStyle: {
  979. color: '#ffffffff',
  980. },
  981. width: '80%', // 设置图例的宽度
  982. orient: 'horizontal', // 水平布局
  983. pageIconColor: '#ffffff', // 设置翻页图标颜色
  984. pageTextStyle: {
  985. color: '#ffffff', // 设置翻页文字颜色
  986. },
  987. },
  988. xAxis: {
  989. type: 'category',
  990. data: categories,
  991. splitLine: { show: true, lineStyle: { color: 'rgba(28, 72, 105, 0.5)' } },
  992. axisLabel: {
  993. interval: 0, // 显示所有标签
  994. color: '#ffffff', // 设置 x 轴字体颜色
  995. formatter: function (value: string) {
  996. return value.length > 8 ? value.slice(0, 8) + '...' : value; // 截断长标签
  997. },
  998. },
  999. },
  1000. yAxis: {
  1001. type: 'value',
  1002. splitLine: { show: true, lineStyle: { color: 'rgba(28, 72, 105, 0.5)' } },
  1003. axisLabel: {
  1004. color: '#ffffff',
  1005. },
  1006. },
  1007. dataZoom: [
  1008. {
  1009. type: 'slider', // 会创建一个滑块来选择要显示的区域
  1010. start: 0, // 初始选中范围的起始百分比
  1011. end: (5 / categories.length) * 100, // 初始选中范围的结束百分比,根据数据条数调整
  1012. minSpan: (5 / categories.length) * 100, // 最小选中范围,根据数据条数调整
  1013. maxSpan: (5 / categories.length) * 100, // 最大选中范围,根据数据条数调整
  1014. show: true,
  1015. height: 10, // 设置滑块高度
  1016. bottom: 1, // 设置滑块距离容器底部的距离
  1017. borderColor: 'transparent', // 设置边框颜色为透明
  1018. backgroundColor: '#F6F7FB', // 设置背景颜色
  1019. handleIcon: 'path://M512,512m-448,0a448,448,0,1,0,896,0a448,448,0,1,0,-896,0Z', // 设置手柄图标为圆形
  1020. handleColor: '#C2D2FF', // 设置手柄颜色
  1021. handleSize: 13, // 设置手柄大小
  1022. handleStyle: {
  1023. borderColor: '#C2D2FF', // 设置手柄边框颜色
  1024. },
  1025. fillerColor: '#C2D2FF', // 设置选中范围的填充颜色
  1026. },
  1027. ],
  1028. grid: {
  1029. top: '21%', // 设置 grid 距离顶部的距离,增加间隔
  1030. left: '3%',
  1031. right: '4%',
  1032. bottom: '3%',
  1033. containLabel: true,
  1034. },
  1035. series: seriesConfig,
  1036. };
  1037. myChart.setOption(option);
  1038. }
  1039. //跳转到爆炸三角形
  1040. function toDetail(record: any) {
  1041. posMonitor.value = record;
  1042. modalVisible.value = true;
  1043. }
  1044. //获取束管日报
  1045. async function getTableList(params: any) {
  1046. let res = await getBundleInfoList({ type: 'bundle', ...params });
  1047. const content = res.content;
  1048. let contentArr = JSON.parse(content);
  1049. // const contentNewArr = computed(() => {
  1050. // return contentArr.map((item) => {
  1051. // let internalFireWarnLevel = '';
  1052. // const co = item.co_ave;
  1053. // const co2 = item.co2_ave;
  1054. // const c2h4 = item.c2h4_ave;
  1055. // const c2h2 = item.c2h2_ave;
  1056. // const coRatio = co / co2;
  1057. // if (co >= 0 && co <= 13.75) {
  1058. // internalFireWarnLevel = '潜伏期阶段';
  1059. // } else if (co > 13.75 && co < 67.2 && coRatio < 0.095) {
  1060. // internalFireWarnLevel = '缓慢氧化升温阶段';
  1061. // } else if ((co >= 67.2 && co < 1606.3) || (coRatio >= 0.095 && coRatio < 0.322) || c2h4 < 2) {
  1062. // internalFireWarnLevel = '加速氧化阶段';
  1063. // } else if (co >= 1606.3 || coRatio >= 0.322 || c2h4 >= 2 || c2h2 > 0) {
  1064. // internalFireWarnLevel = '剧烈氧化阶段';
  1065. // }
  1066. // return { ...item, internalFireWarnLevel };
  1067. // });
  1068. // });
  1069. total.value = contentArr.length;
  1070. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  1071. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  1072. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  1073. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  1074. qfqPercent.value = (qfqCount.value / total.value) * 100;
  1075. latentPercent.value = (latentCount.value / total.value) * 100;
  1076. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  1077. combustionPercent.value = (combustionCount.value / total.value) * 100;
  1078. tableData.value = contentArr;
  1079. nextTick(() => {
  1080. updateChart(contentArr);
  1081. });
  1082. }
  1083. async function getTableListById(params: any) {
  1084. let res = await getAllFileListById({ ...params });
  1085. const content = res.content;
  1086. let contentArr = JSON.parse(content);
  1087. total.value = contentArr.length;
  1088. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  1089. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  1090. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  1091. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  1092. qfqPercent.value = (qfqCount.value / total.value) * 100;
  1093. latentPercent.value = (latentCount.value / total.value) * 100;
  1094. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  1095. combustionPercent.value = (combustionCount.value / total.value) * 100;
  1096. tableData.value = contentArr;
  1097. nextTick(() => {
  1098. updateChart(contentArr);
  1099. });
  1100. }
  1101. //获取所有文件列表
  1102. async function getAllFile() {
  1103. let res = await getAllFileList({ type: 'bundle' });
  1104. selectList.value = res.records.map((item: any) => ({
  1105. id: item.id,
  1106. fileName: item.fileName,
  1107. }));
  1108. jcddArr.value = res.records.map((item: any) => ({
  1109. id: item.jcdd,
  1110. }));
  1111. if (selectList.value.length > 0) {
  1112. formSearch.id = selectList.value[0].id;
  1113. getSearch();
  1114. }
  1115. }
  1116. // 处理文件点击事件
  1117. function handleFileClick(item: any) {
  1118. formSearch.id = item.id;
  1119. formSearch.fileName = item.fileName;
  1120. selectedFileId.value = item.id;
  1121. getSearch();
  1122. }
  1123. //查询
  1124. function getSearch() {
  1125. // const selectedFile = selectList.value.find((item) => item.id === formSearch.id);
  1126. const params = {
  1127. id: formSearch.id,
  1128. // fileName: selectedFile ? selectedFile.fileName : '',
  1129. };
  1130. getTableListById(params);
  1131. }
  1132. onMounted(() => {
  1133. getTableList({ type: 'bundle' });
  1134. getAllFile().then(() => {
  1135. if (selectList.value.length > 0) {
  1136. formSearch.id = selectList.value[0].id;
  1137. selectedFileId.value = selectList.value[0].id;
  1138. getSearch();
  1139. }
  1140. });
  1141. });
  1142. </script>
  1143. <style lang="less" scoped>
  1144. @import '/@/design/theme.less';
  1145. .content-container {
  1146. display: flex;
  1147. width: 100%;
  1148. height: 100%;
  1149. padding-top: 54px;
  1150. }
  1151. .file-list {
  1152. width: 20%;
  1153. padding: 10px;
  1154. margin-right: 10px;
  1155. margin-bottom: 50px;
  1156. border: 1px solid #99e8ff66;
  1157. background: #27546e1a;
  1158. box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  1159. -moz-box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  1160. -webkit-box-shadow: 0px 0px 50px 1px rgb(149 235 255 / 5%) inset;
  1161. }
  1162. .file-list ul {
  1163. list-style: none;
  1164. padding: 0;
  1165. }
  1166. .file-list li {
  1167. color: #fff;
  1168. padding: 5px;
  1169. cursor: pointer;
  1170. }
  1171. .file-list li:hover,
  1172. .file-list li.selected {
  1173. background: #1c4869;
  1174. }
  1175. .table-container {
  1176. margin-top: 10px;
  1177. width: 80%;
  1178. box-sizing: border-box;
  1179. }
  1180. .data-container {
  1181. margin-top: 40px;
  1182. display: flex;
  1183. width: 100%;
  1184. height: 100%;
  1185. }
  1186. .bar-chart {
  1187. flex: 3; /* 占据 3/4 的空间 */
  1188. width: 100%;
  1189. height: 400px;
  1190. }
  1191. .data-content {
  1192. flex: 1; /* 占据 1/4 的空间 */
  1193. height: 400px;
  1194. display: flex;
  1195. flex-direction: column; /* 垂直排列进度条 */
  1196. // align-items: center; /* 水平居中 */
  1197. margin: 10px;
  1198. .title {
  1199. font-size: 18px;
  1200. font-weight: 600;
  1201. color: #fff;
  1202. margin-bottom: 20px;
  1203. }
  1204. .explain {
  1205. color: var(--vent-table-action-link);
  1206. margin-top: 18px;
  1207. }
  1208. }
  1209. .dustMonitor {
  1210. width: 100%;
  1211. height: 100%;
  1212. padding: 10px 10px 15px 10px;
  1213. box-sizing: border-box;
  1214. position: relative;
  1215. }
  1216. .yellow-progress .ant-progress-bg {
  1217. background-color: yellow !important;
  1218. }
  1219. :deep(.zxm-table-thead > tr > th:last-child) {
  1220. border-right: 1px solid #91e9fe !important;
  1221. }
  1222. :deep(.zxm-picker-input > input) {
  1223. color: #fff;
  1224. }
  1225. :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
  1226. border: 1px solid var(--vent-form-item-border) !important;
  1227. background-color: #ffffff00 !important;
  1228. }
  1229. :deep(.zxm-select-selection-item) {
  1230. color: #fff !important;
  1231. }
  1232. .blast-delta-container {
  1233. margin: 50px;
  1234. display: flex;
  1235. justify-content: space-between;
  1236. }
  1237. .progress {
  1238. width: 100%;
  1239. height: 20px;
  1240. margin-top: 10px;
  1241. }
  1242. .progress-label {
  1243. margin-top: 20px;
  1244. text-align: left;
  1245. margin-bottom: 5px;
  1246. color: #fff;
  1247. }
  1248. ::deep .progress-text {
  1249. color: #fff !important; /* 自定义百分比文字颜色 */
  1250. }
  1251. </style>