Files
autoAiWorkSys/app/mixins/updateMixin.js
张成 e17d5610f5 1
2025-12-22 16:26:59 +08:00

139 lines
4.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 更新管理 Mixin
*/
export default {
computed: {
updateDialogVisible() {
return this.$store ? this.$store.state.update.updateDialogVisible : false;
},
updateInfo() {
return this.$store ? this.$store.state.update.updateInfo : null;
},
updateProgress() {
return this.$store ? this.$store.state.update.updateProgress : 0;
},
isDownloading() {
return this.$store ? this.$store.state.update.isDownloading : false;
},
downloadState() {
return this.$store ? this.$store.state.update.downloadState : {
progress: 0,
downloadedBytes: 0,
totalBytes: 0
};
}
},
methods: {
// 接收主进程推送的更新信息(不做处理,直接更新 store
onUpdateAvailable(updateInfo) {
if (!updateInfo) {
return;
}
if (this.$store) {
this.$store.dispatch('update/setUpdateInfo', updateInfo);
this.$store.dispatch('update/showUpdateDialog');
}
if (this.addLog) {
this.addLog('info', `发现新版本: ${updateInfo.version || '未知'}`);
}
},
// 接收主进程推送的更新进度(不做处理,直接更新 store
onUpdateProgress(progressData) {
if (this.$store && progressData) {
this.$store.dispatch('update/setDownloadState', {
progress: progressData.progress || 0,
downloadedBytes: progressData.downloadedBytes || 0,
totalBytes: progressData.totalBytes || 0
});
this.$store.dispatch('update/setUpdateProgress', progressData.progress || 0);
this.$store.dispatch('update/setDownloading', true);
}
},
// 接收主进程推送的下载完成通知(不做处理,直接更新 store
onUpdateDownloaded(data) {
if (this.$store) {
this.$store.dispatch('update/setDownloading', false);
this.$store.dispatch('update/setUpdateProgress', 100);
}
if (this.addLog) {
this.addLog('success', '更新包下载完成');
}
if (this.showNotification) {
this.showNotification('更新下载完成', '更新包已下载完成,是否立即安装?');
}
},
// 接收主进程推送的更新错误(不做处理,直接显示)
onUpdateError(errorData) {
if (this.$store) {
this.$store.dispatch('update/setDownloading', false);
}
const errorMsg = errorData?.error || '更新失败';
if (this.addLog) {
this.addLog('error', `更新错误: ${errorMsg}`);
}
if (this.showNotification) {
this.showNotification('更新失败', errorMsg);
}
},
closeUpdateDialog() {
if (this.$store) {
this.$store.dispatch('update/hideUpdateDialog');
}
},
// 下载更新(调用主进程接口,不做业务逻辑处理)
async startDownload() {
const updateInfoData = this.updateInfo;
if (!updateInfoData || !updateInfoData.downloadUrl) {
if (this.addLog) {
this.addLog('error', '更新信息不存在');
}
return;
}
if (!window.electronAPI) {
if (this.addLog) {
this.addLog('error', 'Electron API不可用');
}
return;
}
try {
await window.electronAPI.invoke('update:download', updateInfoData.downloadUrl);
} catch (error) {
if (this.addLog) {
this.addLog('error', `下载更新失败: ${error.message}`);
}
}
},
// 安装更新(调用主进程接口,不做业务逻辑处理)
async installUpdate() {
if (!window.electronAPI) {
if (this.addLog) {
this.addLog('error', 'Electron API不可用');
}
return;
}
try {
await window.electronAPI.invoke('update:install');
setTimeout(() => {
this.closeUpdateDialog();
}, 1000);
} catch (error) {
if (this.addLog) {
this.addLog('error', `安装更新失败: ${error.message}`);
}
}
}
}
};