network.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923
  1. <template>
  2. <div class="zl-box">
  3. <div class="zl-container-box">
  4. <div class="top-box">
  5. <div class="left-box lr-box">
  6. <!-- <div class = "container-title">
  7. <a-select
  8. class="title-select"
  9. ref="select"
  10. v-model:value="currentTitleValue"
  11. @change="handleTitleChange"
  12. >
  13. <a-select-option value="2">15212工作面</a-select-option>
  14. <a-select-option value="1598491318007898113">采煤工作面</a-select-option>
  15. <a-select-option value="3">掘进工作面</a-select-option>
  16. </a-select>
  17. </div> -->
  18. <div class="analysis-box">
  19. <div class="pie-group">
  20. <div class="item-pie">
  21. <div class="pie">
  22. <div class="qiu qiu1">
  23. <p>{{ totalEnterNum }}</p>
  24. </div>
  25. </div>
  26. <div class="pie-data">
  27. <span class="data-text">总进风量</span>
  28. </div>
  29. </div>
  30. <div class="item-pie">
  31. <div class="pie">
  32. <div class="qiu qiu2">
  33. <p>{{ totalToNum }}</p>
  34. </div>
  35. </div>
  36. <div class="pie-data">
  37. <span class="data-text">总回风量</span>
  38. </div>
  39. </div>
  40. </div>
  41. <div class="detail-data-group">
  42. <div class="container-item" v-for="(data, index) in analysisDetailDataList" :key="index">
  43. <div class="item-icon">
  44. <SvgIcon class="icon-style" size="18" :name="data.icon" />
  45. </div>
  46. <div class="item-name">{{ data.name }}</div>
  47. <div v-if="data.code !== 'level' && data.code !== 'resistance'" class="item-value">{{ data.value }} </div>
  48. <div v-if="data.code == 'level'" class="item-value">
  49. <span class="signal-round signal-round-run"></span>
  50. </div>
  51. <div v-if="data.code == 'resistance'" class="item-value">{{ totalPa }}</div>
  52. </div>
  53. </div>
  54. <div class="feature-group">
  55. <div class="feature-item">
  56. <div class="pie">
  57. <Progress
  58. type="circle"
  59. :width="50"
  60. :stroke-color="{
  61. '0%': '#FC9C1D',
  62. '100%': '#1FF8FB',
  63. }"
  64. :percent="Number(rate1)"
  65. />
  66. </div>
  67. <div class="data">可靠度</div>
  68. </div>
  69. <div class="feature-item">
  70. <div class="pie">
  71. <Progress
  72. type="circle"
  73. :width="50"
  74. :stroke-color="{
  75. '0%': '#A02EFF',
  76. '100%': '#1FF8FB',
  77. }"
  78. :percent="Number(rate2)"
  79. />
  80. </div>
  81. <div class="data">风阻合理度</div>
  82. </div>
  83. <div class="feature-item">
  84. <div class="pie">
  85. <Progress
  86. type="circle"
  87. :width="50"
  88. :stroke-color="{
  89. '0%': '#108ee9',
  90. '100%': '#1FF8FB',
  91. }"
  92. :percent="Number(rate3)"
  93. />
  94. </div>
  95. <div class="data">有效风量率</div>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <div class="right-box lr-box">
  101. <div class="sensor-box">
  102. <div class="item-top-title">传感器实时数据</div>
  103. <BorderBox1 class="table-box">
  104. <div class="table-container">
  105. <a-table :columns="sensorColumns" :data-source="sensorDataList" :pagination="false" size="small" />
  106. </div>
  107. </BorderBox1>
  108. </div>
  109. <div class="warning-box">
  110. <div class="item-top-title">预警报警信息</div>
  111. <BorderBox1 class="table-box">
  112. <div class="table-container">
  113. <a-table :columns="warningColumns" :data-source="warningDataList" :pagination="false" size="small">
  114. <template #bodyCell="{ column, record }">
  115. <div v-if="column.dataIndex == 'level'">
  116. <span
  117. class="signal-round"
  118. :class="{
  119. 'signal-round-red': record['level'] == 1,
  120. 'signal-round-orange': record['level'] == 2,
  121. 'signal-round-yellow': record['level'] == 3,
  122. }"
  123. ></span>
  124. </div>
  125. </template>
  126. </a-table>
  127. </div>
  128. </BorderBox1>
  129. </div>
  130. </div>
  131. </div>
  132. <!-- <div class="bottom-box">
  133. <div class="bottom-left bottom-lr-box">
  134. <BorderBox11 title="实时网络解算" :color="['#00FFFF']">
  135. <div class="network-top">
  136. <div class="network-top-left">
  137. <div>
  138. 准确率:
  139. <span class="accuracy-rate">95%</span>
  140. </div>
  141. <div>
  142. 迭代误差:
  143. <span class="error-rate">0.0941%</span>
  144. </div>
  145. </div>
  146. <div class="network-top-right">
  147. 本次解算时间:
  148. <span class="time">{{ currentTime }}</span>
  149. </div>
  150. </div>
  151. <div class="table-container">
  152. <a-table :columns="networkColumns" :data-source="networkDataList" :pagination="false" size="small" />
  153. </div>
  154. </BorderBox11>
  155. </div>
  156. <div class="bottom-right bottom-lr-box">
  157. <BorderBox11 title="最大阻力路线">
  158. <div class="zl-top">
  159. <div>
  160. <span class="btn active">1号回风斜井</span>
  161. <span class="btn">2号回风斜井</span>
  162. </div>
  163. <div>
  164. 路线阻力
  165. <span class="data">{{ totalPa }}</span>
  166. Pa
  167. </div>
  168. </div>
  169. <div class="zl-container">
  170. <div class="zl-path-item position1">
  171. <div class="title">副平硐</div>
  172. </div>
  173. <div class="zl-path-item position2">
  174. <div class="title">5煤组盘区辅运巷</div>
  175. </div>
  176. <div class="zl-path-item position3">
  177. <div class="title">1521辅运顺槽</div>
  178. </div>
  179. <div class="zl-path-item position4">
  180. <div class="title">15212综采工作面</div>
  181. </div>
  182. <div class="zl-path-item position5">
  183. <div class="title">15211辅运顺槽</div>
  184. </div>
  185. <div class="zl-path-item position6">
  186. <div class="title">15212胶运顺槽</div>
  187. </div>
  188. <div class="zl-path-item position7">
  189. <div class="title">15212回风顺槽回风联巷</div>
  190. </div>
  191. <div class="zl-path-item position8">
  192. <div class="title">5煤组盘曲回风大巷</div>
  193. </div>
  194. <div class="zl-path-item position9">
  195. <div class="title">回风斜井联络巷</div>
  196. </div>
  197. <div class="zl-path-item position10">
  198. <div class="title">1盘曲回风斜井</div>
  199. </div>
  200. </div>
  201. </BorderBox11>
  202. </div>
  203. </div> -->
  204. </div>
  205. </div>
  206. </template>
  207. <script setup lang="ts">
  208. import { ref, onMounted, onUnmounted } from 'vue';
  209. import { Icon as SvgIcon } from '/@/components/Icon';
  210. import { Progress } from 'ant-design-vue';
  211. import { BorderBox11, BorderBox1 } from '@kjgl77/datav-vue3';
  212. import { sensorColumns, sensorData, networkColumns, networkData, warningColumns, warningData } from './network.data';
  213. import dayjs from 'dayjs';
  214. const currentTitleValue = ref('2'); // 监测工作面id
  215. let count = 0;
  216. const sensorDataList = ref<any[]>([]);
  217. const networkDataList = ref<any[]>([]);
  218. const warningDataList = ref<any[]>([]);
  219. const currentTime = ref(dayjs(new Date('2022-10-11 15:03:11').getTime() + count).format('YYYY-MM-DD HH:mm:ss'));
  220. const totalEnterNum = ref(23855 + '');
  221. const totalToNum = ref(244436 + '');
  222. const totalPa = ref(1640 + '');
  223. const rate1 = ref(95 + '');
  224. const rate2 = ref(95 + '');
  225. const rate3 = ref(95 + '');
  226. const analysisDetailDataList = ref([
  227. {
  228. code: '',
  229. name: '通风巷道规模(m)',
  230. value: '21000',
  231. icon: 'path-icon1',
  232. },
  233. {
  234. code: 'level',
  235. name: '通风难易程度',
  236. value: '21000',
  237. icon: 'path-icon2',
  238. },
  239. {
  240. code: 'resistance',
  241. name: '总阻力',
  242. value: totalPa.value,
  243. icon: 'path-icon3',
  244. },
  245. {
  246. code: '',
  247. name: '等积孔(㎡)',
  248. value: '11.27',
  249. icon: 'path-icon4',
  250. },
  251. ]);
  252. let timer: null | NodeJS.Timeout = null;
  253. function getMonitorData() {
  254. if (Object.prototype.toString.call(timer) === '[object Null]') {
  255. timer = setTimeout(async () => {
  256. sensorDataList.value = sensorData();
  257. networkDataList.value = networkData();
  258. warningDataList.value = warningData();
  259. currentTime.value = dayjs(new Date('2022-10-11 15:03:11').getTime() + ++count * 5000).format('YYYY-MM-DD HH:mm:ss');
  260. totalEnterNum.value = Number(Math.random() * 200 - 100 + 23855).toFixed(0);
  261. totalToNum.value = Number(Math.random() * 200 - 100 + 244436).toFixed(0);
  262. totalPa.value = Number(Math.random() * 50 - 25 + 1640).toFixed(0);
  263. rate1.value = Number(Math.random() * 4 - 2 + 95).toFixed(0);
  264. rate2.value = Number(Math.random() * 4 - 2 + 95).toFixed(0);
  265. rate3.value = Number(Math.random() * 4 - 2 + 95).toFixed(0);
  266. sensorDataList.value = sensorData();
  267. networkDataList.value = networkData();
  268. warningDataList.value = warningData();
  269. if (timer) {
  270. timer = null;
  271. }
  272. getMonitorData();
  273. }, 5000);
  274. }
  275. }
  276. // 标题选择
  277. function handleTitleChange() {
  278. //
  279. }
  280. onMounted(() => {
  281. getMonitorData();
  282. // if (document.body.getAttribute('class')?.includes('style-styleTwo')) document.body.removeAttribute('class', 'style-styleTwo');
  283. });
  284. onUnmounted(() => {
  285. if (timer) {
  286. clearTimeout(timer);
  287. timer = undefined;
  288. }
  289. });
  290. </script>
  291. <style scoped lang="less">
  292. @ventSpace: zxm;
  293. .zl-box {
  294. width: 100%;
  295. height: calc(100% - 100px);
  296. color: #fff;
  297. background-position: center;
  298. background-size: cover;
  299. .modal-box {
  300. position: relative;
  301. width: 100%;
  302. height: 100%;
  303. top: 0;
  304. left: 0;
  305. }
  306. }
  307. .zl-container-box {
  308. pointer-events: none;
  309. margin-top: 30px;
  310. .top-box {
  311. display: flex;
  312. justify-content: space-between;
  313. height: calc(70% - 20px);
  314. .lr-box {
  315. width: 374px;
  316. margin-top: 10px;
  317. }
  318. .left-box {
  319. // .container-title {
  320. // width: 398px;
  321. // height: 34px;
  322. // top: -30px;
  323. // background: url('/@/assets/images/vent/new-home/container-title-bg.png') no-repeat;
  324. // background-size: contain;
  325. // padding: 0 0 0 180px;
  326. // font-size: 20px;
  327. // pointer-events: auto;
  328. // position: relative;
  329. // .title-select {
  330. // width: 198px;
  331. // position: absolute;
  332. // top: 0;
  333. // left: 180px;
  334. // }
  335. // }
  336. .analysis-box {
  337. position: relative;
  338. .pie-group {
  339. display: flex;
  340. flex-direction: row;
  341. .item-pie {
  342. flex: 1;
  343. padding: 5px;
  344. display: flex;
  345. flex-direction: column;
  346. justify-content: center;
  347. align-items: center;
  348. .pie {
  349. width: 140px;
  350. height: 80px;
  351. background: url('/@/assets/images/vent/path/di.png') no-repeat;
  352. background-size: contain;
  353. display: flex;
  354. justify-content: center;
  355. .qiu1 {
  356. background: url('/@/assets/images/vent/path/cicle01.png') no-repeat center;
  357. }
  358. .qiu2 {
  359. background: url('/@/assets/images/vent/path/cicle04.png') no-repeat center;
  360. }
  361. .qiu {
  362. position: relative;
  363. width: 60px;
  364. height: 60px;
  365. background-size: 100%;
  366. display: flex;
  367. justify-content: center;
  368. padding-top: 18px;
  369. &::before {
  370. content: '';
  371. display: block;
  372. width: 60px;
  373. height: 60px;
  374. position: absolute;
  375. left: 50%;
  376. top: 50%;
  377. transform: translate(-50%, -50%);
  378. border-radius: 50%;
  379. border: 3px solid rgba(255, 255, 255, 0.5);
  380. animation: scale 2s linear infinite;
  381. }
  382. }
  383. }
  384. .pie-data {
  385. width: 140px;
  386. height: 20px;
  387. display: flex;
  388. justify-content: center;
  389. position: relative;
  390. background: url('/@/assets/images/vent/path/pie-line.png');
  391. .data-text {
  392. display: block;
  393. position: absolute;
  394. top: -8px;
  395. }
  396. }
  397. }
  398. }
  399. .detail-data-group {
  400. width: 100%;
  401. display: flex;
  402. flex-direction: column;
  403. align-items: center;
  404. margin-top: 15px;
  405. .container-item {
  406. width: 307px;
  407. height: 63px;
  408. display: flex;
  409. position: relative;
  410. background: url('/@/assets/images/vent/plane-bottom.png') no-repeat;
  411. background-size: auto;
  412. background-position: bottom;
  413. padding: 10px 30px;
  414. &::before {
  415. content: '';
  416. display: block;
  417. width: 100%;
  418. height: 5px;
  419. position: absolute;
  420. top: 62px;
  421. left: 0;
  422. background-color: #73f4ff66;
  423. backdrop-filter: blur(5px);
  424. }
  425. .item-icon {
  426. width: 60px;
  427. height: 45px;
  428. background: url('/@/assets/images/vent/plane-icon-bg.png') no-repeat;
  429. background-size: cover;
  430. .icon-style {
  431. margin: 10px 0 0 18px;
  432. }
  433. }
  434. .item-name {
  435. width: 180px;
  436. line-height: 60px;
  437. margin-left: 5px;
  438. text-align: left;
  439. }
  440. .item-value {
  441. position: relative;
  442. height: 26px;
  443. line-height: 24px;
  444. margin: 15px 0;
  445. text-align: center;
  446. width: 80px;
  447. border: 1px solid #00f5fe;
  448. border-radius: 13px;
  449. background: linear-gradient(to right, #00f5fe44, #0090ff44);
  450. &::before {
  451. width: 6px;
  452. height: 6px;
  453. content: '';
  454. position: absolute;
  455. left: -3px;
  456. top: 8px;
  457. background: #ffa500;
  458. border-radius: 3px;
  459. }
  460. }
  461. }
  462. }
  463. .feature-group {
  464. display: flex;
  465. flex-direction: row;
  466. padding: 20px;
  467. margin-top: 15px;
  468. .feature-item {
  469. width: 108px;
  470. height: 120px;
  471. background: url('/@/assets/images/vent/path/path-feature-bg.png');
  472. display: flex;
  473. flex-direction: column;
  474. // justify-content: center;
  475. .pie {
  476. display: flex;
  477. justify-content: center;
  478. }
  479. .data {
  480. margin-top: 15px;
  481. font-size: 12px;
  482. scale: 0.9;
  483. text-align: center;
  484. }
  485. }
  486. }
  487. }
  488. }
  489. .right-box {
  490. display: flex;
  491. flex-direction: column;
  492. .sensor-box,
  493. .warning-box {
  494. position: relative;
  495. // min-height: 220px;
  496. // max-height: 250px;
  497. .table-box {
  498. height: 280px;
  499. position: relative;
  500. .table-container {
  501. margin: 25px 20px 20px;
  502. height: 250px;
  503. position: absolute;
  504. }
  505. }
  506. }
  507. .sensor-box {
  508. .item-top-title {
  509. &::after {
  510. left: 110px;
  511. }
  512. &::before {
  513. left: 265px;
  514. }
  515. }
  516. }
  517. .warning-box {
  518. margin-top: 10px;
  519. }
  520. }
  521. }
  522. .bottom-box {
  523. width: 100%;
  524. height: calc(30% - 20px);
  525. display: flex;
  526. justify-content: space-between;
  527. margin-top: 20px;
  528. .bottom-lr-box {
  529. flex: 1;
  530. display: flex;
  531. justify-content: center;
  532. }
  533. .bottom-left {
  534. margin-right: 10px;
  535. .network-top {
  536. display: flex;
  537. flex-direction: row;
  538. justify-content: space-between;
  539. position: relative;
  540. top: 55px;
  541. padding: 0 30px;
  542. .network-top-left {
  543. display: flex;
  544. div {
  545. margin-right: 20px;
  546. }
  547. span {
  548. font-family: 'douyuFont';
  549. font-size: 15px;
  550. }
  551. .accuracy-rate {
  552. color: #ffa500;
  553. }
  554. .error-rate {
  555. color: #00f5fe;
  556. }
  557. }
  558. .time {
  559. color: #949494;
  560. }
  561. }
  562. .table-container {
  563. height: 150px;
  564. margin-top: 55px;
  565. margin-left: 15px;
  566. margin-right: 10px;
  567. }
  568. }
  569. .bottom-right {
  570. margin-left: 10px;
  571. .zl-top {
  572. width: calc(100% - 30px);
  573. padding: 0 20px;
  574. display: flex;
  575. flex-direction: row;
  576. justify-content: space-between;
  577. position: relative;
  578. top: 35px;
  579. z-index: 99;
  580. margin: 10px;
  581. border-bottom: 1px solid #00f5fe88;
  582. .btn {
  583. padding: 3px 10px;
  584. border-top: 1px solid #c6c6c6;
  585. background-image: linear-gradient(#c2c2c2aa, #b3b3b388 20%, #5a5a5a88);
  586. cursor: pointer;
  587. margin-right: 5px;
  588. &:hover,
  589. &:active {
  590. border-top: 1px solid #00f5fe;
  591. background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
  592. }
  593. }
  594. .active {
  595. border-top: 1px solid #00f5fe;
  596. background-image: linear-gradient(#00f5feaa, #1adce288 20%, #00848988);
  597. }
  598. .data {
  599. font-family: 'douyuFont';
  600. color: #ffa500;
  601. font-size: 15px;
  602. }
  603. }
  604. .zl-container {
  605. width: 100%;
  606. height: 100%;
  607. margin: 0 15px;
  608. background: url('/@/assets/images/vent/path/zl-bg1.png') no-repeat;
  609. background-size: 920px 190px;
  610. position: relative;
  611. &::after {
  612. content: '';
  613. display: block;
  614. position: absolute;
  615. width: 100%;
  616. height: 100%;
  617. top: 85px;
  618. background: url('/@/assets/images/vent/path/zl-bg2.png') no-repeat;
  619. background-size: 920px 100px;
  620. }
  621. }
  622. .zl-path-item {
  623. height: 67px;
  624. background: url('/@/assets/images/vent/path/zl-path-item-bg.png') no-repeat;
  625. background-size: auto;
  626. background-position: center bottom;
  627. position: absolute;
  628. scale: 0.9;
  629. .title {
  630. position: relative;
  631. top: -20px;
  632. text-align: center;
  633. font-size: 12px;
  634. background: #00f5fe33;
  635. padding: 3px 5px;
  636. backdrop-filter: blur(5px);
  637. }
  638. }
  639. .position10 {
  640. top: 130px;
  641. left: 0px;
  642. }
  643. .position9 {
  644. top: 52px;
  645. left: 100px;
  646. }
  647. .position8 {
  648. top: 132px;
  649. left: 220px;
  650. }
  651. .position7 {
  652. top: 128px;
  653. left: 420px;
  654. }
  655. .position6 {
  656. top: 60px;
  657. left: 320px;
  658. }
  659. .position5 {
  660. top: 120px;
  661. left: 580px;
  662. }
  663. .position4 {
  664. top: 123px;
  665. left: 690px;
  666. }
  667. .position3 {
  668. top: 103px;
  669. left: 830px;
  670. }
  671. .position2 {
  672. top: 90px;
  673. left: 740px;
  674. }
  675. .position1 {
  676. top: 80px;
  677. left: 535px;
  678. }
  679. }
  680. }
  681. }
  682. .item-top-title {
  683. width: 374px;
  684. height: 32px;
  685. text-align: center;
  686. line-height: 34px;
  687. font-size: 15px;
  688. font-weight: 600;
  689. color: #fafafa;
  690. position: absolute;
  691. padding-top: 0px;
  692. top: -9px;
  693. z-index: 999;
  694. &::before {
  695. content: '';
  696. display: block;
  697. width: 40px;
  698. height: 1px;
  699. position: absolute;
  700. left: 255px;
  701. top: 50%;
  702. transform: translateY(-50%);
  703. -webkit-transform: translate(-50%, -50%);
  704. background-color: #00d4fe88;
  705. }
  706. &::after {
  707. content: '';
  708. display: block;
  709. width: 40px;
  710. height: 1px;
  711. position: absolute;
  712. left: 120px;
  713. top: 50%;
  714. transform: translateY(-50%);
  715. -webkit-transform: translate(-50%, -50%);
  716. background-color: #00d4fe88;
  717. }
  718. }
  719. .signal-round {
  720. display: inline-block;
  721. width: 4px;
  722. height: 4px;
  723. border-radius: 50%;
  724. position: relative;
  725. top: -3px;
  726. &::after {
  727. display: block;
  728. content: '';
  729. position: absolute;
  730. width: 8px;
  731. height: 8px;
  732. top: -2px;
  733. left: -2px;
  734. border-radius: 50%;
  735. background-color: #daffc044;
  736. box-shadow: 0 0 1px 1px #c6ff7722;
  737. }
  738. }
  739. .signal-round-run {
  740. background-color: #67fc00;
  741. &::after {
  742. background-color: #daffc044;
  743. box-shadow: 0 0 1px 1px #c6ff7722;
  744. }
  745. }
  746. .signal-round-red {
  747. background-color: #ff3823;
  748. &::after {
  749. background-color: #ff382344;
  750. box-shadow: 0 0 1px 1px #ff382333;
  751. }
  752. }
  753. .signal-round-orange {
  754. background-color: #ff9b17;
  755. &::after {
  756. background-color: #ff9b1744;
  757. box-shadow: 0 0 1px 1px #ff9b1733;
  758. }
  759. }
  760. .signal-round-yellow {
  761. background-color: #ffff00;
  762. &::after {
  763. background-color: #ffff0044;
  764. box-shadow: 0 0 1px 1px #ffff0033;
  765. }
  766. }
  767. .table-container {
  768. overflow-y: auto;
  769. overflow-x: hidden;
  770. pointer-events: auto;
  771. &::-webkit-scrollbar {
  772. width: 8px;
  773. height: 8px;
  774. background-color: #f5f5f500;
  775. }
  776. &::-webkit-scrollbar-track {
  777. background-color: #ffffff33;
  778. border-radius: 10px;
  779. }
  780. &::-webkit-scrollbar-thumb {
  781. background-color: #cccccc44;
  782. border-radius: 10px;
  783. }
  784. }
  785. @keyframes scale {
  786. 0% {
  787. transform: translate(-50%, -50%) scale(0.9);
  788. opacity: 1;
  789. }
  790. 100% {
  791. transform: translate(-50%, -50%) scale(1.5);
  792. opacity: 0;
  793. }
  794. }
  795. :deep(.@{ventSpace}-progress-text) {
  796. color: #fff !important;
  797. }
  798. :deep(.@{ventSpace}-table-thead) {
  799. background-color: transparent !important;
  800. & > tr {
  801. border: 1px solid #00f5fe !important;
  802. }
  803. & > tr > th {
  804. // border: none !important;
  805. color: #00f5fe !important;
  806. border-top: 1px solid #00f5fe !important;
  807. border-bottom: 1px solid #00f5fe !important;
  808. border-left: none !important;
  809. border-right: none !important;
  810. font-size: 13px;
  811. }
  812. }
  813. :deep(.@{ventSpace}-table-tbody) {
  814. & > tr > td {
  815. font-size: 13px;
  816. }
  817. }
  818. :deep(.@{ventSpace}-table-small) {
  819. border: none !important;
  820. }
  821. :deep(.@{ventSpace}-layout) {
  822. background: transparent !important;
  823. }
  824. </style>