20260823:H5修复查询网关设备物理量bug

This commit is contained in:
George 2026-08-23 16:51:42 +08:00
parent 3f5bba9a02
commit 7539dd33be
4 changed files with 197 additions and 81 deletions

View File

@ -32,7 +32,7 @@ export function getDeviceHistory (params) {
return http.get('/iot/deviceLog/history', { params: params });
}
//查询历史监测数据
//查询历史监测数据(直连设备)
export function getHistoryList (data) {
return http.request({
url: '/data/center/deviceHistory',
@ -41,6 +41,15 @@ export function getHistoryList (data) {
})
}
// 查询网关子设备对比历史数据
export function getSubDeviceComparativeHistory (data) {
return http.request({
url: '/data/center/subDeviceComparativeHistory',
method: 'post',
data: data,
})
}
// 查询设备日志详细
export function getDeviceLog (logId) {
return http.request({

View File

@ -812,7 +812,15 @@
},
"deviceHistory": {
"lastTwoHours": "last 2 hours",
"lastFourHours": "last 4 hours",
"lastEightHours": "last 8 hours",
"lastTwelveHours": "last 12 hours",
"lastOneDay": "last 1 day",
"lastTwoDays": "last 2 days",
"lastThreeDays": "last 3 days",
"lastFiveDays": "last 5 days",
"lastSevenDays": "last 7 days",
"lastFifteenDays": "last 15 days",
"lastThirtyDay": "last 30 day",
"custom": "custom",
"inputDate": "starting time",

View File

@ -814,7 +814,15 @@
},
"deviceHistory": {
"lastTwoHours": "最近2小时",
"lastFourHours": "最近4小时",
"lastEightHours": "最近8小时",
"lastTwelveHours": "最近12小时",
"lastOneDay": "最近1天",
"lastTwoDays": "最近2天",
"lastThreeDays": "最近3天",
"lastFiveDays": "最近5天",
"lastSevenDays": "最近7天",
"lastFifteenDays": "最近15天",
"lastThirtyDay": "最近30天",
"custom": "自定义",
"inputDate": "起始时间",

View File

@ -81,7 +81,7 @@
import uniPagination from '@/pagesA/components/uni-pagination/index.vue';
import { getSubGatewayList } from '@/apis/modules/gateway.js';
import { listThingsModel } from '@/apis/modules/device.js';
import { getHistoryList } from '@/apis/modules/deviceLog.js';
import { getHistoryList, getSubDeviceComparativeHistory } from '@/apis/modules/deviceLog.js';
export default {
name: 'deviceHistory',
@ -118,27 +118,59 @@
return {
deviceInfo: {}, // 设备信息
deviceId: null,
// 时间快捷数据列表
// 时间快捷数据列表(value 为小时数,-1 表示自定义)
timeShortcuts: [{
value: 0,
value: 2,
text: this.$tt('deviceHistory.lastTwoHours')
},
{
value: 1,
value: 4,
text: this.$tt('deviceHistory.lastFourHours')
},
{
value: 8,
text: this.$tt('deviceHistory.lastEightHours')
},
{
value: 12,
text: this.$tt('deviceHistory.lastTwelveHours')
},
{
value: 24,
text: this.$tt('deviceHistory.lastOneDay')
},
{
value: 2,
value: 48,
text: this.$tt('deviceHistory.lastTwoDays')
},
{
value: 72,
text: this.$tt('deviceHistory.lastThreeDays')
},
{
value: 120,
text: this.$tt('deviceHistory.lastFiveDays')
},
{
value: 168,
text: this.$tt('deviceHistory.lastSevenDays')
},
{
value: 360,
text: this.$tt('deviceHistory.lastFifteenDays')
},
{
value: 720,
text: this.$tt('deviceHistory.lastThirtyDay')
},
{
value: 3,
value: -1,
text: this.$tt('deviceHistory.custom')
},
],
// 查询参数
queryParams: {
timeShortcut: 1,
timeShortcut: 24,
strTime: `${beginTime}-${endTime}`,
beginTime: beginTime,
endTime: endTime,
@ -201,20 +233,13 @@
},
},
methods: {
// 快捷时间选择
// 快捷时间选择(val 为小时数,-1 表示自定义)
handleTimeShortcutChange (val) {
if (val === 3) {
if (val === -1) {
return;
}
const endTime = new Date().getTime();
let beginTime = null;
if (val === 0) {
beginTime = endTime - 3600 * 1000 * 2;
} else if (val === 1) {
beginTime = endTime - 3600 * 1000 * 24;
} else if (val === 2) {
beginTime = endTime - 3600 * 1000 * 24 * 30;
};
const beginTime = endTime - 3600 * 1000 * val;
this.queryParams.beginTime = beginTime;
this.queryParams.endTime = endTime;
this.queryParams.strTime = beginTime + '-' + endTime;
@ -263,7 +288,7 @@
this.queryParams.strTime = beginTime + '-' + e.value;
this.getHistory();
this.isDateTime = false;
this.queryParams.timeShortcut = 3;
this.queryParams.timeShortcut = -1;
}
},
// 取消日期选择
@ -322,9 +347,9 @@
}
});
},
// 获取物模型
// 获取物模型(网关设备按identifier去重)
getIdentifierList () {
const { deviceId } = this.deviceInfo;
const { deviceId, deviceType } = this.deviceInfo;
const params = {
deviceId: deviceId,
pageNum: 1,
@ -341,10 +366,24 @@
type: item.type,
}
}
}).filter(item => item !== undefined);
// 网关设备:按identifier去重(多个子设备可能有相同identifier)
if (deviceType === 2) {
const seen = new Set();
this.identifierList = this.identifierList.filter(item => {
if (seen.has(item.value)) {
return false;
}
seen.add(item.value);
return true;
});
this.identifierList = this.identifierList.filter(item => item !== undefined);
}
if (this.identifierList.length > 0) {
this.queryParams.identifiers = [this.identifierList[0].value];
}
}
});
},
// 获取统计数据
@ -354,9 +393,28 @@
},
// 获取统计数据
getHistory () {
const { identifiers, beginTime, endTime, slaveId } = this.queryParams;
const { deviceId, serialNumber } = this.deviceInfo;
const { identifiers, beginTime, endTime } = this.queryParams;
const { deviceId, serialNumber, deviceType } = this.deviceInfo;
if (identifiers.length !== 0) {
this.historys = [];
if (deviceType === 2) {
// 网关设备:调用多设备对比接口,数据按子设备SN存储
const params = {
gwDeviceId: deviceId,
identifierList: identifiers,
type: 1,
beginTime: moment(beginTime).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
};
getSubDeviceComparativeHistory(params).then(res => {
if (res.code === 200) {
this.historys = res.data || [];
this.chartData = this.getChartDatas();
this.getTableDatas();
}
})
} else {
// 直连设备
const idenList = identifiers.map((item) => {
const iden = this.identifierList.find((chil) => chil.value === item);
return {
@ -369,10 +427,8 @@
beginTime: moment(beginTime).format('YYYY-MM-DD HH:mm:ss'),
endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
deviceId: deviceId,
// slaveId: slaveId,
serialNumber: serialNumber,
};
this.historys = [];
getHistoryList(params).then(res => {
if (res.code === 200) {
this.historys = res.data;
@ -381,9 +437,25 @@
}
})
}
}
},
// 获取折线图数据
// 获取折线图数据(适配两种接口响应格式)
getChartDatas () {
const { deviceType } = this.deviceInfo;
if (deviceType === 2) {
// subDeviceComparativeHistory 格式: [{ "time": "2026-08-23 10:00:00", "子设备A": "25.5", "子设备B": "26.0" }]
const categories = this.historys.map((item) => item.time);
// 获取除 time 外的所有列名作为系列
const keys = Object.keys(this.historys[0] || {}).filter(k => k !== 'time');
const series = keys.map((key) => {
return {
name: key,
data: this.historys.map((d) => Number(d[key]) || 0),
};
});
return { categories, series };
} else {
// deviceHistory 格式: [{ "2026-08-23 10:00:00": [{ "temperature": "25.5" }] }]
const categories = this.historys.map((item) => Object.keys(item)[0]);
const series = this.queryParams.identifiers.map((item) => {
return {
@ -394,13 +466,31 @@
}),
};
});
return {
categories,
series
return { categories, series };
}
},
// 获取表格数据
// 获取表格数据(适配两种接口响应格式)
getTableDatas () {
const { deviceType } = this.deviceInfo;
if (deviceType === 2) {
// subDeviceComparativeHistory 格式
const keys = Object.keys(this.historys[0] || {}).filter(k => k !== 'time');
this.tableHeaders = keys.map((key) => ({
name: key,
value: key,
}));
this.tableComTemp = this.historys.map((item) => {
let obj = {};
keys.forEach((key) => {
obj[key] = item[key];
});
return {
time: item.time,
...obj
};
});
} else {
// deviceHistory 格式
this.tableHeaders = this.queryParams.identifiers.map((item) => ({
name: this.identifierList.find((chil) => chil.value === item).text,
value: item,
@ -416,6 +506,7 @@
...obj
};
});
}
this.devTotal = this.historys.length;
},
// 获取设备列表数据