120 lines
4.7 KiB
Markdown
120 lines
4.7 KiB
Markdown
|
|
# 任务004:组织架构管理
|
|||
|
|
|
|||
|
|
## 目标
|
|||
|
|
|
|||
|
|
实现组织、项目、设备的增删改查,树状菜单展示,设备划拨功能。
|
|||
|
|
|
|||
|
|
## 后端API
|
|||
|
|
|
|||
|
|
### 组织管理
|
|||
|
|
```
|
|||
|
|
GET /api/organizations # 组织列表
|
|||
|
|
POST /api/organizations # 创建组织
|
|||
|
|
PUT /api/organizations/:id # 更新组织
|
|||
|
|
DELETE /api/organizations/:id # 删除组织
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 项目管理
|
|||
|
|
```
|
|||
|
|
GET /api/organizations/:org_id/projects # 项目列表(按组织)
|
|||
|
|
POST /api/organizations/:org_id/projects # 创建项目
|
|||
|
|
PUT /api/projects/:id # 更新项目
|
|||
|
|
DELETE /api/projects/:id # 删除项目
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 设备管理
|
|||
|
|
```
|
|||
|
|
GET /api/projects/:project_id/cabinets # 柜子列表(按项目)
|
|||
|
|
POST /api/cabinets # 添加柜子(支持批量IMEI)
|
|||
|
|
PUT /api/cabinets/:id # 更新柜子(划拨项目)
|
|||
|
|
DELETE /api/cabinets/:id # 删除柜子
|
|||
|
|
POST /api/cabinets/:id/regenerate-auth # 重新生成auth_str
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 树状结构
|
|||
|
|
```
|
|||
|
|
GET /api/organization-tree # 返回完整树:组织→项目→设备
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
返回格式:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"id": 1,
|
|||
|
|
"name": "组织A",
|
|||
|
|
"children": [
|
|||
|
|
{
|
|||
|
|
"id": 1,
|
|||
|
|
"name": "项目1",
|
|||
|
|
"children": [
|
|||
|
|
{"id": 1, "abstract_id": "10-00000001", "imei": "123456789012345", "status": 1}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 前端页面
|
|||
|
|
|
|||
|
|
### 设备管理页
|
|||
|
|
|
|||
|
|
**布局:**
|
|||
|
|
```
|
|||
|
|
┌─────────────────┬──────────────────────────────────
|
|||
|
|
│ 组织架构树 │ 卡片网格 │
|
|||
|
|
│ ├─ 全部 │ ┌─────┐ ┌─────┐ ┌─────┐ │
|
|||
|
|
│ ├─ 组织A │ │柜子1 │ │柜子2 │ │柜子3 │ │
|
|||
|
|
│ │ ├─ 项目1 │ │ID │ │ID │ │ID │ │
|
|||
|
|
│ │ └─ 项目2 │ │状态 │ │状态 │ │状态 │ │
|
|||
|
|
│ ─ 组织B │ └─────┘ └─────┘ └─────┘ │
|
|||
|
|
│ │ │
|
|||
|
|
└─────────────────┴──────────────────────────────────┘
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**左侧树:**
|
|||
|
|
- 显示组织→项目→设备树状结构
|
|||
|
|
- 右键菜单:添加组织、添加项目、编辑、删除
|
|||
|
|
- 点击节点过滤右侧卡片
|
|||
|
|
|
|||
|
|
**右侧卡片:**
|
|||
|
|
- 显示柜子ID、状态(在线/离线/充电中/故障)
|
|||
|
|
- 点击卡片进入柜子详情页
|
|||
|
|
|
|||
|
|
### 柜子详情页
|
|||
|
|
|
|||
|
|
**布局:**
|
|||
|
|
```
|
|||
|
|
┌──────────────────────────────────────────────┐
|
|||
|
|
│ ← 返回 柜子10-00000000 状态: 在线 │
|
|||
|
|
├──────────────────────────────────────────────┤
|
|||
|
|
│ 仓板1 (ID:1) │
|
|||
|
|
│ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐│
|
|||
|
|
│ │通道1 │ │通道2 │ │通道3 │ │通道4 │ │通道5 │ │通道6 ││
|
|||
|
|
│ │状态 │ │状态 │ │状态 │ │状态 │ │状态 │ │状态 ││
|
|||
|
|
│ │电压 │ │电压 │ │电压 │ │电压 │ │电压 │ │电压 ││
|
|||
|
|
│ │电流 │ │电流 │ │电流 │ │电流 │ │电流 │ │电流 ││
|
|||
|
|
│ │功率 │ │功率 │ │功率 │ │功率 │ │功率 │ │功率 ││
|
|||
|
|
│ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘│
|
|||
|
|
├──────────────────────────────────────────────┤
|
|||
|
|
│ 仓板2 (ID:2) ... │
|
|||
|
|
└──────────────────────────────────────────────
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**通道卡片显示:** 工作状态、电压、电流、功率
|
|||
|
|
|
|||
|
|
**点击通道 → 模态框显示充电记录**
|
|||
|
|
|
|||
|
|
### 添加柜子弹窗
|
|||
|
|
|
|||
|
|
- 文本框输入IMEI,一行一个(支持批量)
|
|||
|
|
- 选择所属组织/项目
|
|||
|
|
- 提交后后端生成auth_str
|
|||
|
|
|
|||
|
|
## 质量约束
|
|||
|
|
|
|||
|
|
1. 完成代码后执行 `cargo check` + `tsc --noEmit`,零报错零警告
|
|||
|
|
2. 分层拆分,单函数≤80行,命名语义化,完整注释
|
|||
|
|
3. 所有外部IO/网络请求异常捕获,禁止裸panic
|
|||
|
|
4. 分支逻辑全覆盖,不遗漏兜底分支
|
|||
|
|
5. 常量抽离,不使用废弃API
|
|||
|
|
6. Rust内存安全,React函数组件+Hooks
|