From e2318ac42e3da6c2814325c1bfe866e725f10617 Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Thu, 19 Feb 2026 21:49:32 +0800 Subject: [PATCH] feat: add web entry to download desktop client --- frontend/app.html | 23 +++++++++++++++++ frontend/app.js | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/frontend/app.html b/frontend/app.html index c88537c..5369a13 100644 --- a/frontend/app.html +++ b/frontend/app.html @@ -1796,6 +1796,10 @@ {{ isLogin ? '还没有账号?' : '已有账号?' }} {{ isLogin ? '立即注册' : '去登录' }} + @@ -1818,6 +1822,10 @@ 设置 +
{{ user.username }} @@ -2480,6 +2488,21 @@

管理存储策略、主题外观与账号安全

+

+ 客户端下载 +

+
+
+
+ 下载最新版桌面客户端(Windows x64) +
+ +
+
+

diff --git a/frontend/app.js b/frontend/app.js index f3677ae..dd078c3 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -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() {