2626 <!-- 用户 -->
2727 <User v-if =" settingStore .useOnlineService " />
2828 <!-- 设置菜单 -->
29- <n-dropdown :options =" setOptions" trigger =" click" show-arrow @select =" setSelect" >
29+ <n-dropdown :options =" setOptions" trigger =" click" @select =" setSelect" >
3030 <n-button :focusable =" false" title =" 设置" tertiary circle >
3131 <template #icon >
3232 <SvgIcon name="Settings" />
131131
132132<script setup lang="ts">
133133import type { DropdownOption } from " naive-ui" ;
134- import { useSettingStore } from " @/stores" ;
134+ import { useSettingStore , useStatusStore } from " @/stores" ;
135135import { renderIcon } from " @/utils/helper" ;
136- import { openSetting } from " @/utils/modal" ;
136+ import { openSetting , openThemeConfig , openScalingModal } from " @/utils/modal" ;
137137import { isDev , isElectron } from " @/utils/env" ;
138138import { useMobile } from " @/composables/useMobile" ;
139139
140140const router = useRouter ();
141141const settingStore = useSettingStore ();
142+ const statusStore = useStatusStore ();
142143const { isDesktop, isSmallScreen } = useMobile ();
143144
144145const showCloseModal = ref (false );
@@ -150,23 +151,6 @@ const useBorderless = ref(true);
150151const isMax = ref (false );
151152// 是否显示侧边栏
152153const showAside = ref (false );
153- // 当前缩放系数
154- const currentZoomFactor = ref (1.0 );
155-
156- // 缩放系数选项
157- const zoomFactorList = [0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1 , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.75 , 2 ];
158-
159- // 缩放选项列表
160- const zoomOptions = computed <DropdownOption []>(() =>
161- zoomFactorList .map ((factor ) => {
162- const isSelected = Math .abs (currentZoomFactor .value - factor ) < 0.01 ;
163- return {
164- label: ` ${Math .round (factor * 100 )}% ` ,
165- key: ` zoom-${factor } ` ,
166- icon: isSelected ? renderIcon (" Check" ) : undefined ,
167- };
168- }),
169- );
170154
171155// 最小化
172156const min = () => window .electron .ipcRenderer .send (" win-min" );
@@ -209,6 +193,7 @@ const setOptions = computed<DropdownOption[]>(() => [
209193 ? " 深色模式"
210194 : " 跟随系统" ,
211195 key: " themeMode" ,
196+ disabled: !! statusStore .backgroundImageUrl ,
212197 icon: renderIcon (
213198 settingStore .themeMode === " auto"
214199 ? " LightTheme"
@@ -217,12 +202,16 @@ const setOptions = computed<DropdownOption[]>(() => [
217202 : " AutoTheme" ,
218203 ),
219204 },
205+ {
206+ label: " 主题配置" ,
207+ key: " themeConfig" ,
208+ icon: renderIcon (" Palette" ),
209+ },
220210 {
221211 key: " zoom" ,
222212 label: " 界面缩放" ,
223213 icon: renderIcon (" ZoomIn" ),
224214 show: isElectron ,
225- children: zoomOptions .value ,
226215 },
227216 {
228217 key: " divider-1" ,
@@ -255,22 +244,18 @@ const setSelect = (key: string) => {
255244 case " themeMode" :
256245 settingStore .setThemeMode ();
257246 break ;
247+ case " themeConfig" :
248+ openThemeConfig ();
249+ break ;
250+ case " zoom" :
251+ openScalingModal ();
252+ break ;
258253 case " setting" :
259254 openSetting ();
260255 break ;
261256 case " dev-tools" :
262257 window .electron .ipcRenderer .send (" open-dev-tools" );
263258 break ;
264- default :
265- // 处理缩放选项
266- if (key .startsWith (" zoom-" )) {
267- const factor = parseFloat (key .replace (" zoom-" , " " ));
268- if (! isNaN (factor )) {
269- window .electron .ipcRenderer .invoke (" set-zoom-factor" , factor );
270- currentZoomFactor .value = factor ;
271- }
272- }
273- break ;
274259 }
275260};
276261
@@ -280,8 +265,6 @@ onMounted(async () => {
280265 // 获取无边框窗口配置
281266 const windowConfig = await window .api .store .get (" window" );
282267 useBorderless .value = windowConfig ?.useBorderless ?? true ;
283- // 获取当前缩放系数
284- currentZoomFactor .value = await window .electron .ipcRenderer .invoke (" get-zoom-factor" );
285268 // 获取窗口状态
286269 isMax .value = window .electron .ipcRenderer .sendSync (" win-state" );
287270 window .electron .ipcRenderer .on (" win-state-change" , (_event , value : boolean ) => {
0 commit comments