balancePressHome2.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569
  1. <template>
  2. <a-spin tip="Loading..." :spinning="loading">
  3. <div class="monitor-container">
  4. <ModuleCommon
  5. v-for="cfg in configs"
  6. :key="cfg.deviceType"
  7. :show-style="cfg.showStyle"
  8. :module-data="cfg.moduleData"
  9. :module-name="cfg.moduleName"
  10. :device-type="cfg.deviceType"
  11. :data="selectData"
  12. :visible="true"
  13. /> </div
  14. ></a-spin>
  15. </template>
  16. <script setup lang="ts">
  17. import { ref, onMounted, onUnmounted, defineProps } from 'vue';
  18. import { mountedThree, destroy, setModelType, updateText, play } from '../balancePress.threejs';
  19. import { list } from '../balancePress.api';
  20. import ModuleCommon from '../../../home/configurable/components/ModuleCommon.vue';
  21. import { useInitConfigs } from '../../../home/configurable/hooks/useInit';
  22. import { useGlobSetting } from '/@/hooks/setting';
  23. // import { Config } from '../../../deviceManager/configurationTable/types';
  24. const props = defineProps({
  25. deviceId: {
  26. type: String,
  27. require: true,
  28. },
  29. });
  30. const { sysOrgCode } = useGlobSetting();
  31. const loading = ref(false);
  32. // 监测数据
  33. const selectData = ref();
  34. // https获取监测数据
  35. let timer: any = null;
  36. function getMonitor(flag?) {
  37. if (Object.prototype.toString.call(timer) === '[object Null]') {
  38. timer = setTimeout(
  39. async () => {
  40. if (props.deviceId) {
  41. const data = await getDataSource(props.deviceId);
  42. // Object.assign(selectData, data);
  43. updateText(selectData);
  44. selectData.value = data;
  45. }
  46. if (timer) {
  47. timer = null;
  48. }
  49. await getMonitor();
  50. loading.value = false;
  51. },
  52. flag ? 0 : 1000
  53. );
  54. }
  55. }
  56. async function getDataSource(systemID) {
  57. const res = await list({ devicetype: 'sys', systemID });
  58. const result = Array.from(res.msgTxt).reduce(
  59. (obj: any, e: any) => {
  60. obj[e.type] = e;
  61. // if (true) {
  62. if (sysOrgCode === 'sdmtjtswmk') {
  63. if (e.type.startsWith('fanlocal')) {
  64. obj.fanlocal.datalist.push(...e.datalist);
  65. }
  66. if (e.type.startsWith('safetymonitor')) {
  67. e.datalist.forEach((ele) => {
  68. if (ele.strinstallpos.includes('风门')) {
  69. obj.gate.datalist.push(ele);
  70. } else if (ele.strinstallpos.includes('风窗')) {
  71. obj.window.datalist.push(ele);
  72. } else if (ele.strinstallpos.includes('工作面')) {
  73. obj.work_surface.datalist.push(ele);
  74. } else {
  75. obj.others.datalist.push(ele);
  76. }
  77. });
  78. }
  79. if (e.type.startsWith('avgpressure_lowoxygen')) {
  80. e.datalist.forEach((ele) => {
  81. ele.strinstallpos.replace(' ', '');
  82. ele.strname.replace(' ', '');
  83. });
  84. }
  85. }
  86. return obj;
  87. },
  88. {
  89. /** 用于归类fanlocal */
  90. fanlocal: { datalist: [] },
  91. /** 用于归类gate */
  92. gate: { datalist: [] },
  93. /** 用于归类window */
  94. window: { datalist: [] },
  95. /** 用于归类work_surface */
  96. work_surface: { datalist: [] },
  97. others: { datalist: [] },
  98. }
  99. );
  100. return result;
  101. }
  102. // const configs = ref<Config[]>([
  103. // {
  104. // deviceType: 'fanlocal',
  105. // moduleName: '局部风机',
  106. // pageType: 'balancePressHome',
  107. // moduleData: {
  108. // header: {
  109. // show: true,
  110. // readFrom: 'datalist',
  111. // selector: {
  112. // show: true,
  113. // value: '${deviceID}',
  114. // trans: {
  115. // '1910221332833665026': '主机',
  116. // '1910221283626090497': '备机',
  117. // },
  118. // },
  119. // slot: {
  120. // show: false,
  121. // value: '',
  122. // },
  123. // },
  124. // background: {
  125. // show: false,
  126. // type: 'image',
  127. // link: '',
  128. // },
  129. // layout: {
  130. // direction: 'column',
  131. // items: [
  132. // {
  133. // name: 'tabs',
  134. // basis: '100%',
  135. // },
  136. // ],
  137. // },
  138. // complex_list: [],
  139. // chart: [],
  140. // table: [],
  141. // gallery: [],
  142. // list: [],
  143. // tabs: [
  144. // {
  145. // type: 'K',
  146. // readFrom: '',
  147. // mapFromData: false,
  148. // items: [
  149. // {
  150. // title: '电机1',
  151. // contents: [
  152. // {
  153. // label: '输出功率',
  154. // value: '${readData.Fan1StartStatus}',
  155. // color: 'blue',
  156. // },
  157. // {
  158. // label: '输出电压',
  159. // value: '${readData.Fan1StartStatus}',
  160. // color: 'blue',
  161. // },
  162. // ],
  163. // },
  164. // {
  165. // title: '电机2',
  166. // contents: [
  167. // {
  168. // label: '输出功率',
  169. // value: '${readData.Fan2StartStatus}',
  170. // color: 'blue',
  171. // },
  172. // {
  173. // label: '输出电压',
  174. // value: '${readData.Fan2StartStatus}',
  175. // color: 'blue',
  176. // },
  177. // {
  178. // label: '输出电压',
  179. // value: '${readData.Fan2StartStatus}',
  180. // color: 'blue',
  181. // },
  182. // {
  183. // label: '输出电压',
  184. // value: '${readData.Fan2StartStatus}',
  185. // color: 'blue',
  186. // },
  187. // ],
  188. // },
  189. // ],
  190. // },
  191. // ],
  192. // gallery_list: [],
  193. // preset: [],
  194. // to: '',
  195. // },
  196. // showStyle: {
  197. // size: 'width:470px;height:260px;',
  198. // version: '原版',
  199. // position: 'top:20px;left:0;',
  200. // },
  201. // },
  202. // {
  203. // deviceType: '',
  204. // moduleName: '风门',
  205. // pageType: 'balancePressHome',
  206. // moduleData: {
  207. // header: {
  208. // show: false,
  209. // readFrom: '',
  210. // selector: {
  211. // show: false,
  212. // value: '',
  213. // },
  214. // slot: {
  215. // show: false,
  216. // value: '',
  217. // },
  218. // },
  219. // background: {
  220. // show: false,
  221. // type: 'image',
  222. // link: '',
  223. // },
  224. // layout: {
  225. // direction: 'column',
  226. // items: [
  227. // {
  228. // name: 'complex_list',
  229. // basis: '100%',
  230. // },
  231. // ],
  232. // },
  233. // complex_list: [
  234. // {
  235. // type: 'G',
  236. // readFrom: 'gate.datalist',
  237. // mapFromData: true,
  238. // items: [
  239. // {
  240. // title: '${deviceID}',
  241. // trans: {
  242. // '1915631893453004802': '22107胶运顺槽入口自动风门2',
  243. // '1915631893478170626': '22107胶运顺槽入口自动风门1',
  244. // '1915631897043329025': '22107辅回撤通道自动风门1',
  245. // '1915631895088783362': '22107辅回撤通道自动风门2',
  246. // },
  247. // contents: [
  248. // {
  249. // label: '状态',
  250. // value: '${readData.V}',
  251. // color: 'blue',
  252. // },
  253. // ],
  254. // },
  255. // ],
  256. // },
  257. // ],
  258. // chart: [],
  259. // table: [],
  260. // gallery: [],
  261. // list: [],
  262. // gallery_list: [],
  263. // preset: [],
  264. // to: '',
  265. // },
  266. // showStyle: {
  267. // size: 'width:470px;height:320px;',
  268. // version: '原版',
  269. // position: 'top:290px;left:0;',
  270. // },
  271. // },
  272. // {
  273. // deviceType: '',
  274. // moduleName: '综采工作面推进度',
  275. // pageType: 'balancePressHome',
  276. // moduleData: {
  277. // header: {
  278. // show: false,
  279. // readFrom: '',
  280. // selector: {
  281. // show: false,
  282. // value: '',
  283. // },
  284. // slot: {
  285. // show: false,
  286. // value: '',
  287. // },
  288. // },
  289. // background: {
  290. // show: false,
  291. // type: 'image',
  292. // link: '',
  293. // },
  294. // layout: {
  295. // direction: 'column',
  296. // items: [
  297. // {
  298. // name: 'list',
  299. // basis: '100%',
  300. // },
  301. // ],
  302. // },
  303. // complex_list: [],
  304. // chart: [],
  305. // table: [],
  306. // gallery: [],
  307. // list: [
  308. // {
  309. // type: 'K',
  310. // readFrom: '',
  311. // items: [
  312. // {
  313. // label: '进度',
  314. // value: '50%',
  315. // color: 'blue',
  316. // },
  317. // {
  318. // label: '埋深',
  319. // value: '2000km',
  320. // color: 'blue',
  321. // },
  322. // ],
  323. // },
  324. // ],
  325. // gallery_list: [],
  326. // preset: [],
  327. // to: '',
  328. // },
  329. // showStyle: {
  330. // size: 'width:470px;height:130px;',
  331. // version: '原版',
  332. // position: 'top:620px;left:0;',
  333. // },
  334. // },
  335. // {
  336. // deviceType: '',
  337. // moduleName: '重点监控传感器',
  338. // pageType: 'balancePressHome',
  339. // moduleData: {
  340. // header: {
  341. // show: false,
  342. // readFrom: '',
  343. // selector: {
  344. // show: false,
  345. // value: '',
  346. // },
  347. // slot: {
  348. // show: false,
  349. // value: '',
  350. // },
  351. // },
  352. // background: {
  353. // show: false,
  354. // type: 'image',
  355. // link: '',
  356. // },
  357. // layout: {
  358. // direction: 'column',
  359. // items: [
  360. // {
  361. // name: 'complex_list',
  362. // basis: '100%',
  363. // },
  364. // ],
  365. // },
  366. // complex_list: [
  367. // {
  368. // type: 'G',
  369. // readFrom: 'avgpressure_lowoxygen_normal.datalist',
  370. // mapFromData: true,
  371. // items: [
  372. // {
  373. // title: '${strinstallpos}',
  374. // contents: [
  375. // {
  376. // label: '网络状态',
  377. // value: '${readData.netStatus_str}',
  378. // color: 'blue',
  379. // },
  380. // ],
  381. // },
  382. // ],
  383. // },
  384. // ],
  385. // chart: [],
  386. // table: [],
  387. // gallery: [],
  388. // list: [],
  389. // gallery_list: [],
  390. // preset: [],
  391. // to: '',
  392. // },
  393. // showStyle: {
  394. // size: 'width:470px;height:230px;',
  395. // version: '原版',
  396. // position: 'top:20px;right:0;',
  397. // },
  398. // },
  399. // {
  400. // deviceType: '',
  401. // moduleName: '辅助巡检传感器',
  402. // pageType: 'balancePressHome',
  403. // moduleData: {
  404. // header: {
  405. // show: false,
  406. // readFrom: '',
  407. // selector: {
  408. // show: false,
  409. // value: '',
  410. // },
  411. // slot: {
  412. // show: false,
  413. // value: '',
  414. // },
  415. // },
  416. // background: {
  417. // show: false,
  418. // type: 'image',
  419. // link: '',
  420. // },
  421. // layout: {
  422. // direction: 'column',
  423. // items: [
  424. // {
  425. // name: 'complex_list',
  426. // basis: '100%',
  427. // },
  428. // ],
  429. // },
  430. // complex_list: [
  431. // {
  432. // type: 'G',
  433. // readFrom: 'others.datalist',
  434. // mapFromData: true,
  435. // items: [
  436. // {
  437. // title: '${strinstallpos}',
  438. // contents: [
  439. // {
  440. // label: '网络状态',
  441. // value: '${readData.netStatus_str}',
  442. // color: 'blue',
  443. // },
  444. // ],
  445. // },
  446. // ],
  447. // },
  448. // ],
  449. // chart: [],
  450. // table: [],
  451. // gallery: [],
  452. // list: [],
  453. // gallery_list: [],
  454. // preset: [],
  455. // to: '',
  456. // },
  457. // showStyle: {
  458. // size: 'width:470px;height:230px;',
  459. // version: '原版',
  460. // position: 'top:260px;right:0;',
  461. // },
  462. // },
  463. // {
  464. // deviceType: '',
  465. // moduleName: '地面大气压',
  466. // pageType: 'balancePressHome',
  467. // moduleData: {
  468. // header: {
  469. // show: false,
  470. // readFrom: '',
  471. // selector: {
  472. // show: false,
  473. // value: '',
  474. // },
  475. // slot: {
  476. // show: false,
  477. // value: '',
  478. // },
  479. // },
  480. // background: {
  481. // show: false,
  482. // type: 'image',
  483. // link: '',
  484. // },
  485. // layout: {
  486. // direction: 'column',
  487. // items: [
  488. // {
  489. // name: 'chart',
  490. // basis: '100%',
  491. // },
  492. // ],
  493. // },
  494. // complex_list: [],
  495. // chart: [
  496. // {
  497. // type: 'line_smooth',
  498. // readFrom: 'surface_history.datalist',
  499. // legend: { show: true },
  500. // xAxis: [{ show: true }],
  501. // yAxis: [
  502. // { show: true, name: '压力1(Pa)', position: 'left' },
  503. // { show: true, name: '压力2(Pa)', position: 'right' },
  504. // ],
  505. // series: [
  506. // { readFrom: '', xprop: 'time', yprop: 'pressure1', label: '压力1' },
  507. // // { readFrom: 'datalist', xprop: 'strinstallpos', yprop: 'readData.va', label: '风速' },
  508. // ],
  509. // },
  510. // ],
  511. // table: [],
  512. // gallery: [],
  513. // list: [],
  514. // gallery_list: [],
  515. // preset: [],
  516. // to: '',
  517. // },
  518. // showStyle: {
  519. // size: 'width:470px;height:250px;',
  520. // version: '原版',
  521. // position: 'top:500px;right:0;',
  522. // },
  523. // },
  524. // ]);
  525. const { configs, fetchConfigs } = useInitConfigs();
  526. onMounted(async () => {
  527. // getMonitor()
  528. fetchConfigs('balancePressHome');
  529. loading.value = true;
  530. // mountedThree().then(async () => {
  531. // await setModelType('balancePressTun'); //balancePressBase
  532. // loading.value = false;
  533. // timer = null;
  534. // await getMonitor(true);
  535. // play('startSmoke', 'top', 30, 'open', 0);
  536. // });
  537. timer = null;
  538. await getMonitor(true);
  539. loading.value = false;
  540. });
  541. onUnmounted(() => {
  542. destroy();
  543. if (timer) {
  544. clearTimeout(timer);
  545. }
  546. });
  547. </script>
  548. <style lang="less" scoped>
  549. @import '/@/design/vent/modal.less';
  550. @import '../../comment/less/workFace.less';
  551. @ventSpace: zxm;
  552. .monitor-container {
  553. margin-top: 60px;
  554. }
  555. </style>