diff --git a/Doc/XXSJPic_V1.0/XNOSAL_Type.drawio b/Doc/XXSJPic_V1.0/XNOSAL_Type.drawio new file mode 100644 index 0000000..e415dab --- /dev/null +++ b/Doc/XXSJPic_V1.0/XNOSAL_Type.drawio @@ -0,0 +1,574 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/XXSJPic_V1.0/XNSimPortal_IntCnf.drawio b/Doc/XXSJPic_V1.0/XNSimPortal_IntCnf.drawio new file mode 100644 index 0000000..4d1376d --- /dev/null +++ b/Doc/XXSJPic_V1.0/XNSimPortal_IntCnf.drawio @@ -0,0 +1,533 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Doc/一体化二进制数据包软件概要设计说明-V1.0.docx b/Doc/一体化二进制数据包软件概要设计说明-V1.0.docx index bdad3b7..97d9834 100644 Binary files a/Doc/一体化二进制数据包软件概要设计说明-V1.0.docx and b/Doc/一体化二进制数据包软件概要设计说明-V1.0.docx differ diff --git a/Doc/一体化二进制数据包软件概要设计说明-V1.0.pdf b/Doc/一体化二进制数据包软件概要设计说明-V1.0.pdf index 1b3a4c1..a001fc5 100644 Binary files a/Doc/一体化二进制数据包软件概要设计说明-V1.0.pdf and b/Doc/一体化二进制数据包软件概要设计说明-V1.0.pdf differ diff --git a/Doc/一体化二进制数据包软件详细设计说明-V1.0.docx b/Doc/一体化二进制数据包软件详细设计说明-V1.0.docx index 808d52c..b72f8c3 100644 Binary files a/Doc/一体化二进制数据包软件详细设计说明-V1.0.docx and b/Doc/一体化二进制数据包软件详细设计说明-V1.0.docx differ diff --git a/XNCore_Win/.vscode/settings.json b/XNCore_Win/.vscode/settings.json new file mode 100644 index 0000000..8819d6b --- /dev/null +++ b/XNCore_Win/.vscode/settings.json @@ -0,0 +1,74 @@ +{ + "files.associations": { + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "any": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "chrono": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "complex": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "ranges": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp", + "valarray": "cpp", + "variant": "cpp", + "filesystem": "cpp" + } +} diff --git a/XNCore_Win/XNGlobalDefine/XNDDS.h b/XNCore_Win/XNGlobalDefine/XNDDS.h index 1c708de..e5f8faa 100644 --- a/XNCore_Win/XNGlobalDefine/XNDDS.h +++ b/XNCore_Win/XNGlobalDefine/XNDDS.h @@ -14,63 +14,67 @@ // FastDDS宏定义 #define XN_DDS eprosima::fastdds::dds -namespace XNSim { -template using XNDDSOptional = eprosima::fastcdr::optional; +namespace XNSim +{ +template +using XNDDSOptional = eprosima::fastcdr::optional; using XNDDSParticipantPtr = XN_DDS::DomainParticipant *; -using XNDDSPublisherPtr = XN_DDS::Publisher *; -using XNDDSSubscriberPtr = XN_DDS::Subscriber *; -using XNDDSTopicPtr = XN_DDS::Topic *; -using XNDDSDataWriterPtr = XN_DDS::DataWriter *; -using XNDDSDataReaderPtr = XN_DDS::DataReader *; -using XNDDSTypeSupport = XN_DDS::TypeSupport; -using XNDDSDataWriterQos = XN_DDS::DataWriterQos; -using XNDDSDataReaderQos = XN_DDS::DataReaderQos; +using XNDDSPublisherPtr = XN_DDS::Publisher *; +using XNDDSSubscriberPtr = XN_DDS::Subscriber *; +using XNDDSTopicPtr = XN_DDS::Topic *; +using XNDDSDataWriterPtr = XN_DDS::DataWriter *; +using XNDDSDataReaderPtr = XN_DDS::DataReader *; +using XNDDSTypeSupport = XN_DDS::TypeSupport; +using XNDDSDataWriterQos = XN_DDS::DataWriterQos; +using XNDDSDataReaderQos = XN_DDS::DataReaderQos; using XNDDSParticipantQos = XN_DDS::DomainParticipantQos; -using XNDDSTopicQos = XN_DDS::TopicQos; -using XNDDSPublisherQos = XN_DDS::PublisherQos; -using XNDDSSubscriberQos = XN_DDS::SubscriberQos; +using XNDDSTopicQos = XN_DDS::TopicQos; +using XNDDSPublisherQos = XN_DDS::PublisherQos; +using XNDDSSubscriberQos = XN_DDS::SubscriberQos; -using XNDDSPublisherMap = std::unordered_map; +using XNDDSPublisherMap = std::unordered_map; using XNDDSSubscriberMap = std::unordered_map; using XNDDSDataWriterMap = std::unordered_map; struct PublisherInfo { - XNDDSPublisherPtr publisher; - XNDDSDataWriterPtr dataWriter; + XNDDSPublisherPtr publisher; + XNDDSDataWriterPtr dataWriter; }; struct SubscriberInfo { - XNDDSSubscriberPtr subscriber; - XNDDSDataReaderPtr dataReader; + XNDDSSubscriberPtr subscriber; + XNDDSDataReaderPtr dataReader; }; struct TopicInfo { - XNDDSTopicPtr topic; - XNDDSPublisherMap publishers_; - XNDDSSubscriberMap subscribers_; + XNDDSTopicPtr topic; + XNDDSPublisherMap publishers_; + XNDDSSubscriberMap subscribers_; }; using XNDDSTopicMap = std::unordered_map; -template using XNDDSCallBack = std::function; +template +using XNDDSCallBack = std::function; template -class DataReaderListenerImpl : public XN_DDS::DataReaderListener { +class DataReaderListenerImpl : public XN_DDS::DataReaderListener +{ public: - DataReaderListenerImpl(XNDDSCallBack callback) : callback_(callback) {} + DataReaderListenerImpl(XNDDSCallBack callback) : callback_(callback) {} - void on_data_available(XNDDSDataReaderPtr reader) override { - XN_DDS::SampleInfo info; - if (reader->take_next_sample(&data_, &info) == XN_DDS::RETCODE_OK && - info.valid_data) { - callback_(data_); - } - } + void on_data_available(XNDDSDataReaderPtr reader) override + { + XN_DDS::SampleInfo info; + if (reader->take_next_sample(&data_, &info) == XN_DDS::RETCODE_OK && info.valid_data) { + callback_(data_); + } + } private: - T data_; - XNDDSCallBack callback_; + T data_; + XNDDSCallBack callback_; }; } // namespace XNSim \ No newline at end of file diff --git a/XNCore_Win/XNGlobalDefine/XNEnum.h b/XNCore_Win/XNGlobalDefine/XNEnum.h index 1a792d6..7cd4c22 100644 --- a/XNCore_Win/XNGlobalDefine/XNEnum.h +++ b/XNCore_Win/XNGlobalDefine/XNEnum.h @@ -1,142 +1,143 @@ #pragma once -namespace XNSim { +namespace XNSim +{ /** * @brief 系统运行状态枚举类 */ enum class RunStatus { - /** + /** * @brief 未开始 */ - NotStart = 0, - /** + NotStart = 0, + /** * @brief 运行中 */ - Runing, - /** + Runing, + /** * @brief 暂停 */ - Suspend, - /** + Suspend, + /** * @brief 中止 */ - Aborted, - /** + Aborted, + /** * @brief 结束 */ - Finished + Finished }; /** * @brief 仿真控制命令枚举类 */ enum class SimControlCmd { - /** + /** * @brief 开始 */ - Start = 0, - /** + Start = 0, + /** * @brief 继续 */ - Continue, - /** + Continue, + /** * @brief 暂停 */ - Suspend, - /** + Suspend, + /** * @brief 中止 */ - Abort + Abort }; /** * @brief 运行频率族枚举类 */ enum class FreqLevel { - /** + /** * @brief 基础频率 */ - BaseFreq = 0, // 120/100/60 Hz - /** + BaseFreq = 0, // 120/100/60 Hz + /** * @brief 半频 */ - HalfFreq, // 60/50/30 Hz - /** + HalfFreq, // 60/50/30 Hz + /** * @brief 四分之一频 */ - QuarterFreq, // 30/25/15 Hz - /** + QuarterFreq, // 30/25/15 Hz + /** * @brief 八分之一频 */ - EighthFreq, // 15/12.5/7.5 Hz - /** + EighthFreq, // 15/12.5/7.5 Hz + /** * @brief 十六分之一频 */ - SixteenthFreq, // 7.5/6.25/3.75 Hz - /** + SixteenthFreq, // 7.5/6.25/3.75 Hz + /** * @brief 三十二分之一频 */ - ThirtyTwothFreq, // 3.75/3.125/1.875 Hz + ThirtyTwothFreq, // 3.75/3.125/1.875 Hz }; /** * @brief 框架对象状态枚举 */ enum class XNFrameObjectStatus { - /** + /** * @brief 未初始化 */ - NotReady = 0, - /** + NotReady = 0, + /** * @brief 已初始化 */ - Initialized, - /** + Initialized, + /** * @brief 已准备好 */ - Ready, - /** + Ready, + /** * @brief 未知 */ - Unknown + Unknown }; enum class XNCoreObjectID { - /** + /** * @brief 框架对象 */ - Framework = 0, - /** + Framework = 0, + /** * @brief 模型管理器 */ - ModelManager, - /** + ModelManager = 1, + /** * @brief 时间管理器 */ - TimeManager = 2, - /** + TimeManager = 2, + /** * @brief 线程管理器 */ - ThreadManager = 3, - /** + ThreadManager = 3, + /** * @brief 服务管理器 */ - ServiceManager = 4, - /** + ServiceManager = 4, + /** * @brief 构型管理器 */ - ConfigManager = 5, - /** + ConfigManager = 5, + /** * @brief 模型管理器 */ - ModelManager = 6, - /** + ModelManager = 6, + /** * @brief 事件管理器 */ - EventManager = 7, - /** + EventManager = 7, + /** * @brief DDS管理器 */ - DDSManager = 8 + DDSManager = 8 }; } // namespace XNSim \ No newline at end of file diff --git a/XNCore_Win/XNGlobalDefine/XNTypeTraits.h b/XNCore_Win/XNGlobalDefine/XNTypeTraits.h index 55ec59d..5b65c22 100644 --- a/XNCore_Win/XNGlobalDefine/XNTypeTraits.h +++ b/XNCore_Win/XNGlobalDefine/XNTypeTraits.h @@ -4,7 +4,8 @@ #include #include -namespace XNSim { +namespace XNSim +{ // 类型检查 template @@ -19,11 +20,15 @@ template inline constexpr bool is_convertible_v = std::is_convertible_v; // 数组类型检查 -namespace TypeTraits { -template struct is_std_array : std::false_type {}; +namespace TypeTraits +{ + template + struct is_std_array : std::false_type { + }; -template -struct is_std_array> : std::true_type {}; + template + struct is_std_array> : std::true_type { + }; } // namespace TypeTraits // 数组类型检查简化使用 @@ -31,12 +36,15 @@ template inline constexpr bool is_array_v = TypeTraits::is_std_array::value; // 获取数组大小 -namespace TypeTraits { -template -struct array_size : std::integral_constant {}; +namespace TypeTraits +{ + template + struct array_size : std::integral_constant { + }; -template -struct array_size> : std::integral_constant {}; + template + struct array_size> : std::integral_constant { + }; } // namespace TypeTraits // 获取数组大小简化使用 @@ -44,28 +52,33 @@ template inline constexpr std::size_t array_size_v = TypeTraits::array_size::value; // 获取类型大小 -template constexpr size_t getTypeSize() { - if constexpr (is_array_v) { - // 对于std::array,计算所有元素的总大小 - return getTypeSize() * array_size_v; - } else { - return sizeof(T); - } +template +constexpr size_t getTypeSize() +{ + if constexpr (is_array_v) { + // 对于std::array,计算所有元素的总大小 + return getTypeSize() * array_size_v; + } else { + return sizeof(T); + } } // 获取数组总大小 -template constexpr std::size_t arrayTotalSize(const T &arr) { - if constexpr (is_array_v) { - // 对于std::array,计算所有元素的总大小 - return getTypeSize() * array_size_v; - } else { - return 1; - } +template +constexpr std::size_t arrayTotalSize() +{ + if constexpr (is_array_v) { + // 对于std::array,计算所有元素的总大小 + return getTypeSize() * array_size_v; + } else { + return 1; + } } // 枚举值获取函数 template -constexpr typename std::underlying_type::type enumValue(T e) { - return static_cast::type>(e); +constexpr typename std::underlying_type::type enumValue(T e) +{ + return static_cast::type>(e); } } // namespace XNSim \ No newline at end of file diff --git a/XNSimPortal/doc/接口配置模块设计文档.md b/XNSimPortal/doc/接口配置模块设计文档.md new file mode 100644 index 0000000..9d301a7 --- /dev/null +++ b/XNSimPortal/doc/接口配置模块设计文档.md @@ -0,0 +1,309 @@ +# 接口配置模块设计文档 + +## 1. 概述 + +接口配置模块是 XNSimPortal 系统的核心组件之一,负责管理仿真系统中的数据接口定义。该模块提供了完整的接口生命周期管理功能,包括接口的创建、编辑、删除、查询、导入导出等操作。模块采用前后端分离架构,前端使用 Web Components 技术构建用户界面,后端提供 RESTful API 接口。 + +### 1.1 模块组成 + +- **前端组件**:`interface-config.js` - 主组件 +- **子组件**: + - `toolbar.js` - 工具栏组件 + - `data-table.js` - 数据表格组件 + - `variable-form.js` - 变量表单组件 + - `import-dialog.js` - 导入对话框组件 +- **后端路由**: + - `routes/interface-config.js` - 接口管理 API + - `routes/icd-import.js` - ICD 文件导入 API +- **工具类**: + - `utils/data-interface-utils.js` - 数据接口操作工具 + - `utils/icd-parser.js` - ICD 文件解析工具 + +### 1.2 技术架构 + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ 前端组件层 │ │ 后端API层 │ │ 数据存储层 │ +│ │ │ │ │ │ +│ interface-config│◄──►│ interface-config│◄──►│ SQLite数据库 │ +│ toolbar │ │ icd-import │ │ DataInterface_* │ +│ data-table │ │ │ │ 表 │ +│ variable-form │ │ │ │ │ +│ import-dialog │ │ │ │ │ +└─────────────────┘ └─────────────────┘ └─────────────────┘ +``` + +## 2. 功能 + +### 2.1 核心功能 + +1. **接口管理** + + - 接口的增删改查操作 + - 批量删除接口 + - 接口数据验证 +2. **数据导入** + + - ICD Excel 文件导入 + - 批量数据导入 + - 导入数据预览和确认 +3. **数据展示** + + - 分页表格显示 + - 搜索和过滤 + - 高级搜索(多条件组合) +4. **配置管理** + + - 构型关联管理 + - ATA 章节管理 + - 机型管理 + +### 2.2 辅助功能 + +1. **数据验证** + + - 必填字段验证 + - 数据类型验证 + - 唯一性验证 +2. **用户体验** + + - 加载状态提示 + - 错误信息展示 + - 操作确认对话框 + +## 3. 性能 + +### 3.1 性能指标 + +- **响应时间**:接口查询 < 500ms,数据导入 < 5s +- **并发处理**:支持多用户同时操作 +- **数据量支持**:单次导入支持 1000+条记录 +- **内存使用**:前端组件内存占用 < 50MB + +### 3.2 性能优化策略 + +1. **数据库优化** + + - 使用索引优化查询性能 + - 批量操作减少数据库交互次数 +2. **前端优化** + + - 虚拟滚动处理大量数据 + - 分页加载减少初始渲染时间 + - 防抖处理搜索输入 +3. **文件处理优化** + + - 流式处理大文件 + - 临时文件及时清理 + +## 4. 输入 + +### 4.1 用户输入 + +1. **接口定义数据** + + ``` + { + SystemName: "XNSim", + PlaneName: "机型名称", + ATAName: "ATA章节", + ModelStructName: "模型结构名称", + InterfaceName: "接口名称", + InterfaceType: "接口类型", + InterfaceOption: 1, + InterfaceIsArray: true/false, + InterfaceArraySize_1: 10, + InterfaceArraySize_2: 0, + InterfaceNotes: "备注信息", + ConfID: "构型ID" + } + ``` +2. **搜索条件** + + - 关键词搜索 + - 高级搜索条件(机型、ATA 章节、结构体名称) +3. **文件输入** + + - ICD Excel 文件(.xlsx 格式) + - 文件大小限制:< 10MB + +### 4.2 系统输入 + +1. **构型选择** + + - 从 localStorage 获取当前选择的构型 ID + - 构型信息包含 configurationId +2. **配置数据** + + - ATA 章节列表 + - 机型列表 + - 结构体列表 + +## 5. 输出 + +### 5.1 数据输出 + +1. **接口列表** + + ```json + [ + { + "SystemName": "XNSim", + "PlaneName": "机型名称", + "ATAName": "ATA章节", + "ModelStructName": "模型结构名称", + "InterfaceName": "接口名称", + "InterfaceType": "接口类型", + "InterfaceOption": 1, + "InterfaceIsArray": true, + "InterfaceArraySize_1": 10, + "InterfaceArraySize_2": 0, + "InterfaceNotes": "备注信息" + } + ] + ``` +2. **操作结果** + + ```json + { + "success": true, + "message": "操作成功", + "data": {} + } + ``` +3. **导入结果** + + ```json + { + "success": true, + "results": [ + { "success": true, "data": {} }, + { "success": false, "error": "错误信息", "data": {} } + ], + "message": "导入完成,成功: 10, 失败: 2" + } + ``` + +### 5.2 界面输出 + +1. **数据表格**:分页显示接口列表 +2. **表单界面**:接口编辑表单 +3. **导入对话框**:导入数据预览和确认 +4. **状态提示**:操作成功/失败提示 + +## 6. 算法 + +### 6.1 ICD 文件解析算法 + +``` +1. 读取Excel文件 +2. 验证工作表结构(Inputs/Outputs) +3. 解析每个工作表: + - 提取变量名称 + - 解析数组维度 + - 处理变量类型映射 + - 生成标准格式数据 +4. 合并Inputs和Outputs数据 +5. 返回解析结果 +``` + +### 6.2 数组维度解析算法 + +``` +输入:维度字符串(如"[10]"、"[3][2]"、"10") +输出:{isArray: boolean, arraySize1: number, arraySize2: number} + +1. 检查空值或1的情况 → 返回非数组 +2. 匹配方括号格式 [数字][数字] → 提取维度 +3. 匹配纯数字格式 → 提取一维数组大小 +4. 其他情况 → 返回非数组 +``` + +### 6.3 搜索过滤算法 + +``` +1. 关键词搜索: + - 在接口名称、备注等字段中模糊匹配 + - 支持大小写不敏感搜索 + +2. 高级搜索: + - 多条件AND组合 + - 支持机型、ATA章节、结构体名称精确匹配 + - 支持接口类型、数组类型条件过滤 +``` + +## 7. 流程 + +### 7.1 接口管理主流程 + +```mermaid +graph TD + A[用户进入接口配置页面] --> B[检查构型选择] + B --> C{是否已选择构型?} + C -->|否| D[提示选择构型] + C -->|是| E[加载接口数据] + E --> F[显示数据表格] + F --> G[用户操作] + G --> H{操作类型} + H -->|添加| I[打开添加表单] + H -->|编辑| J[打开编辑表单] + H -->|删除| K[确认删除] + H -->|导入| L[选择文件导入] + I --> M[保存接口] + J --> M + K --> N[删除接口] + L --> O[解析文件] + M --> P[刷新数据] + N --> P + O --> Q[预览导入数据] + Q --> R[确认导入] + R --> P + P --> F +``` + +### 7.2 数据导入流程 + +```mermaid +graph TD + A[用户选择ICD文件] --> B[上传文件到服务器] + B --> C[解析Excel文件] + C --> D[验证数据格式] + D --> E{数据是否有效?} + E -->|否| F[返回错误信息] + E -->|是| G[生成预览数据] + G --> H[显示导入对话框] + H --> I[用户确认导入] + I --> J[批量保存到数据库] + J --> K[返回导入结果] + K --> L[刷新界面数据] +``` + +### 7.3 搜索过滤流程 + +```mermaid +graph TD + A[用户输入搜索条件] --> B{搜索类型} + B -->|关键词搜索| C[模糊匹配过滤] + B -->|高级搜索| D[多条件组合过滤] + C --> E[更新表格显示] + D --> E + E --> F[显示过滤结果] + F --> G[更新分页信息] +``` + +## 8. 接口 + +所有接口均以/api 为前缀,数据格式为 JSON,采用 HTTP/HTTPS 协议。具体接口有: + +1. GET /api/planes1)功能:获取机型列表;2)输入:无参数;3)输出:JSON 对象{ success: boolean, message: string, data:array};4)说明:返回所有可用机型信息,包含机型图标、名称和描述。 +2. GET /api/interface/list1)功能:获取接口列表;2)输入:confID(构型 ID,查询参数);3)输出:JSON 对象{ success: boolean, message: string, data: array };4)说明:返回指定构型下的所有接口数据。 +3. POST /api/interface/add1)功能:添加接口;2)输入:JSON 对象,包含接口定义的所有字段;3)输出:JSON 对象{ success: boolean, message: string, id: number };4)说明:添加新的接口记录,接口名称需唯一。 +4. PUT /api/interface/update1)功能:更新接口;2)输入:JSON 对象,包含 currentData 和 originalData;3)输出:JSON 对象{ success: boolean, message: string };4)说明:根据原始数据定位并更新接口信息。 +5. DELETE /api/interface/delete1)功能:删除接口;2)输入:interfaceName(接口名称,查询参数),confID(构型 ID,查询参数);3)输出:JSON 对象{ success: boolean, message: string };4)说明:删除指定接口。 +6. POST /api/interface/import1)功能:批量导入接口;2)输入:JSON 数组,每项为接口定义对象;3)输出:JSON 对象{ success: boolean, message: string, results: array };4)说明:批量导入接口,返回每条数据的处理结果。 +7. GET /api/interface/struct/list1)功能:获取接口结构体列表;2)输入:systemName、planeName、ataName、confID(查询参数);3)输出:JSON 对象{ success: boolean, message: string, data: array };4)说明:返回符合条件的结构体名称列表。 +8. POST /api/icd/import + 1)功能:导入 ICD 文件并解析; + 2)输入:form-data 格式,file 为 Excel 文件; + 3)输出:JSON 对象{ success: boolean, message: string, data: array }; + 4)说明:解析 ICD Excel 文件,返回变量信息预览。