diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index ff3df8d..3ca86af 100644 Binary files a/Release/database/XNSim.db and b/Release/database/XNSim.db differ diff --git a/XNSimPortal/README.md b/XNSimPortal/README.md index db6cdbf..0cba73a 100644 --- a/XNSimPortal/README.md +++ b/XNSimPortal/README.md @@ -1,33 +1,68 @@ -# XNSim 登录系统 +# XNSim 门户网站 -这是一个与 C++动态库集成的登录系统,用于 XNSim 项目。 +一个基于 Node.js 的现代化门户系统,集成了 C++ 动态库认证功能,专为 XNSim 项目设计。 -## 功能特点 +## 📋 目录 + +- [功能特点](#功能特点) +- [系统架构](#系统架构) +- [环境要求](#环境要求) +- [快速开始](#快速开始) +- [API 文档](#api-文档) +- [权限管理](#权限管理) +- [技术栈](#技术栈) +- [常见问题](#常见问题) + +## ✨ 功能特点 + +### 🔐 认证系统 - 美观的响应式登录界面 -- 根据操作系统自动选择动态库类型和命名规则: - - Windows: `login.dll` - - Linux: `liblogin.so`(符合 Linux 动态库命名规范) -- 支持基于权限级别的用户角色系统 -- 使用 Node.js 作为后端服务 -- 接口配置管理功能: - - 支持添加、编辑、删除接口 - - 支持从 Excel 文件导入接口配置 - - 支持按构型、ATA 章节、结构体名等条件筛选 - - 支持分页显示和批量操作 +- 跨平台动态库支持(Windows/Linux) +- 基于权限级别的用户角色管理 +- 记住登录状态功能 -## 环境要求 +### 🔧 接口配置管理 -- Node.js 14.x 或更高版本 -- 环境变量 `XNCore` 指向动态库所在的根目录(系统会在该目录的 lib 子目录中查找动态库) -- MySQL 数据库(用于存储接口配置数据) +- 完整的 CRUD 操作支持 +- Excel 文件批量导入功能 +- 多维度筛选(构型、ATA 章节、结构体名等) +- 分页显示和批量操作 +- 数据验证和错误处理 -## 安装步骤 +### 📊 系统监控 -1. 确保已设置环境变量 `XNCore`,指向包含动态库的根目录 +- 实时数据监控 +- 系统日志管理 +- 用户行为追踪 +- 性能指标展示 + +## 🏗️ 系统架构 + +``` +XNSimPortal/ +├── assets/ # 静态资源文件 +├── components/ # 前端组件 +├── routes/ # API 路由 +├── utils/ # 工具函数 +├── server.js # 主服务器文件 +└── main.html # 主页面 +``` + +## 📋 环境要求 + +### 必需软件 + +- **Node.js**: 14.x 或更高版本 +- **SQLite**: 5.7 或更高版本 +- **操作系统**: Windows 10+ / Linux / macOS + +### 环境变量 + +必须设置 `XNCore` 环境变量,指向 XNSim 安装根目录: ```bash -# Linux/Mac +# Linux/macOS export XNCore=/path/to/xncore/directory # Windows (CMD) @@ -37,118 +72,237 @@ set XNCore=C:\path\to\xncore\directory $env:XNCore = "C:\path\to\xncore\directory" ``` -2. 确保在 `$XNCore/lib` 目录下存在相应的动态库文件: +### 动态库文件 - - Windows: `login.dll` - - Linux: `liblogin.so` +确保在 `$XNCore/lib` 目录下存在相应动态库: -3. 安装依赖 +| 操作系统 | 文件名 | 说明 | +| -------- | ------------- | ------------------ | +| Windows | `login.dll` | Windows 动态链接库 | +| Linux | `liblogin.so` | Linux 共享对象库 | + +## 🚀 快速开始 + +### 1. 克隆项目 + +```bash +git clone +cd XNSimPortal +``` + +### 2. 安装依赖 ```bash npm install ``` -4. 配置数据库连接 +### 3. 配置数据库 -在项目根目录创建 `.env` 文件,添加以下配置: +创建 `.env` 文件并配置数据库连接: ```env DB_HOST=localhost DB_USER=your_username DB_PASSWORD=your_password DB_NAME=xnsim_db +DB_PORT=3306 ``` -5. 启动服务器 +### 4. 启动服务 ```bash npm start ``` -6. 访问 http://localhost:3000 打开登录页面 +### 5. 访问应用 -## 登录 API +打开浏览器访问:http://localhost:3000 -登录系统通过调用 `/api/login` 接口与 C++动态库交互。API 接收以下参数: +## 📚 API 文档 -- `username`: 用户名 -- `password`: 密码 -- `remember`: 是否记住用户(布尔值) +### 认证 API -API 响应包含以下信息: +#### 用户登录 -- `success`: 登录是否成功(布尔值) -- `message`: 登录结果消息 -- `permissionLevel`: 用户权限级别(整数,仅在登录成功时返回) -- `role`: 用户角色描述(字符串,仅在登录成功时返回) +```http +POST /api/login +Content-Type: application/json -## 接口配置 API +{ + "username": "string", + "password": "string", + "remember": boolean +} +``` -### 接口列表 +**响应示例:** -- 路径: `/api/interface/list` -- 方法: `GET` -- 响应: 返回所有接口配置数据 +```json +{ + "success": true, + "message": "登录成功", + "permissionLevel": 3, + "role": "管理员" +} +``` -### 添加接口 +### 接口配置 API -- 路径: `/api/interface/add` -- 方法: `POST` -- 请求体: 包含接口配置信息的 JSON 对象 +#### 获取接口列表 -### 更新接口 +```http +GET /api/interface/list?page=1&limit=10&filter=... +``` -- 路径: `/api/interface/update` -- 方法: `PUT` -- 请求体: 包含当前数据和原始数据的 JSON 对象 +#### 添加接口 -### 删除接口 +```http +POST /api/interface/add +Content-Type: application/json -- 路径: `/api/interface/delete` -- 方法: `DELETE` -- 参数: 通过查询字符串传递接口标识信息 +{ + "configuration": "string", + "ataChapter": "string", + "structName": "string", + "interfaceName": "string", + "dataType": "string", + "arraySize": "string", + "description": "string" +} +``` -### 导入接口 +#### 更新接口 -- 路径: `/api/interface/import` -- 方法: `POST` -- 请求体: 包含导入数据的 JSON 对象 +```http +PUT /api/interface/update +Content-Type: application/json -### 获取导入模板 +{ + "currentData": {...}, + "originalData": {...} +} +``` -- 路径: `/api/interface/template` -- 方法: `GET` -- 响应: 返回 Excel 模板文件 +#### 删除接口 -## 权限级别 +```http +DELETE /api/interface/delete?id=123 +``` -系统支持以下权限级别: +#### 导入接口配置 -- 0: 访客 -- 1: 普通用户 -- 2: 高级用户 -- 3: 管理员 -- 4: 超级管理员 +```http +POST /api/interface/import +Content-Type: application/json -## 技术栈 +{ + "data": [...] +} +``` -- 前端: HTML, CSS, JavaScript, Web Components -- 后端: Node.js, Express -- 数据库: MySQL -- 外部库: - - ffi-napi (用于调用 C++动态库) - - xlsx (用于处理 Excel 文件) +#### 下载导入模板 -## 注意事项 +```http +GET /api/interface/template +``` -- 确保动态库是由 C++编写的,并且包含`Login_validateUser`导出函数(对应 Login 类的 validateUser 静态方法) -- `Login_validateUser`函数接受两个字符串参数(用户名和密码),并返回整数表示权限级别(负值表示登录失败) -- 系统会根据操作系统类型在`$XNCore/lib`目录下查找相应类型的动态库,并遵循各操作系统的命名规范 -- 接口配置数据需要遵循以下规则: - - 接口名称必须符合 C++ 命名规范 - - 数组大小必须大于 1(第二维可以为 0) - - 必填字段包括:构型、ATA 章节、接口结构体名、接口名称、数据类型 +## 🔐 权限管理 -## 更新计划 +系统采用五级权限体系: -1. 添加接口配置从 IDL 文件导入的功能 +| 级别 | 角色 | 权限描述 | +| ---- | ---------- | ---------------- | +| 0 | 访客 | 仅可查看公开信息 | +| 1 | 普通用户 | 基础功能访问权限 | +| 2 | 高级用户 | 扩展功能访问权限 | +| 3 | 管理员 | 系统管理权限 | +| 4 | 超级管理员 | 完全系统控制权限 | + +## 🛠️ 技术栈 + +### 前端 + +- **HTML5** - 语义化标记 +- **CSS3** - 样式和动画 +- **JavaScript ES6+** - 交互逻辑 +- **Web Components** - 组件化开发 + +### 后端 + +- **Node.js** - 运行时环境 +- **Express.js** - Web 框架 +- **MySQL** - 关系型数据库 + +### 核心库 + +- **ffi-napi** - C++ 动态库调用 +- **xlsx** - Excel 文件处理 +- **mysql2** - 数据库驱动 + +## ❓ 常见问题 + +### Q: 动态库加载失败怎么办? + +A: 请检查: + +1. `XNCore` 环境变量是否正确设置 +2. 动态库文件是否存在于 `$XNCore/lib` 目录 +3. 动态库是否包含 `Login_validateUser` 导出函数 + +### Q: 数据库连接失败? + +A: 请确认: + +1. MySQL 服务是否正在运行 +2. `.env` 文件中的数据库配置是否正确 +3. 数据库用户是否有足够权限 + +### Q: 接口配置导入失败? + +A: 请检查: + +1. Excel 文件格式是否符合模板要求 +2. 必填字段是否完整 +3. 数据格式是否符合验证规则 + +## 📝 开发规范 + +### 代码风格 + +- 使用 ES6+ 语法 +- 遵循 JavaScript 标准规范 +- 添加适当的注释和文档 + +### 数据验证 + +- 接口名称必须符合 C++ 命名规范 +- 数组大小必须大于 1 +- 必填字段不能为空 + +## 🔄 更新日志 + +### v0.31.0.250619_alpha (当前版本) + +- ✅ 基础登录认证功能 +- ✅ 接口配置管理 +- ✅ Excel 导入导出 +- ✅ 权限管理系统 + +### 计划功能 + +- 🔄 IDL 文件导入支持 +- 🔄 实时数据监控 +- 🔄 用户行为分析 +- 🔄 API 文档自动生成 + +## 📞 支持 + +如有问题或建议,请通过以下方式联系: + +- 提交 Issue +- 发送邮件至技术支持 +- 查看项目 Wiki + +--- + +**注意**: 本系统需要正确配置 C++ 动态库才能正常工作。确保动态库包含 `Login_validateUser` 函数,该函数接受用户名和密码参数,返回权限级别(负值表示失败)。 diff --git a/XNSimPortal/routes/icd-import.js b/XNSimPortal/routes/icd-import.js index b132fbe..044d950 100644 --- a/XNSimPortal/routes/icd-import.js +++ b/XNSimPortal/routes/icd-import.js @@ -5,8 +5,8 @@ const path = require('path'); const fs = require('fs'); const { parseICDFile } = require('../utils/icd-parser'); -// 确保uploads目录存在 -const uploadsDir = path.join(__dirname, '..', 'uploads'); +// 确保upload目录存在 +const uploadsDir = path.join(__dirname, '..', 'upload'); if (!fs.existsSync(uploadsDir)) { fs.mkdirSync(uploadsDir, { recursive: true }); }