zhouhao ebd6ff993d 部署:双应用支持 Nginx 子路径访问 před 2 týdny
..
backend d1df6c2e96 viewer:部件状态控制支持重命名并写回 .glb,自动同步故障映射表 před 2 týdny
data 4a4563cbed viewer:将 3d 模块重命名为 viewer,同步 README/文档/启动脚本/工具脚本路径与 npm 包名 před 2 týdny
docs 4a4563cbed viewer:将 3d 模块重命名为 viewer,同步 README/文档/启动脚本/工具脚本路径与 npm 包名 před 2 týdny
frontend ebd6ff993d 部署:双应用支持 Nginx 子路径访问 před 2 týdny
models d1df6c2e96 viewer:部件状态控制支持重命名并写回 .glb,自动同步故障映射表 před 2 týdny
tools 4a4563cbed viewer:将 3d 模块重命名为 viewer,同步 README/文档/启动脚本/工具脚本路径与 npm 包名 před 2 týdny
README.md d1df6c2e96 viewer:部件状态控制支持重命名并写回 .glb,自动同步故障映射表 před 2 týdny

README.md

压缩机 3D 部件查看与配色

Python(FastAPI)服务端 + Ant Design Vue(Vue3 + Vite + TypeScript)客户端。 加载 models/*.glb,按部件单独选中与着色;故障列表、曲线、场景位置、故障↔部件对照等。

目录结构

viewer/
├─ backend/            # FastAPI 服务端(扁平结构,无 app/ 层)
│  ├─ main.py          # 应用入口:鉴权、/api、/models、前端托管与 SPA 回退
│  ├─ config.py        # 路径、运行模式与账号配置
│  ├─ auth.py          # 登录鉴权(内存 token、require_auth 依赖)
│  ├─ routers/         # files / alarms / series / scenes / fault_map / model_edit
│  ├─ services/        # model / alarm / series / scene / fault_map / model_edit
│  ├─ run.py           # 启动脚本
│  ├─ run.sh           # 启动脚本(自动选当前 conda/venv 解释器)
│  ├─ run_prod.sh      # 生产启动(APP_MODE=prod)
│  └─ requirements.txt
├─ frontend/           # Ant Design Vue 客户端
│  └─ src/
│     ├─ api/          # 接口封装(axios + token)
│     ├─ stores/       # pinia:model / parts / viewer / alarms / scenes / charts / faultParts
│     ├─ three/        # 纯 three.js 逻辑(Viewer.ts 等)
│     ├─ composables/  # useThreeViewer(Vue 与 three 的桥接)
│     ├─ components/   # TopBar / ViewerCanvas / 登录页 / 各卡片 / 弹窗
│     ├─ types/        # 类型定义
│     └─ styles/
├─ tools/              # CAD/GLB 处理脚本(split_glb / remove_nodes / scale_part)
├─ models/             # *.glb 模型
├─ data/               # scene_positions.csv、fault_part_map.csv
└─ docs/               # 建模与GLB转换指南.md

依赖

python3 -m pip install -r viewer/backend/requirements.txt
cd viewer/frontend && npm install

开发模式(前后端分离,热更新)

# 终端 1:服务端
python3 viewer/backend/run.py --reload         # http://127.0.0.1:5182
# 若 python3 被解析成系统解释器(zsh 命令缓存),改用:
bash viewer/backend/run.sh --reload

# 终端 2:客户端
cd viewer/frontend
npm run dev                                # http://127.0.0.1:5183

排查:which python3 若显示 /usr/bin/python3 之类的系统解释器,执行 hash -r(zsh)或重开终端; run.sh 会优先使用当前 conda/venv 环境($CONDA_PREFIX/bin/python),不受 PATH 缓存影响。

Vite 已把 /api、/models 代理到 http://127.0.0.1:5182(见 vite.config.ts)。

生产模式(单端口)

cd viewer/frontend && npm run build            # 产物:viewer/frontend/dist
bash viewer/backend/run_prod.sh --host 0.0.0.0 --port 5182   # 以 APP_MODE=prod 启动

FastAPI 托管 frontend/dist,非 /api、/models 的路径回退 index.html。

登录与运行模式

  • 默认 APP_MODE=test(测试模式):登录页会自动填入账号密码(来自 /api/auth-config),仍需点“登录”。
  • 生产:用 run_prod.sh(等价于设置 APP_MODE=prod),/api/auth-config 不再返回账号密码。
  • 数据接口需登录(Authorization: Bearer <token>);/models/* 模型文件为静态资源,不鉴权。
  • token 存于进程内存,服务重启后失效,需重新登录。

环境变量:

变量 默认值 说明
APP_MODE test test 测试模式;prod 生产模式
AUTH_USER aaabbb 登录账号
AUTH_PASSWORD Aa*147258&cd 登录密码
AUTH_TOKEN_TTL_SECONDS 43200 token 有效期(秒)
DB_HOST / DB_PORT / DB_USER / DB_PASSWORD / DB_NAME 读根目录 数据库.md 数据库连接

示例:

APP_MODE=prod AUTH_USER=admin AUTH_PASSWORD='***' bash viewer/backend/run_prod.sh --port 5182

接口

方法 路径 鉴权 说明
POST /api/login 否 登录,返回 token
POST /api/logout 否 退出
GET /api/auth-config 否 运行模式(测试模式含默认账号密码)
GET /api/models 是 可用模型名列表
GET /models/<file> 否 GLB / glTF 模型文件
POST /api/models/rename-part 是 重命名 GLB 部件标签(写回文件并同步故障↔部件映射)
GET /api/alarms 是 故障列表(筛选/分页,倒序)
GET /api/alarm-filters 是 故障列表筛选项
GET /api/pks-series 是 故障曲线原始序列(YSJ_5/10/11)
GET /api/recent-series 是 数据库最新 N 小时实时序列(默认 6h,供实时数据 tab)
GET /api/indicator 是 示功图 P-V(按机组+缸,取最近运行周期,盖侧/轴侧)
GET /api/scene-positions 是 场景位置列表
POST/PUT/DELETE /api/scene-positions[/id] 是 场景位置增/改/删
GET /api/fault-part-map 是 故障↔3D 部件对照表
POST /api/fault-part-map/scene 是 记录故障场景位置(贴合故障)

CAD 工具

# 按名字删除节点(世界变换烘焙,支持嵌套)
python3 viewer/tools/remove_nodes.py --input a.glb --output b.glb --name 三维立体
# 按查看器标签缩放零件
python3 viewer/tools/scale_part.py --input a.glb --label 区域_143 --width 3 --inplace
# 按平面拆分模块
python3 viewer/tools/split_glb.py --input a.glb --outdir viewer/models --prefix a --axis y --planes 16 32