From c110cc60944003c6980b4c43e88a1327b44553d1 Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Mon, 16 Oct 2023 10:48:10 +0800
Subject: [PATCH] Merge branch 'feature_1.0'

---
 src/views/charts/index.vue |  375 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 295 insertions(+), 80 deletions(-)

diff --git a/src/views/charts/index.vue b/src/views/charts/index.vue
index ecfdd9b..40d8e50 100644
--- a/src/views/charts/index.vue
+++ b/src/views/charts/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <div style="width: 100%; height: 100%">
+  <div id="chartTableContent" style="width: 100%; height: 100%">
     <div class="topSelect">
       <!-- <el-cascader v-model="newMac" :options="options" clearable change-on-select :props="{ checkStrictly: true }" placeholder="������������" /> -->
       <el-cascader
@@ -12,17 +12,8 @@
         style="width: 354px"
       />
       <!-- <div> -->
-      <el-select
-        v-model="value"
-        placeholder="������������"
-        style="margin-left: 20px"
-      >
-        <el-option
-          v-for="(item, index) in newSensor"
-          :key="index"
-          :label="item.label"
-          :value="item.value"
-        />
+      <el-select v-model="value" placeholder="������������" style="margin-left: 20px">
+        <el-option v-for="(item, index) in newSensor" :key="index" :label="item.label" :value="item.value" />
       </el-select>
       <!-- </div> -->
       <!-- <el-radio-group v-model="radio1" style="margin-left:20px">
@@ -31,33 +22,45 @@
         <el-radio-button label="������" />
         <el-radio-button label="���������" />
       </el-radio-group> -->
-      <el-select
-        v-model="select1"
-        placeholder="���������"
-        style="margin-left: 20px; width: 200px"
-      >
-        <el-option
-          v-for="item in options1"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
-        >
-        </el-option>
+      <el-select v-model="select1" placeholder="���������" style="margin-left: 20px; width: 200px">
+        <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value" />
       </el-select>
       <component
         :is="dataType"
         style="padding-left: 0; margin-left: 20px; width: 160px"
-        @sendPickerChild="showPickerChild"
         class="select11"
+        @sendPickerChild="showPickerChild"
       />
       <!--������������-->
-      <el-button @click="selectData" class="btn1">������</el-button>
+      <el-button class="btn1" @click="selectData">������</el-button>
     </div>
     <div class="topTitle">
       <div style="position: absolute">{{ selectyz }}</div>
       <!-- <div style="text-align: center;width: 100%;">{{ newData }}��{{ newMac?newMac[0]:'' }}��{{ newMac?newMac[newMac.length - 1][0]:'' }}��{{ value |sensorFilter }}�����������</div> -->
     </div>
-    <LineChart :chart-data="lineChartData" style="height: 45rem" />
+    <LineChart :chart-data="lineChartData" style="height: 40rem" />
+    <div style="padding: 0px 10px;margin-bottom: 50px;">
+      <el-table v-if="searchData.length>0" :data="tableData" border size="mini" style="width: 100%" max-height="250" tooltip-effect="dark">
+        <el-table-column prop="rankingTitle" label="������" width="100" align="center" fixed="left">
+          <el-table-column
+            prop="rankingTitle"
+            class-name="rankingTitle"
+            label="������"
+            align="center"
+            width="100"
+            fixed="left"
+          />
+        </el-table-column>
+        <template v-for="(th, thIndex) in thArr">
+          <el-table-column :key="thIndex" align="center" :label="th.label" :prop="th.prop" :show-overflow-tooltip="true" min-width="120">
+            <template slot-scope="scope">
+              <div style="overflow: hidden;white-space: nowrap;text-overflow: ellipsis;" v-html="scope.row[th.prop]" />
+            </template>
+          </el-table-column>
+        </template>
+      </el-table>
+    </div>
+
   </div>
 </template>
 
@@ -74,24 +77,25 @@
 import CustomPicker1 from '@/components/Form/CustomPicker1'
 import TimePicker1 from '@/components/Form/TimePicker1'
 import json from '@/assets/json/sensor.json'
+import _ from 'lodash'
 
 const lineChartData = {
   newVisitis: {
     expectedData: [100, 120, 161, 134, 105, 160, 165],
-    actualData: [120, 82, 91, 154, 162, 140, 145],
+    actualData: [120, 82, 91, 154, 162, 140, 145]
   },
   messages: {
     expectedData: [200, 192, 120, 144, 160, 130, 140],
-    actualData: [180, 160, 151, 106, 145, 150, 130],
+    actualData: [180, 160, 151, 106, 145, 150, 130]
   },
   purchases: {
     expectedData: [80, 100, 121, 104, 105, 90, 100],
-    actualData: [120, 90, 100, 138, 142, 130, 130],
+    actualData: [120, 90, 100, 138, 142, 130, 130]
   },
   shoppings: {
     expectedData: [130, 140, 141, 142, 145, 150, 160],
-    actualData: [120, 82, 91, 154, 162, 140, 130],
-  },
+    actualData: [120, 82, 91, 154, 162, 140, 130]
+  }
 }
 export default {
   // import ���������������������������������������������������
@@ -103,13 +107,13 @@
     CustomPicker,
     CustomPicker1,
     TimePicker1,
-    HourPicker1,
+    HourPicker1
   },
   filters: {
-    sensorFilter: function (value) {
+    sensorFilter: function(value) {
       if (!value) return ''
       return json[value]
-    },
+    }
   },
   props: {
     // defaultData: Array
@@ -133,7 +137,7 @@
       newLineChartData: {
         series: [],
         xAxis: [],
-        title: '',
+        title: ''
       },
       newData: '',
       defaultData: [],
@@ -141,22 +145,58 @@
       isSelect: false,
       options1: [
         {
+          label: '������������',
+          value: '������������'
+        },
+        {
           label: '���������',
-          value: '���������',
+          value: '���������'
         },
         {
           label: '������',
-          value: '������',
+          value: '������'
         },
         {
           label: '������',
-          value: '������',
-        },
+          value: '������'
+        }
       ],
+      searchData: []
     }
   },
   // ������������ ���������data������
-  computed: {},
+  computed: {
+    thArr() {
+      const data = []
+      if (this.searchData.length > 0) {
+        this.searchData.forEach((item, index) => {
+          data.push({
+            label: item.time,
+            name: item.time,
+            prop: 'souceData' + index
+          })
+        })
+        console.log(data)
+      }
+      return data
+    },
+    tableData() {
+      const data = []
+      const fobj = {}
+      const sobj = {}
+      if (this.searchData.length > 0) {
+        this.searchData.forEach((item, index) => {
+          fobj['souceData' + index] = this.sortFind(item.deviceData)[0].name
+          sobj['souceData' + index] = this.sortFind(item.deviceData)[1]?.name ? this.sortFind(item.deviceData)[1]?.name : '--'
+        })
+      }
+      data.push({ ...fobj, rankingTitle: '������������' }, { ...sobj, rankingTitle: '������������' })
+      console.log('firstData', fobj)
+      console.log('souceData', sobj)
+      console.log('datadatadata', data)
+      return data
+    }
+  },
   // ������data������������������
   watch: {
     // ���������������������������
@@ -168,7 +208,6 @@
       }
       // ������������������������������������������
       this.getSensor()
-      console.log(this.newMac1)
     },
     // ������dataType���������������
     select1(nv, ov) {
@@ -184,6 +223,9 @@
       } else if (nv === '���������') {
         this.dataType = 'HourPicker1'
         this.unit = 'hour'
+      } else if (nv === '������������') {
+        this.dataType = 'HourPicker1'
+        this.unit = 'FiveMinute'
       } else {
         this.dataType = 'CustomPicker'
         this.unit = 'hour'
@@ -195,8 +237,7 @@
         one === 'a34002' ||
         one === 'a21004' ||
         one === 'a21026' ||
-        one === 'a05024' ||
-        one === 'a21001'
+        one === 'a05024'
       ) {
         this.selectyz = '(������:ug/m��)'
       } else if (
@@ -224,10 +265,16 @@
         this.selectyz = '(������:pcs/0.1L)'
       } else if (one === 'a00e13') {
         this.selectyz = '(������:db)'
-      } else if (one === 'a21028') {
+      } else if (
+        one === 'a21028' ||
+        one === 'a25002' ||
+        one === 'a21001' ||
+        one === 'a25005' ||
+        one === 'a25003'
+      ) {
         this.selectyz = '(������:ppm)'
       }
-    },
+    }
   },
   // ������������ - ��������������������������������� this ���������
   created() {
@@ -237,21 +284,100 @@
   // mounted() {
   //
   // },
-  beforeCreate() {}, // ������������ - ������������
-  beforeMount() {}, // ������������ - ������������
-  beforeUpdate() {}, // ������������ - ������������
-  updated() {}, // ������������ - ������������
-  beforeDestroy() {}, // ������������ - ������������
-  destroyed() {}, // ������������ - ������������
-  activated() {},
+  beforeCreate() { }, // ������������ - ������������
+  beforeMount() { }, // ������������ - ������������
+  beforeUpdate() { }, // ������������ - ������������
+  updated() { }, // ������������ - ������������
+  beforeDestroy() { }, // ������������ - ������������
+  destroyed() { }, // ������������ - ������������
+  activated() { },
   // ������������
   methods: {
+    sortFind(data) {
+      let arr = []
+      let a = ''
+      let b = ''
+      // const duplicateValue = _.orderBy(this.refrain(data), ['sensorValue'], ['desc']) // ���������������
+      // console.log('duplicateValue', duplicateValue)
+      const originalValue = _.orderBy(data, ['sensorValue'], ['desc'])
+      const firstIndex = []
+      const fiestDateList = []
+      const secondeIndex = []
+      const secondeDateList = []
+      console.log('originalValue', originalValue)
+      if ((Number(originalValue[0].sensorValue) === Number(0))) {
+        return [{ name: '--' }, { name: '--' }]
+      }
+      originalValue.forEach((value, inx) => {
+        if ((Number(originalValue[0].sensorValue) === Number(value.sensorValue))) {
+          firstIndex.push(inx)
+        }
+      })
+
+      if (firstIndex.length > 1) {
+        a = "<span class='numColor'>" + originalValue[firstIndex[0]].sensorValue + '</span>&nbsp' + "<span class='numName'>("
+        firstIndex.forEach((item, index) => {
+          a += (originalValue[item].name).replace(/\s+/g, '') + (index === firstIndex.length - 1 ? '' : ',')
+        })
+        a += ')</span>'
+        fiestDateList.push({
+          name: a
+        })
+        // ������������
+        const secondInd = firstIndex[firstIndex.length - 1]
+        originalValue.forEach((value, inx) => {
+          if ((Number(originalValue[secondInd].sensorValue) === Number(value.sensorValue))) {
+            secondeIndex.push(inx)
+          }
+        })
+        b = "<span class='numColor'>" + originalValue[secondeIndex[0]].sensorValue + '</span>&nbsp' + "<span class='numName'>("
+        secondeIndex.forEach((item, index) => {
+          b += (originalValue[item].name).replace(/\s+/g, '') + (index === secondeIndex.length - 1 ? '' : ',')
+        })
+        b += ')</span>'
+        secondeDateList.push({
+          name: b
+        })
+      } else if (firstIndex.length <= 1) {
+        fiestDateList.push({
+          name: "<span class='numColor'>" + originalValue[0].sensorValue + '</span>&nbsp(' + (originalValue[0].name).replace(/\s+/g, '') + ')'
+        })
+        if (originalValue.length > 1) {
+          originalValue.forEach((value, inx) => {
+            if ((Number(originalValue[1].sensorValue) === Number(value.sensorValue))) {
+              secondeIndex.push(inx)
+            }
+          })
+          b = "<span class='numColor'>" + originalValue[secondeIndex[0]].sensorValue + '</span>&nbsp' + "<span class='numName'>("
+          secondeIndex.forEach((item, index) => {
+            b += (originalValue[item].name).replace(/\s+/g, '') + (index === secondeIndex.length - 1 ? '' : ',')
+          })
+          b += ')</span>'
+          secondeDateList.push({
+            name: b
+          })
+        }
+      }
+      console.log('fiestDateList', fiestDateList)
+      console.log('secondeDateList', secondeDateList)
+      arr = fiestDateList.concat(secondeDateList)
+      console.log('arr', arr)
+      return arr
+      // console.log('refrainrefrainrefrain', this.refrain(data))
+      // const arr = []
+      // const duplicates = data.filter(item => data.indexOf(item) !== data.lastIndexOf(item))
+      // unUnit.forEach(item => {
+      //   _.find(data, function(o) { return Number(item.sensorValue) === Number(o.sensorValue) })
+      //   arr.push()
+      // })
+    },
     // ������������
     selectData() {
+      console.log(this.newData)
       var newLineChartData = {
         series: [],
         xAxis: [],
-        title: [],
+        title: []
       }
       this.newXData = []
       this.$request({
@@ -262,32 +388,40 @@
           sensorCode: this.value,
           type: this.unit,
           // times: data instanceof Array ? data : [data]
-          times: this.newData instanceof Array ? this.newData : [this.newData],
-        },
+          times: this.newData instanceof Array ? this.newData : [this.newData]
+        }
       })
         .then((res) => {
           // console.log('������������������������������')
-          console.log(res)
-          const data = res.data
-          let lockLength = 0
+          this.searchData = _.cloneDeep(res.data)
+          const data = _.cloneDeep(res.data)
+          console.log('this.se', this.searchData)
+          const lockLength = 0
           for (let i = 0; i < data.length; i++) {
             for (let j = 0; j < data[i].deviceData.length; j++) {
-              // console.log(data[i].deviceData);
-              if (res.data[0].deviceData.length == 1) {
-                newLineChartData.series.push({
-                  data: [],
-                  name: '',
-                  type: 'line',
-                  label: {
-                    show: true,
-                    position: 'top',
-                  },
-                })
+              if (res.data[0].deviceData.length === 1) {
+                if (lockLength < data[i].deviceData.length) {
+                  newLineChartData.series.push({
+                    data: [],
+                    triggerLineEvent: true,
+                    emphasis: {
+                      focus: 'series'
+                    },
+                    name: '',
+                    type: 'line',
+                    label: {
+                      show: true,
+                      position: 'top'
+                    }
+                  })
+                }
               } else {
                 newLineChartData.series.push({
                   data: [],
                   name: '',
-                  type: 'line',
+                  triggerLineEvent: true,
+                  emphasis: { focus: 'series' },
+                  type: 'line'
                 })
               }
               newLineChartData.series[j].name = data[i].deviceData[j].name
@@ -312,8 +446,8 @@
         url: '/monitorPoint/queryMonitorPoints',
         method: 'get',
         params: {
-          organizationId: this.$store.state.orgId,
-        },
+          organizationId: this.$store.state.orgId
+        }
       })
         .then((res) => {
           // console.log('������index������������������������')
@@ -322,16 +456,16 @@
           for (let i = 0; i < this.defaultData.length; i++) {
             this.options.push({
               value: this.defaultData[i].name,
-              label: this.defaultData[i].name,
+              label: this.defaultData[i].name
             })
             this.options[i].children = []
             for (let j = 0; j < this.defaultData[i].devices.length; j++) {
               this.options[i].children.push({
                 value: [
                   this.defaultData[i].devices[j].name,
-                  this.defaultData[i].devices[j].mac,
+                  this.defaultData[i].devices[j].mac
                 ],
-                label: this.defaultData[i].devices[j].name,
+                label: this.defaultData[i].devices[j].name
               })
             }
           }
@@ -342,6 +476,7 @@
     },
     // ���������������������������������
     getSensor() {
+      this.newSensor = []
       // stringMacs.su
       // var newMac = this.newMac[this.newMac.length - 1][this.newMac[this.newMac.length - 1].length - 1]
       // this.newMac1 = this.newMac[this.newMac.length - 1][this.newMac[this.newMac.length - 1].length - 1]
@@ -349,8 +484,8 @@
         url: '/deviceInfo/getMacSensors',
         method: 'post',
         data: {
-          macs: this.newMac1,
-        },
+          macs: this.newMac1
+        }
       })
         .then((result) => {
           // console.log(result)
@@ -369,30 +504,38 @@
     // ���������������������������������������������
     showPickerChild(data) {
       this.newData = data
-    },
-  }, // ���������������keep-alive������������������������������������
+    }
+  } // ���������������keep-alive������������������������������������
 }
 </script>
 <style scoped lang="scss">
+#chartTableContent{
+  overflow-y: scroll;
+  overflow-x: hidden;
+}
 .topSelect {
   display: flex;
   margin-bottom: 20px;
   padding: 20px 15px 0 15px;
+
   span:first-child {
     flex: 1;
   }
+
   div:last-child {
     width: 300px;
     line-height: 40px;
     padding-left: 6px;
   }
 }
+
 .topTitle {
   display: flex;
   justify-content: space-between;
   margin-bottom: 20px;
   padding: 0 15px;
 }
+
 .btn1 {
   margin-left: 1%;
   height: 40px;
@@ -401,7 +544,79 @@
 .select11 {
   width: 20% !important;
 }
+
 /deep/.el-date-editor .el-range-separator {
   width: 11%;
 }
+/*::v-deep ���������������������������������������������element���������������*/
+::v-deep .el-table thead.is-group th {
+  background: none;
+  padding: 0px;
+}
+
+::v-deep .el-table thead.is-group tr:first-of-type th:first-of-type {
+  border-bottom: none; /*���������������������*/
+}
+
+::v-deep .el-table thead.is-group tr:first-of-type th:first-of-type div.cell {
+  text-align: right; /*������������������*/
+}
+
+::v-deep .el-table thead.is-group tr:last-of-type th:first-of-type div.cell {
+  text-align: left; /*������������������*/
+}
+/*������������*/
+::v-deep .el-table thead.is-group tr:first-of-type th:first-of-type:before {
+  content: "";
+  position: absolute;
+  width: 1px;
+  height: 100px; /*���������������*/
+  top: 0;
+  left: 0;
+  background-color: grey;
+  opacity: 0.2;
+  display: block;
+  transform: rotate(299deg); /*���������������������*/
+  -webkit-transform-origin: top;
+  transform-origin: top;
+}
+
+::v-deep .el-table thead.is-group tr:last-of-type th:first-of-type:before {
+  content: "";
+  position: absolute;
+  width: 1px;
+  height: 100px; /*���������������*/
+  bottom: 0;
+  right: 0;
+  background-color: grey;
+  opacity: 0.2;
+  display: block;
+  transform: rotate(299deg); /*���������������������*/
+  -webkit-transform-origin: bottom;
+  transform-origin: bottom;
+}
+::v-deep .el-table thead.is-group th {
+  height: 27.4px;
+}
+::v-deep .el-table thead{
+  color: #000;
+  font-size: 15px;
+}
+::v-deep .el-table tr{
+  font-size: 15px;
+}
+/deep/.numColor{
+  color: red;
+  display: inline-block;
+    margin-right: 8px;
+}
+/deep/.rankingTitle{
+  font-weight: 700;
+  color: #000;
+}
+</style>
+<style>
+.el-tooltip__popper{
+  font-size: 16px!important;
+}
 </style>

--
Gitblit v1.8.0