From aee7997195906a704e2f1e8f9eb068766669dbba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Wed, 27 May 2026 02:42:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84:=20=E5=89=8D=E7=AB=AFVue3+Ta?= =?UTF-8?q?ilwind+Vite=E6=9E=84=E5=BB=BA=E7=AE=A1=E7=BA=BF+=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=BB=84=E4=BB=B6=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + build.ps1 | 8 + wallpaper.go | 60 +- web-ui/overlay.html | 11 + web-ui/package-lock.json | 2451 +++++++++++++++++ web-ui/package.json | 23 + web-ui/postcss.config.js | 6 + web-ui/settings.html | 11 + web-ui/src/env.d.ts | 7 + web-ui/src/overlay/App.vue | 59 + web-ui/src/overlay/bridge.ts | 57 + web-ui/src/overlay/components/AINewsCard.vue | 64 + .../src/overlay/components/KnowledgeCard.vue | 31 + web-ui/src/overlay/components/MultiLayout.vue | 86 + web-ui/src/overlay/components/PhotoCard.vue | 68 + web-ui/src/overlay/components/PhotoFrame.vue | 53 + .../src/overlay/components/SingleLayout.vue | 36 + web-ui/src/overlay/components/TimeCard.vue | 60 + web-ui/src/overlay/components/WeatherCard.vue | 80 + web-ui/src/overlay/components/ZodiacCard.vue | 81 + .../src/overlay/composables/useHoroscope.ts | 28 + .../overlay/composables/useOverlayState.ts | 36 + web-ui/src/overlay/composables/useTime.ts | 77 + web-ui/src/overlay/index.ts | 7 + web-ui/src/overlay/overlay.css | 86 + web-ui/src/settings/App.vue | 89 + .../src/settings/components/LayoutSection.vue | 21 + .../components/PersonalizeSection.vue | 111 + .../src/settings/components/PhotoSection.vue | 61 + .../src/settings/components/ToggleSection.vue | 47 + .../src/settings/components/ToggleSwitch.vue | 28 + .../settings/components/WallpaperSection.vue | 198 ++ .../src/settings/composables/useDebounce.ts | 5 + .../src/settings/composables/useGoBridge.ts | 32 + web-ui/src/settings/index.ts | 6 + web-ui/src/settings/settings.css | 48 + web-ui/src/shared/types.ts | 94 + web-ui/src/shared/utils.ts | 4 + web-ui/src/tailwind.css | 3 + web-ui/tailwind.config.js | 15 + web-ui/tsconfig.json | 20 + web-ui/vite.config.ts | 31 + web/overlay.html | 950 +------ web/settings.html | 776 +----- 44 files changed, 4309 insertions(+), 1720 deletions(-) create mode 100644 web-ui/overlay.html create mode 100644 web-ui/package-lock.json create mode 100644 web-ui/package.json create mode 100644 web-ui/postcss.config.js create mode 100644 web-ui/settings.html create mode 100644 web-ui/src/env.d.ts create mode 100644 web-ui/src/overlay/App.vue create mode 100644 web-ui/src/overlay/bridge.ts create mode 100644 web-ui/src/overlay/components/AINewsCard.vue create mode 100644 web-ui/src/overlay/components/KnowledgeCard.vue create mode 100644 web-ui/src/overlay/components/MultiLayout.vue create mode 100644 web-ui/src/overlay/components/PhotoCard.vue create mode 100644 web-ui/src/overlay/components/PhotoFrame.vue create mode 100644 web-ui/src/overlay/components/SingleLayout.vue create mode 100644 web-ui/src/overlay/components/TimeCard.vue create mode 100644 web-ui/src/overlay/components/WeatherCard.vue create mode 100644 web-ui/src/overlay/components/ZodiacCard.vue create mode 100644 web-ui/src/overlay/composables/useHoroscope.ts create mode 100644 web-ui/src/overlay/composables/useOverlayState.ts create mode 100644 web-ui/src/overlay/composables/useTime.ts create mode 100644 web-ui/src/overlay/index.ts create mode 100644 web-ui/src/overlay/overlay.css create mode 100644 web-ui/src/settings/App.vue create mode 100644 web-ui/src/settings/components/LayoutSection.vue create mode 100644 web-ui/src/settings/components/PersonalizeSection.vue create mode 100644 web-ui/src/settings/components/PhotoSection.vue create mode 100644 web-ui/src/settings/components/ToggleSection.vue create mode 100644 web-ui/src/settings/components/ToggleSwitch.vue create mode 100644 web-ui/src/settings/components/WallpaperSection.vue create mode 100644 web-ui/src/settings/composables/useDebounce.ts create mode 100644 web-ui/src/settings/composables/useGoBridge.ts create mode 100644 web-ui/src/settings/index.ts create mode 100644 web-ui/src/settings/settings.css create mode 100644 web-ui/src/shared/types.ts create mode 100644 web-ui/src/shared/utils.ts create mode 100644 web-ui/src/tailwind.css create mode 100644 web-ui/tailwind.config.js create mode 100644 web-ui/tsconfig.json create mode 100644 web-ui/vite.config.ts diff --git a/.gitignore b/.gitignore index b0a43ef..0d8d42f 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ vendor/ # Build u-desktop + +# Web UI +web-ui/node_modules/ +web-ui/dist/ diff --git a/build.ps1 b/build.ps1 index e588d8f..b18f1e0 100644 --- a/build.ps1 +++ b/build.ps1 @@ -12,6 +12,14 @@ $ErrorActionPreference = "Stop" $project = "u-desktop" $buildDir = "dist" +# 构建 Web UI +Write-Host "=== 构建 Web UI ===" -ForegroundColor Cyan +Push-Location web-ui +npm ci --prefer-offline +npm run build +if ($LASTEXITCODE -ne 0) { Write-Host "Web UI 构建失败" -ForegroundColor Red; exit 1 } +Pop-Location + # 清理 if (Test-Path $buildDir) { Remove-Item $buildDir -Recurse -Force } New-Item -ItemType Directory -Force -Path $buildDir | Out-Null diff --git a/wallpaper.go b/wallpaper.go index a0ced6a..b76720e 100644 --- a/wallpaper.go +++ b/wallpaper.go @@ -62,50 +62,33 @@ func buildWallpaperHTML(cfg *Config) string { if cfg.HideWallpaper { bgWrapped = `
` } - html := strings.Replace(overlayHTML, "{{BACKGROUND}}", bgWrapped, 1) - html = strings.Replace(html, "{{LAYOUT}}", string(cfg.Layout), 1) - var bodyClasses []string - if cfg.HideTime { - bodyClasses = append(bodyClasses, "hide-time") - } - if cfg.HideWeather { - bodyClasses = append(bodyClasses, "hide-weather") - } - if cfg.HideZodiac { - bodyClasses = append(bodyClasses, "hide-zodiac") - } - showSec := "false" - if cfg.ShowSeconds { - showSec = "true" - } - html = strings.Replace(html, "{{SHOW_SECONDS}}", showSec, 1) - if cfg.HideAINews { - bodyClasses = append(bodyClasses, "hide-ainews") - } - if cfg.HideKnowledge { - bodyClasses = append(bodyClasses, "hide-knowledge") - } - if cfg.HidePhoto { - bodyClasses = append(bodyClasses, "hide-photo") - } - if cfg.PhotoFrameMode && cfg.PhotoDir != "" { - bodyClasses = append(bodyClasses, "photo-frame-mode") - } - if len(bodyClasses) > 0 { - cls := strings.Join(bodyClasses, " ") - html = strings.Replace(html, "{{BODY_CLASSES}}", cls, 1) - } else { - html = strings.Replace(html, " {{BODY_CLASSES}}", "", 1) + initialData := map[string]interface{}{ + "backgroundHtml": bgWrapped, + "layout": string(cfg.Layout), + "showSeconds": cfg.ShowSeconds, + "userZodiac": cfg.Zodiac, + "wallpaperVisible": !cfg.HideWallpaper, + "photoFrameMode": cfg.PhotoFrameMode && cfg.PhotoDir != "", + "cardVisibility": map[string]bool{ + "time": !cfg.HideTime, + "weather": !cfg.HideWeather, + "zodiac": !cfg.HideZodiac, + "knowledge": !cfg.HideKnowledge, + "ainews": !cfg.HideAINews, + "photo": !cfg.HidePhoto, + }, } + dataJSON, _ := json.Marshal(initialData) + inject := fmt.Sprintf(``, string(dataJSON)) // 注入自定义文字 if cfg.WallpaperType == WPTheme && cfg.Theme == ThemeText && cfg.WallpaperText != "" { escaped, _ := json.Marshal(cfg.WallpaperText) - html = strings.Replace(html, "", `window.wallpaperText = `+string(escaped)+`;`, 1) + inject += fmt.Sprintf(``, string(escaped)) } - return html + return strings.Replace(overlayHTML, "", inject+"", 1) } func imageToDataURI(path string) string { @@ -194,7 +177,10 @@ func updateBackground(cfg *Config) { display = ` style="display:none"` } html := fmt.Sprintf(`壁纸 · 布局 · 信息显示
+壁纸 · 布局 · 信息显示
-