1
0

gasPumpHomeCopy.vue 23 KB

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