entryThree.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <template>
  2. <div class="bg" style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
  3. <!-- <a-spin :spinning="loading" /> -->
  4. <div
  5. id="main3DCSS"
  6. class="threejs-Object-CSS"
  7. style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 1; top: 0"
  8. >
  9. <div style="position: relative" v-if="selectData['modalTyoe']">
  10. <div class="elementTag" id="inputBox1" v-if="backMonitorIsShow">
  11. <div class="elementContent elementContent-r">
  12. <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
  13. <div class="element-item"
  14. ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
  15. >
  16. <div class="element-item"
  17. ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan2m3 ? selectData.Fan2m3 : '-' }}</span></div
  18. >
  19. </div>
  20. </div>
  21. <div class="elementTag" id="inputBox" v-if="frontMonitorIsShow">
  22. <div class="elementContent elementContent-r">
  23. <!-- <div class="element-item"><span class="data-title">风机全压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
  24. <div class="element-item"
  25. ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan1FanPre ? selectData.Fan1FanPre : '-' }}</span></div
  26. >
  27. <div class="element-item"
  28. ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan1m3 ? selectData.Fan1m3 : '-' }}</span></div
  29. >
  30. </div>
  31. </div>
  32. <div class="elementTag" id="inputBox2" v-if="centerMonitorIsShow">
  33. <div class="elementContent elementContent-r">
  34. <!-- <div class="element-item"><span class="data-title">风机气压(Pa):</span><span>{{ selectData.DataPa ? selectData.DataPa : '-' }}</span></div> -->
  35. <div class="element-item"
  36. ><span class="data-title">风机负压(Pa):</span><span>{{ selectData.Fan3FanPre ? selectData.Fan3FanPre : '-' }}</span></div
  37. >
  38. <div class="element-item"
  39. ><span class="data-title">风机风量(m³/s):</span><span>{{ selectData.Fan3m3 ? selectData.Fan3m3 : '-' }}</span></div
  40. >
  41. </div>
  42. </div>
  43. <!-- 18模拟反风锁井 -->
  44. <div v-if="hasPermission('mainFan:ffsjMonitor_ljh')" class="elementTag" id="fbm">
  45. <div class="elementContent elementContent-r fbm-box">
  46. <div class="fbm-video">
  47. <div class="vent-flex-row-between vent-margin-t-20">
  48. <span class="data-title">风门开启状态:</span>
  49. <template v-if="explosionDoorData['openGate'] == 1 && explosionDoorData['closeGate'] == 0">
  50. <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>开启</span>
  51. </template>
  52. <template v-else-if="explosionDoorData['openGate'] == 0 && explosionDoorData['closeGate'] == 1">
  53. <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>关闭</span>
  54. </template>
  55. <template v-else>
  56. <div class="vent-margin-l-10"><span class="signal-round signal-round-warning vent-margin-r-8"></span>正在运行 或 数据异常</div>
  57. </template>
  58. </div>
  59. <div class="vent-flex-row-between vent-margin-t-10">
  60. <span class="data-title">反风锁紧状态:</span>
  61. <template
  62. v-if="
  63. explosionDoorData['lock1Open'] == 1 &&
  64. explosionDoorData['lock1Close'] == 0 &&
  65. explosionDoorData['lock2Open'] == 1 &&
  66. explosionDoorData['lock2Close'] == 0
  67. "
  68. >
  69. <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁1开</span>
  70. <span class="data-title"><span class="signal-round signal-round-blue vent-margin-r-8"></span>锁2开</span>
  71. </template>
  72. <template
  73. v-else-if="
  74. explosionDoorData['lock1Open'] == 0 &&
  75. explosionDoorData['lock1Close'] == 1 &&
  76. explosionDoorData['lock2Open'] == 0 &&
  77. explosionDoorData['lock2Close'] == 1
  78. "
  79. >
  80. <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁1关</span>
  81. <span class="data-title"><span class="signal-round signal-round-gry vent-margin-r-8"></span>锁2关</span>
  82. </template>
  83. <template v-else>
  84. <div class="vent-margin-l-10"><span class="signal-round signal-round-warning vent-margin-r-8"></span>正在运行 或 数据异常</div>
  85. </template>
  86. </div>
  87. </div>
  88. <div class="fbm-data">
  89. <!-- <div class="element-item"
  90. ><span class="data-title">井口负压(kPa):</span
  91. ><span>{{ selectData.Fan1FanPre ? selectData.Fan1FanPre : selectData.Fan2FanPre ? selectData.Fan2FanPre : '-' }}</span></div
  92. > -->
  93. <div class="element-item"
  94. ><span class="data-title">井口正压(kPa):</span><span>{{ get(explosionDoorData, 'zhengya') }}</span></div
  95. >
  96. <div class="element-item"
  97. ><span class="data-title">井口温度(℃):</span><span>{{ get(explosionDoorData, 'tempreture') }}</span></div
  98. >
  99. <div class="element-item"
  100. ><span class="data-title">甲烷浓度(%):</span><span>{{ get(explosionDoorData, 'ch4') }}</span></div
  101. >
  102. <div class="element-item"
  103. ><span class="data-title">CO浓度(%):</span><span>{{ get(explosionDoorData, 'co') }}</span></div
  104. >
  105. <div class="fbm-data">
  106. <div class="vent-flex-row-between">
  107. <span class="data-title">操作方式:</span>
  108. <span class="data-title"
  109. ><span
  110. class="signal-round signal-round-blue vent-margin-r-8"
  111. :class="{ 'signal-round-blue': get(explosionDoorData, 'isRemote') == 1 }"
  112. ></span
  113. >远程</span
  114. >
  115. <span class="data-title"
  116. ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': get(explosionDoorData, 'isRemote') == 0 }"></span
  117. >就地</span
  118. >
  119. </div>
  120. <div class="vent-flex-row-between">
  121. <span class="data-title">是否检修:</span>
  122. <span class="data-title"
  123. ><span
  124. class="signal-round signal-round-blue vent-margin-r-8"
  125. :class="{ 'signal-round-blue': get(explosionDoorData, 'isrun') == 1 }"
  126. ></span
  127. >正常</span
  128. >
  129. <span class="data-title"
  130. ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': get(explosionDoorData, 'isrun') == 0 }"></span
  131. >检修</span
  132. >
  133. </div>
  134. </div>
  135. </div>
  136. </div>
  137. </div>
  138. <div v-if="hasPermission('mainFan:ffsjMonitor')">
  139. <div class="elementContent elementContent-r fbm-box">
  140. <div class="fbm-video">
  141. <div class="vent-flex-row-between vent-margin-t-20">
  142. <span class="data-title">风门开启状态:</span>
  143. <template v-if="explosionDoorData['gate_1_kai'] == 1">
  144. <span class="data-title"
  145. ><span
  146. class="signal-round vent-margin-r-8"
  147. :class="{ 'signal-round-blue': explosionDoorData['gate_1_kai'] == 1, 'signal-round-gry': explosionDoorData['gate_1_kai'] == 0 }"
  148. ></span
  149. >门1开启</span
  150. >
  151. </template>
  152. <template v-else-if="explosionDoorData['gate_2_kai'] == 1">
  153. <span class="data-title"
  154. ><span
  155. class="signal-round vent-margin-r-8"
  156. :class="{ 'signal-round-blue': explosionDoorData['gate_1_kai'] == 1, 'signal-round-gry': explosionDoorData['gate_1_kai'] == 0 }"
  157. ></span
  158. >门2开启</span
  159. >
  160. </template>
  161. <template v-else>
  162. <div class="vent-margin-l-10"
  163. ><span class="signal-round signal-round-warning vent-margin-r-8"></span>防爆门正在运行 或 数据异常</div
  164. >
  165. </template>
  166. </div>
  167. <div class="vent-flex-row-between vent-margin-t-10">
  168. <span class="data-title">反风锁紧状态:</span>
  169. <div>
  170. <span class="data-title"
  171. ><span
  172. class="signal-round vent-margin-r-8"
  173. :class="{ 'signal-round-blue': explosionDoorData['suo1_kai'] == 1, 'signal-round-gry': explosionDoorData['suo1_kai'] == 0 }"
  174. ></span
  175. >锁1开</span
  176. >
  177. <span class="data-title"
  178. ><span
  179. class="signal-round vent-margin-r-8"
  180. :class="{ 'signal-round-blue': explosionDoorData['suo1_guan'] == 1, 'signal-round-gry': explosionDoorData['suo1_guan'] == 0 }"
  181. ></span
  182. >锁1关</span
  183. >
  184. </div>
  185. <div>
  186. <span class="data-title"
  187. ><span
  188. class="signal-round vent-margin-r-8"
  189. :class="{ 'signal-round-blue': explosionDoorData['suo2_kai'] == 1, 'signal-round-gry': explosionDoorData['suo2_kai'] == 0 }"
  190. ></span
  191. >锁1开</span
  192. >
  193. <span class="data-title"
  194. ><span
  195. class="signal-round vent-margin-r-8"
  196. :class="{ 'signal-round-blue': explosionDoorData['suo2_guan'] == 1, 'signal-round-gry': explosionDoorData['suo2_guan'] == 0 }"
  197. ></span
  198. >锁2关</span
  199. >
  200. </div>
  201. <div>
  202. <span class="data-title"
  203. ><span
  204. class="signal-round vent-margin-r-8"
  205. :class="{ 'signal-round-blue': explosionDoorData['suo3_kai'] == 1, 'signal-round-gry': explosionDoorData['suo3_kai'] == 0 }"
  206. ></span
  207. >锁3开</span
  208. >
  209. <span class="data-title"
  210. ><span
  211. class="signal-round vent-margin-r-8"
  212. :class="{ 'signal-round-blue': explosionDoorData['suo3_guan'] == 1, 'signal-round-gry': explosionDoorData['suo3_guan'] == 0 }"
  213. ></span
  214. >锁3关</span
  215. >
  216. </div>
  217. <div>
  218. <span class="data-title"
  219. ><span
  220. class="signal-round vent-margin-r-8"
  221. :class="{ 'signal-round-blue': explosionDoorData['suo4_kai'] == 1, 'signal-round-gry': explosionDoorData['suo4_kai'] == 0 }"
  222. ></span
  223. >锁4开</span
  224. >
  225. <span class="data-title"
  226. ><span
  227. class="signal-round vent-margin-r-8"
  228. :class="{ 'signal-round-blue': explosionDoorData['suo4_guan'] == 1, 'signal-round-gry': explosionDoorData['suo4_guan'] == 0 }"
  229. ></span
  230. >锁4关</span
  231. >
  232. </div>
  233. </div>
  234. </div>
  235. <div class="fbm-data">
  236. <div class="vent-flex-row-between">
  237. <span class="data-title">操作方式:</span>
  238. <span class="data-title"
  239. ><span
  240. class="signal-round signal-round-blue vent-margin-r-8"
  241. :class="{ 'signal-round-blue': explosionDoorData['jd_yc'] == 1 }"
  242. ></span
  243. >远程</span
  244. >
  245. <span class="data-title"
  246. ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': explosionDoorData['jd_yc'] == 0 }"></span>就地</span
  247. >
  248. </div>
  249. <div class="vent-flex-row-between">
  250. <span class="data-title">是否检修:</span>
  251. <span class="data-title"
  252. ><span
  253. class="signal-round signal-round-blue vent-margin-r-8"
  254. :class="{ 'signal-round-blue': explosionDoorData['zc_jx'] == 1 }"
  255. ></span
  256. >正常</span
  257. >
  258. <span class="data-title"
  259. ><span class="signal-round vent-margin-r-8" :class="{ 'signal-round-blue': explosionDoorData['zc_jx'] == 0 }"></span>检修</span
  260. >
  261. </div>
  262. </div>
  263. </div>
  264. </div>
  265. </div>
  266. </div>
  267. <div id="main3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
  268. <FanEchrats id="fan-echarts" :chartData="selectData" style="position: absolute; z-index: -1" />
  269. </div>
  270. </template>
  271. <script lang="ts" setup>
  272. import { usePermission } from '/@/hooks/web/usePermission';
  273. import { get } from '@/utils/ventutil';
  274. defineProps<{
  275. loading: boolean;
  276. selectData: Record<string, any>;
  277. explosionDoorData: Record<string, any>;
  278. centerMonitorIsShow: boolean;
  279. frontMonitorIsShow: boolean;
  280. backMonitorIsShow: boolean;
  281. }>();
  282. const { hasPermission } = usePermission();
  283. </script>
  284. <style scoped lang="less">
  285. @import '/@/design/vent/modal.less';
  286. .threejs-Object-CSS {
  287. .elementTag {
  288. .elementContent {
  289. backdrop-filter: blur(2px);
  290. width: 220px;
  291. background-color: #00000099;
  292. box-shadow: 0px 0px 40px #005a838c inset;
  293. border: 2px solid #99b0c38c;
  294. padding: 15px 20px 15px 20px;
  295. font-size: 15px;
  296. .element-item {
  297. line-height: 38px;
  298. display: flex;
  299. justify-content: space-between;
  300. align-items: center;
  301. }
  302. span {
  303. color: #f2a500;
  304. }
  305. .data-title {
  306. max-width: 190px;
  307. display: inline-block;
  308. color: var(--vent-font-color);
  309. }
  310. }
  311. .elementContent-r {
  312. &::before {
  313. right: 120px;
  314. }
  315. &::after {
  316. right: 270px;
  317. border: 4px solid #00ddff;
  318. background: #a7a7a766;
  319. }
  320. }
  321. .fbm-box {
  322. width: auto;
  323. display: flex;
  324. justify-content: space-between;
  325. .fbm-video {
  326. width: 240px;
  327. margin-right: 20px;
  328. }
  329. .fbm-data {
  330. width: 200px;
  331. }
  332. }
  333. }
  334. }
  335. </style>