Files
est-dsx/README.md
2025-10-22 03:46:30 +00:00

82 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EST-DSX 信息网络布线仿真测试平台
一个基于 Next.js 的仿真与竞赛平台,用于模拟信息网络布线测试(铜缆与光纤)、连接配置、过程记录与赛后统计。前端提供可视化场景与操作界面,后端 Express 服务提供连接图与比赛数据 API。
## 项目概览
- 前端Next.js 15、React、Tailwind CSS 4、Zustand 状态管理、Headless UI、Chart.js/ECharts、JsPlumb 等
- 典型端口:
- `3003` 前端开发端口(`npm run dev`
## 目录结构(简要)
- `src/pages`:核心页面(`index` 仿真、`admin` 管理、`competition` 统计)
- `src/components`场景与功能组件Office/Industry/DataCenter/WorldSkill、连接/测试组件等)
- `src/store`Zustand 状态与测试数据(`COPPER`/`FIBER` JSON 等)
- `src/config/api.js`:前端 API 基址与路径
- `server/app.js`:主要 API 服务(连接图、竞赛)
- `server/server.js`:静态下载与作为前端默认基地址(需要代理 `/dsxapi` 到 3007
- `public/`:图片与静态资源
## 环境要求
- Node.js ≥ 18.18(推荐 20+ LTS
- npm ≥ 9
## 快速开始(本地开发)
1) 安装依赖
- 在根目录:`npm install`
-`server/` 目录(后端有独立 `package.json``cd server && npm install`
2) 启动后端 API默认 3007
- 在根目录或 `server/``node server/app.js`
3) 启动网关/静态服务(默认 3000
- 在根目录或 `server/``node server/server.js`
- 说明:前端默认将请求发到 `http://<host>:3000/dsxapi/api/*`。需要代理 `/dsxapi``http://localhost:3007` 才能正常调用后端。
4) 启动前端(默认 3003
- 在根目录:`npm run dev`
5) 访问
- 仿真主页(`/`)仅支持在 iframe 中访问且需要 `token`(见下文“鉴权与嵌入”);本地调试请优先使用 `/admin``/competition` 页面。
- 管理页:`http://localhost:3003/admin`
- 统计页:`http://localhost:3003/competition`
## 代理与 API 配置
- 前端 API 路径位于 `src/config/api.js`:默认 `BASE_URL` 指向 `http(s)://<host>:3000`,并使用 `/dsxapi/api/*` 路由。
- 本地开发有两种方式:
- 方式 A推荐在 3000 端口上配置反向代理,将 `/dsxapi` 代理到 `http://localhost:3007`
- 方式 B快速临时修改 `src/config/api.js`,将 `BASE_URL` 设置为 `http://localhost:3007` 并移除 `/dsxapi` 前缀,使前端直接访问 `http://localhost:3007/api/*`
- 注:`/verify-admin``/check-auth` 路由由外部系统提供,仓库中未实现。如需本地验证,可在前端暂时跳过或模拟。
## 前端页面与功能
- 仿真页面(`/`
- 仅 iframe 嵌入访问(会校验是否处于 iframe 且携带 `token`
- 场景Office、Industry、DataCenter、WorldSkill 以及对应任务页;支持设备/模块安装、连接物品、故障场景、结果展示等
- 管理页面(`/admin`
- 选择场景并编辑连接映射;限制部分端口不可配置;支持保存、初始化、导入/导出 JSON
- 统计页面(`/competition`
- 实时拉取参赛席位数据,按条件排序与计算评分;支持导出 Excel
## 后端 API`server/app.js`,默认 3007
- 连接映射
- `GET /api/connectionMap?scene=<scene>`:返回 `pass` 场景与指定场景合并后的连接图
- `POST /api/connectionMap`:提交 `{ <scene>: { ...connections } }` 更新并持久化到 `server/connection_maps/connectionMap.json`(禁止修改 `pass`
- `POST /api/initConnectionMap`:重置为内置初始映射并持久化
- 竞赛
- `POST /api/competition/start`:开始比赛,返回 `UUID`;每分钟备份编码 `.est``server/competition_tmp/<UUID>/`
- `POST /api/competition/end`:结束比赛并保存编码 `.est``server/competition_data/`,返回 `uuid` 与数据
- `GET /api/competition/status`:返回比赛状态与开始时间/UUID如在运行
- `POST /api/competition/data`:提交 `{ UUID, fingerprint, timestamp, data }`,以指纹为键保存最新数据
- `GET /api/competition/data`:返回当前所有参赛数据快照
## 构建与部署
- 构建:`npm run build`
- 生产启动:`npm run start`(默认 3003
- 部署建议:
- 在生产网关3000上反代 `/dsxapi` 到后端 API3007
- 按需提供外部鉴权服务(`/check-auth``/verify-admin`)并在 iframe 中嵌入主页
## 常见问题
- 主页显示 502/拒绝访问:未在 iframe 中或缺少 `token`;用于集成环境,请从外部系统携带 `token` 打开。
- 前端请求 404未配置 `/dsxapi` 代理;参见上文“代理与 API 配置”。
- 管理页保存失败:确保未修改 `pass` 场景;检查后端是否启动并可写 `server/connection_maps/`