2025-04-28 12:25:20 +08:00

182 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 文件操作相关的功能类
* @type {module}
*/
import { XmlUtils } from './xml-utils.js';
export class FileOperations {
/**
* 加载服务文件列表
*/
static async loadServiceFiles() {
try {
const response = await fetch('/api/service-files');
if (!response.ok) {
throw new Error(`服务器响应错误: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('加载服务文件失败:', error);
// 延迟3秒后重试
return new Promise((resolve) => {
setTimeout(async () => {
try {
console.log('尝试重新加载服务文件列表...');
const retryResponse = await fetch('/api/service-files');
if (retryResponse.ok) {
resolve(await retryResponse.json());
} else {
console.error('重试加载服务文件失败');
resolve([]);
}
} catch (retryError) {
console.error('重试加载服务文件失败:', retryError);
resolve([]);
}
}, 3000);
});
}
}
/**
* 加载文件内容
*/
static async loadFileContent(filePath) {
try {
const response = await fetch(`/api/service-file-content?path=${encodeURIComponent(filePath)}`);
if (!response.ok) {
throw new Error(`服务器响应错误: ${response.status}`);
}
const content = await response.text();
// 解析XML内容
const parser = new DOMParser();
let xmlDoc;
try {
xmlDoc = parser.parseFromString(content, 'application/xml');
// 检查解析错误
const parseError = xmlDoc.querySelector('parsererror');
if (parseError) {
throw new Error('XML解析错误');
}
// 特殊处理CommandList元素确保命令以属性方式存储
XmlUtils.ensureCommandListFormat(xmlDoc);
return {
content,
xmlDoc,
error: null
};
} catch (parseError) {
console.error('XML解析错误:', parseError);
}
} catch (error) {
console.error('加载文件内容失败:', error);
return {
content: null,
xmlDoc: null,
error: error.message
};
}
}
/**
* 保存文件内容
*/
static async saveFileContent(filePath, content) {
try {
const response = await fetch('/api/save-service-file', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
path: filePath,
content: content
})
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || `保存失败: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('保存文件失败:', error);
throw error;
}
}
/**
* 创建新配置
*/
static async createNewConfig(fileName) {
try {
const response = await fetch('/api/create-service-file', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ fileName })
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || `创建失败: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error('创建新配置文件失败:', error);
throw error;
}
}
/**
* 另存为新文件
*/
static async saveFileAs(fileName, content, currentFile, overwrite = false) {
try {
const response = await fetch('/api/save-service-as', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
fileName,
content,
currentFile,
overwrite
})
});
if (!response.ok) {
const errorData = await response.json();
return {
success: false,
data: errorData,
error: errorData.error || `保存失败: ${response.status}`
};
}
const result = await response.json();
return {
success: true,
data: result,
error: null
};
} catch (error) {
console.error('另存为失败:', error);
return {
success: false,
data: null,
error: error.message
};
}
}
}