# 任务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