feat(断路器): 添加断路器调试固件升级,调整页面布局
This commit is contained in:
parent
206de9e618
commit
5a0304a8d6
|
@ -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;
|
||||||
|
|
|
@ -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>
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue