deviceFaultDetailModal.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <a-modal v-model:visible="visible" width="1200px" :title="title" centered destroyOnClose :footer="null"
  3. @cancel="handleCancel">
  4. <div class="basic-top">
  5. <div class="top-l">
  6. <faultEchartPie :normalNum="normalNum" :abnormalNum="abnormalNum"></faultEchartPie>
  7. </div>
  8. <div class="top-r">
  9. <div class="basic-title">异常测点信息</div>
  10. <div class="list-r">
  11. <div class="list-item" v-for="(item, index) in faultList" :key="index">
  12. <span style="margin-right: 5px;">{{ `${index + 1}.` }}</span>
  13. <span>{{ item.label }}</span>
  14. </div>
  15. </div>
  16. </div>
  17. </div>
  18. <div class="basic-bot">
  19. <div class="basic-content">
  20. <div class="basic-title">风速监测曲线</div>
  21. <div class="echart-box">
  22. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  23. :deviceId="deviceID" :deviceType="deviceType" :Type="'windSpeed'" :addData="windsValue" :legendName="'风速'"
  24. :echartColor="'#ff0000'"></faultEchartLine>
  25. </div>
  26. </div>
  27. <div class="basic-content">
  28. <div class="basic-title">风量监测曲线</div>
  29. <div class="echart-box">
  30. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  31. :deviceId="deviceID" :deviceType="deviceType" :Type="'wind'" :addData="windValue" :legendName="'风量'"
  32. :echartColor="'#2ec1dd'"></faultEchartLine>
  33. </div>
  34. </div>
  35. <div class="basic-content">
  36. <div class="basic-title">电流监测曲线</div>
  37. <div class="echart-box">
  38. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  39. :deviceId="deviceID" :deviceType="deviceType" :Type="'Dl'" :addData="dlValue" :legendName="'电流'"
  40. :echartColor="'#fbc21c'">
  41. </faultEchartLine>
  42. </div>
  43. </div>
  44. <div class="basic-content">
  45. <div class="basic-title">电压监测曲线</div>
  46. <div class="echart-box">
  47. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  48. :deviceId="deviceID" :deviceType="deviceType" :Type="'Dy'" :addData="dyValue" :legendName="'电压'"
  49. :echartColor="'#259745'">
  50. </faultEchartLine>
  51. </div>
  52. </div>
  53. <div class="basic-content">
  54. <div class="basic-title">瓦斯浓度监测曲线</div>
  55. <div class="echart-box">
  56. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  57. :deviceId="deviceID" :deviceType="deviceType" :Type="'wsnd'" :addData="wsndValue" :legendName="'瓦斯浓度'"
  58. :echartColor="'#0fcb74'">
  59. </faultEchartLine>
  60. </div>
  61. </div>
  62. <div class="basic-content">
  63. <div class="basic-title">振动监测曲线</div>
  64. <div class="echart-box">
  65. <faultEchartLine :selectData="selectData" :warningMonitorRowIndex="warningMonitorRowIndex"
  66. :deviceId="deviceID" :deviceType="deviceType" :Type="'Zd'" :addData="zdValue" :legendName="'振动'"
  67. :echartColor="'#00a9ff'">
  68. </faultEchartLine>
  69. </div>
  70. </div>
  71. </div>
  72. </a-modal>
  73. </template>
  74. <script setup lang="ts">
  75. import { computed, reactive, ref, watch } from 'vue'
  76. import faultEchartPie from './faultEchartPie.vue'
  77. import faultEchartLine from './faultEchartLine.vue'
  78. let props = defineProps({
  79. //是否显示弹窗
  80. isShowModal: {
  81. type: Boolean
  82. },
  83. //当前激活风机索引
  84. warningMonitorRowIndex: {
  85. type: Number
  86. },
  87. rightColumns: {
  88. type: Array as any
  89. },
  90. selectData: {
  91. type: Object as any
  92. },
  93. deviceID: {
  94. type: String
  95. },
  96. deviceType: {
  97. type: String
  98. }
  99. })
  100. let visible = ref(false)
  101. let title = ref('风机故障诊断分析')
  102. let faultList = ref<any[]>([])//异常信息列表
  103. let normalNum = ref(0)//正常测点数量
  104. let abnormalNum = ref(0)//
  105. let windsValue = computed(() => {
  106. return {
  107. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1WindSpeed'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2WindSpeed'] : '',
  108. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  109. }
  110. }) //实时风速
  111. let windValue = computed(() => {
  112. return {
  113. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1Wind'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2Wind'] : '',
  114. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  115. }
  116. }) //实时风量
  117. let dlValue = computed(() => {
  118. return {
  119. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1Dl'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2Dl'] : '',
  120. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  121. }
  122. }) //实时电流
  123. let dyValue = computed(() => {
  124. return {
  125. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1Dy'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2Dy'] : '',
  126. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  127. }
  128. }) //实时电压
  129. let wsndValue = computed(() => {
  130. return {
  131. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1Wsnd'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2Wsnd'] : '',
  132. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  133. }
  134. }) //实时瓦斯浓度
  135. let zdValue = computed(() => {
  136. return {
  137. y: props.warningMonitorRowIndex == 0 ? props.selectData['Fan1Zd'] : props.warningMonitorRowIndex == 1 ? props.selectData['Fan2Zd'] : '',
  138. x: props.selectData['tTime'].substring(props.selectData['tTime'].lastIndexOf(' '))
  139. }
  140. }) //实时振动
  141. let $emit = defineEmits(['handlerClose'])
  142. //弹窗关闭
  143. function handleCancel() {
  144. $emit('handlerClose', false)
  145. }
  146. watch(() => props.isShowModal, (newV, oldV) => {
  147. visible.value = newV
  148. })
  149. watch(() => props.warningMonitorRowIndex, (newV, oldV) => {
  150. // if (props.rightColumns.length) {
  151. // let dataList: any[] = []
  152. // props.rightColumns.forEach((el) => {
  153. // if (el.dataIndex.startsWith('Fan')) {
  154. // if (newV == 0 && props.selectData[el.dataIndex.replace('Fan', 'Fan1')] != undefined) {
  155. // dataList.push({ label: el.title })
  156. // } else if (newV == 1 && props.selectData[el.dataIndex.replace('Fan', 'Fan2')] != undefined && props.selectData[el.dataIndex.replace('Fan', 'Fan2')] != '0') {
  157. // dataList.push({ label: el.title })
  158. // } else if (newV == 2 && props.selectData[el.dataIndex.replace('Fan', 'Fan3')] != undefined && props.selectData[el.dataIndex.replace('Fan', 'Fan3')] != '0') {
  159. // dataList.push({ label: el.title })
  160. // }
  161. // } else {
  162. // if (props.selectData[el.dataIndex] != undefined && props.selectData[el.dataIndex] != '0') {
  163. // dataList.push({ label: el.title })
  164. // }
  165. // }
  166. // })
  167. // faultList.value = dataList
  168. // abnormalNum.value = dataList.length
  169. // normalNum.value = props.rightColumns.length - dataList.length
  170. // console.log(dataList, 'dataList===')
  171. // }
  172. if (newV == 0) {
  173. faultList.value = [
  174. { label: '2025年7月12日,风速超限' },
  175. { label: '2025年7月21日,风量波动' },
  176. { label: '2025年8月4日,轴温偏高' },
  177. { label: '2025年8月17日,径向振动过大' },
  178. { label: '2025年8月23日,油温高' },
  179. { label: '2025年8月26日,电机故障' },
  180. ]
  181. } else if (newV == 1) {
  182. faultList.value = [
  183. { label: '2025年8月2日,风速超限' },
  184. { label: '2025年8月11日,振动过高' },
  185. { label: '2025年8月24日,轴温偏高' },
  186. { label: '2025年9月17日,径向振动过大' },
  187. { label: '2025年9月23日,油温高' },
  188. { label: '2025年9月26日,蝶阀故障' },
  189. ]
  190. } else {
  191. faultList.value = [
  192. { label: '2025年8月2日,风门故障' },
  193. { label: '2025年8月11日,风量波动' },
  194. { label: '2025年8月24日,轴温偏高' },
  195. { label: '2025年9月17日,径向振动过大' },
  196. { label: '2025年9月23日,变频故障反馈' },
  197. { label: '2025年9月26日,电机故障' },
  198. ]
  199. }
  200. abnormalNum.value = faultList.value.length
  201. normalNum.value = Math.ceil(Math.random() * 10)
  202. }, { immediate: true })
  203. </script>
  204. <style lang="less" scoped>
  205. .basic-top {
  206. width: calc(100% - 30px);
  207. height: 220px;
  208. margin: 10px;
  209. display: flex;
  210. .top-l {
  211. width: 320px;
  212. margin-right: 10px;
  213. }
  214. .top-r {
  215. width: calc(100% - 330px);
  216. }
  217. .list-r {
  218. height: calc(100% - 25px);
  219. padding: 0px 10px;
  220. box-sizing: border-box;
  221. overflow-y: auto;
  222. border: 1px solid #3062a2;
  223. }
  224. .list-item {
  225. margin: 5px 0px;
  226. }
  227. }
  228. .basic-title {
  229. height: 20px;
  230. line-height: 20px;
  231. font-weight: bold;
  232. margin-bottom: 5px;
  233. }
  234. .basic-bot {
  235. width: calc(100% - 30px);
  236. height: 600px;
  237. margin: 10px;
  238. display: flex;
  239. justify-content: space-between;
  240. flex-wrap: wrap;
  241. overflow-y: auto;
  242. .basic-content {
  243. width: calc(50% - 5px);
  244. height: 240px;
  245. margin-bottom: 10px;
  246. padding: 5px 10px;
  247. box-sizing: border-box;
  248. border: 1px solid #3062a2;
  249. }
  250. .echart-box {
  251. height: calc(100% - 25px);
  252. }
  253. }
  254. </style>