gasPumpHomeBD.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879
  1. <template>
  2. <div class="monitor-container">
  3. <div id="FlowSensor" class="FlowSensor-box" style="position: absolute; display: none">
  4. <!-- <div class="elementContent" v-if="selectData['deviceType'].startsWith('pump_under') || selectData['deviceType'] == 'pump_n12m2pq'">
  5. <fourBorderBg>
  6. <template v-for="(item, index) in modelMonitor" :key="index">
  7. <div class="gas-monitor-row">
  8. <div class="title">{{ item.title }}</div>
  9. <div class="value">{{ selectData[item.code] ? selectData[item.code] : '-' }}</div>
  10. </div>
  11. </template>
  12. </fourBorderBg>
  13. </div> -->
  14. </div>
  15. <!-- 布尔台新瓦斯泵模型上的数据 -->
  16. <div class="elementContent" style="position: absolute; display: none">
  17. <div v-for="(tag, index) in modelMonitorTags" :key="index" :id="tag.domId" class="modal-monitor-box">
  18. <div class="title">{{ tag.title }}</div>
  19. <div
  20. v-if="tag.type == 'sign'"
  21. class="signal-round"
  22. :class="{ 'signal-round-gry': selectData[tag.code] != 1, 'signal-round-run': selectData[tag.code] == 1 }"
  23. ></div>
  24. <div v-else class="value">{{ selectData[tag.code] }}</div>
  25. </div>
  26. </div>
  27. <div v-if="selectData['netStatus'] == 0" class="device-state">网络断开</div>
  28. <ModuleCommon
  29. v-for="cfg in configs"
  30. :key="cfg.deviceType"
  31. :show-style="cfg.showStyle"
  32. :module-data="cfg.moduleData"
  33. :module-name="cfg.moduleName"
  34. :device-type="cfg.deviceType"
  35. :data="selectData"
  36. :visible="true"
  37. />
  38. <div class="lr left-box"></div>
  39. <div class="lr right-box"></div>
  40. <div ref="playerRef" class="player-box"></div>
  41. </div>
  42. <!-- <DetailModal @register="register" :device-type="deviceType" :device-id="deviceId" /> -->
  43. <PasswordModal
  44. :modal-is-show="passwordModalIsShow"
  45. modal-title="密码检验"
  46. :modal-type="handlerType"
  47. @handle-ok="handleOK"
  48. @handle-cancel="handleCancel"
  49. />
  50. </template>
  51. <script setup lang="ts">
  52. import { ref, onMounted, onUnmounted, defineProps, watch, inject, nextTick, computed } from 'vue';
  53. // import ventBox1 from '/@/components/vent/ventBox1.vue';
  54. import ModuleCommon from '../../../home/configurable/components/ModuleCommon.vue';
  55. import { setModelType, playAnimate } from '../gasPump.threejs';
  56. import { getModelMonitorTags } from '../gasPump.data';
  57. // import { useModal } from '/@/components/Modal';
  58. import { deviceControlApi } from '/@/api/vent/index';
  59. import PasswordModal from '../../comment/components/PasswordModal.vue';
  60. import { message } from 'ant-design-vue';
  61. // import { useCamera } from '/@/hooks/system/useCamera';
  62. // import { Config } from '../../../deviceManager/configurationTable/types';
  63. // import DetailModal from './DetailModal.vue';
  64. import { set } from 'lodash-es';
  65. import { list } from '../gasPump.api';
  66. import { useInitConfigs } from '../../../home/configurable/hooks/useInit';
  67. const { configs: rawConfigs, fetchConfigs } = useInitConfigs();
  68. const globalConfig = inject<any>('globalConfig');
  69. const props = defineProps<{ deviceId: string; deviceType: string }>();
  70. // const [register, { openModal }] = useModal();
  71. const modelMonitorTags = getModelMonitorTags();
  72. const loading = ref(false);
  73. const passwordModalIsShow = ref(false);
  74. const handlerType = ref('');
  75. const playerRef = ref();
  76. // 监测数据
  77. const selectData = ref<any>({});
  78. // const { getCamera, removeCamera } = useCamera();
  79. // https获取监测数据
  80. let timer: null | NodeJS.Timeout = null;
  81. function getMonitor(flag?) {
  82. if (Object.prototype.toString.call(timer) === '[object Null]') {
  83. return new Promise((resolve) => {
  84. timer = setTimeout(
  85. async () => {
  86. const data = await getDataSource();
  87. selectData.value = data;
  88. playAnimate(data);
  89. // Object.assign(selectData, data);
  90. if (timer) {
  91. timer = null;
  92. }
  93. resolve(null);
  94. await getMonitor();
  95. loading.value = false;
  96. },
  97. flag ? 0 : 1000
  98. );
  99. });
  100. }
  101. }
  102. async function getDataSource() {
  103. const res = await list({
  104. devicetype: 'gasdrainage',
  105. pagetype: 'normal',
  106. });
  107. const datalist = res.msgTxt[0]['datalist'];
  108. const result = datalist.reduce((obj, e) => {
  109. return set(obj, e.readData.id, e);
  110. }, {});
  111. return result;
  112. }
  113. function handler(passWord, paramcode) {
  114. let value = '';
  115. if (paramcode == 'ykjdqh') {
  116. value = selectData.value['ykjdqh'] == '1' ? '2' : '1';
  117. }
  118. if (paramcode == 'jxmsqh') {
  119. value = selectData.value['jxmsqh'] == '1' ? '2' : '1';
  120. }
  121. const data = {
  122. deviceid: selectData.value['deviceID'],
  123. devicetype: selectData.value['deviceType'],
  124. paramcode: paramcode,
  125. password: passWord,
  126. value: value,
  127. };
  128. deviceControlApi(data)
  129. .then(() => {
  130. if (globalConfig.History_Type == 'remote') {
  131. message.success('指令已下发至生产管控平台成功!');
  132. } else {
  133. message.success('指令已下发成功!');
  134. }
  135. })
  136. .catch(() => {
  137. message.success('控制异常');
  138. });
  139. }
  140. function handleOK(passWord, handlerState) {
  141. handler(passWord, handlerState);
  142. passwordModalIsShow.value = false;
  143. handlerType.value = '';
  144. }
  145. function handleCancel() {
  146. passwordModalIsShow.value = false;
  147. handlerType.value = '';
  148. }
  149. const configs = computed(() => {
  150. return rawConfigs.value.filter((c) => c.deviceType === props.deviceId);
  151. });
  152. watch(
  153. () => props.deviceType,
  154. () => {
  155. // removeCamera();
  156. nextTick(async () => {
  157. if (props.deviceType == 'pump_over') {
  158. setModelType('gasPump');
  159. } else if (props.deviceType?.startsWith('pump_under') || props.deviceType == 'pump_n12m2pq') {
  160. setModelType('gasPumpUnder');
  161. }
  162. });
  163. }
  164. );
  165. // watch(
  166. // () => props.deviceId,
  167. // async (deviceID) => {
  168. // removeCamera();
  169. // if (deviceID) await getCamera(deviceID, playerRef.value);
  170. // }
  171. // );
  172. onMounted(async () => {
  173. timer = null;
  174. await getMonitor(true);
  175. fetchConfigs('gasPumpMonitor');
  176. // if (selectData && selectData['deviceID']) await getCamera(selectData['deviceID'], playerRef.value);
  177. });
  178. // onBeforeUnmount(() => {
  179. // removeCamera();
  180. // });
  181. onUnmounted(() => {
  182. // removeCamera();
  183. if (timer) {
  184. clearTimeout(timer);
  185. timer = null;
  186. }
  187. });
  188. // const rawConfigs = ref<Config[]>([
  189. // {
  190. // deviceType: '1709773229143920641',
  191. // moduleName: '瓦斯泵',
  192. // pageType: 'gasPumpMonitor',
  193. // moduleData: {
  194. // header: {
  195. // show: false,
  196. // readFrom: '',
  197. // selector: {
  198. // show: false,
  199. // value: '',
  200. // },
  201. // slot: {
  202. // show: false,
  203. // value: '',
  204. // },
  205. // },
  206. // background: {
  207. // show: false,
  208. // type: 'image',
  209. // link: '',
  210. // },
  211. // layout: {
  212. // direction: 'column',
  213. // items: [
  214. // {
  215. // name: 'list',
  216. // basis: '100%',
  217. // },
  218. // ],
  219. // },
  220. // complex_list: [],
  221. // chart: [],
  222. // table: [],
  223. // gallery: [],
  224. // list: [
  225. // {
  226. // type: 'K',
  227. // readFrom: '',
  228. // items: [
  229. // {
  230. // label: '701001传感器的值',
  231. // value: '${701001.readData.value}',
  232. // color: 'blue',
  233. // },
  234. // ],
  235. // },
  236. // ],
  237. // gallery_list: [],
  238. // preset: [],
  239. // to: '',
  240. // },
  241. // showStyle: {
  242. // size: 'width:348px;height:300px;',
  243. // version: '原版',
  244. // position: 'top:30px;left:10px;',
  245. // },
  246. // },
  247. // {
  248. // deviceType: '1709773229143920641',
  249. // moduleName: '注水泵',
  250. // pageType: 'gasPumpMonitor',
  251. // moduleData: {
  252. // header: {
  253. // show: false,
  254. // readFrom: '',
  255. // selector: {
  256. // show: false,
  257. // value: '',
  258. // },
  259. // slot: {
  260. // show: false,
  261. // value: '',
  262. // },
  263. // },
  264. // background: {
  265. // show: false,
  266. // type: 'image',
  267. // link: '',
  268. // },
  269. // layout: {
  270. // direction: 'column',
  271. // items: [
  272. // {
  273. // name: 'list',
  274. // basis: '100%',
  275. // },
  276. // ],
  277. // },
  278. // complex_list: [],
  279. // chart: [],
  280. // table: [],
  281. // gallery: [],
  282. // list: [
  283. // {
  284. // type: 'K',
  285. // readFrom: '',
  286. // items: [
  287. // {
  288. // label: '701001传感器的值',
  289. // value: '${701001.readData.value}',
  290. // color: 'blue',
  291. // },
  292. // ],
  293. // },
  294. // ],
  295. // gallery_list: [],
  296. // preset: [],
  297. // to: '',
  298. // },
  299. // showStyle: {
  300. // size: 'width:348px;height:200px;',
  301. // version: '原版',
  302. // position: 'top:340px;left:10px;',
  303. // },
  304. // },
  305. // {
  306. // deviceType: '1709773229143920641',
  307. // moduleName: '排水泵',
  308. // pageType: 'gasPumpMonitor',
  309. // moduleData: {
  310. // header: {
  311. // show: false,
  312. // readFrom: '',
  313. // selector: {
  314. // show: false,
  315. // value: '',
  316. // },
  317. // slot: {
  318. // show: false,
  319. // value: '',
  320. // },
  321. // },
  322. // background: {
  323. // show: false,
  324. // type: 'image',
  325. // link: '',
  326. // },
  327. // layout: {
  328. // direction: 'column',
  329. // items: [
  330. // {
  331. // name: 'list',
  332. // basis: '100%',
  333. // },
  334. // ],
  335. // },
  336. // complex_list: [],
  337. // chart: [],
  338. // table: [],
  339. // gallery: [],
  340. // list: [
  341. // {
  342. // type: 'K',
  343. // readFrom: '',
  344. // items: [
  345. // {
  346. // label: '701001传感器的值',
  347. // value: '${701001.readData.value}',
  348. // color: 'blue',
  349. // },
  350. // ],
  351. // },
  352. // ],
  353. // gallery_list: [],
  354. // preset: [],
  355. // to: '',
  356. // },
  357. // showStyle: {
  358. // size: 'width:348px;height:200px;',
  359. // version: '原版',
  360. // position: 'top:550px;left:10px;',
  361. // },
  362. // },
  363. // {
  364. // deviceType: '1709773229143920641',
  365. // moduleName: '泵站检测详情',
  366. // pageType: 'gasPumpMonitor',
  367. // moduleData: {
  368. // header: {
  369. // show: false,
  370. // readFrom: '',
  371. // selector: {
  372. // show: false,
  373. // value: '',
  374. // },
  375. // slot: {
  376. // show: false,
  377. // value: '',
  378. // },
  379. // },
  380. // background: {
  381. // show: false,
  382. // type: 'image',
  383. // link: '',
  384. // },
  385. // layout: {
  386. // direction: 'column',
  387. // items: [
  388. // {
  389. // name: 'list',
  390. // basis: '100%',
  391. // },
  392. // ],
  393. // },
  394. // complex_list: [],
  395. // chart: [],
  396. // table: [],
  397. // gallery: [],
  398. // list: [
  399. // {
  400. // type: 'K',
  401. // readFrom: '',
  402. // items: [
  403. // {
  404. // label: '701001传感器的值',
  405. // value: '${701001.readData.value}',
  406. // color: 'blue',
  407. // },
  408. // ],
  409. // },
  410. // ],
  411. // gallery_list: [],
  412. // preset: [],
  413. // to: '',
  414. // },
  415. // showStyle: {
  416. // size: 'width:348px;height:490px;',
  417. // version: '原版',
  418. // position: 'top:30px;right:0px;',
  419. // },
  420. // },
  421. // {
  422. // deviceType: '1709773300489031682',
  423. // moduleName: '瓦斯泵',
  424. // pageType: 'gasPumpMonitor',
  425. // moduleData: {
  426. // header: {
  427. // show: false,
  428. // readFrom: '',
  429. // selector: {
  430. // show: false,
  431. // value: '',
  432. // },
  433. // slot: {
  434. // show: false,
  435. // value: '',
  436. // },
  437. // },
  438. // background: {
  439. // show: false,
  440. // type: 'image',
  441. // link: '',
  442. // },
  443. // layout: {
  444. // direction: 'column',
  445. // items: [
  446. // {
  447. // name: 'list',
  448. // basis: '100%',
  449. // },
  450. // ],
  451. // },
  452. // complex_list: [],
  453. // chart: [],
  454. // table: [],
  455. // gallery: [],
  456. // list: [
  457. // {
  458. // type: 'K',
  459. // readFrom: '',
  460. // items: [
  461. // {
  462. // label: '701004传感器的值',
  463. // value: '${701004.readData.value}',
  464. // color: 'blue',
  465. // },
  466. // ],
  467. // },
  468. // ],
  469. // gallery_list: [],
  470. // preset: [],
  471. // to: '',
  472. // },
  473. // showStyle: {
  474. // size: 'width:348px;height:300px;',
  475. // version: '原版',
  476. // position: 'top:30px;left:10px;',
  477. // },
  478. // },
  479. // {
  480. // deviceType: '1709773300489031682',
  481. // moduleName: '注水泵',
  482. // pageType: 'gasPumpMonitor',
  483. // moduleData: {
  484. // header: {
  485. // show: false,
  486. // readFrom: '',
  487. // selector: {
  488. // show: false,
  489. // value: '',
  490. // },
  491. // slot: {
  492. // show: false,
  493. // value: '',
  494. // },
  495. // },
  496. // background: {
  497. // show: false,
  498. // type: 'image',
  499. // link: '',
  500. // },
  501. // layout: {
  502. // direction: 'column',
  503. // items: [
  504. // {
  505. // name: 'list',
  506. // basis: '100%',
  507. // },
  508. // ],
  509. // },
  510. // complex_list: [],
  511. // chart: [],
  512. // table: [],
  513. // gallery: [],
  514. // list: [
  515. // {
  516. // type: 'K',
  517. // readFrom: '',
  518. // items: [
  519. // {
  520. // label: '701004传感器的值',
  521. // value: '${701004.readData.value}',
  522. // color: 'blue',
  523. // },
  524. // ],
  525. // },
  526. // ],
  527. // gallery_list: [],
  528. // preset: [],
  529. // to: '',
  530. // },
  531. // showStyle: {
  532. // size: 'width:348px;height:200px;',
  533. // version: '原版',
  534. // position: 'top:340px;left:10px;',
  535. // },
  536. // },
  537. // {
  538. // deviceType: '1709773300489031682',
  539. // moduleName: '排水泵',
  540. // pageType: 'gasPumpMonitor',
  541. // moduleData: {
  542. // header: {
  543. // show: false,
  544. // readFrom: '',
  545. // selector: {
  546. // show: false,
  547. // value: '',
  548. // },
  549. // slot: {
  550. // show: false,
  551. // value: '',
  552. // },
  553. // },
  554. // background: {
  555. // show: false,
  556. // type: 'image',
  557. // link: '',
  558. // },
  559. // layout: {
  560. // direction: 'column',
  561. // items: [
  562. // {
  563. // name: 'list',
  564. // basis: '100%',
  565. // },
  566. // ],
  567. // },
  568. // complex_list: [],
  569. // chart: [],
  570. // table: [],
  571. // gallery: [],
  572. // list: [
  573. // {
  574. // type: 'K',
  575. // readFrom: '',
  576. // items: [
  577. // {
  578. // label: '701004传感器的值',
  579. // value: '${701004.readData.value}',
  580. // color: 'blue',
  581. // },
  582. // ],
  583. // },
  584. // ],
  585. // gallery_list: [],
  586. // preset: [],
  587. // to: '',
  588. // },
  589. // showStyle: {
  590. // size: 'width:348px;height:200px;',
  591. // version: '原版',
  592. // position: 'top:550px;left:10px;',
  593. // },
  594. // },
  595. // {
  596. // deviceType: '1709773300489031682',
  597. // moduleName: '泵站检测详情',
  598. // pageType: 'gasPumpMonitor',
  599. // moduleData: {
  600. // header: {
  601. // show: false,
  602. // readFrom: '',
  603. // selector: {
  604. // show: false,
  605. // value: '',
  606. // },
  607. // slot: {
  608. // show: false,
  609. // value: '',
  610. // },
  611. // },
  612. // background: {
  613. // show: false,
  614. // type: 'image',
  615. // link: '',
  616. // },
  617. // layout: {
  618. // direction: 'column',
  619. // items: [
  620. // {
  621. // name: 'list',
  622. // basis: '100%',
  623. // },
  624. // ],
  625. // },
  626. // complex_list: [],
  627. // chart: [],
  628. // table: [],
  629. // gallery: [],
  630. // list: [
  631. // {
  632. // type: 'K',
  633. // readFrom: '',
  634. // items: [
  635. // {
  636. // label: '701004传感器的值',
  637. // value: '${701004.readData.value}',
  638. // color: 'blue',
  639. // },
  640. // ],
  641. // },
  642. // ],
  643. // gallery_list: [],
  644. // preset: [],
  645. // to: '',
  646. // },
  647. // showStyle: {
  648. // size: 'width:348px;height:490px;',
  649. // version: '原版',
  650. // position: 'top:30px;right:0px;',
  651. // },
  652. // },
  653. // ]);
  654. </script>
  655. <style lang="less" scoped>
  656. @import '/@/design/theme.less';
  657. @import '/@/design/vent/modal.less';
  658. @import '../../comment/less/workFace.less';
  659. @ventSpace: zxm;
  660. .elementContent {
  661. :deep(.main-container) {
  662. display: flex;
  663. flex-wrap: wrap;
  664. width: 690px;
  665. padding: 10px 12px 10px 15px;
  666. border: 1px solid #d3e1ff33;
  667. background-color: #061c2a55;
  668. box-shadow: 0 0 15px #3b567f55;
  669. background-color: #38383833;
  670. .gas-monitor-row {
  671. display: flex;
  672. flex-direction: row;
  673. flex-wrap: wrap;
  674. color: #fff;
  675. line-height: 32px;
  676. .title {
  677. width: 250px;
  678. color: #baeaff;
  679. }
  680. .value {
  681. width: 80px;
  682. color: #efae05;
  683. }
  684. }
  685. }
  686. }
  687. .modal-monitor-box {
  688. background-color: #000;
  689. color: #fff;
  690. padding: 0 5px;
  691. display: flex;
  692. align-items: center;
  693. justify-content: center;
  694. .title {
  695. margin-right: 5px;
  696. }
  697. .signal-round {
  698. margin-left: 5px;
  699. }
  700. .value {
  701. width: 30px;
  702. color: #efae05;
  703. }
  704. }
  705. .device-state {
  706. width: 100%;
  707. position: absolute;
  708. top: 20px;
  709. color: #e90000;
  710. display: flex;
  711. justify-content: center;
  712. font-size: 20px;
  713. }
  714. .lr {
  715. margin-top: 0 !important;
  716. }
  717. .left-box {
  718. width: 360px !important;
  719. direction: rtl;
  720. overflow-y: auto;
  721. overflow-x: hidden;
  722. height: calc(100% - 60px);
  723. margin-top: 30px !important;
  724. .left-container {
  725. direction: ltr;
  726. }
  727. }
  728. .right-box {
  729. width: 350px !important;
  730. overflow-y: auto;
  731. overflow-x: hidden;
  732. .environment-monitor {
  733. .item {
  734. flex: 1;
  735. margin: 0 5px;
  736. .title {
  737. color: #7ae5ff;
  738. text-align: center;
  739. margin-bottom: 2px;
  740. }
  741. .num {
  742. width: 100%;
  743. height: 30px;
  744. text-align: center;
  745. border-top: 2px solid #50c8fc;
  746. border-radius: 4px;
  747. background-image: linear-gradient(#2e4d5955, #3780b499, #2e465955);
  748. }
  749. }
  750. }
  751. .pool-box {
  752. width: 327px;
  753. height: 65px;
  754. padding: 0 5px;
  755. background: url('/@/assets/images/vent/pump1.png') no-repeat;
  756. background-size: cover;
  757. background-origin: content-box;
  758. margin-top: 2px;
  759. .num {
  760. color: aqua;
  761. }
  762. .center {
  763. padding-right: 5px;
  764. }
  765. }
  766. }
  767. .player-box {
  768. position: absolute;
  769. height: 100%;
  770. width: 100%;
  771. padding: 0 20px 0 20px;
  772. z-index: 9999;
  773. display: flex;
  774. align-items: end;
  775. bottom: 80px;
  776. :deep(#LivePlayerBox) {
  777. display: flex;
  778. justify-content: end;
  779. }
  780. }
  781. .input-box {
  782. width: calc(100%);
  783. display: flex;
  784. flex-direction: row !important;
  785. flex-wrap: wrap !important;
  786. .input-item {
  787. width: calc(50% - 8px);
  788. padding: 0 2px;
  789. &:nth-child(2n) {
  790. margin-left: 4px;
  791. }
  792. }
  793. }
  794. .btn-group {
  795. display: flex;
  796. justify-content: space-around;
  797. .btn-item {
  798. width: 82px;
  799. text-align: center;
  800. }
  801. }
  802. .top-btn {
  803. .btn-group {
  804. margin-bottom: 8px;
  805. .btn-item {
  806. width: calc(50% - 16px);
  807. margin: 0 4px;
  808. }
  809. }
  810. .control-item {
  811. margin-left: 10px;
  812. margin-bottom: 8px;
  813. display: flex;
  814. .control-title {
  815. width: 80px;
  816. color: var(--vent-font-action-link);
  817. }
  818. .control-container {
  819. display: flex;
  820. }
  821. }
  822. }
  823. .btn-box {
  824. display: flex;
  825. .btn {
  826. padding: 0 8px !important;
  827. margin: 0 2px;
  828. }
  829. }
  830. .state-header {
  831. display: flex;
  832. color: var(--vent-font-action-link);
  833. .header-item {
  834. width: 25%;
  835. text-align: center;
  836. }
  837. }
  838. .device-row {
  839. display: flex;
  840. margin-top: 10px;
  841. .state {
  842. width: 25%;
  843. text-align: center;
  844. font-size: 13px;
  845. }
  846. }
  847. :deep(.@{ventSpace}-tabs-tabpane-active) {
  848. overflow: auto;
  849. }
  850. :deep(.list-item__background) {
  851. background-image: linear-gradient(to right, #39deff15, #3977e500) !important;
  852. line-height: 30px !important;
  853. height: 30px !important;
  854. }
  855. </style>