diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index 5715766..63635a9 100644 Binary files a/Release/database/XNSim.db and b/Release/database/XNSim.db differ diff --git a/XNSimPortal/components/configuration-config.js b/XNSimPortal/components/configuration-config.js index bcda69a..085b399 100644 --- a/XNSimPortal/components/configuration-config.js +++ b/XNSimPortal/components/configuration-config.js @@ -1864,7 +1864,7 @@ class ConfigurationConfig extends HTMLElement { let serviceList = []; try { - const response = await fetch('/api/services'); + const response = await fetch('/api/service-dev/services'); if (!response.ok) throw new Error('B03042015: 获取服务列表失败'); serviceList = await response.json(); serviceSelect.innerHTML = '' + @@ -1886,7 +1886,7 @@ class ConfigurationConfig extends HTMLElement { } try { - const response = await fetch(`/api/service-versions/${className}`); + const response = await fetch(`/api/service-dev/service-versions/${className}`); if (!response.ok) throw new Error('B03042016: 获取版本列表失败'); const versions = await response.json(); versionSelect.innerHTML = '' + diff --git a/XNSimPortal/components/model-development.js b/XNSimPortal/components/model-development.js index 2557923..9b7a2ca 100644 --- a/XNSimPortal/components/model-development.js +++ b/XNSimPortal/components/model-development.js @@ -919,12 +919,12 @@ class ModelDevelopment extends HTMLElement {
@@ -1299,11 +1299,19 @@ class ModelDevelopment extends HTMLElement { const option = document.createElement('option'); option.value = i.toString(); option.textContent = i.toString(); - if (this.currentVersion.RunNode === i.toString()) { + + // 使用宽松比较,处理数字和字符串类型 + if (this.currentVersion.RunNode == i.toString()) { option.selected = true; } + runNodeSelect.appendChild(option); } + + // 如果没有选中任何选项,默认选择第一个 + if (runNodeSelect.selectedIndex === -1 && maxNode > 0) { + runNodeSelect.selectedIndex = 0; + } } /** diff --git a/XNSimPortal/routes/filesystem.js b/XNSimPortal/routes/filesystem.js index 0b36859..8c35bcb 100644 --- a/XNSimPortal/routes/filesystem.js +++ b/XNSimPortal/routes/filesystem.js @@ -854,35 +854,33 @@ async function findStructDefinition(headerFilePath, structName) { continue; } - // 匹配成员声明 - // 基础类型: int, double, float, char, short, long, unsigned, etc. - // 结构体指针: struct xxx_S* - // 结构体: struct xxx_S - const memberRegex = /^(?:const\s+)?(?:struct\s+([A-Za-z_][A-Za-z0-9_]*)\s*)?(?:unsigned\s+)?(?:long\s+)?(?:int\s+)?(?:char\s+)?(?:short\s+)?(?:float\s+)?(?:double\s+)?(?:void\s*)?(?:[A-Za-z_][A-Za-z0-9_]*\s*)?(\*?)\s*([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]*\])?\s*;?\s*$/; - + /** + * 匹配结构体成员声明,包括如下形式: + * int a; + * double b; + * struct input_hydraulic_S input; + * struct input_hydraulic_S *input; + * float arr[10]; + * const char *name; + */ + // 新正则:分组更清晰,支持struct和基础类型指针 + const memberRegex = /^(?:const\s+)?(?:(struct)\s+([A-Za-z_][A-Za-z0-9_]*)\s*)?([A-Za-z_][A-Za-z0-9_\s]*?)?(\*?)\s*([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]*\])?\s*;?\s*$/; + const memberMatch = trimmedLine.match(memberRegex); if (memberMatch) { - const structType = memberMatch[1]; // 结构体类型名 - const isPointer = memberMatch[2]; // 是否为指针 - const memberName = memberMatch[3]; // 成员名 - - // 构建类型信息 + const isStruct = memberMatch[1]; // struct关键字 + const structType = memberMatch[2]; // 结构体类型名 + const baseType = memberMatch[3] ? memberMatch[3].trim() : ''; + const isPointer = memberMatch[4]; // * + const memberName = memberMatch[5]; // 变量名 + let type = ''; - if (structType) { - // 结构体类型 + if (isStruct && structType) { type = `struct ${structType}${isPointer ? '*' : ''}`; } else { - // 基础类型,需要从原始行中提取 - const typeMatch = trimmedLine.match(/^(?:const\s+)?(?:unsigned\s+)?(?:long\s+)?(?:int\s+)?(?:char\s+)?(?:short\s+)?(?:float\s+)?(?:double\s+)?(?:void\s*)?(?:[A-Za-z_][A-Za-z0-9_]*\s*)?/); - if (typeMatch) { - type = typeMatch[0].trim() + (isPointer ? '*' : ''); - } else { - type = 'unknown'; - } + type = `${baseType}${isPointer ? '*' : ''}`.replace(/\s+/g, ' ').trim(); } - - // 拼接类型和成员名 - const memberString = `${type} ${memberName}`; + const memberString = `${type} ${memberName}`.trim(); memberNames.push(memberString); } }