feat(断路器): 添加断路器调试固件升级,调整页面布局

This commit is contained in:
fhysy 2024-08-06 17:13:27 +08:00
parent 206de9e618
commit 5a0304a8d6
3 changed files with 168 additions and 4 deletions

View File

@ -27,7 +27,7 @@ import Header from '@renderer/layout/Header.vue';
.el-main { .el-main {
width: 100%; width: 100%;
padding: 0; padding: 0;
height: 100vh; /*height: 100vh;*/
overflow-x: hidden; overflow-x: hidden;
background: #fff; background: #fff;
padding-right: 10px; padding-right: 10px;

View File

@ -0,0 +1,149 @@
<template>
<el-form ref="formRef" :model="form" class="demo-form" :rules="formRules" label-width="auto" status-icon>
<el-row>
<el-col :span="12">
<el-form-item label="设备号" prop="deviceSN" required>
<el-input v-model="form.deviceSN" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备类型" prop="deviceType" required>
<el-select v-model="form.deviceType" placeholder="选择设备类型">
<el-option v-for="(item, index) in deviceTypeList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="升级包地址" prop="url" required>
<el-input v-model="form.url" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="版本号" prop="codeVer" required>
<el-input v-model="form.codeVer" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="包大小(字节)" prop="size" required>
<el-input v-model="form.size" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="签名类型" prop="signType" required>
<el-select v-model="form.signType" placeholder="选择签名类型">
<el-option v-for="(item, index) in signTypeList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="签名" prop="sign" required>
<el-input v-model="form.sign" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="包加密类型" prop="scType" required>
<el-select v-model="form.scType" placeholder="选择包加密类型">
<el-option v-for="(item, index) in scTypeList" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备型号" prop="productKey" required>
<el-input v-model="form.productKey" />
</el-form-item>
</el-col>
</el-row>
<el-form-item class="btn-box">
<el-button type="primary" @click="updateForm(formRef)">更新</el-button>
</el-form-item>
</el-form>
</template>
<script setup>
import { ref, reactive } from 'vue';
import { ElMessage } from 'element-plus';
import axios from 'axios';
import config from '@renderer/util/config.js';
const formRef = ref();
const form = reactive({
deviceSN: '',
deviceType: 'device',
url: '', //
codeVer: '', //
size: '', //1024", //10
signType: 'md5',
sign: '', //md5
scType: 'crc32', //
productKey: '' //
});
// const form = reactive({
// "deviceSN": "D000000000000001",
// "deviceType": "device",
// "url": "http://111.bin",
// "size": 1024,
// "codeVer": "1.1.1.1.1.1.1.1",
// "signType": "md5",
// "sign": "sa51ear16a1er",
// "scType": "crc32",
// "productKey": "B7L-NET-G1(4G)"
// });
const deviceTypeList = [
{ value: 'device', label: '设备' },
{ value: 'gateway', label: '网关' }
];
const signTypeList = [{ value: 'md5', label: 'md5' }];
const scTypeList = [{ value: 'crc32', label: 'crc32' }];
const formRules = reactive({
deviceSN: [{ required: true, message: '设备编号不能为空', trigger: 'blur' }],
deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }],
url: [{ required: true, message: '升级包路径不能为空', trigger: 'blur' }],
codeVer: [{ required: true, message: '升级包版本号不能为空', trigger: 'blur' }],
size: [{ required: true, message: '升级包大小不能为空', trigger: 'blur' }],
signType: [{ required: true, message: '签名类型不能为空', trigger: 'blur' }],
sign: [{ required: true, message: '签名不能为空', trigger: 'blur' }],
scType: [{ required: true, message: '包加密类型不能为空', trigger: 'blur' }],
productKey: [{ required: true, message: '设备型号不能为空', trigger: 'blur' }]
});
const updateForm = formEl => {
if (!formEl) return;
formEl.validate(valid => {
if (valid) {
axios
.post(config.url + '/otaUpgrade',form)
.then(response => {
//
console.log(response); //
if (response.data.code == 0) {
//
ElMessage.success('固件更新成功');
} else {
if (response.data.code == 60) {
}
ElMessage.error(response.data.message);
}
})
.catch(error => {
//
console.error(error); //
ElMessage.error(error);
});
} else {
console.log('error submit!');
return false;
}
});
};
</script>
<style scoped lang="less">
.btn-box {
:deep(.el-form-item__content) {
justify-content: end;
width: 100%;
padding: 0;
}
}
</style>

View File

@ -200,6 +200,9 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-collapse-item> </el-collapse-item>
<el-collapse-item name="5" title="固件更新">
<firmware-update />
</el-collapse-item>
</el-collapse> </el-collapse>
</div> </div>
<div id="log-box" class="log-box" :class="isOpenLog ? 'open-log' : ''"> <div id="log-box" class="log-box" :class="isOpenLog ? 'open-log' : ''">
@ -259,7 +262,7 @@
</div> </div>
<div id="log-box-main" class="log-box-main"> <div id="log-box-main" class="log-box-main">
<div class="log-list"> <div class="log-list">
<div v-for="(item, index) in logList" :key="index" class="log-item"> <div v-for="(item, index) in logList" :key="index" class="log-item" :style="{width: logItemWidth}">
<span v-if="item.type == 'subscribe'" class="iconfont icon-icon_shanghang"></span> <span v-if="item.type == 'subscribe'" class="iconfont icon-icon_shanghang"></span>
<span v-else-if="item.type == 'publish'" class="iconfont icon-icon_xiahang"></span> <span v-else-if="item.type == 'publish'" class="iconfont icon-icon_xiahang"></span>
<span v-else-if="item.type == 'system'" class="iconfont icon-icon_xitong"></span> <span v-else-if="item.type == 'system'" class="iconfont icon-icon_xitong"></span>
@ -282,15 +285,21 @@ import config from '@renderer/util/config.js';
import { reactive, ref, onMounted, computed, watch, onUnmounted } from 'vue'; import { reactive, ref, onMounted, computed, watch, onUnmounted } from 'vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import FirmwareUpdate from './components/FirmwareUpdate/index.vue'
import switchSocket from '@renderer/util/socket.js'; import switchSocket from '@renderer/util/socket.js';
import { logWebSocketStore } from '@renderer/stores/logWebSocket.js'; import { logWebSocketStore } from '@renderer/stores/logWebSocket.js';
const webSocketStore = logWebSocketStore(); const webSocketStore = logWebSocketStore();
const activeFold = ref(['1', '3', '4']); const activeFold = ref(['1', '3', '4', '5']);
const logList = ref([]); const logList = ref([]);
const logItemWidth = ref('auto');
// //
const connectionState = ref(false); const connectionState = ref(false);
const updateLogItemWidth = () => {
logItemWidth.value = window.innerWidth - 180 - 80 + 'px';
};
const getGuid = () => { const getGuid = () => {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = (Math.random() * 16) | 0, var r = (Math.random() * 16) | 0,
@ -952,7 +961,8 @@ const switchSocketStatus = computed(() => {
// //
onMounted(() => { onMounted(() => {
initSocket(); initSocket();
updateLogItemWidth()
window.addEventListener('resize',updateLogItemWidth)
const storedMqttForm = localStorage.getItem('mqttForm'); const storedMqttForm = localStorage.getItem('mqttForm');
if (storedMqttForm) { if (storedMqttForm) {
Object.assign(mqttForm, JSON.parse(storedMqttForm)); Object.assign(mqttForm, JSON.parse(storedMqttForm));
@ -964,6 +974,7 @@ onMounted(() => {
}); });
onUnmounted(() => { onUnmounted(() => {
window.removeEventListener('resize',updateLogItemWidth)
webSocketStore.close(); webSocketStore.close();
switchSocket.close(); switchSocket.close();
}); });
@ -1034,6 +1045,10 @@ onUnmounted(() => {
line-height: 26px; line-height: 26px;
.log-item { .log-item {
//width: 800px;
//width: calc(window-width - 180px - 80px);
word-wrap: break-word ;
word-break: break-all;
font-size: 13px; font-size: 13px;
user-select: text; user-select: text;
//display: flex; //display: flex;