From 9eb85404a96658d83fc0168f306adabb8c1c992e Mon Sep 17 00:00:00 2001
From: quanyawei <401863037@qq.com>
Date: Tue, 14 Nov 2023 10:31:03 +0800
Subject: [PATCH] Merge branch 'feature_1.0'
---
src/views/charts/index.vue | 613 +++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 481 insertions(+), 132 deletions(-)
diff --git a/src/views/charts/index.vue b/src/views/charts/index.vue
index a93f96a..9172a88 100644
--- a/src/views/charts/index.vue
+++ b/src/views/charts/index.vue
@@ -1,5 +1,5 @@
<template>
- <div style="width: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
@@ -9,33 +9,105 @@
collapse-tags
clearable
placeholder="������������"
- style="width: 354px;"
+ style="width: 354px"
/>
<!-- <div> -->
- <el-select v-model="value" placeholder="������������" style="margin-left:20px">
+ <el-select
+ v-model="value"
+ placeholder="������������"
+ style="margin-left: 20px"
+ >
<el-option
- v-for="item in newSensor"
- :key="item.value"
+ 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">
+ <!-- <el-radio-group v-model="radio1" style="margin-left:20px">
<el-radio-button label="���������" />
<el-radio-button label="������" />
<el-radio-button label="������" />
<el-radio-button label="���������" />
- </el-radio-group>
- <component :is="dataType" style="padding-left:0;margin-left:20px;width:160px" @sendPickerChild="showPickerChild" />
+ </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-select>
+ <component
+ :is="dataType"
+ style="padding-left: 0; margin-left: 20px; width: 160px"
+ 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">(������:ug/m��)</div>
+ <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" />
+ <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>
@@ -43,12 +115,16 @@
// ���������������������������������������������������������js������������������js���json������������������������������
// ���������import������������������from'������������������';
-import LineChart from '@/components/Echarts/LineChart'
+import LineChart from '@/components/Echarts/LineChart2'
import DatePicker from '@/components/Form/DatePicker'
import MouthPicker from '@/components/Form/MouthPicker'
import HourPicker from '@/components/Form/HourPicker'
+import HourPicker1 from '@/components/Form/HourPicker1'
import CustomPicker from '@/components/Form/CustomPicker'
+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: {
@@ -69,24 +145,27 @@
}
}
export default {
-// import ���������������������������������������������������
+ // import ���������������������������������������������������
components: {
LineChart,
DatePicker,
MouthPicker,
HourPicker,
- CustomPicker
+ CustomPicker,
+ CustomPicker1,
+ TimePicker1,
+ HourPicker1
},
filters: {
- sensorFilter: function(value) {
- if (!value) return ''
+ sensorFilter: function (value) {
+ if (!value) { return '' }
return json[value]
}
},
props: {
// defaultData: Array
},
- data() {
+ data () {
// ������������������
return {
dataType: 'HourPicker',
@@ -94,13 +173,13 @@
props: { multiple: true },
options: [],
value: '',
- // value1: '',
+ select1: '������',
+ selectyz: '(������:ug/m��)',
newMac: '',
newMac1: [],
- // newMac2:'',
- newSensor: [], /* ������������ */
+ newSensor: [] /* ������������ */,
radio1: '������',
- unit: 'hour',
+ unit: 'day',
type: 'select',
newLineChartData: {
series: [],
@@ -110,15 +189,65 @@
newData: '',
defaultData: [],
medium: '',
- isSelect: false
+ isSelect: false,
+ options1: [
+ {
+ label: '������������',
+ value: '������������'
+ },
+ {
+ label: '���������',
+ value: '���������'
+ },
+ {
+ label: '������',
+ value: '������'
+ },
+ {
+ label: '������',
+ 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) => {
+ if (item.deviceData.length > 0) {
+ 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: '������������' })
+ return data
+ }
+ },
// ������data������������������
watch: {
// ���������������������������
- newMac(newVal, oldval) {
+ newMac (newVal, oldval) {
this.newMac1 = []
for (let i = 0; i < newVal.length; i++) {
// console.log(newVal[i], 111)
@@ -128,41 +257,177 @@
this.getSensor()
},
// ������dataType���������������
- radio1(nv, ov) {
+ select1 (nv, ov) {
if (nv === '������') {
this.dataType = 'HourPicker'
- this.unit = 'hour'
+ this.unit = 'day'
} else if (nv === '������') {
this.dataType = 'DatePicker'
- this.unit = 'day'
+ this.unit = 'month'
} else if (nv === '������') {
this.dataType = 'MouthPicker'
this.unit = 'month'
+ } 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'
}
+ },
+ value (one, two) {
+ if (
+ one === 'a34004' ||
+ one === 'a34002' ||
+ one === 'a21004' ||
+ one === 'a21026' ||
+ one === 'a05024'
+ ) {
+ this.selectyz = '(������:ug/m��)'
+ } else if (
+ one === 'a21005' ||
+ one === 'a99054' ||
+ one === 'a31001' ||
+ one === 'a24088'
+ ) {
+ this.selectyz = '(������:mg/m��)'
+ } else if (one === 'a01001') {
+ this.selectyz = '(������:���)'
+ } else if (one === 'a01002') {
+ this.selectyz = '(������:%)'
+ } else if (one === 'a01007') {
+ this.selectyz = '(������:m/s)'
+ } else if (one === 'a01008') {
+ this.selectyz = '(������:���)'
+ } else if (one === 'a01006') {
+ this.selectyz = '(������:hpa)'
+ } else if (one === 'a00e12') {
+ this.selectyz = '(������:lux)'
+ } else if (one === 'a19002') {
+ this.selectyz = '(������:���)'
+ } else if (one === 'a00e03' || one === 'a00e04') {
+ this.selectyz = '(������:pcs/0.1L)'
+ } else if (one === 'a00e13') {
+ this.selectyz = '(������:db)'
+ } else if (
+ one === 'a21028' ||
+ one === 'a25002' ||
+ one === 'a21001' ||
+ one === 'a25005' ||
+ one === 'a25003'
+ ) {
+ this.selectyz = '(������:ppm)'
+ }
}
},
// ������������ - ��������������������������������� this ���������
- created() {
+ created () {
this.getData()
},
// ������������ - ��������������������������� DOM ���������
// 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)
+ let allData = data.map(item => {
+ if (item.sensorValue !== null) {
+ return item
+ } else {
+ item.sensorValue = '0.0'
+ return item
+ }
+
+ })
+
+ const originalValue = _.orderBy(allData, ['sensorValue'], ['desc'])
+ const firstIndex = []
+ const fiestDateList = []
+ const secondeIndex = []
+ const secondeDateList = []
+ console.log('allData', allData)
+ 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> ' + "<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> ' + "<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> (' + (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> ' + "<span class='numName'>("
+ secondeIndex.forEach((item, index) => {
+ b += (originalValue[item].name).replace(/\s+/g, '') + (index === secondeIndex.length - 1 ? '' : ',')
+ })
+ b += ')</span>'
+ secondeDateList.push({
+ name: b
+ })
+ }
+ }
+ arr = fiestDateList.concat(secondeDateList)
+ 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() {
+ selectData () {
+ console.log(this.newData)
var newLineChartData = {
series: [],
xAxis: [],
@@ -179,32 +444,58 @@
// times: data instanceof Array ? data : [data]
times: this.newData instanceof Array ? this.newData : [this.newData]
}
- }).then((res) => {
- // console.log('������������������������������')
- // console.log(res)
- const data = res.data
- let lockLength = 0
- for (let i = 0; i < data.length; i++) {
- for (let j = 0; j < data[i].deviceData.length; j++) {
- if (lockLength < data[i].deviceData.length) {
- newLineChartData.series.push({ data: [], name: '', type: 'line' })
+ })
+ .then((res) => {
+ // console.log('������������������������������')
+ 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++) {
+ 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: '',
+ triggerLineEvent: true,
+ emphasis: { focus: 'series' },
+ type: 'line'
+ })
+ }
newLineChartData.series[j].name = data[i].deviceData[j].name
newLineChartData.title.push(data[i].deviceData[j].name)
+ newLineChartData.series[j].data.push(
+ data[i].deviceData[j].sensorValue
+ )
}
- lockLength++
- newLineChartData.series[j].data.push(data[i].deviceData[j].sensorValue)
+ newLineChartData.xAxis.push(data[i].time)
}
- newLineChartData.xAxis.push(data[i].time)
- }
- // newLineChartData.title = this.value
- this.lineChartData = newLineChartData
- // console.log(newLineChartData, 'newLineChartData')
- }).catch((err) => {
- console.log(err)
- })
+ // newLineChartData.title = this.value
+ this.lineChartData = newLineChartData
+ console.log(lineChartData, 'newLineChartData')
+ })
+ .catch((err) => {
+ console.log(err)
+ })
},
// ������������������������
- getData() {
+ getData () {
this.$request({
url: '/monitorPoint/queryMonitorPoints',
method: 'get',
@@ -214,14 +505,22 @@
})
.then((res) => {
// console.log('������index������������������������')
+ // console.log(res)
this.defaultData = res.data.monitorPoints
for (let i = 0; i < this.defaultData.length; i++) {
- this.options.push({ value: this.defaultData[i].name, label: this.defaultData[i].name })
+ this.options.push({
+ value: this.defaultData[i].name,
+ label: this.defaultData[i].name
+ })
this.options[i].children = []
- if (this.defaultData[i].devices) {
- 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], label: this.defaultData[i].devices[j].name })
- }
+ 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
+ ],
+ label: this.defaultData[i].devices[j].name
+ })
}
}
})
@@ -230,7 +529,8 @@
})
},
// ���������������������������������
- getSensor() {
+ 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]
@@ -240,88 +540,137 @@
data: {
macs: this.newMac1
}
- }).then((result) => {
- // console.log(result)
- // this.newSensor = []
- var sensor = result.data
- for (var i in sensor) {
- this.newSensor.push({ value: i, label: sensor[i] })
- // this.newSensor[i].value = sensor.i
- // this.newSensor[i].name = sensor[i]
- }
- }).catch((err) => {
- console.log(err)
})
+ .then((result) => {
+ // console.log(result)
+ // this.newSensor = []
+ var sensor = result.data
+ for (var i in sensor) {
+ this.newSensor.push({ value: i, label: sensor[i] })
+ // this.newSensor[i].value = sensor.i
+ // this.newSensor[i].name = sensor[i]
+ }
+ })
+ .catch((err) => {
+ console.log(err)
+ })
},
// ���������������������������������������������
- showPickerChild(data) {
- // console.log(data)
- // var newLineChartData = {
- // series: [],
- // xAxis: [],
- // title: []
- // }
+ showPickerChild (data) {
this.newData = data
- // this.newXData = []
- // this.$request({
- // url: '/deviceInfo/getTrendChartData',
- // method: 'post',
- // data: {
- // macs: this.newMac1,
- // sensorCode: this.value,
- // type: this.unit,
- // // times: data instanceof Array ? data : [data]
- // times: this.newData instanceof Array ? this.newData : [this.newData]
- // }
- // }).then((res) => {
- // console.log('������������������������������')
- // console.log(res)
- // // if(res.)
- // const data = res.data
- // let lockLength = 0
- // for (let i = 0; i < data.length; i++) {
- // for (let j = 0; j < data[i].deviceData.length; j++) {
- // if (lockLength < data[i].deviceData.length) {
- // newLineChartData.series.push({ data: [], name: '', type: 'line' })
- // newLineChartData.series[j].name = data[i].deviceData[j].name
- // newLineChartData.title.push(data[i].deviceData[j].name)
- // }
- // lockLength++
- // newLineChartData.series[j].data.push(data[i].deviceData[j].sensorValue)
- // }
- // newLineChartData.xAxis.push(data[i].time)
- // }
- // // newLineChartData.title = this.value
- // this.lineChartData = newLineChartData
- // }).catch((err) => {
- // console.log(err)
- // })
}
} // ���������������keep-alive������������������������������������
}
</script>
<style scoped lang="scss">
-.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;
- }
+#chartTableContent {
+ overflow-y: scroll;
+ overflow-x: hidden;
}
-.topTitle{
- display: flex;
- justify-content: space-between;
- margin-bottom: 20px;
- padding: 0 15px;
+.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;
+ }
}
-.btn1{
+
+.topTitle {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ padding: 0 15px;
+}
+
+.btn1 {
margin-left: 1%;
height: 40px;
}
+
+.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