index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  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: 300 }" 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>
  19. </a-table>
  20. <div class="data-container">
  21. <div id="lineChart" class="line-chart"></div>
  22. <div class="data-content">
  23. <div class="title">煤自燃阶段统计分析</div>
  24. <div class="explain">测点共计{{ total }}个</div>
  25. <div class="progress-label">潜伏期阶段:{{ qfqCount }}</div>
  26. <Progress :percent="qfqPercent" size="default" strokeColor="green" :show-info="true" :format="() => qfqCount" />
  27. <div class="progress-label">缓慢氧化升温阶段:{{ latentCount }}</div>
  28. <Progress :percent="latentPercent" size="default" strokeColor="yellow" :show-info="true" :format="() => latentCount" />
  29. <div class="progress-label">加速氧化升温阶段:{{ selfHeatingCount }}</div>
  30. <Progress :percent="selfHeatingPercent" size="default" strokeColor="orange‌" :show-info="true" :format="() => selfHeatingCount" />
  31. <div class="progress-label">剧烈氧化升温阶段:{{ combustionCount }}</div>
  32. <Progress :percent="combustionPercent" size="default" strokeColor="red" :show-info="true" :format="() => combustionCount" />
  33. </div>
  34. </div>
  35. </div>
  36. </div>
  37. <a-modal style="width: 600px; height: 300px" title="爆炸三角形" v-model:visible="modalVisible" :draggable="true" :footer="null">
  38. <div class="blast-delta-container">
  39. <BlastDelta :posMonitor="posMonitor" />
  40. </div>
  41. </a-modal>
  42. </div>
  43. </template>
  44. <script setup lang="ts">
  45. import { ref, onMounted, computed, reactive, shallowRef } from 'vue';
  46. import {
  47. columns,
  48. Hjtcolumns,
  49. Bdcolumns,
  50. Bltcolumns,
  51. Sgtcolumns,
  52. Yjlcolumns,
  53. Cctrkcolumns,
  54. Wlmlcolumns,
  55. Jinjiecolumns,
  56. Hlgcolumns,
  57. Ltcolumns,
  58. } from './bundleSpy-table.data';
  59. import { getbundleSpyInfoList, getAllFileList, getAllFileListById } from './bundleSpy-table.api';
  60. import customHeader from '/@/components/vent/customHeader.vue';
  61. import * as echarts from 'echarts';
  62. import BlastDelta from './modal/blastDelta.vue';
  63. import { Progress } from 'ant-design-vue';
  64. import { useGlobSetting } from '/@/hooks/setting';
  65. // import 'ant-design-vue/dist/antd.css'; // 引入样式
  66. let selectList = ref<any[]>([]);
  67. let formSearch = reactive({
  68. pageNum: 1,
  69. pageSize: 1000,
  70. id: '',
  71. fileName: '',
  72. });
  73. const total = ref(0);
  74. const { sysOrgCode } = useGlobSetting();
  75. const qfqCount = ref(0); // 潜伏期
  76. const latentCount = ref(0); // 缓慢氧化阶段(潜伏期)
  77. const selfHeatingCount = ref(0); // 加速氧化阶段(自热期)
  78. const combustionCount = ref(0); // 剧烈氧化阶段(燃烧期)
  79. const qfqPercent = ref(0); // 潜伏期(潜伏期)
  80. const latentPercent = ref(0); // 缓慢氧化阶段(潜伏期)
  81. const selfHeatingPercent = ref(0); // 加速氧化阶段(自热期)
  82. const combustionPercent = ref(0); // 剧烈氧化阶段(燃烧期)
  83. let tableData = ref<any[]>([]);
  84. let selectedFileId = ref<string | null>(null);
  85. let modalVisible = ref(false);
  86. const posMonitor = shallowRef({});
  87. const computedColumns = computed(() => {
  88. switch (sysOrgCode) {
  89. case 'sdmtjtdltmkhjtj':
  90. return Hjtcolumns; // 活鸡兔对应的列配置
  91. case 'sdmtjtBdmk':
  92. return Bdcolumns; // 保德对应的列配置
  93. case 'sdmtjtbltmk':
  94. return Bltcolumns; // 补连塔对应的列配置
  95. case 'sdmtjtsgtmk':
  96. return Sgtcolumns; // 石圪台对应的列配置
  97. case 'sdmtjtyjlmk':
  98. return Yjlcolumns; // 榆家梁对应的列配置
  99. case 'sdmtjtcctrk':
  100. return Cctrkcolumns; // 寸草塔二矿对应的列配置
  101. case 'sdmtjtwlmlmk':
  102. return Wlmlcolumns; // 乌兰木伦对应的列配置
  103. case 'sdmtjtjjmk':
  104. return Jinjiecolumns; // 锦界对应的列配置
  105. case 'sdmtjthlgmk':
  106. return Hlgcolumns; // 哈拉沟对应的列配置
  107. case 'sdmtjtltmk':
  108. return Ltcolumns; // 柳塔煤矿对应的列配置
  109. default:
  110. return columns; // 默认情况下返回的列配置
  111. }
  112. });
  113. //获取色谱仪报表
  114. async function getTableList(params: any) {
  115. let res = await getbundleSpyInfoList({ type: 'bundleSpy', ...params });
  116. const content = res.content;
  117. let contentArr = JSON.parse(content);
  118. // const contentNewArr = computed(() => {
  119. // return contentArr.map((item) => {
  120. // let internalFireWarnLevel = '';
  121. // const co = item.co_ave;
  122. // const co2 = item.co2_ave;
  123. // const c2h4 = item.c2h4_ave;
  124. // const c2h2 = item.c2h2_ave;
  125. // const coRatio = co / co2;
  126. // if (co >= 0 && co <= 13.75) {
  127. // internalFireWarnLevel = '潜伏期阶段';
  128. // } else if (co > 13.75 && co < 67.2 && coRatio < 0.095) {
  129. // internalFireWarnLevel = '缓慢氧化升温阶段';
  130. // } else if ((co >= 67.2 && co < 1606.3) || (coRatio >= 0.095 && coRatio < 0.322) || c2h4 < 2) {
  131. // internalFireWarnLevel = '加速氧化阶段';
  132. // } else if (co >= 1606.3 || coRatio >= 0.322 || c2h4 >= 2 || c2h2 > 0) {
  133. // internalFireWarnLevel = '剧烈氧化阶段';
  134. // }
  135. // return { ...item, internalFireWarnLevel };
  136. // });
  137. // });
  138. total.value = contentArr.length;
  139. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  140. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  141. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  142. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  143. qfqPercent.value = (qfqCount.value / total.value) * 100;
  144. latentPercent.value = (latentCount.value / total.value) * 100;
  145. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  146. combustionPercent.value = (combustionCount.value / total.value) * 100;
  147. tableData.value = contentArr;
  148. updateChart(contentArr);
  149. }
  150. async function getTableListById(params: any) {
  151. let res = await getAllFileListById({ ...params });
  152. const content = res.content;
  153. let contentArr = JSON.parse(content);
  154. total.value = contentArr.length;
  155. qfqCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '潜伏期阶段').length;
  156. latentCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '缓慢氧化升温阶段').length;
  157. selfHeatingCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '加速氧化升温阶段').length;
  158. combustionCount.value = contentArr.filter((item: any) => item.internalFireWarnLevel === '剧烈氧化升温阶段').length;
  159. qfqPercent.value = (qfqCount.value / total.value) * 100;
  160. latentPercent.value = (latentCount.value / total.value) * 100;
  161. selfHeatingPercent.value = (selfHeatingCount.value / total.value) * 100;
  162. combustionPercent.value = (combustionCount.value / total.value) * 100;
  163. tableData.value = contentArr;
  164. updateChart(contentArr);
  165. }
  166. //跳转到爆炸三角形
  167. function toDetail(record: any) {
  168. posMonitor.value = record;
  169. console.log(posMonitor.value);
  170. modalVisible.value = true;
  171. }
  172. //折线图
  173. function updateChart(data: any) {
  174. const chartDom = document.getElementById('lineChart');
  175. const myChart = echarts.init(chartDom);
  176. const categories = data.map((item: any) => item.jcdd);
  177. const c2h2AveValues = data.map((item: any) => parseFloat(item.c2h2_ave));
  178. const c2h4AveValues = data.map((item: any) => parseFloat(item.c2h4_ave));
  179. const ch4AveValues = data.map((item: any) => parseFloat(item.ch4_ave));
  180. const co2AveValues = data.map((item: any) => parseFloat(item.co2_ave));
  181. const coAveValues = data.map((item: any) => parseFloat(item.co_ave));
  182. const o2AveValues = data.map((item: any) => parseFloat(item.o2_ave));
  183. const n2AveValues = data.map((item: any) => parseFloat(item.n2_ave));
  184. const c2h6AveValues = data.map((item: any) => parseFloat(item.c2h6_ave));
  185. const c3h8AveValues = data.map((item: any) => parseFloat(item.c3h8_ave));
  186. const ch4AveBqValues = data.map((item: any) => parseFloat(item.ch4_ave_bq));
  187. const o2AveBqValues = data.map((item: any) => parseFloat(item.o2_ave_bq));
  188. const getSeriesConfig = (sysOrgCode) => {
  189. switch (sysOrgCode) {
  190. case 'sdmtjtdltmkhjtj':
  191. return [
  192. {
  193. name: 'CH₄闭内',
  194. data: ch4AveValues,
  195. yAxisIndex: 1,
  196. type: 'bar',
  197. },
  198. {
  199. name: 'O₂闭内',
  200. data: ch4AveValues,
  201. yAxisIndex: 1,
  202. type: 'bar',
  203. },
  204. {
  205. name: 'CO₂闭内',
  206. data: co2AveValues,
  207. yAxisIndex: 1,
  208. type: 'bar',
  209. },
  210. {
  211. name: 'CO闭内',
  212. data: coAveValues,
  213. yAxisIndex: 1,
  214. type: 'bar',
  215. },
  216. {
  217. name: 'CH₄闭前',
  218. data: ch4AveBqValues,
  219. yAxisIndex: 1,
  220. type: 'bar',
  221. },
  222. {
  223. name: 'O₂闭前',
  224. data: o2AveBqValues,
  225. yAxisIndex: 1,
  226. type: 'bar',
  227. },
  228. ];
  229. case 'sdmtjtBdmk':
  230. return [
  231. {
  232. name: 'O₂',
  233. data: o2AveValues,
  234. yAxisIndex: 0,
  235. type: 'bar',
  236. },
  237. {
  238. name: 'N₂',
  239. data: n2AveValues,
  240. yAxisIndex: 0,
  241. type: 'bar',
  242. },
  243. {
  244. name: 'CO',
  245. data: coAveValues,
  246. yAxisIndex: 1,
  247. type: 'bar',
  248. },
  249. {
  250. name: 'CO₂',
  251. data: co2AveValues,
  252. yAxisIndex: 1,
  253. type: 'bar',
  254. },
  255. {
  256. name: 'CH₄',
  257. data: ch4AveValues,
  258. yAxisIndex: 1,
  259. type: 'bar',
  260. },
  261. {
  262. name: 'C₂H₆',
  263. data: c2h6AveValues,
  264. yAxisIndex: 1,
  265. type: 'bar',
  266. },
  267. {
  268. name: 'C3H8',
  269. data: c3h8AveValues,
  270. yAxisIndex: 1,
  271. type: 'bar',
  272. },
  273. {
  274. name: 'C₂H₄',
  275. data: c2h4AveValues,
  276. type: 'bar',
  277. yAxisIndex: 1,
  278. },
  279. {
  280. name: 'C₂H₂',
  281. data: c2h2AveValues,
  282. type: 'bar',
  283. yAxisIndex: 1,
  284. },
  285. ];
  286. case 'sdmtjtyjlmk':
  287. return [
  288. {
  289. name: 'O₂',
  290. data: o2AveValues,
  291. yAxisIndex: 0,
  292. type: 'bar',
  293. },
  294. {
  295. name: 'N₂',
  296. data: n2AveValues,
  297. yAxisIndex: 0,
  298. type: 'bar',
  299. },
  300. {
  301. name: 'CO',
  302. data: coAveValues,
  303. yAxisIndex: 1,
  304. type: 'bar',
  305. },
  306. {
  307. name: 'CO₂',
  308. data: co2AveValues,
  309. yAxisIndex: 1,
  310. type: 'bar',
  311. },
  312. {
  313. name: 'CH₄',
  314. data: ch4AveValues,
  315. yAxisIndex: 1,
  316. type: 'bar',
  317. },
  318. {
  319. name: 'C₂H₆',
  320. data: c2h6AveValues,
  321. yAxisIndex: 1,
  322. type: 'bar',
  323. },
  324. {
  325. name: 'C₂H₄',
  326. data: c2h4AveValues,
  327. type: 'bar',
  328. yAxisIndex: 1,
  329. },
  330. {
  331. name: 'C₂H₂',
  332. data: c2h2AveValues,
  333. type: 'bar',
  334. yAxisIndex: 1,
  335. },
  336. ];
  337. case 'sdmtjtcctrk':
  338. return [
  339. {
  340. name: 'CH₄闭内',
  341. data: ch4AveValues,
  342. yAxisIndex: 1,
  343. type: 'bar',
  344. },
  345. {
  346. name: 'O₂闭内',
  347. data: ch4AveValues,
  348. yAxisIndex: 1,
  349. type: 'bar',
  350. },
  351. {
  352. name: 'CO₂闭内',
  353. data: co2AveValues,
  354. yAxisIndex: 1,
  355. type: 'bar',
  356. },
  357. {
  358. name: 'CO闭内',
  359. data: coAveValues,
  360. yAxisIndex: 1,
  361. type: 'bar',
  362. },
  363. {
  364. name: 'CH₄闭前',
  365. data: ch4AveBqValues,
  366. yAxisIndex: 1,
  367. type: 'bar',
  368. },
  369. {
  370. name: 'O₂闭前',
  371. data: o2AveBqValues,
  372. yAxisIndex: 1,
  373. type: 'bar',
  374. },
  375. ];
  376. case 'sdmtjtltmk':
  377. case 'sdmtjtwlmlmk':
  378. case 'sdmtjthlgmk':
  379. return [
  380. {
  381. name: 'O₂',
  382. data: o2AveValues,
  383. yAxisIndex: 0,
  384. type: 'bar',
  385. },
  386. {
  387. name: 'N₂',
  388. data: n2AveValues,
  389. yAxisIndex: 0,
  390. type: 'bar',
  391. },
  392. {
  393. name: 'CO',
  394. data: coAveValues,
  395. yAxisIndex: 1,
  396. type: 'bar',
  397. },
  398. {
  399. name: 'CO₂',
  400. data: co2AveValues,
  401. yAxisIndex: 1,
  402. type: 'bar',
  403. },
  404. {
  405. name: 'CH₄',
  406. data: ch4AveValues,
  407. yAxisIndex: 1,
  408. type: 'bar',
  409. },
  410. {
  411. name: 'C₂H₆',
  412. data: c2h6AveValues,
  413. yAxisIndex: 1,
  414. type: 'bar',
  415. },
  416. {
  417. name: 'C₂H₄',
  418. data: c2h4AveValues,
  419. type: 'bar',
  420. yAxisIndex: 1,
  421. },
  422. {
  423. name: 'C₂H₂',
  424. data: c2h2AveValues,
  425. type: 'bar',
  426. yAxisIndex: 1,
  427. },
  428. ];
  429. default:
  430. return [
  431. {
  432. name: 'C₂H₂',
  433. data: c2h2AveValues,
  434. type: 'bar',
  435. yAxisIndex: 1,
  436. },
  437. {
  438. name: 'C₂H₄',
  439. data: c2h4AveValues,
  440. type: 'bar',
  441. yAxisIndex: 1,
  442. },
  443. {
  444. name: 'CH₄',
  445. data: ch4AveValues,
  446. yAxisIndex: 1,
  447. type: 'bar',
  448. },
  449. {
  450. name: 'CO₂',
  451. data: co2AveValues,
  452. yAxisIndex: 1,
  453. type: 'bar',
  454. },
  455. {
  456. name: 'CO',
  457. data: coAveValues,
  458. yAxisIndex: 1,
  459. type: 'bar',
  460. },
  461. {
  462. name: 'O₂',
  463. data: o2AveValues,
  464. yAxisIndex: 0,
  465. type: 'bar',
  466. },
  467. {
  468. name: 'N₂',
  469. data: n2AveValues,
  470. yAxisIndex: 0,
  471. type: 'bar',
  472. },
  473. {
  474. name: 'C₂H₆',
  475. data: c2h6AveValues,
  476. yAxisIndex: 1,
  477. type: 'bar',
  478. },
  479. ];
  480. }
  481. };
  482. const seriesConfig = getSeriesConfig(sysOrgCode);
  483. const option = {
  484. tooltip: {
  485. trigger: 'axis',
  486. backgroundColor: 'rgba(28, 72, 105, 0.5)', // 设置 tooltip 背景为透明
  487. textStyle: {
  488. color: '#ffffff', // 设置 tooltip 字体颜色为白色
  489. },
  490. axisPointer: {
  491. label: {
  492. show: true,
  493. backgroundColor: '#071c44',
  494. },
  495. },
  496. },
  497. legend: {
  498. top: '5%',
  499. textStyle: {
  500. color: '#ffffffff',
  501. },
  502. width: '80%', // 设置图例的宽度
  503. orient: 'horizontal', // 水平布局
  504. pageIconColor: '#ffffff', // 设置翻页图标颜色
  505. pageTextStyle: {
  506. color: '#ffffff', // 设置翻页文字颜色
  507. },
  508. },
  509. xAxis: {
  510. type: 'category',
  511. data: categories,
  512. splitLine: { show: true, lineStyle: { color: 'rgba(28, 72, 105, 0.5)' } },
  513. axisLabel: {
  514. interval: 0, // 显示所有标签
  515. color: '#ffffff', // 设置 x 轴字体颜色
  516. formatter: function (value: string) {
  517. return value.length > 12 ? value.slice(0, 12) + '...' : value; // 截断长标签
  518. },
  519. },
  520. },
  521. yAxis: [
  522. {
  523. type: 'value',
  524. name: 'O₂/N₂',
  525. max: 100,
  526. splitLine: { show: true, lineStyle: { color: 'rgba(21,80,126,.5)' } },
  527. axisLabel: {
  528. color: '#ffffff',
  529. },
  530. },
  531. {
  532. type: 'value',
  533. name: '其他气体',
  534. splitLine: { show: true, lineStyle: { color: 'rgba(21,80,126,.5)' } },
  535. axisLabel: {
  536. color: '#ffffff', // 设置 y 轴字体颜色
  537. },
  538. },
  539. ],
  540. dataZoom: [
  541. {
  542. type: 'slider', // 会创建一个滑块来选择要显示的区域
  543. start: 0, // 初始选中范围的起始百分比
  544. end: (5 / categories.length) * 100, // 初始选中范围的结束百分比,根据数据条数调整
  545. minSpan: (5 / categories.length) * 100, // 最小选中范围,根据数据条数调整
  546. maxSpan: (5 / categories.length) * 100, // 最大选中范围,根据数据条数调整
  547. show: true,
  548. height: 10, // 设置滑块高度
  549. bottom: 1, // 设置滑块距离容器底部的距离
  550. borderColor: 'transparent', // 设置边框颜色为透明
  551. backgroundColor: '#F6F7FB', // 设置背景颜色
  552. handleIcon: 'path://M512,512m-448,0a448,448,0,1,0,896,0a448,448,0,1,0,-896,0Z', // 设置手柄图标为圆形
  553. handleColor: '#C2D2FF', // 设置手柄颜色
  554. handleSize: 13, // 设置手柄大小
  555. handleStyle: {
  556. borderColor: '#C2D2FF', // 设置手柄边框颜色
  557. },
  558. fillerColor: '#C2D2FF', // 设置选中范围的填充颜色
  559. },
  560. ],
  561. grid: {
  562. top: '21%', // 设置 grid 距离顶部的距离,增加间隔
  563. left: '3%',
  564. right: '4%',
  565. bottom: '3%',
  566. containLabel: true,
  567. },
  568. series: seriesConfig,
  569. };
  570. myChart.setOption(option);
  571. }
  572. //获取所有文件列表
  573. async function getAllFile() {
  574. let res = await getAllFileList({ type: 'bundleSpy' });
  575. selectList.value = res.records.map((item: any) => ({
  576. id: item.id,
  577. fileName: item.fileName,
  578. }));
  579. if (selectList.value.length > 0) {
  580. formSearch.id = selectList.value[0].id;
  581. getSearch();
  582. }
  583. }
  584. // 处理文件点击事件
  585. function handleFileClick(item: any) {
  586. formSearch.id = item.id;
  587. formSearch.fileName = item.fileName;
  588. selectedFileId.value = item.id;
  589. getSearch();
  590. }
  591. //查询
  592. function getSearch() {
  593. // const selectedFile = selectList.value.find((item) => item.id === formSearch.id);
  594. const params = {
  595. id: formSearch.id,
  596. // fileName: selectedFile ? selectedFile.fileName : '',
  597. };
  598. getTableListById(params);
  599. }
  600. onMounted(() => {
  601. getTableList({ type: 'bundleSpy' });
  602. getAllFile().then(() => {
  603. if (selectList.value.length > 0) {
  604. formSearch.id = selectList.value[0].id;
  605. selectedFileId.value = selectList.value[0].id;
  606. getSearch();
  607. }
  608. });
  609. });
  610. </script>
  611. <style lang="less" scoped>
  612. @import '/@/design/theme.less';
  613. .content-container {
  614. display: flex;
  615. width: 100%;
  616. height: 100%;
  617. padding-top: 54px;
  618. }
  619. .file-list {
  620. width: 20%;
  621. padding: 10px;
  622. margin-right: 10px;
  623. margin-bottom: 50px;
  624. border: 1px solid #99e8ff66;
  625. background: #27546e1a;
  626. box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  627. -moz-box-shadow: 0px 0px 20px 7px rgba(145, 233, 254, 0.7) inset;
  628. -webkit-box-shadow: 0px 0px 50px 1px rgb(149 235 255 / 5%) inset;
  629. }
  630. .file-list ul {
  631. list-style: none;
  632. padding: 0;
  633. }
  634. .file-list li {
  635. color: #fff;
  636. padding: 5px;
  637. cursor: pointer;
  638. }
  639. .file-list li:hover,
  640. .file-list li.selected {
  641. background: #1c4869;
  642. }
  643. .table-container {
  644. margin-top: 10px;
  645. width: 80%;
  646. box-sizing: border-box;
  647. }
  648. .dustMonitor {
  649. width: 100%;
  650. height: 100%;
  651. padding: 10px 10px 15px 10px;
  652. box-sizing: border-box;
  653. position: relative;
  654. }
  655. :deep(.zxm-table-thead > tr > th:last-child) {
  656. border-right: 1px solid #91e9fe !important;
  657. }
  658. :deep(.zxm-picker-input > input) {
  659. color: #fff;
  660. }
  661. :deep(.zxm-select:not(.zxm-select-customize-input) .zxm-select-selector) {
  662. border: 1px solid var(--vent-form-item-border) !important;
  663. background-color: #ffffff00 !important;
  664. }
  665. :deep(.zxm-select-selection-item) {
  666. color: #fff !important;
  667. }
  668. .data-container {
  669. margin-top: 40px;
  670. display: flex;
  671. width: 100%;
  672. height: 100%;
  673. }
  674. .line-chart {
  675. flex: 3; /* 占据 3/4 的空间 */
  676. width: 100%;
  677. height: 400px;
  678. }
  679. .data-content {
  680. flex: 1; /* 占据 1/4 的空间 */
  681. height: 400px;
  682. display: flex;
  683. flex-direction: column; /* 垂直排列进度条 */
  684. // align-items: center; /* 水平居中 */
  685. margin: 10px;
  686. .title {
  687. font-size: 18px;
  688. font-weight: 600;
  689. color: #fff;
  690. margin-bottom: 20px;
  691. }
  692. .explain {
  693. color: var(--vent-table-action-link);
  694. margin-top: 18px;
  695. }
  696. }
  697. .progress {
  698. width: 100%;
  699. height: 20px;
  700. margin-top: 10px;
  701. }
  702. .progress-label {
  703. margin-top: 20px;
  704. text-align: left;
  705. margin-bottom: 5px;
  706. color: #fff;
  707. }
  708. ::deep .progress-text {
  709. color: #fff !important; /* 自定义百分比文字颜色 */
  710. }
  711. .blast-delta-container {
  712. margin: 50px;
  713. }
  714. .yellow-progress .ant-progress-bg {
  715. background-color: yellow !important;
  716. }
  717. :deep(.zxm-table-thead > tr > th:last-child) {
  718. border-right: 1px solid #91e9fe !important;
  719. }
  720. </style>