From 7d123b1726d04bd4817d8014f730dd701284a892 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 12 Nov 2024 12:04:04 +0800
Subject: [PATCH] 新增固件版本回退功能
---
src/views/device/airport.vue | 149 ++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 116 insertions(+), 33 deletions(-)
diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index 753e8e0..dcd047b 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -57,9 +57,12 @@
<template #firmware_status="{ row }">
<div
v-if="row.firmware_status == 1"
- style="display: flex; flex-direction: row; align-items: center"
+ style="display: flex; flex-direction: column; align-items: center"
>
<el-tag type="info">无需升级</el-tag>
+ <el-tag type="success" effect="dark" class="active-element" @click="rollFirmware(row)"
+ >版本回退</el-tag
+ >
<!-- <div style="background-color: #f1f1f1; border-radius: 4px">无需升级</div> -->
</div>
<div
@@ -130,6 +133,26 @@
</template>
</el-dialog>
+ <el-dialog title="版本回退" append-to-body v-model="rollFirmwareBox" width="455px">
+ <div style="display: flex;flex-direction: row;align-items: center ">
+ 回退版本:
+ <el-select v-model="rollFirmVersion" clearable placeholder="Select" style="width: 240px">
+ <el-option
+ v-for="item in firmList"
+ :key="item.firmware_version"
+ :label="item.firmware_version"
+ :value="item.firmware_version"
+ />
+ </el-select>
+ </div>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="rollFirmwareBox = false">取 消</el-button>
+ <el-button type="primary" @click="rollFirmwareConfirm">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+
<el-drawer
title="机场授权管理"
size="60%"
@@ -160,6 +183,7 @@
getDetail,
getDeviceUpgradeInfo,
ota,
+ getDeviceFirmwareList,
} from '@/api/device/device';
import { getLazyTree } from '@/api/base/region';
@@ -179,6 +203,9 @@
data() {
return {
+ rollFirmVersion:'',
+ firmList: [],
+ rollFirmwareBox: false,
// 用于记录已经创建的websocket,防止重复创建
webSocketIdSet: new Set(),
// 用于保存多组websocket
@@ -478,67 +505,65 @@
},
},
destroyed() {
- this.websocketMap.forEach((k,v)=>{
- if(null!=v){
- v.close()
- this.websocketMap.delete(k)
- this.webSocketIdSet.delete(k)
+ this.websocketMap.forEach((k, v) => {
+ if (null != v) {
+ v.close();
+ this.websocketMap.delete(k);
+ this.webSocketIdSet.delete(k);
}
});
},
methods: {
// 关闭所有的webscoket
- closeAllWebsoket(){
- this.websocketMap.forEach((k,v)=>{
- if(null!=v){
- v.close()
- this.websocketMap.delete(k)
- this.webSocketIdSet.delete(k)
- }
- });
+ closeAllWebsoket() {
+ this.websocketMap.forEach((k, v) => {
+ if (null != v) {
+ v.close();
+ this.websocketMap.delete(k);
+ this.webSocketIdSet.delete(k);
+ }
+ });
},
// 连接webSocket
connectWebSocket(data) {
- const webSocketId = data.workspace_id
+ const webSocketId = data.workspace_id;
if (!this.webSocketIdSet.has(webSocketId)) {
// 防止重复连接
this.webSocketIdSet.add(webSocketId);
const webSorketUrl = getWebsocketUrl() + '&workspace-id=' + data.workspace_id;
// 监听ws 消息
- this.useConnectWebSocket(webSocketId,webSorketUrl);
+ this.useConnectWebSocket(webSocketId, webSorketUrl);
}
},
- useConnectWebSocket(webSocketId,url) {
+ useConnectWebSocket(webSocketId, url) {
const websocket = new ConnectWebSocket(url);
// 加入 webscoket map
- this.websocketMap.set(webSocketId, websocket)
+ this.websocketMap.set(webSocketId, websocket);
websocket?.registerMessageHandler(this.messageHandler);
websocket?.initSocket();
},
async messageHandler(payload) {
- console.log(payload, 7777);
-
if (!payload) {
return;
}
- if(payload.biz_code!="ota_progress"){
+ if (payload.biz_code != 'ota_progress') {
return;
}
var data = payload.data;
this.data.forEach(e => {
- if (e.device_sn==data.sn && data.output.status=='in_progress'){
+ if (e.device_sn == data.sn && data.output.status == 'in_progress') {
e.firmware_progress = data.output.progress.percent;
}
- if (e.device_sn==data.sn && data.output.status=='ok') {
- // 升级完成修改状态
- e.firmware_status = 1
- const webscoket = this.websocketMap.get(e.workspace_id);
- // 关闭
- webscoket?.close();
- //删除对应的webscoket
- this.websocketMap.delete(e.workspace_id);
- this.webSocketIdSet.delete(e.workspace_id);
+ if (e.device_sn == data.sn && data.output.status == 'ok') {
+ // 升级完成修改状态
+ e.firmware_status = 1;
+ const webscoket = this.websocketMap.get(e.workspace_id);
+ // 关闭
+ webscoket?.close();
+ //删除对应的webscoket
+ this.websocketMap.delete(e.workspace_id);
+ this.webSocketIdSet.delete(e.workspace_id);
}
});
},
@@ -567,6 +592,64 @@
that.$refs.firmwareManage.init(row);
});
},
+ // 版本回退点击事件
+ rollFirmware(row) {
+ if (row.status == 0) {
+ this.$message({
+ type: 'warning',
+ message: '设备不在线!',
+ });
+ return;
+ }
+ var that = this;
+ this.rollFirmwareBox = true;
+ const param = {
+ device_name: row.device_name,
+ };
+ // 获取固件最新版本信息
+ getDeviceFirmwareList(1, 20, param).then(res => {
+ that.firmList = [];
+ const data = res.data.data.records;
+ if (data.length === 0) {
+ return;
+ }
+ data.forEach(e => {
+ if (e.firmware_version != row.firmware_version) {
+ that.firmList.push(e);
+ }
+ });
+ that.firmwareInfo['device_name'] = row.device_name;
+ that.firmwareInfo['sn'] = row.device_sn;
+ // 3-普通升级,2-一致性升级;
+ that.firmwareInfo['firmware_upgrade_type'] = 3;
+ that.firmwareInfo['workspaceId'] = row.workspace_id;
+ });
+ },
+ // 版本回退
+ rollFirmwareConfirm() {
+ if(this.rollFirmVersion==''){
+ this.$message({
+ type: 'warning',
+ message: '请先选择回退的固件版本!',
+ });
+ return;
+ }
+ var that = this;
+ var arr = [];
+ that.firmwareInfo['product_version'] = this.rollFirmVersion;
+ arr.push(that.firmwareInfo);
+ ota(that.firmwareInfo.workspaceId, arr).then(res => {
+ that.firmwareVersion = '';
+ that.firmwareInfo = {};
+ that.rollFirmwareBox = false;
+ this.$message({
+ type: 'success',
+ message: '操作成功!',
+ });
+ this.onLoad(this.page);
+ done();
+ });
+ },
// 升级固件按钮事件
updateFirmware(row) {
if (row.status == 0) {
@@ -591,7 +674,7 @@
that.firmwareInfo['device_name'] = row.device_name;
that.firmwareInfo['sn'] = row.device_sn;
that.firmwareInfo['product_version'] = data[0].product_version;
- // 1-普通升级,2-一致性升级;
+ // 3-普通升级,2-一致性升级;
that.firmwareInfo['firmware_upgrade_type'] =
row.firmware_status === that.DeviceFirmwareStatusEnum.ToUpgraded
? that.DeviceFirmwareTypeEnum.ToUpgraded
@@ -722,7 +805,7 @@
this.onLoad(this.page, this.query);
},
onLoad(page, params = {}) {
- this.closeAllWebsoket()
+ // this.closeAllWebsoket();
const { releaseTimeRange } = this.query;
let values = {
...params,
--
Gitblit v1.9.3