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

108 lines
3.9 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 { setupEventListeners } from './event-handlers.js';
import { loadScenarioFiles } from './file-operations.js';
import { renderBasicUI, updateFileContent } from './ui-renderer.js';
import { resetEditState } from './utils.js';
/**
* 初始化组件
* @param {HTMLElement} component - RunEnvConfig组件实例
*/
export function initializeComponent(component) {
// 设置初始状态
component.currentFile = null;
component.xmlContent = '';
component.scenarioFiles = [];
component.isEdited = false;
component.xmlDoc = null;
// 创建Shadow DOM
component.attachShadow({ mode: 'open' });
}
/**
* 组件连接回调
* @param {HTMLElement} component - RunEnvConfig组件实例
*/
export async function connectedCallback(component) {
// 先渲染UI
renderBasicUI(component);
setupEventListeners(component);
// 然后加载文件列表
await loadScenarioFiles(component);
// 检查是否有renderComplete方法如果有则调用
setTimeout(() => {
if (typeof component.renderComplete === 'function') {
component.renderComplete();
}
}, 100);
}
/**
* 在完成渲染后同时处理状态恢复
* @param {HTMLElement} component - RunEnvConfig组件实例
*/
export function renderComplete(component) {
// 在DOM渲染完成后更新文件选择器
setTimeout(() => {
// 如果有当前文件,尝试选择它
if (component.currentFile && component.xmlContent) {
const fileSelector = component.shadowRoot.getElementById('scenarioFile');
if (fileSelector) {
// 确认文件在列表中
const fileExists = Array.from(fileSelector.options).some(opt => opt.value === component.currentFile);
if (fileExists) {
// 设置选中的文件
fileSelector.value = component.currentFile;
// 解析XML内容
try {
const parser = new DOMParser();
component.xmlDoc = parser.parseFromString(component.xmlContent, 'text/xml');
// 更新内容显示
const contentElement = component.shadowRoot.getElementById('fileContent');
if (contentElement) {
contentElement.innerHTML = '';
component.renderVisualEditor(contentElement, component.xmlDoc);
}
// 如果有编辑状态,恢复它
if (component.isEdited) {
const saveButton = component.shadowRoot.getElementById('saveConfig');
if (saveButton) {
saveButton.classList.add('modified');
saveButton.title = '文件已修改,请保存';
}
}
} catch (error) {
console.error('恢复XML内容失败:', error);
}
} else {
// 文件不存在,清除状态
component.currentFile = null;
component.xmlContent = '';
component.isEdited = false;
}
}
}
}, 50); // 增加延迟确保DOM已经完全加载
}
/**
* 组件销毁回调
* @param {HTMLElement} component - RunEnvConfig组件实例
*/
export function disconnectedCallback(component) {
// 移除可能的事件监听器
const fileSelector = component.shadowRoot.getElementById('scenarioFile');
if (fileSelector) {
fileSelector.removeEventListener('change', component.handleFileSelectorChange);
}
}