wind-device.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <div class="windDevice">
  3. <div class="title-top" @click="getDetail">通风设施远程控制</div>
  4. <div class="device-contents">
  5. <div class="icons-box" @mouseleave="resetScroll">
  6. <div class="icon-item" v-for="(item, key) in iconsMonitor" :key="key">
  7. <div class="wrapper">
  8. {{ item.text }}
  9. </div>
  10. <div></div>
  11. <img :src="item.url" :alt="item.text" />
  12. <div
  13. class="level-text"
  14. :class="{
  15. 'level-text-1': item.level == 1,
  16. 'level-text-2': item.level == 2,
  17. 'level-text-3': item.level == 3,
  18. 'level-text-4': item.level == 4,
  19. 'level-text-5': item.level == 5,
  20. }"
  21. >{{
  22. item.level == 1
  23. ? '正常'
  24. : item.level == 2
  25. ? '低风险'
  26. : item.level == 3
  27. ? '中风险'
  28. : item.level == 4
  29. ? '高风险'
  30. : item.level == 5
  31. ? '报警'
  32. : ''
  33. }}</div
  34. >
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. <script lang="ts" setup>
  41. import { ref, reactive,defineProps, watch } from 'vue';
  42. import { getAssetURL } from '/@/utils/ui';
  43. let props = defineProps({
  44. devicedata: Object,
  45. });
  46. const emit = defineEmits(['goDetail'])
  47. let iconsMonitor = reactive({
  48. 1: {
  49. url: getAssetURL('home-container/device/zhushan.png'),
  50. level: 1,
  51. text: '主风机',
  52. },
  53. 2: {
  54. url: getAssetURL('home-container/device/js.png'),
  55. level: 2,
  56. text: '局部风机',
  57. },
  58. 3: {
  59. url: getAssetURL('home-container/device/fm.png'),
  60. level: 1,
  61. text: '风门',
  62. },
  63. 4: {
  64. url: getAssetURL('home-container/device/fc.png'),
  65. level: 1,
  66. text: '风窗',
  67. },
  68. 5: {
  69. url: getAssetURL('home-container/device/cf.png'),
  70. level: 2,
  71. text: '测风装置',
  72. },
  73. 6: {
  74. url: getAssetURL('home-container/device/yafeng.png'),
  75. level: 1,
  76. text: '压风装置',
  77. },
  78. 7: {
  79. url: getAssetURL('home-container/device/penlin.png'),
  80. level: 2,
  81. text: '喷淋',
  82. },
  83. 8: {
  84. url: getAssetURL('home-container/device/penfen.png'),
  85. level: 1,
  86. text: '喷粉',
  87. },
  88. 9: {
  89. url: getAssetURL('home-container/device/zhudan.png'),
  90. level: 1,
  91. text: '注氮',
  92. },
  93. 10: {
  94. url: getAssetURL('home-container/device/zhujiang.png'),
  95. level: 1,
  96. text: '注浆',
  97. },
  98. 11: {
  99. url: getAssetURL('home-container/device/pw.png'),
  100. level: 3,
  101. text: '跟机喷雾',
  102. },
  103. 12: {
  104. url: getAssetURL('home-container/device/ccq.png'),
  105. level: 1,
  106. text: '除尘器',
  107. },
  108. 13: {
  109. url: getAssetURL('home-container/device/wasibeng.png'),
  110. level: 2,
  111. text: '瓦斯泵',
  112. },
  113. 14: {
  114. url: getAssetURL('home-container/device/js.png'),
  115. level: 1,
  116. text: '瓦斯抽采管路',
  117. },
  118. });
  119. const resetScroll = (e: Event) => {
  120. if (e.target && e.target) (e.target as Element).scrollTop = 0;
  121. };
  122. //跳转详情
  123. function getDetail() {
  124. console.log('跳转详情');
  125. emit('goDetail', 'gate')
  126. }
  127. watch(
  128. () => props.devicedata,
  129. (val) => {
  130. console.log(val, '设备数据');
  131. },
  132. {
  133. deep: true,
  134. }
  135. );
  136. </script>
  137. <style lang="less" scoped>
  138. @font-face {
  139. font-family: 'douyuFont';
  140. src: url('../../../../../assets/font/douyuFont.otf');
  141. }
  142. .windDevice {
  143. width: 100%;
  144. height: 100%;
  145. position: relative;
  146. .title-top {
  147. position: absolute;
  148. top: 9px;
  149. left: 46px;
  150. color: #fff;
  151. font-size: 16px;
  152. font-family: 'douyuFont';
  153. cursor: pointer;
  154. &:hover {
  155. color: #66ffff;
  156. }
  157. }
  158. .device-contents {
  159. position: absolute;
  160. top: 30px;
  161. left: 0;
  162. height: calc(100% - 30px);
  163. padding: 10px;
  164. box-sizing: border-box;
  165. width: 100%;
  166. .icons-box {
  167. display: flex;
  168. flex-wrap: wrap;
  169. justify-content: space-around;
  170. height: 100%;
  171. overflow-y: hidden;
  172. // align-items: start ;
  173. &:hover {
  174. overflow-y: auto;
  175. & > .icon-item {
  176. animation-play-state: paused;
  177. animation: move1 2s linear;
  178. }
  179. }
  180. .icon-item {
  181. position: relative;
  182. display: flex;
  183. align-items: center;
  184. justify-content: center;
  185. padding: 3px;
  186. animation: move 10s linear infinite;
  187. .level-text {
  188. position: absolute;
  189. top: 42px;
  190. right: 25px;
  191. color: #fff;
  192. font-family: 'douyuFont';
  193. font-size: 12px;
  194. }
  195. .level-text-1 {
  196. color: rgb(0, 242, 255);
  197. text-shadow: 2px 2px 4px #001c22;
  198. }
  199. .level-text-2 {
  200. color: #ffff35;
  201. text-shadow: 2px 2px 4px #313100;
  202. }
  203. .level-text-3 {
  204. color: #ffbe69;
  205. text-shadow: 2px 2px 4px #271600;
  206. }
  207. .level-text-4 {
  208. color: #ff6f00;
  209. // color: #09caff;
  210. text-shadow: 2px 2px 4px #060200;
  211. }
  212. .level-text-5 {
  213. color: #ff0000;
  214. text-shadow: 2px 2px 4px #200000;
  215. }
  216. img {
  217. width: 210px;
  218. height: 69px;
  219. }
  220. }
  221. @keyframes move {
  222. 0% {
  223. transform: translateY(0px);
  224. }
  225. 100% {
  226. transform: translateY(-269px);
  227. }
  228. }
  229. @keyframes move1 {
  230. 0% {
  231. transform: translateY(0px);
  232. }
  233. }
  234. .wrapper {
  235. position: absolute;
  236. top: 40px;
  237. left: 82px;
  238. color: #ffffffe0;
  239. font-size: 13px;
  240. text-align: center;
  241. letter-spacing: 1px;
  242. }
  243. }
  244. }
  245. }
  246. :deep .zxm-select-selector {
  247. width: 100%;
  248. height: 30px !important;
  249. padding: 0 11px 0px 25px !important;
  250. background-color: rgba(8, 148, 255, 0.3) !important;
  251. border: 1px solid #1d80da !important;
  252. }
  253. :deep .zxm-select-selection-item {
  254. color: #fff !important;
  255. line-height: 28px !important;
  256. }
  257. :deep .zxm-select-arrow {
  258. color: #fff !important;
  259. }
  260. </style>