update
This commit is contained in:
@@ -1,8 +1,14 @@
|
|||||||
import { settingsRepository, Setting, getSidebarConfig as getSidebarConfigFromRepo, setSidebarConfig as setSidebarConfigInRepo } from '../repositories/settings.repository'; // Import specific repo functions
|
import { settingsRepository, Setting, getSidebarConfig as getSidebarConfigFromRepo, setSidebarConfig as setSidebarConfigInRepo } from '../repositories/settings.repository'; // Import specific repo functions
|
||||||
import { SidebarConfig, PaneName, UpdateSidebarConfigDto } from '../types/settings.types'; // <-- Correct import path
|
import { SidebarConfig, PaneName, UpdateSidebarConfigDto } from '../types/settings.types';
|
||||||
|
|
||||||
// +++ 定义默认的焦点切换顺序 +++
|
// +++ 定义焦点切换配置项接口 (与前端 store 保持一致) +++
|
||||||
const DEFAULT_FOCUS_SEQUENCE = ["quickCommandsSearch", "commandHistorySearch", "fileManagerSearch", "commandInput", "terminalSearch"];
|
interface ConfigurableFocusableItem {
|
||||||
|
id: string;
|
||||||
|
shortcut?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- 移除旧的默认字符串数组 ---
|
||||||
|
// const DEFAULT_FOCUS_SEQUENCE = ["quickCommandsSearch", "commandHistorySearch", "fileManagerSearch", "commandInput", "terminalSearch"];
|
||||||
const FOCUS_SEQUENCE_KEY = 'focusSwitcherSequence'; // 焦点切换顺序设置键
|
const FOCUS_SEQUENCE_KEY = 'focusSwitcherSequence'; // 焦点切换顺序设置键
|
||||||
const NAV_BAR_VISIBLE_KEY = 'navBarVisible'; // 导航栏可见性设置键
|
const NAV_BAR_VISIBLE_KEY = 'navBarVisible'; // 导航栏可见性设置键
|
||||||
const LAYOUT_TREE_KEY = 'layoutTree'; // 布局树设置键
|
const LAYOUT_TREE_KEY = 'layoutTree'; // 布局树设置键
|
||||||
@@ -91,43 +97,52 @@ export const settingsService = {
|
|||||||
* 获取焦点切换顺序
|
* 获取焦点切换顺序
|
||||||
* @returns 返回存储的焦点切换顺序数组,如果未设置或无效则返回默认顺序
|
* @returns 返回存储的焦点切换顺序数组,如果未设置或无效则返回默认顺序
|
||||||
*/
|
*/
|
||||||
async getFocusSwitcherSequence(): Promise<string[]> {
|
async getFocusSwitcherSequence(): Promise<ConfigurableFocusableItem[]> { // +++ 更新返回类型 +++
|
||||||
console.log(`[Service] Attempting to get setting for key: ${FOCUS_SEQUENCE_KEY}`);
|
console.log(`[Service] Attempting to get setting for key: ${FOCUS_SEQUENCE_KEY}`);
|
||||||
try {
|
try {
|
||||||
const sequenceJson = await settingsRepository.getSetting(FOCUS_SEQUENCE_KEY);
|
const configJson = await settingsRepository.getSetting(FOCUS_SEQUENCE_KEY);
|
||||||
console.log(`[Service] Raw value from repository for ${FOCUS_SEQUENCE_KEY}:`, sequenceJson);
|
console.log(`[Service] Raw value from repository for ${FOCUS_SEQUENCE_KEY}:`, configJson);
|
||||||
if (sequenceJson) {
|
if (configJson) {
|
||||||
const sequence = JSON.parse(sequenceJson);
|
const config = JSON.parse(configJson);
|
||||||
if (Array.isArray(sequence) && sequence.every(item => typeof item === 'string')) {
|
// +++ 验证新的数据结构 +++
|
||||||
console.log('[Service] Fetched and validated focus switcher sequence:', JSON.stringify(sequence));
|
if (Array.isArray(config) && config.every(item =>
|
||||||
return sequence;
|
typeof item === 'object' && item !== null && typeof item.id === 'string' &&
|
||||||
|
(item.shortcut === undefined || typeof item.shortcut === 'string')
|
||||||
|
)) {
|
||||||
|
console.log('[Service] Fetched and validated focus switcher config:', JSON.stringify(config));
|
||||||
|
return config as ConfigurableFocusableItem[];
|
||||||
} else {
|
} else {
|
||||||
console.warn('[Service] Invalid focus switcher sequence format found in settings. Returning default.');
|
console.warn('[Service] Invalid focus switcher config format found in settings. Returning empty array.');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.log('[Service] No focus switcher sequence found in settings. Returning default.');
|
console.log('[Service] No focus switcher config found in settings. Returning empty array.');
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`[Service] Error parsing focus switcher sequence from settings (key: ${FOCUS_SEQUENCE_KEY}):`, error);
|
console.error(`[Service] Error parsing focus switcher config from settings (key: ${FOCUS_SEQUENCE_KEY}):`, error);
|
||||||
}
|
}
|
||||||
console.log('[Service] Returning default focus sequence:', JSON.stringify(DEFAULT_FOCUS_SEQUENCE));
|
// +++ 返回空数组作为默认值 +++
|
||||||
return [...DEFAULT_FOCUS_SEQUENCE];
|
console.log('[Service] Returning empty array as default focus config.');
|
||||||
|
return [];
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置焦点切换顺序
|
* 设置焦点切换顺序
|
||||||
* @param sequence 要保存的焦点切换顺序数组
|
* @param sequence 要保存的焦点切换顺序数组
|
||||||
*/
|
*/
|
||||||
async setFocusSwitcherSequence(sequence: string[]): Promise<void> {
|
async setFocusSwitcherSequence(config: ConfigurableFocusableItem[]): Promise<void> { // +++ 更新参数类型 +++
|
||||||
console.log('[Service] setFocusSwitcherSequence called with:', JSON.stringify(sequence));
|
console.log('[Service] setFocusSwitcherSequence called with new config format:', JSON.stringify(config));
|
||||||
if (!Array.isArray(sequence) || !sequence.every(item => typeof item === 'string')) {
|
// +++ 验证新的数据结构 (虽然控制器层已验证,服务层再次验证更健壮) +++
|
||||||
console.error('[Service] Attempted to save invalid focus switcher sequence format:', sequence);
|
if (!Array.isArray(config) || !config.every(item =>
|
||||||
throw new Error('Invalid sequence format provided.');
|
typeof item === 'object' && item !== null && typeof item.id === 'string' &&
|
||||||
|
(item.shortcut === undefined || typeof item.shortcut === 'string')
|
||||||
|
)) {
|
||||||
|
console.error('[Service] Attempted to save invalid focus switcher config format:', config);
|
||||||
|
throw new Error('Invalid config format provided.');
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const sequenceJson = JSON.stringify(sequence);
|
const configJson = JSON.stringify(config); // +++ 序列化新的结构 +++
|
||||||
console.log(`[Service] Attempting to save setting. Key: ${FOCUS_SEQUENCE_KEY}, Value: ${sequenceJson}`);
|
console.log(`[Service] Attempting to save setting. Key: ${FOCUS_SEQUENCE_KEY}, Value: ${configJson}`);
|
||||||
await settingsRepository.setSetting(FOCUS_SEQUENCE_KEY, sequenceJson);
|
await settingsRepository.setSetting(FOCUS_SEQUENCE_KEY, configJson);
|
||||||
console.log(`[Service] Successfully saved setting for key: ${FOCUS_SEQUENCE_KEY}`);
|
console.log(`[Service] Successfully saved setting for key: ${FOCUS_SEQUENCE_KEY}`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(`[Service] Error calling settingsRepository.setSetting for key ${FOCUS_SEQUENCE_KEY}:`, error);
|
console.error(`[Service] Error calling settingsRepository.setSetting for key ${FOCUS_SEQUENCE_KEY}:`, error);
|
||||||
|
|||||||
@@ -87,21 +87,27 @@ export const settingsController = {
|
|||||||
async setFocusSwitcherSequence(req: Request, res: Response): Promise<void> {
|
async setFocusSwitcherSequence(req: Request, res: Response): Promise<void> {
|
||||||
console.log('[Controller] Received request to set focus switcher sequence.');
|
console.log('[Controller] Received request to set focus switcher sequence.');
|
||||||
try {
|
try {
|
||||||
const { sequence } = req.body;
|
// +++ 修改:直接获取请求体作为配置数组 +++
|
||||||
console.log('[Controller] Request body sequence:', JSON.stringify(sequence));
|
const focusConfig = req.body;
|
||||||
|
console.log('[Controller] Request body focusConfig:', JSON.stringify(focusConfig));
|
||||||
|
|
||||||
if (!Array.isArray(sequence) || !sequence.every(item => typeof item === 'string')) {
|
// +++ 修改:验证新的数据结构 (ConfigurableFocusableItem[]) +++
|
||||||
console.warn('[Controller] Invalid sequence format received:', sequence);
|
if (!Array.isArray(focusConfig) || !focusConfig.every(item =>
|
||||||
res.status(400).json({ message: '无效的请求体,"sequence" 必须是一个字符串数组' });
|
typeof item === 'object' && item !== null && typeof item.id === 'string' &&
|
||||||
|
(item.shortcut === undefined || typeof item.shortcut === 'string')
|
||||||
|
)) {
|
||||||
|
console.warn('[Controller] Invalid focus config format received:', focusConfig);
|
||||||
|
res.status(400).json({ message: '无效的请求体,必须是包含 id (string) 和可选 shortcut (string) 的对象数组' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[Controller] Calling settingsService.setFocusSwitcherSequence...');
|
console.log('[Controller] Calling settingsService.setFocusSwitcherSequence with new config format...');
|
||||||
await settingsService.setFocusSwitcherSequence(sequence);
|
// +++ 修改:传递完整的配置数组给服务层 +++
|
||||||
|
await settingsService.setFocusSwitcherSequence(focusConfig);
|
||||||
console.log('[Controller] settingsService.setFocusSwitcherSequence completed successfully.');
|
console.log('[Controller] settingsService.setFocusSwitcherSequence completed successfully.');
|
||||||
|
|
||||||
console.log('[Controller] Logging audit action: FOCUS_SWITCHER_SEQUENCE_UPDATED');
|
console.log('[Controller] Logging audit action: FOCUS_SWITCHER_SEQUENCE_UPDATED');
|
||||||
auditLogService.logAction('FOCUS_SWITCHER_SEQUENCE_UPDATED', { sequence });
|
auditLogService.logAction('FOCUS_SWITCHER_SEQUENCE_UPDATED', { config: focusConfig }); // +++ 修改审计日志内容 +++
|
||||||
|
|
||||||
console.log('[Controller] Sending success response.');
|
console.log('[Controller] Sending success response.');
|
||||||
res.status(200).json({ message: '焦点切换顺序已成功更新' });
|
res.status(200).json({ message: '焦点切换顺序已成功更新' });
|
||||||
|
|||||||
@@ -126,17 +126,17 @@ export const useFocusSwitcherStore = defineStore('focusSwitcher', () => {
|
|||||||
const apiUrl = '/api/v1/settings/focus-switcher-sequence'; // 假设 API 端点不变
|
const apiUrl = '/api/v1/settings/focus-switcher-sequence'; // 假设 API 端点不变
|
||||||
console.log(`[FocusSwitcherStore] Attempting to save configuration (sequence & shortcuts) to backend via PUT: ${apiUrl}`);
|
console.log(`[FocusSwitcherStore] Attempting to save configuration (sequence & shortcuts) to backend via PUT: ${apiUrl}`);
|
||||||
try {
|
try {
|
||||||
// *** 构造后端期望的请求体:{ sequence: string[] } ***
|
// *** 发送 configuredItems 结构到后端 (包含快捷键) ***
|
||||||
const sequenceIds = configuredItems.value.map(item => item.id);
|
// !!! 注意:这需要后端 API 支持接收此结构 !!!
|
||||||
const requestBody = { sequence: sequenceIds };
|
const configToSave = configuredItems.value;
|
||||||
console.log('[FocusSwitcherStore] Configuration data to save (backend format):', JSON.stringify(requestBody));
|
console.log('[FocusSwitcherStore] Configuration data to save (including shortcuts):', JSON.stringify(configToSave));
|
||||||
const response = await fetch(apiUrl, {
|
const response = await fetch(apiUrl, {
|
||||||
method: 'PUT',
|
method: 'PUT',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
// Auth headers if needed
|
// Auth headers if needed
|
||||||
},
|
},
|
||||||
body: JSON.stringify(requestBody), // *** 发送符合后端格式的请求体 ***
|
body: JSON.stringify(configToSave), // *** 发送完整的配置对象数组 ***
|
||||||
});
|
});
|
||||||
console.log(`[FocusSwitcherStore] Received response from PUT ${apiUrl}. Status: ${response.status}`);
|
console.log(`[FocusSwitcherStore] Received response from PUT ${apiUrl}. Status: ${response.status}`);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user