增加烧录报错时的提示
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "bdqh-course-platform",
|
||||
"version": "3.4.4",
|
||||
"description": "北斗启航学习机课程平台",
|
||||
"description": "串口配置工具",
|
||||
"main": "./dist/main/app.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -41,7 +41,6 @@
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^22.0.0",
|
||||
"electron-builder": "^23.6.0",
|
||||
"electron-rebuild": "3.2.9",
|
||||
"less": "^4.1.3",
|
||||
"rimraf": "^3.0.2",
|
||||
"ts-node": "^10.9.1",
|
||||
|
||||
@@ -261,7 +261,8 @@ export class MainWindow extends LocalSoftwareWindow {
|
||||
'0x10000', bin_file_path,
|
||||
'0x8000' , PARTITIONS_BIN_PATH], (err:any, stdout:any) => {
|
||||
if (err) {
|
||||
event.sender.send('BURN_PROGRAM_FEEDBACK', { err } )
|
||||
// event.sender.send('BURN_PROGRAM_FEEDBACK', { err } )
|
||||
event.sender.send('BURN_PROGRAM_FEEDBACK', { err: new Error('请确保核心处理模块上未连接其他模块后重新尝试烧录') } )
|
||||
} else {
|
||||
event.sender.send('BURN_PROGRAM_FEEDBACK', { stdout })
|
||||
}
|
||||
|
||||
11
src/render/utils/debounce.ts
Normal file
11
src/render/utils/debounce.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
export const debounce = (fn: Function, delay: number) => {
|
||||
let timeoutID: any = null;
|
||||
return function () {
|
||||
clearTimeout(timeoutID); // 如果之前设置了定时器,则清除
|
||||
const args = arguments; // 保存当前函数的参数
|
||||
const that = this; // 保存当前函数的上下文
|
||||
timeoutID = setTimeout(function () {
|
||||
fn.apply(that, args); // 延迟执行原函数,并传入保存的参数和上下文
|
||||
}, delay);
|
||||
};
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
size="huge">
|
||||
|
||||
<n-space>
|
||||
<n-button v-for="program, index in programs" :key="index" size="large" @click="onBurnProgramBtnClick(program.filePath)">{{ program.name }}</n-button>
|
||||
<n-button v-for="program, index in programs" :key="index" size="large" @click="debounce(onBurnProgramBtnClick(program.filePath), 3000)">{{ program.name }}</n-button>
|
||||
</n-space>
|
||||
|
||||
</n-modal>
|
||||
@@ -19,24 +19,27 @@ import { h, ref, onMounted } from 'vue'
|
||||
import { NModal, NSpace, NButton, NSpin, NH3, useMessage, useDialog } from 'naive-ui'
|
||||
import { findAllCommon } from '@/api/program'
|
||||
import { hasIpcRenderer } from '@/utils'
|
||||
import { debounce } from '@/utils/debounce'
|
||||
|
||||
const message = useMessage()
|
||||
const dialog = useDialog()
|
||||
|
||||
const programs = findAllCommon()
|
||||
|
||||
let burnSwitch = true
|
||||
|
||||
// TODO:烧录程序的逻辑提取到开发板(DeveloperBoard)类中
|
||||
const onBurnProgramBtnClick = async (binFileName: string) => {
|
||||
if (!hasIpcRenderer()) return
|
||||
if (!hasIpcRenderer() || !burnSwitch) return
|
||||
|
||||
if (!('serial' in navigator)) return
|
||||
|
||||
try {
|
||||
// await navigator.serial.requestPort()
|
||||
|
||||
burnSwitch = false
|
||||
window.ipcRenderer.send('BURN_PROGRAM', binFileName)
|
||||
|
||||
|
||||
dialog.info({
|
||||
title: '系统提示',
|
||||
closable: true,
|
||||
@@ -61,8 +64,14 @@ const onBurnProgramBtnClick = async (binFileName: string) => {
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
message.error('程序烧录失败')
|
||||
setTimeout(() => {
|
||||
burnSwitch = true
|
||||
}, 3000)
|
||||
} finally {
|
||||
dialog.destroyAll()
|
||||
setTimeout(() => {
|
||||
burnSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,6 +83,10 @@ const onBurnProgramFeedback = ({ err }) => {
|
||||
} else {
|
||||
message.success('程序烧录成功')
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
burnSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
常用工具
|
||||
</n-divider>
|
||||
<n-space>
|
||||
<n-button size="large" strong secondary type="primary" @click="onSystemRepairButtonClick">系统修复</n-button>
|
||||
<n-button size="large" strong secondary type="primary" @click="onSoftwareUpgradeButtonClick">软件升级</n-button>
|
||||
<n-button size="large" strong secondary type="primary" @click="onWirelessCommunicationModuleConfigButtonClick">通信模块配置</n-button>
|
||||
<n-button size="large" strong secondary type="primary" @click="debounce(onSystemRepairButtonClick(), 3000)">系统修复</n-button>
|
||||
<n-button size="large" strong secondary type="primary" @click="debounce(onSoftwareUpgradeButtonClick(), 3000)">软件升级</n-button>
|
||||
<n-button size="large" strong secondary type="primary" @click="debounce(onWirelessCommunicationModuleConfigButtonClick(), 3000)">通信模块配置</n-button>
|
||||
<!-- TODO: 添加无线投屏功能 -->
|
||||
</n-space>
|
||||
</template>
|
||||
@@ -13,33 +13,50 @@
|
||||
<script setup lang="ts">
|
||||
import { NDivider, NSpace, NButton, useMessage } from 'naive-ui'
|
||||
import { hasIpcRenderer } from '@/utils'
|
||||
import { debounce } from '@/utils/debounce'
|
||||
|
||||
const message = useMessage()
|
||||
|
||||
const onSystemRepairButtonClick = () => {
|
||||
if (!hasIpcRenderer()) return
|
||||
let repairSwitch = true
|
||||
let upgradeSwitch = true
|
||||
let wirelessSwitch = true
|
||||
|
||||
const onSystemRepairButtonClick = () => {
|
||||
if (!hasIpcRenderer() || !repairSwitch) return
|
||||
repairSwitch = false
|
||||
const result = window.ipcRenderer.sendSync('SYSTEM_REPAIR')
|
||||
if (result != 'OK') {
|
||||
message.error(result.message)
|
||||
} else {
|
||||
message.success('系统修复成功')
|
||||
}
|
||||
setTimeout(() => {
|
||||
repairSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
const onSoftwareUpgradeButtonClick = () => {
|
||||
if (!hasIpcRenderer()) return
|
||||
|
||||
if (!hasIpcRenderer() || !upgradeSwitch) return
|
||||
upgradeSwitch = false
|
||||
const result = window.ipcRenderer.sendSync('SOFTWARE_UPGRADE')
|
||||
if (result != 'OK') {
|
||||
message.error(result.message)
|
||||
} else {
|
||||
message.success('软件升级成功')
|
||||
}
|
||||
setTimeout(() => {
|
||||
upgradeSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
const onWirelessCommunicationModuleConfigButtonClick = () => {
|
||||
if (hasIpcRenderer()) window.ipcRenderer.send('LAUNCH_LOCAL_SOFTWARE', {
|
||||
subWindowName: 'WirelessCommunicationModuleConfigurationWindow'
|
||||
})
|
||||
if (hasIpcRenderer() && wirelessSwitch) {
|
||||
wirelessSwitch = false
|
||||
window.ipcRenderer.send('LAUNCH_LOCAL_SOFTWARE', {
|
||||
subWindowName: 'WirelessCommunicationModuleConfigurationWindow'
|
||||
})
|
||||
setTimeout(() => {
|
||||
wirelessSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div>
|
||||
<n-h2>程序烧录</n-h2>
|
||||
<n-space vertical align="center" :wrap-item="false">
|
||||
<n-button v-for="program, index in programs" :key="index" :bordered="false" size="large" @click="onBurnProgramBtnClick(program.filePath)">{{ program.name }}</n-button>
|
||||
<n-button v-for="program, index in programs" :key="index" :bordered="false" size="large" @click="debounce(onBurnProgramBtnClick(program.filePath), 3000)">{{ program.name }}</n-button>
|
||||
</n-space>
|
||||
</div>
|
||||
</template>
|
||||
@@ -12,6 +12,7 @@
|
||||
import { h, onMounted, onUnmounted } from 'vue'
|
||||
import { NH2, NSpace, NButton, NSpin, NH3, useMessage, useDialog } from 'naive-ui'
|
||||
import { hasIpcRenderer } from '@/utils'
|
||||
import { debounce } from '@/utils/debounce'
|
||||
|
||||
defineProps({
|
||||
programs: Array<string>
|
||||
@@ -20,20 +21,23 @@ defineProps({
|
||||
const message = useMessage()
|
||||
const dialog = useDialog()
|
||||
|
||||
let burnSwitch = true
|
||||
|
||||
const onBurnProgramBtnClick = async (binFileName: string) => {
|
||||
if (!hasIpcRenderer()) return
|
||||
if (!hasIpcRenderer() || !burnSwitch) return
|
||||
|
||||
if (!('serial' in navigator)) return
|
||||
|
||||
try {
|
||||
// await navigator.serial.requestPort()
|
||||
|
||||
burnSwitch = false
|
||||
window.ipcRenderer.send('BURN_PROGRAM', binFileName)
|
||||
|
||||
dialog.info({
|
||||
title: '系统提示',
|
||||
closable: false,
|
||||
maskClosable: false,
|
||||
closable: true,
|
||||
maskClosable: true,
|
||||
class: 'text-center',
|
||||
content: () => h(
|
||||
NSpin,
|
||||
@@ -55,6 +59,9 @@ const onBurnProgramBtnClick = async (binFileName: string) => {
|
||||
console.error(error)
|
||||
message.error('程序烧录失败')
|
||||
dialog.destroyAll()
|
||||
setTimeout(() => {
|
||||
burnSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,6 +73,10 @@ const onBurnProgramFeedback = ({ err }) => {
|
||||
} else {
|
||||
message.success('程序烧录成功')
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
burnSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<n-h2>配套软件</n-h2>
|
||||
|
||||
<n-space vertical align="center" :wrap-item="false">
|
||||
<n-button v-for="software in softwares" :bordered="false" size="large" @click="onBtnClick(software.command, software.params)">{{ software.name }}</n-button>
|
||||
<n-button v-for="software in softwares" :bordered="false" size="large" @click="debounce(onBtnClick(software.command, software.params), 3000)">{{ software.name }}</n-button>
|
||||
</n-space>
|
||||
</div>
|
||||
</template>
|
||||
@@ -13,14 +13,21 @@
|
||||
import { NH2, NSpace, NButton } from 'naive-ui'
|
||||
import { Software } from '@/api/course/type.d'
|
||||
import { hasIpcRenderer } from '@/utils'
|
||||
import { debounce } from '@/utils/debounce'
|
||||
|
||||
defineProps({
|
||||
softwares: Array<Software>
|
||||
})
|
||||
|
||||
let wirelessSwitch = true
|
||||
|
||||
const onBtnClick = (command: String, params: Object) => {
|
||||
if (hasIpcRenderer()) {
|
||||
if (hasIpcRenderer() && wirelessSwitch) {
|
||||
wirelessSwitch = false
|
||||
window.ipcRenderer.send(command, params)
|
||||
setTimeout(() => {
|
||||
wirelessSwitch = true
|
||||
}, 3000)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user