Skip to content

预设管理系统使用指南 ​

概述 ​

预设管理系统是 Eagle2Ae v2.4.0 引入的重要功能,每个面板实例独立的预设文件管理,支持导出导入和备份恢复,为用户提供便捷的配置管理功能。

核心特性 ​

1. 面板特定预设 ​

每个面板实例拥有独立的预设文件:

  • 面板1: Eagle2Ae1.Presets
  • 面板2: Eagle2Ae2.Presets
  • 面板3: Eagle2Ae3.Presets

2. 预设文件管理 ​

支持预设文件的导出和导入,便于配置的迁移和共享。

3. 自动保存机制 ​

配置变更时自动保存到预设文件,确保数据不丢失。

4. 备份恢复功能 ​

提供预设文件的备份和恢复,防止配置意外丢失。

使用指南 ​

预设管理器实现 ​

javascript
// 预设管理器
class PresetManager {
    constructor(panelId, settingsManager, csInterface) {
        this.panelId = panelId;
        this.settingsManager = settingsManager;
        this.csInterface = csInterface;
        
        this.log(`💾 预设管理器已为面板 ${panelId} 初始化`, 'debug');
    }
    
    /**
     * 获取当前面板的预设文件名
     * @returns {string} 'Eagle2Ae1.Presets', 'Eagle2Ae2.Presets', 或 'Eagle2Ae3.Presets'
     */
    getPresetFileName() {
        const panelNumber = this.panelId.replace('panel', '');
        return `Eagle2Ae${panelNumber}.Presets`;
    }
    
    /**
     * 保存预设到文件
     * @param {Object} settings - 当前设置
     * @returns {Promise<Object>} 保存结果
     */
    async savePresets(settings) {
        try {
            const presetFileName = this.getPresetFileName();
            const presetData = {
                version: '2.4.0',
                timestamp: new Date().toISOString(),
                settings: settings
            };
            
            // 将预设数据保存到文件
            const result = await this.csInterface.evalScript(`
                savePresetFile("${presetFileName}", "${JSON.stringify(presetData).replace(/"/g, '\\"')}")
            `);
            
            if (result.success) {
                this.log(`✅ 预设已保存到 ${presetFileName}`, 'success');
                return { success: true };
            } else {
                this.log(`❌ 保存预设失败: ${result.error}`, 'error');
                return { success: false, error: result.error };
            }
            
        } catch (error) {
            this.log(`❌ 保存预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
    
    /**
     * 从文件加载预设
     * @returns {Promise<Object>} 加载的预设数据
     */
    async loadPresets() {
        try {
            const presetFileName = this.getPresetFileName();
            
            // 从文件加载预设数据
            const result = await this.csInterface.evalScript(`
                loadPresetFile("${presetFileName}")
            `);
            
            if (result.success && result.data) {
                const presetData = JSON.parse(result.data);
                this.log(`✅ 从 ${presetFileName} 加载预设成功`, 'success');
                return { success: true, data: presetData };
            } else {
                this.log(`⚠️ 无法加载预设: ${result.error || '文件不存在'}`, 'warning');
                return { success: false, error: result.error || '文件不存在' };
            }
            
        } catch (error) {
            this.log(`❌ 加载预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
    
    /**
     * 导出预设文件
     * @param {string} exportPath - 导出路径
     * @returns {Promise<Object>} 导出结果
     */
    async exportPresets(exportPath) {
        try {
            const presetFileName = this.getPresetFileName();
            
            // 导出预设文件
            const result = await this.csInterface.evalScript(`
                exportPresetFile("${presetFileName}", "${exportPath.replace(/\\/g, '\\\\')}")
            `);
            
            if (result.success) {
                this.log(`✅ 预设已导出到 ${exportPath}`, 'success');
                return { success: true, path: exportPath };
            } else {
                this.log(`❌ 导出预设失败: ${result.error}`, 'error');
                return { success: false, error: result.error };
            }
            
        } catch (error) {
            this.log(`❌ 导出预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
    
    /**
     * 导入预设文件
     * @param {string} importPath - 导入路径
     * @returns {Promise<Object>} 导入结果
     */
    async importPresets(importPath) {
        try {
            const presetFileName = this.getPresetFileName();
            
            // 导入预设文件
            const result = await this.csInterface.evalScript(`
                importPresetFile("${presetFileName}", "${importPath.replace(/\\/g, '\\\\')}")
            `);
            
            if (result.success) {
                this.log(`✅ 从 ${importPath} 导入预设成功`, 'success');
                
                // 重新加载设置
                const loadResult = await this.loadPresets();
                if (loadResult.success) {
                    this.settingsManager.loadSettings(loadResult.data.settings);
                }
                
                return { success: true };
            } else {
                this.log(`❌ 导入预设失败: ${result.error}`, 'error');
                return { success: false, error: result.error };
            }
            
        } catch (error) {
            this.log(`❌ 导入预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
    
    /**
     * 备份预设文件
     * @returns {Promise<Object>} 备份结果
     */
    async backupPresets() {
        try {
            const presetFileName = this.getPresetFileName();
            const backupFileName = `${presetFileName}.backup.${Date.now()}`;
            
            // 备份预设文件
            const result = await this.csInterface.evalScript(`
                backupPresetFile("${presetFileName}", "${backupFileName}")
            `);
            
            if (result.success) {
                this.log(`✅ 预设已备份为 ${backupFileName}`, 'success');
                return { success: true, backupFile: backupFileName };
            } else {
                this.log(`❌ 备份预设失败: ${result.error}`, 'error');
                return { success: false, error: result.error };
            }
            
        } catch (error) {
            this.log(`❌ 备份预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
    
    /**
     * 恢复预设文件
     * @param {string} backupFile - 备份文件名
     * @returns {Promise<Object>} 恢复结果
     */
    async restorePresets(backupFile) {
        try {
            const presetFileName = this.getPresetFileName();
            
            // 恢复预设文件
            const result = await this.csInterface.evalScript(`
                restorePresetFile("${presetFileName}", "${backupFile}")
            `);
            
            if (result.success) {
                this.log(`✅ 从 ${backupFile} 恢复预设成功`, 'success');
                
                // 重新加载设置
                const loadResult = await this.loadPresets();
                if (loadResult.success) {
                    this.settingsManager.loadSettings(loadResult.data.settings);
                }
                
                return { success: true };
            } else {
                this.log(`❌ 恢复预设失败: ${result.error}`, 'error');
                return { success: false, error: result.error };
            }
            
        } catch (error) {
            this.log(`❌ 恢复预设时发生异常: ${error.message}`, 'error');
            return { success: false, error: error.message };
        }
    }
}

操作步骤 ​

1. 保存当前配置 ​

  1. 在面板中进行所需的设置
  2. 点击"保存预设"按钮
  3. 系统会自动将当前配置保存到对应的预设文件

2. 加载预设配置 ​

  1. 点击"加载预设"按钮
  2. 系统会从预设文件中读取配置
  3. 自动应用保存的设置

3. 导出预设文件 ​

  1. 点击"导出预设"按钮
  2. 选择导出路径
  3. 系统会将预设文件复制到指定位置

4. 导入预设文件 ​

  1. 点击"导入预设"按钮
  2. 选择要导入的预设文件
  3. 系统会将文件内容导入并应用

5. 备份预设文件 ​

  1. 点击"备份预设"按钮
  2. 系统会创建当前预设文件的备份副本
  3. 备份文件会带有时间戳后缀

6. 恢复预设文件 ​

  1. 点击"恢复预设"按钮
  2. 选择要恢复的备份文件
  3. 系统会用备份文件替换当前预设文件

最佳实践 ​

1. 定期备份 ​

建议定期备份预设文件,防止配置意外丢失:

  • 每周进行一次完整备份
  • 在重大配置更改前进行备份
  • 保留多个时间点的备份

2. 配置管理 ​

  • 为不同项目创建专门的预设模板
  • 使用有意义的预设文件名便于识别
  • 定期清理过时的预设文件

3. 团队协作 ​

  • 导出预设文件与团队成员共享
  • 建立统一的配置标准
  • 定期同步最新的预设配置

故障排除 ​

预设文件丢失 ​

如果预设文件丢失:

  1. 检查预设文件存储路径
  2. 从备份文件中恢复
  3. 重新创建配置并保存

导入导出失败 ​

如果导入导出操作失败:

  1. 检查文件路径是否有效
  2. 验证文件权限
  3. 确认磁盘空间是否充足

配置不生效 ​

如果加载预设后配置不生效:

  1. 检查预设文件格式是否正确
  2. 确认预设版本是否兼容
  3. 重启面板实例

高级功能 ​

1. 批量操作 ​

支持批量处理多个预设文件:

  • 批量导出所有面板的预设
  • 批量导入预设文件
  • 批量备份预设文件

2. 版本管理 ​

预设文件包含版本信息,支持:

  • 版本兼容性检查
  • 自动升级机制
  • 版本回退功能

3. 云端同步 ​

支持将预设文件同步到云端:

  • 自动上传最新预设
  • 从云端下载预设
  • 多设备间配置同步

Released under the MIT License.