1
This commit is contained in:
138
app/mixins/updateMixin.js
Normal file
138
app/mixins/updateMixin.js
Normal file
@@ -0,0 +1,138 @@
|
||||
/**
|
||||
* 更新管理 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}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user