feat: 为移动端和电脑端启用两套终端字号大小设置
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@nexus-terminal/frontend",
|
"name": "@nexus-terminal/frontend",
|
||||||
"version": "0.6",
|
"version": "0.6.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -122,11 +122,16 @@ const fitAndEmitResizeNow = (term: Terminal) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 创建防抖版的字体大小保存函数
|
// 创建防抖版的字体大小保存函数 (区分设备)
|
||||||
const debouncedSetTerminalFontSize = debounce(async (size: number) => {
|
const debouncedSaveFontSize = debounce(async (size: number) => {
|
||||||
try {
|
try {
|
||||||
|
if (isMobile.value) {
|
||||||
|
await appearanceStore.setTerminalFontSizeMobile(size);
|
||||||
|
console.log(`[Terminal ${props.sessionId}] Debounced MOBILE font size saved: ${size}`);
|
||||||
|
} else {
|
||||||
await appearanceStore.setTerminalFontSize(size);
|
await appearanceStore.setTerminalFontSize(size);
|
||||||
console.log(`[Terminal ${props.sessionId}] Debounced font size saved: ${size}`);
|
console.log(`[Terminal ${props.sessionId}] Debounced DESKTOP font size saved: ${size}`);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`[Terminal ${props.sessionId}] Debounced font size save failed:`, error);
|
console.error(`[Terminal ${props.sessionId}] Debounced font size save failed:`, error);
|
||||||
// Optionally show an error to the user
|
// Optionally show an error to the user
|
||||||
@@ -200,7 +205,7 @@ const handleTouchMove = (event: TouchEvent) => {
|
|||||||
if (newSize !== currentTerminalOptFontSize) {
|
if (newSize !== currentTerminalOptFontSize) {
|
||||||
terminal.options.fontSize = newSize;
|
terminal.options.fontSize = newSize;
|
||||||
fitAndEmitResizeNow(terminal);
|
fitAndEmitResizeNow(terminal);
|
||||||
debouncedSetTerminalFontSize(newSize);
|
debouncedSaveFontSize(newSize); // 使用新的区分设备的保存函数
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -551,7 +556,7 @@ onMounted(() => {
|
|||||||
fitAndEmitResizeNow(terminal); // 调用统一函数
|
fitAndEmitResizeNow(terminal); // 调用统一函数
|
||||||
|
|
||||||
// 调用防抖函数来保存设置
|
// 调用防抖函数来保存设置
|
||||||
debouncedSetTerminalFontSize(newSize);
|
debouncedSaveFontSize(newSize); // 使用新的区分设备的保存函数
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import apiClient from '../utils/apiClient'; // 使用统一的 apiClient
|
import apiClient from '../utils/apiClient';
|
||||||
import { ref, computed, watch, nextTick } from 'vue'; // 导入 nextTick
|
import { ref, computed, watch, nextTick } from 'vue';
|
||||||
|
import { useDeviceDetection } from '../composables/useDeviceDetection';
|
||||||
import type { ITheme } from 'xterm';
|
import type { ITheme } from 'xterm';
|
||||||
import type { TerminalTheme } from '../types/terminal-theme.types'; // 引用本地类型
|
import type { TerminalTheme } from '../types/terminal-theme.types';
|
||||||
import type { AppearanceSettings, UpdateAppearanceDto } from '../types/appearance.types'; // 引用本地类型
|
import type { AppearanceSettings, UpdateAppearanceDto } from '../types/appearance.types';
|
||||||
import { defaultXtermTheme, defaultUiTheme } from '../features/appearance/config/default-themes'; // 保持 .ts
|
import { defaultXtermTheme, defaultUiTheme } from '../features/appearance/config/default-themes';
|
||||||
import { presetTerminalThemes } from '../features/appearance/config/iterm-themes'; // <-- 导入预设主题
|
|
||||||
|
|
||||||
// Helper function to safely parse JSON
|
// Helper function to safely parse JSON
|
||||||
export const safeJsonParse = <T>(jsonString: string | undefined | null, defaultValue: T): T => { // Add export
|
export const safeJsonParse = <T>(jsonString: string | undefined | null, defaultValue: T): T => {
|
||||||
if (!jsonString) return defaultValue;
|
if (!jsonString) return defaultValue;
|
||||||
try {
|
try {
|
||||||
return JSON.parse(jsonString);
|
return JSON.parse(jsonString);
|
||||||
@@ -19,6 +19,8 @@ export const safeJsonParse = <T>(jsonString: string | undefined | null, defaultV
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const useAppearanceStore = defineStore('appearance', () => {
|
export const useAppearanceStore = defineStore('appearance', () => {
|
||||||
|
const { isMobile } = useDeviceDetection(); // + 获取设备检测结果
|
||||||
|
|
||||||
// --- State ---
|
// --- State ---
|
||||||
const isLoading = ref(false);
|
const isLoading = ref(false);
|
||||||
const error = ref<string | null>(null);
|
const error = ref<string | null>(null);
|
||||||
@@ -61,10 +63,27 @@ export const useAppearanceStore = defineStore('appearance', () => {
|
|||||||
// 当前终端字体大小
|
// 当前终端字体大小
|
||||||
const currentTerminalFontSize = computed<number>(() => {
|
const currentTerminalFontSize = computed<number>(() => {
|
||||||
// 提供默认值 14,如果后端没有设置或设置无效
|
// 提供默认值 14,如果后端没有设置或设置无效
|
||||||
|
let size;
|
||||||
|
if (isMobile.value) {
|
||||||
|
size = appearanceSettings.value.terminalFontSizeMobile;
|
||||||
|
} else {
|
||||||
|
size = appearanceSettings.value.terminalFontSize;
|
||||||
|
}
|
||||||
|
return typeof size === 'number' && size > 0 ? size : 14;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 桌面端终端字体大小 (用于设置面板等处区分显示)
|
||||||
|
const terminalFontSizeDesktop = computed<number>(() => {
|
||||||
const size = appearanceSettings.value.terminalFontSize;
|
const size = appearanceSettings.value.terminalFontSize;
|
||||||
return typeof size === 'number' && size > 0 ? size : 14;
|
return typeof size === 'number' && size > 0 ? size : 14;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 移动端终端字体大小 (用于设置面板等处区分显示)
|
||||||
|
const terminalFontSizeMobile = computed<number>(() => {
|
||||||
|
const size = appearanceSettings.value.terminalFontSizeMobile;
|
||||||
|
return typeof size === 'number' && size > 0 ? size : 14;
|
||||||
|
});
|
||||||
|
|
||||||
// 页面背景图片 URL
|
// 页面背景图片 URL
|
||||||
const pageBackgroundImage = computed(() => appearanceSettings.value.pageBackgroundImage);
|
const pageBackgroundImage = computed(() => appearanceSettings.value.pageBackgroundImage);
|
||||||
|
|
||||||
@@ -218,10 +237,18 @@ export const useAppearanceStore = defineStore('appearance', () => {
|
|||||||
* 设置终端字体大小
|
* 设置终端字体大小
|
||||||
* @param size 字体大小 (数字)
|
* @param size 字体大小 (数字)
|
||||||
*/
|
*/
|
||||||
async function setTerminalFontSize(size: number) {
|
async function setTerminalFontSize(size: number) { // 此函数专用于桌面端
|
||||||
await updateAppearanceSettings({ terminalFontSize: size });
|
await updateAppearanceSettings({ terminalFontSize: size });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置移动端终端字体大小
|
||||||
|
* @param size 字体大小 (数字)
|
||||||
|
*/
|
||||||
|
async function setTerminalFontSizeMobile(size: number) {
|
||||||
|
await updateAppearanceSettings({ terminalFontSizeMobile: size });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置编辑器字体大小
|
* 设置编辑器字体大小
|
||||||
* @param size 字体大小 (数字)
|
* @param size 字体大小 (数字)
|
||||||
@@ -575,7 +602,9 @@ export const useAppearanceStore = defineStore('appearance', () => {
|
|||||||
activeTerminalThemeId,
|
activeTerminalThemeId,
|
||||||
currentTerminalTheme,
|
currentTerminalTheme,
|
||||||
currentTerminalFontFamily,
|
currentTerminalFontFamily,
|
||||||
currentTerminalFontSize,
|
currentTerminalFontSize, // 这个 getter 会自动根据设备类型返回正确的字体大小
|
||||||
|
terminalFontSizeDesktop, // + 用于在设置中分别显示/设置桌面端字号
|
||||||
|
terminalFontSizeMobile, // + 用于在设置中分别显示/设置移动端字号
|
||||||
currentEditorFontSize, // <-- 新增
|
currentEditorFontSize, // <-- 新增
|
||||||
pageBackgroundImage,
|
pageBackgroundImage,
|
||||||
// pageBackgroundOpacity, // Removed
|
// pageBackgroundOpacity, // Removed
|
||||||
@@ -589,7 +618,8 @@ export const useAppearanceStore = defineStore('appearance', () => {
|
|||||||
resetCustomUiTheme,
|
resetCustomUiTheme,
|
||||||
setActiveTerminalTheme,
|
setActiveTerminalTheme,
|
||||||
setTerminalFontFamily,
|
setTerminalFontFamily,
|
||||||
setTerminalFontSize,
|
setTerminalFontSize, // 设置桌面端字体大小
|
||||||
|
setTerminalFontSizeMobile, // + 设置移动端字体大小
|
||||||
setEditorFontSize, // <-- 新增
|
setEditorFontSize, // <-- 新增
|
||||||
setTerminalBackgroundEnabled, // <-- 新增
|
setTerminalBackgroundEnabled, // <-- 新增
|
||||||
createTerminalTheme, // 保留
|
createTerminalTheme, // 保留
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export interface AppearanceSettings {
|
|||||||
activeTerminalThemeId?: number | null; // 终端主题 ID
|
activeTerminalThemeId?: number | null; // 终端主题 ID
|
||||||
terminalFontFamily?: string;
|
terminalFontFamily?: string;
|
||||||
terminalFontSize?: number;
|
terminalFontSize?: number;
|
||||||
|
terminalFontSizeMobile?: number; // 移动端字体大小
|
||||||
terminalBackgroundImage?: string;
|
terminalBackgroundImage?: string;
|
||||||
pageBackgroundImage?: string;
|
pageBackgroundImage?: string;
|
||||||
editorFontSize?: number;
|
editorFontSize?: number;
|
||||||
|
|||||||
Reference in New Issue
Block a user