| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- import { STORAGE_KEYS, DEFAULT_CONFIG } from '../../utils/constants';
- const MESSAGES_STORAGE_KEY = 'playground_messages';
- /**
- * 保存配置到 localStorage
- * @param {Object} config - 要保存的配置对象
- */
- export const saveConfig = (config) => {
- try {
- const configToSave = {
- ...config,
- timestamp: new Date().toISOString(),
- };
- localStorage.setItem(STORAGE_KEYS.CONFIG, JSON.stringify(configToSave));
- console.log('配置已保存到本地存储');
- } catch (error) {
- console.error('保存配置失败:', error);
- }
- };
- /**
- * 保存消息到 localStorage
- * @param {Array} messages - 要保存的消息数组
- */
- export const saveMessages = (messages) => {
- try {
- const messagesToSave = {
- messages,
- timestamp: new Date().toISOString(),
- };
- localStorage.setItem(STORAGE_KEYS.MESSAGES, JSON.stringify(messagesToSave));
- console.log('消息已保存到本地存储');
- } catch (error) {
- console.error('保存消息失败:', error);
- }
- };
- /**
- * 从 localStorage 加载配置
- * @returns {Object} 配置对象,如果不存在则返回默认配置
- */
- export const loadConfig = () => {
- try {
- const savedConfig = localStorage.getItem(STORAGE_KEYS.CONFIG);
- if (savedConfig) {
- const parsedConfig = JSON.parse(savedConfig);
- const mergedConfig = {
- inputs: {
- ...DEFAULT_CONFIG.inputs,
- ...parsedConfig.inputs,
- },
- parameterEnabled: {
- ...DEFAULT_CONFIG.parameterEnabled,
- ...parsedConfig.parameterEnabled,
- },
- showDebugPanel: parsedConfig.showDebugPanel || DEFAULT_CONFIG.showDebugPanel,
- customRequestMode: parsedConfig.customRequestMode || DEFAULT_CONFIG.customRequestMode,
- customRequestBody: parsedConfig.customRequestBody || DEFAULT_CONFIG.customRequestBody,
- };
- console.log('配置已从本地存储加载');
- return mergedConfig;
- }
- } catch (error) {
- console.error('加载配置失败:', error);
- }
- console.log('使用默认配置');
- return DEFAULT_CONFIG;
- };
- /**
- * 从 localStorage 加载消息
- * @returns {Array} 消息数组,如果不存在则返回 null
- */
- export const loadMessages = () => {
- try {
- const savedMessages = localStorage.getItem(STORAGE_KEYS.MESSAGES);
- if (savedMessages) {
- const parsedMessages = JSON.parse(savedMessages);
- console.log('消息已从本地存储加载');
- return parsedMessages.messages || null;
- }
- } catch (error) {
- console.error('加载消息失败:', error);
- }
- console.log('没有找到保存的消息');
- return null;
- };
- /**
- * 清除保存的配置
- */
- export const clearConfig = () => {
- try {
- localStorage.removeItem(STORAGE_KEYS.CONFIG);
- localStorage.removeItem(STORAGE_KEYS.MESSAGES); // 同时清除消息
- console.log('配置和消息已清除');
- } catch (error) {
- console.error('清除配置失败:', error);
- }
- };
- /**
- * 清除保存的消息
- */
- export const clearMessages = () => {
- try {
- localStorage.removeItem(STORAGE_KEYS.MESSAGES);
- console.log('消息已清除');
- } catch (error) {
- console.error('清除消息失败:', error);
- }
- };
- /**
- * 检查是否有保存的配置
- * @returns {boolean} 是否存在保存的配置
- */
- export const hasStoredConfig = () => {
- try {
- return localStorage.getItem(STORAGE_KEYS.CONFIG) !== null;
- } catch (error) {
- console.error('检查配置失败:', error);
- return false;
- }
- };
- /**
- * 获取配置的最后保存时间
- * @returns {string|null} 最后保存时间的 ISO 字符串
- */
- export const getConfigTimestamp = () => {
- try {
- const savedConfig = localStorage.getItem(STORAGE_KEYS.CONFIG);
- if (savedConfig) {
- const parsedConfig = JSON.parse(savedConfig);
- return parsedConfig.timestamp || null;
- }
- } catch (error) {
- console.error('获取配置时间戳失败:', error);
- }
- return null;
- };
- /**
- * 导出配置为 JSON 文件(包含消息)
- * @param {Object} config - 要导出的配置
- * @param {Array} messages - 要导出的消息
- */
- export const exportConfig = (config, messages = null) => {
- try {
- const configToExport = {
- ...config,
- messages: messages || loadMessages(), // 包含消息数据
- exportTime: new Date().toISOString(),
- version: '1.0',
- };
- const dataStr = JSON.stringify(configToExport, null, 2);
- const dataBlob = new Blob([dataStr], { type: 'application/json' });
- const link = document.createElement('a');
- link.href = URL.createObjectURL(dataBlob);
- link.download = `playground-config-${new Date().toISOString().split('T')[0]}.json`;
- link.click();
- URL.revokeObjectURL(link.href);
- console.log('配置已导出');
- } catch (error) {
- console.error('导出配置失败:', error);
- }
- };
- /**
- * 从文件导入配置(包含消息)
- * @param {File} file - 包含配置的 JSON 文件
- * @returns {Promise<Object>} 导入的配置对象
- */
- export const importConfig = (file) => {
- return new Promise((resolve, reject) => {
- try {
- const reader = new FileReader();
- reader.onload = (e) => {
- try {
- const importedConfig = JSON.parse(e.target.result);
- if (importedConfig.inputs && importedConfig.parameterEnabled) {
- // 如果导入的配置包含消息,也一起导入
- if (importedConfig.messages && Array.isArray(importedConfig.messages)) {
- saveMessages(importedConfig.messages);
- }
- console.log('配置已从文件导入');
- resolve(importedConfig);
- } else {
- reject(new Error('配置文件格式无效'));
- }
- } catch (parseError) {
- reject(new Error('解析配置文件失败: ' + parseError.message));
- }
- };
- reader.onerror = () => reject(new Error('读取文件失败'));
- reader.readAsText(file);
- } catch (error) {
- reject(new Error('导入配置失败: ' + error.message));
- }
- });
- };
|