From 64b642cfbe4f34706ed40af77e51079ddf919d54 Mon Sep 17 00:00:00 2001 From: quanyawei <401863037@qq.com> Date: Fri, 13 Oct 2023 16:52:43 +0800 Subject: [PATCH] fix:查询修改和表格添加 --- src/views/charts/index.vue | 522 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 395 insertions(+), 127 deletions(-) diff --git a/src/views/charts/index.vue b/src/views/charts/index.vue index a93f96a..50a1083 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,52 @@ collapse-tags clearable placeholder="������������" - style="width: 354px;" + style="width: 354px" /> <!-- <div> --> - <el-select v-model="value" placeholder="������������" style="margin-left:20px"> - <el-option - v-for="item in newSensor" - :key="item.value" - :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"> + <!-- <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> + <el-table-column prop="rankingTitle" label="������" width="150" align="center"> + <el-table-column + prop="rankingTitle" + label="������" + align="center" + width="150" + /> + </el-table-column> + <template v-for="(th, thIndex) in thArr"> + <el-table-column :key="thIndex" align="center" :label="th.label" :prop="th.prop" /> + </template> + </el-table> + </div> + </div> </template> @@ -43,12 +62,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,13 +92,16 @@ } } export default { -// import ��������������������������������������������������� + // import ��������������������������������������������������� components: { LineChart, DatePicker, MouthPicker, HourPicker, - CustomPicker + CustomPicker, + CustomPicker1, + TimePicker1, + HourPicker1 }, filters: { sensorFilter: function(value) { @@ -94,13 +120,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,11 +136,64 @@ 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 souceData = [] + const firstData = [] + 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 + }) + } + const a = [...firstData] + data.push({ ...fobj, rankingTitle: '������������' }, { ...sobj, rankingTitle: '������������' }) + console.log('firstData', fobj) + console.log('souceData', sobj) + console.log('datadatadata', data) + return data + } + }, // ������data������������������ watch: { // ��������������������������� @@ -128,19 +207,69 @@ 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)' } } }, @@ -152,17 +281,90 @@ // 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) { + firstIndex.forEach(item => { + a += (originalValue[item].name).replace(/\s+/g, '') + '(' + originalValue[item].sensorValue + ')' + ',' + }) + 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) + } + }) + secondeIndex.forEach(item => { + b += (originalValue[item].name).replace(/\s+/g, '') + '(' + originalValue[item].sensorValue + ')' + ',' + }) + secondeDateList.push({ + name: b + }) + } else if (firstIndex.length <= 1) { + fiestDateList.push({ + name: (originalValue[0].name).replace(/\s+/g, '') + '(' + originalValue[0].sensorValue + ')' + }) + if (originalValue.length > 1) { + originalValue.forEach((value, inx) => { + if ((Number(originalValue[1].sensorValue) === Number(value.sensorValue))) { + secondeIndex.push(inx) + } + }) + secondeIndex.forEach(item => { + b += (originalValue[item].name).replace(/\s+/g, '') + '(' + originalValue[item].sensorValue + ')' + ',' + }) + 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: [], @@ -179,29 +381,55 @@ // 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() { @@ -214,14 +442,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 + }) } } }) @@ -231,6 +467,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] @@ -240,88 +477,119 @@ 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: [] - // } 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(-43deg); /*���������������������*/ + transform: rotate(-70deg); /*���������������������*/ + -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(-45deg); /*���������������������*/ + transform: rotate(-70deg); /*���������������������*/ + -webkit-transform-origin: bottom; + transform-origin: bottom; +} +::v-deep .el-table thead.is-group th { + height: 27.4px; +} + </style> -- Gitblit v1.8.0