@@ -19,6 +19,7 @@ const mapRowsToAppearanceSettings = (rows: DbAppearanceSettingsRow[]): Appearanc
|
||||
const settings: Partial<AppearanceSettings> = {};
|
||||
let latestUpdatedAt = 0;
|
||||
let terminalBackgroundEnabledFound = false; // 标记是否在数据库中找到该设置
|
||||
let terminalBackgroundOverlayOpacityFound = false; // 标记是否找到蒙版透明度设置
|
||||
|
||||
for (const row of rows) {
|
||||
// 更新 latestUpdatedAt
|
||||
@@ -51,7 +52,11 @@ const mapRowsToAppearanceSettings = (rows: DbAppearanceSettingsRow[]): Appearanc
|
||||
break;
|
||||
case 'terminalBackgroundEnabled':
|
||||
settings.terminalBackgroundEnabled = row.value === 'true'; // 将 'true'/'false' 字符串转为 boolean
|
||||
terminalBackgroundEnabledFound = true; // 标记已找到
|
||||
terminalBackgroundEnabledFound = true;
|
||||
break;
|
||||
case 'terminalBackgroundOverlayOpacity':
|
||||
settings.terminalBackgroundOverlayOpacity = parseFloat(row.value);
|
||||
terminalBackgroundOverlayOpacityFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -70,6 +75,9 @@ const mapRowsToAppearanceSettings = (rows: DbAppearanceSettingsRow[]): Appearanc
|
||||
terminalBackgroundEnabled: terminalBackgroundEnabledFound
|
||||
? settings.terminalBackgroundEnabled // 使用数据库找到的值 (true 或 false)
|
||||
: defaults.terminalBackgroundEnabled, // 否则使用默认值 (true)
|
||||
terminalBackgroundOverlayOpacity: terminalBackgroundOverlayOpacityFound
|
||||
? settings.terminalBackgroundOverlayOpacity // 使用数据库找到的值
|
||||
: defaults.terminalBackgroundOverlayOpacity, // 否则使用默认值
|
||||
updatedAt: latestUpdatedAt || defaults.updatedAt, // 使用最新的更新时间,否则使用默认时间戳
|
||||
};
|
||||
};
|
||||
@@ -86,6 +94,7 @@ const getDefaultAppearanceSettings = (): Omit<AppearanceSettings, '_id'> => {
|
||||
terminalBackgroundImage: undefined,
|
||||
pageBackgroundImage: undefined,
|
||||
terminalBackgroundEnabled: true, // 默认启用
|
||||
terminalBackgroundOverlayOpacity: 0.5, // 默认蒙版透明度
|
||||
updatedAt: Date.now(), // 提供默认时间戳
|
||||
};
|
||||
};
|
||||
@@ -110,7 +119,8 @@ export const ensureDefaultSettingsExist = async (db: sqlite3.Database): Promise<
|
||||
{ key: 'editorFontSize', value: defaults.editorFontSize },
|
||||
{ key: 'terminalBackgroundImage', value: defaults.terminalBackgroundImage ?? '' }, // 数据库中使用空字符串
|
||||
{ key: 'pageBackgroundImage', value: defaults.pageBackgroundImage ?? '' }, // 数据库中使用空字符串
|
||||
{ key: 'terminalBackgroundEnabled', value: defaults.terminalBackgroundEnabled }, // 新增
|
||||
{ key: 'terminalBackgroundEnabled', value: defaults.terminalBackgroundEnabled },
|
||||
{ key: 'terminalBackgroundOverlayOpacity', value: defaults.terminalBackgroundOverlayOpacity }, // 新增
|
||||
];
|
||||
|
||||
try {
|
||||
|
||||
@@ -9,7 +9,12 @@ import * as terminalThemeRepository from '../repositories/terminal-theme.reposit
|
||||
* @returns Promise<AppearanceSettings>
|
||||
*/
|
||||
export const getSettings = async (): Promise<AppearanceSettings> => {
|
||||
return appearanceRepository.getAppearanceSettings();
|
||||
const settings = await appearanceRepository.getAppearanceSettings();
|
||||
// 为 terminalBackgroundOverlayOpacity 提供默认值
|
||||
if (settings.terminalBackgroundOverlayOpacity === undefined || settings.terminalBackgroundOverlayOpacity === null) {
|
||||
settings.terminalBackgroundOverlayOpacity = 0.5; // 默认透明度为 0.5
|
||||
}
|
||||
return settings;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -64,6 +69,15 @@ export const updateSettings = async (settingsDto: UpdateAppearanceDto): Promise<
|
||||
settingsDto.editorFontSize = size;
|
||||
}
|
||||
|
||||
// 验证 terminalBackgroundOverlayOpacity (如果提供了)
|
||||
if (settingsDto.terminalBackgroundOverlayOpacity !== undefined && settingsDto.terminalBackgroundOverlayOpacity !== null) {
|
||||
const opacity = Number(settingsDto.terminalBackgroundOverlayOpacity);
|
||||
if (isNaN(opacity) || opacity < 0 || opacity > 1) {
|
||||
throw new Error(`无效的终端背景蒙版透明度: ${settingsDto.terminalBackgroundOverlayOpacity}。必须是一个 0 到 1 之间的数字。`);
|
||||
}
|
||||
settingsDto.terminalBackgroundOverlayOpacity = opacity; // 确保类型正确
|
||||
}
|
||||
|
||||
// TODO: 如果实现了背景图片上传,这里需要处理文件路径或 URL 的验证/保存逻辑
|
||||
|
||||
return appearanceRepository.updateAppearanceSettings(settingsDto);
|
||||
|
||||
@@ -17,6 +17,7 @@ export interface AppearanceSettings {
|
||||
pageBackgroundImage?: string; // 页面背景图片 URL 或路径
|
||||
editorFontSize?: number; // 编辑器字体大小 (px)
|
||||
terminalBackgroundEnabled?: boolean; // 终端背景是否启用
|
||||
terminalBackgroundOverlayOpacity?: number; // 终端背景蒙版透明度 (0-1)
|
||||
updatedAt?: number;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ export interface UpdateCaptchaSettingsDto {
|
||||
export interface AppSettings {
|
||||
sidebar?: SidebarConfig;
|
||||
captcha?: CaptchaSettings;
|
||||
showStatusMonitorIpAddress?: boolean; // 新增:是否在状态监视器中显示IP地址
|
||||
showStatusMonitorIpAddress?: boolean; // 是否在状态监视器中显示IP地址
|
||||
// 可以添加其他设置模块,例如:
|
||||
// security?: SecuritySettings;
|
||||
// general?: GeneralSettings;
|
||||
|
||||
Reference in New Issue
Block a user