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() {