feat: add web entry to download desktop client
This commit is contained in:
@@ -271,6 +271,8 @@ createApp({
|
||||
error: '',
|
||||
lastLoadedAt: ''
|
||||
},
|
||||
desktopClientDownloading: false,
|
||||
desktopClientDownloadUrl: '',
|
||||
|
||||
// 健康检测
|
||||
healthCheck: {
|
||||
@@ -731,6 +733,70 @@ createApp({
|
||||
this._debouncedLoadUserProfile();
|
||||
},
|
||||
|
||||
resolveDesktopClientUrl(rawUrl) {
|
||||
const trimmed = String(rawUrl || '').trim();
|
||||
if (!trimmed) return '';
|
||||
try {
|
||||
return new URL(trimmed, `${this.apiBase}/`).toString();
|
||||
} catch (error) {
|
||||
console.warn('[客户端下载] 下载地址格式异常:', trimmed, error);
|
||||
return '';
|
||||
}
|
||||
},
|
||||
|
||||
triggerDesktopClientDownload(url) {
|
||||
const resolved = this.resolveDesktopClientUrl(url);
|
||||
if (!resolved) return false;
|
||||
const link = document.createElement('a');
|
||||
link.href = resolved;
|
||||
link.target = '_blank';
|
||||
link.rel = 'noopener noreferrer';
|
||||
link.download = '';
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
link.remove();
|
||||
return true;
|
||||
},
|
||||
|
||||
async fetchDesktopClientDownloadUrl() {
|
||||
try {
|
||||
const response = await axios.get(`${this.apiBase}/api/client/desktop-update`, {
|
||||
params: {
|
||||
currentVersion: '0.0.0',
|
||||
platform: 'windows-x64',
|
||||
channel: 'stable'
|
||||
}
|
||||
});
|
||||
const resolved = this.resolveDesktopClientUrl(response.data?.downloadUrl);
|
||||
if (resolved) {
|
||||
this.desktopClientDownloadUrl = resolved;
|
||||
return resolved;
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('[客户端下载] 获取最新版下载地址失败:', error?.message || error);
|
||||
}
|
||||
return this.resolveDesktopClientUrl(this.desktopClientDownloadUrl);
|
||||
},
|
||||
|
||||
async downloadDesktopClient() {
|
||||
if (this.desktopClientDownloading) return;
|
||||
this.desktopClientDownloading = true;
|
||||
try {
|
||||
const downloadUrl = await this.fetchDesktopClientDownloadUrl();
|
||||
if (!downloadUrl) {
|
||||
this.showToast('warning', '暂无安装包', '服务器尚未配置客户端安装包下载地址');
|
||||
return;
|
||||
}
|
||||
if (!this.triggerDesktopClientDownload(downloadUrl)) {
|
||||
this.showToast('error', '下载失败', '下载地址无效,请稍后重试');
|
||||
return;
|
||||
}
|
||||
this.showToast('success', '开始下载', '客户端安装包已开始下载');
|
||||
} finally {
|
||||
this.desktopClientDownloading = false;
|
||||
}
|
||||
},
|
||||
|
||||
// ========== 主题管理 ==========
|
||||
// 初始化主题
|
||||
async initTheme() {
|
||||
|
||||
Reference in New Issue
Block a user