Files
gdt-tool/src/renderer/App.vue
T
2025-11-05 14:46:49 +08:00

93 lines
2.5 KiB
Vue

<script setup lang="tsx">
import { onMounted } from 'vue';
import GlobalDialog from '@/renderer/components/GlobalDialog.vue';
import GlobalSnackbar from '@/renderer/components/GlobalSnackbar.vue';
import { DefaultLayout } from '@/renderer/components/layout';
import UpdateDialog from '@/renderer/components/UpdateDialog.vue';
import { useAppStore } from '@/renderer/store/app';
// 使用应用商店来管理应用状态
const appStore = useAppStore();
onMounted(() => {
// 在应用启动时检查更新
setTimeout(() => {
checkForUpdates();
}, 3000); // 延迟3秒后检查更新,避免影响应用启动速度
// 监听主进程发来的更新相关事件
window.mainApi.on('update-available', (_, info) => {
appStore.setUpdateStatus('available', info.version);
});
window.mainApi.on('update-not-available', (_, info) => {
appStore.setUpdateStatus('not-available', info.version);
});
window.mainApi.on('update-error', (_, error) => {
appStore.setUpdateStatus('error', undefined, error.message || String(error));
});
window.mainApi.on('update-download-progress', (_, progress) => {
// 这个事件通过pinia状态管理,不需要在这里单独处理
console.log('下载进度:', progress);
});
window.mainApi.on('update-downloaded', (_, info) => {
appStore.setUpdateStatus('downloaded');
console.log('更新已下载,准备安装:', info);
});
});
const checkForUpdates = async () => {
try {
// 显示检查更新状态
appStore.setUpdateStatus('checking');
// 调用主进程检查更新
const result = await window.mainApi.invoke('msgCheckForUpdates');
if (result.error) {
console.error('检查更新时出错:', result.error);
appStore.setUpdateStatus('error', result.error);
return;
}
if (result.updateAvailable) {
// 发现新版本,显示更新提示
appStore.setUpdateStatus('available', result.currentVersion);
} else {
// 当前已是最新版本
appStore.setUpdateStatus('not-available', result.currentVersion);
}
} catch (error) {
console.error('检查更新时出错:', error);
appStore.setUpdateStatus(
'error',
error instanceof Error ? error.message : String(error),
);
}
};
</script>
<template>
<DefaultLayout>
<router-view />
</DefaultLayout>
<GlobalDialog />
<UpdateDialog />
<GlobalSnackbar />
</template>
<style>
html {
overflow-y: auto !important;
user-select: none;
}
html,
body {
width: 100%;
height: 100%;
}
</style>