Przeglądaj źródła

评分报告对接

ming 3 lat temu
rodzic
commit
2e601db789

+ 30 - 0
src/api/powerQuality/scoreReport.js

@@ -0,0 +1,30 @@
+import request from '@/utils/request'
+
+
+
+//通信设备列表查询-无分页
+// export function deviceListOne(params) {
+//     return request({
+//         url: '/device/deviceListOne',
+//         method: 'GET',
+//         params,
+//     })
+// }
+
+// 评估报告主页面 
+export function evaluationReport(params) {
+    return request({
+        url: 'rtAnalogData/evaluationReport',
+        method: 'GET',
+        params,
+    })
+}
+
+// 实时评分弹框详情  (历史消费组模拟量----历史电流电压评分)
+export function rtRealScore(params) {
+    return request({
+        url: '/htAnalogData/rtRealScore',
+        method: 'GET',
+        params,
+    })
+}

+ 6 - 5
src/vab/plugins/permissions.js

@@ -13,8 +13,8 @@ import {
 } from '@/config'
 
 router.beforeEach(async(to, from, next) => {
-    console.log('to.matched')
-    console.log(to.matched)
+    // console.log('to.matched')
+    // console.log(to.matched)
     let hasToken = store.getters['user/accessToken']
 
     if (!loginInterception) hasToken = true
@@ -23,14 +23,15 @@ router.beforeEach(async(to, from, next) => {
         if (to.path === '/login') {
             next({ path: '/' })
         } else {
-            if (to.matched.length === 0) {
-                next('/404') // 判断此跳转路由的来源路由是否存在,存在的情况跳转到来源路由,否则跳转到404页面
-            }
+
             const hasRoles =
                 store.getters['acl/admin'] ||
                 store.getters['acl/role'].length > 0 ||
                 store.getters['acl/ability'].length > 0
             if (hasRoles) {
+                if (to.matched.length === 0) {
+                    next('/404') // 判断此跳转路由的来源路由是否存在,存在的情况跳转到来源路由,否则跳转到404页面
+                }
                 next()
             } else {
                 try {

+ 0 - 1
src/views/powerQuality/asseReport/loopReport.vue

@@ -49,7 +49,6 @@
 
             <el-date-picker
             v-model="dateTime"
-            :type="dateType"
             placeholder="请选择"
             style="width: 150px;margin-left:20px"
             :clearable="false"

+ 442 - 56
src/views/powerQuality/asseReport/scoreReport.vue

@@ -22,22 +22,6 @@
             </el-select>
           </div>
 
-          <!-- <el-button
-            class="search-button timeTab"
-            @click="num = 0"
-            :type="num == 0 ? 'primary' : ''"
-          >
-            按日
-          </el-button>
-          <el-button
-            class="search-button timeTab"
-            @click="num = 1"
-            :type="num == 1 ? 'primary' : ''"
-            style="margin-left: 0 !important; margin-right: 20px"
-          >
-            按月
-          </el-button> -->
-
           <el-radio-group
             v-model="listTabPosition"
             @change="listTabsChange(listTabPosition)"
@@ -51,14 +35,24 @@
             v-model="dateTime"
             :type="dateType"
             placeholder="请选择"
-            style="width: 150px;margin-left:20px"
+            style="width: 150px; margin-left: 20px"
             :clearable="false"
             :editable="false"
           ></el-date-picker>
 
-          <el-button type="primary" class="search-button">搜索</el-button>
+          <el-button
+            type="primary"
+            class="search-button"
+            @click="evaluationReport()"
+          >
+            搜索
+          </el-button>
         </div>
       </div>
+      <div class="right descIcon" @click="descripDialog()">
+        <img src="@/assets/images/descIcon.png" alt="" />
+        指标说明
+      </div>
     </div>
     <!-- 筛选end -->
 
@@ -69,10 +63,26 @@
             <span>评分</span>
           </div>
 
-          <radar-chart></radar-chart>
+          <radar-chart :getTableData="getData[0]" v-if="getData[0]"></radar-chart>
           <div class="totalScore">
-            总评分:40
-            <el-button type="danger">不合格</el-button>
+            总评分:{{ getData[0].score?getData[0].score:0 }}
+            <el-button
+              :type="
+                getData[0].score > 80
+                  ? 'success'
+                  : getData[0].score >= 60
+                  ? 'warning'
+                  : 'danger'
+              "
+            >
+              {{
+                getData[0].score > 80
+                  ? '优秀'
+                  : getData[0].score >= 60
+                  ? '合格'
+                  : '不合格'
+              }}
+            </el-button>
           </div>
         </div>
         <br />
@@ -81,25 +91,37 @@
             <span>回路统计</span>
           </div>
           <div>
-            <pie-chart></pie-chart>
+            <pie-chart :getTableData="getData[0]"></pie-chart>
           </div>
         </div>
       </el-col>
       <el-col :md="24" :lg="17">
         <!-- 表格start -->
         <el-table
-          :data="tableData"
+          :data="getData"
           style="width: 100%"
           :header-cell-style="headCellStyle"
         >
-          <el-table-column prop="huilv" label="回路" width=""></el-table-column>
-          <el-table-column
-            prop="gongLv"
-            label="功率因数"
-            width=""
-          ></el-table-column>
+          <el-table-column label="回路" width="" align="center">
+            <template #default="scope">
+              {{ scope.row.loop ? scope.row.loop : '-' }}
+            </template>
+          </el-table-column>
+          <el-table-column label="功率因数" width="" align="center">
+            <template #default="scope">
+              <div @click="oneClick('cos')">
+                <el-button
+                  size="mini"
+                  round
+                  :type="scope.row.cosQ ? 'success' : 'danger'"
+                >
+                  {{ scope.row.cosQ ? '合格' : '不合格' }}
+                </el-button>
+              </div>
+            </template>
+          </el-table-column>
 
-          <el-table-column label="不平衡度">
+          <!-- <el-table-column label="不平衡度">
             <el-table-column label="电流" width="">
               <template #default="scope">
                 <el-button size="mini" round type="danger">
@@ -114,63 +136,159 @@
                 </el-button>
               </template>
             </el-table-column>
-          </el-table-column>
+          </el-table-column> -->
 
-          <el-table-column label="电压">
-            <el-table-column prop="name" label="A相" width="">
-              <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.name }}</el-button>
-              </template>
-            </el-table-column>
-            <el-table-column prop="city" label="B相">
+          <el-table-column label="不平衡度">
+            <el-table-column label="电流" width="" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('elBalun')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.elBalunQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.elBalunQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
-            <el-table-column prop="city" label="C相">
+            <el-table-column label="电压" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('vtBalun')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.vtBalunQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.vtBalunQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
           </el-table-column>
-          <el-table-column label="电流负载率">
-            <el-table-column prop="name" label="A相" width="">
+
+          <el-table-column label="电压">
+            <el-table-column prop="name" label="A相" width="" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.name }}</el-button>
+                <div @click="oneClick('ua')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.uaQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.uaQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
-            <el-table-column prop="city" label="B相">
+            <el-table-column prop="city" label="B相" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('ub')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.ubQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.ubQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
-            <el-table-column prop="city" label="C相">
+            <el-table-column prop="city" label="C相" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('uc')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.ucQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.ucQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
           </el-table-column>
-          <el-table-column label="电流谐波畸变率">
-            <el-table-column prop="name" label="A相" width="">
+          <el-table-column label="电流负载率">
+            <el-table-column prop="name" label="A相" width="" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.name }}</el-button>
+                <div @click="oneClick('iaLoad')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.iaLoadQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.iaLoadQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
-            <el-table-column prop="city" label="B相">
+            <el-table-column prop="city" label="B相" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('ibLoad')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.ibLoadQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.ibLoadQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
-            <el-table-column prop="city" label="C相">
+            <el-table-column prop="city" label="C相" align="center">
               <template #default="scope">
-                <el-button size="mini" round>{{ scope.row.city }}</el-button>
+                <div @click="oneClick('icLoad')">
+                  <el-button
+                    size="mini"
+                    round
+                    :type="scope.row.icLoadQ ? 'success' : 'danger'"
+                  >
+                    {{ scope.row.icLoadQ ? '合格' : '不合格' }}
+                  </el-button>
+                </div>
               </template>
             </el-table-column>
           </el-table-column>
+          <el-table-column label="评分" width="" align="center">
+            <template #default="scope">
+              <el-button
+                size="mini"
+                :type="
+                  scope.row.score > 80
+                    ? 'success'
+                    : getData[0].score >= 60
+                    ? 'warning'
+                    : 'danger'
+                "
+                style="cursor: defalut"
+              >
+                {{ scope.row.score }}
+              </el-button>
+            </template>
+          </el-table-column>
         </el-table>
         <!-- 表格end -->
       </el-col>
     </el-row>
+
+    <!--弹框组件开始-----------------------start-->
+    <dialog-chartOne
+      :dialogTitle="dialogTitle"
+      @closeDialog="closeDialog"
+      :flag="showDialog"
+      :echartsAllData="echartsAllData"
+   
+    ></dialog-chartOne>
+    <!--弹框组件结束-----------------------end-->
+
+    <!--指标说明弹框组件开始-----------------------start-->
+    <descrip-dialog
+      :dialogTitle="dialogTitle"
+      @closeDialog="closeDialog"
+      :flag="showDialog2"
+      class="descripDialog"
+    ></descrip-dialog>
+    <!--指标说明弹框组件结束-----------------------end-->
   </div>
 </template>
 
@@ -179,18 +297,40 @@ import { useStore } from 'vuex'
 import { defineComponent, onMounted, ref } from 'vue'
 import radarChart from './scoreReportComponent/radarChart.vue'
 import pieChart from './scoreReportComponent/pieChart.vue'
+import dialogChartOne from './scoreReportComponent/dialogChartOne'
+import descripDialog from './scoreReportComponent/descripDialog'
+import * as api from '@/api/powerQuality/scoreReport.js'
+import { ElMessage } from 'element-plus'
+import { parseTime } from '@/utils'
 
 export default defineComponent({
   name: 'ScoreReport',
   components: {
     radarChart,
     pieChart,
+    dialogChartOne,
+    descripDialog,
   },
   setup() {
     const store = useStore()
     const listTabPosition = ref('dayValue')
     const dateType = ref('date')
     const dateTime = ref(new Date())
+    const getData = ref([
+      {
+        loop: '',
+        cos: '0%',
+        elBalun: '100%',
+        vtBalun: '0%',
+        name: '0%',
+        city: '0%',
+        score: '0',
+      },
+    ])
+    const dialogTitle = ref('')
+    const showDialog = ref(false)
+    const showDialog2 = ref(false)
+    const echartsAllData = ref([])
 
     function headCellStyle({ row, column, rowIndex, columnIndex }) {
       row, column
@@ -205,8 +345,244 @@ export default defineComponent({
         ? (dateType.value = 'date')
         : (dateType.value = 'month')
     }
+    //主页面数据请求
+    function evaluationReport() {
+      let list = {}
+
+      if (listTabPosition.value == 'dayValue') {
+        store.commit('getNowFormatDate', dateTime.value)
+        console.log(store.state.dateList)
+        list = {
+          // siteId: 6,
+          // time: '2021-11-01 00:00:00',
+          type: dateType.value == 'date' ? 1 : 2,
+          siteId: store.state.siteId,
+          time: store.state.dateList,
+        }
+      } else {
+        store.commit('getCurrentMonthLast', dateTime.value)
+        list = {
+          // siteId: 6,
+          // time: '2021-11-01 00:00:00',
+          type: dateType.value == 'date' ? 1 : 2,
+          siteId: store.state.siteId,
+          time: store.state.monthList[0].substring(0, 7),
+        }
+      }
+
+      api.evaluationReport(list).then((requset) => {
+        if (requset.status === 'SUCCESS') {
+          if(requset.data[0]){
+            getData.value[0] = requset.data[0]
+          }else{
+              ElMessage.error('暂无数据')
+          }
+        } else {
+          ElMessage.error(requset.msg)
+        }
+      })
+    }
+
+    // 折线图详情总数据请求
+    function rtRealScore(params) {
+      parseTime
+
+      // var start = parseTime(new Date().setHours(0, 0, 0, 0))
+      // var end=nowTime.value
+
+      // var start = '2021-12-01 00:00:00'
+      // var end = '2021-12-01 09:07:31'
+
+      store.state.chartType = params
+      // alert(store.state.chartType)
+
+      let list = {}
+
+      if (listTabPosition.value == 'dayValue') {
+        store.commit('getNowFormatDate', dateTime.value)
+        list = {
+          deviceCode: 'DA00021026',
+          startTime: store.state.dateList + ' ' + '00:00:00',
+          endTime: store.state.dateList + ' ' + '23:59:59',
+        }
+      } else {
+        store.commit('getCurrentMonthLast', dateTime.value)
+        list = {
+          deviceCode:'DA00021026',
+          startTime: store.state.monthList[0] + ' ' + '00:00:00',
+          endTime: store.state.monthList[1] + ' ' + '23:59:59',
+        }
+      }
+
+      api
+        .rtRealScore(list)
+        .then((requset) => {
+          if (requset.status === 'SUCCESS') {
+            echartsAllData.value = requset.data
+
+            // 处理数据
+            var arrOld = requset.data
+            let dataTime = arrOld.map((item) => {
+              return item.dataTime
+            })
+            //功率因数
+            let cos = arrOld.map((item) => {
+              return item.cos
+            })
+
+            //电压
+            let ua = arrOld.map((item) => {
+              return item.ua
+            })
+            let ub = arrOld.map((item) => {
+              return item.ub
+            })
+            let uc = arrOld.map((item) => {
+              return item.uc
+            })
+
+            //电流
+            let ia = arrOld.map((item) => {
+              return item.ia
+            })
+            let ib = arrOld.map((item) => {
+              return item.ib
+            })
+            let ic = arrOld.map((item) => {
+              return item.ic
+            })
+
+            // 电流不平衡度
+            let elBalun = arrOld.map((item) => {
+              return item.elBalun * 100
+            })
+            // 电压不平衡度
+            let vtBalun = arrOld.map((item) => {
+              return item.vtBalun * 100
+            })
+            //电流负载率
+            let iaLoad = arrOld.map((item) => {
+              return item.iaLoad
+            })
+            let ibLoad = arrOld.map((item) => {
+              return item.ibLoad
+            })
+            let icLoad = arrOld.map((item) => {
+              return item.icLoad
+            })
+
+            var echartsObj = []
+            var echartsObj2 = []
+            var lineName
+            var lineName2
+
+            ia
+            ib
+            ic
+
+            switch (params) {
+              case 'cos':
+                echartsObj = [{ name: '功率因数 ( 实时数据 )', data: cos }]
+                lineName = ''
+                break
+              case 'ua':
+                echartsObj = [{ name: 'A相电压 ( 实时数据 )', data: ua }]
+                lineName = 'kV'
+                break
+              case 'ub':
+                echartsObj = [{ name: 'B相电压 ( 实时数据 )', data: ub }]
+                lineName = 'kV'
+                break
+              case 'uc':
+                echartsObj = [{ name: 'c相电压 ( 实时数据 )', data: uc }]
+                lineName = 'kV'
+                break
+              case 'elBalun':
+                echartsObj = [
+                  { name: '电流不平衡度 ( 实时数据 )', data: elBalun },
+                ]
+                lineName = '%'
+                echartsObj2 = [
+                  { name: 'A相电流', data: ia },
+                  { name: 'B相电流', data: ib },
+                  { name: 'C相电流', data: ic },
+                ]
+                lineName2 = 'A'
+                break
+              case 'vtBalun':
+                echartsObj = [
+                  { name: '电压不平衡度 ( 实时数据 )', data: vtBalun },
+                ]
+                lineName = '%'
+
+                echartsObj2 = [
+                  { name: 'A相电压', data: ua },
+                  { name: 'B相电压', data: ub },
+                  { name: 'C相电压', data: uc },
+                ]
+                lineName2 = 'V'
+                break
+              case 'iaLoad':
+                echartsObj = [
+                  { name: 'A相电流负载率 ( 实时数据 )', data: iaLoad },
+                ]
+                lineName = '%'
+                echartsObj2 = [{ name: 'A相电流', data: ia }]
+                lineName2 = 'A'
+                break
+              case 'ibLoad':
+                echartsObj = [
+                  { name: 'B相电流负载率 ( 实时数据 )', data: ibLoad },
+                ]
+                lineName = '%'
+                echartsObj2 = [{ name: 'B相电流', data: ib }]
+                lineName2 = 'A'
+                break
+              case 'icLoad':
+                echartsObj = [
+                  { name: 'C相电流负载率 ( 实时数据 )', data: icLoad },
+                ]
+                lineName = '%'
+                echartsObj2 = [{ name: 'C相电流', data: ic }]
+                lineName2 = 'A'
+                break
+              default:
+            }
+
+            dataTime.value = dataTime
+
+            store.state.realScoreLineDataTime = dataTime
+            store.state.realScoreLineObj = echartsObj
+            store.state.realScoreLineObj2 = echartsObj2
+            store.state.realScoreLineName = lineName
+            store.state.realScoreLineName2 = lineName2
+          } else {
+            ElMessage.error(requset.msg)
+          }
+        })
+    }
+
+    // 点击表格弹框图表
+    function oneClick(params) {
+      dialogTitle.value = params
+      showDialog.value = true
+      rtRealScore(params)
+    }
+    // 查看指标说明
+    const descripDialog = () => {
+      dialogTitle.value = '指标说明'
+      showDialog2.value = true
+    }
+
+    // 关闭操作
+    const closeDialog = () => {
+      showDialog.value = false
+      showDialog2.value = false
+    }
 
-    onMounted(() => {})
+    onMounted(() => {
+      // evaluationReport()
+    })
     return {
       store,
       headCellStyle,
@@ -226,6 +602,16 @@ export default defineComponent({
           city: '不合格',
         },
       ],
+      evaluationReport,
+      getData,
+      oneClick,
+      showDialog,
+      showDialog2,
+      dialogTitle,
+      rtRealScore,
+      echartsAllData,
+      closeDialog,
+      descripDialog,
     }
   },
 })

+ 239 - 0
src/views/powerQuality/asseReport/scoreReportComponent/descripDialog.vue

@@ -0,0 +1,239 @@
+<template>
+  <div class="descripDialog">
+    <el-dialog
+      :title="dialogTitle"
+      v-model="dialogVisible"
+      width="600px"
+      @close="closeDialog(0)"
+      @open="open"
+    >
+      <div style="width: 100%; ">
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane label="判定标准" name="first">
+            <div class="desBlock">
+              <h3>【电压】</h3>
+              <span>电压偏差国标:</span>
+              <span>35KV及以上正、负偏差的绝对值之和不超过标称电压的10%;</span>
+              <span>20kv及以下电压偏差为标称电压的±7%;</span>
+              <span>400V及以下电压偏差为标称电压的+7%、-10%;</span>
+              <span>标称电压=额定电压,其数值为线电压</span>
+              <span>比如:额定电压为380V,电压偏差的上限 和 下限分别为235.4V 和 198V</span>
+            </div>
+            <div class="desBlock">
+              <h3>【频率】</h3>
+              <span>频率超限范围:50±0.2(Hz)</span>
+            </div>
+            <div class="desBlock">
+              <h3>【功率因数】</h3>
+              <span>功率因数超限范围:用户可配置功率因数标准值</span>
+            </div>
+            <div class="desBlock">
+              <h3>【三相不平衡】</h3>
+              <span>三相不平衡度超限范围:15%</span>
+            </div>
+            <div class="desBlock">
+              <h3>【电流负载率】</h3>
+              <span>电流负载率超限范围:用户可配置电流负载率门限值</span>
+              <span>电流负载率=电流/额定电流</span>
+            </div>
+             <div class="desBlock">
+              <h3>【单项结论】</h3>
+              <span>合格率:(测点数-超限数)/测点数×100%</span>
+              <span>合格率>=95% 「合格」</span>
+              <span>合格率95% 「不合格」</span>
+            </div>
+            
+          </el-tab-pane>
+          <el-tab-pane label="配置内容" name="second">
+            <div class="desBlock">
+              <h3>【站点级配置】<a @click="goSitePowerScore">立即前往</a></h3>
+              <p>请在 站点管理->电能质量评分配置中配置 或 联系运维管理员:</p>
+              <span>电能质量各要素权重、功率因数标准值</span>
+            </div>
+            <div class="desBlock">
+              <h3>【设备级配置】<a @click="goSiteWatchDog">立即前往</a></h3>
+              <p>请在 站点管理->监控设备中配置 或 联系运维管理员:</p>
+              <span>额定电压、额定电流、电流负载率门限、电能质量分析</span>
+              <span>如果设备没有配置额定电压,电压/谐波畸变率分析项可能没有数据</span>
+              <span>如果设备不勾选电能质量分析,该设备不参与电能质量分析</span>
+            </div>
+            <div class="desBlock">
+              <h3>【变量级配置】<a @click="goSiteVariableList">立即前往</a></h3>
+              <p>请在 站点管理->变量列表中配置 或 联系运维管理员:配置下列变量,且需要指定变量的变量属性</p>
+              <span>A/B/C相电压</span>
+              <span>A/B/C相电流</span>
+              <span>功率因数</span>
+              <span>频率</span>
+              <span>有功/无功功率</span>
+              <span>有功/无功电度</span>
+              <span>电压三相不平衡度</span>
+              <span>电流三相不平衡度</span>
+              <span>A/B/C相电压相角</span>
+              <span>A/B/C相电流相角</span>
+              <span>A/B/C相电压总谐波畸变率</span>
+              <span>A/B/C相电流总谐波畸变率</span>
+              <span>2~31次A/B/C相电压谐波含量或有效值 (可二选一)</span>
+              <span>2~31次A/B/C相电流谐波含量或有效值 (可二选一)</span>
+              <span>如果变量没有指定变量属性 或 变量没有数据,分析项可能没有数据</span>
+            </div>
+          </el-tab-pane>
+         
+        </el-tabs>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import {useRouter} from 'vue-router'
+
+import { defineComponent, ref, watchEffect } from 'vue'
+// import * as api from '@/api/siteManage/watchDog.js'
+// import { ElMessage } from 'element-plus'
+
+export default defineComponent({
+  name: 'DescripDialog',
+  emits: ['closeDialog'],
+  props: {
+    flag: Boolean,
+    dialogTitle: String,
+    itemInfo: Object,
+  },
+  setup(props, context) {
+    context
+     let router = useRouter();
+    const store = useStore()
+    const dialogVisible = ref(false)
+
+    const activeName=ref('first')
+
+
+    // open(): Dialog弹窗打开之前做的事
+    const open = () => {
+
+    
+    }
+
+   
+
+    // 关闭弹框
+    const closeDialog = () => {
+      context.emit('closeDialog', false)
+      dialogVisible.value = false
+    }
+
+    watchEffect((fn, options) => {
+      fn, options
+      dialogVisible.value = props.flag
+    })
+
+
+    function handleClick(tab, event) {
+      console.log(tab, event)
+    }
+
+     function goSiteWatchDog(){
+      store.state.goUrl=2
+      router.push({
+    //传递参数使用query的话,指定path或者name都行,但使用params的话,只能使用name指定 
+        path:'/siteManage',
+        query:{
+        activeName:'second',
+        siteId:store.state.siteId
+        }
+      })
+    }
+    function goSiteVariableList(){
+      store.state.goUrl=3
+      router.push({
+    //传递参数使用query的话,指定path或者name都行,但使用params的话,只能使用name指定 
+        path:'/siteManage',
+        query:{
+        activeName:'six',
+        siteId:store.state.siteId
+        }
+      })
+
+    }
+    function goSitePowerScore(){
+      store.state.goUrl=6
+      router.push({
+    //传递参数使用query的话,指定path或者name都行,但使用params的话,只能使用name指定 
+        path:'/siteManage',
+        query:{
+        activeName:'six',
+        siteId:store.state.siteId
+        }
+      })
+
+    }
+   
+
+    return {
+       store,
+      closeDialog,
+      dialogVisible,
+    
+      open,
+
+      handleClick,
+      activeName,
+
+      goSitePowerScore,
+      goSiteWatchDog,
+      goSiteVariableList
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+.el-input,
+.el-select {
+  width: 240px;
+}
+
+// label样式
+.el-form-item__label {
+  width: 150px;
+}
+.el-form-item__content {
+  margin-left: 150px;
+}
+.desBlock {
+  padding:15px 0;
+  border-bottom:1px solid rgba(0,0,0,0.06);
+  h3{
+    margin:0 0 10px  0;
+    position:relative;
+    a{
+      position:absolute;
+      right:0
+    }
+    span{
+      position:absolute;
+      right:0;
+      font-size:14px;
+      color:#409eff;
+      cursor:pointer
+    }
+  }
+  p{
+    // margin-bottom:0px;
+  }
+  span{
+    display:block;
+    color:#7e93a6
+  }
+}
+</style>
+<style>
+.descripDialog .el-dialog__body{
+  padding-top:0
+}
+.descripDialog .el-overlay-dialog {
+  /* left: auto !important; */
+  /* bottom: auto !important; */
+}
+</style>

+ 87 - 0
src/views/powerQuality/asseReport/scoreReportComponent/dialogChartOne.vue

@@ -0,0 +1,87 @@
+<template>
+  <el-dialog
+    :title="dialogTitle"
+    v-model="dialogVisible"
+    width="800px"
+    @close="closeDialog()"
+  >
+    <div style="width: 100%">
+       <inner-line-chart2 v-if="type=='elBalun'||type=='vtBalun'||type=='iaLoad'||type=='ibLoad'||type=='icLoad'"></inner-line-chart2>
+      <inner-line-chart></inner-line-chart>
+     
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, ref, watchEffect, onMounted, watch } from 'vue'
+import innerLineChart from './innerLineChart'
+import innerLineChart2 from './innerLineChart2'
+
+export default defineComponent({
+  name: 'DialogChartOne',
+  components: {
+    innerLineChart,
+    innerLineChart2
+  },
+  emits: ['closeDialog'],
+  props: {
+    flag: Boolean,
+    dialogTitle: String,
+    itemInfo: Object,
+    echartsAllData: Array,
+    echartsTitle: String,
+  },
+  setup(props, context) {
+    context
+    const store = useStore()
+    const dialogVisible = ref(false)
+    const type = ref('')
+
+    const getData = async () => {
+      type.value = store.state.chartType
+    }
+
+    // 关闭弹框
+    const closeDialog = () => {
+      context.emit('closeDialog', false)
+      dialogVisible.value = false
+    }
+
+    watchEffect((fn) => {
+      fn
+      dialogVisible.value = props.flag
+    })
+
+    const writeValue = (val) => {
+      val
+      getData()
+    }
+
+    //监听变化
+    watch(
+      () => store.state.chartType,
+      (newVal, oldVal, clear) => {
+        // 执行异步任务,并得到关闭异步任务的 id
+
+        let id = writeValue(newVal, oldVal)
+        // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
+        clear(() => clearTimeout(id))
+      },
+      { lazy: true }
+    )
+
+    onMounted(() => {})
+
+    return {
+      closeDialog,
+      dialogVisible,
+      type
+    }
+  },
+})
+</script>
+ 
+<style scoped lang="scss">
+</style>

+ 196 - 0
src/views/powerQuality/asseReport/scoreReportComponent/innerLineChart.vue

@@ -0,0 +1,196 @@
+<template>
+  <div shadow="never" class="homeBoxCard" v-loading="loading">
+    <div class="height400" ref="lineChartBanlance" />
+  </div>
+</template>
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref, watch } from 'vue'
+import * as echarts from 'echarts'
+
+export default defineComponent({
+  name: 'lineChartValue',
+  props: {},
+  setup(props) {
+    props
+    const store = useStore()
+    let lineChartBanlance = ref(null)
+    const dataTimes = ref([])
+    const lineChartArr = ref([])
+
+    // 读取数据 func
+    const loading = ref(true)
+    const getData = async () => {
+      dataTimes.value = store.state.realScoreLineDataTime
+      lineChartArr.value = store.state.realScoreLineObj
+
+      lineChartArr.value.forEach((value) => {
+        value.type = 'line'
+        value.smooth = false
+        value.symbolSize = 7
+        // value.markPoint = {
+        //   data: [
+        //     { type: 'max', name: 'Max' },
+        //     { type: 'min', name: 'Min' },
+        //   ],
+        // }
+      })
+
+      loading.value = false
+    }
+ 
+    function echarts2() {
+      let myChart = echarts.init(lineChartBanlance.value)
+
+      
+
+      // 绘制图表
+      myChart.setOption({
+        color: ['#1187FF', '#48C964', '#fe8161'],
+
+        legend: {
+          top: '0',
+        },
+        tooltip: {
+          // show: true
+          trigger: 'axis',
+          axisPointer: { type: 'cross' },
+        },
+        grid: {
+          left: '20',
+          right: '40',
+          top: '40',
+          bottom: '30',
+          containLabel: true,
+        },
+        xAxis: {
+          axisLabel: {
+            color: '#444',
+            fontSize: 14,
+          },
+          /*改变xy轴颜色*/
+          axisLine: {
+            lineStyle: {
+              color: '#444',
+              width: 1, //这里是为了突出显示加上的
+            },
+          },
+          boundaryGap: false,
+          data: dataTimes.value,
+        },
+        yAxis: {
+          name: store.state.realScoreLineName,
+          textStyle: {
+            color: 'black',
+            fontSize: 10,
+          },
+          type: 'value',
+          axisTick: {
+            show: true, //去除刻度线
+          },
+          axisLabel: {
+            color: 'black', // 文本颜色
+          },
+          axisLine: {
+            show: true, // 去除轴线
+            lineStyle: {
+              color: 'black',
+            },
+          },
+          splitNumber: 5,
+          splitLine: {
+            show: true,
+            lineStyle: {
+              color: '#9d9d9d',
+            },
+          },
+        },
+
+        // series: [
+        //   {
+        //     name: 'A相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 6, 4, 5, 58, 6, 7, 8],
+        //   },
+        //   {
+        //     name: 'B相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 3, 4, 9, 5, 6, 7, 8],
+        //   },
+        //   {
+        //     name: 'C相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 3, 4, 5, 6, 6, 7, 3],
+        //   },
+        // ],
+        series: lineChartArr.value,
+      })
+      window.addEventListener('resize', () => {
+        myChart.resize()
+      })
+    }
+
+    const writeValue = (val) => {
+      val
+      getData()
+      echarts2()
+    }
+
+    //监听变化
+    watch(
+      () => store.state.realScoreLineObj,
+      (newVal, oldVal, clear) => {
+        // 执行异步任务,并得到关闭异步任务的 id
+        // console.log(newVal)
+        let id = writeValue(newVal, oldVal)
+        // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
+        clear(() => clearTimeout(id))
+      },
+      { lazy: true }
+    )
+
+    onMounted(() => {
+      // getData()
+      // echarts2()
+    })
+
+    return {
+      lineChartBanlance,
+      loading,
+      store,
+      dataTimes,
+      lineChartArr,
+    }
+  },
+})
+</script>
+<style lang="scss" scoped>
+.homeBoxCard {
+  margin-bottom: 24px;
+  ::v-deep(.el-card__header) {
+    padding-left: 12px;
+    padding-right: 12px;
+  }
+  ::v-deep(.el-card__body) {
+    padding: 12px;
+    font-size: 14px;
+    line-height: 1.5715;
+  }
+  ::v-deep(.el-divider) {
+    margin: 8px 0;
+  }
+  .num {
+    font-size: 30px;
+    color: #515a6e;
+  }
+  .height400 {
+    height: 400px;
+  }
+}
+</style>

+ 196 - 0
src/views/powerQuality/asseReport/scoreReportComponent/innerLineChart2.vue

@@ -0,0 +1,196 @@
+<template>
+  <div shadow="never" class="homeBoxCard" v-loading="loading">
+    <div class="height400" ref="lineChartBanlance" />
+  </div>
+</template>
+<script>
+import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref, watch } from 'vue'
+import * as echarts from 'echarts'
+
+export default defineComponent({
+  name: 'innerLineChart2',
+  props: {},
+  setup(props) {
+    props
+    const store = useStore()
+    let lineChartBanlance = ref(null)
+    const dataTimes = ref([])
+    const lineChartArr = ref([])
+
+    // 读取数据 func
+    const loading = ref(true)
+    const getData = async () => {
+      dataTimes.value = store.state.realScoreLineDataTime
+
+      lineChartArr.value = store.state.realScoreLineObj2
+      lineChartArr.value.forEach((value) => {
+        value.type = 'line'
+        value.smooth = false
+        value.symbolSize = 7
+        // value.markPoint = {
+        //   data: [
+        //     { type: 'max', name: 'Max' },
+        //     { type: 'min', name: 'Min' },
+        //   ],
+        // }
+      })
+
+      loading.value = false
+    }
+ 
+    function echarts2() {
+      let myChart = echarts.init(lineChartBanlance.value)
+
+      
+
+      // 绘制图表
+      myChart.setOption({
+        color: ['#1187FF', '#48C964', '#fe8161'],
+
+        legend: {
+          top: '0',
+        },
+        tooltip: {
+          // show: true
+          trigger: 'axis',
+          axisPointer: { type: 'cross' },
+        },
+        grid: {
+          left: '20',
+          right: '40',
+          top: '40',
+          bottom: '30',
+          containLabel: true,
+        },
+        xAxis: {
+          axisLabel: {
+            color: '#444',
+            fontSize: 14,
+          },
+          /*改变xy轴颜色*/
+          axisLine: {
+            lineStyle: {
+              color: '#444',
+              width: 1, //这里是为了突出显示加上的
+            },
+          },
+          boundaryGap: false,
+          data: dataTimes.value,
+        },
+        yAxis: {
+          name: store.state.realScoreLineName2,
+          textStyle: {
+            color: 'black',
+            fontSize: 10,
+          },
+          type: 'value',
+          axisTick: {
+            show: true, //去除刻度线
+          },
+          axisLabel: {
+            color: 'black', // 文本颜色
+          },
+          axisLine: {
+            show: true, // 去除轴线
+            lineStyle: {
+              color: 'black',
+            },
+          },
+          splitNumber: 5,
+          splitLine: {
+            show: true,
+            lineStyle: {
+              color: '#9d9d9d',
+            },
+          },
+        },
+
+        // series: [
+        //   {
+        //     name: 'A相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 6, 4, 5, 58, 6, 7, 8],
+        //   },
+        //   {
+        //     name: 'B相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 3, 4, 9, 5, 6, 7, 8],
+        //   },
+        //   {
+        //     name: 'C相电流',
+        //     type: 'line',
+        //     symbolSize: 7,
+        //     smooth: false,
+        //     data: [1, 2, 3, 4, 5, 6, 6, 7, 3],
+        //   },
+        // ],
+        series: lineChartArr.value,
+      },true)
+      window.addEventListener('resize', () => {
+        myChart.resize()
+      })
+    }
+
+    const writeValue = (val) => {
+      val
+      getData()
+      echarts2()
+    }
+
+    //监听变化
+    watch(
+      () => store.state.realScoreLineObj2,
+      (newVal, oldVal, clear) => {
+        // 执行异步任务,并得到关闭异步任务的 id
+        // console.log(newVal)
+        let id = writeValue(newVal, oldVal)
+        // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
+        clear(() => clearTimeout(id))
+      },
+      { lazy: true }
+    )
+
+    onMounted(() => {
+      // getData()
+      // echarts2()
+    })
+
+    return {
+      lineChartBanlance,
+      loading,
+      store,
+      dataTimes,
+      lineChartArr,
+    }
+  },
+})
+</script>
+<style lang="scss" scoped>
+.homeBoxCard {
+  margin-bottom: 24px;
+  ::v-deep(.el-card__header) {
+    padding-left: 12px;
+    padding-right: 12px;
+  }
+  ::v-deep(.el-card__body) {
+    padding: 12px;
+    font-size: 14px;
+    line-height: 1.5715;
+  }
+  ::v-deep(.el-divider) {
+    margin: 8px 0;
+  }
+  .num {
+    font-size: 30px;
+    color: #515a6e;
+  }
+  .height400 {
+    height: 400px;
+  }
+}
+</style>

+ 69 - 56
src/views/powerQuality/asseReport/scoreReportComponent/pieChart.vue

@@ -4,64 +4,34 @@
   </div>
 </template>
 <script>
-import { computed, defineComponent, onMounted, ref } from 'vue'
-import { useStore } from 'vuex'
+import { defineComponent, onMounted, ref ,watch} from 'vue'
+// import { useStore } from 'vuex'
 import * as echarts from 'echarts'
-// import { ChartDataType } from "../../data";
 
-var echartData = [
-  {
-    value: 335,
-    legendname: '优秀',
-    name: '优秀',
-    itemStyle: { color: '#40ABFE' },
-  },
-  {
-    value: 335,
-    legendname: '合格',
-    name: '合格',
-    itemStyle: { color: '#EEAA3F' },
-  },
-  {
-    value: 335,
-    legendname: '不合格',
-    name: '不合格',
-    itemStyle: { color: '#FF2222' },
-  },
-]
-
-var total_datas = 0
-for (var i = 0; i < echartData.length; i++) {
-  total_datas += Number(echartData[i].value)
-  console.log(typeof echartData[i].value)
-}
+// var total_datas = 0
+// for (var i = 0; i < echartData.length; i++) {
+//   total_datas += Number(echartData[i].value)
+//   console.log(typeof echartData[i].value)
+// }
 
 export default defineComponent({
   name: 'PieChart',
-  setup() {
-    const store = useStore()
-
-    // 总数
-    const total = computed(() => store.state.Home.worksChartData.total)
-    // num
-    const num = computed(() => store.state.Home.worksChartData.num)
-
+  props: {
+    getTableData: Object,
+  },
+  setup(props) {
     // 读取数据 func
     const loading = ref(true)
     const getData = async () => {
-      // loading.value = true
-      // await store.dispatch("Home/queryWorksChartData");
-      loading.value = false;
+      loading.value = false
     }
-
-    onMounted(() => {
-      getData()
+    function echarts2() {
       let myChart = echarts.init(document.getElementById('pieChart'))
       // 绘制图表
       myChart.setOption({
         title: [
           {
-            text: '' + total_datas,
+            text: 1,
             subtext: '共计回路',
             textStyle: {
               fontSize: 24,
@@ -80,18 +50,18 @@ export default defineComponent({
           trigger: 'item',
           formatter: function (parms) {
             var str =
-              parms.seriesName +
               '</br>' +
               parms.marker +
               '' +
               parms.data.legendname +
-              '</br>' +
-              '数量:' +
-              parms.data.value +
-              '</br>' +
-              '占比:' +
-              parms.percent +
-              '%'
+              '</br>' 
+              // +
+              // '数量:' +
+              // parms.data.value +
+              // '</br>' +
+              // '占比:' +
+              // parms.percent +
+              // '%'
             return str
           },
         },
@@ -108,7 +78,7 @@ export default defineComponent({
         },
         series: [
           {
-            name: '标题',
+            // name: '标题',
             type: 'pie',
             center: ['50%', '50%'],
             radius: ['37%', '55%'],
@@ -121,19 +91,62 @@ export default defineComponent({
             labelLine: {
               show: false,
             },
-            data: echartData,
+            data: [
+              {
+                value: props.getTableData.score>=80?1:0,
+                legendname: '优秀',
+                name: '优秀',
+                itemStyle: { color: '#40ABFE' },
+              },
+              {
+                value: props.getTableData.score>=60?1:0,
+                legendname: '合格',
+                name: '合格',
+                itemStyle: { color: '#EEAA3F' },
+              },
+              {
+                value: props.getTableData.score<60?1:0,
+                legendname: '不合格',
+                name: '不合格',
+                itemStyle: { color: '#FF2222' },
+              },
+            ],
           },
         ],
       })
       window.addEventListener('resize', () => {
         myChart.resize()
       })
+    }
+
+    const writeValue = (val) => {
+      val
+      getData()
+      echarts2()
+    }
+
+    //监听变化
+    watch(
+      () => props.getTableData,
+      (newVal, oldVal, clear) => {
+        // 执行异步任务,并得到关闭异步任务的 id
+        // console.log(newVal)
+        let id = writeValue(newVal, oldVal)
+        // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
+        clear(() => clearTimeout(id))
+      },
+      { lazy: true }
+    )
+
+
+    onMounted(() => {
+      getData()
+      echarts2()
     })
 
     return {
       loading,
-      total,
-      num,
+      echarts2,
     }
   },
 })

+ 50 - 31
src/views/powerQuality/asseReport/scoreReportComponent/radarChart.vue

@@ -1,35 +1,29 @@
 <template>
   <div shadow="never" class="homeBoxCard" v-loading="loading">
-    <div class="height260" ref="lineChartBanlance" />
+    <div class="height260" id="radarChart" ref="radarChart" />
   </div>
 </template>
 <script>
-import { computed, defineComponent, onMounted, ref } from 'vue'
-import { useStore } from 'vuex'
+import {  defineComponent, onMounted, ref,watch } from 'vue'
 import * as echarts from 'echarts'
-// import { ChartDataType } from "../../data";
 
 export default defineComponent({
   name: 'RadarChart',
-  setup() {
-    const store = useStore()
-    const lineChartBanlance = ref(null)
-    // 总数
-    const total = computed(() => store.state.Home.worksChartData.total)
-    // num
-    const num = computed(() => store.state.Home.worksChartData.num)
+  props:{
+    getTableData:Object,
+  },
+  setup(props) {
 
     // 读取数据 func
     const loading = ref(true)
     const getData = async () => {
-      // loading.value = true
+
+      // loading.value = true;
       // await store.dispatch("Home/queryWorksChartData");
       loading.value = false
     }
-
-    onMounted(() => {
-      getData()
-      let myChart = echarts.init(lineChartBanlance.value)
+    function echarts2(){
+       let myChart = echarts.init(document.getElementById('radarChart'))
       // 绘制图表
       myChart.setOption({
         backgroundColor: '#FFF',
@@ -68,29 +62,25 @@ export default defineComponent({
             },
           },
           indicator: [
-            {
-              name: '谐波畸变率',
-              max: 100,
-            },
             {
               name: '电压平衡度',
-              max: 100,
+              max: 20,
             },
             {
-              name: '电压合格率',
-              max: 100,
+              name: '电流平衡度',
+              max: 20,
             },
             {
               name: '功率因数',
-              max: 100,
+              max: 20,
             },
             {
-              name: '电流平衡度',
-              max: 100,
+              name: '电压合格率',
+              max: 20,
             },
             {
               name: '负载率',
-              max: 100,
+              max: 20,
             },
           ],
         },
@@ -111,7 +101,7 @@ export default defineComponent({
                 itemStyle: {
                   color: '#5eb6db',
                 },
-                value: [20, 33, 80, 50, 30, 40, 100],
+                value: [props.getTableData.vtBalunQ?20:0,props.getTableData.elBalunQ?20:0, props.getTableData.cosQ?20:0, props.getTableData.uq?20:0, props.getTableData.iloadQ?20:0],
               },
             ],
           },
@@ -120,13 +110,42 @@ export default defineComponent({
       window.addEventListener('resize', () => {
         myChart.resize()
       })
+
+    }
+
+    const writeValue = (val) => {
+    
+      val
+
+      getData()
+      echarts2()
+    }
+
+    //监听变化
+    watch(
+      () => props.getTableData,
+      (newVal, oldVal, clear) => {
+        // 执行异步任务,并得到关闭异步任务的 id
+        // console.log(newVal)
+        let id = writeValue(newVal, oldVal)
+        // 如果 watch 监听被重复执行了,则会先清除上次未完成的异步任务
+        clear(() => clearTimeout(id))
+      },
+      { lazy: true }
+    )
+
+    onMounted(() => {
+      getData()
+      echarts2()
+
+     
     })
 
     return {
-      lineChartBanlance,
       loading,
-      total,
-      num,
+   
+      getData,
+      echarts2
     }
   },
 })

+ 1 - 1
src/views/powerQuality/realTimeMonitoring/realScore.vue

@@ -346,7 +346,7 @@ export default defineComponent({
       })
     }
 
-    //表格数据请求
+    //主页面数据请求
     function realScore() {
       api.realScore({ deviceCode: deviceCode.value }).then((requset) => {
         if (requset.status === 'SUCCESS') {