V0.36.7.250630_alpha:修复接口配置时无法选择其它章节的问题

This commit is contained in:
jinchao 2025-06-30 10:09:53 +08:00
parent 6028e98292
commit 723927c8f7
5 changed files with 98 additions and 22 deletions

Binary file not shown.

View File

@ -849,7 +849,7 @@ class ConfigurationConfig extends HTMLElement {
const baseConfig = await this.showBaseConfigDialog(configs, planeName);
if (baseConfig !== null) {
const defaultConfig = {
ConfName: '',
ConfName: baseConfig.ConfName, // 使用用户输入的构型名称
OSName: baseConfig?.OSName || '',
OSVersion: baseConfig?.OSVersion || '',
RTXVersion: baseConfig?.RTXVersion || '',

View File

@ -105,9 +105,10 @@ class InterfaceConfig extends HTMLElement {
}
});
// 确认导入事件
// 导入确认事件
importDialog.addEventListener('confirm-import', async (e) => {
const importData = e.detail;
try {
const savedSelection = localStorage.getItem('xnsim-selection');
if (!savedSelection) {
@ -143,12 +144,23 @@ class InterfaceConfig extends HTMLElement {
if (result.success) {
await this.loadData();
alert('导入成功');
// 关闭导入对话框
const importDialog = this.shadowRoot.querySelector('import-dialog');
if (importDialog && importDialog.hide) {
importDialog.hide();
}
} else {
throw new Error(result.error || '保存导入数据失败');
}
} catch (error) {
console.error('保存导入数据时出错:', error);
alert(error.message || '保存导入数据失败');
} finally {
// 通知导入对话框隐藏加载蒙版
const importDialog = this.shadowRoot.querySelector('import-dialog');
if (importDialog && importDialog.hideLoading) {
importDialog.hideLoading();
}
}
});
@ -310,15 +322,24 @@ class InterfaceConfig extends HTMLElement {
throw new Error('请先选择构型');
}
// 获取接口数据
const response = await fetch(`/api/interface/list?confID=${selection.configurationId}`);
if (!response.ok) {
throw new Error('获取数据失败');
}
this.data = await response.json();
// 从接口数据中提取机型和ATA章节列表
// 获取ATA章节数据
const ataResponse = await fetch('/api/ata-chapters');
if (!ataResponse.ok) {
throw new Error('获取ATA章节数据失败');
}
const ataChapters = await ataResponse.json();
// 从接口数据中提取机型列表
this.planes = [...new Set(this.data.map(item => item.PlaneName))];
this.atas = [...new Set(this.data.map(item => item.ATAName))];
// 从ATA章节数据中提取章节ID列表
this.atas = ataChapters.map(chapter => chapter.ID);
this.updateTable();
this.updateAdvancedSearchOptions();

View File

@ -73,7 +73,7 @@ class ImportDialog extends HTMLElement {
this.updateTable();
});
confirmBtn.addEventListener('click', () => {
confirmBtn.addEventListener('click', async () => {
const ataSelect = this.shadowRoot.querySelector('#ata-select');
const modelInput = this.shadowRoot.querySelector('#model-input');
@ -127,15 +127,32 @@ class ImportDialog extends HTMLElement {
return;
}
// 显示加载蒙版
this.showLoading();
// 触发导入事件,让父组件处理导入逻辑
this.dispatchEvent(new CustomEvent('confirm-import', {
detail: processedData,
bubbles: true,
composed: true
}));
this.hide();
});
}
showLoading() {
const loadingOverlay = this.shadowRoot.querySelector('.loading-overlay');
if (loadingOverlay) {
loadingOverlay.style.display = 'flex';
}
}
hideLoading() {
const loadingOverlay = this.shadowRoot.querySelector('.loading-overlay');
if (loadingOverlay) {
loadingOverlay.style.display = 'none';
}
}
render() {
// 从 localStorage 获取机型信息
const savedSelection = localStorage.getItem('xnsim-selection');
@ -168,6 +185,41 @@ class ImportDialog extends HTMLElement {
max-height: 90vh;
display: flex;
flex-direction: column;
position: relative;
}
.loading-overlay {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.9);
z-index: 10;
justify-content: center;
align-items: center;
border-radius: 8px;
}
.loading-spinner {
width: 40px;
height: 40px;
border: 4px solid #f3f3f3;
border-top: 4px solid #5c6bc0;
border-radius: 50%;
animation: spin 1s linear infinite;
}
.loading-text {
margin-top: 10px;
color: #666;
font-size: 14px;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.header {
@ -259,30 +311,33 @@ class ImportDialog extends HTMLElement {
}
.confirm-btn {
background-color: #4CAF50;
background-color: #5c6bc0;
color: white;
}
.cancel-btn {
background-color: #f44336;
color: white;
background-color: #e8eaf6;
color: #5c6bc0;
}
.plane-info {
background-color: #f5f5f5;
padding: 10px;
border-radius: 4px;
margin-bottom: 15px;
font-size: 14px;
.confirm-btn:hover {
background-color: #3949ab;
}
.cancel-btn:hover {
background-color: #c5cae9;
}
</style>
<div class="dialog">
<div class="header">
<div class="title">导入数据预览</div>
<button class="close-btn">&times;</button>
<div class="loading-overlay">
<div style="text-align: center;">
<div class="loading-spinner"></div>
<div class="loading-text">正在导入数据请稍候...</div>
</div>
</div>
<div class="plane-info">
当前机型${planeName}
<div class="header">
<div class="title">导入数据</div>
<button class="close-btn">&times;</button>
</div>
<div class="options">
<div class="option-group">

View File

@ -58,8 +58,8 @@ app.use(session({
maxAge: 30 * 60 * 1000 // cookie 有效期 30 分钟
}
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ limit: '50mb' })); // 增加JSON请求体大小限制到50MB
app.use(bodyParser.urlencoded({ extended: true, limit: '50mb' })); // 增加URL编码请求体大小限制到50MB
// 静态文件服务 - 放在根路径处理之前
app.use(express.static(__dirname));