index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820
  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 } 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. default:
  91. return Bdcolumns; // 默认情况下返回的列配置
  92. }
  93. });
  94. function updateChart(data: any) {
  95. const chartDom = document.getElementById('barChart');
  96. const myChart = echarts.init(chartDom);
  97. const categories = data.map((item: any) => item.jcdd);
  98. const c2h2MaxValues = data.map((item: any) => parseFloat(item.c2h2_max));
  99. const c2h2MinValues = data.map((item: any) => parseFloat(item.c2h2_min));
  100. const c2h2AveValues = data.map((item: any) => parseFloat(item.c2h2_ave));
  101. const c2h4MaxValues = data.map((item: any) => parseFloat(item.c2h4_max));
  102. const c2h4MinValues = data.map((item: any) => parseFloat(item.c2h4_min));
  103. const c2h4AveValues = data.map((item: any) => parseFloat(item.c2h4_ave));
  104. const ch4MaxValues = data.map((item: any) => parseFloat(item.ch4_max));
  105. const ch4MinValues = data.map((item: any) => parseFloat(item.ch4_min));
  106. const ch4AveValues = data.map((item: any) => parseFloat(item.ch4_ave));
  107. const co2MaxValues = data.map((item: any) => parseFloat(item.co2_max));
  108. const co2MinValues = data.map((item: any) => parseFloat(item.co2_min));
  109. const co2AveValues = data.map((item: any) => parseFloat(item.co2_ave));
  110. const coMaxValues = data.map((item: any) => parseFloat(item.co_max));
  111. const coMinValues = data.map((item: any) => parseFloat(item.co_min));
  112. const coAveValues = data.map((item: any) => parseFloat(item.co_ave));
  113. const o2MaxValues = data.map((item: any) => parseFloat(item.o2_max));
  114. const o2MinValues = data.map((item: any) => parseFloat(item.o2_min));
  115. const o2AveValues = data.map((item: any) => parseFloat(item.o2_ave));
  116. const n2MaxValues = data.map((item: any) => parseFloat(item.n2_max));
  117. const n2MinValues = data.map((item: any) => parseFloat(item.n2_min));
  118. const n2AveValues = data.map((item: any) => parseFloat(item.n2_ave));
  119. const no2MaxValues = data.map((item: any) => parseFloat(item.no2_max));
  120. const no2MinValues = data.map((item: any) => parseFloat(item.no2_min));
  121. const no2AveValues = data.map((item: any) => parseFloat(item.no2_ave));
  122. const h2MaxValues = data.map((item: any) => parseFloat(item.h2_max));
  123. const h2MinValues = data.map((item: any) => parseFloat(item.h2_min));
  124. const h2AveValues = data.map((item: any) => parseFloat(item.h2_ave));
  125. const getSeriesConfig = (sysOrgCode) => {
  126. switch (sysOrgCode) {
  127. case 'sdmtjtdltmkhjtj':
  128. return [
  129. {
  130. name: 'CO₂最大值',
  131. data: co2MaxValues,
  132. type: 'bar',
  133. },
  134. {
  135. name: 'CO₂平均值',
  136. data: co2AveValues,
  137. type: 'bar',
  138. },
  139. {
  140. name: 'CO最大值',
  141. data: coMaxValues,
  142. type: 'bar',
  143. },
  144. {
  145. name: 'CO平均值',
  146. data: coAveValues,
  147. type: 'bar',
  148. },
  149. {
  150. name: 'O₂最小值',
  151. data: o2MinValues,
  152. type: 'bar',
  153. },
  154. {
  155. name: 'O₂平均值',
  156. data: o2AveValues,
  157. type: 'bar',
  158. },
  159. {
  160. name: 'CH₄最大值',
  161. data: ch4MaxValues,
  162. type: 'bar',
  163. },
  164. {
  165. name: 'CH₄平均值',
  166. data: ch4AveValues,
  167. type: 'bar',
  168. },
  169. {
  170. name: 'N₂最大值',
  171. data: n2MaxValues,
  172. type: 'bar',
  173. },
  174. {
  175. name: 'N₂平均值',
  176. data: n2AveValues,
  177. type: 'bar',
  178. },
  179. {
  180. name: 'C₂H₂最大值',
  181. data: c2h2MaxValues,
  182. type: 'bar',
  183. },
  184. {
  185. name: 'C₂H₂平均值',
  186. data: c2h2AveValues,
  187. type: 'bar',
  188. },
  189. {
  190. name: 'C₂H₄最大值',
  191. data: c2h4MaxValues,
  192. type: 'bar',
  193. },
  194. {
  195. name: 'C₂H₄平均值',
  196. data: c2h4AveValues,
  197. type: 'bar',
  198. },
  199. ];
  200. case 'sdmtjtswmk':
  201. return [
  202. {
  203. name: 'C₂H₂最大值',
  204. data: c2h2MaxValues,
  205. type: 'bar',
  206. },
  207. {
  208. name: 'C₂H₂平均值',
  209. data: c2h2AveValues,
  210. type: 'bar',
  211. },
  212. {
  213. name: 'C₂H₄最大值',
  214. data: c2h4MaxValues,
  215. type: 'bar',
  216. },
  217. {
  218. name: 'C₂H₄平均值',
  219. data: c2h4AveValues,
  220. type: 'bar',
  221. },
  222. {
  223. name: 'CH₄最大值',
  224. data: ch4MaxValues,
  225. type: 'bar',
  226. },
  227. {
  228. name: 'CH₄平均值',
  229. data: ch4AveValues,
  230. type: 'bar',
  231. },
  232. {
  233. name: 'CO₂最大值',
  234. data: co2MaxValues,
  235. type: 'bar',
  236. },
  237. {
  238. name: 'CO₂平均值',
  239. data: co2AveValues,
  240. type: 'bar',
  241. },
  242. {
  243. name: 'CO最大值',
  244. data: coMaxValues,
  245. type: 'bar',
  246. },
  247. {
  248. name: 'CO平均值',
  249. data: coAveValues,
  250. type: 'bar',
  251. },
  252. {
  253. name: 'O₂最小值',
  254. data: o2MinValues,
  255. type: 'bar',
  256. },
  257. {
  258. name: 'O₂平均值',
  259. data: o2AveValues,
  260. type: 'bar',
  261. },
  262. {
  263. name: 'N₂最大值',
  264. data: n2MaxValues,
  265. type: 'bar',
  266. },
  267. {
  268. name: 'N₂平均值',
  269. data: n2AveValues,
  270. type: 'bar',
  271. },
  272. {
  273. name: 'NO₂最大值',
  274. data: no2MaxValues,
  275. type: 'bar',
  276. },
  277. {
  278. name: 'NO₂平均值',
  279. data: no2AveValues,
  280. type: 'bar',
  281. },
  282. ];
  283. case 'sdmtjtBdmk':
  284. return [
  285. {
  286. name: 'O₂最大值',
  287. data: o2MaxValues,
  288. type: 'bar',
  289. },
  290. {
  291. name: 'O₂最小值',
  292. data: o2MinValues,
  293. type: 'bar',
  294. },
  295. {
  296. name: 'O₂平均值',
  297. data: o2AveValues,
  298. type: 'bar',
  299. },
  300. {
  301. name: 'N₂最大值',
  302. data: n2MaxValues,
  303. type: 'bar',
  304. },
  305. {
  306. name: 'N₂最小值',
  307. data: n2MinValues,
  308. type: 'bar',
  309. },
  310. {
  311. name: 'N₂平均值',
  312. data: n2AveValues,
  313. type: 'bar',
  314. },
  315. {
  316. name: 'CO最大值',
  317. data: coMaxValues,
  318. type: 'bar',
  319. },
  320. {
  321. name: 'CO最小值',
  322. data: coMinValues,
  323. type: 'bar',
  324. },
  325. {
  326. name: 'CO平均值',
  327. data: coAveValues,
  328. type: 'bar',
  329. },
  330. {
  331. name: 'CO₂最大值',
  332. data: co2MaxValues,
  333. type: 'bar',
  334. },
  335. {
  336. name: 'CO₂最小值',
  337. data: co2MinValues,
  338. type: 'bar',
  339. },
  340. {
  341. name: 'CO₂平均值',
  342. data: co2AveValues,
  343. type: 'bar',
  344. },
  345. {
  346. name: 'CH₄最大值',
  347. data: ch4MaxValues,
  348. type: 'bar',
  349. },
  350. {
  351. name: 'CH₄最小值',
  352. data: ch4MinValues,
  353. type: 'bar',
  354. },
  355. {
  356. name: 'CH₄平均值',
  357. data: ch4AveValues,
  358. type: 'bar',
  359. },
  360. {
  361. name: 'C₂H₄最大值',
  362. data: c2h4MaxValues,
  363. type: 'bar',
  364. },
  365. {
  366. name: 'C₂H₄最小值',
  367. data: c2h4MinValues,
  368. type: 'bar',
  369. },
  370. {
  371. name: 'C₂H₄平均值',
  372. data: c2h4AveValues,
  373. type: 'bar',
  374. },
  375. {
  376. name: 'C₂H₂最大值',
  377. data: c2h2MaxValues,
  378. type: 'bar',
  379. },
  380. {
  381. name: 'C₂H₂最小值',
  382. data: c2h2MinValues,
  383. type: 'bar',
  384. },
  385. {
  386. name: 'C₂H₂平均值',
  387. data: c2h2AveValues,
  388. type: 'bar',
  389. },
  390. {
  391. name: 'H₂最大值',
  392. data: h2MaxValues,
  393. type: 'bar',
  394. },
  395. {
  396. name: 'H₂最小值',
  397. data: h2MinValues,
  398. type: 'bar',
  399. },
  400. {
  401. name: 'H₂平均值',
  402. data: h2AveValues,
  403. type: 'bar',
  404. },
  405. {
  406. name: 'NO₂最大值',
  407. data: no2MaxValues,
  408. type: 'bar',
  409. },
  410. {
  411. name: 'NO₂最小值',
  412. data: no2MinValues,
  413. type: 'bar',
  414. },
  415. {
  416. name: 'NO₂平均值',
  417. data: no2AveValues,
  418. type: 'bar',
  419. },
  420. ];
  421. default:
  422. return [
  423. {
  424. name: 'C₂H₂最大值',
  425. data: c2h2MaxValues,
  426. type: 'bar',
  427. },
  428. {
  429. name: 'C₂H₂平均值',
  430. data: c2h2AveValues,
  431. type: 'bar',
  432. },
  433. {
  434. name: 'C₂H₄最大值',
  435. data: c2h4MaxValues,
  436. type: 'bar',
  437. },
  438. {
  439. name: 'C₂H₄平均值',
  440. data: c2h4AveValues,
  441. type: 'bar',
  442. },
  443. {
  444. name: 'CH₄最大值',
  445. data: ch4MaxValues,
  446. type: 'bar',
  447. },
  448. {
  449. name: 'CH₄平均值',
  450. data: ch4AveValues,
  451. type: 'bar',
  452. },
  453. {
  454. name: 'CO₂最大值',
  455. data: co2MaxValues,
  456. type: 'bar',
  457. },
  458. {
  459. name: 'CO₂平均值',
  460. data: co2AveValues,
  461. type: 'bar',
  462. },
  463. {
  464. name: 'CO最大值',
  465. data: coMaxValues,
  466. type: 'bar',
  467. },
  468. {
  469. name: 'CO平均值',
  470. data: coAveValues,
  471. type: 'bar',
  472. },
  473. {
  474. name: 'O₂最小值',
  475. data: o2MinValues,
  476. type: 'bar',
  477. },
  478. {
  479. name: 'O₂平均值',
  480. data: o2AveValues,
  481. type: 'bar',
  482. },
  483. // {
  484. // name: 'N₂最大值',
  485. // data: n2MaxValues,
  486. // type: 'bar',
  487. // },
  488. // {
  489. // name: 'N₂平均值',
  490. // data: n2AveValues,
  491. // type: 'bar',
  492. // },
  493. // {
  494. // name: 'NO₂最大值',
  495. // data: no2MaxValues,
  496. // type: 'bar',
  497. // },
  498. // {
  499. // name: 'NO₂平均值',
  500. // data: no2AveValues,
  501. // type: 'bar',
  502. // },
  503. ];
  504. }
  505. };
  506. const seriesConfig = getSeriesConfig(sysOrgCode);
  507. const option = {
  508. tooltip: {
  509. trigger: 'axis',
  510. backgroundColor: 'rgba(28, 72, 105, 0.5)', // 设置 tooltip 背景为透明
  511. textStyle: {
  512. color: '#ffffff', // 设置 tooltip 字体颜色为白色
  513. },
  514. axisPointer: {
  515. type: 'shadow',
  516. label: {
  517. show: true,
  518. backgroundColor: '#1c4869',
  519. },
  520. },
  521. },
  522. legend: {
  523. top: '2%',
  524. textStyle: {
  525. color: '#ffffffff',
  526. },
  527. width: '80%', // 设置图例的宽度
  528. orient: 'horizontal', // 水平布局
  529. pageIconColor: '#ffffff', // 设置翻页图标颜色
  530. pageTextStyle: {
  531. color: '#ffffff', // 设置翻页文字颜色
  532. },
  533. },
  534. xAxis: {
  535. type: 'category',
  536. data: categories,
  537. splitLine: { show: true, lineStyle: { color: 'rgba(28, 72, 105, 0.5)' } },
  538. axisLabel: {
  539. interval: 0, // 显示所有标签
  540. color: '#ffffff', // 设置 x 轴字体颜色
  541. formatter: function (value: string) {
  542. return value.length > 8 ? value.slice(0, 8) + '...' : value; // 截断长标签
  543. },
  544. },
  545. },
  546. yAxis: {
  547. type: 'value',
  548. splitLine: { show: true, lineStyle: { color: 'rgba(28, 72, 105, 0.5)' } },
  549. axisLabel: {
  550. color: '#ffffff',
  551. },
  552. },
  553. dataZoom: [
  554. {
  555. type: 'slider', // 会创建一个滑块来选择要显示的区域
  556. start: 0, // 初始选中范围的起始百分比
  557. end: (5 / categories.length) * 100, // 初始选中范围的结束百分比,根据数据条数调整
  558. minSpan: (5 / categories.length) * 100, // 最小选中范围,根据数据条数调整
  559. maxSpan: (5 / categories.length) * 100, // 最大选中范围,根据数据条数调整
  560. show: true,
  561. height: 10, // 设置滑块高度
  562. bottom: 1, // 设置滑块距离容器底部的距离
  563. borderColor: 'transparent', // 设置边框颜色为透明
  564. backgroundColor: '#F6F7FB', // 设置背景颜色
  565. handleIcon: 'path://M512,512m-448,0a448,448,0,1,0,896,0a448,448,0,1,0,-896,0Z', // 设置手柄图标为圆形
  566. handleColor: '#C2D2FF', // 设置手柄颜色
  567. handleSize: 13, // 设置手柄大小
  568. handleStyle: {
  569. borderColor: '#C2D2FF', // 设置手柄边框颜色
  570. },
  571. fillerColor: '#C2D2FF', // 设置选中范围的填充颜色
  572. },
  573. ],
  574. grid: {
  575. top: '21%', // 设置 grid 距离顶部的距离,增加间隔
  576. left: '3%',
  577. right: '4%',
  578. bottom: '3%',
  579. containLabel: true,
  580. },
  581. series: seriesConfig,
  582. };
  583. myChart.setOption(option);
  584. }
  585. //跳转到爆炸三角形
  586. function toDetail(record: any) {
  587. posMonitor.value = record;
  588. modalVisible.value = true;
  589. }
  590. //获取束管日报
  591. async function getTableList(params: any) {
  592. let res = await getBundleInfoList({ type: 'bundle', ...params });
  593. const content = res.content;
  594. let contentArr = JSON.parse(content);
  595. // const contentNewArr = computed(() => {
  596. // return contentArr.map((item) => {
  597. // let internalFireWarnLevel = '';
  598. // const co = item.co_ave;
  599. // const co2 = item.co2_ave;
  600. // const c2h4 = item.c2h4_ave;
  601. // const c2h2 = item.c2h2_ave;
  602. // const coRatio = co / co2;
  603. // if (co >= 0 && co <= 13.75) {
  604. // internalFireWarnLevel = '潜伏期阶段';
  605. // } else if (co > 13.75 && co < 67.2 && coRatio < 0.095) {
  606. // internalFireWarnLevel = '缓慢氧化升温阶段';
  607. // } else if ((co >= 67.2 && co < 1606.3) || (coRatio >= 0.095 && coRatio < 0.322) || c2h4 < 2) {
  608. // internalFireWarnLevel = '加速氧化阶段';
  609. // } else if (co >= 1606.3 || coRatio >= 0.322 || c2h4 >= 2 || c2h2 > 0) {
  610. // internalFireWarnLevel = '剧烈氧化阶段';
  611. // }
  612. // return { ...item, internalFireWarnLevel };
  613. // });
  614. // });
  615. total.value = contentArr.length;
  616. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  617. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  618. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  619. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  620. qfqPercent.value = (qfqCount.value / total.value) * 100;
  621. latentPercent.value = (latentCount.value / total.value) * 100;
  622. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  623. combustionPercent.value = (combustionCount.value / total.value) * 100;
  624. tableData.value = contentArr;
  625. nextTick(() => {
  626. updateChart(contentArr);
  627. });
  628. }
  629. async function getTableListById(params: any) {
  630. let res = await getAllFileListById({ ...params });
  631. const content = res.content;
  632. let contentArr = JSON.parse(content);
  633. total.value = contentArr.length;
  634. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  635. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  636. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  637. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  638. qfqPercent.value = (qfqCount.value / total.value) * 100;
  639. latentPercent.value = (latentCount.value / total.value) * 100;
  640. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  641. combustionPercent.value = (combustionCount.value / total.value) * 100;
  642. tableData.value = contentArr;
  643. nextTick(() => {
  644. updateChart(contentArr);
  645. });
  646. }
  647. //获取所有文件列表
  648. async function getAllFile() {
  649. let res = await getAllFileList({ type: 'bundle' });
  650. selectList.value = res.records.map((item: any) => ({
  651. id: item.id,
  652. fileName: item.fileName,
  653. }));
  654. jcddArr.value = res.records.map((item: any) => ({
  655. id: item.jcdd,
  656. }));
  657. if (selectList.value.length > 0) {
  658. formSearch.id = selectList.value[0].id;
  659. getSearch();
  660. }
  661. }
  662. // 处理文件点击事件
  663. function handleFileClick(item: any) {
  664. formSearch.id = item.id;
  665. formSearch.fileName = item.fileName;
  666. selectedFileId.value = item.id;
  667. getSearch();
  668. }
  669. //查询
  670. function getSearch() {
  671. // const selectedFile = selectList.value.find((item) => item.id === formSearch.id);
  672. const params = {
  673. id: formSearch.id,
  674. // fileName: selectedFile ? selectedFile.fileName : '',
  675. };
  676. getTableListById(params);
  677. }
  678. onMounted(() => {
  679. getTableList({ type: 'bundle' });
  680. getAllFile().then(() => {
  681. if (selectList.value.length > 0) {
  682. formSearch.id = selectList.value[0].id;
  683. selectedFileId.value = selectList.value[0].id;
  684. getSearch();
  685. }
  686. });
  687. });
  688. </script>
  689. <style lang="less" scoped>
  690. @import '/@/design/theme.less';
  691. .content-container {
  692. display: flex;
  693. width: 100%;
  694. height: 100%;
  695. padding-top: 54px;
  696. }
  697. .file-list {
  698. width: 20%;
  699. padding: 10px;
  700. margin-right: 10px;
  701. margin-bottom: 50px;
  702. border: 1px solid #99e8ff66;
  703. background: #27546e1a;
  704. box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  705. -moz-box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  706. -webkit-box-shadow: 0px 0px 50px 1px rgb(149 235 255 / 5%) inset;
  707. }
  708. .file-list ul {
  709. list-style: none;
  710. padding: 0;
  711. }
  712. .file-list li {
  713. color: #fff;
  714. padding: 5px;
  715. cursor: pointer;
  716. }
  717. .file-list li:hover,
  718. .file-list li.selected {
  719. background: #1c4869;
  720. }
  721. .table-container {
  722. margin-top: 10px;
  723. width: 80%;
  724. box-sizing: border-box;
  725. }
  726. .data-container {
  727. margin-top: 40px;
  728. display: flex;
  729. width: 100%;
  730. height: 100%;
  731. }
  732. .bar-chart {
  733. flex: 3; /* 占据 3/4 的空间 */
  734. width: 100%;
  735. height: 400px;
  736. }
  737. .data-content {
  738. flex: 1; /* 占据 1/4 的空间 */
  739. height: 400px;
  740. display: flex;
  741. flex-direction: column; /* 垂直排列进度条 */
  742. // align-items: center; /* 水平居中 */
  743. margin: 10px;
  744. .title {
  745. font-size: 18px;
  746. font-weight: 600;
  747. color: #fff;
  748. margin-bottom: 20px;
  749. }
  750. .explain {
  751. color: var(--vent-table-action-link);
  752. margin-top: 18px;
  753. }
  754. }
  755. .dustMonitor {
  756. width: 100%;
  757. height: 100%;
  758. padding: 10px 10px 15px 10px;
  759. box-sizing: border-box;
  760. position: relative;
  761. }
  762. .yellow-progress .ant-progress-bg {
  763. background-color: yellow !important;
  764. }
  765. :deep(.zxm-table-thead > tr > th:last-child) {
  766. border-right: 1px solid #91e9fe !important;
  767. }
  768. :deep(.zxm-picker-input > input) {
  769. color: #fff;
  770. }
  771. :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
  772. border: 1px solid var(--vent-form-item-border) !important;
  773. background-color: #ffffff00 !important;
  774. }
  775. :deep(.zxm-select-selection-item) {
  776. color: #fff !important;
  777. }
  778. .blast-delta-container {
  779. margin: 50px;
  780. display: flex;
  781. justify-content: space-between;
  782. }
  783. .progress {
  784. width: 100%;
  785. height: 20px;
  786. margin-top: 10px;
  787. }
  788. .progress-label {
  789. margin-top: 20px;
  790. text-align: left;
  791. margin-bottom: 5px;
  792. color: #fff;
  793. }
  794. ::deep .progress-text {
  795. color: #fff !important; /* 自定义百分比文字颜色 */
  796. }
  797. </style>