Jelajahi Sumber

同步监视代码,完成区域分析对标筛选,同步样式

baiyanting 1 tahun lalu
induk
melakukan
de7d8d1a0a
54 mengubah file dengan 15599 tambahan dan 13955 penghapusan
  1. 126 6
      src/assets/css/style.css
  2. TEMPAT SAMPAH
      src/assets/img/images/piebg2.png
  3. TEMPAT SAMPAH
      src/assets/img/images/piebg3.png
  4. TEMPAT SAMPAH
      src/assets/img/images/shinexz.png
  5. TEMPAT SAMPAH
      src/assets/img/images/ssglbj.png
  6. 10 4
      src/components/ebtngroup/index.vue
  7. 4 4
      src/components/einput/index.vue
  8. 161 53
      src/components/eselect/index.vue
  9. 2 2
      src/element-theme/index-white.scss
  10. 2 2
      src/element-theme/index.scss
  11. 11 1
      src/views/layout/economicsOperation/benchmarkingManagement/companyBenchmarking/index.vue
  12. 196 261
      src/views/layout/economicsOperation/companyHomepage/index.vue
  13. 184 256
      src/views/layout/economicsOperation/companyHomepage/indexGf.vue
  14. 42 17
      src/views/layout/economicsOperation/homePage/components/card.vue
  15. 481 125
      src/views/layout/economicsOperation/homePage/index.vue
  16. 479 124
      src/views/layout/economicsOperation/homePage/indexGF.vue
  17. 72 80
      src/views/layout/stateMonitor/AGCMonitor/components/AGCSun.vue
  18. 6 1
      src/views/layout/stateMonitor/AGCMonitor/index.vue
  19. 6 5
      src/views/layout/stateMonitor/detailMatrix/index.vue
  20. 20 31
      src/views/layout/stateMonitor/factoryMonitor/components/dialogCheck.vue
  21. 6 4
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/components/navList.vue
  22. 279 217
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightDataTarget/components/lightDataGF.vue
  23. 27 13
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightCard.vue
  24. 22 8
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightList.vue
  25. 3613 3532
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightMatrixGF.vue
  26. 7 7
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/index.vue
  27. 2738 2778
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixCard.vue
  28. 3568 3447
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixGF.vue
  29. 144 134
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixList.vue
  30. 7 8
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/index.vue
  31. 72 23
      src/views/layout/stateMonitor/factoryMonitor/photovoltaic/photovoltaicFacility/components/photoitaicGF.vue
  32. 1322 1362
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/index.vue
  33. 7 1
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/LayoutBlock.vue
  34. 3 3
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/benchList.vue
  35. 3 3
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/benchLists.vue
  36. 8 4
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue
  37. 6 12
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/index.vue
  38. 5 4
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/subview/EqCard.vue
  39. 4 4
      src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/subview/EqList.vue
  40. 479 577
      src/views/layout/stateMonitor/photovoltaicStation/components/card.vue
  41. 98 0
      src/views/layout/stateMonitor/photovoltaicStation/components/halfCircleChart.vue
  42. 173 229
      src/views/layout/stateMonitor/photovoltaicStation/components/list.vue
  43. 78 0
      src/views/layout/stateMonitor/photovoltaicStation/components/progressCircleChart.vue
  44. 553 299
      src/views/layout/stateMonitor/photovoltaicStation/index.vue
  45. 33 22
      src/views/layout/stateMonitor/photovoltaicStationIndex/index.vue
  46. 6 1
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftChart.vue
  47. 11 5
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftSlide.vue
  48. 2 2
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftSlideDetail.vue
  49. 11 4
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftTop.vue
  50. 5 2
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlide.vue
  51. 52 9
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlideDetail.vue
  52. 1 1
      src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlideList.vue
  53. 447 261
      src/views/layout/stateMonitor/simpleMatrix/index.vue
  54. 7 7
      src/views/layout/stateMonitor/synthesizeTargetSystem/index.vue

+ 126 - 6
src/assets/css/style.css

@@ -66,7 +66,6 @@
 }
 .icon-field-involved:before {
   content: "\e90d";
-  color: #fff;
 }
 .icon-gf:before {
   content: "\e90e";
@@ -139,7 +138,6 @@
 }
 .icon-balance:before {
   content: "\e925";
-  color: #575869;
 }
 .icon-economic:before {
   content: "\e926";
@@ -164,7 +162,6 @@
 }
 .icon-intranet-involvement:before {
   content: "\e92d";
-  color: #fff;
 }
 .icon-wind:before {
   content: "\e92e";
@@ -183,11 +180,9 @@
 }
 .icon-arrow-down:before {
   content: "\e933";
-  color: #93a2ba;
 }
 .icon-arrow-up1:before {
   content: "\e934";
-  color: #93a2ba;
 }
 .icon-station:before {
   content: "\e935";
@@ -260,7 +255,6 @@
 }
 .icon-dimension:before {
   content: "\e94c";
-  color: #64676f;
 }
 .icon-power-curve:before {
   content: "\e94d";
@@ -367,3 +361,129 @@
 .icon-lujing:before {
   content: "\e96f";
 }
+.icon-daochu:before {
+  content: "\e970";
+}
+.icon-uniE971:before {
+  content: "\e971";
+}
+.icon-1:before {
+  content: "\e972";
+}
+.icon-2:before {
+  content: "\e973";
+}
+.icon-3:before {
+  content: "\e974";
+}
+.icon-4:before {
+  content: "\e975";
+}
+.icon-5:before {
+  content: "\e976";
+}
+.icon-6:before {
+  content: "\e977";
+}
+.icon-7:before {
+  content: "\e978";
+}
+.icon-8:before {
+  content: "\e979";
+}
+.icon-21:before {
+  content: "\e97a";
+}
+.icon-9:before {
+  content: "\e97b";
+}
+.icon-10:before {
+  content: "\e97c";
+}
+.icon-11:before {
+  content: "\e97d";
+}
+.icon-12:before {
+  content: "\e97e";
+}
+.icon-13:before {
+  content: "\e97f";
+}
+.icon-14:before {
+  content: "\e980";
+}
+.icon-15:before {
+  content: "\e981";
+}
+.icon-16:before {
+  content: "\e982";
+}
+.icon-17:before {
+  content: "\e983";
+}
+.icon-18:before {
+  content: "\e984";
+}
+.icon-19:before {
+  content: "\e985";
+}
+.icon-20:before {
+  content: "\e986";
+}
+.icon-22:before {
+  content: "\e987";
+}
+.icon-23:before {
+  content: "\e988";
+}
+.icon-24:before {
+  content: "\e989";
+}
+.icon-25:before {
+  content: "\e98a";
+}
+.icon-26:before {
+  content: "\e98b";
+}
+.icon-27:before {
+  content: "\e98c";
+}
+.icon-28:before {
+  content: "\e98d";
+}
+.icon-29:before {
+  content: "\e98e";
+}
+.icon-30:before {
+  content: "\e98f";
+}
+.icon-31:before {
+  content: "\e990";
+}
+.icon-32:before {
+  content: "\e991";
+}
+.icon-210:before {
+  content: "\e992";
+}
+.icon-33:before {
+  content: "\e993";
+}
+.icon-34:before {
+  content: "\e994";
+}
+.icon-35:before {
+  content: "\e995";
+}
+.icon-36:before {
+  content: "\e996";
+}
+.icon-37:before {
+  content: "\e997";
+}
+.icon-38:before {
+  content: "\e998";
+}
+.icon-39:before {
+  content: "\e999";
+}

TEMPAT SAMPAH
src/assets/img/images/piebg2.png


TEMPAT SAMPAH
src/assets/img/images/piebg3.png


TEMPAT SAMPAH
src/assets/img/images/shinexz.png


TEMPAT SAMPAH
src/assets/img/images/ssglbj.png


+ 10 - 4
src/components/ebtngroup/index.vue

@@ -1,23 +1,22 @@
 <template>
   <div style="display: flex;">
     <ebtn style="border-top-right-radius: 0;border-bottom-right-radius: 0;padding: 0 22px;" colorDirection="to left"
-      @click="$emit('update:modelValue', options[0].value)" :actived="modelValue == options[0].value">
+      @click="change(options[0].value)" :actived="modelValue == options[0].value">
       <template v-if="options[0].icon" #img>
         <i :class="options[0].icon" />
       </template>
     </ebtn>
     <ebtn style="border-top-left-radius: 0;border-bottom-left-radius: 0;margin-left: -1px;padding: 0 22px;"
-      @click="$emit('update:modelValue', options[1].value)" :actived="modelValue == options[1].value">
+      @click="change(options[1].value)" :actived="modelValue == options[1].value">
       <template v-if="options[1].icon" #img>
         <i :class="options[1].icon" />
-
       </template>
     </ebtn>
   </div>
 </template>
 <script setup>
 import ebtn from '../ebtn'
-import { defineProps } from 'vue'
+import { defineProps, defineEmits } from 'vue'
 
 const props = defineProps({
   options: {
@@ -27,4 +26,11 @@ const props = defineProps({
   }
 })
 
+const emit = defineEmits(['update:modelValue', 'onChange'])
+
+function change(v) {
+  emit('update:modelValue', v)
+  emit('onChange', v)
+}
+
 </script>

+ 4 - 4
src/components/einput/index.vue

@@ -47,7 +47,7 @@ function blur(e) {
     }
     &::after {
       width: 28px;
-      height: 26px;
+      height: 2px;
       content: '';
       position: absolute;
       right: 0px;
@@ -57,10 +57,10 @@ function blur(e) {
     }
 
     input.el-input__inner {
-      height: 26px !important;
+      height: 28px !important;
       border-radius: 3px !important;
-      font-size: 12px;
-      line-height: 26px;
+      font-size: 14px;
+      line-height: 28px;
       border: 1px solid #455165 !important;
       background-color: #191F2799 !important;
       color: #fff;

+ 161 - 53
src/components/eselect/index.vue

@@ -1,9 +1,26 @@
 <template>
-  <el-select class="eselect" v-model="value" :placeholder="placeholder" @change="change"
-    popper-class="eselectdrop" :clearable="clearable">
-    <el-option v-for="(item, index) in data" :key="item[labelKey]" :label="item[labelKey]" :value="item[valueKey]">
+  <el-select
+    class="eselect"
+    v-model="value"
+    :placeholder="placeholder"
+    @change="change"
+    :popper-class="''"
+    :clearable="clearable"
+    :multiple="multiple"
+    :collapse-tags="multiple"
+  >
+    <el-option
+      v-for="(item, index) in data"
+      :key="item[labelKey]"
+      :label="item[labelKey]"
+      :value="item[valueKey]"
+      :disabled="item.disabled"
+    >
       <template v-if="item.icon">
-        <img :src="icons[String(item.icon)]" style="width: 23px;margin: 4px 9px 4px -5px; float: left;" />
+        <img
+          :src="icons[String(item.icon)]"
+          style="width: 23px; margin: 4px 9px 4px -5px; float: left"
+        />
         <span>
           {{ item[labelKey] }}
         </span>
@@ -11,7 +28,10 @@
     </el-option>
     <!-- 每个选项带icon -->
     <template #prefix v-if="data?.[0]?.icon">
-      <img :src="icons[String(choosed?.icon)]" style="width: 23px;margin-top: 0px; margin-left: 2px; " />
+      <img
+        :src="icons[String(choosed?.icon)]"
+        style="width: 23px; margin-top: 0px; margin-left: 2px"
+      />
     </template>
     <!-- 外面传的icon -->
     <template #prefix v-if="$slots.prefix">
@@ -20,7 +40,7 @@
   </el-select>
 </template>
 <script setup>
-import { defineEmits, defineProps, ref, watch, nextTick, computed, } from 'vue'
+import { defineEmits, defineProps, ref, watch, nextTick, computed } from "vue";
 
 const props = defineProps({
   data: Array,
@@ -29,56 +49,61 @@ const props = defineProps({
   clearable: {},
   labelKey: {
     type: String,
-    default: 'label'
+    default: "label",
   },
   valueKey: {
     type: String,
-    default: 'value'
-  }
-})
-const emit = defineEmits(['change', 'update:modelValue'])
+    default: "value",
+  },
+  multiple: {
+    default: false,
+  },
+});
+const emit = defineEmits(["change", "update:modelValue"]);
 
 const choosed = computed(() => {
-  return props.data.find(item => item[props.valueKey] === value.value)
-})
+  return props.data.find((item) => item[props.valueKey] === value.value);
+});
 
 function change(e) {
   nextTick(() => {
-    emit('change', e)
-  })
+    emit("change", e);
+  });
 }
 
-const value = ref(props.modelValue)
+const value = ref(props.modelValue);
 
 // 内部修改 提交事件给父
 watch(value, (v) => {
-  emit('update:modelValue', v)
-})
+  emit("update:modelValue", v);
+});
 // 外部修改 同步给当前
-watch(() => props.modelValue, v => {
-  value.value = v
-})
+watch(
+  () => props.modelValue,
+  (v) => {
+    value.value = v;
+  }
+);
 
 // 类型图标
 const icons = {
-  '-1': require('./icons/i-1.png'),
-  '-2': require('./icons/i-2.png'),
-  '-3': require('./icons/i-3.png'),
-  '-5': require('./icons/i-5.png'),
-}
-
+  "-1": require("./icons/i-1.png"),
+  "-2": require("./icons/i-2.png"),
+  "-3": require("./icons/i-3.png"),
+  "-5": require("./icons/i-5.png"),
+};
 </script>
 
 <style lang="less">
 .eselect {
-  height: 26px !important;
+  height: 28px !important;
   box-sizing: border-box;
 
   .el-input {
     &::after {
       width: 28px;
-      height: 26px;
-      content: '';
+      height: 28px;
+      content: "";
       position: absolute;
       right: 0px;
       top: 0px;
@@ -86,47 +111,82 @@ const icons = {
       background: linear-gradient(to right, #40485833, #404858b2);
     }
 
-    &.is-focus::after{
-      background: linear-gradient(to right, #1C6CFF33, #1C6CFFb2);
+    &.is-focus::after {
+      background: linear-gradient(to right, #1c6cff33, #1c6cffb2);
     }
 
     &.el-input--prefix input.el-input__inner {
-      padding-left: 34px;
+      padding-left: 34px !important;
     }
 
     input.el-input__inner {
-      background-color: #191F2799 !important;
+      background-color: #191f2799 !important;
       border: 1px solid #455165 !important;
       color: #fff !important;
-      font-size: 12px !important;
+      font-size: 14px !important;
       padding-left: 12px;
       border-radius: 3px !important;
-      height: 26px !important;
+      height: 28px !important;
 
-      &::input-placeholder, &::-webkit-input-placeholder{
-        color: #8F97A3 !important;
+      &::input-placeholder,
+      &::-webkit-input-placeholder {
+        color: #8f97a3 !important;
       }
     }
 
     &.is-focus .el-input__inner {
-      border: 1px solid #1B71E9 !important;
+      border: 1px solid #1b71e9 !important;
     }
 
-    .el-input__suffix{
+    .el-input__suffix {
       right: 2px;
       z-index: 2;
-      i{
+      i {
         color: #fff;
       }
     }
   }
+
+  &.el-select {
+    .el-select__tags {
+      .el-tag {
+        height: 23px;
+        box-sizing: border-box;
+        background: #1b6bff33;
+        border: 1px solid transparent;
+        color: #1b99ff;
+        margin-left: 3px;
+        &:last-child:not(:first-child) {
+          color: #ff9c26;
+          // background-color: transparent !important;
+          background: linear-gradient(to left, #ff660059, #ff660000) !important;
+          border-left-width: 0;
+          border-radius: 5px;
+          // background-clip: padding-box, border-box;
+          // background-origin: padding-box, border-box;
+          // background-image: linear-gradient(to left, #FF650066, #1A1E28, #1A1E28), linear-gradient(to left, #FF6500b2, #1A1E28);
+        }
+      }
+
+      .el-tag__close {
+        background-color: #1b99ff;
+        color: #1a1e28;
+
+        &:hover {
+          background-color: #1b99ff99;
+          color: #1a1e28;
+        }
+      }
+    }
+  }
 }
 
-.eselectdrop {
-  border: 1px solid transparent;
-  background-clip: padding-box, border-box;
-  background-origin: padding-box, border-box;
-  background-image: linear-gradient(to bottom, #1D212B, #1D212B), linear-gradient(to bottom, #1c78f9, #1D212B);
+.el-select__popper.el-popper {
+  border: 1px solid transparent !important;
+  background-clip: padding-box, border-box !important;
+  background-origin: padding-box, border-box !important;
+  background-image: linear-gradient(to bottom, #1d212b, #1d212b),
+    linear-gradient(to bottom, #1c78f9, #1d212b) !important;
 
   &.el-select__popper.is-light {
     --el-popper-border-radius: 5px !important;
@@ -141,17 +201,16 @@ const icons = {
       content: "";
       display: block;
       height: 3px;
-      background: linear-gradient(135deg, #1C99FF, #1D212B);
+      background: linear-gradient(135deg, #1c99ff, #1d212b);
       border-top-left-radius: 2px;
       overflow: hidden;
     }
   }
 
-  .el-scrollbar__bar.is-vertical{
+  .el-scrollbar__bar.is-vertical {
     width: 4px !important;
-    opacity: .5;
+    opacity: 0.5;
   }
-  
 
   .el-select-dropdown__list {
     margin: 9px 0 !important;
@@ -159,7 +218,7 @@ const icons = {
   }
 
   .el-select-dropdown__item {
-    font-size: 12px !important;
+    font-size: 13px !important;
     color: #fff !important;
     height: 32px !important;
     line-height: 30px !important;
@@ -168,14 +227,63 @@ const icons = {
     font-family: MicrosoftYaHeiLight;
     padding-left: 10px !important;
 
+    &.hover {
+      background-color: transparent !important;
+    }
+
+    // &.hover,
     &.selected,
-    &.hover,
     &:hover {
       background-color: transparent !important;
       border-radius: 3px;
       background-clip: padding-box, border-box;
       background-origin: padding-box, border-box;
-      background-image: linear-gradient(135deg, #0043BF66, #1D212B, #1D212B), linear-gradient(to right, #1c78f9b2, #1D212B, #1D212B);
+      background-image: linear-gradient(135deg, #0043bf66, #1d212b, #1d212b),
+        linear-gradient(to right, #1c78f9b2, #1d212b, #1d212b);
+    }
+  }
+
+  .is-multiple {
+    .el-select-dropdown__item.is-disabled {
+      cursor: default;
+      &::before {
+        width: 0;
+        height: 0;
+        border: 0 none;
+      }
+    }
+    .el-select-dropdown__item.hover {
+      &:not(:hover) {
+        background-image: none;
+        background-color: transparent !important;
+      }
+    }
+    .el-select-dropdown__item {
+      &::before {
+        position: absolute;
+        content: "";
+        width: 17px;
+        height: 16px;
+        border: 1px solid #5f6979b2;
+        border-radius: 2px;
+        right: 7px;
+        top: 7px;
+        background: #31374166;
+      }
+    }
+    .el-select-dropdown__item.selected {
+      &:not(:hover) {
+        background-image: none;
+      }
+
+      &::after {
+        right: 10px;
+      }
+
+      &::before {
+        border: 1px solid #1b73eb;
+        background: #1b77f933;
+      }
     }
   }
 }

+ 2 - 2
src/element-theme/index-white.scss

@@ -9747,7 +9747,7 @@
 }
 
 .el-input--prefix .el-input__inner {
-  padding-left: 30px
+//   padding-left: 30px
 }
 
 .el-input--medium {
@@ -15877,7 +15877,7 @@
   box-sizing: border-box;
   border-radius: calc(var(--el-transfer-filter-height)/ 2);
   padding-right: 10px;
-  padding-left: 30px
+//   padding-left: 30px
 }
 
 .el-transfer-panel__filter .el-input__icon {

+ 2 - 2
src/element-theme/index.scss

@@ -9789,7 +9789,7 @@
 }
 
 .el-input--prefix .el-input__inner {
-  padding-left: 30px
+//   padding-left: 30px
 }
 
 .el-input--medium {
@@ -15931,7 +15931,7 @@
   box-sizing: border-box;
   border-radius: calc(var(--el-transfer-filter-height)/ 2);
   padding-right: 10px;
-  padding-left: 30px
+//   padding-left: 30px
 }
 
 .el-transfer-panel__filter .el-input__icon {

+ 11 - 1
src/views/layout/economicsOperation/benchmarkingManagement/companyBenchmarking/index.vue

@@ -24,6 +24,7 @@
             v-model="company"
             multiple
             collapse-tags
+            clearable
             placeholder="江苏区域"
             @change="handleCompanyChange(company)"
           >
@@ -592,6 +593,7 @@ export default {
         name: "",
         code: "",
       },
+      benchComp: [],
     };
   },
   created() {
@@ -635,6 +637,10 @@ export default {
     };
   },
   methods: {
+    init(comp, type) {
+      this.benchComp = comp;
+      this.tabIndex = type;
+    },
     getProvinceCode() {
       GetRegionInfo().then((data) => {
         this.province = {
@@ -652,7 +658,11 @@ export default {
     initialization() {
       GetOrganization({ type: this.tabIndex }).then((res) => {
         if (res.data) {
-          this.company = [];
+          if (this.benchComp.length) {
+            this.company = this.benchComp;
+          } else {
+            this.company = [];
+          }
           this.companyOptions = res.data;
           this.gerGsdb();
         }

+ 196 - 261
src/views/layout/economicsOperation/companyHomepage/index.vue

@@ -2,32 +2,33 @@
   <div class="photovoltaicStation matrix-body">
     <div class="province-data">
       <div class="form-box" style="margin-right: 10px">
-        <el-select v-model="typeNode" @change="levels1DataChang">
-          <el-option
-            v-for="(item, index) in levels1Data"
-            :key="index"
-            :label="item.name"
-            :value="item.type"
-          >
-          </el-option>
-        </el-select>
+        <eselect
+          :data="levels1Data"
+          v-model="typeNode"
+          placeholder="请选择"
+          labelKey="name"
+          valueKey="type"
+          @change="levels1DataChang"
+          style="margin-right: 8px; width: 132px"
+        />
       </div>
       <div class="form-box">
-        <el-select
+        <eselect
+          :data="OrganizationLists"
           v-model="checkNode"
-          :placeholder="''"
-          collapse-tags
-          size="mini"
+          placeholder="请选择"
+          labelKey="aname"
+          valueKey="id"
+          style="margin-right: 8px; width: 180px"
           @change="companyChange"
         >
-          <el-option
-            v-for="(item, indexe) in OrganizationLists"
-            :key="indexe"
-            :label="item.aname"
-            :value="item.id"
-          >
-          </el-option>
-        </el-select>
+          <template #prefix>
+            <img
+              src="@assets/img/images/company.png"
+              style="width: 23px; margin-top: 0px; margin-left: 2px"
+            />
+          </template>
+        </eselect>
       </div>
     </div>
     <div class="photovoltaic-chart3">
@@ -65,7 +66,7 @@
                 </div>
               </div>
             </div>
-            <p>能利用率(%)</p>
+            <p>能利用率(%)</p>
           </div>
           <ul class="chart-list">
             <li class="statistics-li">
@@ -109,7 +110,6 @@
         <div class="chart-content">
           <div class="chart-pie">
             <div class="chart-total"></div>
-            <!-- <pie-chart width="100%" height="100%" :lossPower="dayWindPieData" /> -->
             <pie-chart width="100%" height="100%" :series="dayWindPieData" />
           </div>
           <ul class="chart-list">
@@ -138,7 +138,6 @@
           <div class="chart-online">
             <div class="chart-total"></div>
             <pie-chart width="100%" height="100%" :series="stationTop5" />
-            <!-- <PieStationTop5 width="100%" height="100%" :list="stationTop5" /> -->
           </div>
           <ul class="chart-list">
             <li
@@ -164,23 +163,16 @@
     <div class="photovoltaic-filter">
       <div class="photovoltaic-left">
         <div class="form-box sort">
-          <span>排序方式:</span>
-          <el-select
-            size="mini"
+          <eselect
             v-model="sortCode"
-            placeholder="请选择"
-            collapse-tags
+            placeholder="排序方式"
             clearable
+            :data="sortArrData"
+            labelKey="label"
+            valueKey="value"
             @change="sortFilterchange"
-          >
-            <el-option
-              v-for="(item, indexe) in sortArrData"
-              :key="indexe"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
+            style="width: 165px"
+          />
         </div>
 
         <div
@@ -193,68 +185,66 @@
           ></i>
         </div>
         <div class="search-form">
-          <div class="form-box station">
-            <div class="label">场站:</div>
-            <el-select
+          <div class="form-box">
+            <eselect
               v-model="stationName"
               placeholder="全部场站"
               clearable
               multiple
-              collapse-tags
-              size="mini"
+              :data="complyData"
+              labelKey="aname"
+              valueKey="id"
               @change="stationChange"
-            >
-              <el-option
-                v-for="(item, indexe) in complyData"
-                :key="indexe"
-                :label="item.aname"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
           </div>
           <div class="form-box">
-            <div
-              class="theme-change"
+            <ebtn
+              style="margin-right: 16px"
               @click="themeChange('maintenance')"
-              :class="themeType === 'maintenance' && 'active-theme'"
+              :actived="themeType === 'maintenance'"
             >
-              <i class="icon-operate"></i>
-              <span>光能利用率</span>
-            </div>
-            <div
-              class="theme-change"
+              <template #img>
+                <i class="icon-operate"></i>
+              </template>
+              风能利用率
+            </ebtn>
+            <ebtn
+              style="margin-right: 12px"
               @click="themeChange('operate')"
-              :class="themeType === 'operate' && 'active-theme'"
+              :actived="themeType === 'operate'"
             >
-              <i class="icon-maintenance"></i>
-              <span>损失明细</span>
-            </div>
-            <div class="label">对标方式:</div>
-            <el-select
-              style="width: 145px"
+              损失明细
+              <template #img>
+                <i class="icon-maintenance"></i>
+              </template>
+            </ebtn>
+            <eselect
+              v-show="themeType === 'maintenance'"
               v-model="benchmarkingVal"
-              placeholder="请选择"
+              placeholder="对标方式"
               clearable
-              size="mini"
+              :data="benchmarking"
               @change="changeNum"
-            >
-              <el-option
-                @mousedown.native="clickBench(item.value)"
-                v-for="(item, indexe) in benchmarking"
-                :key="indexe"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
             <el-badge
               v-if="benchNum !== 0 && benchmarkingVal !== ''"
               @click="hidenBenchList"
               :value="benchNum"
               style="margin-left: 20px; cursor: pointer"
             >
-              <img src="@/assets/img/images/benhNum.png" />
+              <ebtn style="padding: 0 16px">
+                <template #img>
+                  <i
+                    :class="
+                      sortType
+                        ? 'icon-descending-order'
+                        : 'icon-ascending-order'
+                    "
+                  ></i>
+                </template>
+              </ebtn>
             </el-badge>
           </div>
           <div
@@ -344,14 +334,16 @@
             </div>
             <el-row
               class="footerButton"
-              v-if="benchmarkingVal === 'bench1'"
+              v-if="
+                benchmarkingVal === 'bench1' || benchmarkingVal === 'bench2'
+              "
               style="position: absolute; bottom: 19px; left: 15px"
             >
               <el-button
                 type="primary"
                 :disabled="cardBench.length < 2"
                 round
-                @click="openCurvDatasedDate"
+                @click="openCurvData"
                 >开始对标</el-button
               >
               <div class="footTitle" @click="clearTable">
@@ -395,31 +387,6 @@
           </div>
         </div>
       </div>
-
-      <!-- 右侧列表卡片切换按钮 <div class="photovoltaic-toggle">
-       <div
-          class="type-card"
-          :class="isActive === 'card' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'card';
-            }
-          "
-        >
-          <i class="icon-matrix"></i>
-        </div>
-         <div
-          class="type-list"
-          :class="isActive === 'list' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'list';
-            }
-          "
-        >
-          <i class="icon-tabulation"></i>
-        </div> 
-      </div>-->
     </div>
     <div class="photovoltaic-data">
       <Card
@@ -431,18 +398,6 @@
         :theme="themeType"
         :isStation="true"
       />
-      <!-- <Card
-        v-if="isActive === 'card'"
-        :dataSource="cardData"
-        :isStation="true"
-        :theme="themeType"
-      />
-       <List
-        v-if="isActive === 'list'"
-        :dataSource="cardData"
-        :isStation="true"
-        :theme="themeType"
-      /> -->
     </div>
     <el-dialog
       class="dialogs"
@@ -483,6 +438,8 @@
 <script>
 import Card from "../homePage/components/card.vue";
 import List from "../homePage/components/list.vue";
+import eselect from "@/components/eselect";
+import ebtn from "@/components/ebtn";
 import PieChart from "@/components/chart/pie/dual-pie-chart-econey.vue";
 import siteBench from "@/views//layout/economicsOperation/benchmarkingManagement/siteBenchmarking/index";
 import intervalBench from "@/views//layout/economicsOperation/benchmarkingManagement/intervalBenchmarking/index";
@@ -497,6 +454,8 @@ export default {
   components: {
     Card,
     List,
+    eselect,
+    ebtn,
     PieChart,
     siteBench,
     intervalBench,
@@ -508,8 +467,8 @@ export default {
     return {
       //风光类型
       levels1Data: [
-        { type: -1, flag: true, id: "F", name: "风电" },
-        { type: -2, flag: true, id: "G", name: "光伏" },
+        { type: -1, flag: true, id: "F", name: "风电", icon: -1 },
+        { type: -2, flag: true, id: "G", name: "光伏", icon: -2 },
       ],
       province: {
         name: "",
@@ -530,15 +489,6 @@ export default {
       listData: [], //列表数据
       allListData: [], //备用列表数据
       companyPowerStationData: [], //全部数据
-      sortArrData: [
-        { label: "发电量", value: "fdl" },
-        { label: "故障损失", value: "gzssdl" },
-        { label: "维护损失", value: "whssdl" },
-        { label: "限电损失", value: "xdssdl" },
-        { label: "性能损失", value: "xnssdl" },
-        { label: "受累损失", value: "slssdl" },
-        { label: "光能利用率", value: "gnlyl" }, //排序条件列表
-      ],
       sortCode: "", //排序条件
       sortType: true, //升序降序
       datetype: "r",
@@ -551,28 +501,15 @@ export default {
         { label: "线路对标", value: "bench4" },
         { label: "阵区对标", value: "bench5" },
       ],
-      benchmarkingVal: "",
+      a_benchmarkingVal: "",
       benchNum: 0,
       displaycheck: false,
       displaybench: false,
-      benchIndex: "",
-      selectTime: "",
-      benchChang: "",
       cardBench: [],
-      ListBench: [],
-      ListBenchs: [],
-      didBench: "",
-      benchCode: "",
       stationData: {},
-      dateTimes: null,
-      timerCurvData: null,
-      eventx: "",
-      eventY: "",
-      stationEg: null,
       cardVal: [],
       cardVals: [],
       cardLists: [],
-      cardListed: [],
       cardNmeCode: [],
       cardSta: [],
       cardPro: [],
@@ -610,68 +547,8 @@ export default {
       this.displaycheck = !this.displaycheck;
     },
     // 切换对标方式
-    changeNum(val) {
-      // clearInterval(this.timerDetial);
-
-      if (val === "") {
-        this.$confirm("是否清空对标方式?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-          .then(async () => {
-            this.$message({
-              type: "success",
-              message: "已清空!",
-              offset: 200,
-              center: true,
-              customClass: "s",
-            });
-            this.selectTime = "";
-            this.displaycheck = false;
-            this.$refs.childCard.changenums();
-          })
-          .catch((_) => {
-            this.benchChang = this.didBench;
-            this.benchmarkingVal = this.didBench;
-          });
-      }
-
-      this.benchChang = val;
-    },
-    // 点击对标方式
-    clickBench(val) {
-      this.didBench = val;
-      let s = this.benchmarkingVal;
-
-      if (
-        this.benchChang !== "" &&
-        val !== "" &&
-        this.benchmarkingVal !== val &&
-        this.benchNum !== 0
-      ) {
-        this.$confirm("是否切换对标方式?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-          .then(async () => {
-            this.$message({
-              type: "success",
-              message: "切换成功!",
-              offset: 200,
-              center: true,
-              customClass: "s",
-            });
-            this.selectTime = "";
-            this.benchmarkingVal = val;
-            this.$refs.childCard.changenums();
-            this.displaycheck = false;
-          })
-          .catch(() => {
-            this.benchmarkingVal = s;
-          });
-      }
+    changeNum() {
+      this.$refs.childCard.changenums();
     },
     // 删除购物车内容
     removeTable(index) {
@@ -729,10 +606,7 @@ export default {
         this.$refs.childCard.changenBench(this.cardBench);
       }
     },
-    disBenTable() {
-      this.displaycheck = false;
-    },
-    // 点击确认后添加数据
+    // 点击确认后添加数据(公司对标,场际对标)
     setdata(data) {
       this.cardBench = data;
       this.benchNum = data.length;
@@ -741,7 +615,7 @@ export default {
       }
     },
 
-    // 点击确认后添加数据
+    // 点击确认后添加数据(场内对标)
     setdataed(data, val) {
       this.cardBench = data;
       this.benchNum = data.length;
@@ -750,6 +624,7 @@ export default {
         this.displaycheck = false;
       }
     },
+    // 点击确认后添加数据(期次线路阵区对标)
     setdatas(data, val, sta, pro, lin) {
       this.cardSta = sta;
       this.cardPro = pro;
@@ -819,6 +694,13 @@ export default {
         });
       }
     },
+    // 开始对标(场内对标/场际对标)
+    openCurvData() {
+      //场内和场际都用cardBench判断开始对标按钮是否可用
+      this.benchmarkingVal === "bench1"
+        ? this.openCurvDatasedDate()
+        : this.openCurvDatased();
+    },
     // 开始对标(除场内对标)
     openCurvDatased() {
       this.displaycheck = false;
@@ -882,14 +764,14 @@ export default {
     levels1DataChang() {
       this.checkNode = "";
       this.resetAllFiller();
-      this.$router.push({ path: "/economicsOperation/comphomepageGf" });
+      this.$router.push({ path: "/economicsOperation/comphomepage" });
     },
     // 获取数据
     async getDataDetial() {
       let { data: res } = await homePage({
         companyId: this.checkNode,
         type: 0,
-        statype: this.typeNode,
+        statype: -2,
         datetype: this.datetype,
       });
       this.companyPowerStationData = res; //所有页面数据
@@ -974,9 +856,6 @@ export default {
       this.getDataDetial();
       this.getStationList();
       this.stationLists = this.complyData;
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 场站切换
     stationChange(val) {
@@ -998,9 +877,6 @@ export default {
         this.listData = this.allListData;
         this.cardData = this.getSortList(this.listData, this.sortCode);
       }
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 切换主题
     themeChange(type) {
@@ -1039,17 +915,76 @@ export default {
   created() {
     this.init();
   },
-  mounted() {
-    // this.timer = setInterval(() => {
-    //   this.getDataDetial();
-    // }, 10000);
-  },
-  unmounted() {
-    clearInterval(this.timer);
-    this.timer = null;
+  computed: {
+    benchmarkingVal: {
+      get() {
+        return this.a_benchmarkingVal;
+      },
+      set(v) {
+        if (
+          v != this.a_benchmarkingVal &&
+          this.benchNum != 0 &&
+          this.benchChang !== ""
+        ) {
+          let t;
+          if (!v) {
+            t = "清空";
+          } else {
+            t = "切换";
+          }
+          this.$confirm(`是否${t}对标方式?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(async () => {
+              this.$message({
+                type: "success",
+                message: `${t}成功!`,
+                offset: 200,
+                center: true,
+                customClass: "s",
+              });
+              this.selectTime = "";
+              this.a_benchmarkingVal = v;
+              this.benchChang = v;
+              this.$refs.childCard.changenums();
+              this.displaycheck = false;
+            })
+            .catch(() => {
+              if (!v) {
+                const te = this.a_benchmarkingVal;
+                this.a_benchmarkingVal = "";
+                this.$nextTick(() => {
+                  this.a_benchmarkingVal = te;
+                });
+              }
+            });
+        } else {
+          this.a_benchmarkingVal = v;
+          this.benchChang = v;
+        }
+      },
+    },
+    sortArrData() {
+      if (this.themeType === "operate") {
+        return [
+          { label: "故障损失", value: "gzssdl" },
+          { label: "维护损失", value: "whssdl" },
+          { label: "限电损失", value: "xdssdl" },
+          { label: "性能损失", value: "xnssdl" },
+          { label: "受累损失", value: "slssdl" },
+        ];
+      } else {
+        return [
+          { label: "风能利用率", value: "gnlyl" },
+          { label: "发电量", value: "fdl" },
+          { label: "理论发电量", value: "llfdl" },
+          { label: "损失电量", value: "ssdl" },
+        ];
+      }
+    },
   },
-
-  watch: {},
 };
 </script>
 
@@ -1192,37 +1127,37 @@ export default {
   color: #ffffff !important;
 }
 
-:deep(.el-input) {
-  .el-input__inner {
-    height: 25px !important;
-    background: #222832 !important;
-    border: 1px solid #465166 !important;
-  }
-}
-
-.photovoltaic-filter .sort {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 140px !important;
-    }
-  }
-}
-
-.photovoltaic-filter .status {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 100px !important;
-    }
-  }
-}
-
-.photovoltaic-filter .station {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 160px !important;
-    }
-  }
-}
+// :deep(.el-input) {
+//   .el-input__inner {
+//     height: 25px !important;
+//     background: #222832 !important;
+//     border: 1px solid #465166 !important;
+//   }
+// }
+
+// .photovoltaic-filter .sort {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 140px !important;
+//     }
+//   }
+// }
+
+// .photovoltaic-filter .status {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 100px !important;
+//     }
+//   }
+// }
+
+// .photovoltaic-filter .station {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 160px !important;
+//     }
+//   }
+// }
 
 .dialog-body {
   height: 100%;
@@ -1840,7 +1775,7 @@ export default {
   }
 
   .photovoltaic-data {
-    flex: 1;
+    height: 624px;
   }
 }
 </style>

+ 184 - 256
src/views/layout/economicsOperation/companyHomepage/indexGf.vue

@@ -2,32 +2,33 @@
   <div class="photovoltaicStation matrix-body">
     <div class="province-data">
       <div class="form-box" style="margin-right: 10px">
-        <el-select v-model="typeNode" @change="levels1DataChang">
-          <el-option
-            v-for="(item, index) in levels1Data"
-            :key="index"
-            :label="item.name"
-            :value="item.type"
-          >
-          </el-option>
-        </el-select>
+        <eselect
+          :data="levels1Data"
+          v-model="typeNode"
+          placeholder="请选择"
+          labelKey="name"
+          valueKey="type"
+          @change="levels1DataChang"
+          style="margin-right: 8px; width: 132px"
+        />
       </div>
       <div class="form-box">
-        <el-select
+        <eselect
+          :data="OrganizationLists"
           v-model="checkNode"
-          :placeholder="''"
-          collapse-tags
-          size="mini"
+          placeholder="请选择"
+          labelKey="aname"
+          valueKey="id"
+          style="margin-right: 8px; width: 180px"
           @change="companyChange"
         >
-          <el-option
-            v-for="(item, indexe) in OrganizationLists"
-            :key="indexe"
-            :label="item.aname"
-            :value="item.id"
-          >
-          </el-option>
-        </el-select>
+          <template #prefix>
+            <img
+              src="@assets/img/images/company.png"
+              style="width: 23px; margin-top: 0px; margin-left: 2px"
+            />
+          </template>
+        </eselect>
       </div>
     </div>
     <div class="photovoltaic-chart3">
@@ -109,7 +110,6 @@
         <div class="chart-content">
           <div class="chart-pie">
             <div class="chart-total"></div>
-            <!-- <pie-chart width="100%" height="100%" :lossPower="dayWindPieData" /> -->
             <pie-chart width="100%" height="100%" :series="dayWindPieData" />
           </div>
           <ul class="chart-list">
@@ -138,7 +138,6 @@
           <div class="chart-online">
             <div class="chart-total"></div>
             <pie-chart width="100%" height="100%" :series="stationTop5" />
-            <!-- <PieStationTop5 width="100%" height="100%" :list="stationTop5" /> -->
           </div>
           <ul class="chart-list">
             <li
@@ -164,23 +163,16 @@
     <div class="photovoltaic-filter">
       <div class="photovoltaic-left">
         <div class="form-box sort">
-          <span>排序方式:</span>
-          <el-select
-            size="mini"
+          <eselect
             v-model="sortCode"
-            placeholder="请选择"
-            collapse-tags
+            placeholder="排序方式"
             clearable
+            :data="sortArrData"
+            labelKey="label"
+            valueKey="value"
             @change="sortFilterchange"
-          >
-            <el-option
-              v-for="(item, indexe) in sortArrData"
-              :key="indexe"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
-          </el-select>
+            style="width: 165px"
+          />
         </div>
 
         <div
@@ -193,68 +185,66 @@
           ></i>
         </div>
         <div class="search-form">
-          <div class="form-box station">
-            <div class="label">场站:</div>
-            <el-select
+          <div class="form-box">
+            <eselect
               v-model="stationName"
               placeholder="全部场站"
               clearable
               multiple
-              collapse-tags
-              size="mini"
+              :data="complyData"
+              labelKey="aname"
+              valueKey="id"
               @change="stationChange"
-            >
-              <el-option
-                v-for="(item, indexe) in complyData"
-                :key="indexe"
-                :label="item.aname"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
           </div>
           <div class="form-box">
-            <div
-              class="theme-change"
+            <ebtn
+              style="margin-right: 16px"
               @click="themeChange('maintenance')"
-              :class="themeType === 'maintenance' && 'active-theme'"
+              :actived="themeType === 'maintenance'"
             >
-              <i class="icon-operate"></i>
-              <span>光能利用率</span>
-            </div>
-            <div
-              class="theme-change"
+              <template #img>
+                <i class="icon-operate"></i>
+              </template>
+              光能利用率
+            </ebtn>
+            <ebtn
+              style="margin-right: 12px"
               @click="themeChange('operate')"
-              :class="themeType === 'operate' && 'active-theme'"
+              :actived="themeType === 'operate'"
             >
-              <i class="icon-maintenance"></i>
-              <span>损失明细</span>
-            </div>
-            <div class="label">对标方式:</div>
-            <el-select
-              style="width: 145px"
+              损失明细
+              <template #img>
+                <i class="icon-maintenance"></i>
+              </template>
+            </ebtn>
+            <eselect
+              v-show="themeType === 'maintenance'"
               v-model="benchmarkingVal"
-              placeholder="请选择"
+              placeholder="对标方式"
               clearable
-              size="mini"
+              :data="benchmarking"
               @change="changeNum"
-            >
-              <el-option
-                @mousedown.native="clickBench(item.value)"
-                v-for="(item, indexe) in benchmarking"
-                :key="indexe"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
             <el-badge
               v-if="benchNum !== 0 && benchmarkingVal !== ''"
               @click="hidenBenchList"
               :value="benchNum"
               style="margin-left: 20px; cursor: pointer"
             >
-              <img src="@/assets/img/images/benhNum.png" />
+              <ebtn style="padding: 0 16px">
+                <template #img>
+                  <i
+                    :class="
+                      sortType
+                        ? 'icon-descending-order'
+                        : 'icon-ascending-order'
+                    "
+                  ></i>
+                </template>
+              </ebtn>
             </el-badge>
           </div>
           <div
@@ -397,31 +387,6 @@
           </div>
         </div>
       </div>
-
-      <!-- 右侧列表卡片切换按钮 <div class="photovoltaic-toggle">
-       <div
-          class="type-card"
-          :class="isActive === 'card' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'card';
-            }
-          "
-        >
-          <i class="icon-matrix"></i>
-        </div>
-         <div
-          class="type-list"
-          :class="isActive === 'list' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'list';
-            }
-          "
-        >
-          <i class="icon-tabulation"></i>
-        </div> 
-      </div>-->
     </div>
     <div class="photovoltaic-data">
       <Card
@@ -433,18 +398,6 @@
         :theme="themeType"
         :isStation="true"
       />
-      <!-- <Card
-        v-if="isActive === 'card'"
-        :dataSource="cardData"
-        :isStation="true"
-        :theme="themeType"
-      />
-       <List
-        v-if="isActive === 'list'"
-        :dataSource="cardData"
-        :isStation="true"
-        :theme="themeType"
-      /> -->
     </div>
     <el-dialog
       class="dialogs"
@@ -485,6 +438,8 @@
 <script>
 import Card from "../homePage/components/card.vue";
 import List from "../homePage/components/list.vue";
+import eselect from "@/components/eselect";
+import ebtn from "@/components/ebtn";
 import PieChart from "@/components/chart/pie/dual-pie-chart-econey.vue";
 import siteBench from "@/views//layout/economicsOperation/benchmarkingManagement/siteBenchmarking/index";
 import intervalBench from "@/views//layout/economicsOperation/benchmarkingManagement/intervalBenchmarking/index";
@@ -499,6 +454,8 @@ export default {
   components: {
     Card,
     List,
+    eselect,
+    ebtn,
     PieChart,
     siteBench,
     intervalBench,
@@ -510,8 +467,8 @@ export default {
     return {
       //风光类型
       levels1Data: [
-        { type: -1, flag: true, id: "F", name: "风电" },
-        { type: -2, flag: true, id: "G", name: "光伏" },
+        { type: -1, flag: true, id: "F", name: "风电", icon: -1 },
+        { type: -2, flag: true, id: "G", name: "光伏", icon: -2 },
       ],
       province: {
         name: "",
@@ -532,15 +489,6 @@ export default {
       listData: [], //列表数据
       allListData: [], //备用列表数据
       companyPowerStationData: [], //全部数据
-      sortArrData: [
-        { label: "发电量", value: "fdl" },
-        { label: "故障损失", value: "gzssdl" },
-        { label: "维护损失", value: "whssdl" },
-        { label: "限电损失", value: "xdssdl" },
-        { label: "性能损失", value: "xnssdl" },
-        { label: "受累损失", value: "slssdl" },
-        { label: "光能利用率", value: "gnlyl" }, //排序条件列表
-      ],
       sortCode: "", //排序条件
       sortType: true, //升序降序
       datetype: "r",
@@ -553,28 +501,15 @@ export default {
         { label: "线路对标", value: "bench4" },
         { label: "阵区对标", value: "bench5" },
       ],
-      benchmarkingVal: "",
+      a_benchmarkingVal: "",
       benchNum: 0,
       displaycheck: false,
       displaybench: false,
-      benchIndex: "",
-      selectTime: "",
-      benchChang: "",
       cardBench: [],
-      ListBench: [],
-      ListBenchs: [],
-      didBench: "",
-      benchCode: "",
       stationData: {},
-      dateTimes: null,
-      timerCurvData: null,
-      eventx: "",
-      eventY: "",
-      stationEg: null,
       cardVal: [],
       cardVals: [],
       cardLists: [],
-      cardListed: [],
       cardNmeCode: [],
       cardSta: [],
       cardPro: [],
@@ -612,68 +547,8 @@ export default {
       this.displaycheck = !this.displaycheck;
     },
     // 切换对标方式
-    changeNum(val) {
-      // clearInterval(this.timerDetial);
-
-      if (val === "") {
-        this.$confirm("是否清空对标方式?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-          .then(async () => {
-            this.$message({
-              type: "success",
-              message: "已清空!",
-              offset: 200,
-              center: true,
-              customClass: "s",
-            });
-            this.selectTime = "";
-            this.displaycheck = false;
-            this.$refs.childCard.changenums();
-          })
-          .catch((_) => {
-            this.benchChang = this.didBench;
-            this.benchmarkingVal = this.didBench;
-          });
-      }
-
-      this.benchChang = val;
-    },
-    // 点击对标方式
-    clickBench(val) {
-      this.didBench = val;
-      let s = this.benchmarkingVal;
-
-      if (
-        this.benchChang !== "" &&
-        val !== "" &&
-        this.benchmarkingVal !== val &&
-        this.benchNum !== 0
-      ) {
-        this.$confirm("是否切换对标方式?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning",
-        })
-          .then(async () => {
-            this.$message({
-              type: "success",
-              message: "切换成功!",
-              offset: 200,
-              center: true,
-              customClass: "s",
-            });
-            this.selectTime = "";
-            this.benchmarkingVal = val;
-            this.$refs.childCard.changenums();
-            this.displaycheck = false;
-          })
-          .catch(() => {
-            this.benchmarkingVal = s;
-          });
-      }
+    changeNum() {
+      this.$refs.childCard.changenums();
     },
     // 删除购物车内容
     removeTable(index) {
@@ -731,10 +606,7 @@ export default {
         this.$refs.childCard.changenBench(this.cardBench);
       }
     },
-    disBenTable() {
-      this.displaycheck = false;
-    },
-    // 点击确认后添加数据
+    // 点击确认后添加数据(公司对标,场际对标)
     setdata(data) {
       this.cardBench = data;
       this.benchNum = data.length;
@@ -743,7 +615,7 @@ export default {
       }
     },
 
-    // 点击确认后添加数据
+    // 点击确认后添加数据(场内对标)
     setdataed(data, val) {
       this.cardBench = data;
       this.benchNum = data.length;
@@ -752,6 +624,7 @@ export default {
         this.displaycheck = false;
       }
     },
+    // 点击确认后添加数据(期次线路阵区对标)
     setdatas(data, val, sta, pro, lin) {
       this.cardSta = sta;
       this.cardPro = pro;
@@ -821,7 +694,9 @@ export default {
         });
       }
     },
+    // 开始对标(场内对标/场际对标)
     openCurvData() {
+      //场内和场际都用cardBench判断开始对标按钮是否可用
       this.benchmarkingVal === "bench1"
         ? this.openCurvDatasedDate()
         : this.openCurvDatased();
@@ -981,9 +856,6 @@ export default {
       this.getDataDetial();
       this.getStationList();
       this.stationLists = this.complyData;
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 场站切换
     stationChange(val) {
@@ -1005,9 +877,6 @@ export default {
         this.listData = this.allListData;
         this.cardData = this.getSortList(this.listData, this.sortCode);
       }
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 切换主题
     themeChange(type) {
@@ -1046,17 +915,76 @@ export default {
   created() {
     this.init();
   },
-  mounted() {
-    // this.timer = setInterval(() => {
-    //   this.getDataDetial();
-    // }, 10000);
-  },
-  unmounted() {
-    clearInterval(this.timer);
-    this.timer = null;
+  computed: {
+    benchmarkingVal: {
+      get() {
+        return this.a_benchmarkingVal;
+      },
+      set(v) {
+        if (
+          v != this.a_benchmarkingVal &&
+          this.benchNum != 0 &&
+          this.benchChang !== ""
+        ) {
+          let t;
+          if (!v) {
+            t = "清空";
+          } else {
+            t = "切换";
+          }
+          this.$confirm(`是否${t}对标方式?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(async () => {
+              this.$message({
+                type: "success",
+                message: `${t}成功!`,
+                offset: 200,
+                center: true,
+                customClass: "s",
+              });
+              this.selectTime = "";
+              this.a_benchmarkingVal = v;
+              this.benchChang = v;
+              this.$refs.childCard.changenums();
+              this.displaycheck = false;
+            })
+            .catch(() => {
+              if (!v) {
+                const te = this.a_benchmarkingVal;
+                this.a_benchmarkingVal = "";
+                this.$nextTick(() => {
+                  this.a_benchmarkingVal = te;
+                });
+              }
+            });
+        } else {
+          this.a_benchmarkingVal = v;
+          this.benchChang = v;
+        }
+      },
+    },
+    sortArrData() {
+      if (this.themeType === "operate") {
+        return [
+          { label: "故障损失", value: "gzssdl" },
+          { label: "维护损失", value: "whssdl" },
+          { label: "限电损失", value: "xdssdl" },
+          { label: "性能损失", value: "xnssdl" },
+          { label: "受累损失", value: "slssdl" },
+        ];
+      } else {
+        return [
+          { label: "光能利用率", value: "gnlyl" },
+          { label: "发电量", value: "fdl" },
+          { label: "理论发电量", value: "llfdl" },
+          { label: "损失电量", value: "ssdl" },
+        ];
+      }
+    },
   },
-
-  watch: {},
 };
 </script>
 
@@ -1199,37 +1127,37 @@ export default {
   color: #ffffff !important;
 }
 
-:deep(.el-input) {
-  .el-input__inner {
-    height: 25px !important;
-    background: #222832 !important;
-    border: 1px solid #465166 !important;
-  }
-}
-
-.photovoltaic-filter .sort {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 140px !important;
-    }
-  }
-}
-
-.photovoltaic-filter .status {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 100px !important;
-    }
-  }
-}
-
-.photovoltaic-filter .station {
-  :deep(.el-input) {
-    .el-input__inner {
-      width: 160px !important;
-    }
-  }
-}
+// :deep(.el-input) {
+//   .el-input__inner {
+//     height: 25px !important;
+//     background: #222832 !important;
+//     border: 1px solid #465166 !important;
+//   }
+// }
+
+// .photovoltaic-filter .sort {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 140px !important;
+//     }
+//   }
+// }
+
+// .photovoltaic-filter .status {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 100px !important;
+//     }
+//   }
+// }
+
+// .photovoltaic-filter .station {
+//   :deep(.el-input) {
+//     .el-input__inner {
+//       width: 160px !important;
+//     }
+//   }
+// }
 
 .dialog-body {
   height: 100%;
@@ -1847,7 +1775,7 @@ export default {
   }
 
   .photovoltaic-data {
-    flex: 1;
+    height: 624px;
   }
 }
 </style>

+ 42 - 17
src/views/layout/economicsOperation/homePage/components/card.vue

@@ -462,6 +462,7 @@ export default {
       eventx: null,
       eventY: null,
       stationEG: [],
+      stationEGAll: [],
       stationGan: [],
       stationGans: [],
       stationGansd: [],
@@ -584,9 +585,13 @@ export default {
     },
     // 购物车添加线路
     handChangeChouses(val) {
-      this.stationEG.children.forEach((s) => {
-        s.children.forEach((z) => {
-          this.stationGans.push(z);
+      let proarr = [];
+      this.stationEGAll.forEach((item) => {
+        item.children.forEach((s) => {
+          proarr.push(s);
+          s.children.forEach((z) => {
+            this.stationGans.push(z);
+          });
         });
       });
       let srd = [];
@@ -600,7 +605,7 @@ export default {
           }
         });
       });
-      this.stationEG.children.forEach((s) => {
+      proarr.forEach((s) => {
         pro.forEach((p) => {
           if (s.id == p) {
             sta.push(s.parentCode);
@@ -617,10 +622,16 @@ export default {
     },
     // 购物车添加阵区
     handChangeChoused(val, vals) {
-      this.stationEG.children.forEach((s) => {
-        s.children.forEach((z) => {
-          z.children.forEach((vals) => {
-            this.stationGansd.push(vals);
+      let linearr = [];
+      let proarr = [];
+      this.stationEGAll.forEach((item) => {
+        item.children.forEach((s) => {
+          proarr.push(s);
+          s.children.forEach((z) => {
+            linearr.push(z);
+            z.children.forEach((vals) => {
+              this.stationGansd.push(vals);
+            });
           });
         });
       });
@@ -636,18 +647,21 @@ export default {
           }
         });
       });
-      this.stationEG.children.forEach((s) => {
-        s.children.forEach((p) => {
-          lin.forEach((l) => {
-            if (p.id == l) {
-              pro.push(p.parentCode);
-              sta.push(s.parentCode);
-            }
-          });
+      linearr.forEach((l) => {
+        lin.forEach((m) => {
+          if (l.id == m) {
+            pro.push(l.parentCode);
+          }
+        });
+      });
+      proarr.forEach((l) => {
+        pro.forEach((m) => {
+          if (l.id == m) {
+            sta.push(l.parentCode);
+          }
         });
       });
       this.stationName = srd;
-
       this.$parent.setdatas(
         val,
         this.stationGansd,
@@ -683,6 +697,14 @@ export default {
       }
       this.overIndexs = 0;
     },
+    // 加入对标弹框线路点击收合
+    handOverIndexs(index) {
+      if (this.overIndexs == index) {
+        this.overIndexs = -1;
+      } else {
+        this.overIndexs = index;
+      }
+    },
     // 添加对标数据
     async addBenchmarking(val, index, event) {
       this.stationEG = [];
@@ -710,6 +732,7 @@ export default {
         treeType: orgType,
       });
       this.stationEG = data;
+      this.stationEGAll = [...this.stationEGAll, this.stationEG];
     },
     // 加入对标
     openCurvDatase() {
@@ -722,6 +745,7 @@ export default {
       this.checkedEG = [];
       this.disBenchList = false;
       this.stationName = [];
+      this.stationEGAll = [];
       this.$parent.setdata(this.benchVal);
     },
 
@@ -757,6 +781,7 @@ export default {
       this.benchVal = data;
       this.checkedCities = data;
       this.checkedEG = data;
+      this.stationEGAll = [];
     },
   },
   mounted() {},

+ 481 - 125
src/views/layout/economicsOperation/homePage/index.vue

@@ -1,19 +1,22 @@
 <template>
   <div class="photovoltaicStation matrix-body">
-    <div style="display: flex">
+    <div style="display: flex; margin-top: 10px">
       <div style="margin-right: 10px">
-        <el-select v-model="typeNode" @change="levels1DataChang">
-          <el-option
-            v-for="(item, index) in levels1Data"
-            :key="index"
-            :label="item.name"
-            :value="item.type"
-          >
-          </el-option>
-        </el-select>
+        <eselect
+          :data="levels1Data"
+          v-model="typeNode"
+          placeholder="请选择"
+          labelKey="name"
+          valueKey="type"
+          @change="levels1DataChang"
+          style="margin-right: 8px; width: 132px"
+        />
       </div>
       <div class="provice-data">
-        <i class="active_icon icon-enterprise"></i>
+        <img
+          src="@assets/img/images/area.png"
+          style="width: 14px; display: inline-block; margin-right: 10px"
+        />
         <span>{{ province && province.name }}</span>
       </div>
     </div>
@@ -149,7 +152,7 @@
     </div>
     <div class="photovoltaic-filter">
       <div class="photovoltaic-left">
-        <span>排序方式:</span>
+        <!-- <span>排序方式:</span>
         <el-select
           v-model="sortCode"
           placeholder="请选择"
@@ -165,8 +168,17 @@
             :value="item.value"
           >
           </el-option>
-        </el-select>
-
+        </el-select> -->
+        <eselect
+          v-model="sortCode"
+          placeholder="排序方式"
+          clearable
+          :data="sortArrData"
+          labelKey="label"
+          valueKey="value"
+          @change="sortFilterchange"
+          style="width: 165px"
+        />
         <div
           class="photovoltaic-sort"
           v-show="sortCode"
@@ -178,85 +190,169 @@
         </div>
         <div class="search-form">
           <div class="form-box">
-            <div class="label">公司:</div>
-            <el-select
+            <eselect
               v-model="checkNode"
-              placeholder="请选择"
-              clearable
+              placeholder="请选择公司"
               multiple
-              collapse-tags
-              size="mini"
+              clearable
+              :data="OrganizationLists"
+              labelKey="aname"
+              valueKey="id"
               @change="areaChange"
-            >
-              <el-option
-                v-for="(item, indexe) in OrganizationLists"
-                :key="indexe"
-                :label="item.aname"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
           </div>
           <div class="form-box">
-            <div
-              class="theme-change"
+            <ebtn
+              style="margin-right: 16px"
               @click="themeChange('maintenance')"
-              :class="themeType === 'maintenance' && 'active-theme'"
+              :actived="themeType === 'maintenance'"
             >
-              <i class="icon-operate"></i>
-              <span>风能利用率</span>
-            </div>
-            <div
-              class="theme-change"
+              <template #img>
+                <i class="icon-operate"></i>
+              </template>
+              风能利用率
+            </ebtn>
+            <ebtn
+              style="margin-right: 12px"
               @click="themeChange('operate')"
-              :class="themeType === 'operate' && 'active-theme'"
+              :actived="themeType === 'operate'"
+            >
+              损失明细
+              <template #img>
+                <i class="icon-maintenance"></i>
+              </template>
+            </ebtn>
+            <eselect
+              v-show="themeType === 'maintenance'"
+              v-model="benchmarkingVal"
+              placeholder="对标方式"
+              clearable
+              :data="benchmarking"
+              @change="changeNum"
+              style="width: 165px"
+            />
+
+            <el-badge
+              v-if="benchNum !== 0 && benchmarkingVal !== ''"
+              @click="hidenBenchList"
+              :value="benchNum"
+              style="margin-left: 20px; cursor: pointer"
+            >
+              <ebtn style="padding: 0 16px">
+                <template #img>
+                  <i
+                    :class="
+                      sortType
+                        ? 'icon-descending-order'
+                        : 'icon-ascending-order'
+                    "
+                  ></i>
+                </template>
+              </ebtn>
+            </el-badge>
+            <div
+              style="z-index: 999; width: 305px; background: #0c0f15"
+              class="window"
+              v-if="displaycheck === true"
             >
-              <i class="icon-maintenance"></i>
-              <span>损失明细</span>
+              <div class="stitBorder"></div>
+              <p class="ststTit header">
+                <span v-if="benchmarkingVal === 'bench2'"> 公司对标 </span>
+                (<span style="color: #d8d8d9">{{ benchNum }}</span
+                >)
+              </p>
+              <div class="lines"></div>
+              <div class="overHidd" v-if="benchmarkingVal === 'bench2'">
+                <ul
+                  v-for="(item, index) in cardBench"
+                  :key="index"
+                  class="stations"
+                >
+                  <li
+                    style="
+                      width: 60%;
+                      white-space: nowrap;
+                      overflow: hidden;
+                      text-overflow: ellipsis;
+                    "
+                  >
+                    {{ item }}
+                  </li>
+
+                  <li @click="removeTable(index)" style="cursor: pointer">
+                    <i class="el-icon-close"></i>
+                  </li>
+                </ul>
+              </div>
+              <el-row
+                class="footerButton"
+                style="position: absolute; bottom: 19px; left: 15px"
+              >
+                <el-button
+                  type="primary"
+                  :disabled="cardBench.length < 2"
+                  round
+                  @click="openCurvDatased"
+                  >开始对标</el-button
+                >
+                <div class="footTitle" @click="clearTable">
+                  <p>清空</p>
+                  <Delete
+                    style="
+                      width: 17px;
+                      height: 17px;
+                      margin-top: 6px;
+                      margin-left: 5px;
+                      color: rgba(255, 102, 0, 1);
+                    "
+                  />
+                </div>
+              </el-row>
             </div>
           </div>
         </div>
       </div>
-      <!--  <div class="photovoltaic-toggle">
-        <div
-          class="type-card"
-          :class="isActive === 'card' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'card';
-            }
-          "
-        >
-          <i class="icon-matrix"></i>
-        </div>
-         <div
-          class="type-list"
-          :class="isActive === 'list' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'list';
-            }
-          "
-        >
-          <i class="icon-tabulation"></i>
-        </div> 
-      </div>-->
     </div>
     <div class="photovoltaic-data">
-      <Card :dataSource="cardData" :typeStr="typeNode" :theme="themeType" />
-      <!--   <Card
-        v-show="isActive === 'card'"
+      <Card
         :dataSource="cardData"
+        ref="childCard"
         :typeStr="typeNode"
         :theme="themeType"
+        :benchmarkingVal="benchmarkingVal"
+        :electTarget="electTarget"
       />
-      <List
+
+      <!-- <List
         v-show="isActive === 'list'"
         :dataSource="companyPowerStationData?.wxsslb"
         :theme="themeType"
         :typeStr="typeNode"
       /> -->
     </div>
+    <el-dialog
+      class="dialogs"
+      width="100%"
+      fullscreen
+      v-model="displaybench"
+      :show-close="true"
+      :destroy-on-close="true"
+    >
+      <template #title>
+        <div class="dialog-title">
+          <img
+            class="dialog-title-img"
+            src="@assets/img/images/dialog-title.png"
+          />
+          <div v-if="benchmarkingVal === 'bench2'" class="title">公司对标</div>
+        </div>
+      </template>
+      <div class="dialog-body">
+        <img class="dialog-img" src="@assets/img/images/dialog.png" />
+        <companyBench v-if="benchmarkingVal === 'bench2'" ref="companyBench" />
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -264,25 +360,32 @@
 import Card from "./components/card.vue";
 import List from "./components/list.vue";
 import PieChart from "@/components/chart/pie/dual-pie-chart-econey.vue";
-// import PieChart from "@/components/chart/pie/pie-chart.vue";
-// import PieStationTop5 from "@/components/chart/pie/pie-station-top5.vue";
+import companyBench from "@/views/layout/economicsOperation/benchmarkingManagement/companyBenchmarking/index.vue";
 import { homePage } from "@/api/economy-homepage.js";
 import { GetOrganization } from "@/api/econ-headerNav.js";
-
+import eselect from "@/components/eselect";
+import ebtn from "@/components/ebtn";
+import { GetRegionInfo } from "@/api/home.js";
 export default {
-  name: "homePageGf", // 公司首页
+  name: "homePageGf", // 区域分析
   components: {
     Card,
     List,
     PieChart,
-    // PieStationTop5,
+    eselect,
+    ebtn,
+    companyBench,
   },
   data() {
     return {
+      //   benchmarkingVal: "",
+      benchmarking: [{ label: "公司对标", value: "bench2" }],
+      benchNum: 0,
+      benchChang: "",
       //风光类型
       levels1Data: [
-        { type: -1, flag: true, id: "F", name: "风电" },
-        { type: -2, flag: true, id: "G", name: "光伏" },
+        { type: -1, flag: true, id: "F", name: "风电", icon: -1 },
+        { type: -2, flag: true, id: "G", name: "光伏", icon: -2 },
       ], //类型
       typeNode: "-1",
       windSpeedRota: null, // 发电统计仪表盘转动角度
@@ -294,7 +397,7 @@ export default {
       timer: null, // 3秒调一次
       OrganizationLists: null,
       checkNode: [], // 选中区域
-      themeType: "maintenance", // 主题模式  能利用率类:maintenance 损失明细类:operate,
+      themeType: "maintenance", // 主题模式  能利用率类:maintenance 损失明细类:operate,
       isActive: "card", // 切换卡片或列表
       dayWindPieData: [],
       stationTop5: [],
@@ -302,34 +405,102 @@ export default {
       listData: [],
       allListData: [],
       companyPowerStationData: {},
-      sortArrData: [
-        { label: "发电量", value: "fdl" },
-        { label: "故障损失", value: "gzssdl" },
-        { label: "维护损失", value: "whssdl" },
-        { label: "限电损失", value: "xdssdl" },
-        { label: "性能损失", value: "xnssdl" },
-        { label: "受累损失", value: "slssdl" },
-        { label: "风能利用率", value: "gnlyl" },
-      ],
       sortCode: "",
       sortType: true,
       datetype: "r",
       wxssTotal: 0,
       stationTopTotal: 0,
+      displaycheck: false,
+      displaybench: false,
+      cardBench: [],
+      a_benchmarkingVal: "",
     };
   },
 
   methods: {
+    // 切换对标方式
+    changeNum(val) {
+      this.$refs.childCard.changenums();
+      this.benchChang = val;
+    },
+    // 打开对标框
+    async hidenBenchList(event) {
+      this.displaycheck = !this.displaycheck;
+    },
+
+    // 点击确认后添加数据
+    setdata(data) {
+      this.cardBench = data;
+      this.benchNum = data.length;
+      if (data.length === 0) {
+        this.displaycheck = false;
+      }
+    },
+    // 开始对标框弹窗
+    openCurvDatased() {
+      this.displaycheck = false;
+      this.displaybench = true;
+      this.curvData();
+    },
+    curvData() {
+      let arr = [];
+      this.cardData.forEach((s) => {
+        this.cardBench.forEach((d) => {
+          if (s.name === d) {
+            arr.push(s.id);
+          }
+        });
+      });
+      this.$nextTick(() => {
+        this.$refs.companyBench &&
+          this.$refs.companyBench.init(arr, this.typeNode);
+      });
+    },
+    // 删除购物车内容
+    removeTable(index) {
+      if (this.benchmarkingVal === "bench2") {
+        this.cardBench.splice(index, 1);
+        this.benchNum = this.cardBench.length;
+        if (this.cardBench.length === 0) {
+          this.displaycheck = false;
+        }
+        this.$refs.childCard.changenBench(this.cardBench);
+      }
+    },
+
+    // 清空购物车
+    clearTable() {
+      this.cardBench = [];
+      this.benchNum = this.cardBench.length;
+
+      this.displaycheck = false;
+      if (this.benchmarkingVal === "bench2") {
+        this.$refs.childCard.changenBench(this.cardBench);
+      }
+    },
     //初加载数据
     init() {
+      let province = JSON.parse(localStorage.getItem("GlobalConfig"));
+      if (!province) {
+        this.getProvinceCode();
+      } else {
+        this.province = {
+          name: province.name,
+          code: province.code,
+        };
+      }
       this.typeNode = this.levels1Data[0].type;
-      this.province = {
-        name: "江苏区域",
-        code: "JS_RGN",
-      };
       this.getOrganizationList();
       this.getDataDetial();
     },
+    async getProvinceCode() {
+      const data = await GetRegionInfo();
+      this.province = {
+        name: data.name,
+        code: data.code,
+      };
+      localStorage.setItem("GlobalConfig", JSON.stringify(data));
+    },
     //切换类型
     levels1DataChang() {
       this.checkNode = [];
@@ -352,13 +523,6 @@ export default {
       this.allListData = this.companyPowerStationData?.wxsslb; //存储备用列表(筛选使用)
       this.cardData = this.getSortList(this.listData, this.sortCode);
       // 五项损失统计饼图
-      //   this.dayWindPieData = {
-      //     GZSS: this.companyPowerStationData?.wxsstb?.gzss,
-      //     WHSS: this.companyPowerStationData?.wxsstb?.whss,
-      //     SLSS: this.companyPowerStationData?.wxsstb?.slss,
-      //     XDSS: this.companyPowerStationData?.wxsstb?.xdss,
-      //     XNSS: this.companyPowerStationData?.wxsstb?.xnss,
-      //   };
       this.dayWindPieData = [
         {
           name: "性能损失",
@@ -399,7 +563,9 @@ export default {
     // 获取公司列表
     getOrganizationList() {
       GetOrganization({ type: this.typeNode }).then(({ data }) => {
-        this.OrganizationLists = data.filter((item) => item.id != "JS_RGN");
+        this.OrganizationLists = data.filter(
+          (item) => item.id != this.province.code
+        );
       });
     },
     //排序方式改变(升序降序)
@@ -436,9 +602,6 @@ export default {
         this.listData = this.allListData;
         this.cardData = this.getSortList(this.listData, this.sortCode);
       }
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 切换主题
     themeChange(type) {
@@ -476,20 +639,217 @@ export default {
     clearInterval(this.timer);
     this.timer = null;
   },
-  computed: {},
+  computed: {
+    benchmarkingVal: {
+      get() {
+        return this.a_benchmarkingVal;
+      },
+      set(v) {
+        if (
+          v != this.a_benchmarkingVal &&
+          this.benchNum != 0 &&
+          this.benchChang !== ""
+        ) {
+          let t;
+          if (!v) {
+            t = "清空";
+          } else {
+            t = "切换";
+          }
+          this.$confirm(`是否${t}对标方式?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(async () => {
+              this.$message({
+                type: "success",
+                message: `${t}成功!`,
+                offset: 200,
+                center: true,
+                customClass: "s",
+              });
+              this.selectTime = "";
+              this.a_benchmarkingVal = v;
+              this.benchChang = v;
+              this.$refs.childCard.changenums();
+              this.displaycheck = false;
+            })
+            .catch(() => {
+              if (!v) {
+                const te = this.a_benchmarkingVal;
+                this.a_benchmarkingVal = "";
+                this.$nextTick(() => {
+                  this.a_benchmarkingVal = te;
+                });
+              }
+            });
+        } else {
+          this.a_benchmarkingVal = v;
+          this.benchChang = v;
+        }
+      },
+    },
+    sortArrData() {
+      if (this.themeType === "operate") {
+        return [
+          { label: "故障损失", value: "gzssdl" },
+          { label: "维护损失", value: "whssdl" },
+          { label: "限电损失", value: "xdssdl" },
+          { label: "性能损失", value: "xnssdl" },
+          { label: "受累损失", value: "slssdl" },
+        ];
+      } else {
+        return [
+          { label: "风能利用率", value: "gnlyl" },
+          { label: "发电量", value: "fdl" },
+          { label: "理论发电量", value: "llfdl" },
+          { label: "损失电量", value: "ssdl" },
+        ];
+      }
+    },
+  },
   watch: {},
 };
 </script>
 
 <style lang="less" scoped>
-:deep(.el-input) {
-  .el-input__inner {
-    background: #222832 !important;
-    border: 1px solid #465166 !important;
-    height: 25px !important;
-    width: 140px;
+.search-form {
+  /deep/ .el-badge__content--danger {
+    background: #ff6600;
+    border: 1px solid #a5a5a5;
   }
+
+  /deep/ .el-badge__content.is-fixed {
+    top: 5px;
+    right: 10px;
+  }
+}
+.window {
+  position: absolute;
+  top: 88%;
+  right: -60%;
+  height: 350px;
+  border: 1px solid #094493;
+  border-image: linear-gradient(
+      0deg,
+      rgba(28, 156, 255, 0),
+      rgba(28, 156, 255, 0.6),
+      rgba(28, 156, 255, 0.8)
+    )
+    1 1;
+  background: rgba(29, 34, 43, 0.9) !important;
+  border-radius: 3px;
+  box-shadow: 0 0 22px rgba(0, 70, 199, 0.2) inset !important;
+
+  .stitBorder {
+    position: absolute;
+    width: 70%;
+    height: 2px;
+    top: 0;
+    background-image: linear-gradient(to right, #1c99ff, rgba(0, 70, 199, 0));
+  }
+
+  //box-shadow: 0 0 22px rgb(0 70 199 / 20%) inset !important;
+}
+.ststTit {
+  width: 100%;
+  text-align: center;
+  height: 44px;
+  color: #1c99ff;
+  font-size: 16px;
+  line-height: 44px;
+  box-sizing: border-box;
+
+  //cursor: move;
 }
+
+.lines {
+  width: 99%;
+  height: 1px;
+  margin-left: 1px;
+  position: relative;
+  background: #3a3f43;
+
+  &:after {
+    content: "";
+    display: block;
+    width: 9px;
+    height: 1px;
+    background-color: #fff;
+    position: absolute;
+    right: 0;
+  }
+
+  &:before {
+    content: "";
+    display: block;
+    width: 8px;
+    height: 1px;
+    background-color: #fff;
+    position: absolute;
+    left: 0;
+  }
+}
+
+.overHidd {
+  overflow: scroll;
+  height: 70%;
+  width: 100%;
+}
+
+.footerButton {
+  display: flex;
+  justify-content: space-between;
+  width: 90%;
+
+  .footTitle {
+    height: 30px;
+    line-height: 30px;
+    display: flex;
+
+    p {
+      font-size: 14px;
+      font-family: Microsoft YaHei;
+      font-weight: 300;
+      color: #d3d3d3;
+    }
+  }
+
+  .el-button:last-of-type {
+    width: 88px;
+    color: rgba(28, 108, 255, 1);
+    border-radius: 3px;
+    background: rgba(28, 108, 255, 0);
+    border: 1px solid !important;
+    border-image: linear-gradient(0deg, rgba(28, 156, 255, 0), #1d74eb, #1d74eb)
+      1 1 !important;
+  }
+
+  /deep/ .el-button.is-round {
+    padding: 0 10px !important;
+  }
+}
+.stations {
+  height: 39px;
+  line-height: 39px;
+  width: 100%;
+  display: flex;
+  border-bottom: 1px solid rgba(76, 85, 90, 1);
+  justify-content: space-between;
+  font-size: 13px;
+  padding-right: 20px;
+  padding-left: 20px;
+  color: rgba(211, 211, 211, 1);
+}
+// :deep(.el-input) {
+//   .el-input__inner {
+//     background: #222832 !important;
+//     border: 1px solid #465166 !important;
+//     height: 25px !important;
+//     width: 140px;
+//   }
+// }
 .photovoltaicStation {
   display: flex;
   flex-direction: column;
@@ -497,31 +857,26 @@ export default {
   padding: 0 20px;
 
   .provice-data {
-    width: 132px;
-    padding: 0 14px;
-    height: 25px;
-    line-height: 25px;
-    background: rgba(0, 70, 199, 0.2);
-    border-radius: 16px;
-    text-align: center;
-    margin-right: 15px;
-    cursor: pointer;
+    padding: 0 12px;
+    height: 28px;
+    line-height: 28px;
+    background: #1b6bff66;
+    border-radius: 4px;
+    // text-align: center;
+    // margin-right: 15px;
+    // cursor: pointer;
 
     span {
-      width: 29px;
-      height: 12px;
       font-size: 14px;
       font-family: Microsoft YaHei;
       font-weight: 400;
       color: #fff;
     }
 
-    i {
-      font-size: 16px;
-      color: #1b99ff;
-      position: relative;
-      margin-right: 9px;
-      vertical-align: -9%;
+    img {
+      vertical-align: top;
+      height: 14px;
+      margin-top: 6px;
     }
   }
 
@@ -1023,6 +1378,7 @@ export default {
           height: 50px;
           align-items: center;
           margin-right: 10px;
+          position: relative;
           .theme-change {
             display: flex;
             align-items: center;
@@ -1107,7 +1463,7 @@ export default {
   }
 
   .photovoltaic-data {
-    flex: 1;
+    height: 624px;
   }
 }
 </style>

+ 479 - 124
src/views/layout/economicsOperation/homePage/indexGF.vue

@@ -1,19 +1,22 @@
 <template>
   <div class="photovoltaicStation matrix-body">
-    <div style="display: flex">
+    <div style="display: flex; margin-top: 10px">
       <div style="margin-right: 10px">
-        <el-select v-model="typeNode" @change="levels1DataChang">
-          <el-option
-            v-for="(item, index) in levels1Data"
-            :key="index"
-            :label="item.name"
-            :value="item.type"
-          >
-          </el-option>
-        </el-select>
+        <eselect
+          :data="levels1Data"
+          v-model="typeNode"
+          placeholder="请选择"
+          labelKey="name"
+          valueKey="type"
+          @change="levels1DataChang"
+          style="margin-right: 8px; width: 132px"
+        />
       </div>
       <div class="provice-data">
-        <i class="active_icon icon-enterprise"></i>
+        <img
+          src="@assets/img/images/area.png"
+          style="width: 14px; display: inline-block; margin-right: 10px"
+        />
         <span>{{ province && province.name }}</span>
       </div>
     </div>
@@ -149,7 +152,7 @@
     </div>
     <div class="photovoltaic-filter">
       <div class="photovoltaic-left">
-        <span>排序方式:</span>
+        <!-- <span>排序方式:</span>
         <el-select
           v-model="sortCode"
           placeholder="请选择"
@@ -165,8 +168,17 @@
             :value="item.value"
           >
           </el-option>
-        </el-select>
-
+        </el-select> -->
+        <eselect
+          v-model="sortCode"
+          placeholder="排序方式"
+          clearable
+          :data="sortArrData"
+          labelKey="label"
+          valueKey="value"
+          @change="sortFilterchange"
+          style="width: 165px"
+        />
         <div
           class="photovoltaic-sort"
           v-show="sortCode"
@@ -178,85 +190,169 @@
         </div>
         <div class="search-form">
           <div class="form-box">
-            <div class="label">公司:</div>
-            <el-select
+            <eselect
               v-model="checkNode"
-              placeholder="请选择"
-              clearable
+              placeholder="请选择公司"
               multiple
-              collapse-tags
-              size="mini"
+              clearable
+              :data="OrganizationLists"
+              labelKey="aname"
+              valueKey="id"
               @change="areaChange"
-            >
-              <el-option
-                v-for="(item, indexe) in OrganizationLists"
-                :key="indexe"
-                :label="item.aname"
-                :value="item.id"
-              >
-              </el-option>
-            </el-select>
+              style="width: 165px"
+            />
           </div>
           <div class="form-box">
-            <div
-              class="theme-change"
+            <ebtn
+              style="margin-right: 16px"
               @click="themeChange('maintenance')"
-              :class="themeType === 'maintenance' && 'active-theme'"
+              :actived="themeType === 'maintenance'"
             >
-              <i class="icon-operate"></i>
-              <span>光能利用率</span>
-            </div>
-            <div
-              class="theme-change"
+              <template #img>
+                <i class="icon-operate"></i>
+              </template>
+              光能利用率
+            </ebtn>
+            <ebtn
+              style="margin-right: 12px"
               @click="themeChange('operate')"
-              :class="themeType === 'operate' && 'active-theme'"
+              :actived="themeType === 'operate'"
+            >
+              损失明细
+              <template #img>
+                <i class="icon-maintenance"></i>
+              </template>
+            </ebtn>
+            <eselect
+              v-show="themeType === 'maintenance'"
+              v-model="benchmarkingVal"
+              placeholder="对标方式"
+              clearable
+              :data="benchmarking"
+              @change="changeNum"
+              style="width: 165px"
+            />
+
+            <el-badge
+              v-if="benchNum !== 0 && benchmarkingVal !== ''"
+              @click="hidenBenchList"
+              :value="benchNum"
+              style="margin-left: 20px; cursor: pointer"
+            >
+              <ebtn style="padding: 0 16px">
+                <template #img>
+                  <i
+                    :class="
+                      sortType
+                        ? 'icon-descending-order'
+                        : 'icon-ascending-order'
+                    "
+                  ></i>
+                </template>
+              </ebtn>
+            </el-badge>
+            <div
+              style="z-index: 999; width: 305px; background: #0c0f15"
+              class="window"
+              v-if="displaycheck === true"
             >
-              <i class="icon-maintenance"></i>
-              <span>损失明细</span>
+              <div class="stitBorder"></div>
+              <p class="ststTit header">
+                <span v-if="benchmarkingVal === 'bench2'"> 公司对标 </span>
+                (<span style="color: #d8d8d9">{{ benchNum }}</span
+                >)
+              </p>
+              <div class="lines"></div>
+              <div class="overHidd" v-if="benchmarkingVal === 'bench2'">
+                <ul
+                  v-for="(item, index) in cardBench"
+                  :key="index"
+                  class="stations"
+                >
+                  <li
+                    style="
+                      width: 60%;
+                      white-space: nowrap;
+                      overflow: hidden;
+                      text-overflow: ellipsis;
+                    "
+                  >
+                    {{ item }}
+                  </li>
+
+                  <li @click="removeTable(index)" style="cursor: pointer">
+                    <i class="el-icon-close"></i>
+                  </li>
+                </ul>
+              </div>
+              <el-row
+                class="footerButton"
+                style="position: absolute; bottom: 19px; left: 15px"
+              >
+                <el-button
+                  type="primary"
+                  :disabled="cardBench.length < 2"
+                  round
+                  @click="openCurvDatased"
+                  >开始对标</el-button
+                >
+                <div class="footTitle" @click="clearTable">
+                  <p>清空</p>
+                  <Delete
+                    style="
+                      width: 17px;
+                      height: 17px;
+                      margin-top: 6px;
+                      margin-left: 5px;
+                      color: rgba(255, 102, 0, 1);
+                    "
+                  />
+                </div>
+              </el-row>
             </div>
           </div>
         </div>
       </div>
-      <!--  <div class="photovoltaic-toggle">
-        <div
-          class="type-card"
-          :class="isActive === 'card' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'card';
-            }
-          "
-        >
-          <i class="icon-matrix"></i>
-        </div>
-         <div
-          class="type-list"
-          :class="isActive === 'list' && 'actived-toggle'"
-          @click="
-            () => {
-              this.isActive = 'list';
-            }
-          "
-        >
-          <i class="icon-tabulation"></i>
-        </div> 
-      </div>-->
     </div>
     <div class="photovoltaic-data">
-      <Card :dataSource="cardData" :typeStr="typeNode" :theme="themeType" />
-      <!--   <Card
-        v-show="isActive === 'card'"
+      <Card
         :dataSource="cardData"
+        ref="childCard"
         :typeStr="typeNode"
         :theme="themeType"
+        :benchmarkingVal="benchmarkingVal"
+        :electTarget="electTarget"
       />
-      <List
+
+      <!-- <List
         v-show="isActive === 'list'"
         :dataSource="companyPowerStationData?.wxsslb"
         :theme="themeType"
         :typeStr="typeNode"
       /> -->
     </div>
+    <el-dialog
+      class="dialogs"
+      width="100%"
+      fullscreen
+      v-model="displaybench"
+      :show-close="true"
+      :destroy-on-close="true"
+    >
+      <template #title>
+        <div class="dialog-title">
+          <img
+            class="dialog-title-img"
+            src="@assets/img/images/dialog-title.png"
+          />
+          <div v-if="benchmarkingVal === 'bench2'" class="title">公司对标</div>
+        </div>
+      </template>
+      <div class="dialog-body">
+        <img class="dialog-img" src="@assets/img/images/dialog.png" />
+        <companyBench v-if="benchmarkingVal === 'bench2'" ref="companyBench" />
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -264,25 +360,31 @@
 import Card from "./components/card.vue";
 import List from "./components/list.vue";
 import PieChart from "@/components/chart/pie/dual-pie-chart-econey.vue";
-// import PieChart from "@/components/chart/pie/pie-chart.vue";
-// import PieStationTop5 from "@/components/chart/pie/pie-station-top5.vue";
+import companyBench from "@/views/layout/economicsOperation/benchmarkingManagement/companyBenchmarking/index.vue";
 import { homePage } from "@/api/economy-homepage.js";
 import { GetOrganization } from "@/api/econ-headerNav.js";
-
+import eselect from "@/components/eselect";
+import ebtn from "@/components/ebtn";
+import { GetRegionInfo } from "@/api/home.js";
 export default {
-  name: "homePageGf", // 公司首页
+  name: "homePageGf", // 区域分析
   components: {
     Card,
     List,
     PieChart,
-    // PieStationTop5,
+    eselect,
+    ebtn,
+    companyBench,
   },
   data() {
     return {
+      benchmarking: [{ label: "公司对标", value: "bench2" }],
+      benchNum: 0,
+      benchChang: "",
       //风光类型
       levels1Data: [
-        { type: -1, flag: true, id: "F", name: "风电" },
-        { type: -2, flag: true, id: "G", name: "光伏" },
+        { type: -1, flag: true, id: "F", name: "风电", icon: -1 },
+        { type: -2, flag: true, id: "G", name: "光伏", icon: -2 },
       ], //类型
       typeNode: "-2",
       windSpeedRota: null, // 发电统计仪表盘转动角度
@@ -302,34 +404,102 @@ export default {
       listData: [],
       allListData: [],
       companyPowerStationData: {},
-      sortArrData: [
-        { label: "发电量", value: "fdl" },
-        { label: "故障损失", value: "gzssdl" },
-        { label: "维护损失", value: "whssdl" },
-        { label: "限电损失", value: "xdssdl" },
-        { label: "性能损失", value: "xnssdl" },
-        { label: "受累损失", value: "slssdl" },
-        { label: "光能利用率", value: "gnlyl" },
-      ],
       sortCode: "",
       sortType: true,
       datetype: "r",
       wxssTotal: 0,
       stationTopTotal: 0,
+      displaycheck: false,
+      displaybench: false,
+      cardBench: [],
+      a_benchmarkingVal: "",
     };
   },
 
   methods: {
+    // 切换对标方式
+    changeNum(val) {
+      this.$refs.childCard.changenums();
+      this.benchChang = val;
+    },
+    // 打开对标框
+    async hidenBenchList(event) {
+      this.displaycheck = !this.displaycheck;
+    },
+
+    // 点击确认后添加数据
+    setdata(data) {
+      this.cardBench = data;
+      this.benchNum = data.length;
+      if (data.length === 0) {
+        this.displaycheck = false;
+      }
+    },
+    // 开始对标框弹窗
+    openCurvDatased() {
+      this.displaycheck = false;
+      this.displaybench = true;
+      this.curvData();
+    },
+    curvData() {
+      let arr = [];
+      this.cardData.forEach((s) => {
+        this.cardBench.forEach((d) => {
+          if (s.name === d) {
+            arr.push(s.id);
+          }
+        });
+      });
+      this.$nextTick(() => {
+        this.$refs.companyBench &&
+          this.$refs.companyBench.init(arr, this.typeNode);
+      });
+    },
+    // 删除购物车内容
+    removeTable(index) {
+      if (this.benchmarkingVal === "bench2") {
+        this.cardBench.splice(index, 1);
+        this.benchNum = this.cardBench.length;
+        if (this.cardBench.length === 0) {
+          this.displaycheck = false;
+        }
+        this.$refs.childCard.changenBench(this.cardBench);
+      }
+    },
+
+    // 清空购物车
+    clearTable() {
+      this.cardBench = [];
+      this.benchNum = this.cardBench.length;
+
+      this.displaycheck = false;
+      if (this.benchmarkingVal === "bench2") {
+        this.$refs.childCard.changenBench(this.cardBench);
+      }
+    },
     //初加载数据
     init() {
+      let province = JSON.parse(localStorage.getItem("GlobalConfig"));
+      if (!province) {
+        this.getProvinceCode();
+      } else {
+        this.province = {
+          name: province.name,
+          code: province.code,
+        };
+      }
       this.typeNode = this.levels1Data[1].type;
-      this.province = {
-        name: "江苏区域",
-        code: "JS_RGN",
-      };
       this.getOrganizationList();
       this.getDataDetial();
     },
+    async getProvinceCode() {
+      const data = await GetRegionInfo();
+      this.province = {
+        name: data.name,
+        code: data.code,
+      };
+      localStorage.setItem("GlobalConfig", JSON.stringify(data));
+    },
     //切换类型
     levels1DataChang() {
       this.checkNode = [];
@@ -352,13 +522,6 @@ export default {
       this.allListData = this.companyPowerStationData?.wxsslb; //存储备用列表(筛选使用)
       this.cardData = this.getSortList(this.listData, this.sortCode);
       // 五项损失统计饼图
-      //   this.dayWindPieData = {
-      //     GZSS: this.companyPowerStationData?.wxsstb?.gzss,
-      //     WHSS: this.companyPowerStationData?.wxsstb?.whss,
-      //     SLSS: this.companyPowerStationData?.wxsstb?.slss,
-      //     XDSS: this.companyPowerStationData?.wxsstb?.xdss,
-      //     XNSS: this.companyPowerStationData?.wxsstb?.xnss,
-      //   };
       this.dayWindPieData = [
         {
           name: "性能损失",
@@ -399,7 +562,9 @@ export default {
     // 获取公司列表
     getOrganizationList() {
       GetOrganization({ type: this.typeNode }).then(({ data }) => {
-        this.OrganizationLists = data.filter((item) => item.id != "JS_RGN");
+        this.OrganizationLists = data.filter(
+          (item) => item.id != this.province.code
+        );
       });
     },
     //排序方式改变(升序降序)
@@ -436,9 +601,6 @@ export default {
         this.listData = this.allListData;
         this.cardData = this.getSortList(this.listData, this.sortCode);
       }
-      //   this.timer = setInterval(() => {
-      //     this.getDataDetial();
-      //   }, 10000);
     },
     // 切换主题
     themeChange(type) {
@@ -476,20 +638,217 @@ export default {
     clearInterval(this.timer);
     this.timer = null;
   },
-  computed: {},
+  computed: {
+    benchmarkingVal: {
+      get() {
+        return this.a_benchmarkingVal;
+      },
+      set(v) {
+        if (
+          v != this.a_benchmarkingVal &&
+          this.benchNum != 0 &&
+          this.benchChang !== ""
+        ) {
+          let t;
+          if (!v) {
+            t = "清空";
+          } else {
+            t = "切换";
+          }
+          this.$confirm(`是否${t}对标方式?`, "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning",
+          })
+            .then(async () => {
+              this.$message({
+                type: "success",
+                message: `${t}成功!`,
+                offset: 200,
+                center: true,
+                customClass: "s",
+              });
+              this.selectTime = "";
+              this.a_benchmarkingVal = v;
+              this.benchChang = v;
+              this.$refs.childCard.changenums();
+              this.displaycheck = false;
+            })
+            .catch(() => {
+              if (!v) {
+                const te = this.a_benchmarkingVal;
+                this.a_benchmarkingVal = "";
+                this.$nextTick(() => {
+                  this.a_benchmarkingVal = te;
+                });
+              }
+            });
+        } else {
+          this.a_benchmarkingVal = v;
+          this.benchChang = v;
+        }
+      },
+    },
+    sortArrData() {
+      if (this.themeType === "operate") {
+        return [
+          { label: "故障损失", value: "gzssdl" },
+          { label: "维护损失", value: "whssdl" },
+          { label: "限电损失", value: "xdssdl" },
+          { label: "性能损失", value: "xnssdl" },
+          { label: "受累损失", value: "slssdl" },
+        ];
+      } else {
+        return [
+          { label: "光能利用率", value: "gnlyl" },
+          { label: "发电量", value: "fdl" },
+          { label: "理论发电量", value: "llfdl" },
+          { label: "损失电量", value: "ssdl" },
+        ];
+      }
+    },
+  },
   watch: {},
 };
 </script>
 
 <style lang="less" scoped>
-:deep(.el-input) {
-  .el-input__inner {
-    background: #222832 !important;
-    border: 1px solid #465166 !important;
-    height: 25px !important;
-    width: 140px;
+.search-form {
+  /deep/ .el-badge__content--danger {
+    background: #ff6600;
+    border: 1px solid #a5a5a5;
   }
+
+  /deep/ .el-badge__content.is-fixed {
+    top: 5px;
+    right: 10px;
+  }
+}
+.window {
+  position: absolute;
+  top: 88%;
+  right: -60%;
+  height: 350px;
+  border: 1px solid #094493;
+  border-image: linear-gradient(
+      0deg,
+      rgba(28, 156, 255, 0),
+      rgba(28, 156, 255, 0.6),
+      rgba(28, 156, 255, 0.8)
+    )
+    1 1;
+  background: rgba(29, 34, 43, 0.9) !important;
+  border-radius: 3px;
+  box-shadow: 0 0 22px rgba(0, 70, 199, 0.2) inset !important;
+
+  .stitBorder {
+    position: absolute;
+    width: 70%;
+    height: 2px;
+    top: 0;
+    background-image: linear-gradient(to right, #1c99ff, rgba(0, 70, 199, 0));
+  }
+
+  //box-shadow: 0 0 22px rgb(0 70 199 / 20%) inset !important;
+}
+.ststTit {
+  width: 100%;
+  text-align: center;
+  height: 44px;
+  color: #1c99ff;
+  font-size: 16px;
+  line-height: 44px;
+  box-sizing: border-box;
+
+  //cursor: move;
 }
+
+.lines {
+  width: 99%;
+  height: 1px;
+  margin-left: 1px;
+  position: relative;
+  background: #3a3f43;
+
+  &:after {
+    content: "";
+    display: block;
+    width: 9px;
+    height: 1px;
+    background-color: #fff;
+    position: absolute;
+    right: 0;
+  }
+
+  &:before {
+    content: "";
+    display: block;
+    width: 8px;
+    height: 1px;
+    background-color: #fff;
+    position: absolute;
+    left: 0;
+  }
+}
+
+.overHidd {
+  overflow: scroll;
+  height: 70%;
+  width: 100%;
+}
+
+.footerButton {
+  display: flex;
+  justify-content: space-between;
+  width: 90%;
+
+  .footTitle {
+    height: 30px;
+    line-height: 30px;
+    display: flex;
+
+    p {
+      font-size: 14px;
+      font-family: Microsoft YaHei;
+      font-weight: 300;
+      color: #d3d3d3;
+    }
+  }
+
+  .el-button:last-of-type {
+    width: 88px;
+    color: rgba(28, 108, 255, 1);
+    border-radius: 3px;
+    background: rgba(28, 108, 255, 0);
+    border: 1px solid !important;
+    border-image: linear-gradient(0deg, rgba(28, 156, 255, 0), #1d74eb, #1d74eb)
+      1 1 !important;
+  }
+
+  /deep/ .el-button.is-round {
+    padding: 0 10px !important;
+  }
+}
+.stations {
+  height: 39px;
+  line-height: 39px;
+  width: 100%;
+  display: flex;
+  border-bottom: 1px solid rgba(76, 85, 90, 1);
+  justify-content: space-between;
+  font-size: 13px;
+  padding-right: 20px;
+  padding-left: 20px;
+  color: rgba(211, 211, 211, 1);
+}
+// :deep(.el-input) {
+//   .el-input__inner {
+//     background: #222832 !important;
+//     border: 1px solid #465166 !important;
+//     height: 25px !important;
+//     width: 140px;
+//   }
+// }
 .photovoltaicStation {
   display: flex;
   flex-direction: column;
@@ -497,31 +856,26 @@ export default {
   padding: 0 20px;
 
   .provice-data {
-    width: 132px;
-    padding: 0 14px;
-    height: 25px;
-    line-height: 25px;
-    background: rgba(0, 70, 199, 0.2);
-    border-radius: 16px;
-    text-align: center;
-    margin-right: 15px;
-    cursor: pointer;
+    padding: 0 12px;
+    height: 28px;
+    line-height: 28px;
+    background: #1b6bff66;
+    border-radius: 4px;
+    // text-align: center;
+    // margin-right: 15px;
+    // cursor: pointer;
 
     span {
-      width: 29px;
-      height: 12px;
       font-size: 14px;
       font-family: Microsoft YaHei;
       font-weight: 400;
       color: #fff;
     }
 
-    i {
-      font-size: 16px;
-      color: #1b99ff;
-      position: relative;
-      margin-right: 9px;
-      vertical-align: -9%;
+    img {
+      vertical-align: top;
+      height: 14px;
+      margin-top: 6px;
     }
   }
 
@@ -1023,6 +1377,7 @@ export default {
           height: 50px;
           align-items: center;
           margin-right: 10px;
+          position: relative;
           .theme-change {
             display: flex;
             align-items: center;
@@ -1107,7 +1462,7 @@ export default {
   }
 
   .photovoltaic-data {
-    flex: 1;
+    height: 624px;
   }
 }
 </style>

+ 72 - 80
src/views/layout/stateMonitor/AGCMonitor/components/AGCSun.vue

@@ -34,7 +34,7 @@
                                     <p>有功设定限值</p>
                                     <p class="agc_valuse">
 
-                                        <span @contextmenu="v('YGSDXE', '有功设定限值', item.ZXDZD, item,item.ZXDZDdate)">{{
+                                        <span style="cursor: pointer" @contextmenu="v('YGSDXE', '有功设定限值', item.ZXDZL, item,item.ZXDZDdate)">{{
                                                 item.ZXDZDNum || "---"
                                             }}</span>
 
@@ -46,7 +46,7 @@
                                     <p>出线功率</p>
                                     <p class="agc_valuse">
 
-                                        <span @contextmenu="v('CXGL', '出线功率', item.ZCXYG, item,item.ZCXYGdate)">{{
+                                        <span style="cursor: pointer" @contextmenu="v('CXGL', '出线功率', item.ZCXYG, item,item.ZCXYGdate)">{{
                                                 item.ZCXYGNum || "---"
                                             }}</span>
 
@@ -66,7 +66,7 @@
                                     <p>理论功率</p>
                                     <p class="agc_valuse">
 
-                                        <span @contextmenu="v('LLGL', '理论功率', item.SSZNHGLZS, item,item.SSZNHGLZSdate)">{{
+                                        <span style="cursor: pointer" @contextmenu="v('LLGL', '理论功率', item.SSZNHGLZS, item,item.SSZNHGLZSdate)">{{
                                                 item.SSZNHGLZSNum || "---"
                                             }}</span>
 
@@ -77,7 +77,7 @@
                                 <td>
                                     <p>预测功率</p>
                                     <p class="agc_valuse">
-                                        <span @contextmenu="v('YCGL', '预测功率', item.ZYCGL, item,item.ZYCGLdate)">{{
+                                        <span style="cursor: pointer" @contextmenu="v('YCGL', '预测功率', item.ZYCGL, item,item.ZYCGLdate)">{{
                                                 item.ZYCGLNum || "---"
                                             }}</span>
                                         <span>MW</span></p>
@@ -267,10 +267,10 @@
                                 <p>
                                     &nbsp;有功设定限值
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val"
                                             @contextmenu="
-                        v('YGSDXE', '有功设定限值', item.AGC002, item,item.AGC002date)
+                        v('YGSDXE', '有功设定限值', item.AIAGC002, item,item.AGC002date)
                       "
                                     >{{ item.AGC002Num || "---" }}</span
                                     >
@@ -280,9 +280,9 @@
                                 <p class="pw_val">
                                     &nbsp;出线功率
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val "
-                                            @contextmenu="v('CXGL', '出线功率', item.AGC001, item,item.AGC001date)"
+                                            @contextmenu="v('CXGL', '出线功率', item.AIAGC001, item,item.AGC001date)"
                                     >{{ item.AGC001Num || "---" }}</span
                                     >
 
@@ -293,10 +293,10 @@
                                 <p>
                                     &nbsp;AGC可调上限
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val"
                                             @contextmenu="
-                        v('AGCKTSX', 'AGC可调上限', item.AGC003, item,item.AGC003date)
+                        v('AGCKTSX', 'AGC可调上限', item.AIAGC003, item,item.AGC003date)
                       "
                                     >{{ item.AGC003Num || "---" }}</span
                                     >
@@ -306,9 +306,9 @@
                                 <p>
                                     &nbsp;理论功率
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val"
-                                            @contextmenu="v('LLGL', '理论功率', item.AGC010, item,item.AGC010date)"
+                                            @contextmenu="v('LLGL', '理论功率', item.SSZNHGLZS, item,item.AGC010date)"
                                     >{{ item.AGC010Num || "---" }}</span
                                     >
 
@@ -319,10 +319,10 @@
                                 <p>
                                     &nbsp;AGC可调下限
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val"
                                             @contextmenu="
-                        v('AGCKTXX', 'AGC可调下限', item.AGC004, item,item.AGC004date)
+                        v('AGCKTXX', 'AGC可调下限', item.AIAGC004, item,item.AGC004date)
                       "
                                     >{{ item.AGC004Num || "---" }}</span
                                     >
@@ -332,10 +332,10 @@
                                 <p>
                                     &nbsp;预测功率
 
-                                    <span
+                                    <span style="cursor: pointer"
                                             class="agc_val"
                                             @contextmenu="
-                        v('YCGL', '预测功率', item.AIGLYCD001, item,item.AIGLYCD001date)
+                        v('YCGL', '预测功率', item.ZYCGL, item,item.AIGLYCD001date)
                       "
                                     >{{ item.AIGLYCD001Num || "---" }}</span
                                     >
@@ -347,53 +347,53 @@
                         <li class="agc_footer">
                             <!--- 1红其他绿 --->
                             <div>
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zhaung.png"
                                         v-if="item.AGC006Num == '1'"
-                                        @contextmenu="v('AGCTR', 'AGC投入', item.AGC006, item,item.AGC006date)"
+                                        @contextmenu="v('AGCTR', 'AGC投入', item.DIAGC006, item,item.AGC006date)"
                                 />
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zheng.png"
-                                        @contextmenu="v('AGCTR', 'AGC投入', item.AGC006, item,item.AGC006date)"
+                                        @contextmenu="v('AGCTR', 'AGC投入', item.DIAGC006, item,item.AGC006date)"
                                         v-else
                                 />
                                 <p>AGC投入</p>
                             </div>
                             <div>
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zhaung.png"
-                                        @contextmenu="v('AGCYF', 'AGC远方', item.AGC005, item,item.AGC005date)"
+                                        @contextmenu="v('AGCYF', 'AGC远方', item.DIAGC005, item,item.AGC005date)"
                                         v-if="item.AGC005Num == '1'"
                                 />
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zheng.png"
-                                        @contextmenu="v('AGCYF', 'AGC远方', item.AGC005, item,item.AGC005date)"
+                                        @contextmenu="v('AGCYF', 'AGC远方', item.DIAGC005, item,item.AGC005date)"
                                         v-else
                                 />
                                 <p>AGC远方</p>
                             </div>
                             <div>
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zhaung.png"
                                         v-if="item.AGC008Num == '1'"
-                                        @contextmenu="v('YGZBS', '有功增闭锁', item.AGC008, item,item.AGC008date)"
+                                        @contextmenu="v('YGZBS', '有功增闭锁', item.DIAGC008, item,item.AGC008date)"
                                 />
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zheng.png"
-                                        @contextmenu="v('YGZBS', '有功增闭锁', item.AGC008, item,item.AGC008date)"
+                                        @contextmenu="v('YGZBS', '有功增闭锁', item.DIAGC008, item,item.AGC008date)"
                                         v-else
                                 />
                                 <p>有功增闭锁</p>
                             </div>
                             <div>
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zhaung.png"
-                                        @contextmenu="v('YGJBS', '有功减闭锁', item.AGC007, item,item.AGC007date)"
+                                        @contextmenu="v('YGJBS', '有功减闭锁', item.DIAGC007, item,item.AGC007date)"
                                         v-if="item.AGC007Num == '1'"
                                 />
-                                <img
+                                <img style="cursor: pointer"
                                         src="@assets/img/images/zheng.png"
-                                        @contextmenu="v('YGJBS', '有功减闭锁', item.AGC007, item,item.AGC007date)"
+                                        @contextmenu="v('YGJBS', '有功减闭锁', item.DIAGC007, item,item.AGC007date)"
                                         v-else
                                 />
                                 <p>有功减闭锁</p>
@@ -461,19 +461,17 @@
                 stationType: 0, // 场站类型 0全部1风电2光伏
                 agcMessage: [],
                 fixTitleArr: [
-                    "AGC001",
-                    "AGC002",
-                    "AGC003",
-                    "AGC004",
-                    "AGC005",
-                    "AGC006",
-                    "AGC007",
-                    "AGC008",
-                    "AGC009",
-                    "AGC010",
-                    "FCFGCDQ0001",
-                    "AGC011",
-                    "AIGLYCD001",
+                    "AIAGC001",
+                    "AIAGC002",
+                    "AIAGC003",
+                    "AIAGC004",
+                    "DIAGC005",
+                    "DIAGC006",
+                    "DIAGC007",
+                    "DIAGC008",
+                    "XDZT",
+                    "SSZNHGLZS",
+                    "ZYCGL",
                 ],
                 realData: [],
                 timer: null,
@@ -488,22 +486,22 @@
                     {
                         statiomName: "预测功率",
                         stse: "BDSAMC",
-                        sts: "AIGLYCD001",
+                        sts: "ZYCGL",
                     },
                     {
                         statiomName: "有功设定限值",
                         stse: "BDSAMC",
-                        sts: "AGC002",
+                        sts: "AIAGC002",
                     },
                     {
                         statiomName: "出线功率",
                         stse: "BDSAMC",
-                        sts: "AGC001",
+                        sts: "AIAGC001",
                     },
                     {
                         statiomName: "理论功率",
                         stse: "BDSAMC",
-                        sts: "AGC010",
+                        sts: "SSZNHGLZS",
                     },
                 ],
                 stse1: [
@@ -515,7 +513,7 @@
                     {
                         statiomName: "总有功设定限值",
                         stse: "BDSAMC",
-                        sts: "ZXDZD",
+                        sts: "ZXDZL",
                     },
                     {
                         statiomName: "总出线功率",
@@ -534,7 +532,7 @@
                 lastFilteArr: [
                     "SSZNHGLZS",
                     "ZCXYG",
-                    "ZXDZD",
+                    "ZXDZL",
                     "ZYCGL",
                 ],
 
@@ -581,7 +579,16 @@
 
             v(tagCode, tagName, de, item, dateTime) {
 
-                if (de !== '') {
+                if (de === '' || de===undefined) {
+                    this.$message({
+                        type: 'warning',
+                        offset: 200,
+                        center: true,
+                        customClass: 's',
+                        message: '指标测点为空'
+                    });
+
+                } else {
 
                     if (item.orgType == "RGN" || item.orgType == 'ZGS' || item.orgType == 'STA') {
                         this.name = item.name;
@@ -592,15 +599,6 @@
                     this.$refs.tagChild.getXY(tagCode, tagName, de, this.name, dateTime)
 
 
-                } else {
-                    this.$message({
-                        type: 'warning',
-                        offset: 200,
-                        center: true,
-                        customClass: 's',
-                        message: '指标测点为空'
-                    });
-
                 }
                 event.preventDefault();
             },
@@ -700,13 +698,13 @@
                                         v.ZCXYGdate = Number(w.dateTime);
                                     }
                                 }
-                                if (v.ZXDZD === w.tagName) {
+                                if (v.ZXDZL === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.ZXDZDNum = Number(w.value / 1000).toFixed(2);
                                         v.ZXDZDdate = Number(w.dateTime);
                                     }
                                 }
-                                if (v.ZXDZT === w.tagName) {
+                                if (v.XDZT === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.ZXDZTNum = Number(w.value / 1000).toFixed(2);
                                         v.ZXDZTdate = Number(w.dateTime);
@@ -722,78 +720,72 @@
 
                             } else {
 
-                                if (v.AGC001 === w.tagName) {
+                                if (v.AIAGC001 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC001Num = Number(w.value / 1000).toFixed(2);
                                         v.AGC001date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC002 === w.tagName) {
+                                if (v.AIAGC002 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC002Num = Number(w.value / 1000).toFixed(2);
                                         v.AGC002date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC003 === w.tagName) {
+                                if (v.AIAGC003 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC003Num = Number(w.value / 1000).toFixed(2);
                                         v.AGC003date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC004 === w.tagName) {
+                                if (v.AIAGC004 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC004Num = Number(w.value / 1000).toFixed(2);
                                         v.AGC004date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC005 === w.tagName) {
+                                if (v.DIAGC005 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC005Num = Number(w.value).toFixed(0);
                                         v.AGC005date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC006 === w.tagName) {
+                                if (v.DIAGC006 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC006Num = Number(w.value).toFixed(0);
                                         v.AGC006date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC007 === w.tagName) {
+                                if (v.DIAGC007 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC007Num = Number(w.value).toFixed(0);
                                         v.AGC007date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC008 === w.tagName) {
+                                if (v.DIAGC008 === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC008Num = Number(w.value).toFixed(0);
                                         v.AGC008date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC009 === w.tagName) {
+                                if (v.XDZT === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC009Num = Number(w.value).toFixed(0);
                                         v.AGC009date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC010 === w.tagName) {
+                                if (v.SSZNHGLZS === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AGC010Num = Number(w.value / 1000).toFixed(2);
                                         v.AGC010date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AIGLYCD001 === w.tagName) {
+                                if (v.ZYCGL === w.tagName) {
                                     if (typeof w.value === "number") {
                                         v.AIGLYCD001Num = Number(w.value / 1000).toFixed(2);
                                         v.AIGLYCD001date = Number(w.dateTime);
                                     }
                                 }
-                                if (v.AGC011 === w.tagName) {
-                                    if (typeof w.value === "number") {
-                                        v.AGC011Num = Number(w.value / 1000).toFixed(2);
-                                        v.AGC011date = Number(w.dateTime);
-                                    }
-                                }
 
                             }
 

+ 6 - 1
src/views/layout/stateMonitor/AGCMonitor/index.vue

@@ -20,7 +20,12 @@ import {
 import AgcEcharts from '@/views/layout/stateMonitor/AGCMonitor/components/AgcEchart'
 import { GetCurveValues } from "@api/home";
 import HeaderMultiBtn from "../simpleMatrix/HeaderMultiBtn.vue";
-HeaderMultiBtn
+
+
+
+
+
+
 export default {
   name: 'AGCMonitor',//AGC监视
   components: {

+ 6 - 5
src/views/layout/stateMonitor/detailMatrix/index.vue

@@ -671,11 +671,7 @@
 
             // 点击趋势对比
             handDialog(val, de, item, aname) {
-                if (de !== '') {
-                    this.cilent = process.env.VUE_APP_DIALOG_POINT; //区分鼠标左右键点击
-                    this.$refs.tagChild.getXY(val.type, val.name, de, aname + item.aname, item[val.dataTime])
-
-                } else {
+                if (de === '' || de === undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -684,6 +680,10 @@
                         message: '指标测点为空'
                     });
 
+                } else {
+                    this.cilent = process.env.VUE_APP_DIALOG_POINT; //区分鼠标左右键点击
+                    this.$refs.tagChild.getXY(val.type, val.name, de, aname + item.aname, item[val.dataTime])
+
                 }
                 event.preventDefault();
             },
@@ -2561,6 +2561,7 @@
                 }
 
                 .right-value {
+                  cursor:pointer;
                   width: 50px;
                   font-size: 12px;
                   color: #FFFFFF;

+ 20 - 31
src/views/layout/stateMonitor/factoryMonitor/components/dialogCheck.vue

@@ -85,22 +85,6 @@
         },
         props: {
 
-
-            // changeSer: {
-            //     type: Boolean,
-            //     default: false
-            //
-            // },
-            // changeWid: {
-            //     type: Boolean,
-            //     default: false
-            // },
-            // changeAll: {
-            //     type: Boolean,
-            //     default: false
-            // },
-
-
             tableData: {
                 type: Object,
                 default: []
@@ -215,6 +199,8 @@
                     return num
                 }
             },
+
+            // 组件所需参数
             getXY(tagCode, tagName, de, item, dateTime) {
                 this.tagCode = tagCode;
                 this.tagName = tagName;
@@ -238,9 +224,9 @@
                     this.changeSer = false;
                     this.changeAll = true;
                     this.clientYs = event.clientY - 106;
-                    this.clientXs = event.clientX - 165;
+                    this.clientXs = event.clientX - 182;
                 } else if (event.clientX > window.innerWidth - 180) {
-                    this.clientXs = event.clientX - 165;
+                    this.clientXs = event.clientX - 182;
                     this.changeAll = false;
                     this.changeWid = true;
                 } else {
@@ -273,6 +259,8 @@
                 const h = 1080 / window.innerHeight
                 return {x: w, y: h}
             },
+
+            // 鼠标离开趋势对比趋势曲线消失
             leaveList(val) {
                 this.visible = val
             },
@@ -543,7 +531,6 @@
 
             // 点击趋势对比
             showDelog(data, index, title) {
-
                 this.tmpData = []
                 this.tmp = []
                 this.visible = false
@@ -830,13 +817,14 @@
     content: '';
     position: absolute;
     top: -25px;
-    left: -0.5px;
+    left: -1px;
     width: 0;
     height: 0;
     border-top: 15px solid transparent;
     border-left: 0px solid transparent;
     border-right: 15px solid transparent;
     border-bottom: 10px solid rgba(27, 113, 233, 1);
+    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
 
   }
 
@@ -845,7 +833,7 @@
     white-space: nowrap;
     color: #ffffff;
     border: 1px solid rgba(27, 113, 233, 1);
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     background: #090E19;
 
     div:first-of-type {
@@ -871,7 +859,7 @@
 
   .changeSer {
     position: relative;
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     //border: 1px solid #094493;
   }
 
@@ -882,6 +870,7 @@
     left: 0;
     width: 0;
     height: 0;
+
     border-top: 12px solid #090E19;
     border-left: 0px solid transparent;
     border-right: 14px solid transparent;
@@ -893,12 +882,12 @@
     content: '';
     position: absolute;
     top: 132px;
-    left: -.5px;
+    left: -1px;
     width: 0;
     height: 0;
-    border-top: 13px solid #094493;
+    border-top: 14px solid #094493;
     border-left: 0px solid transparent;
-    border-right: 15px solid transparent;
+    border-right: 16px solid transparent;
     border-bottom: 10px solid transparent;
 
   }
@@ -908,7 +897,7 @@
     white-space: nowrap;
     color: #ffffff;
     border: 1px solid #094493;
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     background: #090E19;
 
     div:first-of-type {
@@ -938,7 +927,7 @@
 
   .changeWid {
     position: relative;
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     //border: 1px solid #094493;
   }
 
@@ -976,7 +965,7 @@
 
     color: #ffffff;
     border: 1px solid #094493;
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     background: #090E19;
 
     div:first-of-type {
@@ -1006,7 +995,7 @@
 
   .changeAll {
     position: relative;
-    box-shadow: 0 0 22px rgba(0, 70, 199, 0.20) inset !important;
+    box-shadow: 0 0 3px rgba(27.9996, 155.998, 255, .7) !important;
     //border: 1px solid #094493;
   }
 
@@ -1033,8 +1022,8 @@
     left: 176.5px;
     width: 0;
     height: 0;
-    border-top: 14.5px solid #094493;
-    border-left: 13px solid transparent;
+    border-top: 16.5px solid #094493;
+    border-left: 14px solid transparent;
     border-right: 0px solid transparent;
     border-bottom: 11px solid transparent;
 

+ 6 - 4
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/components/navList.vue

@@ -94,18 +94,20 @@
 
                             </div>
 
-                            <div class="box-text-item" v-else>
+                            <div class="box-text-item" @click="dataToggle(item1,valIndex1,lightList,item1.SBZT,nemuIndex)"  v-else>
                                 <!-- <div class="dot"></div> -->
                                 <img class="changzhan2" src="../../../../../../assets/img/images/navicon2.png" style="width: 14px;margin-left: 14px;" alt="">
-                                <div class="text" @click="dataToggle(item1,valIndex1,lightList,item1.SBZT,nemuIndex)">
+                                <div class="text" >
                                    {{item1.aname}}
                                 </div>
                    
-                                  <i style="color: #fff;" class="icon-bottom" v-if="thridMenuIndex == valIndex1"
+                                  <!-- <i style="color: #fff;" class="icon-bottom" v-if="thridMenuIndex == valIndex1"
                                     @click="handleClick3(item1,item1.datas[0].nemCode,valIndex1,lightList)"></i>
                                   <i style="color: #434E5F;" class="icon-right1" v-else
-                                    @click="handleClick3(item1,item1.datas[0].nemCode,valIndex1,lightList)"></i>
+                                    @click="handleClick3(item1,item1.datas[0].nemCode,valIndex1,lightList)"></i> -->
                                    
+                                    <i style="color: #fff;" class="icon-bottom" v-if="thridMenuIndex == valIndex1"  ></i>
+                                    <i style="color: #434E5F;" class="icon-right1" v-else></i>
                             </div>
 
                             <div  v-for="(item2, valIndex2) in item1?.datas" class="listnode" :key="valIndex2">

+ 279 - 217
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightDataTarget/components/lightDataGF.vue

@@ -1,101 +1,115 @@
 <template>
-    <div >
-        <div class="systemData bodys">
-            <div class="line">
-                <ul>
-                    <li v-for="(item,index) in TargetData" :key="index" :class="{active:headerIndex==index}" @click="changeTitle(index,item)" > {{item.name}} </li>
-                </ul>
-                <div style="display: flex">
-
-<!--                    <el-button round size="mini" class="buttons" @click="downXlsxFn">导出</el-button>-->
-
-                    <div class="rightContent"> <div class="more" @click="addTargets"><i>+</i>更多指标</div> </div>
-                    <el-tooltip class="item" effect="dark" content="导出" placement="bottom">
-                        <el-button class="updownTits icon-dataOut" round size="mini" type="primary"
-                                   @click="downXlsxFn"
-                        >
-                        </el-button>
-                    </el-tooltip>
-                </div>
-
-            </div>
-            <el-table
-                    :data="stationData"
-                    class="table-fixed"
-                    ref="multipleTable"
-                    :cell-style="cellStyle"
-                    :header-cell-style="headerStyle"
-                    height="900px"
-                    style="width: 100%"
-                    fit
-                    v-loading="loading"
-                    element-loading-text="加载中..."
-                    empty-text=" "
-                    v-if="tableShow"
-                    stripe>
-                <el-table-column
-                        type="index"
-                        label="序号"
-                        align="center"
-                        fixed
-                        class-name="anames"
-                        width="52">
-                </el-table-column>
-                <el-table-column v-for="(item,index) in uniformDetial" :key="index"
-                                 :prop="item.tagCode"
-                                 sortable
-                                 align="center"
-                                 header-align="center"
-                                 :resizable="true"
-                                 :width="item.width"
-                                 :min-width="item.width"
-                                 :fixed="index<2"
-                >
-                    <template v-slot="scope" v-if="cilent=='click'">
-                        <el-tag   @click="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])">
-
-                                 <span   v-if="item.tagName!=='设备名称' && item.tagName!=='设备类型'" style="cursor: pointer">
-                        {{ scope.row[`${item.tagCode}`+'value'] }}
+    <div>
+        <div class="systemData bodys" >
+           <div >
+               <div class="line" v-if="TargetData.length>0">
+                   <ul >
+                       <li v-for="(item,index) in TargetData" :key="index" :class="{active:headerIndex==index}"
+                           @click="changeTitle(index,item)"> {{ item.name }}
+                       </li>
+                   </ul>
+                   <div style="display: flex">
+
+                       <!--                    <el-button round size="mini" class="buttons" @click="downXlsxFn">导出</el-button>-->
+
+                       <div class="rightContent">
+                           <div class="more" @click="addTargets"><i>+</i>更多指标</div>
+                       </div>
+                       <el-tooltip class="item" effect="dark" content="导出" placement="bottom">
+                           <el-button class="updownTits icon-dataOut" round size="mini" type="primary"
+                                      @click="downXlsxFn"
+                           >
+                           </el-button>
+                       </el-tooltip>
+                   </div>
+
+               </div>
+               <div v-else-if="noData===1 && TargetData.length<=0" class="empty-data">
+                   <el-col  :span="24">暂无数据</el-col>
+               </div>
+               <el-table
+                       :data="stationData"
+                       class="table-fixed"
+                       ref="multipleTable"
+                       :cell-style="cellStyle"
+                       :header-cell-style="headerStyle"
+                       height="900px"
+                       style="width: 100%"
+                       fit
+                       v-loading="loading"
+                       element-loading-text="加载中..."
+                       empty-text=" "
+
+                       stripe>
+                   <el-table-column v-if="TargetData.length>0"
+                                    type="index"
+                                    label="序号"
+                                    align="center"
+                                    fixed
+                                    class-name="anames"
+                                    width="52">
+                   </el-table-column>
+                   <el-table-column v-if="TargetData.length>0" v-for="(item,index) in uniformDetial" :key="index"
+                                    :prop="item.tagCode"
+                                    sortable
+                                    align="center"
+                                    header-align="center"
+                                    :resizable="true"
+                                    :width="item.width"
+                                    :min-width="item.width"
+                                    :fixed="index<2"
+                   >
+                       <template v-slot="scope" v-if="cilent=='click'">
+                           <el-tag>
+
+                                 <span @click="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])"
+                                       v-if="item.tagName!=='设备名称' && item.tagName!=='设备类型'" style="cursor: pointer">
+                        {{ scope.row[`${item.tagCode}` + 'value'] }}
                    </span>
 
-                            <span v-else>   {{
+                               <span v-else>   {{
 
-                                    scope.row[`${item.tagCode}`] || '--'
-                                }}</span>
+                                       scope.row[`${item.tagCode}`] || '--'
+                                   }}</span>
 
-                        </el-tag>
-                    </template>
-                    <template v-slot="scope" v-else>
+                           </el-tag>
+                       </template>
+                       <template v-slot="scope" v-else>
 
-                        <el-tag  @contextmenu="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])">
+                           <el-tag >
 
-                                 <span  v-if="item.tagName!=='设备名称' && item.tagName!=='设备型号'" style="cursor: pointer">
-                        {{ scope.row[`${item.tagCode}`+'value'] }}
+                                 <span @contextmenu="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])"
+                                       v-if="item.tagName!=='设备名称' && item.tagName!=='设备型号'" style="cursor: pointer">
+                        {{ scope.row[`${item.tagCode}` + 'value'] }}
                    </span>
 
-                            <span v-else>   {{
+                               <span v-else>   {{
 
-                                    scope.row[`${item.tagCode}`] || '--'
-                                }}</span>
-                        </el-tag>
-                    </template>
-                    <template #header>
+                                       scope.row[`${item.tagCode}`] || '--'
+                                   }}</span>
+                           </el-tag>
+                       </template>
+                       <template #header>
 
-                        <div v-if="item.valueUnit">
-                            <div >{{ item.tagName }}</div>
-                            <div >({{ item.valueUnit ? item.valueUnit : '--' }})</div>
-                        </div>
-                        <div v-else>
-                            <div style="line-height: 50px">{{ item.tagName }}</div>
+                           <div v-if="item.valueUnit">
+                               <div>{{ item.tagName }}</div>
+                               <div>({{ item.valueUnit ? item.valueUnit : '--' }})</div>
+                           </div>
+                           <div v-else>
+                               <div style="line-height: 50px">{{ item.tagName }}</div>
 
-                        </div>
-                    </template>
-                </el-table-column>
+                           </div>
+                       </template>
+                   </el-table-column>
 
-            </el-table>
-            <dialog-check ref="tagChild"></dialog-check>
+               </el-table>
+
+               <dialog-check ref="tagChild"></dialog-check>
+           </div >
 
         </div>
+
+
         <el-dialog v-model="dialogVisible" width="1200px">
             <template #title>
                 <div class="dialog-title">
@@ -103,7 +117,7 @@
                     <div class="title">选择指标(<span class="count"> {{ checkList.length }} </span>)</div>
                 </div>
             </template>
-            <div class="dialog-body" >
+            <div class="dialog-body">
                 <img class="dialog-img" src="/img/images/dialog.png"/>
                 <!--        <div class="targetNav" v-if="moreTargetData.length>1">-->
                 <!--        <ul>-->
@@ -112,10 +126,11 @@
                 <!--        </ul>-->
                 <!--      </div>-->
                 <div class="box">
-                    <div v-for="(item1,index1) in moreTargetData" :key="index1" >
+                    <div v-for="(item1,index1) in moreTargetData" :key="index1">
                         <el-row class="headerTitle">{{ item1.unitName }}</el-row>
                         <el-checkbox-group v-model="checkList">
-                            <el-checkbox v-for="(item2,index2) in item1.data" :key="index2" :label="item2.tagName"></el-checkbox>
+                            <el-checkbox v-for="(item2,index2) in item1.data" :key="index2"
+                                         :label="item2.tagName"></el-checkbox>
                         </el-checkbox-group>
                     </div>
                 </div>
@@ -141,8 +156,8 @@
         GetDataTargetsByStationType
     } from '@/api/factoryMonitor'
     import {GetRtValuesByTagName} from "@api/stateMonitor";
-    import {GetPowerstationTypeList,GetEquipmentTypesInfoByStationCode} from "../../../../../../../api/factoryMonitor";
-import { rtDataRefreshTime } from "../../../../../../../config";
+    import {GetPowerstationTypeList, GetEquipmentTypesInfoByStationCode} from "../../../../../../../api/factoryMonitor";
+    import {rtDataRefreshTime} from "../../../../../../../config";
 
     export default {
         name: 'lightDataTarget',
@@ -159,7 +174,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                 loading: false,
                 SBMC: 'SBMC',
                 SBAMC: 'SBAMC',
-                TargetData:[],
+                TargetData: [],
                 SBXH: 'SBXH',
                 tagCode: '',
                 indexes: 0,
@@ -197,25 +212,30 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                 cilent: '',
                 pageSize: 25,
                 stationDatasd: [],
-                titleCode:'',
-                winduniformCode:null,
-                downName:'',
-                downType:'',
-                name:'',
-                tagscode:'',
-                dialogTime:''
+                titleCode: '',
+                winduniformCode: null,
+                downName: '',
+                downType: '',
+                name: '',
+                tagscode: '',
+                dialogTime: '',
+                noData:0
 
             }
         },
-        async created() {
-            this.loading=true;
-            this.$nextTick(() => this.addRollListener())
+         created() {
+             setTimeout(() => {
+                 this.$nextTick(() => this.addRollListener())
+             }, 100)
+
+
+
+            this.loading = true;
+
 
         },
         mounted() {
-            this.timer = setInterval(() => {
-                this.dataHandler();
-            }, rtDataRefreshTime)
+
         },
         unmounted() {
             clearInterval(this.timer);
@@ -224,24 +244,24 @@ import { rtDataRefreshTime } from "../../../../../../../config";
         methods: {
 
 
-            getHeaderNum(val,stationCode){
-                this.headerIndex=val
+            getHeaderNum(val, stationCode) {
+                this.headerIndex = val
                 this.stationCode = stationCode;
                 this.getSystemConfigData()
 
             },
 
-            async getList(){
-                let data = window.localStorage.getItem('alllocalTarge'+ this.titleCode);
+            async getList() {
+                let data = window.localStorage.getItem('alllocalTarge' + this.titleCode);
                 if (data != null && JSON.stringify(data) != "{}") {
                     data = JSON.parse(data);
                     this.uniformDetial = data;
 
-                }else {
+                } else {
                     const result = await this.getDefaultUniformCodesList();
                     var newArr = [];
 
-                    if(result!=null && JSON.stringify(result)!='{}') {
+                    if (result != null && JSON.stringify(result) != '{}') {
                         result.forEach(item => {
                             newArr.push({...item, width: ''});
                         })
@@ -252,7 +272,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                         valueUnit: '',
                         width: '150'
                     }, ...newArr];
-                    window.localStorage.setItem('alllocalTarge'+ this.titleCode, JSON.stringify(this.uniformDetial));
+                    window.localStorage.setItem('alllocalTarge' + this.titleCode, JSON.stringify(this.uniformDetial));
                 }
 
                 var arr = [];
@@ -262,35 +282,34 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                     }
                 })
                 const codeStr = arr.join(',')
-                this.winduniformCode=codeStr
+                this.winduniformCode = codeStr
                 await this.getCompanyEquipmentsIndicator();
             },
 
             // 点击title
-            changeTitle(index,type){
-                this.stationData=[]
-                this.headerIndex=index
-                this.titleCode=type.type
-                this.downType=type.name
+            changeTitle(index, type) {
+                this.stationData = []
+                this.headerIndex = index
+                this.titleCode = type.type
+                this.downType = type.name
                 this.getList()
             },
             // 导出
 
-            downXlsxFn(){
-                this.stationData=this.stationDatasd
+            downXlsxFn() {
+                this.stationData = this.stationDatasd
                 let headers = []
                 this.uniformDetial.forEach(it => {
-                    if(it.valueUnit!=''){
-                        headers.push(it.tagName +'(' + it.valueUnit +')')
-                    }else {
-                        headers.push(it.tagName )
+                    if (it.valueUnit != '') {
+                        headers.push(it.tagName + '(' + it.valueUnit + ')')
+                    } else {
+                        headers.push(it.tagName)
                     }
                 })
 
-
                 setTimeout(() => {
                     if (this.stationData.length > 0) {
-                        utils.exportExcel(this.$refs['multipleTable'].$el, '序号' +headers , this.downName+this.downType)
+                        utils.exportExcel(this.$refs['multipleTable'].$el, '序号' + headers, this.downName + this.downType)
                     }
                 }, 1000)
 
@@ -299,43 +318,40 @@ import { rtDataRefreshTime } from "../../../../../../../config";
             // 滚动条监听
             addRollListener() {
                 const dom = document.getElementsByClassName("el-table__body-wrapper")[0]
-                dom.addEventListener('scroll', () => {
-                    const scrollTop = dom.scrollTop
-                    const offsetHeight = dom.offsetHeight
-                    const clientHeight = dom.clientHeight
-                    const scrollHeight = dom.scrollHeight
-
-                    if (clientHeight + scrollTop + 1 > scrollHeight || offsetHeight + scrollTop >= scrollHeight) {
-                        this.pageSize++
-                        let ss=this.deepClone(this.stationDatasd)
-
-                        this.stationData = ss.splice(0, this.pageSize)
-                    }
-                })
+                if(dom){
+                    dom.addEventListener('scroll', () => {
+                        const scrollTop = dom.scrollTop
+                        const offsetHeight = dom.offsetHeight
+                        const clientHeight = dom.clientHeight
+                        const scrollHeight = dom.scrollHeight
+
+                        if (clientHeight + scrollTop + 1 > scrollHeight || offsetHeight + scrollTop+1 >= scrollHeight) {
+                            this.pageSize+=10
+                            let ss = this.deepClone(this.stationDatasd)
+                            this.stationData = ss.splice(0, this.pageSize)
+                        }
+                    })
+                }
             },
-            async getSystemConfigData(){
-                const data=await GetEquipmentTypesInfoByStationCode({stationCode:this.stationCode })
-
-                if(data){
+            async getSystemConfigData() {
+                const data = await GetEquipmentTypesInfoByStationCode({stationCode: this.stationCode})
+                if (data && data.length > 0) {
+                    this.TargetData = data
+                    this.titleCode = data[0].type
+                    this.downType = data[0].name
 
-                    this.TargetData=data
-                    this.titleCode=data[0].type
-                    this.downType=data[0].name
-                    this.getList()
+                }else {
+                    this.noData=1
+                    this.TargetData = data
+                    this.titleCode=''
+                    this.downType=''
                 }
+                this.getList()
             },
 
 
-            v(tagCode, index, tagName,name,de) {
-                if(de !=='') {
-
-                    this.cilent = process.env.VUE_APP_DIALOG_POINT;
-
-                    this.tagscode = name.CZBM
-
-                    this.$refs.tagChild.getXY(tagCode, tagName.tagName, de,  name.SBMC, name[tagCode + 'date'])
-
-                } else {
+            v(tagCode, index, tagName, name, de) {
+                if (de === '' || de === undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -344,49 +360,57 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                         message: '指标测点为空'
                     });
 
+
+                } else {
+
+                    this.cilent = process.env.VUE_APP_DIALOG_POINT;
+
+                    this.tagscode = name.CZBM
+
+                    this.$refs.tagChild.getXY(tagCode, tagName.tagName, de, name.SBMC, name[tagCode + 'date'])
                 }
                 event.preventDefault();
             },
             async renderData(stationCode) {
-                this.headerIndex=0
+                this.headerIndex = 0
                 this.getSystemConfigData()
                 this.stationCode = stationCode;
 
             },
             //获取默认指标
-            async getDefaultUniformCodesList(){
+            async getDefaultUniformCodesList() {
                 let type = this.stationType == -2 ? 'G' : 'F'
-                const datas =await GetDataTargetsByStationType({
-                    type:type,
+                const datas = await GetDataTargetsByStationType({
+                    type: type,
 
                 });
-                const data=await GetDefaultUniformCodesList({stationType:type,eqType:this.titleCode});
+                const data = await GetDefaultUniformCodesList({stationType: type, eqType: this.titleCode});
                 return data;
             },
             async getCompanyEquipmentsIndicator() {
-                if(this.stationCode){
+                if (this.stationCode) {
 
                     //获取带有编码的数据
                     const data = await GetCompanyEquipmentsIndicator({
                         powerStationCode: this.stationCode,
                         uniformCode: this.winduniformCode,
-                        eqType:this.titleCode
+                        eqType: this.titleCode
                     });
-                    if(data){
-                        this.downName=data.CZAMC
-                        this.tableData= data.sbLists;
+                    if (data) {
+                        this.downName = data.CZAMC
+                        this.tableData = data.sbLists;
                         this.dataHandler();
                     }
 
-                }else {
+                } else {
 
-                    this.stationData=[];
+                    this.stationData = [];
                 }
             },
             //数据处理
             async dataHandler() {
-
-                if(this.tableData){
+                clearInterval(this.timer);
+                if (this.tableData) {
                     //属性抽提
 
                     let tempData = this.tableData?.flatMap(s => {
@@ -402,17 +426,20 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                     //字符拼接处理
                     let tempDataStr = tempData.join("|");
                     //获取编码对应的数据
-                    const dataArr=await GetRtValuesByTagName(tempDataStr);
+                    const dataArr = await GetRtValuesByTagName(tempDataStr);
                     if (dataArr) {
 
                         this.codeValur = dataArr;
                     }
-
+                    this.timer = setTimeout(() => {
+                        this.dataHandler();
+                    }, rtDataRefreshTime)
                     this.codeToValue();
                 }
+
             },
             // 将编码转化为数据
-            async codeToValue(){
+            async codeToValue() {
                 let map = new Map();
                 let maps = new Map();
                 if (JSON.stringify(this.codeValur) != "{}") {
@@ -423,22 +450,22 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                 }
 
 
-                const datas=this.deepClone(this.tableData)
+                const datas = this.deepClone(this.tableData)
                 await datas.forEach(z => {
                     const codeArr = this.winduniformCode.split(',')
                     codeArr.forEach(code => {
                         // z[code]=map.get(z[code]);
                         let result = map.get(z[code]);
                         let results = maps.get(z[code]);
-                        if (result == undefined || result==undefined) {
-                            z[code+'value'] = '--'
-                            z[code+'date'] = '--'
+                        if (result == undefined || result == undefined) {
+                            z[code + 'value'] = '--'
+                            z[code + 'date'] = '--'
                         } else if (typeof result == 'number') {
-                            z[code+'value'] = result.toFixed(2);
-                            z[code+'date'] = results;
+                            z[code + 'value'] = result.toFixed(2);
+                            z[code + 'date'] = results;
                         } else {
-                            z[code+'value'] = '--'
-                            z[code+'date'] = '--';
+                            z[code + 'value'] = '--'
+                            z[code + 'date'] = '--';
                         }
                     })
                 });
@@ -460,11 +487,11 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                     return {'backdrop-filter': 'blur(10px)', 'padding': '7px 0', 'font-size': '13px'}
                 }
             },
-            headerStyle({row, column, rowIndex, columnIndex}){
-                if (columnIndex < 3){
-                    return {'backdrop-filter': 'blur(10px)','padding':'6px 0'}
-                }else {
-                    return {'padding':'6px 0'}
+            headerStyle({row, column, rowIndex, columnIndex}) {
+                if (columnIndex < 3) {
+                    return {'backdrop-filter': 'blur(10px)', 'padding': '6px 0'}
+                } else {
+                    return {'padding': '6px 0'}
                 }
             },
             // 添加指标,数据回填
@@ -476,9 +503,13 @@ import { rtDataRefreshTime } from "../../../../../../../config";
             //获取风机或者光伏的全部指标
             async getMoreUniformCodesList() {
                 let type = this.stationType == -2 ? 'G' : 'F'
-                const data = await GetMoreUniformCodesList({stationType: type, pointType: 'AI',eqType:this.titleCode});
+                const data = await GetMoreUniformCodesList({
+                    stationType: type,
+                    pointType: 'AI',
+                    eqType: this.titleCode
+                });
                 this.moreTargetData = data;
-                this.checkList=this.winduniformName;
+                this.checkList = this.winduniformName;
 
             },
             //点击确定,将checkList文字转为编码
@@ -500,25 +531,30 @@ import { rtDataRefreshTime } from "../../../../../../../config";
                         return arr == value.tagName
                     })
 
-                    if(obj!=undefined){
-                        if(newArr.length>13){
+                    if (obj != undefined) {
+                        if (newArr.length > 13) {
                             obj.width = '120';
-                        }else {
-                            obj.width='';
+                        } else {
+                            obj.width = '';
                         }
                         code.push(obj.tagCode);
                         codeDetial.push(obj);
                     }
 
                 })
-                this.uniformDetial = [{tagName: '设备名称', tagCode: 'SBAMC',valueUnit:'' ,width: '100'}, {tagName: '设备型号', tagCode: 'SBXH',valueUnit:'', width: '150'}, ...codeDetial];
-                window.localStorage.setItem('alllocalTarge'+ this.titleCode, JSON.stringify(this.uniformDetial));
+                this.uniformDetial = [{
+                    tagName: '设备名称',
+                    tagCode: 'SBAMC',
+                    valueUnit: '',
+                    width: '100'
+                }, {tagName: '设备型号', tagCode: 'SBXH', valueUnit: '', width: '150'}, ...codeDetial];
+                window.localStorage.setItem('alllocalTarge' + this.titleCode, JSON.stringify(this.uniformDetial));
                 this.dialogVisible = false;
-                this.tableShow=false;
-                setTimeout(()=>{
-                    this.tableShow=true
-                },100)
-                await  this.getList()
+                this.tableShow = false;
+                setTimeout(() => {
+                    this.tableShow = true
+                }, 100)
+                await this.getList()
 
 
             },
@@ -533,7 +569,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
             winduniformCode() {
 
             },
-            winduniformName(){
+            winduniformName() {
                 var arr = [];
                 this.uniformDetial.forEach((item, index) => {
                     if (index > 1) {
@@ -544,13 +580,22 @@ import { rtDataRefreshTime } from "../../../../../../../config";
             }
 
         },
-        watch:{
-        }
+        watch: {}
     }
 </script>
 
 <style lang="less" scoped>
+  .empty-data {
+    position: absolute;
+    width:calc(100% - 170px);
+    height: 955px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
 
+    padding: 5px;
+  }
   .updownTits {
 
     padding: 0 !important;
@@ -567,6 +612,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
     background: linear-gradient(180deg, rgba(255, 255, 255, .5), rgba(0, 0, 0, .5), rgba(0, 0, 0, 1));
 
   }
+
   .el-tag {
     background: none !important;
     border: none !important;
@@ -632,7 +678,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
 
   .systemData {
     width: 100%;
-    height: calc(100% - 70px);
+    height: 950px;
     background-color: rgba(0, 0, 0, 0.45);
     padding: 5px;
     overflow: hidden;
@@ -643,44 +689,51 @@ import { rtDataRefreshTime } from "../../../../../../../config";
     position: absolute;
     right: 20px;
     bottom: 5px;
-    .el-button:first-child{
-      background-color: rgba(0, 70, 199, 0.2)!important;
+
+    .el-button:first-child {
+      background-color: rgba(0, 70, 199, 0.2) !important;
       color: #B3B3B3;
       border-color: transparent;
     }
   }
-  .targetNav{
-    >ul{
+
+  .targetNav {
+    > ul {
       display: flex;
       border: 1px solid rgba(42, 55, 79, 1);
       height: 30px;
       border-radius: 15px;
       width: fit-content;
       margin: 0 auto;
-      li{
+
+      li {
         padding: 0 36px;
         color: #B3B3B3;
         font-size: 13px;
         line-height: 28px;
         background-color: rgba(67, 81, 107, 0.2);
         border-right: 1px solid #2A374F;
-        cursor:pointer;
+        cursor: pointer;
       }
-      li:first-child{
+
+      li:first-child {
         border-top-left-radius: 15px;
         border-bottom-left-radius: 15px;
       }
-      li:last-child{
+
+      li:last-child {
         border-top-right-radius: 15px;
         border-bottom-right-radius: 15px;
         border: none;
       }
     }
-    .active{
+
+    .active {
       background-color: rgba(0, 70, 199, 0.4);
       color: #FFFFFF;
     }
   }
+
   ul {
     display: flex;
     border: 1px solid rgba(42, 55, 79, 1);
@@ -709,16 +762,19 @@ import { rtDataRefreshTime } from "../../../../../../../config";
       border: none;
     }
   }
-  .active{
+
+  .active {
     background-color: rgba(0, 70, 199, 0.4);
     color: #FFFFFF;
   }
-  .box{
+
+  .box {
     height: 500px;
     overflow: auto;
     margin: 10px 0;
     padding: 0 10px;
-    .headerTitle{
+
+    .headerTitle {
       width: 100%;
       border-bottom: 1px solid #3A3F43;
       padding: 9px 0;
@@ -727,7 +783,8 @@ import { rtDataRefreshTime } from "../../../../../../../config";
       position: relative;
       margin-bottom: 8px;
     }
-    .headerTitle:before{
+
+    .headerTitle:before {
       content: '';
       display: block;
       width: 8px;
@@ -736,7 +793,8 @@ import { rtDataRefreshTime } from "../../../../../../../config";
       position: absolute;
       bottom: -1px;
     }
-    .headerTitle::after{
+
+    .headerTitle::after {
       content: '';
       display: block;
       width: 8px;
@@ -747,6 +805,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
       right: 0;
     }
   }
+
   .count {
     color: #fff;
   }
@@ -754,6 +813,7 @@ import { rtDataRefreshTime } from "../../../../../../../config";
   .el-checkbox {
     width: 150px;
   }
+
   .line {
     display: flex;
     flex-direction: row;
@@ -797,7 +857,8 @@ import { rtDataRefreshTime } from "../../../../../../../config";
         cursor: pointer;
         background: url("../../../../../../../assets/img/images/buttonBack.png") no-repeat;
         background-size: cover;
-        i{
+
+        i {
           font-size: 18px;
           margin-right: 5px;
           vertical-align: -1%;
@@ -806,9 +867,10 @@ import { rtDataRefreshTime } from "../../../../../../../config";
     }
   }
 
-  /deep/ .el-table__header .anames  .cell{
+  /deep/ .el-table__header .anames .cell {
     line-height: 50px;
   }
+
   .buttons {
     background: rgba(67, 81, 107, 0.3) !important;
     border: 1px solid #3B4C6C;

+ 27 - 13
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightCard.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <div class="bodyList">
+        <div class="bodyList" v-if="nodate===0">
 
             <div class="big_card" v-for="(value, indexe) in test" :key="indexe">
                 <div class="matrix-card"
@@ -34,12 +34,12 @@
                                     <p>{{ item.name }}</p>
                                     <p>
 
-                                                        <span v-if="item.name!=='接入容量'" @contextmenu="handDialog(item,value[item?.type],value)"> {{
-                                                                value[item?.value] ? Number(value[item?.value]).toFixed(2) :  '--'
+                                                        <span style="cursor: pointer" v-if="item.name!=='接入容量'" @contextmenu="handDialog(item,value[item?.type],value)"> {{
+                                                                dataToFix2(value[item?.value])
                                                             }}</span>
 
                                         <span v-else> {{
-                                                value[item?.value] ?  Number(value[item?.value]).toFixed(2) :  '--'
+                                                dataToFix2(value[item?.value])
                                             }}</span>
 
                                     </p>
@@ -56,6 +56,7 @@
             </div>
 
         </div>
+        <div class="empty-data" v-else-if="nodate===1">暂无数据</div>
         <el-dialog width="90%" top="40px" v-model="displayMatrixz" :show-close="true" :destroy-on-close="true">
             <template #title>
                 <div class="dialog-title">
@@ -81,6 +82,9 @@ import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/d
     export default {
         name: 'matrixMatrix',
         props:{
+            nodate:{
+                type:Number
+            },
             test:{
                 type:Object
             },
@@ -113,17 +117,17 @@ import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/d
         },
         methods: {
 
-            z(s) {
-                this.visible = s;
-            },
+            dataToFix2(obj) {
 
+                if (obj === '' || obj === undefined || isNaN(obj) ) {
+                    return '--'
+                } else {
+                    return obj.toFixed(2)
+                }
+            },
             // 点击趋势对比
             handDialog(val, de, item) {
-                if(de!=='') {
-
-                    this.$refs.tagChild.getXY(val.type, val.name, de, this.lightList.aname + item.aname, item[val.dataTime])
-
-                }else {
+                if(de==='' || de===undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -132,6 +136,9 @@ import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/d
                         message: '指标测点为空'
                     });
 
+                }else {
+                    this.$refs.tagChild.getXY(val.type, val.name, de, this.lightList.aname + item.aname, item[val.dataTime])
+
                 }
                 event.preventDefault();
             },
@@ -181,7 +188,14 @@ import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/d
 
 </script>
 <style lang="less" scoped>
-
+  .empty-data{
+    height:898px;
+    font-size: 14px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+  }
   .updownTits {
     padding: 0 !important;
 

+ 22 - 8
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightList.vue

@@ -1,6 +1,6 @@
 <template>
     <el-table
-
+v-if="nodate===0"
             :data="test"
             ref="multipleTable"
             :cell-style="cellStyle"
@@ -40,7 +40,7 @@
                               <span v-if="item.name==='转换率'">
                         {{ dataToFix2(scope.row[`${item.value}`]) }}
                    </span>
-                    <span v-else @contextmenu="handDialog(item,scope.row[`${item.type}`],scope.row)">
+                    <span style="cursor: pointer" v-else @contextmenu="handDialog(item,scope.row[`${item.type}`],scope.row)">
                         {{ dataToFix2(scope.row[`${item.value}`]) }}
                    </span>
 
@@ -57,6 +57,7 @@
             </template>
         </el-table-column>
     </el-table>
+    <div class="empty-data" v-else-if="nodate===1">暂无数据</div>
     <dialog-check ref="tagChild"/>
 
 </template>
@@ -68,6 +69,9 @@
     export default {
         name: 'matrixMatrix',
         props: {
+            nodate:{
+                type:Number
+            },
             test: {
                 type: Object
             },
@@ -99,10 +103,7 @@
 
             // 点击趋势对比
             handDialog(val, de, item) {
-                if (de !== '') {
-                    this.$refs.tagChild.getXY(val.type, val.name, de, this.lightList + item.aname, item[val.dataTime])
-
-                } else {
+                if (de === '' || de ===undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -111,13 +112,16 @@
                         message: '指标测点为空'
                     });
 
+                } else {
+                    this.$refs.tagChild.getXY(val.type, val.name, de, this.lightList + item.aname, item[val.dataTime])
+
                 }
                 event.preventDefault();
             },
 
             dataToFix2(obj) {
-                console.log(obj, "onj")
-                if (obj === '' || obj === undefined) {
+
+                if (obj === '' || obj === undefined || isNaN(obj) ) {
                     return '--'
                 } else {
                     return obj.toFixed(2)
@@ -182,4 +186,14 @@
     }
 
 </script>
+<style lang="less" scoped>
+  .empty-data{
+    height:898px;
+    font-size: 14px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+  }
+</style>
 

File diff ditekan karena terlalu besar
+ 3613 - 3532
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/components/lightMatrixGF.vue


+ 7 - 7
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor/index.vue

@@ -7,8 +7,8 @@
 </template>
 
 <script>
-import HeaderBtn from "../../../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue";
-import lightMatrixGF from "./components/lightMatrixGF";
+import HeaderBtn from "../../../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue"
+import lightMatrixGF from "./components/lightMatrixGF"
 // import headerButtonGf from "@/views/layout/stateMonitor/factoryMonitor/components/headerButtonGf";
 
 
@@ -27,14 +27,14 @@ export default {
         HeaderBtn,
         lightMatrixGF
     },
-    data() {
+    data () {
         return {
             tagListNode: null,
             czType: '',
         }
     },
 
-    created() {
+    created () {
 
         if (this.$route.query.czType != undefined && this.$route.query.czType != '') {
             this.czType = this.$route.query.czType
@@ -44,7 +44,7 @@ export default {
         }
     },
     methods: {
-        renderData({ stationCode, type, node }) {
+        renderData ({ stationCode, type, node }) {
             this.tagListNode = type
             setTimeout(() => {
                 this.$refs.data.getHeaderNum(node.aname, stationCode, type, type, 40, '', '', this.czType)
@@ -64,10 +64,10 @@ export default {
     computed: {
 
     },
-    mounted() {
+    mounted () {
 
     },
-    unmounted() {
+    unmounted () {
 
 
     },

File diff ditekan karena terlalu besar
+ 2738 - 2778
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixCard.vue


File diff ditekan karena terlalu besar
+ 3568 - 3447
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixGF.vue


+ 144 - 134
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/components/lightMatrixList.vue

@@ -1,182 +1,192 @@
 <template>
     <div>
         <el-table
-                :data="test"
-                class="table-fixed"
-                ref="multipleTable"
-                :cell-style="cellStyle"
-                :header-cell-style="headerStyle"
-                height="81vh"
-                style="width: 100%"
-                fit
-                element-loading-text="加载中..."
-                empty-text=" "
-                stripe>
+            :data="test"
+            class="table-fixed"
+            ref="multipleTable"
+            :cell-style="cellStyle"
+            :header-cell-style="headerStyle"
+            height="81vh"
+            style="width: 100%"
+            fit
+            element-loading-text="加载中..."
+            empty-text=" "
+            stripe
+        >
             <el-table-column
-                    type="index"
-                    label="序号"
-                    align="center"
-                    fixed
-                    class-name="anames"
-                    width="52">
+                type="index"
+                label="序号"
+                align="center"
+                fixed
+                class-name="anames"
+                width="52"
+            >
             </el-table-column>
             <el-table-column
-                    prop="aname"
-                    label="设备名称"
-                    align="center"
-                    fixed
-                    width="100">
+                prop="aname"
+                label="设备名称"
+                align="center"
+                fixed
+                width="100"
+            >
             </el-table-column>
-            <el-table-column v-for="(item,index) in electTarget" :key="index"
-                             sortable
-                             align="center"
-                             header-align="center"
-                             :resizable="true"
-                             :width="item.width"
-                             :min-width="item.width"
-
+            <el-table-column
+                v-for="(item, index) in electTarget"
+                :key="index"
+                sortable
+                align="center"
+                header-align="center"
+                :resizable="true"
+                :width="item.width"
+                :min-width="item.width"
             >
                 <template v-slot="scope">
                     <div>
-
-                              <span  v-if="item.name!=='接入容量'" @contextmenu="handDialog(item,scope.row[`${item.type}`],scope.row)">
-                        {{  dataToFix2(scope.row[`${item.value}`])}}
-                   </span>
+                        <span
+                            style="cursor: pointer"
+                            v-if="item.name !== '接入容量'"
+                            @contextmenu="
+                                handDialog(
+                                    item,
+                                    scope.row[`${item.type}`],
+                                    scope.row
+                                )
+                            "
+                        >
+                            {{ dataToFix2(scope.row[`${item.value}`]) }}
+                        </span>
                         <span v-else>
-                        {{ dataToFix2(scope.row.jrCapacity)}}
-                   </span>
+                            {{ dataToFix2(scope.row.jrCapacity) }}
+                        </span>
                     </div>
                 </template>
                 <template #header>
                     <div v-if="item.unite">
                         <div>{{ item.name }}</div>
-                        <div>({{ item.unit ? item.unit : '--' }})</div>
+                        <div>({{ item.unit ? item.unit : "--" }})</div>
                     </div>
                     <div v-else>
                         <div style="line-height: 50px">{{ item.name }}</div>
                     </div>
                 </template>
             </el-table-column>
-
         </el-table>
     </div>
-    <dialog-check
-            ref="tagChild"/>
+    <dialog-check ref="tagChild" />
 </template>
 
 <script>
-    import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/dialogCheck";
-    import utils from "@/utils/downXlsx";
-
-    export default {
-        name: 'matrixMatrix',
-        props: {
-            test: {
-                type: Object
-            },
-            electTarget: {
-                type: Object
-            },
-            lightList: {
-                type: String
-            }
+import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/dialogCheck"
+import utils from "@/utils/downXlsx"
+
+export default {
+    name: 'matrixMatrix',
+    props: {
+        test: {
+            type: Object
         },
-        components: {
-            dialogCheck
+        electTarget: {
+            type: Object
         },
-        data() {
-            return {
-                // 趋势对比曲线
-                cilent: "", //区分点击事件触发条件
-
+        lightList: {
+            type: String
+        }
+    },
+    components: {
+        dialogCheck
+    },
+    data () {
+        return {
+            // 趋势对比曲线
+            cilent: "", //区分点击事件触发条件
+
+        }
+    },
+
+    created () {
+
+    },
+    methods: {
+        dataToFix2 (obj) {
+
+            if (obj === '' || obj === undefined) {
+                return '--'
+            } else {
+                return obj.toFixed(2)
             }
-        },
-
-        created() {
 
         },
-        methods: {
-            dataToFix2(obj) {
-
-                    if (obj === '' || obj === undefined) {
-                        return '--'
-                    } else {
-                        return obj.toFixed(2)
-                    }
 
-            },
 
 
+        // 点击趋势对比
+        handDialog (val, de, item) {
+            if (de === '' || de === undefined) {
+                this.$message({
+                    type: 'warning',
+                    offset: 200,
+                    center: true,
+                    customClass: 's',
+                    message: '指标测点为空'
+                })
+            } else {
+                this.$refs.tagChild.getXY(val.type, val.name, de, this.lightList + item.aname, item[val.dataTime])
 
-            // 点击趋势对比
-            handDialog(val, de, item) {
-                if(de!=='') {
 
-                    this.cilent = process.env.VUE_APP_DIALOG_POINT; //区分鼠标左右键点击
-                    this.$refs.tagChild.getXY(val.type, val.name, de,this.lightList + item.aname, item[val.dataTime])
-                }else {
-                    this.$message({
-                        type: 'warning',
-                        offset: 200,
-                        center: true,
-                        customClass: 's',
-                        message: '指标测点为空'
-                    });
+            }
+            event.preventDefault()
+        },
 
-                }
-                event.preventDefault();
-            },
-
-            //转换时间
-            getchangeTime(data) {
-                if (data != undefined && data != '') {
-                    var date = new Date(data)
-                    var y = date.getFullYear();
-                    var m = date.getMonth() + 1;
-                    var d = date.getDate()
-                    var h = date.getHours()
-                    var f = date.getMinutes()
-                    var s = date.getSeconds();
-                    m = m < 10 ? ('0' + m) : m;
-                    d = d < 10 ? ('0' + d) : d;
-                    return y + '-' + m + '-' + d + ' ' + h + ':' + f + ':' + s
+        //转换时间
+        getchangeTime (data) {
+            if (data != undefined && data != '') {
+                var date = new Date(data)
+                var y = date.getFullYear()
+                var m = date.getMonth() + 1
+                var d = date.getDate()
+                var h = date.getHours()
+                var f = date.getMinutes()
+                var s = date.getSeconds()
+                m = m < 10 ? ('0' + m) : m
+                d = d < 10 ? ('0' + d) : d
+                return y + '-' + m + '-' + d + ' ' + h + ':' + f + ':' + s
+            } else {
+                return ''
+            }
+        },
+        // 导出
+        downXlsxes () {
+            let headers = []
+            this.electTarget.forEach(it => {
+                if (it.valueUnit != '') {
+                    headers.push(it.name + '(' + it.unit + ')')
                 } else {
-                    return ''
+                    headers.push(it.name)
                 }
-            },
-            // 导出
-            downXlsxes() {
-                let headers = []
-                this.electTarget.forEach(it => {
-                    if (it.valueUnit != '') {
-                        headers.push(it.name + '(' + it.unit + ')')
-                    } else {
-                        headers.push(it.name)
-                    }
-                })
-                utils.exportExcel(this.$refs['multipleTable'].$el, '序号' + '设备名称' + headers, this.lightList)
-
-            },
+            })
+            utils.exportExcel(this.$refs['multipleTable'].$el, '序号' + '设备名称' + headers, this.lightList)
 
+        },
 
-            cellStyle({row, column, rowIndex, columnIndex}) {
-                if (columnIndex > 2) {
-                    return {'font-family': 'Arial', 'padding': '7px 0', 'font-size': '13px'}
-                } else {
-                    return {'backdrop-filter': 'blur(10px)', 'padding': '7px 0', 'font-size': '13px'}
-                }
-            },
-            headerStyle({row, column, rowIndex, columnIndex}) {
-                if (columnIndex < 3) {
-                    return {'backdrop-filter': 'blur(10px)', 'padding': '6px 0'}
-                } else {
-                    return {'padding': '6px 0'}
-                }
-            },
 
+        cellStyle ({ row, column, rowIndex, columnIndex }) {
+            if (columnIndex > 2) {
+                return { 'font-family': 'Arial', 'padding': '7px 0', 'font-size': '13px' }
+            } else {
+                return { 'backdrop-filter': 'blur(10px)', 'padding': '7px 0', 'font-size': '13px' }
+            }
         },
+        headerStyle ({ row, column, rowIndex, columnIndex }) {
+            if (columnIndex < 3) {
+                return { 'backdrop-filter': 'blur(10px)', 'padding': '6px 0' }
+            } else {
+                return { 'padding': '6px 0' }
+            }
+        },
+
+    },
 
-    }
+}
 
 </script>
 

+ 7 - 8
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitorZQ/index.vue

@@ -3,13 +3,12 @@
         <!-- <header-button-gf  @renderData="renderData" ></header-button-gf> -->
         <HeaderBtn @onChange="renderData" />
         <lightMatrixGF v-if="tagListNode == -'2'" ref="data" />
-
     </div>
 </template>
 
 <script>
-import HeaderBtn from "../../../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue";
-import lightMatrixGF from "./components/lightMatrixGF";
+import HeaderBtn from "../../../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue"
+import lightMatrixGF from "./components/lightMatrixGF"
 // import headerButtonGf from "@/views/layout/stateMonitor/factoryMonitor/components/headerButtonGf";
 
 
@@ -23,18 +22,18 @@ export default {
         lightMatrixGF,
         HeaderBtn
     },
-    data() {
+    data () {
         return {
             tagListNode: null
 
         }
     },
 
-    created() {
+    created () {
 
     },
     methods: {
-        renderData({stationCode, type, node}) {
+        renderData ({ stationCode, type, node }) {
 
             this.tagListNode = type
             setTimeout(() => {
@@ -56,10 +55,10 @@ export default {
     computed: {
 
     },
-    mounted() {
+    mounted () {
 
     },
-    unmounted() {
+    unmounted () {
 
 
     },

+ 72 - 23
src/views/layout/stateMonitor/factoryMonitor/photovoltaic/photovoltaicFacility/components/photoitaicGF.vue

@@ -8,13 +8,25 @@
                          :allowScroll="true"
                 />
             </div>
-            <div class="detail">
-                <lightDetial :lightList="lightList" :alarmTable="'550px'" v-if="number==0" ref="lightDetial" :LightGeig="'780px'" :height="'64%'"
+            <div class="detail" v-show="dataIsNone">
+                <lightDetial :lightList="lightList" :alarmTable="'550px'" v-if="number==0" ref="lightDetial" :LightGeig="'730px'" :height="'64%'"
                              :stationName="stationName"/>
                 <div  v-if="number==1" >
                     <device-information ></device-information>
                 </div>
+
+
+
+            </div>
+
+            <div class="detail " v-show="!dataIsNone">
+                <div class="empty-data">
+                    暂无数据
+                </div>
             </div>
+
+
+            
         </div>
     </div>
 </template>
@@ -27,6 +39,9 @@
     import {GetSquareEquipmentsOfTree2} from '@/api/factoryMonitor'
     import {GetRtValuesByTagName} from "@api/stateMonitor";
 
+    //定时任务 固定时间
+    import {rtDataRefreshTime} from '@/config'
+
     export default {
         name: 'photovoltaicFacility',
         components: {
@@ -44,13 +59,14 @@
                 stationCode: '',
                 lightData: null,
                 timer: '',
-                lightCode: ''
+                lightCode: '',
+                dataIsNone:true,//默认展示
             }
         },
         mounted() {
             this.timer = setInterval(() => {
                 this.dataHandler();
-            }, 3000)
+            }, rtDataRefreshTime)
         },
         unmounted() {
             clearInterval(this.timer);
@@ -59,32 +75,51 @@
         methods: {
            async getHeaderNum(name,stationCode){
 
+
                this.stationName = name;
                this.stationCode = stationCode;
                 const result = await this.getSquareEquipmentsOfTree();
                 this.lightData = result;
+
+                console.log(this.lightData)
+
                 await this.dataHandler();
                 let s;
                 let v;
-                if(result.datas[0].eqType == 'IN' || result.datas[0].eqType == 'CB' || result.datas[0].eqType == 'SCB' || result.datas[0].eqType=='EMI' || result.datas[0].eqType=='AM' || result.datas[0].eqType=='SBS'){
-                    s= result.datas[0].nemCode
-                }
-                else if (result.datas[0].datas[0].datas[0].datas.length>0) {
-                    s = result.datas[0].datas[0].datas[0].datas[0].nemCode
-                }
-                else {
-                    s = ''
-                }
-                if(result.datas[0].eqType == 'IN' || result.datas[0].eqType == 'CB' || result.datas[0].eqType == 'SCB' || result.datas[0].eqType=='EMI' || result.datas[0].eqType=='AM' || result.datas[0].eqType=='SBS'){
-                    v= result.datas[0]
-                }
-                else if (result.datas[0].datas[0].datas[0].datas.length>0) {
-                    v = result.datas[0].datas[0].datas[0].datas[0]
-                } else {
-                    v =  result.datas[0].datas[0]
+
+
+                if(result.datas.length){
+
+                     this.dataIsNone = true 
+
+
+                    if(result.datas[0].eqType == 'IN' || result.datas[0].eqType == 'CB' || result.datas[0].eqType == 'SCB' || result.datas[0].eqType=='EMI' || result.datas[0].eqType=='AM' || result.datas[0].eqType=='SBS'){
+                        s= result.datas[0].nemCode
+                    }
+                    else if (result.datas[0].datas[0].datas[0].datas.length>0) {
+                        s = result.datas[0].datas[0].datas[0].datas[0].nemCode
+                    }
+                    else {
+                        s = ''
+                    }
+                    if(result.datas[0].eqType == 'IN' || result.datas[0].eqType == 'CB' || result.datas[0].eqType == 'SCB' || result.datas[0].eqType=='EMI' || result.datas[0].eqType=='AM' || result.datas[0].eqType=='SBS'){
+                        v= result.datas[0]
+                    }
+                    else if (result.datas[0].datas[0].datas[0].datas.length>0) {
+                        v = result.datas[0].datas[0].datas[0].datas[0]
+                    } else {
+                        v =  result.datas[0].datas[0]
+                    }
+
+                            
+                    this.clickMenu(v, s, result);
+                    this.$refs.navList.resetData();
+                }else{
+                    this.dataIsNone = false 
+
                 }
-                this.clickMenu(v, s, result);
-                this.$refs.navList.resetData();
+
+
             },
 
             async renderData(stationCode, type, name) {
@@ -264,9 +299,23 @@
     .detail {
       width: calc(100% - 216px);
       padding-left: 15px;
-      height: 964px;
+      height: 959px;
 
     }
   }
 
+
+  .empty-data{
+    font-size: 14px;
+    width: 100%;
+    height: 100%;
+    border-radius: 8px;
+    background-color: rgba(0, 0, 0, .45);
+
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+  }
+
 </style>

File diff ditekan karena terlalu besar
+ 1322 - 1362
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/index.vue


+ 7 - 1
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/LayoutBlock.vue

@@ -15,7 +15,7 @@
 
 
 </script>
-<style scoped lang="less">
+<style lang="less">
 .lcon {
   width: 100%; 
   height: calc(100% - 50px);
@@ -31,6 +31,12 @@
     width: 770px;
     margin: 0 20px;
     flex-shrink: 0;
+
+
   }
 }
+.ml-\[55px\] .lcon .lmiddle {
+  width: 715px;
+}
+
 </style>

+ 3 - 3
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/benchList.vue

@@ -15,13 +15,13 @@
             </el-table-column>
             <el-table-column  v-for="(value,index) in electTarget" :key="index" :align="'center'">
                 <template v-slot="scope">
-                    <el-tooltip v-if="value.name!=='接入容量'" class="box-item" effect="dark" :content="
+                    <!-- <el-tooltip v-if="value.name!=='接入容量'" class="box-item" effect="dark" :content="
                       getchangeTime(scope.row[value.type]?.dateTime)
                     " placement="top">
                         <div> {{dataToFix2(scope.row[value.type]?.value) }}</div>
 
-                    </el-tooltip>
-                    <span v-else>
+                    </el-tooltip> -->
+                    <span>
                     {{dataToFix2(scope.row.jrCapacity)}}
                 </span>
                 </template>

+ 3 - 3
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/benchLists.vue

@@ -18,11 +18,11 @@
 
             <el-table-column  v-for="(value,index) in electTarget" :key="index" :align="'center'">
                 <template v-slot="scope">
-                    <el-tooltip v-if="value.name!=='接入容量' && benchmarkingVal!=='bench1'" class="box-item" effect="dark" :content="scope.row.datetime" placement="top">
+                    <!-- <el-tooltip v-if="value.name!=='接入容量' && benchmarkingVal!=='bench1'" class="box-item" effect="dark" :content="scope.row.datetime" placement="top">
                         <div> {{dataToFix2(scope.row[value.type])}}</div>
 
-                    </el-tooltip>
-                        <div v-else-if="benchmarkingVal==='bench1' && value.name!=='接入容量'"> {{dataToFix2(scope.row[value.type])}}</div>
+                    </el-tooltip> -->
+                        <div v-if="benchmarkingVal==='bench1' && value.name!=='接入容量'"> {{dataToFix2(scope.row[value.type])}}</div>
 
                     <span v-else>
                     {{dataToFix2(scope.row.JRRL)}}

+ 8 - 4
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue

@@ -12,7 +12,7 @@
     </eselect>
 
     <eselect :data="level3" v-model="level3Check" placeholder="请选择" labelKey="CZAMC" valueKey="CZBM"
-      v-if="!isLevel2STA && showLevel3" style="width: 180px;" />
+      v-if="isLevel2STA === false && showLevel3" style="width: 180px;" />
   </el-row>
 </template>
 <script>
@@ -89,7 +89,7 @@ export default {
         const comp = this.level2.find(item => item.code === this.level2Check)
         return comp && comp.orgType === 'STA'
       }
-      return false
+      return null
     },
     checks() {
       return [this.level1Check, this.level2Check, this.level3CheckComputed]
@@ -98,7 +98,7 @@ export default {
     checkNode() {
       if (this.isLevel2STA) {
         return this.level2.find(item => item.code === this.level2Check)
-      } else {
+      } else if (this.isLevel2STA === false){
         return this.level3.find(item => item.CZBM === this.level3Check)
       }
     },
@@ -144,11 +144,15 @@ export default {
   created() {
     this.commit = Debounce(() => {
       if (this.checks.filter(v => v).length === 3 || !this.showLevel3) {
+        if (!this.checkNode) {
+          return this.$nextTick(this.commit)
+        }
         this.$emit('onChange', {
           type: this.level1Check,
           companyCode: this.level2Check,
           stationCode: this.level3CheckComputed,
-          node: this.checkNode ?? {}
+          isJZ: this.checkNode.conqType === 'JZ',
+          node: this.checkNode
         })
       }
     }, 200)

+ 6 - 12
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/index.vue

@@ -208,16 +208,13 @@
                 <div class="f14 b3 w500" style="margin-bottom: 10px;">
                   实时功率(kW)
                 </div>
-                <el-tooltip class="box-item" effect="dark" :content="moment(
-                  stationData.stationMeasurePoint.stationSSZGL.dateTime
-                ).format('YYYY-MM-DD HH:mm:ss')
-                  " placement="top">
+
                   <div class="f24 blue num">
                     {{
                       stationData.stationMeasurePoint.stationSSZGL.value
                     }}
                   </div>
-                </el-tooltip>
+
               </div>
               <div class="space"></div>
               <div style="flex:1">
@@ -241,16 +238,13 @@
                 <div class="f14 b3 w500" style="margin-bottom: 10px;">
                   日发电量(kWh)
                 </div>
-                <el-tooltip class="box-item" effect="dark" :content="moment(
-                  stationData.stationMeasurePoint.stationRFDL.dateTime
-                ).format('YYYY-MM-DD HH:mm:ss')
-                  " placement="top">
+
                   <div class="f24 blue num">
                     {{
                       stationData.stationMeasurePoint.stationRFDL.value
                     }}
                   </div>
-                </el-tooltip>
+
               </div>
               <div class="space"></div>
               <div style="flex:1">
@@ -1835,8 +1829,8 @@ export default {
       // }, 3000);
     },
     // 切换公司/场站
-    renderData({ companyCode, stationCode }) {
-      if (companyCode === stationCode) {
+    renderData({ companyCode, stationCode, isJZ }) {
+      if (isJZ) {
         this.$router.replace({
           name: 'lighthomeIndex',
           query: {

+ 5 - 4
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/subview/EqCard.vue

@@ -295,10 +295,7 @@
 
             // 点击趋势对比
             handDialog(val, de, item) {
-                if (de !== '') {
-                    this.$refs.tagChild.getXY(val.type, val.name, de, this.stationData + item.aname, item[val.type + 'Value']?.dateTime)
-
-                } else {
+                if (de === '' || de===undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -307,6 +304,10 @@
                         message: '指标测点为空'
                     });
 
+                } else {
+                    this.$refs.tagChild.getXY(val.type, val.name, de, this.stationData + item.aname, item[val.type + 'Value']?.dateTime)
+
+
                 }
                 event.preventDefault();
             },

+ 4 - 4
src/views/layout/stateMonitor/photovoltaicLevelTwoStation/photovoltaicStationDetail/subview/EqList.vue

@@ -26,7 +26,7 @@
             <el-table-column v-for="col in colList" min-width="130" :prop="col.type"
                              :label="`${col.name}(${col.unit ?? '-'})`" align="center">
                 <template v-slot="scope">
-                    <div @contextmenu="handDialog(col,scope.row[col.type],scope.row)">
+                    <div style="cursor: pointer" @contextmenu="handDialog(col,scope.row[col.type],scope.row)">
                         {{ scope.row[col.type + 'Value']?.value }}
                     </div>
                 </template>
@@ -275,9 +275,7 @@
         methods: {
             // 点击趋势对比
             handDialog(val, de, item) {
-                if (de !== '') {
-                    this.$refs.tagChild.getXY(val.type, val.name, de, this.stationData + item.aname, item[val.type + 'Value']?.dateTime)
-                } else {
+                if (de === '' || de===undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -285,6 +283,8 @@
                         customClass: 's',
                         message: '指标测点为空'
                     });
+                } else {
+                    this.$refs.tagChild.getXY(val.type, val.name, de, this.stationData + item.aname, item[val.type + 'Value']?.dateTime)
 
                 }
                 event.preventDefault();

File diff ditekan karena terlalu besar
+ 479 - 577
src/views/layout/stateMonitor/photovoltaicStation/components/card.vue


+ 98 - 0
src/views/layout/stateMonitor/photovoltaicStation/components/halfCircleChart.vue

@@ -0,0 +1,98 @@
+<template>
+<div ref="chart" style="width: 100%; height: 100%;">
+
+</div>
+</template>
+<script setup>
+import * as echarts from '../../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/echarts'
+import { defineProps, onBeforeUnmount, onMounted, ref, watch } from 'vue'
+const props = defineProps({
+  value: {},
+  jrCapacity: {},
+  totalPower: {}
+})
+const chart = ref()
+let chartObj
+
+onMounted(() => {
+  initChart()
+  setOption()
+})
+
+onBeforeUnmount(() => {
+  chartObj && chartObj.dispose()
+})
+
+function initChart() {
+  chartObj = echarts.init(chart.value)
+}
+
+function setOption() {
+  const value = (props.value.replace('%', '') / 2)
+  chartObj.setOption({
+    tooltip: {
+      trigger: 'item',
+    },
+    legend: {
+      selectedMode: false  //取消图例上的点击事件
+    },
+    series: {
+      type: 'pie',
+      startAngle: 180,
+      emphasis: {
+        show: false
+      },
+      radius: ['85%', '95%'],
+      label: {
+        show: false
+      },
+
+      hoverAnimation: false,
+      data: [
+        {
+          value,
+          tooltip: {
+            position: 'right',
+            formatter() {
+              return `<table>
+                <tr>
+                  <td>实时功率: </td><td style="padding-left:10px;text-align: right">${props.totalPower} MW</td></tr>
+                  <tr> <td>装机容量: </td><td style='padding-left:10px;text-align: right'>${(props.jrCapacity / 1000).toFixed(1)} MW</td></tr>
+                  <tr> <td style="text-align: left">负荷率: </td><td style="padding-left:10px;text-align: right">${props.value}%</td></tr>
+                </table>`
+            }
+          },
+          itemStyle: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [{
+                offset: 1, color: '#02FFDF' // 0% 处的颜色
+              }, {
+                offset: 0.5, color: '#2C55EE' 
+              }, {
+                offset: 0, color: '#CE2128'
+              }],
+            },
+            borderRadius: 10
+          }
+        }, {
+          value: 100-value,
+          tooltip: {
+            show:false
+          },
+          itemStyle: {
+            color: '#00000000'
+          }
+        }
+    ]
+    }
+  })
+}
+
+watch(() => props.value, setOption)
+watch(() => props.jrCapacity, setOption)
+</script>

+ 173 - 229
src/views/layout/stateMonitor/photovoltaicStation/components/list.vue

@@ -1,153 +1,141 @@
 <template>
   <div class="photovoltaicList" v-loading="loading">
-    <el-table
-    :empty-text="emptyStr"
-    :data="dataSourceList" style="width: 100%" height="100%"  stripe>
-      <el-table-column type="index" label="序号" align="center" width="70" >
+    <el-table :empty-text="emptyStr" :data="dataSourceList" style="width: 100%" height="100%" stripe>
+      <el-table-column type="index" label="序号" align="center" width="70">
       </el-table-column>
-      <el-table-column prop="companyName"  :label="!isStation ? '公司名称' : '场站名称'" :align="'center'" width="230">
+      <el-table-column prop="companyName" :label="!isStation ? '公司名称' : '场站名称'" :align="'center'" width="230">
         <template v-slot="scope">
           <div class="detail_Lasts" @click="jumpLevelTwo(scope.row)" :class="isStation && 'hover-data'">
-            <div v-if="scope.row.CZZT?.value || scope.row.CZZT?.value === 0" :class="
-              scope.row.CZZT?.value === 0
+            <div v-if="scope.row.CZZT?.value || scope.row.CZZT?.value === 0" :class="scope.row.CZZT?.value === 0
                 ? 'state-normal'
                 : scope.row.CZZT?.value === 1
                   ? 'state-fault'
                   : 'state-broke'
-            " class="station-state">
+              " class="station-state">
               <div class="point"></div>
             </div>
             {{ scope.row.anames }}
           </div>
         </template>
       </el-table-column>
-      <el-table-column  prop="address" label="地址" :align="'center'">
+      <el-table-column prop="address" label="地址" :align="'center'">
         <template v-slot="scope">
           <div :class="isStation && 'hover-data'" :title="scope.row.address">
             {{ scope.row.address || "--" }}
           </div>
         </template>
       </el-table-column>
-        <el-table-column v-if="theme !== 'maintenance'" v-for="(value,index) in electTarget" :key="index" :align="'center'">
-            <template v-slot="scope">
+      <el-table-column v-if="theme !== 'maintenance'" v-for="(value, index) in electTarget" :key="index" :align="'center'">
+        <template v-slot="scope">
 
-                    <div v-if="value.name!=='接入容量'" class="getLeft" @contextmenu="v(value.type, value.name, scope.row[value.type].code, scope.row)"> {{scope.row[value.type]?.value || '0'}}
+          <div style="cursor: pointer" v-if="value.name !== '接入容量'" class="getLeft"
+            @contextmenu="v(value.type, value.name, scope.row[value.type].code, scope.row)">
+            {{ scope.row[value.type]?.value || '0' }}
 
-<!--                        趋势曲线趋势对比弹-->
+            <!--                        趋势曲线趋势对比弹-->
 
-                    </div>
+          </div>
 
 
 
-                <span v-else>
-                    {{scope.row.jrCapacity|| '0'}}
-                </span>
-            </template>
-            <template #header>
-                <div>
-                    {{value.name}}
-                </div> <div v-if="value.unit">({{value.unit}})</div>
+          <span v-else>
+            {{ scope.row.jrCapacity || '0' }}
+          </span>
+        </template>
+        <template #header>
+          <div>
+            {{ value.name }}
+          </div>
+          <div v-if="value.unit">({{ value.unit }})</div>
 
-            </template>
-        </el-table-column>
+        </template>
+      </el-table-column>
       <el-table-column prop="RFDL" label="日发电量(kWh)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.RFDL.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.RFDL.value == "number"
-                ? scope.row.RFDL.value.toFixed(2)
-                : scope.row.RFDL.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('SBTJTS', '日发电量', scope.row.RFDL.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.RFDL.value == "number"
+              ? scope.row.RFDL.value.toFixed(2)
+              : scope.row.RFDL.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
-    <el-table-column prop="RLYXS" label="日等效小时(h)" :align="'center'" v-if="theme === 'maintenance'">
+      <el-table-column prop="RLYXS" label="日等效小时(h)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.RLYXS.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.RLYXS.value == "number"
-                ? scope.row.RLYXS.value.toFixed(2)
-                : scope.row.RLYXS.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('RLYXS', '日等效小时', scope.row.RLYXS.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.RLYXS.value == "number"
+              ? scope.row.RLYXS.value.toFixed(2)
+              : scope.row.RLYXS.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
       <el-table-column prop="TXZDTS" label="通讯中断(台)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.TXZDTS.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.TXZDTS.value == "number"
-                ? scope.row.TXZDTS.value.toFixed(0)
-                : scope.row.TXZDTS.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('TXZDTS', '通讯中断', scope.row.TXZDTS.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.TXZDTS.value == "number"
+              ? scope.row.TXZDTS.value.toFixed(0)
+              : scope.row.TXZDTS.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
       <el-table-column prop="SBTJTS" label="设备停机(台)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.SBTJTS.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.SBTJTS.value == "number"
-                ? scope.row.SBTJTS.value.toFixed(0)
-                : scope.row.SBTJTS.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('SBTJTS', '设备停机', scope.row.SBTJTS.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.SBTJTS.value == "number"
+              ? scope.row.SBTJTS.value.toFixed(0)
+              : scope.row.SBTJTS.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
       <el-table-column prop="DZYXTS" label="带障运行(台)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.DZYXTS.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.DZYXTS.value == "number"
-                ? scope.row.DZYXTS.value.toFixed(0)
-                : scope.row.DZYXTS.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('DZYXTS', '带障运行', scope.row.DZYXTS.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.DZYXTS.value == "number"
+              ? scope.row.DZYXTS.value.toFixed(0)
+              : scope.row.DZYXTS.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
       <el-table-column prop="ZCYXTS" label="正常运行(台)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
-          <el-tooltip class="box-item" effect="dark" :content="
-            moment(scope.row.ZCYXTS.dateTime).format('YYYY-MM-DD HH:mm:ss')
-          " placement="top">
-            <div class="row-blue">
-              {{
-                typeof scope.row.ZCYXTS.value == "number"
-                ? scope.row.ZCYXTS.value.toFixed(0)
-                : scope.row.ZCYXTS.value
-              }}
-            </div>
-          </el-tooltip>
+
+          <div style="cursor: pointer" @contextmenu="v('ZCYXTS', '正常运行', scope.row.ZCYXTS.code, scope.row)" class="row-blue">
+            {{
+              typeof scope.row.ZCYXTS.value == "number"
+              ? scope.row.ZCYXTS.value.toFixed(0)
+              : scope.row.ZCYXTS.value
+            }}
+          </div>
+
         </template>
       </el-table-column>
       <el-table-column prop="SBZSTS" label="设备总数(台)" :align="'center'" v-if="theme === 'maintenance'">
         <template v-slot="scope">
           <div class="row-blue">
             {{
-                typeof scope.row.SBZSTS.value == "number"
-                ? scope.row.SBZSTS.value.toFixed(0)
-                : '--'
-              }}
+              typeof scope.row.SBZSTS.value == "number"
+              ? scope.row.SBZSTS.value.toFixed(0)
+              : '--'
+            }}
           </div>
         </template>
       </el-table-column>
@@ -159,35 +147,20 @@
         </template>
       </el-table-column>
     </el-table>
-      <dialog-check
-              :tagCode="tagCode"
-              :changeWid="changeWid"
-              :changeSer="changeSer"
-              :changeAll="changeAll"
-              :indexes="indexes"
-              :tableData="tableData"
-              :tagName="tagName"
-              :xs="xs"
-              :ys="ys"
-              :NameCode="name"
-              :visible="visible"
-              v-on:tag="z($event)"
-              :dialogTime="dialogTime"
-
-      ></dialog-check>
+    <dialog-check ref="tagChild"></dialog-check>
   </div>
 </template>
 
 <script>
-    import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/dialogCheck";
+import dialogCheck from "@/views/layout/stateMonitor/factoryMonitor/components/dialogCheck";
 import moment from "moment";
 export default {
   name: "photovoltaicList", // 公司首页-列表
-  components: {dialogCheck},
+  components: { dialogCheck },
   props: {
-      electTarget:{
-          type: Array,
-      },
+    electTarget: {
+      type: Array,
+    },
     dataSource: {
       type: Array,
       required: true,
@@ -215,93 +188,52 @@ export default {
 
       },
 
-        // 趋势对比曲线
-        changeSer: false,
-        changeWid: false,
-        changeAll: false,
-        ys: 0,
-        xs: 0,
-        tableData: [],
-        indexes: "",
-        tagName: "",
-        tagCode: "",
-        name: "",
-        visible: false,
-        cilent: "", //区分点击事件触发条件
-        dialogTime:''
 
 
     };
   },
 
   methods: {
-      // 点击弹窗内部关闭按钮关闭趋势对比
-      z(s) {
-          this.visible = s;
-      },
 
+    // 点击趋势对比
+    v(tagCode, tagName, de, item) {
+      if (de === '' || de === undefined) {
+        this.$message({
+          type: 'warning',
+          offset: 200,
+          center: true,
+          customClass: 's',
+          message: '指标测点为空'
+        });
+      } else {
+        this.$refs.tagChild.getXY(tagCode, tagName, de, item.anames, item[tagCode].dateTime)
 
-      // 点击趋势对比
-      v(tagCode, tagName, de, item) {
-          this.dialogTime=item[tagCode].dateTime
-          this.name = item.anames;
-          this.cilent = process.env.VUE_APP_DIALOG_POINT; //区分鼠标左右键点击
-          this.tagCode = tagCode;
-          this.indexes = de;
-          this.tagName = tagName;
-
-          this.visible = true;
-
-          if (event.clientY > window.innerHeight - 180) {
-              this.ys = event.clientY - 106;
-              this.changeSer = true;
-              this.changeAll = false;
-          } else {
-              this.ys = event.clientY + 16;
-              this.changeSer = false;
-          }
-          if (
-              event.clientY > window.innerHeight - 180 &&
-              event.clientX > window.innerWidth - 100
-          ) {
-              this.changeWid = false;
-              this.changeSer = false;
-              this.changeAll = true;
-              this.ys = event.clientY - 106;
-              this.xs = event.clientX - 171;
-          } else if (event.clientX > window.innerWidth - 100) {
-              this.xs = event.clientX - 171;
-              this.changeAll = false;
-              this.changeWid = true;
-          } else {
-              this.xs = event.clientX - 1;
-              this.changeWid = false;
-              this.changeAll = false;
-          }
-          event.preventDefault();
-      },
+
+      }
+      event.preventDefault();
+    },
 
     moment,
-      //转换时间
-      getchangeTime(data) {
-          if (data != undefined && data != "") {
-              var date = new Date(data);
-              var y = date.getFullYear();
-              var m = date.getMonth() + 1;
-              var d = date.getDate();
-              var h = date.getHours();
-              var f = date.getMinutes();
-              var s = date.getSeconds();
-              m = m < 10 ? "0" + m : m;
-              d = d < 10 ? "0" + d : d;
-              h = h < 10 ? "0" + h : h;
-              f = f < 10 ? "0" + f : f;
-              s = s < 10 ? "0" + s : s;
-              return y + "-" + m + "-" + d + " " + h + ":" + f + ":" + s;
-          } else {
-              return "--";
-          }
-      },
+    //转换时间
+    getchangeTime(data) {
+      if (data != undefined && data != "") {
+        var date = new Date(data);
+        var y = date.getFullYear();
+        var m = date.getMonth() + 1;
+        var d = date.getDate();
+        var h = date.getHours();
+        var f = date.getMinutes();
+        var s = date.getSeconds();
+        m = m < 10 ? "0" + m : m;
+        d = d < 10 ? "0" + d : d;
+        h = h < 10 ? "0" + h : h;
+        f = f < 10 ? "0" + f : f;
+        s = s < 10 ? "0" + s : s;
+        return y + "-" + m + "-" + d + " " + h + ":" + f + ":" + s;
+      } else {
+        return "--";
+      }
+    },
     calcOnlinePercentage(row) {
       const online =
         (Number(row.SBTJTS.value) || 0) +
@@ -316,7 +248,8 @@ export default {
     jumpLevelTwo(param) {
       if (param.orgType === "STA") {
         // 场站跳转详情
-        if (!param.parentCode?.endsWith('_RGN')) {
+        // if (!param.parentCode?.endsWith('_RGN')) {
+        if (param.stationType === 'ZC') {
           this.$router.push({
             name: "lighthome",
             query: { companyCode: param.parentCode, stationCode: param.code, type: this.typeStr },
@@ -342,7 +275,7 @@ export default {
     },
     addRollListener() {
       const dom = document.getElementsByClassName("el-table__body-wrapper")[0];
-      dom.addEventListener("scroll", () => {
+      this.scrollEvent = () => {
         const scrollTop = dom.scrollTop;
         const offsetHeight = dom.offsetHeight;
         const clientHeight = dom.clientHeight;
@@ -362,12 +295,19 @@ export default {
             this.page.pagesize * this.page.currentPage
           );
         }
-      });
+      }
+      if (dom) {
+        this.dom = dom
+        dom.addEventListener("scroll", this.scrollEvent)
+      }
     },
   },
   created() { },
   mounted() {
   },
+  beforeUnmount() {
+    this.dom && this.dom.removeEventListener("scroll", this.scrollEvent)
+  },
   unmounted() {
   },
   computed: {
@@ -376,20 +316,23 @@ export default {
     }
   },
   watch: {
-    dataSource() {
-      this.page.total = this.dataSource.length;
-      let arr = this.deepClone(this.dataSource);
-      this.dataSourceList = arr.splice(
-        0,
-        this.page.pagesize * this.page.currentPage
-      );
-
-      // const dom = document.getElementById('photovoltaicCard')
-      // dom.scrollTop=0;
-      // this.page.currentPage=2;
-
-      this.$nextTick(() => this.addRollListener());
-      this.loading = false
+    dataSource: {
+      handler() {
+        this.page.total = this.dataSource.length;
+        let arr = this.deepClone(this.dataSource);
+        this.dataSourceList = arr.splice(
+          0,
+          this.page.pagesize * this.page.currentPage
+        );
+
+        // const dom = document.getElementById('photovoltaicCard')
+        // dom.scrollTop=0;
+        // this.page.currentPage=2;
+
+        this.$nextTick(() => this.addRollListener());
+        this.loading = false
+      }, 
+      immediate: true
     },
   },
 };
@@ -401,31 +344,32 @@ export default {
 }
 
 :deep(.el-table) {
-    font-size: 14px !important;
-
-    .el-table__header .el-table__cell {
-      border-right-color: rgba(11, 11, 11, 0.45) !important;
-      border-bottom-color: rgba(11, 11, 11, 0.45) !important;
-      .cell {
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: wrap;
-      }
-    }
+  font-size: 14px !important;
 
-    .el-table__cell {
-      height: 48px;
-      padding: 0;
+  .el-table__header .el-table__cell {
+    border-right-color: rgba(11, 11, 11, 0.45) !important;
+    border-bottom-color: rgba(11, 11, 11, 0.45) !important;
 
-      .cell {
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-      }
+    .cell {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: wrap;
     }
+  }
 
+  .el-table__cell {
+    height: 48px;
+    padding: 0;
+
+    .cell {
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
   }
 
+}
+
 
 .photovoltaicList {
   height: 100%;

+ 78 - 0
src/views/layout/stateMonitor/photovoltaicStation/components/progressCircleChart.vue

@@ -0,0 +1,78 @@
+<template>
+<div ref="chart" style="width: 100%; height: 100%;">
+
+</div>
+</template>
+<script setup>
+import * as echarts from 'echarts'
+import { defineProps, onBeforeUnmount, onMounted, ref, watch } from 'vue'
+const props = defineProps({
+  value: {}
+})
+const chart = ref()
+let chartObj
+
+onMounted(() => {
+  initChart()
+  setOption()
+})
+
+onBeforeUnmount(() => {
+  chartObj && chartObj.dispose()
+})
+
+function initChart() {
+  chartObj = echarts.init(chart.value)
+}
+
+function setOption() {
+  const value = +props.value.replace('%', '')
+  chartObj.setOption({
+    tooltip: {
+      trigger: 'item'
+    },
+    legend: {
+      selectedMode: false  //取消图例上的点击事件
+    },
+
+
+    series: {
+      type: 'pie',
+      silent: true,
+      emphasis: {
+      show: false
+      },
+      label: {
+        show: false
+      },
+      radius: ['55%', '65%'],
+      data: [
+        {
+          value,
+          itemStyle: {
+            color: {
+              type: 'linear',
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [{
+                offset: 1, color: '#0B5BDD' // 0% 处的颜色
+              }, {
+                offset: 0, color: '#35A5FF' // 100% 处的颜色
+              }],
+            },
+          }
+        }, {
+          value: 100-value,
+          itemStyle: {
+            color: '#00000000'
+          }
+        }
+    ]
+    }
+  })
+}
+
+watch(() => props.value, setOption)
+</script>

File diff ditekan karena terlalu besar
+ 553 - 299
src/views/layout/stateMonitor/photovoltaicStation/index.vue


+ 33 - 22
src/views/layout/stateMonitor/photovoltaicStationIndex/index.vue

@@ -11,16 +11,16 @@
 
       <div style="display: inline-block;" class="posi" :style="{ transform: `scale(${scale})`, transformOrigin: '0 0' }">
         <template v-if="!showLineView">
-          <LeftTop :realtimeData="realtimeData" :companyCode="companyCode" :type="type" />
-          <LeftSlide class="posi" :companyCode="companyCode" :calcData="calcData" />
+          <LeftTop :realtimeData="realtimeData" :companyCode="queryCode" :type="type" />
+          <LeftSlide class="posi" :companyCode="queryCode" :calcData="calcData" />
         </template>
         <LeftSlideDetail v-else :zjCapacity="zjCapacity" :calcData="calcData" :realtimeData="realtimeData"
           :queryCode="queryCode" />
       </div>
-      <RightSlide v-if="!showLineView" :companyCode="companyCode" :realtimeData="realtimeData" :alarmData="alarmData"
+      <RightSlide v-if="!showLineView" :companyCode="queryCode" :realtimeData="realtimeData" :alarmData="alarmData"
         :calcData="calcData" @changeLine="changeLine" />
-      <RightSlideDetail v-else :lineCode="queryCode" :companyCode="companyCode" :realtimeData="realtimeData"
-        :alarmData="alarmData" :calcData="calcData" @changeLine="changeLine" @goback="goback" />
+      <RightSlideDetail v-else :lineCode="queryCode" :companyCode="queryCode" :realtimeData="realtimeData"
+        :alarmData="alarmData" :agAlarmData="agAlarmData" :calcData="calcData" @changeLine="changeLine" @goback="goback" />
 
 
       <div class="containerr" style="padding-left: 0;">
@@ -86,15 +86,20 @@ import HoverAg from './subview/HoverAg.vue'
 import HeaderBtn from '../photovoltaicLevelTwoStation/photovoltaicStationDetail/components/headerBtn.vue';
 import { GetRealTimeValues, GetAlarmDataApi, GetCalcValues } from '@api/home'
 import { GetIntelligentPositionData, GetSquaresAlarmCountByPowerstationId } from '@api/station'
-import { computed, nextTick, onBeforeUnmount, onMounted, onUnmounted, ref, watch } from 'vue';
+import { computed, watchEffect, onBeforeUnmount, onMounted, onUnmounted, ref, watch } from 'vue';
 import { useStore } from 'vuex'
 import { alarmRefreshTime, rtDataRefreshTime } from '@/config'
 import { useResizeScale } from './hooks';
-const { stationCode, type } = useRoute().query
-
 
 const route = useRoute()
 const router = useRouter()
+
+const type = route.query.type
+
+const stationCode = ref(route.query.stationCode)
+const companyCode = ref(route.query.companyCode)
+
+
 // 是显示站还是线路
 const showLineView = ref(!!route.query.lineCode)
 
@@ -110,7 +115,7 @@ function goback() {
   router.replace({
     query
   })
-  queryCode.value = route.query.stationCode
+  queryCode.value = stationCode.value
   setTimeout(() => {
     showLineView.value = false
   },)
@@ -126,7 +131,7 @@ const changeLine = node => {
   zjCapacity.value = node.zjCapacity
 
   showLineView.value = !!lineCode
-  queryCode.value = lineCode || route.query.stationCode
+  queryCode.value = lineCode || stationCode.value
 }
 
 watch(queryCode, (v, v2) => {
@@ -147,7 +152,7 @@ const icons = {
   CAM: require('@assets/img/photovoltaic/cam.png'),
   ROB: require('@assets/img/photovoltaic/rob.png'),
 }
-const companyCode = stationCode
+
 // 实时数据
 const realtimeData = ref()
 // 报警数据
@@ -185,25 +190,30 @@ function animationend() {
   startInit.value = true
 }
 // 改变场站时检查跳转
-function changeSome({ companyCode, stationCode }) {
-  if (companyCode !== stationCode) {
+function changeSome({ isJZ, node }) {
+  if (!isJZ) {
     router.replace({
       name: 'lighthome',
       query: {
         ...route.query
       }
     })
+  } else {
+    stationCode.value = node.nemCode
+    queryCode.value = node.nemCode
+    zjCapacity.value = node.zjCapacity
+    init()
   }
 }
 
-onMounted(async () => {
+async function init() {
   // 获取组织列表
-  await $store.dispatch('getTreeInfoApi', stationCode, type)
+  await $store.dispatch('getTreeInfoApi', stationCode.value, type)
   // 树节点的flat map
   const agNodesMap = $store.getters.nodeMap
-  GetIntelligentPositionData({ stationCode }).then(list => {
+  GetIntelligentPositionData({ stationCode: stationCode.value }).then(list => {
     const result = []
-    list.forEach(item => {
+    list.forEach?.(item => {
       const node = agNodesMap[item.code]
       let originCode, parentCode
       if (node.type === 'AG') {
@@ -249,7 +259,8 @@ onMounted(async () => {
   })
 
   updateData()
-})
+}
+// onMounted(init)
 onUnmounted(() => {
   clearTimeout(timer)
 })
@@ -343,7 +354,7 @@ let alarmtimer
 const agAlarmData = ref({})
 async function getAgAlarmDataApi() {
   await Promise.all([
-    GetSquaresAlarmCountByPowerstationId({ stationCode }).then(res => {
+    GetSquaresAlarmCountByPowerstationId({ stationCode: stationCode.value }).then(res => {
       const t = {}
       res.forEach(({ agId, alarmCount }) => {
         t[agId] = alarmCount
@@ -359,7 +370,7 @@ async function getAgAlarmDataApi() {
   alarmtimer = setTimeout(getAgAlarmDataApi, alarmRefreshTime)
 }
 
-onMounted(getAgAlarmDataApi)
+watchEffect(getAgAlarmDataApi)
 onBeforeUnmount(() => {
   clearTimeout(alarmtimer)
 })
@@ -371,8 +382,8 @@ async function getAgRealData() {
   await $store.dispatch('getAgValue')
   agRealDataTimer = setTimeout(getAgRealData, rtDataRefreshTime)
 }
-onMounted(async () => {
-  await $store.dispatch('getAgConfig', stationCode)
+watchEffect(async () => {
+  await $store.dispatch('getAgConfig', stationCode.value)
   getAgRealData()
 })
 onBeforeUnmount(() => {

+ 6 - 1
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftChart.vue

@@ -5,7 +5,7 @@
 import * as echarts from 'echarts';
 import { GetCurveValues } from '@api/home'
 import dayjs from "dayjs";
-import { computed, onMounted, ref, onBeforeUnmount } from 'vue';
+import { computed, onMounted, ref, onBeforeUnmount, watch } from 'vue';
 import { legendTextStyle, xNameTextStyle, yNameTextStyle } from './chartStyle'
 import { curveDateRefreshTime } from '@/config'
 
@@ -47,6 +47,11 @@ onMounted(() => {
   refreshCurTimer()
 })
 
+watch(() => props.companyCode, () => {
+  getChart(combineSeries([]))
+  refreshCurTimer()
+})
+
 onBeforeUnmount(() => {
   clearTimeout(curTimer)
 })

+ 11 - 5
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftSlide.vue

@@ -17,7 +17,7 @@
                 </div>
                 无人机
                 <div class="tnum">
-                  {{ deviceData?.UAV ?? '--' }}
+                  {{ deviceData?.UAV ?? '-' }}
                 </div>
               </div>
               <div class="line2">s</div>
@@ -29,7 +29,7 @@
                 机器人
                 <div class="tnum">
 
-                  {{ deviceData?.ROB ?? '--' }}
+                  {{ deviceData?.ROB ?? '-' }}
                 </div>
 
               </div>
@@ -42,7 +42,7 @@
                 摄像头
                 <div class="tnum">
 
-                  {{ deviceData?.CAM ?? '--' }}
+                  {{ deviceData?.CAM ?? '-' }}
                 </div>
               </div>
             </div>
@@ -118,7 +118,7 @@
 </template>
 <script setup>
 import { GetPowerstationIntelligentData } from '@api/station'
-import { computed, onMounted, ref } from 'vue';
+import { computed, onMounted, ref, watch } from 'vue';
 import LeftChart from './LeftChart.vue';
 import CardVue from '../components/CardVue.vue';
 const leftr = require('@assets/img/photovoltaic/arrow-left.png')
@@ -143,14 +143,20 @@ const foldDelay = computed(() => {
 
 const deviceData = ref()
 
-onMounted(() => {
+function updateData() {
   GetPowerstationIntelligentData({
     stationCode: props.companyCode
   }).then(res => {
     deviceData.value = res
   })
+}
+
+onMounted(() => {
+  updateData()
 })
 
+watch(() => props.companyCode, updateData)
+
 </script>
 <style scoped>
 @keyframes toleft1 {

+ 2 - 2
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftSlideDetail.vue

@@ -127,7 +127,7 @@
   </div>
 </template>
 <script setup>
-import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';
+import { computed, nextTick, onBeforeUnmount, onMounted, ref, watch, watchEffect } from 'vue';
 import CardVue from '../components/CardVue.vue';
 import CheckLabel from '../components/CheckLabel.vue';
 import { GetPlanValues } from '@api/home'
@@ -529,7 +529,7 @@ function formatValue(v, b = 1) {
   return v
 }
 
-onMounted(() => {
+watchEffect(() => {
   GetPlanValues({
     companyCode: props.companyCode,
     planDate: formatDateStr(new Date())

+ 11 - 4
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/LeftTop.vue

@@ -37,14 +37,15 @@
 
 <script setup>
 import { GetComoanyAssets } from '@api/station'
-import { onMounted, ref, computed } from 'vue';
+import { onMounted, ref, computed, watch } from 'vue';
 import { useRouter } from 'vue-router';
 
-const { companyCode, type } = defineProps({
+const props = defineProps({
   realtimeData: Object,
   companyCode: String,
   type: String
 })
+const {type} = props
 
 const map = {
   IN: require('@assets/img/photovoltaic/nbq.png'),
@@ -68,13 +69,19 @@ const TJC = computed(() => {
 
 const router = useRouter()
 
-onMounted(() => {
+function updateData() {
   GetComoanyAssets({
-    companyCode,
+    companyCode: props.companyCode,
     type
   }).then(res => {
     TJ.value = res
   })
+}
+
+watch(() => props.companyCode, updateData)
+
+onMounted(() => {
+  updateData()
 })
 </script>
 

+ 5 - 2
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlide.vue

@@ -194,7 +194,7 @@ import RightSlideList from './RightSlideList.vue';
 import { GetPlanValues } from '@api/home'
 import { GetDutyInfoData } from '@api/station'
 import { GetCompanEquipmentsDatas, GetRtValuesByTagName } from '@api/photovoltaicStation'
-import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
+import { computed, nextTick, onMounted, onUnmounted, ref, watchEffect } from 'vue';
 import { useResizeScale, useClickAlarm } from '../hooks';
 import CardVue from '../components/CardVue.vue';
 import { alarmRefreshTime, rtDataRefreshTime } from '@/config'
@@ -290,7 +290,7 @@ const ztp = computed(() => {
   return `${(100 - sub / all * 100).toFixed(2)}%`
 })
 
-onMounted(() => {
+function init() {
   GetPlanValues({
     companyCode: props.companyCode,
     planDate: formatDateStr(new Date())
@@ -310,8 +310,11 @@ onMounted(() => {
   }).then(res => {
     dutyInfo.value = res
   })
+}
 
+watchEffect(init)
 
+onMounted(() => {
   updateDeviceState()
 })
 

+ 52 - 9
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlideDetail.vue

@@ -24,13 +24,23 @@
             :class="[`animate__slide${isFold ? 'Out' : 'In'}Right`]" :img="imgCard11" width="389" title="阵区单元"
             style="margin-top: 10px;">
             <div style="padding: 15px;padding-top: 0;height: 100%;">
-              <el-table :empty-text="areaData == null ? ' ' : '暂无数据'" v-loading="areaData == null" :data="areaData"
+              <el-table @sort-change="sortChange" :empty-text="areaData == null ? ' ' : '暂无数据'" v-loading="areaData == null" :data="tableSortData"
                 height="100%" style="width: 100%;" stripe @row-click="golightMatrixMonitorZQ"
                 row-class-name="wfx-tb-row"
                 :cell-style="{padding: '7px 0 8px'}"
                 :header-cell-style="{ border: '0 none !important', backgroundColor: 'transparent !important' }">
-                <el-table-column label="阵区" prop="aname" align="center" width="50" />
-                <el-table-column label="容量" prop="jrCapacity" align="center" width="50">
+                <el-table-column label=" " prop="aname" align="center" width="20">
+                  <template #default="scope">
+                    <img
+                      v-if="!!agAlarmData?.[scope.row?.nemCode]"
+                    src="@assets/img/photovoltaic/warn.png" style="width:11px;display: inline-block;" />
+                    <img
+                      v-else
+                    src="@assets/img/images/nnor.png" style="width:11px;display: inline-block;" />
+                  </template>
+                </el-table-column>
+                <el-table-column  label="阵区" prop="aname" align="center" width="50" />
+                <el-table-column sortable="custom" label="容量" prop="jrCapacity" align="center" width="50">
                   <template #header>
                     <el-tooltip class="box-item" effect="dark" :content="'kW'" placement="top">
                       <div class="row-blue">
@@ -39,7 +49,7 @@
                     </el-tooltip>
                   </template>
                 </el-table-column>
-                <el-table-column label="实际功率" prop="SSZGL" align="center">
+                <el-table-column sortable="custom" label="实际功率" prop="SSZGL" align="center">
                   <template #header>
                     <el-tooltip class="box-item" effect="dark" :content="'kW'" placement="top">
                       <div class="row-blue">
@@ -48,7 +58,7 @@
                     </el-tooltip>
                   </template>
                 </el-table-column>
-                <el-table-column label="发电量" prop="RFDL" align="center">
+                <el-table-column sortable="custom" label="发电量" prop="RFDL" align="center">
                   <template #header>
                     <el-tooltip class="box-item" effect="dark" :content="'kWh'" placement="top">
                       <div class="row-blue">
@@ -57,7 +67,7 @@
                     </el-tooltip>
                   </template>
                 </el-table-column>
-                <el-table-column label="等效小时" prop="RLYXS" align="center">
+                <el-table-column sortable="custom" label="等效小时" prop="RLYXS" align="center">
                   <template #header>
                     <el-tooltip class="box-item" effect="dark" :content="'H'" placement="top">
                       <div class="row-blue">
@@ -172,7 +182,8 @@ const props = defineProps({
   companyCode: String,
   alarmData: Object,
   calcData: Object,
-  lineCode: {}
+  lineCode: {},
+  agAlarmData: {}
 })
 const emit = defineEmits(['changeLine', 'goback'])
 const changeLine = v => emit('changeLine', v)
@@ -275,12 +286,12 @@ watchEffect(() => {
   const allData = $store.state.factory.agValueMap
   const list = []
   flatAllChildNodes(config, list)
-  areaData.value = list.filter(item => item.type === 'AG').map(item => allData[item.nemCode])
+  areaData.value = list.filter(item => item && item?.type === 'AG').map(item => allData[item.nemCode])
 })
 
 
 
-onMounted(() => {
+watchEffect(() => {
   GetPlanValues({
     companyCode: props.lineCode,
     planDate: formatDateStr(new Date())
@@ -537,6 +548,38 @@ function formatDateStr(date) {
   const fix = f => ('0' + f).slice(-2)
   return `${date.getFullYear()}-${fix(date.getMonth() + 1)}-${fix(date.getDate())}`
 }
+// 表格排序
+const sortRef = ref({})
+function sortChange({prop, order}) {
+  sortRef.value = {
+    prop, order
+  }
+}
+const tableSortData = computed(() => {
+  if (!areaData.value) {
+    return
+  }
+  const list = [...areaData.value]
+  if (sortRef.value?.prop) {
+    const {prop, order} = sortRef.value
+    list.sort((a, b) => {
+      if (isNaN(a[prop])) {
+        if (order === 'ascending') {
+          return a[prop][0] - b[prop][0]
+        } else {
+          return b[prop][0] - a[prop][0]
+        }
+      } else {
+        if (order === 'ascending') {
+          return a[prop] - b[prop]
+        } else {
+          return b[prop] - a[prop]
+        }
+      }
+    })
+  }
+  return list
+})
 </script>
 <style lang="less" scoped>
 @keyframes toleft1 {

+ 1 - 1
src/views/layout/stateMonitor/photovoltaicStationIndex/subview/RightSlideList.vue

@@ -17,7 +17,7 @@
           <img src="@assets/img/photovoltaic/back.png" style="width:56px" />
         </div>
         <img src="@assets/img/photovoltaic/btn.png" style="width:180px" />
-        <div @click="changeLine1(tree)" style="cursor: pointer; position: absolute;left: 50px;right: 0;top: 0;bottom: 0;font-size: 16px;color: #ebebeb;line-height: 36px;">
+        <div @click="changeLine1(tree)" style="cursor: pointer; position: absolute;left: 50px;right: 0;top: 0;bottom: 0;font-size: 16px;color: #ebebeb;line-height: 36px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">
           {{ tree?.aname ?? '' }}
         </div>
       </div>

File diff ditekan karena terlalu besar
+ 447 - 261
src/views/layout/stateMonitor/simpleMatrix/index.vue


+ 7 - 7
src/views/layout/stateMonitor/synthesizeTargetSystem/index.vue

@@ -48,9 +48,9 @@
                     </template>
                     <template v-slot="scope" v-else>
 
-                        <el-tag @contextmenu="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])">
+                        <el-tag >
 
-                <span v-if="item.tagName!=='场站名称' && item.tagName!=='装机容量'" style="cursor: pointer"> {{
+                <span @contextmenu="v(item.tagCode,scope.$index,item,scope.row, scope.row[`${item.tagCode}`])" v-if="item.tagName!=='场站名称' && item.tagName!=='装机容量'" style="cursor: pointer"> {{
 
                         dataToFix2(scope.row[`${item.tagCode}` + 'value'])
                     }}</span>
@@ -387,11 +387,7 @@
             // },
 
             v(tagCode, index, tagName, name, de) {
-                if (de !== '') {
-                    // this.cilent = process.env.VUE_APP_DIALOG_POINT;
-                    this.$refs.tagChild.getXY(tagCode, tagName.tagName, de, name.CZAMC, name[tagCode + 'date'])
-
-                } else {
+                if (de === '' || de===undefined) {
                     this.$message({
                         type: 'warning',
                         offset: 200,
@@ -400,6 +396,10 @@
                         message: '指标测点为空'
                     });
 
+                } else {
+                    // this.cilent = process.env.VUE_APP_DIALOG_POINT;
+                    this.$refs.tagChild.getXY(tagCode, tagName.tagName, de, name.CZAMC, name[tagCode + 'date'])
+
                 }
                 event.preventDefault();
             },