# device-doc **Repository Path**: dengtijin_admin/device-doc ## Basic Information - **Project Name**: device-doc - **Description**: No description available - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-14 - **Last Updated**: 2026-08-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 医疗设备文档浏览系统(device-doc) 面向医疗设备集成/运维场景的文档管理平台:集中管理各厂家设备的接入信息(厂家、型号、通信方式、文档),提供 **Markdown 文档在线浏览**、**阅读量统计**、**多角色权限控制** 与 **操作日志审计**。支持一键打包(依赖内联 + 代码混淆)为可独立部署的目录。 ## 功能特性 - **设备管理**:408 台设备信息的增删改查,支持按厂家/型号/文档名/备注关键字搜索,按设备类型、通信方式筛选 - **阅读量统计**:设备详情自动累计阅读量,支持按 **阅读量 / 最新 / 设备类型** 排序 - **文档在线浏览**:Markdown 渲染为 HTML,图片自动转换可访问路径,支持点击放大 - **文档上传**:上传 `.md` 文件并关联图片(自动去重、防目录穿越),或从已有文档目录登记设备 - **多角色权限**:`admin`(全部权限)/ `editor`(设备与文档维护)/ `viewer`(只读浏览) - **用户管理**:账号增删改、角色分配、启停用、管理员重置密码、个人修改密码 - **操作日志**:登录、增删改设备/文档/用户等操作全程留痕,仅管理员可见 - **打包部署**:依赖打包 + 代码混淆,输出无需 `node_modules` 的独立运行目录 ## 技术栈 | 层面 | 技术 | | ---- | ---- | | 运行时 | Node.js ≥ 22.5.0(使用原生 `node:sqlite`,无需额外数据库服务) | | 后端 | Express 4 | | 数据库 | SQLite(WAL 模式,文件位于 `data/device-doc.db`) | | 认证 | JWT + bcryptjs | | 文档解析 | markdown-it(渲染)、mammoth(docx 转换) | | 文件上传 | multer | | 前端 | 原生 HTML / CSS / JavaScript(无构建依赖) | | 打包 | esbuild + javascript-obfuscator | ## 快速开始 ### 环境要求 - **Node.js ≥ 22.5.0**(需支持 `node:sqlite` 内置模块,推荐 Node 22 及以上) ### 安装与启动 ```bash # 1. 安装依赖 npm install # 2. 初始化数据(幂等):创建默认用户与设备记录,并自动登记 docs 目录下的文档 npm run init # 3. 启动服务 npm start # 或开发模式(文件变更自动重启) npm run dev ``` 启动后访问 ,默认端口可通过环境变量 `PORT` 修改。 ### 默认账号 | 账号 | 密码 | 角色 | | ---- | ---- | ---- | | admin | admin123 | 管理员(全部权限) | | editor | editor123 | 编辑(设备/文档维护) | | viewer | viewer123 | 访客(只读) | > 生产环境请务必修改默认密码。 ## 角色权限说明 | 功能 | admin | editor | viewer | | ---- | :---: | :---: | :---: | | 浏览设备与文档、阅读量统计 | ✅ | ✅ | ✅ | | 新增 / 修改 / 删除设备 | ✅ | ✅ | ❌ | | 上传 / 删除文档 | ✅ | ✅ | ❌ | | 用户管理 | ✅ | ❌ | ❌ | | 操作日志 | ✅ | ❌ | ❌ | ## 目录结构 ``` device-doc/ ├── server.js # 服务入口(Express 应用) ├── config.js # 端口 / JWT / 路径等配置 ├── db.js # SQLite 连接、建表、迁移与查询助手 ├── package.json ├── data/ # SQLite 数据库文件(自动创建) ├── docs/ # 文档库:每设备一个目录(厂家-型号),含 .md 与 images/ ├── public/ # 前端静态资源(index.html / login.html / js / css) ├── routes/ │ ├── auth.js # 登录、当前用户、修改密码 │ ├── users.js # 用户管理(仅 admin) │ ├── devices.js # 设备增删改查、筛选、排序、阅读量计数 │ ├── docs.js # 文档渲染、图片、上传、删除 │ └── logs.js # 操作日志(仅 admin) ├── middleware/ │ └── auth.js # JWT 校验与角色权限控制 ├── scripts/ # 初始化、文档转换、批量处理、打包等脚本 └── dist/ # 打包输出目录(npm run build 生成,可独立部署) ``` ## 常用命令 | 命令 | 说明 | | ---- | ---- | | `npm start` | 启动服务 | | `npm run dev` | 开发模式(`node --watch` 自动重启) | | `npm run init` | 初始化用户与设备数据(幂等,可重复执行) | | `npm run convert` | 将指定 docx 批量转换为 Markdown(详见 `scripts/convert-docx.js`) | | `npm run build` | 打包 + 混淆,输出独立运行目录 `dist/` | | `node scripts/batch-process.js` | 全量导入 docs 目录文档并登记设备 | | `node scripts/reset-devices.js` | 清理测试残留数据(慎用) | ## 打包与部署(dist) 执行 `npm run build` 后生成 `dist/` 目录,包含: - `app.js` —— 混淆后的单文件应用(esbuild 内联全部依赖 + javascript-obfuscator 混淆) - `data/`、`docs/`、`public/` —— 运行时资源 - `start.cmd`(Windows)/ `start.sh`(Linux/macOS)—— 启动脚本 部署方式: ```bash # 拷贝 dist 到目标机器(需已安装 Node.js ≥ 22.5.0) cd dist node app.js # Windows 可直接双击 start.cmd ``` `dist/` 无需 `node_modules`,可直接独立运行,源码中数据库口令、SQL 语句、密钥等敏感信息均已被混淆。 ## API 概览 所有接口均位于 `/api` 前缀下,除登录外都需要请求头 `Authorization: Bearer `。 | 方法 | 路径 | 说明 | 权限 | | ---- | ---- | ---- | ---- | | POST | `/api/auth/login` | 登录,返回 JWT | 公开 | | GET | `/api/auth/me` | 当前登录用户信息 | 登录 | | POST | `/api/auth/change-password` | 修改自己的密码 | 登录 | | GET | `/api/devices` | 设备列表,参数:`keyword` / `type` / `comm` / `sort`(`views` 默认、`new`、`type`) | 登录 | | GET | `/api/devices/types` | 设备类型 / 通信方式枚举 | 登录 | | GET | `/api/devices/:id` | 设备详情(阅读量 +1,`?noCount=1` 跳过计数) | 登录 | | POST | `/api/devices` | 新增设备 | admin/editor | | PUT | `/api/devices/:id` | 修改设备 | admin/editor | | DELETE | `/api/devices/:id` | 删除设备 | admin/editor | | GET | `/api/docs/available` | 可用文档列表(编辑设备时选择文档) | 登录 | | GET | `/api/docs/render/:docName` | 渲染 Markdown 文档为 HTML | 登录 | | GET | `/api/docs/image/:docName/*` | 文档图片静态访问 | 登录 | | POST | `/api/docs/upload` | 上传 .md 文档及图片(表单字段 `file`、`images`,单文件 ≤ 100MB) | admin/editor | | DELETE | `/api/docs/:docName` | 删除文档目录 | admin/editor | | GET/POST/PUT/DELETE | `/api/users` | 用户管理 | admin | | PUT | `/api/users/:id/password` | 管理员重置用户密码 | admin | | GET | `/api/logs` | 操作日志 | admin | ## 配置说明 `config.js` 中所有配置均支持通过环境变量覆盖: | 配置 | 环境变量 | 默认值 | | ---- | ---- | ---- | | 服务端口 | `PORT` | `3000` | | JWT 密钥 | `JWT_SECRET` | 开发默认值(生产必改) | | Token 有效期 | `JWT_EXPIRES` | `7d` | | 数据库路径 | `DB_PATH` | `./data/device-doc.db` | | 文档目录 | `DOCS_DIR` | `./docs` | | 前端目录 | `PUBLIC_DIR` | `./public` | ## 数据库说明 SQLite 单文件数据库(`data/device-doc.db`,WAL 模式),核心表: - `users` —— 用户(用户名、bcrypt 密码哈希、角色、状态) - `devices` —— 设备(厂家、类型、型号、通信方式、文档名、备注、**阅读量 `views`**) - `operation_logs` —— 操作日志 首次启动会自动建表;旧版本库缺少 `views` 字段时自动迁移(`ALTER TABLE` 后重建索引)。 ## 文档目录约定 `docs/` 下每个设备对应一个目录,命名建议为「厂家-型号」,目录内包含: ``` docs/理邦-EDANi15/ ├── EDANi15.md # 设备文档(Markdown) └── images/ # 文档内引用的图片 ``` 设备记录中的 `doc_name` 与目录名一一对应,点击设备即可在线浏览对应文档。