nitrogenHomeYJ.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804
  1. <template>
  2. <div id="compressor3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
  3. <div
  4. id="compressorCss3D"
  5. class="threejs-Object-CSS compressorCss3D-box"
  6. style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px"
  7. >
  8. <div v-for="(groupNum, index) in monitorDataGroup" :key="index" class="modal-monitor">
  9. <fourBorderBg :class="`kyj${index}`" :id="`nitrogenMonitor${groupNum}`">
  10. <div class="title">{{ kyjs[index] }} </div>
  11. <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
  12. <div v-if="preMonitor.code !== 'signal'" class="monitor-item">
  13. <span class="monitor-title">{{ preMonitor.title }}:</span>
  14. <span class="monitor-val"
  15. ><span class="val">{{
  16. monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)]
  17. ? formatNum(monitorData[preMonitor.code.replace(prefix[0], `${prefix[0]}${groupNum}`)])
  18. : '-'
  19. }}</span
  20. ><span class="unit">{{ preMonitor.unit }}</span></span
  21. >
  22. </div>
  23. <div v-else class="signal-item">
  24. <div class="signal" v-for="(signal, childIndex) in preMonitor.child" :key="childIndex">
  25. <span class="monitor-title">{{ signal.title }}</span>
  26. <span
  27. :class="{
  28. 'signal-round': true,
  29. 'signal-round-run': signal.title != '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
  30. 'signal-round-warning': signal.title == '故障信号' && monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] == '1',
  31. 'signal-round-gry': monitorData[signal.code.replace(prefix[0], `${prefix[0]}${groupNum}`)] != '1',
  32. }"
  33. ></span>
  34. </div>
  35. </div>
  36. </template>
  37. </fourBorderBg>
  38. <fourBorderBg :class="`cqg${index}`" :id="`cqgMonitor${groupNum}`">
  39. <div class="title">{{ cqgs[index] }}</div>
  40. <template v-for="(cqgMonitor, cqgMonitorIndex) in cqgMonitorList" :key="cqgMonitorIndex">
  41. <div class="monitor-item">
  42. <span class="monitor-title">{{ cqgMonitor.title }}:</span>
  43. <span class="monitor-val"
  44. ><span class="val">{{
  45. monitorData[cqgMonitor.code.replace(prefix[0], `${prefix[1]}${groupNum}`)]
  46. ? formatNum(monitorData[cqgMonitor.code.replace(prefix[1], `${prefix[1]}${groupNum}`)])
  47. : '-'
  48. }}</span
  49. ><span class="unit">{{ cqgMonitor.unit }}</span></span
  50. >
  51. </div>
  52. </template>
  53. </fourBorderBg>
  54. </div>
  55. </div>
  56. <div class="nitrogen-home">
  57. <div style="position: absolute; color: #fff; top: 30px; pointer-events: auto; display: flex">
  58. <div
  59. v-for="(sysItem, sysIndex) in monitorDataGroupArr"
  60. :key="sysIndex"
  61. class="tab-button-box"
  62. :class="{ 'tab-button-box-active': monitorDataGroupFlag == sysIndex + 1 }"
  63. @click="setMonitorGroupNum(monitorDataGroup1, sysIndex + 1)"
  64. >{{ '压风系统' + (sysIndex + 1) }} (运行: <p style="padding: 0 5px"></p
  65. ><span
  66. :class="{
  67. 'signal-round': true,
  68. 'signal-round-run': sysStateList[sysIndex] && sysStateList[sysIndex].isRun,
  69. 'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].isRun,
  70. }"
  71. ></span>
  72. <p style="padding: 0 5px"></p>故障:<p style="padding: 0 5px"></p
  73. ><span
  74. :class="{
  75. 'signal-round': true,
  76. 'signal-round-warning': sysStateList[sysIndex] && sysStateList[sysIndex].fault,
  77. 'signal-round-gry': sysStateList[sysIndex] && !sysStateList[sysIndex].fault,
  78. }"
  79. ></span
  80. ><p style="padding: 0 5px"></p> )</div
  81. >
  82. </div>
  83. <div class="total-data">
  84. <div class="vent-flex-row">
  85. <div class="item"
  86. >总管压力(bar):<span class="val">{{ monitorData[`MainPipePressure`] ? formatNum(monitorData[`MainPipePressure`]) : '-' }}</span></div
  87. >
  88. </div>
  89. </div>
  90. <div class="nitrogen-container">
  91. <div v-if="monitorData['netStatus'] == 0" class="device-state">网络断开</div>
  92. <div class="top-box">
  93. <!-- 左边监测数据 -->
  94. <div class="lr-box left-box">
  95. <div class="left-container">
  96. <div class="item item-l" v-for="(groupNum, index) in monitorDataGroup" :key="index">
  97. <div class="monitor-box">
  98. <ventBox1>
  99. <template #title>
  100. <div>{{ groupNum }}号压风机</div>
  101. </template>
  102. <template #container>
  103. <div class="state-item">
  104. <div class="item-col" v-for="(preFan, preFanIndex) in preFanMonitorData" :key="preFanIndex">
  105. <span class="state-title">{{ preFan.title + (preFan.unit !== 'signal' ? `(${preFan.unit})` : '') }}</span>
  106. <span v-if="preFan.unit !== 'signal'" class="state-val">{{
  107. monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)] >= 0
  108. ? formatNum(Number(monitorData[preFan.code.replace(prefix[2], prefix[2] + groupNum)]))
  109. : '-'
  110. }}</span>
  111. <span
  112. v-else
  113. :class="{
  114. 'signal-round': true,
  115. 'signal-round-warning': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] == '1',
  116. 'signal-round-gry': monitorData[preFan.code.replace(prefix[2], `${prefix[2]}${groupNum}`)] != '1',
  117. }"
  118. ></span>
  119. </div>
  120. </div>
  121. </template>
  122. </ventBox1>
  123. </div>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. </template>
  131. <script lang="ts" setup name="nitrogenHome">
  132. import { onMounted, onUnmounted, ref, watch } from 'vue';
  133. import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
  134. import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
  135. import { list } from '../nitrogen.api';
  136. import ventBox1 from '/@/components/vent/ventBox1.vue';
  137. // import { monitorDataGroupArr, preFanMonitorData, monitorData, preMonitorList, cqgMonitorList, prefix, getSysState } from '../nitrogen.dataYJ';
  138. // import type { State } from '../nitrogen.dataYJ';
  139. import { formatNum } from '/@/utils/ventutil';
  140. const loading = ref(true);
  141. const monitorDataGroupFlag = ref(0);
  142. const monitorDataGroup = ref([]);
  143. const kyjs = ref([]);
  144. const cqgs = ref([]);
  145. const monitorData = ref([]);
  146. const sysStateList = ref<State[]>([]);
  147. // https获取监测数据
  148. let timer: null | NodeJS.Timeout = null;
  149. async function getMonitor(flag?) {
  150. if (Object.prototype.toString.call(timer) === '[object Null]') {
  151. timer = await setTimeout(
  152. async () => {
  153. await getDataSource();
  154. if (timer) {
  155. timer = null;
  156. }
  157. await getMonitor(false);
  158. },
  159. flag ? 0 : 1000
  160. );
  161. }
  162. }
  163. async function getDataSource() {
  164. const res = await list({ devicetype: 'forcFan', pagetype: 'normal' });
  165. let dataSource = res.msgTxt[0] && res.msgTxt[0].datalist ? res.msgTxt[0].datalist[0] : [];
  166. if (dataSource) {
  167. monitorData.value = Object.assign(dataSource, dataSource.readData);
  168. }
  169. loading.value = false;
  170. sysStateList.value = getSysState(monitorData.value);
  171. }
  172. function setMonitorGroupNum(num, flag) {
  173. monitorDataGroupFlag.value = flag;
  174. }
  175. function changeGroup(val) {
  176. kyjs.value = val.map((item) => `${item}号空压机`);
  177. cqgs.value = val.map((item) => `${item}号储气罐`);
  178. monitorData.value = new Array(val.length).fill({
  179. strName: '空压机',
  180. compressGroupName: '',
  181. compressExhaustPressF1: '-',
  182. compressSeparatePressF1: '-',
  183. compressHostTempF1: '-',
  184. compressCrewTempF1: '-',
  185. compressRunTimeF1: '-',
  186. controlModel: 'LOC',
  187. });
  188. }
  189. watch(monitorDataGroupFlag, (newVal) => {
  190. const monitorGroup = monitorDataGroupArr[newVal - 1];
  191. changeGroup(monitorGroup);
  192. monitorDataGroup.value = monitorGroup;
  193. setModelType(monitorGroup);
  194. });
  195. onMounted(async () => {
  196. mountedThree().then(async () => {
  197. await getMonitor(true);
  198. monitorDataGroupFlag.value = 1;
  199. });
  200. });
  201. onUnmounted(() => {
  202. destroy();
  203. if (timer) {
  204. clearTimeout(timer);
  205. timer = undefined;
  206. }
  207. });
  208. </script>
  209. <style lang="less" scoped>
  210. @ventSpace: zxm;
  211. .nitrogen-home {
  212. width: 100%;
  213. height: 100%;
  214. display: flex;
  215. justify-content: center;
  216. position: relative;
  217. .total-data {
  218. position: absolute;
  219. color: #e4cd00;
  220. z-index: 9;
  221. top: 50px;
  222. right: 30px;
  223. // display: flex;
  224. font-size: 18px;
  225. .item {
  226. width: 200px;
  227. margin-left: 30px;
  228. .val {
  229. color: #00d8ff;
  230. }
  231. }
  232. }
  233. }
  234. .compressorCss3D-box {
  235. .modal-monitor {
  236. position: absolute;
  237. left: 0px;
  238. top: 0px;
  239. }
  240. &:deep(.win) {
  241. margin: 0 !important;
  242. background: #00000044;
  243. }
  244. &:deep(.main) {
  245. .title {
  246. height: 34px;
  247. text-align: center;
  248. font-weight: 600;
  249. color: #7af5ff;
  250. // background-image: url('../../../assets/img/yfj/light.png');
  251. background-repeat: no-repeat;
  252. background-position-x: center;
  253. background-position-y: 100%;
  254. background-size: 80%;
  255. font-size: 16px;
  256. }
  257. .monitor-item {
  258. display: flex;
  259. flex-direction: row;
  260. width: auto;
  261. margin-bottom: 3px;
  262. .monitor-val {
  263. color: #ffb700;
  264. display: flex;
  265. width: auto;
  266. .val {
  267. width: 80px;
  268. font-size: 14px;
  269. }
  270. .unit {
  271. color: #ffffffbb;
  272. font-size: 14px;
  273. }
  274. }
  275. }
  276. .monitor-title {
  277. width: 100px;
  278. color: #7af5ff;
  279. font-weight: 400;
  280. font-size: 14px;
  281. }
  282. .signal-item {
  283. display: flex;
  284. justify-content: space-between;
  285. // margin-bottom: 5px;
  286. .signal-round {
  287. display: inline-block;
  288. width: 8px;
  289. height: 8px;
  290. border-radius: 50%;
  291. margin: 0 10px;
  292. position: relative;
  293. &::after {
  294. display: block;
  295. content: '';
  296. position: absolute;
  297. width: 12px;
  298. height: 12px;
  299. top: -2px;
  300. left: -2px;
  301. border-radius: 50%;
  302. }
  303. }
  304. .signal-round-gry {
  305. background-color: #858585;
  306. &::after {
  307. background-color: #85858544;
  308. box-shadow: 0 0 1px 1px #85858599;
  309. }
  310. }
  311. .signal-round-run {
  312. background-color: #67fc00;
  313. &::after {
  314. background-color: #67fc0044;
  315. box-shadow: 0 0 1px 1px #c6ff77;
  316. }
  317. }
  318. .signal-round-warning {
  319. background-color: #e9170b;
  320. &::after {
  321. background-color: #e9170b44;
  322. box-shadow: 0 0 1px 1px #e9170b;
  323. }
  324. }
  325. }
  326. }
  327. }
  328. .nitrogen-home {
  329. width: 100%;
  330. height: calc(100% - 100px);
  331. position: fixed;
  332. z-index: 99;
  333. display: flex;
  334. flex-direction: column;
  335. justify-content: center;
  336. align-items: center;
  337. pointer-events: none;
  338. top: 60px;
  339. .nitrogen-container {
  340. width: 100%;
  341. height: calc(100%);
  342. display: flex;
  343. justify-content: space-between;
  344. margin-bottom: 100px;
  345. position: relative;
  346. .device-state {
  347. width: 100%;
  348. position: absolute;
  349. top: 20px;
  350. color: #e90000;
  351. display: flex;
  352. justify-content: center;
  353. font-size: 20px;
  354. }
  355. .top-box {
  356. width: 100%;
  357. padding: 10px;
  358. overflow: hidden;
  359. display: flex;
  360. justify-content: space-between;
  361. .lr-box {
  362. display: flex;
  363. flex-direction: column;
  364. position: relative;
  365. z-index: 9999;
  366. pointer-events: auto;
  367. }
  368. .item {
  369. width: 285px;
  370. height: auto;
  371. position: relative;
  372. border-radius: 5px;
  373. margin-top: 10px;
  374. margin-bottom: 0px;
  375. pointer-events: auto;
  376. color: #fff;
  377. overflow: hidden;
  378. .control-item {
  379. height: auto;
  380. min-height: 35px;
  381. display: flex;
  382. flex-direction: row;
  383. justify-content: space-between;
  384. align-items: center;
  385. padding: 5px;
  386. margin: 0 10px 0 3px;
  387. pointer-events: auto;
  388. background: linear-gradient(to right, #0063cd22, #0063cd04);
  389. margin-bottom: 5px;
  390. border-width: 1px;
  391. border-style: dashed;
  392. border-image: linear-gradient(to right, #008ccd66, #0063cd04) 1 1;
  393. border-radius: 5px;
  394. &:last-child {
  395. margin-bottom: 0;
  396. }
  397. .control-item-l {
  398. display: flex;
  399. align-items: center;
  400. font-size: 14px;
  401. .round {
  402. display: inline-block;
  403. width: 3px;
  404. height: 3px;
  405. padding: 1px;
  406. border-radius: 50%;
  407. background-color: #3df6ff;
  408. margin-right: 5px;
  409. box-shadow: 0 0 1px 1px #64f7ff;
  410. }
  411. }
  412. .control-item-r {
  413. text-align: right;
  414. }
  415. .button-box {
  416. position: relative;
  417. padding: 5px;
  418. border: 1px transparent solid;
  419. background-clip: border-box;
  420. border-radius: 5px;
  421. margin-left: 8px;
  422. }
  423. .a-button {
  424. pointer-events: auto;
  425. }
  426. &::v-deep .a-button--mini {
  427. padding: 6px 10px;
  428. }
  429. &::v-deep .a-button--mini.is-round {
  430. padding: 6px 10px;
  431. }
  432. }
  433. .base-title {
  434. width: calc(100% - 60px);
  435. text-align: center;
  436. color: #00d8ff;
  437. }
  438. .state-item {
  439. width: 100%;
  440. display: flex;
  441. flex-direction: row;
  442. flex-wrap: wrap;
  443. .item-col {
  444. width: 50%;
  445. display: flex;
  446. justify-content: center;
  447. align-items: center;
  448. padding: 5px;
  449. .state-title {
  450. color: #ffffffcc;
  451. flex: 9;
  452. font-size: 14px;
  453. .unit {
  454. // color: #ffffffbb;
  455. }
  456. }
  457. .state-val {
  458. flex: 1;
  459. color: #e4a300;
  460. margin-right: 5px;
  461. text-align: right;
  462. font-size: 14px;
  463. }
  464. }
  465. }
  466. .signal-box {
  467. margin: 5px 0;
  468. display: flex;
  469. align-items: center;
  470. .signal-title {
  471. color: #7af5ff;
  472. margin: 0 5px;
  473. }
  474. &:last-child {
  475. margin-right: 0px;
  476. }
  477. }
  478. .list-item {
  479. padding: 0 10px;
  480. display: flex;
  481. justify-content: space-between;
  482. align-items: center;
  483. .item-data-key {
  484. color: #ffffff99;
  485. }
  486. }
  487. .item-data-box {
  488. color: #fff;
  489. .state-icon {
  490. display: inline-block;
  491. width: 12px;
  492. height: 12px;
  493. border-radius: 12px;
  494. }
  495. .open {
  496. border: 5px solid #133a56;
  497. background: #4ecb73;
  498. }
  499. .close {
  500. border: 5px solid #192961;
  501. background: #6d7898;
  502. }
  503. }
  504. }
  505. .item-l {
  506. width: 335px;
  507. .monitor-box {
  508. // width: 335px;
  509. background-color: #ffffff05;
  510. // margin-left: 2px;
  511. // border-radius: 5px;
  512. // backdrop-filter: blur(10px);
  513. }
  514. }
  515. .right-box {
  516. width: 330px;
  517. .control-group {
  518. display: flex;
  519. // justify-content: space-around;
  520. flex-wrap: wrap;
  521. .control-item {
  522. display: flex;
  523. flex-direction: column;
  524. justify-content: center;
  525. align-items: center;
  526. padding: 0 4px;
  527. .control-item-title {
  528. color: #a6dce9;
  529. position: relative;
  530. top: 5px;
  531. }
  532. .control-item-state {
  533. width: 94px;
  534. height: 47px;
  535. background: url('/@/assets/images/vent/control-switch-bg.png');
  536. display: flex;
  537. justify-content: center;
  538. align-items: center;
  539. color: #fff;
  540. }
  541. .button-box {
  542. position: relative;
  543. padding: 5px;
  544. border: 1px transparent solid;
  545. background-clip: border-box;
  546. border-radius: 5px;
  547. margin-left: 8px;
  548. }
  549. .a-button {
  550. pointer-events: auto;
  551. }
  552. &::v-deep .a-button--mini {
  553. padding: 6px 10px;
  554. }
  555. &::v-deep .a-button--mini.is-round {
  556. padding: 6px 10px;
  557. }
  558. }
  559. }
  560. .control-btn-group {
  561. width: 100%;
  562. display: flex;
  563. flex-direction: row;
  564. justify-content: space-between;
  565. align-items: center;
  566. .control-left-box {
  567. display: flex;
  568. flex-direction: column;
  569. justify-content: center;
  570. align-items: center;
  571. padding: 0 20px;
  572. .btn-box {
  573. width: 100px;
  574. color: #fff;
  575. display: flex;
  576. justify-content: space-between;
  577. span {
  578. display: inline-block;
  579. padding: 2px 8px;
  580. background: #007099;
  581. border-radius: 4px;
  582. border: 1px solid rgb(125, 230, 249);
  583. cursor: pointer;
  584. &:hover {
  585. background: #005574;
  586. }
  587. }
  588. }
  589. .icon-box {
  590. width: 60px;
  591. height: 60px;
  592. border-radius: 30px;
  593. border: 2px solid #00bcdd;
  594. box-shadow: 0 0 20px #ffffff88;
  595. display: flex;
  596. justify-content: center;
  597. align-items: center;
  598. margin-top: 20px;
  599. .icon {
  600. width: 18px;
  601. height: 18px;
  602. border-radius: 9px;
  603. border: 3px solid #d7f9ff;
  604. position: relative;
  605. background: #00bcdd;
  606. &::before {
  607. position: absolute;
  608. content: '';
  609. width: 2px;
  610. height: 12px;
  611. background-color: #00bcdd;
  612. left: 6px;
  613. top: -16px;
  614. }
  615. &::after {
  616. position: absolute;
  617. content: '';
  618. width: 2px;
  619. height: 12px;
  620. left: 6px;
  621. top: 17px;
  622. background-color: #00d9ff;
  623. }
  624. }
  625. }
  626. .remote-icon-box {
  627. transform: rotate(30deg);
  628. animation: iconRotate 1s linear;
  629. }
  630. .remote-icon-box1 {
  631. transform: rotate(-30deg);
  632. animation: iconRotate1 1s linear;
  633. }
  634. @keyframes iconRotate {
  635. from {
  636. transform: rotate(-30deg);
  637. }
  638. to {
  639. transform: rotate(30deg);
  640. }
  641. }
  642. @keyframes iconRotate1 {
  643. from {
  644. transform: rotate(30deg);
  645. }
  646. to {
  647. transform: rotate(-30deg);
  648. }
  649. }
  650. }
  651. .control-right-box {
  652. width: 100px;
  653. color: #fff;
  654. height: 80px;
  655. justify-content: space-between;
  656. align-items: center;
  657. .btn {
  658. margin-bottom: 30px;
  659. }
  660. }
  661. }
  662. }
  663. .left-box {
  664. height: calc(100%);
  665. overflow-x: hidden;
  666. overflow-y: auto;
  667. pointer-events: auto;
  668. direction: rtl;
  669. .left-container {
  670. direction: ltr;
  671. }
  672. .control-item {
  673. height: 36px;
  674. }
  675. }
  676. }
  677. }
  678. }
  679. .tab-button-box {
  680. display: inline-block;
  681. position: relative;
  682. padding: 5px;
  683. // border: 1px transparent solid;
  684. border-radius: 5px;
  685. margin-left: 8px;
  686. margin-right: 8px;
  687. width: auto;
  688. // height: 40px;
  689. // border: 1px solid #65dbea;
  690. height: 35px !important;
  691. display: flex;
  692. align-items: center;
  693. justify-content: center;
  694. color: #fff;
  695. padding: 0 15px 5px 15px;
  696. cursor: pointer;
  697. &:hover {
  698. background: linear-gradient(#2cd1ff55, #1eb0ff55);
  699. }
  700. &::before {
  701. width: calc(100% - 6px);
  702. height: 27px;
  703. content: '';
  704. position: absolute;
  705. top: 3px;
  706. right: 0;
  707. left: 3px;
  708. bottom: 0;
  709. z-index: -1;
  710. border-radius: inherit; /*important*/
  711. background: linear-gradient(#1fa6cb, #127cb5);
  712. }
  713. &::after {
  714. width: calc(100% + 32px);
  715. height: 10px;
  716. content: '';
  717. position: absolute;
  718. top: 28px;
  719. right: 0;
  720. left: -16px;
  721. bottom: 0;
  722. z-index: -1;
  723. border-radius: inherit; /*important*/
  724. background: url('/@/assets/images/vent/short-light.png') no-repeat;
  725. background-position: center;
  726. background-size: 100%;
  727. z-index: 999;
  728. }
  729. }
  730. .tab-button-box-active {
  731. border: 1px solid #66989e !important;
  732. &:hover {
  733. background: none !important;
  734. }
  735. &::before {
  736. background: linear-gradient(#1fa6cbcc, #127cb5cc) !important;
  737. }
  738. }
  739. </style>