charging-cabinet/tasks/004-organization-management.md
2026-07-02 05:38:01 +08:00

4.7 KiB
Raw Blame History

任务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    # 返回完整树:组织→项目→设备

返回格式:

{
  "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