This commit is contained in:
quantulr
2024-03-25 14:53:46 +08:00
parent 6dd0bd0c63
commit 8de62aa632
3 changed files with 150 additions and 126 deletions

View File

@ -162,7 +162,7 @@
<template slot-scope="scope">
{{
scope.row.deviceType
? deviceTypeList.find((v) => v.value == scope.row.deviceType)
? deviceTypeList.find(v => v.value == scope.row.deviceType)
.label
: ''
}}
@ -177,8 +177,25 @@
<el-table-column align="center" prop="version" label="可升级软件版本">
</el-table-column>
<el-table-column align="center" label="升级状态">
<template slot-scope="scope">
<!-- <template slot-scope="scope">
{{ scope.row.isUpdate == 0 ? '已' : '可' }}升级
</template> -->
<template #default="{row}">
<el-progress
v-if="row.updateStatus == '1'"
type="circle"
:width="40"
:stroke-width="2"
status="success"
:percentage="100"
></el-progress>
<el-progress
v-else
type="circle"
:width="40"
:stroke-width="2"
:percentage="0"
></el-progress>
</template>
</el-table-column>
<el-table-column align="center" label="上次升级时间">
@ -269,7 +286,7 @@ import {
OTAUpdate,
OTAUpdates,
getNodeOTAHistory,
nodeOTAHistoryExport,
nodeOTAHistoryExport
} from '@/api/firmware/firmwareupdate';
import { select as projectSelect } from '@/api/hardware/project';
import { select as productSelect } from '@/api/hardware/product';
@ -279,7 +296,7 @@ import { userSelect } from '@/api/system/user';
export default {
name: 'FirmwareUpdate',
components: {
Region,
Region
},
data() {
return {
@ -290,7 +307,7 @@ export default {
queryProjectSelectList: [],
isUpdateList: [
{ label: '已升级', value: 0 },
{ label: '可升级', value: 1 },
{ label: '可升级', value: 1 }
],
value: '',
options: '',
@ -303,14 +320,14 @@ export default {
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 10
},
deviceTypeList: [
{ label: '锐能设备', value: 'rn' },
{ label: '铁塔设备', value: 'tt' },
{ label: '铁塔设备', value: 'tt' }
],
nodeOTAHistoryDialog: false,
nodeOTAHistoryData: [],
nodeOTAHistoryData: []
};
},
created() {
@ -335,12 +352,12 @@ export default {
this.$confirm('是否确认导出所有节点升级记录?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
type: 'warning'
})
.then(function () {
.then(function() {
return nodeOTAHistoryExport();
})
.then((response) => {
.then(response => {
this.download(response.msg);
});
},
@ -387,12 +404,12 @@ export default {
this.$confirm(`是否确认升级${deviceId}?`, '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
type: 'warning'
})
.then(() => {
this.OTAUpdate([{ productId, nodeId, deviceId }]);
})
.catch((res) => {});
.catch(res => {});
},
handleOTAUpdate() {
if (this.ids.length) {
@ -401,18 +418,18 @@ export default {
});
const h = this.$createElement;
this.$confirm(
`是否确认批量升级\r\n${snap.map((v) => v.deviceId).join(',\r\n')}?`,
`是否确认批量升级\r\n${snap.map(v => v.deviceId).join(',\r\n')}?`,
'警告',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
type: 'warning'
}
)
.then(() => {
this.OTAUpdate(snap);
})
.catch((res) => {});
.catch(res => {});
} else {
let snap = Object.assign({}, this.queryParams);
delete snap.pageNum;
@ -420,12 +437,12 @@ export default {
this.$confirm(`是否确认批量升级?`, '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
type: 'warning'
})
.then(() => {
this.OTAUpdates(snap);
})
.catch((res) => {});
.catch(res => {});
}
},
@ -458,14 +475,18 @@ export default {
this.ids = selection;
},
getList() {
list(this.queryParams).then((response) => {
list(this.queryParams).then(response => {
this.tableData = response.rows;
this.total = response.total;
});
},
handleUpdate() {},
},
handleUpdate() {}
}
};
</script>
<style></style>
<style scoped>
::v-deep .el-progress__text {
font-size: 16px !important;
}
</style>

View File

@ -204,10 +204,10 @@
</template>
<script>
import { getKeyHistory, info, updateValue } from '@/api/hardware/device';
import { getProvinceByCode } from '@/api/hardware/province';
import { handleOffsetAndRange } from '../../../utils/offsetMap';
import ReconnectingWebSocket from 'reconnecting-websocket';
import { getKeyHistory, info, updateValue } from '@/api/hardware/device'
import { getProvinceByCode } from '@/api/hardware/province'
import { handleOffsetAndRange } from '../../../utils/offsetMap'
import ReconnectingWebSocket from 'reconnecting-websocket'
export default {
name: 'DeviceDetail',
@ -248,49 +248,49 @@ export default {
{ label: '锐能设备', value: 'rn' },
{ label: '铁塔设备', value: 'tt' }
]
};
}
},
watch: {
selectDate() {
if (!this.selectDate) {
this.selectDate = '';
this.selectDate = ''
}
}
},
computed: {
// 过充 单体过充阈值
overcharge() {
let a = this.signal.find(item => item.keyCN == '单体过充阈值');
return a ? a.valueCN - 0 : null;
let a = this.signal.find(item => item.keyCN == '单体过充阈值')
return a ? a.valueCN - 0 : null
},
// 过放 单体过放阈值
overdischarge() {
let a = this.signal.find(item => item.keyCN == '单体过放阈值');
return a ? a.valueCN - 0 : null;
let a = this.signal.find(item => item.keyCN == '单体过放阈值')
return a ? a.valueCN - 0 : null
},
// 过压 单体过压阈值
overVoltage() {
let a = this.signal.find(item => item.keyCN == '单体过压阈值');
return a ? a.valueCN - 0 : null;
let a = this.signal.find(item => item.keyCN == '单体过压阈值')
return a ? a.valueCN - 0 : null
},
// 欠压 单体欠压阈值
underVoltage() {
let a = this.signal.find(item => item.keyCN == '单体欠压阈值');
return a ? a.valueCN - 0 : null;
let a = this.signal.find(item => item.keyCN == '单体欠压阈值')
return a ? a.valueCN - 0 : null
}
},
created() {
let { id } = this.$route.query;
let { id } = this.$route.query
if (!id) {
this.msgError('无设备ID');
this.$router.go(-1);
return;
this.msgError('无设备ID')
this.$router.go(-1)
return
}
this.id = id;
this.getDetail();
this.id = id
this.getDetail()
},
mounted() {
this.initWebsocket();
this.initWebsocket()
},
methods: {
handleOffsetAndRange,
@ -301,29 +301,30 @@ export default {
type: 'warning'
})
.then(() => {
item.value = command;
let query = this.info;
query['signal'] = item;
item.value = command
let query = this.info
query['signal'] = item
updateValue(query).then(({ code, data, message }) => {
if (200 == code) {
this.msgSuccess(message);
this.getDetail();
this.msgSuccess(message)
this.getDetail()
} else {
this.msgError(message);
this.msgError(message)
}
});
})
.catch(() => {});
})
.catch(() => {
})
// this.$message('click on item ' + command);
},
open(item) {
let keyVla = '';
let keyVla = ''
if (item.key == '01305001') {
keyVla = '数值20-3600';
keyVla = '数值20-3600'
} else if (item.key == '01306001') {
keyVla = '字符串';
keyVla = '字符串'
} else {
keyVla = '数值20-600';
keyVla = '数值20-600'
}
this.$prompt(`请输入${keyVla}`, '提示', {
confirmButtonText: '确定',
@ -332,67 +333,68 @@ export default {
inputErrorMessage: '校验失败'
})
.then(({ value }) => {
item.value = value;
let query = this.info;
query['signal'] = item;
item.value = value
let query = this.info
query['signal'] = item
updateValue(query).then(({ code, data, message }) => {
if (200 == code) {
this.msgSuccess(message);
this.getDetail();
this.msgSuccess(message)
this.getDetail()
} else {
this.msgError(message);
this.msgError(message)
}
});
})
})
.catch(() => {
// this.msgInfo('取消输入');
});
})
},
getDetail() {
info(this.id).then(async ({ code, msg, info }) => {
info(this.id).then(async({ code, msg, info }) => {
if (200 == code) {
info.proName = await this.getProvinceByCode(info.proCode);
info.cityName = await this.getProvinceByCode(info.cityCode);
info.disName = await this.getProvinceByCode(info.disCode);
this.info = info;
info.proName = await this.getProvinceByCode(info.proCode)
info.cityName = await this.getProvinceByCode(info.cityCode)
info.disName = await this.getProvinceByCode(info.disCode)
this.info = info
if (info.deviceSignal) {
let deviceSignal = JSON.parse(info.deviceSignal.signalJsonTurn);
this.signal = deviceSignal.signal;
this.defaultSignal = info.defaultSignal;
let deviceSignal = JSON.parse(info.deviceSignal.signalJsonTurn)
this.signal = deviceSignal?.signal
this.defaultSignal = info.defaultSignal
// console.log(info.deviceSignal.signalJsonTurn);
// console.log(this.signal);
// let a = deviceSignal.signal.find(
// item => item.keyCN == '单体过充阈值'
// );
// console.log(a.valueCN);
this.signalUpdateTime = info.deviceSignal.updateTime;
this.signalUpdateTime = info.deviceSignal.updateTime
}
} else {
this.msgError(msg);
this.msgError(msg)
}
});
})
},
getProvinceByCode(code) {
return new Promise((resolve, reject) => {
getProvinceByCode(code)
.then(({ code, msg, data }) => {
if (code == 200) {
resolve(data.cityName);
resolve(data?.cityName)
} else {
this.$message.error(msg);
reject({ msg, code });
this.$message.error(msg)
reject({ msg, code })
}
})
.catch(error => {
reject(error);
});
});
reject(error)
})
})
},
openDialog(deviceId, key) {
this.dialogVisible = true;
this.queryParams.deviceId = deviceId;
this.queryParams.key = key;
this.getChartData();
this.dialogVisible = true
this.queryParams.deviceId = deviceId
this.queryParams.key = key
this.getChartData()
},
// getDay(mss) {
@ -404,33 +406,33 @@ export default {
// },
getNewData() {
if (this.selectDate == '') return this.$message.info('请选择日期');
if (this.selectDate == '') return this.$message.info('请选择日期')
// let a = new Date(this.selectDate[0]).getTime();
// let b = new Date(this.selectDate[1]).getTime();
// const minTime = b - a;
// const flag = this.getDay(minTime);
this.queryParams.startTime = this.selectDate[0];
this.queryParams.endTime = this.selectDate[1];
this.getChartData();
this.queryParams.startTime = this.selectDate[0]
this.queryParams.endTime = this.selectDate[1]
this.getChartData()
},
getChartData() {
getKeyHistory(this.queryParams).then(data => {
this.$nextTick(() => {
this.initChart(data);
});
});
this.initChart(data)
})
})
},
initChart(data) {
var echarts = require('echarts');
this.centerChart = echarts.init(this.$refs.echa);
let months = [];
let nums = [];
var echarts = require('echarts')
this.centerChart = echarts.init(this.$refs.echa)
let months = []
let nums = []
data.map(item => {
for (const k in item) {
months.push(k);
nums.push(item[k]);
months.push(k)
nums.push(item[k])
}
});
})
let option = {
tooltip: {
trigger: 'axis'
@ -441,27 +443,27 @@ export default {
dataView: {
readOnly: true,
optionToContent: function(opt) {
let axisData = opt.xAxis[0].data; //坐标数据
let series = opt.series; //折线图数据
let tdHeads = '<td>序号</td><td>时间</td>'; //表头
let tdBodys = ''; //数据
let axisData = opt.xAxis[0].data //坐标数据
let series = opt.series //折线图数据
let tdHeads = '<td>序号</td><td>时间</td>' //表头
let tdBodys = '' //数据
series.forEach(function(item) {
//组装表头
tdHeads += `<td style="text-align:center">${item.name}</td>`;
});
let table = `<table style="width:100%;text-align: center"><tbody><tr>${tdHeads} </tr>`;
tdHeads += `<td style="text-align:center">${item.name}</td>`
})
let table = `<table style="width:100%;text-align: center"><tbody><tr>${tdHeads} </tr>`
for (let i = 0, l = axisData.length; i < l; i++) {
for (let j = 0; j < series.length; j++) {
//组装表数据
tdBodys += `<td>${series[j].data[i]}</td>`;
tdBodys += `<td>${series[j].data[i]}</td>`
}
table += `<tr><td>${i + 1}</td><td >${
axisData[i]
}</td>${tdBodys}</tr>`;
tdBodys = '';
}</td>${tdBodys}</tr>`
tdBodys = ''
}
table += '</tbody></table>';
return table;
table += '</tbody></table>'
return table
}
},
// restore: {},
@ -473,7 +475,7 @@ export default {
type: 'category',
boundaryGap: false,
data: months.map(function(str) {
return str.replace(' ', '\n');
return str.replace(' ', '\n')
})
},
yAxis: {
@ -490,21 +492,21 @@ export default {
}
}
]
};
this.centerChart.setOption(option);
}
this.centerChart.setOption(option)
},
initWebsocket() {
const wsBaseUrl =
process.env.NODE_ENV === 'development'
? '192.168.110.10:8080'
: `${window.location.host}${process.env.VUE_APP_BASE_API}`;
this.websocket = new ReconnectingWebSocket(`ws://${wsBaseUrl}/ws`);
: `${window.location.host}:8080`
this.websocket = new ReconnectingWebSocket(`ws://${wsBaseUrl}/ws`)
this.websocket.addEventListener('message', e => {
this.$message.success(e.data);
});
this.$message.success(e.data)
})
}
}
};
}
</script>
<style lang="scss" scoped>

View File

@ -39,8 +39,9 @@ module.exports = {
// target: `http://47.115.73.110:8080`,
// target: `http://121.37.250.170:8080`,
// target: `http://192.168.0.129:8080`,
target: `http://120.79.217.22:81/api`,
// target: `http://192.168.0.131:8080`,
target: `http://192.168.110.10:8080`,
// target: `http://192.168.110.10:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''