loopMonitor.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <template>
  2. <div>
  3. <!-- 筛选start -->
  4. <div class="filter-container">
  5. <div class="left">
  6. <div>
  7. <div class="filter-item">
  8. 选择站点:
  9. <el-select
  10. v-model="store.state.siteId"
  11. placeholder="请选择"
  12. style="width: 220px"
  13. clearable
  14. filterable
  15. @change="linkDevice()"
  16. >
  17. <el-option
  18. v-for="site in store.state.siteList"
  19. :key="site"
  20. :label="site.siteName"
  21. :value="site.id"
  22. ></el-option>
  23. </el-select>
  24. </div>
  25. <div class="filter-item" style="margin-right: 20px">
  26. 选择设备:
  27. <el-select
  28. v-model="deviceCode"
  29. placeholder="请选择"
  30. style="width: 150px"
  31. >
  32. <el-option
  33. v-for="device in deviceList"
  34. :key="device"
  35. :label="device.deviceName"
  36. :value="device.deviceCode"
  37. ></el-option>
  38. </el-select>
  39. </div>
  40. <el-button
  41. type="primary"
  42. class="search-button"
  43. @click="realScoreOne()"
  44. >
  45. 搜索
  46. </el-button>
  47. </div>
  48. </div>
  49. <div class="right descIcon" @click="descripDialog()">
  50. <img src="@/assets/images/descIcon.png" alt="" />
  51. 指标说明
  52. </div>
  53. </div>
  54. <!-- 筛选end -->
  55. <el-row :gutter="20" class="mt-20">
  56. <!-- 三项不平衡度 -->
  57. <el-col :md="24" :lg="8">
  58. <div class="grid-content bg-purple loopUnbanlancePanel">
  59. <div class="blanceChartTit">
  60. <span>三项不平衡度</span>
  61. </div>
  62. <el-row
  63. :gutter="20"
  64. style="padding: 20px; border-bottom: 1px solid #d3dce6"
  65. >
  66. <el-col :span="12" class="loopUnbanlanceCard">
  67. <div class="grid-content" style="text-align: center">
  68. <loop-radarChart :getData="getData"></loop-radarChart>
  69. </div>
  70. </el-col>
  71. <el-col :span="12" class="loopUnbanlanceCard">
  72. <div
  73. style="
  74. width: 90%;
  75. background: #1187ff;
  76. margin: 0px auto;
  77. text-align: center;
  78. color: #fff;
  79. padding: 10px 0px;
  80. "
  81. >
  82. <div class="mb-10">电压不平衡度</div>
  83. <div>{{getData.vtBalun?getData.vtBalun*100:0}}%</div>
  84. </div>
  85. <ul>
  86. <li>
  87. <div>A相电压</div>
  88. <div>
  89. <div class="mb-5">幅值:{{getData.ua?getData.ua+' V':0}}</div>
  90. <div>相角:-</div>
  91. </div>
  92. </li>
  93. <li>
  94. <div>B相电压</div>
  95. <div>
  96. <div class="mb-5">幅值:{{getData.ub?getData.ub+' V':0}}</div>
  97. <div>相角:-</div>
  98. </div>
  99. </li>
  100. <li>
  101. <div>C相电压</div>
  102. <div>
  103. <div class="mb-5">幅值:{{getData.uc?getData.uc+' V':0}}</div>
  104. <div>相角:-</div>
  105. </div>
  106. </li>
  107. </ul>
  108. </el-col>
  109. </el-row>
  110. <el-row
  111. :gutter="20"
  112. style="padding: 20px; border-bottom: 1px solid #d3dce6"
  113. >
  114. <el-col :span="12" class="loopUnbanlanceCard">
  115. <div class="grid-content" style="text-align: center">
  116. <loop-radarChart2 :getData="getData"></loop-radarChart2>
  117. </div>
  118. </el-col>
  119. <el-col :span="12" class="loopUnbanlanceCard">
  120. <div
  121. style="
  122. width: 90%;
  123. background: #1187ff;
  124. margin: 0px auto;
  125. text-align: center;
  126. color: #fff;
  127. padding: 10px 0px;
  128. "
  129. >
  130. <div class="mb-10">电流不平衡度</div>
  131. <div>{{getData.elBalun?getData.elBalun*100:0}}%</div>
  132. </div>
  133. <ul>
  134. <li>
  135. <div>A相电流</div>
  136. <div>
  137. <div class="mb-5">幅值:{{getData.ua?getData.ia+' A':0}}</div>
  138. <div>相角:-</div>
  139. </div>
  140. </li>
  141. <li>
  142. <div>B相电流</div>
  143. <div>
  144. <div class="mb-5">幅值:{{getData.ua?getData.ib+' A':0}}</div>
  145. <div>相角:-</div>
  146. </div>
  147. </li>
  148. <li>
  149. <div>C相电流</div>
  150. <div>
  151. <div class="mb-5">幅值:{{getData.ua?getData.ic+' A':0}}</div>
  152. <div>相角:-</div>
  153. </div>
  154. </li>
  155. </ul>
  156. </el-col>
  157. </el-row>
  158. </div>
  159. </el-col>
  160. <!-- 三项不平衡度 end -->
  161. <!-- 谐波 -->
  162. <el-col :md="24" :lg="16">
  163. <harmonic-panel></harmonic-panel>
  164. </el-col>
  165. <!-- 谐波 end -->
  166. </el-row>
  167. <el-row :gutter="20" class="mt-20">
  168. <!-- 电压start -->
  169. <el-col :md="24" :lg="8" class="mb-20">
  170. <voltage-panel :getData="getData"></voltage-panel>
  171. </el-col>
  172. <!-- 电压end -->
  173. <!-- 频率 start-->
  174. <el-col :md="24" :lg="8" class="mb-20">
  175. <frequency-panel :getData="getData"></frequency-panel>
  176. </el-col>
  177. <!-- 频率 end -->
  178. <!-- 有功功率 -->
  179. <el-col :md="24" :lg="8">
  180. <power-panel :getData="getData"></power-panel>
  181. </el-col>
  182. <!-- 有功功率 end -->
  183. </el-row>
  184. <!--指标说明弹框组件开始-----------------------start-->
  185. <descrip-dialog
  186. :dialogTitle="dialogTitle"
  187. @closeDialog="closeDialog"
  188. :flag="showDialog"
  189. :siteId="siteId"
  190. class="descripDialog"
  191. ></descrip-dialog>
  192. <!--指标说明弹框组件结束-----------------------end-->
  193. </div>
  194. </template>
  195. <script>
  196. import { useStore } from 'vuex'
  197. import { defineComponent, onMounted, ref } from 'vue'
  198. import loopRadarChart from './loopMonitorComponent/loopRadarChart'
  199. import loopRadarChart2 from './loopMonitorComponent/loopRadarChart2'
  200. import harmonicPanel from './loopMonitorComponent/harmonicPanel'
  201. import voltagePanel from './loopMonitorComponent/voltagePanel'
  202. import frequencyPanel from './loopMonitorComponent/frequencyPanel'
  203. import powerPanel from './loopMonitorComponent/powerPanel'
  204. import descripDialog from './loopMonitorComponent/descripDialog'
  205. import * as api from '@/api/powerQuality/loopMonitor.js'
  206. import { ElMessage } from 'element-plus'
  207. export default defineComponent({
  208. name: 'LoopMonitor',
  209. components: {
  210. loopRadarChart,
  211. loopRadarChart2,
  212. harmonicPanel,
  213. voltagePanel,
  214. frequencyPanel,
  215. powerPanel,
  216. descripDialog
  217. },
  218. setup() {
  219. const store = useStore()
  220. const getData = ref({})
  221. const deviceList = ref([])
  222. const deviceCode = ref('')
  223. const showDialog = ref(false)
  224. const dialogTitle = ref('')
  225. const siteId=ref(0)
  226. function linkDevice() {
  227. deviceSelect()
  228. }
  229. //设备下拉请求
  230. function deviceSelect() {
  231. api.deviceListOne({ siteId: store.state.siteId }).then((requset) => {
  232. if (requset.status === 'SUCCESS') {
  233. deviceList.value = requset.data
  234. deviceCode.value = requset.data[0] ? requset.data[0].deviceCode : ''
  235. } else {
  236. ElMessage.error(requset.msg)
  237. }
  238. })
  239. }
  240. //数据请求
  241. function realScoreOne() {
  242. api.realScoreOne({ deviceCode: deviceCode.value }).then((requset) => {
  243. if (requset.status === 'SUCCESS') {
  244. getData.value = requset.data
  245. } else {
  246. ElMessage.error(requset.msg)
  247. }
  248. })
  249. // nowTime.value = parseTime(new Date())
  250. }
  251. // 查看指标说明
  252. const descripDialog = () => {
  253. siteId.value=store.state.siteId
  254. dialogTitle.value = '指标说明'
  255. showDialog.value = true
  256. }
  257. // 关闭操作
  258. const closeDialog = () => {
  259. showDialog.value = false
  260. }
  261. onMounted(() => {
  262. deviceSelect()
  263. setTimeout(function(){
  264. realScoreOne()
  265. },1000)
  266. })
  267. return {
  268. store,
  269. getData,
  270. deviceList,
  271. deviceCode,
  272. linkDevice,
  273. deviceSelect,
  274. realScoreOne,
  275. descripDialog,
  276. showDialog,
  277. dialogTitle,
  278. closeDialog,
  279. siteId
  280. }
  281. },
  282. })
  283. </script>
  284. <style lang="scss" scoped>
  285. .el-row {
  286. margin-bottom: 20px;
  287. &:last-child {
  288. margin-bottom: 0;
  289. }
  290. }
  291. .el-col {
  292. border-radius: 4px;
  293. }
  294. .bg-purple-dark {
  295. border: 1px solid #99a9bf;
  296. }
  297. .bg-purple {
  298. border: 1px solid #d3dce6;
  299. }
  300. .bg-purple-light {
  301. border: 1px solid #e5e9f2;
  302. }
  303. .grid-content {
  304. border-radius: 4px;
  305. min-height: 36px;
  306. }
  307. .row-bg {
  308. padding: 10px 0;
  309. border: 1px solid #f9fafc;
  310. }
  311. </style>