# IT 设备资产管理系统 基于 Next.js + SQLite 的 IT 设备资产管理系统(CMDB),域名为 `assets.tlyq.ai`,管理 GPU 服务器、存储服务器等 120+ 台设备的硬件信息,通过 REST API 对外提供服务。 ## 技术栈 | 分类 | 技术 | |------|------| | 框架 | Next.js 15 + TypeScript | | UI | React 19 + Tailwind CSS v4 + lucide-react | | 数据库 | SQLite(better-sqlite3,WAL 模式) | | 认证 | JWT(cookie 方式)+ 自定义 session + API Key | ## 功能 - 设备 CRUD(创建、编辑、删除、搜索、列筛选、高级查询) - 设备状态管理(腾讯使用 / 图灵使用 / 闲置 / 备用 / 维修中 / 已下线) - 设备详情(含完整硬件信息、历史工单卡片) - 批量编辑(多选设备批量修改类型、位置、状态等) - Excel 导入/导出(模板下载、多选导出、全量导出权限控制) - 工单历史联动(调用 issue-ai API 获取同 IP 历史工单) - API Key 管理(支持服务间调用认证,细粒度权限控制) - 用户/角色权限管理(12 个细粒度权限,支持自定义角色) - 审计日志 ## 设备字段 | 分类 | 字段 | |------|------| | 设备标识 | node_name、serial_number、device_type、device_purpose、status | | 位置信息 | room、rack_position | | 网络 | business_ip、hdm_ip、NIC×3(型号/类型/速率/数量) | | 硬件规格 | manufacturer、device_model、warranty_date | | CPU/内存 | cpu_model、cpu_generation、cpu_cores、cpu_threads、memory_total 等 | | GPU | gpu_model、gpu_power、gpu_count | | 存储 | sys_disk、data_disk1/2(型号/规格/容量/类型/协议)、raid_model、raid_spec | | 电源 | psu1/2_model、psu1/2_power、psu_total_power | 完整 schema 含 68 列硬件字段,详见 `src/lib/db-schema.ts`。 ## API 路由 | 方法 | 路径 | 说明 | |------|------|------| | GET/POST | `/api/assets` | 设备列表(分页/搜索/列筛选/排序)/ 创建设备 | | GET/PUT/DELETE | `/api/assets/[id]` | 单个设备操作 | | POST | `/api/assets/batch` | 批量修改设备 | | POST | `/api/assets/import` | Excel 导入 | | GET | `/api/assets/export` | Excel 导出 | | GET | `/api/assets/field-values` | 获取字段可选值(列筛选下拉) | | GET | `/api/stats` | 统计概览(按状态/类型/厂商/机房) | | GET/POST | `/api/api-keys` | API Key 列表 / 创建(仅显示一次) | | DELETE | `/api/api-keys/[id]` | 删除 Key | | GET/POST | `/api/users` | 用户列表 / 创建 | | GET/PUT/DELETE | `/api/users/[id]` | 单个用户操作 | | GET/POST | `/api/roles` | 角色列表 / 创建 | | PUT/DELETE | `/api/roles/[id]` | 更新角色权限 / 删除角色 | | POST | `/api/auth/login` | 登录 | | POST | `/api/auth/logout` | 登出 | | GET | `/api/auth/me` | 当前用户信息及权限 | …… ## 与 issue.tlyq.ai 联动 assets-ai 向 issue-ai 提供设备信息,issue-ai 在工单管理中根据 IP 自动关联设备并展示详情卡片。同时 assets-ai 设备详情页调用 issue-ai API 展示同 IP 历史工单。 ``` issue-ai ──→ GET /api/assets?search=IP (获取设备信息) assets-ai ──→ GET /api/tickets/by-asset?ip=X (获取历史工单) ``` 认证方式:双向 API Key(`Authorization: Bearer ak_xxx`)。