From 53d6ce60bf71f81e2c70124739643034fe657f41 Mon Sep 17 00:00:00 2001
From: zhang1106 <849185023@qq.com>
Date: Wed, 13 May 2026 16:04:02 +0800
Subject: [PATCH] =?UTF-8?q?fix(secureStorage):=20-=20=E7=B2=BE=E7=AE=80REA?=
=?UTF-8?q?DME.md=E6=96=87=E6=A1=A3=E5=86=85=E5=AE=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
DEPLOYMENT.md | 1160 ------------------------
README.md | 1310 ++++++++++-----------------
frontend/src/utils/secureStorage.js | 18 +
3 files changed, 512 insertions(+), 1976 deletions(-)
delete mode 100644 DEPLOYMENT.md
diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
deleted file mode 100644
index 5c80a17..0000000
--- a/DEPLOYMENT.md
+++ /dev/null
@@ -1,1160 +0,0 @@
-# IDC设备管理系统 - 部署指南
-
-本文档详细介绍IDC设备管理系统的多种部署方式,包括开发环境、测试环境、生产环境的配置方法。
-
----
-
-## 目录
-
-- [快速开始](#快速开始)
-- [环境要求](#环境要求)
-- [开发环境部署](#开发环境部署)
-- [测试环境部署](#测试环境部署)
-- [生产环境部署](#生产环境部署)
-- [数据库配置](#数据库配置)
-- [部署验证](#部署验证)
-- [更新升级](#更新升级)
-- [监控维护](#监控维护)
-- [常见问题](#常见问题)
-
----
-
-## 快速开始
-
-### 一键部署脚本(推荐)⭐
-
-我们提供了交互式安装脚本,自动完成环境检测、依赖安装、数据库初始化和服务启动。
-
-#### Linux 用户(支持自动安装 Node.js)
-
-```bash
-# 克隆项目(选择其一)
-# Gitee(国内推荐)
-git clone https://gitee.com/zhang96110/idc_assest.git
-# GitHub
-git clone https://github.com/gituib/idc_assest.git
-cd idc_assest
-
-# 方式1:使用 Shell 引导脚本(推荐,无需预装 Node.js)
-chmod +x install.sh && ./install.sh
-
-# 方式2:一键安装(从远程)
-curl -fsSL https://gitee.com/zhang96110/idc_assest/raw/main/install.sh | bash
-```
-
-**Shell 脚本功能:**
-- ✅ 自动检测 Linux 发行版(Ubuntu/Debian/CentOS/Arch)
-- ✅ 自动安装 Node.js 20.x(使用 NodeSource 或 nvm)
-- ✅ 自动安装系统依赖(git、curl 等)
-- ✅ 调用 install.js 完成后续安装
-
-#### Windows 用户
-
-```powershell
-# 克隆项目
-git clone https://gitee.com/zhang96110/idc_assest.git
-cd idc_assest
-
-# 运行安装脚本(需要先安装 Node.js)
-node install.js
-
-# 或使用 npm 命令
-npm run deploy
-```
-
-#### 非交互式安装(快速部署)
-
-```bash
-# 使用默认配置快速安装
-node install.js -y # 交互式安装
-
-# 指定数据库类型
-node install.js -y --db=mysql # 使用 MySQL
-node install.js -y --db=sqlite # 使用 SQLite(默认)
-
-# 指定端口
-node install.js -y --port=3000 # 后端端口 3000
-
-# 跳过前端构建
-node install.js -y --skip-build
-```
-
-**脚本功能:**
-- ✅ 自动检测 Node.js、npm、PM2、Nginx
-- ✅ **Linux 自动安装 Node.js**(Ubuntu/Debian/CentOS/Arch)
-- ✅ **MySQL 连接测试**(配置后自动验证)
-- ✅ **安装后健康检查**(验证服务是否正常)
-- ✅ 交互式配置数据库(SQLite/MySQL)
-- ✅ 交互式选择运行环境(development/production)
-- ✅ 交互式选择前端部署方式(Nginx/PM2 serve)
-- ✅ 自动安装项目依赖
-- ✅ 自动初始化数据库
-- ✅ 自动构建前端项目
-- ✅ 使用 PM2 启动和管理服务
-- ✅ 日志持久化保存
-
----
-
-## 环境要求
-
-### 基础运行环境
-
-| 项目 | 最低要求 | 推荐配置 |
-|------|----------|----------|
-| **操作系统** | Windows 10/11、macOS 12+、Linux (Ubuntu 20.04+/CentOS 8+) | 同最低要求 |
-| **Node.js** | ≥14.0.0 | 20.x LTS |
-| **npm** | ≥6.0.0 | 10.x |
-| **内存** | 4GB | 8GB+ |
-| **磁盘空间** | 2GB | 10GB+ |
-
-### 生产环境服务器要求
-
-#### 最低配置
-
-| 资源 | 要求 |
-|------|------|
-| **CPU** | 2 核心 |
-| **内存** | 4GB |
-| **磁盘** | 40GB SSD |
-| **带宽** | 5Mbps |
-
-#### 推荐配置
-
-| 资源 | 要求 |
-|------|------|
-| **CPU** | 4 核心+ |
-| **内存** | 8GB+ |
-| **磁盘** | 100GB SSD |
-| **带宽** | 10Mbps+ |
-
-### 软件依赖
-
-| 软件 | 版本要求 | 说明 |
-|------|----------|------|
-| **Node.js** | ≥14.0.0 (推荐 20.x LTS) | 运行时环境 |
-| **npm** | ≥6.0.0 | 包管理器 |
-| **PM2** | 5.x+ | 进程管理器(生产环境) |
-| **Nginx** | 1.18+ | Web服务器/反向代理 |
-| **MySQL** | 8.0+ | 数据库(生产环境,推荐) |
-| **SQLite** | -(开发/小型 | 数据库部署) |
-
-### 端口要求
-
-| 端口 | 用途 | 协议 |
-|------|------|------|
-| 8000 | 后端API服务 | HTTP |
-| 3000 | 前端开发服务 | HTTP |
-| 80 | Nginx HTTP | HTTP |
-| 443 | Nginx HTTPS | HTTPS |
-
----
-
-## 开发环境部署
-
-### 1. 环境准备
-
-#### Linux
-
-**Ubuntu/Debian:**
-```bash
-curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
-sudo apt-get install -y nodejs
-```
-
-**CentOS/RHEL/Fedora:**
-```bash
-curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
-sudo yum install -y nodejs
-```
-
-**使用 nvm(推荐开发者):**
-```bash
-curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
-nvm install 20
-nvm use 20
-```
-
-### 2. 克隆项目
-
-```bash
-# 从Gitee克隆(国内访问更快)
-git clone https://gitee.com/zhang96110/idc_assest.git
-
-# 或从GitHub克隆
-git clone https://github.com/gituib/idc_assest.git
-
-cd idc_assest
-```
-
-### 3. 安装依赖
-
-```bash
-# 安装后端依赖
-cd backend
-npm install
-
-# 安装前端依赖(新终端)
-cd ../frontend
-npm install
-```
-
-### 4. 配置环境变量
-
-```bash
-cd ../backend
-cp .env.example .env
-```
-
-编辑 `.env` 文件(开发环境使用默认SQLite配置即可):
-
-```env
-# 开发环境配置
-NODE_ENV=development
-PORT=8000
-DB_TYPE=sqlite
-DB_PATH=./idc_management.db
-
-# JWT配置(开发环境可使用简单密钥)
-JWT_SECRET=dev_secret_key_change_in_production
-JWT_EXPIRES_IN=7d
-```
-
-### 5. 初始化数据库
-
-```bash
-node scripts/init-database.js
-```
-
-### 6. 启动服务
-
-**同时启动前后端(推荐):**
-```bash
-# 项目根目录
-npm start
-```
-
-**分别启动:**
-```bash
-# 终端1 - 启动后端(端口8000)
-cd backend
-npm run dev
-
-# 终端2 - 启动前端(端口3000)
-cd frontend
-npm run dev
-```
-
-### 7. 访问开发环境
-
-| 服务 | 地址 |
-|------|------|
-| 前端应用 | http://localhost:3000 |
-| 后端API | http://localhost:8000/api |
-| 健康检查 | http://localhost:8000/health |
-
-### 8. 开发命令
-
-```bash
-# 项目根目录命令
-npm start # 同时启动前后端
-npm run start:backend # 仅启动后端
-npm run start:frontend # 仅启动前端
-npm run install:all # 安装所有依赖
-
-# 后端命令
-cd backend
-npm run dev # 开发模式启动(热重载)
-npm start # 生产模式启动
-
-# 前端命令
-cd frontend
-npm run dev # 开发模式启动
-npm run build # 构建生产版本
-npm run preview # 预览生产版本
-```
-
----
-
-## 测试环境部署
-
-### 1. 服务器准备
-
-测试环境配置要求:
-
-| 项目 | 配置 |
-|------|------|
-| **操作系统** | Ubuntu 20.04 LTS / CentOS 8 |
-| **Node.js** | 20.x LTS |
-| **内存** | 4GB |
-| **磁盘** | 20GB SSD |
-| **数据库** | MySQL 8.0(与生产一致) |
-
-### 2. 配置数据库
-
-```bash
-# 安装MySQL
-sudo apt update
-sudo apt install -y mysql-server
-
-# 启动MySQL
-sudo systemctl start mysql
-sudo systemctl enable mysql
-
-# 创建数据库和用户
-sudo mysql
-```
-
-```sql
-CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-CREATE USER 'idc_test'@'localhost' IDENTIFIED BY 'test_password';
-GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_test'@'localhost';
-FLUSH PRIVILEGES;
-EXIT;
-```
-
-### 3. 配置环境变量
-
-```bash
-cd backend
-cp .env.example .env
-```
-
-编辑 `.env` 文件:
-
-```env
-NODE_ENV=test
-PORT=8000
-DB_TYPE=mysql
-MYSQL_HOST=localhost
-MYSQL_PORT=3306
-MYSQL_USERNAME=idc_test
-MYSQL_PASSWORD=test_password
-MYSQL_DATABASE=idc_management
-JWT_SECRET=test_jwt_secret_key
-JWT_EXPIRES_IN=24h
-```
-
-### 4. 安装依赖并初始化
-
-```bash
-# 安装后端依赖
-cd backend
-npm install
-
-# 初始化数据库
-node scripts/init-database.js
-
-# 安装前端依赖并构建
-cd ../frontend
-npm install
-npm run build
-```
-
-### 5. 使用PM2启动服务
-
-```bash
-# 安装PM2
-npm install -g pm2
-
-# 启动后端服务
-cd ../backend
-pm2 start server.js --name "idc-test-backend" --env test
-
-# 启动前端静态服务
-cd ../frontend
-pm2 serve --name "idc-test-frontend" -s dist -l 3000
-
-# 保存PM2配置
-pm2 save
-
-# 配置开机自启
-pm2 startup
-```
-
-### 6. 测试验证
-
-```bash
-# 测试后端API
-curl http://localhost:8000/health
-
-# 测试前端
-curl http://localhost:3000
-```
-
----
-
-## 生产环境部署
-
-### 1. 服务器要求
-
-#### 硬件要求
-
-| 规模 | CPU | 内存 | 磁盘 |
-|------|-----|------|------|
-| 小型(<100设备) | 2核心 | 4GB | 40GB |
-| 中型(100-500设备) | 4核心 | 8GB | 80GB |
-| 大型(>500设备) | 8核心+ | 16GB+ | 100GB+ |
-
-#### 软件要求
-
-| 软件 | 版本 | 说明 |
-|------|------|------|
-| 操作系统 | Ubuntu 20.04+ / CentOS 8+ | 推荐 Ubuntu 22.04 LTS |
-| Node.js | 20.x LTS | 运行时环境 |
-| MySQL | 8.0+ | 数据库 |
-| Nginx | 1.18+ | 反向代理/静态文件 |
-| PM2 | 5.x+ | 进程管理 |
-
-### 2. 系统配置
-
-#### 创建部署用户(非root)
-
-```bash
-# 创建用户
-sudo adduser idcadmin
-
-# 赋予sudo权限
-sudo usermod -aG sudo idcadmin
-
-# 切换到部署用户
-sudo su - idcadmin
-```
-
-#### 配置防火墙
-
-```bash
-# Ubuntu
-sudo ufw allow 22 # SSH
-sudo ufw allow 80 # HTTP
-sudo ufw allow 443 # HTTPS
-sudo ufw enable
-
-# CentOS
-sudo firewall-cmd --permanent --add-port=22/tcp
-sudo firewall-cmd --permanent --add-port=80/tcp
-sudo firewall-cmd --permanent --add-port=443/tcp
-sudo firewall-cmd --reload
-```
-
-### 3. 安装软件
-
-#### 安装Node.js
-
-```bash
-# Ubuntu/Debian
-curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
-sudo apt-get install -y nodejs
-
-# 安装PM2
-sudo npm install -g pm2
-```
-
-#### 安装MySQL
-
-```bash
-# Ubuntu
-sudo apt install -y mysql-server
-
-sudo apt update
-# 启动并配置
-sudo systemctl start mysql
-sudo systemctl enable mysql
-```
-
-#### 安装Nginx
-
-```bash
-# Ubuntu
-sudo apt install -y nginx
-sudo systemctl start nginx
-sudo systemctl enable nginx
-```
-
-### 4. 配置数据库
-
-```bash
-sudo mysql
-```
-
-```sql
--- 创建数据库
-CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- 创建用户(生产环境使用强密码)
-CREATE USER 'idc_prod'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD_HERE';
-GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_prod'@'localhost';
-FLUSH PRIVILEGES;
-
-EXIT;
-```
-
-### 5. 部署项目
-
-#### 克隆项目
-
-```bash
-cd /var/www
-# 选择其一
-# Gitee(国内推荐)
-sudo git clone https://gitee.com/zhang96110/idc_assest.git
-# GitHub
-sudo git clone https://github.com/gituib/idc_assest.git
-sudo chown -R idcadmin:idcadmin idc_assest
-```
-
-#### 配置环境变量
-
-```bash
-cd /var/www/idc_assest/backend
-cp .env.example .env
-nano .env
-```
-
-编辑 `.env` 文件:
-
-```env
-# 生产环境配置
-NODE_ENV=production
-PORT=8000
-DB_TYPE=mysql
-MYSQL_HOST=localhost
-MYSQL_PORT=3306
-MYSQL_USERNAME=idc_prod
-MYSQL_PASSWORD=YOUR_STRONG_PASSWORD_HERE
-MYSQL_DATABASE=idc_management
-
-# JWT配置(使用强随机密钥)
-JWT_SECRET=$(openssl rand -base64 32)
-JWT_EXPIRES_IN=24h
-
-# 日志配置
-LOG_LEVEL=info
-```
-
-### 6. 安装依赖
-
-```bash
-# 安装后端依赖
-cd /var/www/idc_assest/backend
-npm install --production
-
-# 安装前端依赖并构建
-cd ../frontend
-npm install
-npm run build
-```
-
-### 7. 初始化数据库
-
-```bash
-cd ../backend
-node scripts/init-database.js
-```
-
-### 8. 配置PM2
-
-```bash
-# 创建PM2配置文件
-nano /var/www/idc_assest/ecosystem.config.js
-```
-
-```javascript
-module.exports = {
- apps: [
- {
- name: 'idc-backend',
- script: './server.js',
- cwd: '/var/www/idc_assest/backend',
- instances: 1,
- exec_mode: 'fork',
- env: {
- NODE_ENV: 'production',
- PORT: 8000
- },
- max_memory_restart: '1G',
- log_file: '/var/log/idc/combined.log',
- out_file: '/var/log/idc/out.log',
- error_file: '/var/log/idc/error.log',
- log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
- merge_logs: true,
- autorestart: true,
- watch: false
- }
- ]
-};
-```
-
-```bash
-# 创建日志目录
-sudo mkdir -p /var/log/idc
-sudo chown -R idcadmin:idcadmin /var/log/idc
-
-# 启动服务
-cd /var/www/idc_assest
-pm2 start ecosystem.config.js
-pm2 save
-pm2 startup
-```
-
-### 9. 配置Nginx
-
-```bash
-sudo nano /etc/nginx/sites-available/idc
-```
-
-```nginx
-upstream idc_backend {
- server 127.0.0.1:8000;
-}
-
-server {
- listen 80;
- server_name your-domain.com; # 替换为实际域名
-
- # 前端静态文件
- root /var/www/idc_assest/frontend/dist;
- index index.html;
-
- # Gzip压缩
- gzip on;
- gzip_vary on;
- gzip_min_length 1024;
- gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
-
- # 静态资源缓存
- location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
- expires 1y;
- add_header Cache-Control "public, immutable";
- }
-
- # 前端路由支持(SPA)
- location / {
- try_files $uri $uri/ /index.html;
- }
-
- # API代理
- location /api {
- proxy_pass http://idc_backend;
- proxy_http_version 1.1;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- proxy_connect_timeout 60s;
- proxy_send_timeout 60s;
- proxy_read_timeout 60s;
- }
-
- # 文件上传代理
- location /uploads {
- proxy_pass http://idc_backend;
- proxy_http_version 1.1;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- client_max_body_size 50M;
- }
-
- # 健康检查
- location /health {
- proxy_pass http://idc_backend/health;
- }
-
- # Swagger API文档(v2.0.0新增)
- location /api-docs {
- proxy_pass http://idc_backend/api-docs;
- proxy_http_version 1.1;
- proxy_set_header Host $host;
- }
-
- # SSE 备份恢复进度推送(v2.0.0新增)
- location ~ ^/api/backup/restore-progress/ {
- proxy_pass http://idc_backend;
- proxy_http_version 1.1;
- proxy_set_header Connection '';
- proxy_buffering off;
- proxy_cache off;
- chunked_transfer_encoding off;
- }
-}
-```
-
-```bash
-# 启用配置
-sudo ln -s /etc/nginx/sites-available/idc /etc/nginx/sites-enabled/
-sudo rm -f /etc/nginx/sites-enabled/default
-sudo nginx -t
-sudo systemctl reload nginx
-```
-
-### 10. 配置SSL证书(可选)
-
-使用 Let's Encrypt 免费证书:
-
-```bash
-# 安装Certbot
-sudo apt install -y certbot python3-certbot-nginx
-
-# 获取证书
-sudo certbot --nginx -d your-domain.com
-
-# 自动续期测试
-sudo certbot renew --dry-run
-```
-
----
-
-## 数据库配置
-
-### SQLite(开发环境/小规模)
-
-- 默认配置,无需额外设置
-- 数据库文件:`backend/idc_management.db`
-- 优点:零配置,便携
-- 缺点:不适合高并发,单文件限制
-
-### MySQL(生产环境推荐)
-
-#### 创建数据库
-
-```sql
-CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-```
-
-#### 配置优化
-
-```ini
-# my.cnf 或 my.ini
-[mysqld]
-character-set-server=utf8mb4
-collation-server=utf8mb4_unicode_ci
-max_connections=200
-innodb_buffer_pool_size=1G
-```
-
-### 数据备份
-
-#### 系统内置备份(推荐)
-
-v2.0.0 新增了内置备份管理功能,支持手动备份、自动定时备份和远端备份。
-
-1. **手动备份**:在系统管理 → 备份管理中点击「创建备份」
-2. **自动备份**:在系统管理 → 自动备份中配置 Cron 表达式定时备份
-3. **远端备份**:在系统管理 → 远端备份中配置 FTP/SFTP/WebDAV/SMB 协议上传
-
-#### SQLite备份
-
-```bash
-# 手动备份
-cp backend/idc_management.db backup/database_$(date +%Y%m%d).db
-```
-
-#### MySQL备份
-
-```bash
-# 手动备份
-mysqldump -u idc_prod -p idc_management > backup/database_$(date +%Y%m%d).sql
-
-# 自动备份脚本
-#!/bin/bash
-BACKUP_DIR="/var/backups/idc"
-DATE=$(date +%Y%m%d_%H%M%S)
-mkdir -p $BACKUP_DIR
-mysqldump -u idc_prod -pYourPassword idc_management > "$BACKUP_DIR/database_$DATE.sql"
-gzip "$BACKUP_DIR/database_$DATE.sql"
-
-# 清理30天前的备份
-find $BACKUP_DIR -name "database_*.gz" -mtime +30 -delete
-```
-
-添加到crontab:
-```bash
-crontab -e
-# 每天凌晨2点执行
-0 2 * * * /path/to/backup_script.sh
-```
-
----
-
-## 部署验证
-
-### 1. 服务状态检查
-
-```bash
-# PM2服务状态
-pm2 status
-
-# Nginx状态
-sudo systemctl status nginx
-
-# MySQL状态
-sudo systemctl status mysql
-```
-
-### 2. 接口验证
-
-```bash
-# 健康检查
-curl http://localhost:8000/health
-
-# API测试
-curl http://localhost:8000/api/rooms
-
-# Swagger API文档(v2.0.0新增)
-# 浏览器访问 http://localhost:8000/api-docs
-
-# 上传接口测试
-curl -X POST http://localhost:8000/api/auth/login \
- -H "Content-Type: application/json" \
- -d '{"username":"admin","password":"admin123"}'
-```
-
-### 3. 日志检查
-
-```bash
-# PM2日志
-pm2 logs idc-backend
-
-# 错误日志
-pm2 logs idc-backend --err
-
-# Nginx错误日志
-sudo tail -f /var/log/nginx/error.log
-```
-
-### 4. 性能测试
-
-```bash
-# 使用curl测试响应时间
-time curl -o /dev/null -s -w "%{http_code}\n" http://localhost:8000/health
-```
-
----
-
-## 更新升级
-
-### 方式一:一键更新脚本(推荐)⭐
-
-```bash
-# 交互式更新
-node update.js
-
-# 查看帮助
-node update.js --help
-
-# 模拟运行(不执行实际操作)
-node update.js --dry-run
-
-# 跳过某些步骤
-node update.js --skip-git # 跳过 Git 拉取
-node update.js --skip-backup # 跳过数据库备份
-node update.js --skip-migrate # 跳过数据库迁移
-node update.js --skip-build # 跳过前端构建
-node update.js --skip-deps # 跳过依赖安装
-node update.js --skip-restart # 跳过服务重启
-
-# 强制执行(忽略锁文件)
-node update.js --force
-```
-
-**智能检测功能:**
-- ✅ **依赖安装智能跳过** - 检测 package.json 变化,无变化则跳过
-- ✅ **前端构建智能跳过** - 检测源码变化,无变化则跳过
-- ✅ **数据库自动备份** - 更新前自动备份,支持回滚
-- ✅ **健康检查验证** - 更新后验证服务是否正常
-- ✅ **日志持久化** - 更新日志保存到 `logs/update_*.log`
-- ✅ **锁机制** - 防止多个更新进程同时运行
-
-### 方式二:手动更新
-
-#### v2.0.0 升级注意事项
-
-从 1.x 版本升级到 2.0.0 时,请注意以下事项:
-
-1. **数据库迁移**:新增了 BackupLog、OperationLog、Warehouse、Business、DeviceBusiness、ConsumableLogArchive 等数据表,务必运行迁移脚本
-2. **JWT 安全增强**:建议更新生产环境的 JWT_SECRET 配置为强随机密钥
-3. **新增依赖**:后端新增了 basic-ftp、ssh2-sftp-client、webdav、smb2、node-cron、swagger-jsdoc、swagger-ui-express 等依赖
-4. **3D 引擎升级**:Three.js 从 0.160.0 升级到 0.183.2,请确认浏览器兼容性
-5. **Swagger 文档**:新增交互式 API 文档,可通过 `/api-docs` 访问
-6. **备份目录**:确保 `backend/backups/` 目录存在且有写入权限
-
-#### 1. 备份数据
-
-```bash
-# 备份数据库
-mysqldump -u idc_prod -p idc_management > /var/backups/idc/database_backup_$(date +%Y%m%d).sql
-
-# 或备份SQLite
-cp backend/idc_management.db /var/backups/idc/
-```
-
-#### 2. 拉取最新代码
-
-```bash
-cd /var/www/idc_assest
-git pull origin main
-```
-
-#### 3. 更新依赖
-
-```bash
-# 更新后端依赖
-cd backend
-npm install
-
-# 更新前端依赖并构建
-cd ../frontend
-npm install
-npm run build
-```
-
-#### 4. 运行数据库迁移(如有)
-
-```bash
-cd ../backend
-node scripts/migrate-all.js
-```
-
-#### 5. 重启服务
-
-```bash
-pm2 restart idc-backend
-sudo nginx -t && sudo nginx -s reload
-```
-
----
-
-## 监控维护
-
-### 服务管理命令
-
-```bash
-# PM2 管理
-pm2 status # 查看服务状态
-pm2 logs idc-backend # 查看后端日志
-pm2 logs idc-backend --err # 查看错误日志
-pm2 restart idc-backend # 重启后端服务
-pm2 stop idc-backend # 停止后端服务
-pm2 delete idc-backend # 删除后端服务
-pm2 save # 保存当前进程列表
-pm2 startup # 配置开机自启
-pm2 monit # 实时监控
-
-# Nginx 管理
-sudo nginx -t # 测试配置
-sudo systemctl restart nginx # 重启服务
-sudo systemctl status nginx # 查看状态
-```
-
-### 性能监控
-
-#### PM2配置(`ecosystem.config.js`)
-
-```javascript
-module.exports = {
- apps: [{
- name: 'idc-backend',
- script: './server.js',
- cwd: './backend',
- instances: 1,
- exec_mode: 'fork',
- max_memory_restart: '1G',
- autorestart: true,
- env: {
- NODE_ENV: 'production'
- },
- log_file: './logs/combined.log',
- out_file: './logs/out.log',
- error_file: './logs/error.log',
- log_date_format: 'YYYY-MM-DD HH:mm:ss Z'
- }]
-};
-```
-
----
-
-## 卸载系统
-
-### 方式一:一键卸载脚本(推荐)⭐
-
-```bash
-# 交互式卸载
-node uninstall.js
-
-# 查看帮助
-node uninstall.js --help
-
-# 强制卸载(无需确认)
-node uninstall.js --force
-
-# 卸载前自动备份
-node uninstall.js --backup
-
-# 跳过某些步骤
-node uninstall.js --skip-db # 跳过数据库删除
-node uninstall.js --skip-deps # 跳过依赖删除
-```
-
-**卸载功能:**
-- ✅ 停止并删除 PM2 服务
-- ✅ 清理 Nginx 配置
-- ✅ 删除生成的配置文件
-- ✅ 可选删除数据库文件
-- ✅ 可选删除 node_modules
-- ✅ 卸载前自动备份
-- ✅ 日志持久化保存
-
-### 方式二:手动卸载
-
-```bash
-# 1. 停止服务
-pm2 stop idc-backend
-pm2 delete idc-backend
-pm2 save
-
-# 2. 删除配置文件
-rm backend/.env
-rm deploy/ecosystem.config.js
-rm deploy/nginx-idc.conf
-
-# 3. 删除数据库(可选)
-rm backend/idc_management.db
-
-# 4. 删除依赖(可选)
-rm -rf backend/node_modules
-rm -rf frontend/node_modules
-rm -rf frontend/dist
-```
-
----
-
-## 常见问题
-
-### 端口冲突
-
-```bash
-# 检查端口占用
-# Linux
-netstat -tulpn | grep :8000
-
-# Windows
-netstat -ano | findstr :8000
-
-# 修改端口
-# 编辑 backend/.env 文件
-PORT=8001
-```
-
-### 依赖安装失败
-
-```bash
-# 清理缓存
-npm cache clean --force
-
-# 删除 node_modules 重新安装
-rm -rf node_modules package-lock.json
-npm install
-```
-
-### 数据库连接失败
-
-**MySQL:**
-- 检查服务状态:`sudo systemctl status mysql`
-- 验证连接参数(主机、端口、用户名、密码)
-- 确认数据库已创建
-- 检查防火墙设置
-- 确认用户权限:`SHOW GRANTS FOR 'idc_prod'@'localhost'`
-
-### 前端构建失败
-
-```bash
-# 检查 Node.js 版本
-node -v
-
-# 清理并重新构建
-cd frontend
-rm -rf node_modules dist
-npm install
-npm run build
-```
-
-### 权限问题
-
-```bash
-# 修复文件权限
-sudo chown -R $(whoami):$(whoami) /var/www/idc_assest
-
-# 上传目录权限
-sudo chmod -R 777 backend/uploads
-```
-
-### 内存不足
-
-```bash
-# 增加 Node.js 内存限制
-node --max-old-space-size=4096 server.js
-
-# PM2 配置
-pm2 start server.js --name "idc-backend" --node-args="--max-old-space-size=4096"
-```
-
-### Nginx 502 Bad Gateway
-
-1. 检查后端服务是否运行:`pm2 status`
-2. 检查后端端口是否监听:`netstat -tulpn | grep 8000`
-3. 检查Nginx配置:`nginx -t`
-4. 查看错误日志:`tail -f /var/log/nginx/error.log`
-
-### SSL证书问题
-
-```bash
-# 检查证书是否过期
-sudo certbot certificates
-
-# 手动续期
-sudo certbot renew
-
-# 查看证书详情
-sudo certbot certificates
-```
-
----
-
-## 项目结构
-
-```
-idc_assest/
-├── backend/ # 后端服务
-│ ├── middleware/ # 中间件(认证、验证)
-│ ├── models/ # 数据模型(Sequelize)
-│ ├── routes/ # API路由
-│ ├── scripts/ # 数据库脚本
-│ ├── uploads/ # 文件上传目录
-│ ├── validation/ # 数据验证Schema
-│ ├── server.js # 服务入口
-│ └── package.json
-├── frontend/ # 前端应用
-│ ├── src/
-│ │ ├── api/ # API接口
-│ │ ├── components/ # 组件
-│ │ ├── pages/ # 页面
-│ │ └── utils/ # 工具函数
-│ ├── dist/ # 构建输出
-│ └── package.json
-├── docs/ # 项目文档
-│ ├── api/ # 接口文档
-│ └── images/ # 文档图片
-├── install.sh # Linux 安装引导脚本(Shell)⭐
-├── install.js # 交互式安装脚本(Node.js)⭐
-├── update.js # 一键更新脚本 ⭐
-├── uninstall.js # 卸载脚本
-├── check.js # 环境检查脚本
-├── modify.js # 配置修改脚本
-├── package.json
-├── README.md # 项目说明
-├── CHANGELOG.md # 版本记录
-└── DEPLOYMENT.md # 本文件
-```
-
----
-
-**⭐ 如果这个部署指南对您有帮助,请给我们一个Star!**
diff --git a/README.md b/README.md
index 9144e03..c041910 100644
--- a/README.md
+++ b/README.md
@@ -1,185 +1,116 @@
-# IDC设备资产系统
+# IDC设备资产管理系统
[](LICENSE)
[](https://nodejs.org/)
[](https://react.dev/)
-[]()
-一个现代化的数据中心(IDC)设备管理系统,提供机房、机柜、设备的全生命周期管理,具备3D可视化展示功能。
+现代化数据中心(IDC)设备管理系统,提供机房、机柜、设备的全生命周期管理,具备 3D 可视化展示功能。
-## 代码仓库
-
-- **GitHub**: https://github.com/gituib/idc_assest
-- **Gitee**: https://gitee.com/zhang96110/idc_assest
+**GitHub**: https://github.com/gituib/idc_assest
+**Gitee**: https://gitee.com/zhang96110/idc_assest
---
-## 系统概述
+## 目录
-### 核心功能
+- [功能特性](#功能特性)
+- [快速开始](#快速开始)
+ - [Linux 一键部署](#linux-一键部署)
+ - [Windows 部署](#windows-部署)
+ - [手动安装](#手动安装)
+- [环境要求](#环境要求)
+- [脚本命令参考](#脚本命令参考)
+ - [install.js - 安装脚本](#installjs---安装脚本)
+ - [update.js - 更新脚本](#updatejs---更新脚本)
+ - [uninstall.js - 卸载脚本](#uninstalljs---卸载脚本)
+- [部署指南](#部署指南)
+ - [生产环境](#生产环境)
+ - [Nginx 配置](#nginx-配置)
+- [系统维护](#系统维护)
+ - [服务管理](#服务管理)
+ - [日志查看](#日志查看)
+ - [数据备份](#数据备份)
+- [常见问题](#常见问题)
+- [项目结构](#项目结构)
+- [API 文档](#api-文档)
+- [贡献指南](#贡献指南)
+- [许可证](#许可证)
-| 功能模块 | 描述 |
-|---------|------|
-| **机房管理** | 多机房管理,支持位置、面积、负责人等详细信息,机房平面图可视化 |
-| **机柜管理** | 机柜增删改查,容量统计,3D可视化展示,批量导入/导出 |
-| **设备管理** | 服务器、网络设备、存储设备全生命周期管理,支持批量导入/导出,导入预览,自定义字段搜索 |
-| **端口管理** | 设备端口配置与管理,支持网卡绑定,批量导入/导出,端口命名模板 |
-| **线缆管理** | 机柜间线缆连接管理,可视化追踪,线缆向导 |
-| **网络拓扑** | 网络拓扑可视化展示(ReactFlow),交换机/设备拓扑查询,自定义节点 |
-| **工单管理** | 故障报修、维护工单全流程管理,支持自定义字段、故障分类、工单评价、导出 |
-| **耗材管理** | 耗材库存、领用记录、统计报表管理,支持SN序列号追踪、批量导入、日志归档 |
-| **盘点管理** | 盘点计划制定与执行,盘点任务分配与结果记录,暂存设备管理 |
-| **空闲设备** | 空闲设备管理,支持设备转入/激活空闲状态 |
-| **仓库管理** | 仓库信息管理,支持仓库与耗材关联 |
-| **数据看板** | 实时监控数据中心整体运行状态,设备趋势图表,功率监控 |
-| **3D可视化** | 三维机柜可视化展示,支持设备悬停详情、LOD优化、性能模式、U位标识 |
-| **机房平面图** | Canvas渲染机房平面图,机柜位置拖拽编辑,热力图,小地图导航 |
-| **操作日志** | 操作日志审计,支持按模块/类型/时间筛选,操作统计 |
-| **备份管理** | 数据库备份与恢复,自动定时备份,多协议远程备份(FTP/SFTP/WebDAV/SMB) |
-| **统计分析** | 设备、工单、耗材等多维度统计报表,用户增长趋势分析 |
-| **系统配置** | 设备字段、工单字段自定义管理,背景配置,系统设置导入/导出 |
-| **用户权限** | 基于角色的权限控制(RBAC),用户审核机制 |
-| **API文档** | Swagger交互式API文档,支持在线调试 |
+---
+
+## 功能特性
+
+| 模块 | 描述 |
+|------|------|
+| 机房管理 | 多机房管理,平面图可视化 |
+| 机柜管理 | 机柜增删改查,3D 可视化,批量导入导出 |
+| 设备管理 | 全生命周期管理,自定义字段,批量导入导出 |
+| 端口管理 | 设备端口配置,网卡绑定,批量管理 |
+| 线缆管理 | 线缆连接管理,可视化追踪 |
+| 网络拓扑 | 拓扑可视化展示(ReactFlow) |
+| 工单管理 | 故障报修,维护工单全流程 |
+| 耗材管理 | 库存管理,SN 序列号追踪,日志归档 |
+| 盘点管理 | 盘点计划与执行,待审核设备 |
+| 空闲设备 | 空闲设备转入/激活 |
+| 数据看板 | 实时监控,功率监控,趋势图表 |
+| 3D 可视化 | 三维机柜展示,LOD 优化 |
+| 机房平面图 | Canvas 渲染,拖拽编辑 |
+| 操作日志 | 审计追踪,统计分析 |
+| 备份管理 | 本地/远程备份,自动定时 |
+| 系统配置 | 自定义字段,背景配置 |
+| 用户权限 | RBAC 角色控制 |
+| API 文档 | Swagger 交互式文档 |
### 项目截图
+
+点击展开查看截图
+

*数据看板 - 实时监控数据中心运行状态*
-
-*3D机柜可视化 - 三维展示机柜设备布局*
+
+*3D 机柜可视化 - 三维展示机柜设备布局*

*机房管理 - 多机房分类管理*
-
-*机柜管理 - 机柜容量与设备布局管理*
-

*设备管理 - 设备全生命周期管理*
-
-*耗材管理 - 耗材库存与领用管理*
-

*工单管理 - 故障报修与维护工单处理*

*数据备份 - 数据库备份与恢复管理*
----
-
-## 技术栈
-
-### 前端技术栈
-
-| 技术 | 版本 | 用途 |
-|------|------|------|
-| React | 18.2.0 | 前端框架(用户界面开发库) |
-| Vite | 4.4.9 | 构建工具(前端项目打包工具) |
-| Ant Design | 5.8.6 | UI组件库(企业级设计系统) |
-| Three.js | 0.183.2 | 3D渲染引擎 |
-| @react-three/fiber | 8.18.0 | React Three.js 集成 |
-| @react-three/drei | 9.122.0 | Three.js 辅助组件库 |
-| React Router | 6.15.0 | 路由管理 |
-| Axios | 1.13.6 | HTTP客户端 |
-| Day.js | 1.11.19 | 日期处理库 |
-| SheetJS (xlsx) | 0.18.5 | Excel文件处理 |
-| PapaParse | 5.5.3 | CSV文件解析 |
-| Framer Motion | 12.34.0 | 动画库 |
-| Styled Components | 6.3.9 | CSS-in-JS 样式方案 |
-| SWR | 2.4.0 | 数据请求与缓存 |
-| @ant-design/icons | 6.1.0 | 图标库 |
-| Vitest | 4.0.16 | 前端测试框架 |
-
-### 后端技术栈
-
-| 技术 | 版本 | 用途 |
-|------|------|------|
-| Node.js | ≥14.0.0(推荐 20.x LTS) | 运行环境 |
-| Express | 4.18.2 | Web框架(后端服务框架) |
-| Sequelize | 6.37.8 | ORM框架(数据库对象关系映射) |
-| SQLite | 5.1.7 | 嵌入式数据库(开发/小规模) |
-| MySQL | 8.0+ | 关系型数据库(生产环境) |
-| JWT | 9.0.3 | 身份认证 |
-| bcryptjs | 3.0.3 | 密码加密 |
-| Winston | 3.19.0 | 日志管理 |
-| Winston Daily Rotate File | 5.0.0 | 日志文件轮转 |
-| Joi | 18.0.2 | 数据验证 |
-| Jest | 30.2.0 | 测试框架 |
-| Multer | 2.1.1 | 文件上传处理 |
-| Express File Upload | 1.5.2 | 文件上传中间件 |
-| Node Cron | 4.2.1 | 定时任务调度 |
-| Axios | 1.13.6 | HTTP客户端 |
-| CSV Parser | 3.2.0 | CSV文件解析 |
-| CSV Writer | 1.6.0 | CSV文件生成 |
-| SheetJS (xlsx) | 0.18.5 | Excel文件处理 |
-| Day.js | 1.11.19 | 日期处理库 |
-| Basic FTP | 5.0.3 | FTP协议支持 |
-| SSH2 SFTP Client | 9.1.0 | SFTP协议支持 |
-| WebDAV | 5.3.1 | WebDAV协议支持 |
-| SMB2 | 0.2.2 | SMB/CIFS协议支持 |
-| MySQL2 | 3.19.1 | MySQL数据库驱动 |
-| Nodemon | 3.0.1 | 开发环境自动重启 |
-| Supertest | 7.1.4 | API测试工具 |
-
----
-
-## 环境要求
-
-### 运行环境
-
-| 项目 | 最低要求 | 推荐配置 |
-|------|----------|----------|
-| **操作系统** | Windows 10/11、macOS 12+、Linux (Ubuntu 20.04+/CentOS 8+) | 同最低要求 |
-| **Node.js** | ≥14.0.0 | 20.x LTS |
-| **npm** | ≥6.0.0 | 10.x |
-| **内存** | 4GB | 8GB+ |
-| **磁盘空间** | 2GB | 10GB+ |
-
-### 生产环境额外要求
-
-| 项目 | 要求 |
-|------|------|
-| **数据库** | MySQL 8.0+ (推荐) 或 SQLite (小型部署) |
-| **Web服务器** | Nginx 1.18+ (反向代理/静态文件服务) |
-| **进程管理** | PM2 5.x+ |
-| **SSL证书** | Let's Encrypt (可选) |
-
-### 开发环境要求
-
-| 项目 | 要求 |
-|------|------|
-| **代码编辑器** | VS Code (推荐) |
-| **浏览器** | Chrome 90+、Firefox 90+、Safari 14+、Edge 90+ |
-| **Git** | 2.30+ |
+
---
## 快速开始
-### 方式一:一键部署脚本(推荐)⭐
-
-我们提供了交互式安装脚本,自动完成所有部署步骤。
-
-#### Linux 用户(支持自动安装 Node.js)
+### Linux 一键部署
```bash
-# 克隆项目(选择其一)
-# Gitee(国内推荐)
+# 克隆项目
git clone https://gitee.com/zhang96110/idc_assest.git
-# GitHub
-git clone https://github.com/gituib/idc_assest.git
cd idc_assest
-# 方式1:使用 Shell 引导脚本(推荐,无需预装 Node.js)
-chmod +x install.sh && ./install.sh
+# 运行安装脚本(自动安装 Node.js)
+./install.sh
-# 方式2:一键安装(从远程)
+# 或一键安装(无需克隆)
curl -fsSL https://gitee.com/zhang96110/idc_assest/raw/main/install.sh | bash
```
-#### Windows 用户
+**install.sh 自动完成**:
+- 自动检测 Linux 发行版(Ubuntu/Debian/CentOS/Arch)
+- 自动安装 Node.js 20.x
+- 自动安装系统依赖(git、curl)
+- 调用 install.js 完成后续安装
+
+### Windows 部署
```powershell
# 克隆项目
@@ -189,505 +120,94 @@ cd idc_assest
# 运行安装脚本(需要先安装 Node.js)
node install.js
-# 或使用 npm 命令
+# 或使用 npm
npm run deploy
```
-#### 非交互式安装(快速部署)
+### 手动安装
```bash
-# 使用默认配置快速安装
-node install.js -y # 交互式安装
+# 1. 克隆项目
+git clone https://gitee.com/zhang96110/idc_assest.git
+cd idc_assest
+
+# 2. 安装依赖
+npm run install:all
+
+# 3. 配置环境变量
+cp backend/.env.example backend/.env
+
+# 4. 配置 JWT 密钥(必填)
+# 编辑 backend/.env,设置 JWT_SECRET 为强随机字符串
+# 生成命令:openssl rand -hex 64(Linux/macOS)
+# 或:node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
+
+# 5. 初始化数据库
+cd backend && node scripts/init-database.js
+
+# 6. 启动服务
+cd .. && npm start
+```
+
+**访问地址**:http://localhost:3000
+**默认账号**:首次注册自动成为管理员
+
+---
+
+## 环境要求
+
+| 项目 | 最低要求 | 推荐配置 |
+|------|----------|----------|
+| **操作系统** | Windows 10+、macOS 12+、Linux | 同最低 |
+| **Node.js** | ≥14.0.0 | 20.x LTS |
+| **npm** | ≥6.0.0 | 10.x |
+| **内存** | 4GB | 8GB+ |
+| **磁盘** | 2GB | 10GB+ |
+
+**生产环境额外要求**:
+
+| 项目 | 要求 |
+|------|------|
+| 数据库 | MySQL 8.0+(推荐)或 SQLite |
+| Web 服务器 | Nginx 1.18+ |
+| 进程管理 | PM2 5.x+ |
+
+---
+
+## 脚本命令参考
+
+### install.js - 安装脚本
+
+```bash
+# 交互式安装
+node install.js
+
+# 非交互式安装
+node install.js -y
# 指定数据库类型
-node install.js -y --db=mysql # 使用 MySQL
-node install.js -y --db=sqlite # 使用 SQLite(默认)
+node install.js -y --db=mysql # 使用 MySQL
+node install.js -y --db=sqlite # 使用 SQLite(默认)
# 指定端口
-node install.js -y --port=3000 # 后端端口 3000
+node install.js -y --port=8000 # 后端端口
# 跳过前端构建
node install.js -y --skip-build
+
+# 跳过 Nginx 配置
+node install.js -y --skip-nginx
+
+# 查看帮助
+node install.js --help
```
-**脚本功能:**
-- ✅ 自动检测 Node.js、npm、PM2、Nginx
-- ✅ **Linux 自动安装 Node.js**(Ubuntu/Debian/CentOS/Arch)
-- ✅ **MySQL 连接测试**(配置后自动验证)
-- ✅ **安装后健康检查**(验证服务是否正常)
-- ✅ 交互式配置数据库(SQLite/MySQL)
-- ✅ 交互式选择运行环境(development/production)
-- ✅ 交互式选择前端部署方式(Nginx/PM2 serve)
-- ✅ 自动安装项目依赖
-- ✅ 自动初始化数据库
-- ✅ 自动构建前端项目
-- ✅ 使用 PM2 启动和管理服务
-- ✅ 日志持久化保存
-
-### 方式二:手动安装
-
-#### 1. 克隆项目
-
-```bash
-# 选择其一
-# Gitee(国内推荐)
-git clone https://gitee.com/zhang96110/idc_assest.git
-# GitHub
-git clone https://github.com/gituib/idc_assest.git
-cd idc_assest
-```
-
-#### 2. 安装依赖
-
-```bash
-# 一键安装所有依赖(推荐)
-npm run install:all
-
-# 或分别安装
-# 安装后端依赖
-cd backend
-npm install
-
-# 安装前端依赖
-cd ../frontend
-npm install
-```
-
-#### 3. 配置环境变量
-
-```bash
-cd ../backend
-cp .env.example .env
-```
-
-根据需要编辑 `.env` 文件(开发环境使用默认 SQLite 配置即可):
-
-```env
-# 开发环境配置示例
-NODE_ENV=development
-PORT=8000
-DB_TYPE=sqlite
-DB_PATH=./idc_management.db
-```
-
-#### 4. 初始化数据库
-
-```bash
-node scripts/init-database.js
-```
-
-#### 5. 数据库迁移
-
-当项目更新后,可能需要执行数据库迁移脚本以更新表结构。迁移脚本支持幂等执行,重复执行不会出错。
-
-**执行迁移脚本:**
-```bash
-cd backend
-node scripts/migrate-all.js
-```
-
-**迁移脚本包含以下内容:**
-| 迁移名称 | 说明 |
-|----------|------|
-| v2.0 - 网卡和端口表 | 创建 network_cards 表,为 device_ports 添加 nic_id 字段 |
-| 用户表 pending 状态 | 为用户表添加 pending 状态支持 |
-| 耗材乐观锁 | 为 consumables 表添加 version 字段 |
-| 耗材操作日志表结构 | 添加 isEditable、originalLogId 等修改记录字段 |
-| 耗材日志解耦 | 添加 isConsumableDeleted 和 consumableSnapshot 字段 |
-| 移除日志外键约束 | 移除 consumable_logs 表的外键约束,防止级联删除 |
-| 耗材日志归档表 | 创建 consumable_log_archives 归档表 |
-| 耗材SN序列号字段 | 为 consumables、consumable_records、consumable_logs 添加 snList 字段 |
-
-**注意事项:**
-- 迁移脚本支持 SQLite 和 MySQL 两种数据库
-- 建议在执行迁移前备份数据库
-- 迁移脚本会自动检测已执行的迁移,避免重复执行
-
-#### 6. 启动服务
-
-**开发环境(同时启动前后端):**
-```bash
-# 在项目根目录运行
-npm start
-```
-
-**或分别启动:**
-```bash
-# 启动后端(端口8000)
-cd backend
-npm run dev
-
-# 启动前端(端口3000)- 新终端
-cd ../frontend
-npm run dev
-```
-
-**访问地址:**
-- 前端应用:http://localhost:3000
-- 后端API:http://localhost:8000/api
-- API文档:http://localhost:8000/api-docs
-- 健康检查:http://localhost:8000/health
-
----
-
-## 基本使用方法
-
-### 首次登录
-
-系统采用**首次注册自动成为管理员**的机制:
-
-- 第一个注册的用户会自动获得「管理员」角色
-- 后续注册的用户默认为「访客」角色,需要管理员审核后才能激活
-- 首次访问系统时,请通过注册功能创建管理员账号
-
-**注册方式:**
-1. 打开系统登录页面
-2. 点击「注册账号」链接
-3. 填写用户名、密码、邮箱等信息
-4. 提交后自动登录,成为系统管理员
-
-> ⚠️ **安全建议**:首次登录后请立即修改默认密码!
-
-### 常用操作指南
-
-#### 1. 机房管理
-
-- 进入「机房管理」页面,点击「新增机房」按钮
-- 填写机房名称、位置、面积、负责人等信息
-- 支持机房图片上传
-
-#### 2. 机柜管理
-
-- 在机房详情页或「机柜管理」页面管理机柜
-- 设置机柜高度(U数)、位置坐标
-- 查看机柜容量使用情况
-
-#### 3. 设备管理
-
-- 「设备管理」页面进行设备增删改查
-- 支持 Excel/CSV 批量导入设备
-- 设备状态:采购中 → 待安装 → 运行中 → 维护中 → 已报废
-
-#### 4. 3D可视化
-
-- 进入「3D可视化」页面查看机房3D模型
-- 支持鼠标拖拽旋转、滚轮缩放
-- 悬停设备查看详情,点击设备弹出操作面板
-
-#### 5. 工单管理
-
-- 创建故障报修或维护工单
-- 分配负责人,设置优先级
-- 记录处理过程,更新工单状态
-
-#### 6. 耗材管理
-
-- 管理耗材库存,设置库存预警阈值
-- 记录耗材领用,追踪使用去向
-- 查看耗材统计报表
-- 支持SN序列号追踪
-- 耗材操作日志归档
-
-#### 7. 备份管理
-
-- **手动备份**:立即创建数据库备份
-- **自动备份**:配置定时自动备份(支持cron表达式)
-- **备份恢复**:从备份文件恢复数据库
-- **远程备份**:支持多种协议(FTP/SFTP/WebDAV/SMB)上传备份到远程服务器
-- **备份列表**:查看和管理所有备份文件
-
-#### 8. 统计分析
-
-- **设备统计**:设备总数、状态分布、趋势图表
-- **工单统计**:工单数量、处理时效、分类统计
-- **耗材统计**:库存状况、领用趋势、分类统计
-- **用户统计**:用户增长趋势、活跃用户分析
-- **数据看板**:实时展示关键指标
-
----
-
-## 项目结构
-
-```
-jigui/
-├── frontend/ # 前端项目
-│ ├── src/
-│ │ ├── api/ # API接口封装
-│ │ │ ├── index.js # API请求封装
-│ │ │ └── cache.js # 缓存管理
-│ │ ├── components/ # 通用组件
-│ │ │ ├── 3d/ # 3D可视化组件
-│ │ │ │ ├── materials/ # 3D材质组件
-│ │ │ │ │ ├── TextureCache.js # 纹理缓存
-│ │ │ │ │ ├── constants.jsx
-│ │ │ │ │ ├── devicePanel.jsx
-│ │ │ │ │ ├── index.jsx
-│ │ │ │ │ ├── rackFrame.jsx
-│ │ │ │ │ └── utils.jsx
-│ │ │ │ ├── CascadingRackPanel.jsx # 级联机柜面板
-│ │ │ │ ├── DeviceModel.jsx # 设备模型
-│ │ │ │ ├── RackModel.jsx # 机柜模型
-│ │ │ │ ├── RackSelectorHeader.jsx # 机柜选择头部
-│ │ │ │ ├── Scene.jsx # 3D场景
-│ │ │ │ └── LODManager.jsx # LOD管理器
-│ │ │ ├── dashboard/ # 数据看板组件
-│ │ │ │ ├── AnimatedCounter.jsx
-│ │ │ │ ├── CircularProgress.jsx
-│ │ │ │ ├── DeviceTrendChart.jsx
-│ │ │ │ ├── NavigationGrid.jsx
-│ │ │ │ ├── PowerGauge.jsx
-│ │ │ │ ├── QuickStats.jsx
-│ │ │ │ ├── StatCard.jsx
-│ │ │ │ ├── StatusLegend.jsx
-│ │ │ │ └── SystemInfo.jsx
-│ │ │ ├── device/ # 设备管理组件
-│ │ │ │ ├── BatchStatusModal.jsx
-│ │ │ │ ├── DeviceDetailModal.jsx
-│ │ │ │ ├── DeviceFormModal.jsx
-│ │ │ │ ├── ExportModal.jsx
-│ │ │ │ ├── FieldConfigModal.jsx
-│ │ │ │ ├── ImportModal.jsx
-│ │ │ │ └── ResizableTitle.jsx
-│ │ │ ├── CableCreateModal.jsx
-│ │ │ ├── CableWizardModal.jsx
-│ │ │ ├── CloseButton.jsx
-│ │ │ ├── ConsumableTimelineModal.jsx
-│ │ │ ├── DangerConfirmModal.jsx
-│ │ │ ├── DeviceDetailDrawer.jsx
-│ │ │ ├── ErrorBoundary.jsx
-│ │ │ ├── FilterableDeviceSelect.jsx
-│ │ │ ├── MaintenanceBanner.jsx
-│ │ │ ├── NetworkCardCreateModal.jsx
-│ │ │ ├── NetworkCardImportModal.jsx
-│ │ │ ├── NetworkCardPanel.jsx
-│ │ │ ├── PortAddGuideModal.jsx
-│ │ │ ├── PortCreateModal.jsx
-│ │ │ ├── PortExportModal.jsx
-│ │ │ ├── PortManagementPanel.jsx
-│ │ │ ├── PortPanel.jsx
-│ │ │ ├── ProtectedRoute.jsx
-│ │ │ ├── ServerBackplanePanel.jsx
-│ │ │ ├── ServerNicCard.jsx
-│ │ │ ├── TicketExportModal.jsx
-│ │ │ └── VirtualDeviceList.jsx
-│ │ ├── config/ # 配置文件
-│ │ │ ├── api.js # API配置
-│ │ │ └── theme.js # 主题配置
-│ │ ├── constants/ # 常量定义
-│ │ │ └── deviceManagementConstants.js
-│ │ ├── context/ # React Context状态管理
-│ │ │ ├── AuthContext.jsx # 认证上下文
-│ │ │ ├── ConfigContext.jsx # 配置上下文
-│ │ │ └── Scene3DContext.jsx # 3D场景上下文
-│ │ ├── hooks/ # 自定义Hooks
-│ │ │ ├── useApi.js # API请求Hook
-│ │ │ ├── useDebounce.js # 防抖Hook
-│ │ │ ├── useDesignTokens.js # 设计令牌Hook
-│ │ │ ├── useIdleTimeout.js # 空闲超时Hook
-│ │ │ └── useSWR.js # SWR数据请求Hook
-│ │ ├── pages/ # 页面模块
-│ │ │ ├── Dashboard.jsx # 数据看板
-│ │ │ ├── Login.jsx # 登录页面
-│ │ │ ├── RoomManagement.jsx # 机房管理
-│ │ │ ├── RoomFloorPlan.jsx # 机房平面图
-│ │ │ ├── RackManagement.jsx # 机柜管理
-│ │ │ ├── DeviceManagement.jsx # 设备管理
-│ │ │ ├── DeviceFieldManagement.jsx # 设备字段管理
-│ │ │ ├── IdleDeviceManagement.jsx # 空闲设备管理
-│ │ │ ├── PendingDeviceManagement.jsx # 待审核设备管理
-│ │ │ ├── PortManagement.jsx # 端口管理
-│ │ │ ├── CableManagement.jsx # 线缆管理
-│ │ │ ├── TicketManagement.jsx # 工单管理
-│ │ │ ├── TicketCategoryManagement.jsx # 工单分类管理
-│ │ │ ├── TicketFieldManagement.jsx # 工单字段管理
-│ │ │ ├── TicketStatistics.jsx # 工单统计
-│ │ │ ├── ConsumableManagement.jsx # 耗材管理
-│ │ │ ├── CategoryManagement.jsx # 耗材分类管理
-│ │ │ ├── ConsumableLogs.jsx # 耗材日志
-│ │ │ ├── ConsumableStatistics.jsx # 耗材统计
-│ │ │ ├── InventoryManagement.jsx # 盘点管理
-│ │ │ ├── InventoryTaskExecution.jsx # 盘点任务执行
-│ │ │ ├── OperationLogs.jsx # 操作日志
-│ │ │ ├── UserManagement.jsx # 用户管理
-│ │ │ ├── RolesManagement.jsx # 角色管理
-│ │ │ ├── SystemSettings.jsx # 系统设置
-│ │ │ ├── BackupManagement.jsx # 备份管理
-│ │ │ ├── AutoBackupSettings.jsx # 自动备份设置
-│ │ │ ├── RemoteBackupSettings.jsx # 远程备份设置
-│ │ │ ├── Rack3DVisualization.jsx # 3D可视化
-│ │ │ └── ErrorBoundaryTest.jsx # 错误边界测试
-│ │ ├── styles/ # 样式文件
-│ │ │ └── deviceManagementStyles.js
-│ │ ├── utils/ # 工具函数
-│ │ │ ├── common.js
-│ │ │ ├── crypto.js
-│ │ │ └── deviceUtils.jsx
-│ │ ├── App.jsx # 应用入口
-│ │ ├── main.jsx # 渲染入口
-│ │ └── index.css # 全局样式
-│ ├── public/ # 公共资源
-│ │ ├── assets/3d/ # 3D资源
-│ │ │ └── env.hdr # 环境贴图
-│ │ └── fonts/ # 字体文件
-│ │ └── Inter-Regular.woff2
-│ ├── vite.config.mjs # Vite配置
-│ ├── .env.example # 环境变量示例
-│ └── package.json # 前端依赖
-├── backend/ # 后端项目
-│ ├── config/ # 配置文件
-│ │ ├── index.js # 配置统一导出
-│ │ ├── constants.js # 常量配置
-│ │ ├── routes.js # 路由注册配置
-│ │ ├── security.js # 安全配置
-│ │ ├── auto-backup-settings.json # 自动备份设置
-│ │ └── remote-backup-configs.json # 远程备份配置
-│ ├── middleware/ # 中间件
-│ │ ├── auth.js # 认证中间件
-│ │ └── validation.js # 验证中间件
-│ ├── models/ # 数据模型(Sequelize)
-│ │ ├── Room.js # 机房模型
-│ │ ├── Rack.js # 机柜模型
-│ │ ├── Device.js # 设备模型
-│ │ ├── DeviceField.js # 设备字段模型
-│ │ ├── DevicePort.js # 设备端口模型
-│ │ ├── NetworkCard.js # 网卡模型
-│ │ ├── Cable.js # 线缆模型
-│ │ ├── Ticket.js # 工单模型
-│ │ ├── TicketField.js # 工单字段模型
-│ │ ├── TicketCategory.js # 工单分类模型
-│ │ ├── TicketOperationRecord.js # 工单操作记录模型
-│ │ ├── FaultCategory.js # 故障分类模型
-│ │ ├── Consumable.js # 耗材模型
-│ │ ├── ConsumableCategory.js # 耗材分类模型
-│ │ ├── ConsumableRecord.js # 耗材领用记录模型
-│ │ ├── ConsumableLog.js # 耗材日志模型
-│ │ ├── ConsumableLogArchive.js # 耗材日志归档模型
-│ │ ├── InventoryPlan.js # 盘点计划模型
-│ │ ├── InventoryTask.js # 盘点任务模型
-│ │ ├── InventoryRecord.js # 盘点记录模型
-│ │ ├── User.js # 用户模型
-│ │ ├── Role.js # 角色模型
-│ │ ├── Permission.js # 权限模型
-│ │ ├── UserRole.js # 用户角色关联模型
-│ │ ├── SystemSetting.js # 系统设置模型
-│ │ ├── PendingDevice.js # 待审核设备模型
-│ │ ├── OperationLog.js # 操作日志模型
-│ │ ├── BackupLog.js # 备份日志模型
-│ │ ├── Warehouse.js # 仓库模型
-│ │ ├── Business.js # 业务模型
-│ │ ├── DeviceBusiness.js # 设备业务关联模型
-│ │ └── ticketIndex.js # 工单模型初始化
-│ ├── routes/ # API路由
-│ │ ├── auth.js # 认证路由
-│ │ ├── rooms.js # 机房路由
-│ │ ├── racks.js # 机柜路由
-│ │ ├── devices.js # 设备路由
-│ │ ├── deviceFields.js # 设备字段路由
-│ │ ├── devicePorts.js # 设备端口路由
-│ │ ├── networkCards.js # 网卡路由
-│ │ ├── cables.js # 线缆路由
-│ │ ├── tickets.js # 工单路由
-│ │ ├── ticketCategories.js # 工单分类路由
-│ │ ├── ticketFields.js # 工单字段路由
-│ │ ├── consumables.js # 耗材路由
-│ │ ├── consumableCategories.js # 耗材分类路由
-│ │ ├── consumableRecords.js # 耗材记录路由
-│ │ ├── consumableImport.js # 耗材导入路由
-│ │ ├── inventory.js # 盘点路由
-│ │ ├── users.js # 用户路由
-│ │ ├── roles.js # 角色路由
-│ │ ├── systemSettings.js # 系统设置路由
-│ │ ├── background.js # 背景配置路由
-│ │ ├── backup.js # 备份管理路由
-│ │ ├── statistics.js # 统计分析路由
-│ │ ├── operationLogs.js # 操作日志路由
-│ │ ├── idleDevices.js # 空闲设备路由
-│ │ ├── warehouses.js # 仓库管理路由
-│ │ ├── dangerousOperations.js # 危险操作路由
-│ │ ├── topology.js # 拓扑管理路由
-│ │ └── ticketCategories.js # 工单分类路由
-│ ├── scripts/ # 数据库脚本
-│ │ ├── init-database.js # 数据库初始化
-│ │ ├── migrate-all.js # 执行所有迁移脚本
-│ │ ├── fix-foreign-keys.js # 外键约束修复
-│ │ ├── migrate-logs.js # 日志迁移
-│ │ ├── migrate-cable-fields.js # 线缆字段迁移
-│ │ ├── archive/ # 归档迁移脚本
-│ │ │ ├── migrate-v2.js
-│ │ │ ├── migrate-consumable-logs.js
-│ │ │ ├── migrate-consumable-version.js
-│ │ │ ├── migrate-consumable-log-decouple.js
-│ │ │ ├── migrate-consumable-log-archive.js
-│ │ │ ├── remove-consumable-log-fk.js
-│ │ │ └── migrate-add-pending-status.js
-│ │ ├── backup.js # 备份脚本
-│ │ ├── restore.js # 恢复脚本
-│ │ ├── ensure_nic_schema.js # 确保网卡表结构
-│ │ ├── add-isSystem-column.js
-│ │ ├── add-isSystem-mysql.js
-│ │ ├── add-isSystem-sqlite.js
-│ │ ├── update-system-fields.js
-│ │ ├── update-system-fields-v2.js
-│ │ └── generate-rack-import-template.js
-│ ├── utils/ # 工具函数
-│ │ ├── autoBackupScheduler.js # 自动备份调度器
-│ │ ├── backup.js # 备份工具
-│ │ ├── remoteBackup.js # 远程备份工具
-│ │ └── remoteBackupConfig.js # 远程备份配置
-│ ├── validation/ # 数据验证Schema
-│ │ ├── deviceSchema.js
-│ │ ├── rackSchema.js
-│ │ └── roomSchema.js
-│ ├── uploads/ # 文件上传目录
-│ │ └── avatars/ # 用户头像目录
-│ ├── .env.example # 环境变量示例
-│ ├── server.js # 服务入口
-│ ├── db.js # 数据库连接
-│ ├── initConfig.js # 初始化配置
-│ ├── initDeviceFields.js # 初始化设备字段
-│ ├── initTicketFields.js # 初始化工单字段
-│ ├── create_indexes.js # 创建数据库索引
-│ ├── backgroundSettings.json # 背景设置
-│ ├── unlock_user.js # 用户解锁脚本
-│ └── package.json # 后端依赖
-├── docs/ # 项目文档
-│ ├── api/ # 接口文档
-│ │ └── README.md
-│ ├── images/ # 文档图片
-│ │ ├── dashboard.png
-│ │ ├── 3d-visualization.png
-│ │ ├── device-management.png
-│ │ └── room-management.png
-│ └── USER_GUIDE.md # 用户指南
-├── scripts/ # 项目脚本
-│ └── frontend-manager.js # 前端管理脚本
-├── install.sh # Linux 安装引导脚本(Shell)⭐
-├── install.js # 交互式安装脚本(Node.js)⭐
-├── update.js # 一键更新脚本 ⭐
-├── uninstall.js # 卸载脚本
-├── package.json # 项目根依赖
-├── README.md # 项目说明
-├── CHANGELOG.md # 版本记录
-├── DEPLOYMENT.md # 部署指南
-├── LICENSE # 许可证
-├── .eslintrc.js # ESLint配置
-├── .prettierrc # Prettier配置
-└── .prettierignore # Prettier忽略文件
-```
-
----
-
-## 更新升级
-
-### 一键更新(推荐)⭐
+### update.js - 更新脚本
```bash
# 交互式更新
node update.js
-# 查看帮助
-node update.js --help
-
# 模拟运行(不执行实际操作)
node update.js --dry-run
@@ -695,254 +215,412 @@ node update.js --dry-run
node update.js --skip-git # 跳过 Git 拉取
node update.js --skip-backup # 跳过数据库备份
node update.js --skip-migrate # 跳过数据库迁移
-node update.js --skip-build # 跳过前端构建
+node update.js --skip-build # 跳过前端构建
node update.js --skip-deps # 跳过依赖安装
node update.js --skip-restart # 跳过服务重启
# 强制执行(忽略锁文件)
node update.js --force
+
+# 查看帮助
+node update.js --help
```
-**智能检测功能:**
-- ✅ **依赖安装智能跳过** - 检测 package.json 变化,无变化则跳过
-- ✅ **前端构建智能跳过** - 检测源码变化,无变化则跳过
-- ✅ **数据库自动备份** - 更新前自动备份,支持回滚
-- ✅ **健康检查验证** - 更新后验证服务是否正常
-- ✅ **日志持久化** - 更新日志保存到 `logs/update_*.log`
-- ✅ **锁机制** - 防止多个更新进程同时运行
+**智能检测功能**:
+- 依赖安装智能跳过(检测 package.json 变化)
+- 前端构建智能跳过(检测源码变化)
+- 数据库自动备份(支持回滚)
+- 健康检查验证
+- 日志持久化保存到 `logs/update_*.log`
+- 锁机制防止重复运行
-### 手动更新
-
-```bash
-# 1. 拉取最新代码
-git pull
-
-# 2. 更新后端依赖
-cd backend && npm install
-
-# 3. 更新前端依赖并构建
-cd ../frontend && npm install && npm run build
-
-# 4. 重启服务
-pm2 restart idc-backend
-```
-
----
-
-## 卸载系统
-
-### 一键卸载(推荐)⭐
+### uninstall.js - 卸载脚本
```bash
# 交互式卸载
node uninstall.js
-# 查看帮助
-node uninstall.js --help
-
# 强制卸载(无需确认)
node uninstall.js --force
-# 卸载前自动备份
+# 卸载前自动备份数据库
node uninstall.js --backup
# 跳过某些步骤
-node uninstall.js --skip-db # 跳过数据库删除
-node uninstall.js --skip-deps # 跳过依赖删除
+node uninstall.js --skip-db # 跳过数据库删除
+node uninstall.js --skip-deps # 跳过依赖删除
+node uninstall.js --skip-uploads # 跳过上传文件删除
+
+# 预览模式(不实际执行)
+node uninstall.js --dry-run
+
+# 查看帮助
+node uninstall.js --help
```
-**卸载功能:**
-- ✅ 停止并删除 PM2 服务
-- ✅ 清理 Nginx 配置
-- ✅ 删除生成的配置文件
-- ✅ 可选删除数据库文件
-- ✅ 可选删除 node_modules
-- ✅ 卸载前自动备份
-- ✅ 日志持久化保存
-
---
-## API接口
-
-完整交互式API文档请访问:**http://localhost:8000/api-docs**
-
-该文档基于Swagger/OpenAPI 3.0标准,提供:
-- 📚 可视化API文档界面
-- 🔐 在线JWT认证测试
-- ⚡ 支持直接在线调试API接口
-- 📊 自动同步最新接口信息
-
----
-
-## 部署
-
-详细部署指南请参考 [DEPLOYMENT.md](DEPLOYMENT.md)。
-
-### 开发环境
-
-默认使用SQLite数据库,无需额外配置即可启动。
+## 部署指南
### 生产环境
-- 推荐使用MySQL数据库
-- 使用Nginx作为反向代理
-- 配置SSL证书(可选)
-- 建议使用PM2管理进程
+生产环境部署只需运行 `./install.sh` 或 `node install.js`,脚本会自动完成所有配置。
-### 服务管理命令
+**仅需提前准备 MySQL 数据库**(如使用 MySQL):
+
+```sql
+-- 创建数据库
+CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+
+-- 创建用户
+CREATE USER 'idc_user'@'localhost' IDENTIFIED BY 'YourStrongPassword';
+GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_user'@'localhost';
+FLUSH PRIVILEGES;
+```
+
+**服务器要求参考**:
+
+| 规模 | CPU | 内存 | 磁盘 |
+|------|-----|------|------|
+| 小型(<100 设备) | 2 核心 | 4GB | 40GB |
+| 中型(100-500 设备) | 4 核心 | 8GB | 80GB |
+| 大型(>500 设备) | 8 核心+ | 16GB+ | 100GB+ |
+
+
+
+### Nginx 配置
+
+`install.js` 会自动配置 Nginx。配置文件位于 `deploy/nginx-idc.conf`,核心配置如下:
+
+```nginx
+server {
+ listen 80;
+ server_name your-domain.com;
+
+ client_max_body_size 100M;
+
+ root "/var/www/idc";
+ index index.html;
+
+ # Gzip 压缩
+ gzip on;
+ gzip_vary on;
+ gzip_min_length 1024;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json application/x-javascript image/svg+xml;
+
+ # 静态资源缓存(1年)
+ location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|hdr)$ {
+ expires 1y;
+ add_header Cache-Control "public, immutable";
+ try_files $uri =404;
+ }
+
+ # API 代理
+ location /api/ {
+ proxy_pass http://127.0.0.1:8000/api/;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_connect_timeout 60s;
+ proxy_send_timeout 60s;
+ proxy_read_timeout 300s;
+ proxy_buffering off;
+ }
+
+ # 文件上传代理
+ location /uploads/ {
+ proxy_pass http://127.0.0.1:8000/uploads/;
+ proxy_http_version 1.1;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ client_max_body_size 100M;
+ }
+
+ # 前端路由(SPA)
+ location / {
+ try_files $uri $uri/ /index.html =404;
+ }
+}
+```
+
+**启用配置**:
```bash
-# 查看服务状态
-pm2 status
-
-# 查看日志
-pm2 logs idc-backend
-pm2 logs idc-frontend
-
-# 重启服务
-pm2 restart idc-backend
-pm2 restart idc-frontend
-
-# 停止服务
-pm2 stop idc-backend
-
-# 删除服务
-pm2 delete idc-backend
+# Ubuntu/Debian
+sudo cp deploy/nginx-idc.conf /etc/nginx/sites-available/idc
+sudo ln -sf /etc/nginx/sites-available/idc /etc/nginx/sites-enabled/idc
+sudo rm -f /etc/nginx/sites-enabled/default
+sudo nginx -t && sudo nginx -s reload
```
---
+## 系统维护
+
+### 服务管理
+
+```bash
+# PM2 服务
+pm2 status # 查看状态
+pm2 logs idc-backend # 查看日志
+pm2 restart idc-backend # 重启服务
+pm2 stop idc-backend # 停止服务
+pm2 delete idc-backend # 删除服务
+pm2 save # 保存配置
+pm2 startup # 开机自启
+
+# Nginx
+sudo nginx -t # 测试配置
+sudo nginx -s reload # 重载配置
+sudo systemctl restart nginx # 重启服务
+```
+
+### 日志查看
+
+```bash
+# PM2 日志
+pm2 logs idc-backend
+pm2 logs idc-backend --err # 仅错误日志
+
+# Nginx 日志
+sudo tail -f /var/log/nginx/error.log
+
+# 应用日志
+tail -f backend/logs/*.log
+```
+
+### 数据备份
+
+```bash
+# 内置备份
+# 系统管理 → 备份管理 → 创建备份
+
+# 命令行备份
+cd backend && node scripts/backup.js
+
+# 还原
+cd backend && node scripts/restore.js
+```
+
+---
+
+## 常见问题
+
+
+1. 端口冲突(8000、3000、80)
+
+```bash
+# 检查端口占用(Linux)
+netstat -tulpn | grep :8000
+
+# Windows
+netstat -ano | findstr :8000
+
+# 方案1:修改端口(编辑 backend/.env)
+PORT=8001
+
+# 方案2:停止占用进程
+sudo kill $(lsof -t -i:8000)
+```
+
+
+
+2. 502 Bad Gateway
+
+1. 检查后端服务:`pm2 status`
+2. 检查端口监听:`netstat -tulpn | grep 8000`
+3. 检查 Nginx 配置:`nginx -t`
+4. 查看错误日志:`tail /var/log/nginx/error.log`
+
+
+
+3. 前端构建失败
+
+```bash
+# 检查 Node.js 版本
+node -v # 需要 ≥18.x
+
+# 清理并重试
+cd frontend
+rm -rf node_modules dist
+npm install
+npm run build
+```
+
+
+
+4. 数据库连接失败
+
+**MySQL**:
+- 检查服务状态:`sudo systemctl status mysql`
+- 验证连接参数(主机、端口、用户名、密码)
+- 确认数据库已创建:`SHOW DATABASES;`
+- 检查用户权限:`SHOW GRANTS FOR 'idc_user'@'localhost';`
+
+
+
+5. 权限问题
+
+```bash
+# 修复文件权限
+sudo chown -R $(whoami):$(whoami) /path/to/idc_assest
+
+# 上传目录权限
+sudo chmod -R 777 backend/uploads
+```
+
+
+
+6. 内存不足
+
+```bash
+# 增加内存限制(编辑 ecosystem.config.js)
+node_args: "--max-old-space-size=4096"
+
+# 或命令行
+pm2 restart idc-backend --update-env
+```
+
+
+
+7. npm 安装失败
+
+```bash
+# 清理缓存
+npm cache clean --force
+
+# 删除后重装
+rm -rf node_modules package-lock.json
+npm install
+```
+
+
+
+8. PM2 服务消失
+
+```bash
+# 重新启动
+pm2 start ecosystem.config.js
+pm2 save
+pm2 startup
+```
+
+
+
+9. 忘记管理员密码
+
+重置密码或创建新管理员:
+
+```bash
+cd backend
+node scripts/init-database.js --reset-admin
+```
+
+
+---
+
+## 项目结构
+
+```
+idc_assest/
+├── frontend/ # 前端项目
+│ ├── src/
+│ │ ├── api/ # API 接口
+│ │ ├── components/ # 组件(3d/、dashboard/、device/、floorplan/)
+│ │ ├── pages/ # 页面
+│ │ ├── hooks/ # 自定义 Hooks
+│ │ ├── stores/ # 状态管理
+│ │ └── utils/ # 工具函数
+│ └── package.json
+├── backend/ # 后端项目
+│ ├── models/ # Sequelize 数据模型
+│ ├── routes/ # API 路由
+│ ├── middleware/ # 中间件
+│ ├── scripts/ # 数据库脚本(init-database.js、migrate-all.js)
+│ ├── utils/ # 工具函数
+│ ├── uploads/ # 上传文件目录
+│ ├── server.js # 服务入口
+│ └── package.json
+├── deploy/ # 部署配置
+│ ├── ecosystem.config.js # PM2 配置
+│ └── nginx-idc.conf # Nginx 配置
+├── install/ # 安装脚本模块
+├── docs/ # 项目文档
+├── install.sh # Linux 安装引导脚本
+├── install.js # 安装脚本入口
+├── update.js # 更新脚本
+├── uninstall.js # 卸载脚本
+└── README.md # 本文件
+```
+
+---
+
+## API 文档
+
+完整交互式 API 文档访问:**http://localhost:8000/api-docs**
+
+基于 Swagger/OpenAPI 3.0 标准,支持在线认证测试和 API 调试。
+
+---
+
## 贡献指南
-欢迎提交 Issue 或 Pull Request 为项目贡献力量。
+欢迎提交 Issue 或 Pull Request!
-### 贡献流程
+```bash
+# 1. Fork 本项目
-1. **Fork 本项目**
+# 2. 克隆你的 Fork
+git clone https://github.com/YOUR_USERNAME/idc_assest.git
+cd idc_assest
-2. **克隆 Fork 的仓库**
+# 3. 创建分支
+git checkout -b feature/your-feature # 功能开发
+git checkout -b fix/your-fix # Bug 修复
- ```bash
- git clone https://github.com/YOUR_USERNAME/idc_assest.git
- cd idc_assest
- ```
+# 4. 开发并提交
+git commit -m 'feat: 添加新功能'
+git commit -m 'fix: 修复问题'
-3. **创建功能分支**
+# 5. 推送并创建 PR
+git push origin feature/your-feature
+```
- ```bash
- # 功能开发
- git checkout -b feature/your-feature-name
-
- # Bug 修复
- git checkout -b fix/your-fix-name
- ```
+**提交信息规范**:
-4. **进行开发**
-
- - 保持代码风格一致,遵循 ESLint + Prettier 规范
- - 编写有意义的提交信息
- - 确保代码通过 lint 检查
-
-5. **提交更改**
-
- ```bash
- git add .
- git commit -m 'feat: 添加新功能描述'
- # 或
- git commit -m 'fix: 修复问题描述'
- ```
-
- **提交信息规范**:
-
- | 类型 | 说明 |
- |------|------|
- | feat | 新功能 |
- | fix | Bug 修复 |
- | docs | 文档更新 |
- | style | 代码格式调整 |
- | refactor | 代码重构 |
- | perf | 性能优化 |
- | test | 测试相关 |
- | chore | 构建/工具链变动 |
-
-6. **推送到远程**
-
- ```bash
- git push origin feature/your-feature-name
- ```
-
-7. **创建 Pull Request**
-
- - 描述您的改动内容和目的
- - 关联相关 Issue(如果有)
- - 等待代码审查
-
-### 开发规范
+| 类型 | 说明 |
+|------|------|
+| feat | 新功能 |
+| fix | Bug 修复 |
+| docs | 文档更新 |
+| style | 代码格式 |
+| refactor | 重构 |
+| perf | 性能优化 |
+| test | 测试 |
+| chore | 构建/工具 |
+**开发规范**:
- 使用 ES6+ 语法
-- 前端遵循 React Hooks 规范
-- 后端使用 async/await 处理异步
-- 保持函数简洁,单一职责
-- 适当添加注释说明复杂逻辑
-
-### 代码审查标准
-
-- ✅ 代码功能正确性
-- ✅ 符合项目编码规范
-- ✅ 必要的测试覆盖
-- ✅ 文档更新(如有必要)
-- ✅ 性能影响评估
+- 遵循 React Hooks 规范
+- 使用 async/await 处理异步
+- 遵循 ESLint + Prettier 代码规范
---
## 许可证
-本项目基于 **MIT 许可证** 开源。
+本项目基于 **MIT 许可证**开源。
-```
-MIT License
-
-Copyright (c) 2024 IDC Device Management System
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-```
-
----
-
-## 致谢
-
-感谢以下开源项目:
-
-- [React](https://react.dev/) - 前端框架
-- [Ant Design](https://ant.design/) - UI 组件库
-- [Three.js](https://threejs.org/) - 3D 渲染引擎
-- [Express](https://expressjs.com/) - Node.js Web 框架
-- [Sequelize](https://sequelize.org/) - Node.js ORM
-
----
-
-## 联系与支持
-
-- **Gitee Issues**: https://gitee.com/zhang96110/idc_assest/issues
-- **GitHub Issues**: https://github.com/gituib/idc_assest/issues
-- 功能建议:提交 Issue 并标注 `feature-request`
-- QQ群:1081123775
---
**⭐ 如果这个项目对您有帮助,请给我们一个 Star!**
+
+- Gitee Issues: https://gitee.com/zhang96110/idc_assest/issues
+- GitHub Issues: https://github.com/gituib/idc_assest/issues
+- QQ 群:1081123775
diff --git a/frontend/src/utils/secureStorage.js b/frontend/src/utils/secureStorage.js
index 039cf3d..b527255 100644
--- a/frontend/src/utils/secureStorage.js
+++ b/frontend/src/utils/secureStorage.js
@@ -8,6 +8,9 @@ const AES_KEY_LENGTH = 256;
const encoder = new TextEncoder();
const decoder = new TextDecoder();
+const PLAIN_PREFIX = 'plain:';
+const isSecureContext = () => typeof crypto !== 'undefined' && typeof crypto.subtle !== 'undefined';
+
const memoryCache = new Map();
let _cachedCryptoKey = null;
@@ -32,6 +35,10 @@ async function deriveKey(material) {
}
async function getOrCreateKeyMaterial() {
+ if (!isSecureContext()) {
+ return null;
+ }
+
let stored = sessionStorage.getItem(KEY_STORAGE_ID);
if (stored) {
const raw = Uint8Array.from(atob(stored), c => c.charCodeAt(0));
@@ -57,6 +64,11 @@ async function getOrCreateKeyMaterial() {
async function encrypt(plaintext) {
const material = await getOrCreateKeyMaterial();
+
+ if (!material) {
+ return PLAIN_PREFIX + btoa(plaintext);
+ }
+
const key = await deriveKey(material);
const iv = crypto.getRandomValues(new Uint8Array(12));
const encoded = encoder.encode(plaintext);
@@ -72,7 +84,13 @@ async function encrypt(plaintext) {
async function decrypt(encrypted) {
try {
+ if (encrypted.startsWith(PLAIN_PREFIX)) {
+ return atob(encrypted.slice(PLAIN_PREFIX.length));
+ }
+
const material = await getOrCreateKeyMaterial();
+ if (!material) return null;
+
const key = await deriveKey(material);
const raw = Uint8Array.from(atob(encrypted), c => c.charCodeAt(0));