# 无人机资产管理系统
BS 架构的无人机资产管理库:管理无人机基本信息(机型、编号、链路ID、飞控ID、备注),
记录每次主状态变更(待组装 / 待调试 / 待飞 / 损坏),可按机型查看"日期 × 飞机编号"的状态透视表,
也可查看每一架无人机的完整状态变更历史。
## 功能
- **无人机管理**:新增、编辑、删除无人机;机型筛选;编号唯一
- **主状态管理**:修改状态时写入一条含时间戳的记录(每次修改均保留)
- **自定义状态**:内置"待组装/待调试/待飞/损坏",可新增自定义状态并设置/修改颜色、改名;内置与已被使用的状态不可删除(改名会同步更新历史记录)
- **状态历史**:每一架无人机的时间线,展示每条变更记录(时间戳 + 状态 + 备注),**单条记录可删除**
- **飞行历史**:每架无人机的飞行记录(日期、时长、起降地点、备注),支持增/删/改;支持**统一添加**——一次勾选多架飞机编号批量添加,对应飞机自动同步
- **飞行透视表**:行=日期、列=编号,单元格=当日飞行次数,支持机型与日期范围筛选
- **按机型透视表**:行 = 日期、列 = 飞机编号、单元格 = 当日状态;无变更日期自动沿用前一状态;支持自定义日期范围(默认近 30 天)
- **状态颜色区分**:待组装=灰、待调试=橙、待飞=绿、损坏=红
- **手动导出 Excel**:点击「导出 Excel」按钮,下载 `无人机台账.xlsx`;不含日期时导出「无人机台账(含每架飞行次数)+ 状态历史 + 飞行历史」,选择日期时导出「每日状态矩阵 + 状态变更明细 + 无人机台账 + 飞行历史」;飞行历史 sheet 行=飞机编号、首列=飞行次数总计、后列=每日飞行记录;数据以点击时刻为准
## 技术栈
- 后端:Python + FastAPI + Uvicorn
- 数据库:SQLite(单文件 `uav.db`,无需安装数据库服务)
- 前端:原生 HTML / CSS / JavaScript(无构建工具、无第三方依赖)
- Excel 导出:openpyxl
## 部署(其他电脑)
1. **安装 Python**(3.9+):,安装时勾选 *Add python.exe to PATH*
2. 把本项目整个文件夹拷贝到目标电脑(含 `main.py`、`static/`、`start.bat`)
3. 双击 `start.bat` —— 首次运行会自动安装 fastapi、uvicorn 并启动服务
4. 浏览器自动打开 即可使用
> 局域网共享:同一网段内其他电脑浏览器访问 `http://本机IP:8000`(服务已监听 0.0.0.0)。
> 数据文件 `uav.db` 与程序同目录,备份/迁移时直接拷贝该文件即可。
## 手动启动
```bash
pip install fastapi uvicorn openpyxl
python -m uvicorn main:app --host 0.0.0.0 --port 8000
```
## REST API
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/api/drones?model=` | 无人机列表(含当前状态,可按机型筛选) |
| POST | `/api/drones` | 新增无人机(机型、编号必填,编号唯一) |
| PUT | `/api/drones/{id}` | 编辑无人机(机型/链路ID/飞控ID/备注) |
| DELETE | `/api/drones/{id}` | 删除无人机(级联删除其状态记录) |
| GET | `/api/drones/models` | 全部机型列表 |
| POST | `/api/drones/{id}/status` | 修改主状态,写入一条含时间戳的记录 |
| GET | `/api/drones/{id}/history` | 单机完整状态变更记录 |
| DELETE | `/api/drones/{id}/history/{record_id}` | 删除单条状态历史记录 |
| GET/POST | `/api/drones/{id}/flights` | 单机飞行历史列表 / 新增飞行记录 |
| PUT/DELETE | `/api/drones/{id}/flights/{flight_id}` | 修改 / 删除飞行记录 |
| POST | `/api/flights/batch` | 统一添加飞行历史(多个编号批量同步) |
| GET | `/api/flight-matrix?model=&start=&end=` | 飞行透视表(当日飞行次数) |
| GET | `/api/status-matrix?model=&start=&end=` | 按机型返回日期×编号状态矩阵 |
| GET | `/api/export-excel` | 手动导出 `无人机台账.xlsx`(台账 + 状态历史两个 sheet) |
| GET/POST | `/api/status-types` | 状态列表 / 新增自定义状态(name 必填,color 可选自动配色) |
| PUT/DELETE | `/api/status-types/{name}` | 状态改名/改色(改名同步历史)/ 删除(内置与已使用状态不可删) |
交互式接口文档:启动服务后访问
## 目录结构
```
UAVManager/
├── main.py # FastAPI 后端(应用 + 数据库 + API)
├── start.bat # Windows 一键启动脚本
├── README.md
├── uav.db # SQLite 数据库(运行时自动创建)
└── static/ # 前端页面
├── index.html
├── style.css
└── app.js
```