diff --git a/frontend/src/stores/themeStore.ts b/frontend/src/stores/themeStore.ts index 9d584e5..c37c239 100644 --- a/frontend/src/stores/themeStore.ts +++ b/frontend/src/stores/themeStore.ts @@ -4,12 +4,11 @@ import {SystemThemeType} from '@/../bindings/voidraft/internal/models/models'; import {Type as ThemeType} from '@/../bindings/voidraft/internal/models/ent/theme/models'; import {ThemeService} from '@/../bindings/voidraft/internal/services'; import {useConfigStore} from './configStore'; -import {useEditorStore} from './editorStore'; import type {ThemeColors} from '@/views/editor/theme/types'; import {cloneThemeColors, FALLBACK_THEME_NAME, themePresetList, themePresetMap} from '@/views/editor/theme/presets'; // 类型定义 -type ThemeOption = {name: string; type: ThemeType}; +type ThemeOption = { name: string; type: ThemeType }; // 解析主题名称,确保返回有效的主题 const resolveThemeName = (name?: string): string => @@ -62,15 +61,11 @@ export const useThemeStore = defineStore('theme', () => { // 从服务器获取主题颜色 const fetchThemeColors = async (themeName: string): Promise => { const safeName = resolveThemeName(themeName); - try { - const theme = await ThemeService.GetThemeByName(safeName); - if (theme?.colors) { - const colors = cloneThemeColors(theme.colors as ThemeColors); - colors.themeName = safeName; - return colors; - } - } catch (error) { - console.error('Failed to load theme override:', error); + const theme = await ThemeService.GetThemeByName(safeName); + if (theme?.colors) { + const colors = cloneThemeColors(theme.colors as ThemeColors); + colors.themeName = safeName; + return colors; } return getPresetColors(safeName); }; @@ -80,21 +75,35 @@ export const useThemeStore = defineStore('theme', () => { const targetName = resolveThemeName( themeName || configStore.config?.appearance?.currentTheme ); + currentColors.value = getPresetColors(targetName); currentColors.value = await fetchThemeColors(targetName); + + }; + + // 获取可用的主题颜色 + const getEffectiveColors = (): ThemeColors => { + const targetName = resolveThemeName( + currentColors.value?.themeName || configStore.config?.appearance?.currentTheme + ); + return currentColors.value ?? getPresetColors(targetName); + }; + + // 同步应用到 DOM 与编辑器 + const applyAllThemes = () => { + applyThemeToDOM(currentTheme.value); }; // 初始化主题 const initTheme = async () => { applyThemeToDOM(currentTheme.value); await loadThemeColors(); - refreshEditorTheme(); + applyAllThemes(); }; // 设置系统主题 const setTheme = async (theme: SystemThemeType) => { await configStore.setSystemTheme(theme); - applyThemeToDOM(theme); - refreshEditorTheme(); + applyAllThemes(); }; // 切换到指定主题 @@ -106,7 +115,7 @@ export const useThemeStore = defineStore('theme', () => { await loadThemeColors(themeName); await configStore.setCurrentTheme(themeName); - refreshEditorTheme(); + applyAllThemes(); return true; }; @@ -128,7 +137,7 @@ export const useThemeStore = defineStore('theme', () => { await ThemeService.UpdateTheme(themeName, currentColors.value); await loadThemeColors(themeName); - refreshEditorTheme(); + applyAllThemes(); return true; }; @@ -142,16 +151,10 @@ export const useThemeStore = defineStore('theme', () => { await ThemeService.ResetTheme(themeName); await loadThemeColors(themeName); - refreshEditorTheme(); + applyAllThemes(); return true; }; - // 刷新编辑器主题 - const refreshEditorTheme = () => { - applyThemeToDOM(currentTheme.value); - const editorStore = useEditorStore(); - editorStore?.applyThemeSettings(); - }; return { availableThemes, @@ -164,7 +167,8 @@ export const useThemeStore = defineStore('theme', () => { updateCurrentColors, saveCurrentTheme, resetCurrentTheme, - refreshEditorTheme, applyThemeToDOM, + applyAllThemes, + getEffectiveColors, }; }); diff --git a/frontend/src/views/editor/basic/themeExtension.ts b/frontend/src/views/editor/basic/themeExtension.ts index a2cba19..34aa12e 100644 --- a/frontend/src/views/editor/basic/themeExtension.ts +++ b/frontend/src/views/editor/basic/themeExtension.ts @@ -9,15 +9,11 @@ export const themeCompartment = new Compartment(); /** * 根据主题类型获取主题扩展 */ -const getThemeExtension = (): Extension | null => { +const getThemeExtension = (): Extension => { const themeStore = useThemeStore(); - // 直接获取当前主题颜色配置 - const colors = themeStore.currentColors; - - if (!colors) { - return null; - } + // 获取有效主题颜色 + const colors = themeStore.getEffectiveColors(); // 使用颜色配置创建主题 return createThemeByColors(colors); @@ -28,12 +24,6 @@ const getThemeExtension = (): Extension | null => { */ export const createThemeExtension = (): Extension => { const extension = getThemeExtension(); - - // 如果主题未加载,返回空扩展 - if (!extension) { - return themeCompartment.of([]); - } - return themeCompartment.of(extension); }; @@ -48,11 +38,6 @@ export const updateEditorTheme = (view: EditorView): void => { try { const extension = getThemeExtension(); - // 如果主题未加载,不更新 - if (!extension) { - return; - } - view.dispatch({ effects: themeCompartment.reconfigure(extension) }); @@ -60,4 +45,3 @@ export const updateEditorTheme = (view: EditorView): void => { console.error('Failed to update editor theme:', error); } }; - diff --git a/frontend/src/views/settings/pages/AppearancePage.vue b/frontend/src/views/settings/pages/AppearancePage.vue index 3d390d6..b0e9af6 100644 --- a/frontend/src/views/settings/pages/AppearancePage.vue +++ b/frontend/src/views/settings/pages/AppearancePage.vue @@ -133,16 +133,13 @@ const updateLocalColor = (colorKey: string, value: string) => { const applyChanges = async () => { try { if (!tempColors.value) return; - + // 更新 store 中的颜色 themeStore.updateCurrentColors(tempColors.value); // 保存到数据库 await themeStore.saveCurrentTheme(); - - // 刷新编辑器主题 - themeStore.refreshEditorTheme(); - + // 清除未保存标记 hasUnsavedChanges.value = false; } catch (error) { diff --git a/go.mod b/go.mod index c056522..0f06906 100644 --- a/go.mod +++ b/go.mod @@ -13,15 +13,15 @@ require ( github.com/knadh/koanf/v2 v2.3.0 github.com/mattn/go-sqlite3 v1.14.32 github.com/stretchr/testify v1.11.1 - github.com/wailsapp/wails/v3 v3.0.0-alpha.51 + github.com/wailsapp/wails/v3 v3.0.0-alpha.54 golang.org/x/net v0.48.0 golang.org/x/sys v0.39.0 golang.org/x/text v0.32.0 - resty.dev/v3 v3.0.0-beta.5 + resty.dev/v3 v3.0.0-beta.6 ) require ( - ariga.io/atlas v0.38.0 // indirect + ariga.io/atlas v1.0.0 // indirect code.gitea.io/sdk/gitea v0.22.1 // indirect dario.cat/mergo v1.0.2 // indirect git.sr.ht/~jackmordaunt/go-toast/v2 v2.0.3 // indirect @@ -48,11 +48,11 @@ require ( github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-openapi/inflect v0.21.5 // indirect github.com/go-viper/mapstructure/v2 v2.4.0 // indirect - github.com/godbus/dbus/v5 v5.2.1 // indirect + github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/go-github/v74 v74.0.0 // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-querystring v1.2.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.8 // indirect github.com/hashicorp/go-version v1.8.0 // indirect diff --git a/go.sum b/go.sum index cc3c60a..2f0b190 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -ariga.io/atlas v0.38.0 h1:MwbtwVtDWJFq+ECyeTAz2ArvewDnpeiw/t/sgNdDsdo= -ariga.io/atlas v0.38.0/go.mod h1:D7XMK6ei3GvfDqvzk+2VId78j77LdqHrqPOWamn51/s= +ariga.io/atlas v1.0.0 h1:v9DQH49xK+SM2kKwk4OQBjfz/KNRMUR+pvDiEIxSJto= +ariga.io/atlas v1.0.0/go.mod h1:esBbk3F+pi/mM2PvbCymDm+kWhaOk4PaaiegQdNELk8= code.gitea.io/sdk/gitea v0.22.1 h1:7K05KjRORyTcTYULQ/AwvlVS6pawLcWyXZcTr7gHFyA= code.gitea.io/sdk/gitea v0.22.1/go.mod h1:yyF5+GhljqvA30sRDreoyHILruNiy4ASufugzYg0VHM= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= @@ -76,17 +76,17 @@ github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/godbus/dbus/v5 v5.2.1 h1:I4wwMdWSkmI57ewd+elNGwLRf2/dtSaFz1DujfWYvOk= -github.com/godbus/dbus/v5 v5.2.1/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= +github.com/godbus/dbus/v5 v5.2.2 h1:TUR3TgtSVDmjiXOgAAyaZbYmIeP3DPkld3jgKGV8mXQ= +github.com/godbus/dbus/v5 v5.2.2/go.mod h1:3AAv2+hPq5rdnr5txxxRwiGjPXamgoIHgz9FPBfOp3c= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github/v74 v74.0.0 h1:yZcddTUn8DPbj11GxnMrNiAnXH14gNs559AsUpNpPgM= github.com/google/go-github/v74 v74.0.0/go.mod h1:ubn/YdyftV80VPSI26nSJvaEsTOnsjrxG3o9kJhcyak= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0= +github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -178,8 +178,8 @@ github.com/wailsapp/go-webview2 v1.0.23 h1:jmv8qhz1lHibCc79bMM/a/FqOnnzOGEisLav+ github.com/wailsapp/go-webview2 v1.0.23/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= -github.com/wailsapp/wails/v3 v3.0.0-alpha.51 h1:n8KT0H4lvtWld9tMIiHVX4nrR0wEMT2zy5hM/R6luMU= -github.com/wailsapp/wails/v3 v3.0.0-alpha.51/go.mod h1:yaz8baG0+YzoiN8J6osn0wKiEi0iUux0ZU5NsZFu6OQ= +github.com/wailsapp/wails/v3 v3.0.0-alpha.54 h1:XlQ+9dwDtOyfxIyA0h1AeT0zdUP3SFdhLkpIgPjWnWc= +github.com/wailsapp/wails/v3 v3.0.0-alpha.54/go.mod h1:yaz8baG0+YzoiN8J6osn0wKiEi0iUux0ZU5NsZFu6OQ= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0= @@ -238,7 +238,6 @@ golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -251,5 +250,5 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -resty.dev/v3 v3.0.0-beta.5 h1:NV1xbqOLzSq7XMTs1t/HLPvu7xrxoXzF90SR4OO6faQ= -resty.dev/v3 v3.0.0-beta.5/go.mod h1:NTOerrC/4T7/FE6tXIZGIysXXBdgNqwMZuKtxpea9NM= +resty.dev/v3 v3.0.0-beta.6 h1:ghRdNpoE8/wBCv+kTKIOauW1aCrSIeTq7GxtfYgtevU= +resty.dev/v3 v3.0.0-beta.6/go.mod h1:NTOerrC/4T7/FE6tXIZGIysXXBdgNqwMZuKtxpea9NM= diff --git a/version.txt b/version.txt index 86ea391..ead9729 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -VERSION=1.5.5 +VERSION=1.5.6