# XNSim 登录系统 这是一个与 C++动态库集成的登录系统,用于 XNSim 项目。 ## 功能特点 - 美观的响应式登录界面 - 根据操作系统自动选择动态库类型和命名规则: - Windows: `login.dll` - Linux: `liblogin.so`(符合 Linux 动态库命名规范) - 支持基于权限级别的用户角色系统 - 使用 Node.js 作为后端服务 - 接口配置管理功能: - 支持添加、编辑、删除接口 - 支持从 Excel 文件导入接口配置 - 支持按构型、ATA 章节、结构体名等条件筛选 - 支持分页显示和批量操作 ## 环境要求 - Node.js 14.x 或更高版本 - 环境变量 `XNCore` 指向动态库所在的根目录(系统会在该目录的 lib 子目录中查找动态库) - MySQL 数据库(用于存储接口配置数据) ## 安装步骤 1. 确保已设置环境变量 `XNCore`,指向包含动态库的根目录 ```bash # Linux/Mac export XNCore=/path/to/xncore/directory # Windows (CMD) set XNCore=C:\path\to\xncore\directory # Windows (PowerShell) $env:XNCore = "C:\path\to\xncore\directory" ``` 2. 确保在 `$XNCore/lib` 目录下存在相应的动态库文件: - Windows: `login.dll` - Linux: `liblogin.so` 3. 安装依赖 ```bash npm install ``` 4. 配置数据库连接 在项目根目录创建 `.env` 文件,添加以下配置: ```env DB_HOST=localhost DB_USER=your_username DB_PASSWORD=your_password DB_NAME=xnsim_db ``` 5. 启动服务器 ```bash npm start ``` 6. 访问 http://localhost:3000 打开登录页面 ## 登录 API 登录系统通过调用 `/api/login` 接口与 C++动态库交互。API 接收以下参数: - `username`: 用户名 - `password`: 密码 - `remember`: 是否记住用户(布尔值) API 响应包含以下信息: - `success`: 登录是否成功(布尔值) - `message`: 登录结果消息 - `permissionLevel`: 用户权限级别(整数,仅在登录成功时返回) - `role`: 用户角色描述(字符串,仅在登录成功时返回) ## 接口配置 API ### 接口列表 - 路径: `/api/interface/list` - 方法: `GET` - 响应: 返回所有接口配置数据 ### 添加接口 - 路径: `/api/interface/add` - 方法: `POST` - 请求体: 包含接口配置信息的 JSON 对象 ### 更新接口 - 路径: `/api/interface/update` - 方法: `PUT` - 请求体: 包含当前数据和原始数据的 JSON 对象 ### 删除接口 - 路径: `/api/interface/delete` - 方法: `DELETE` - 参数: 通过查询字符串传递接口标识信息 ### 导入接口 - 路径: `/api/interface/import` - 方法: `POST` - 请求体: 包含导入数据的 JSON 对象 ### 获取导入模板 - 路径: `/api/interface/template` - 方法: `GET` - 响应: 返回 Excel 模板文件 ## 权限级别 系统支持以下权限级别: - 0: 访客 - 1: 普通用户 - 2: 高级用户 - 3: 管理员 - 4: 超级管理员 ## 技术栈 - 前端: HTML, CSS, JavaScript, Web Components - 后端: Node.js, Express - 数据库: MySQL - 外部库: - ffi-napi (用于调用 C++动态库) - xlsx (用于处理 Excel 文件) ## 注意事项 - 确保动态库是由 C++编写的,并且包含`Login_validateUser`导出函数(对应 Login 类的 validateUser 静态方法) - `Login_validateUser`函数接受两个字符串参数(用户名和密码),并返回整数表示权限级别(负值表示登录失败) - 系统会根据操作系统类型在`$XNCore/lib`目录下查找相应类型的动态库,并遵循各操作系统的命名规范 - 接口配置数据需要遵循以下规则: - 接口名称必须符合 C++ 命名规范 - 数组大小必须大于 1(第二维可以为 0) - 必填字段包括:构型、ATA 章节、接口结构体名、接口名称、数据类型 ## 更新计划 1. 添加接口配置从 IDL 文件导入的功能