diff --git a/src/api/ems/search.js b/src/api/ems/search.js index f53e504..32bd1ea 100644 --- a/src/api/ems/search.js +++ b/src/api/ems/search.js @@ -22,3 +22,11 @@ export function getPointValueList(data) { data }) } + +// 图表 +export function getAllBatteryIdsBySites(data) { + return request({ + url: `/ems/generalQuery/getAllBatteryIdsBySites/${data}`, + method: 'get', + }) +} \ No newline at end of file diff --git a/src/views/ems/search/DateTimeSelect.vue b/src/views/ems/search/DateTimeSelect.vue index 515b760..0827588 100644 --- a/src/views/ems/search/DateTimeSelect.vue +++ b/src/views/ems/search/DateTimeSelect.vue @@ -32,7 +32,7 @@ export default { return this.dataUnit === 3 ? 'daterange' : 'datetimerange' }, valueFormat(){ - return this.dataUnit === 3 ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm' + return this.dataUnit === 3 ? 'yyyy-MM-dd' :this.dataUnit === 2 ? 'yyyy-MM-dd HH:mm' : 'yyyy-MM-dd HH:mm:ss' }, disabledNextBtn(){ if(this.dateRange && this.dateRange.length ===2){ @@ -47,7 +47,14 @@ export default { dataUnit:{ handler(newVal,oldVal){ console.log('wacth到了dataUnit的变化',newVal,oldVal) - newVal && newVal!==oldVal && this.init() + this.init() + // if(!oldVal && newVal){ + // this.init() + // }else{ + // this.init() + // //为了触发调用图表接口 + // this.$emit('updateDate',this.dateRange || []) + // } }, immediate: true, } @@ -73,7 +80,7 @@ export default { this.dateRange = [timeAgo, formatNow]; this.defaultDateRange=[timeAgo, formatNow]; console.log('init',timeAgo,formatNow) - this.$emit('updateDate',this.dateRange || []) + this.$emit('initDate',this.dateRange || []) }, showBtnLoading(status){ this.loading = status @@ -96,6 +103,8 @@ export default { const timeDis= dataUnit === 3? 30 * 24 * 60 * 60 * 1000 :dataUnit === 2 ? 24 * 60 * 60 * 1000 : 60 * 60 * 1000 if(endTime - startTime > timeDis){ this.$message.error(`时间范围不能超过${dataUnit === 3 ? '30天' : dataUnit === 2 ? '24小时' : '1小时'}`) + }else{ + this.$emit('updateDate',this.dateRange || []) } }else{ this.$emit('updateDate',this.dateRange || []) diff --git a/src/views/ems/search/index.vue b/src/views/ems/search/index.vue index 650bff6..60c2d77 100644 --- a/src/views/ems/search/index.vue +++ b/src/views/ems/search/index.vue @@ -6,11 +6,16 @@ prop="siteIds" :rules="[{ required: true, message: '请选择站点' }]" > - - + + + + + + + {{ item.siteName }} - - + + @@ -28,10 +33,11 @@ @select="handleSelect" > - + @@ -50,7 +56,7 @@
- +
@@ -61,7 +67,7 @@ import * as echarts from 'echarts' import resize from '@/mixins/ems/resize' import {getAllSites} from "@/api/ems/zddt"; -import {getAllDeviceCategory,getPointValueList,pointFuzzyQuery} from '@/api/ems/search' +import {getAllDeviceCategory,getPointValueList,pointFuzzyQuery,getAllBatteryIdsBySites} from '@/api/ems/search' import DateTimeSelect from "./DateTimeSelect.vue"; export default { name: "Search", @@ -70,71 +76,32 @@ export default { computed: { isDtdc(){ return this.form.categoryName === '单体电池' - } + }, + }, + watch:{ + 'form.siteIds':{ + handler(newVal){ + newVal && this.isDtdc && this.getChildList() + } + }, + isDtdc:{ + handler(newVal){ + newVal && this.form.siteIds && this.getChildList() + !newVal && (this.form.child = []) + } + }, + }, data() { return { chart: null, deviceCategoryList:[],//设备列表 siteList: [],//站点列表 - childOptions:[ - { - value: '021_DDS_01', - label: '站点一', - children:[{ - value: '1', - label: '1-50', - children:[{ - value: '001', - label: '设备一' - },{ - value: '002', - label: '设备二' - },{ - value: '003', - label: '设备三' - }] - }] - }, - { - value: '021_DDS_02', - label: '站点二', - children: - [{ - value: '1', - label: '1-50', - children:[{ - value: '001', - label: '设备一' - },{ - value: '002', - label: '设备二' - }, { - value: '003', - label: '设备三' - }] - }, - { - value: '2', - label: '51-100', - children:[{ - value: '001', - label: '设备一' - },{ - value: '002', - label: '设备二' - },{ - value: '003', - label: '设备三' - }] - }] - - } - ],//二级设备列表 + childOptions:[],//二级设备列表 form: { dataRange:[],//时间选择范围 child:[], - siteIds: [],//当前选中的站点id 默认选中第一个站点 + siteIds: '',//当前选中的站点id 默认选中第一个站点 categoryName: '',//设备 pointName: '',//点位 dataUnit: 1,//横坐标 @@ -143,6 +110,43 @@ export default { } }, methods: { + getChildList(){ + this.childOptions=[] + this.form.child=[] + const {siteIds} = this.form + getAllBatteryIdsBySites([siteIds]).then(response=>{ + const data = response?.data || {}; + const base = 50 + let options = [] + Object.entries(data).forEach(([key,value],index)=>{ + if(!value) value =[] + options.push({ + value: key, + label: this.siteList.find(s=>s.siteId === key)?.siteName || '', + children:[] + }) + const length = value.length + const num = Math.ceil(length /base ) + if(num === 0) return + for(let i = 1; i <= num; i++){ + const start = (i-1)*base+1,end = i*base + options[index].children.push({ + value:i, + label: `${start}-${end}`, + children:[] + }) + for(let s = start;s<=Math.min(length,end);s++){ + options[index].children[i-1].children.push({ + value:value[s-1], + label:value[s-1] + }) + } + } + }) + console.log('二级设备options',options) + this.childOptions = options; + }) + }, handleChildChange(data){ console.log('选择二级设备',data) this.form.child=data @@ -156,6 +160,10 @@ export default { initChart() { this.chart = echarts.init(document.querySelector('#searchChart')) }, + updateDate(val){ + this.form.dataRange =val || [] + this.getDate() + }, setOption(data) { if(!this.chart) return this.chart.clear() @@ -165,7 +173,7 @@ export default { data.forEach((item,index)=>{ item.deviceList.forEach(inner=>{ dataset.push({ - name:`${this.siteList.find(s=>s.siteId === item.siteId)?.siteName || ''}-${inner.deviceId}`, + name:`${this.isDtdc ? `${inner.parentDeviceId ? inner.parentDeviceId+'-' : ''}` : ''}${inner.deviceId}`, type:'line', xdata:[], data:[] @@ -224,7 +232,7 @@ export default { }, querySearchAsync(query,cb){ console.log('查询数据',query) - if(this.form.siteIds.length===0 || !this.form.categoryName){ + if(!this.form.siteIds || !this.form.categoryName){ this.$message({ type: 'warning', message: '请先选择站点和设备', @@ -232,7 +240,7 @@ export default { return cb([]) } pointFuzzyQuery({ - siteIds:this.form.siteIds, + siteIds:[this.form.siteIds], categoryName:this.form.categoryName, pointName:query, }).then(response => { @@ -264,8 +272,31 @@ export default { return this.$message.error('请选择二级设备且不能超过5个'); } this.loading = true - const{siteIds,dataUnit,categoryName,pointName}=this.form - getPointValueList({siteIds,dataUnit,categoryName,pointName}).then(response => { + const{siteIds,dataUnit,categoryName,pointName,dataRange:[start='',end=''],child}=this.form + let siteDeviceMap={} + child.forEach(([first,second,third])=>{ + if(siteDeviceMap[first]){ + siteDeviceMap[first].push(third) + }else{ + siteDeviceMap[first]=[] + siteDeviceMap[first].push(third) + } + }) + let startDate,endDate + if(start && dataUnit===3){ + // startDate= start + `${dataUnit === 2 ? ':00' : ' 00:00:00'}` + startDate = start + ' 00:00:00' + }else{ + startDate=start + } + if(end && dataUnit===3){ + // endDate= end + `${dataUnit === 2 ? ':00' : ' 00:00:00'}` + endDate = end + ' 00:00:00' + }else{ + endDate=end + } + + getPointValueList({siteIds:[siteIds],dataUnit,categoryName,pointName,startDate,endDate,siteDeviceMap}).then(response => { this.setOption(response?.data || []) }).finally(()=>{ this.loading = false