index.vue 35 KB

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