4.7 KiB
4.7 KiB
设备管理模块 Spec
Why
现有系统仅有 customer_equipment(客户设备台账)和 smart_device(智电设备型号目录)两张数据库表及 /device 占位路由(Placeholder.vue),设备管理功能尚未实现。需依据系统设计文档构建设备管理模块的完整前后端实现,统一安全管理并兼容 APP 调用。
What Changes
- 新增客户设备台账模块:设备 CRUD、按客户关联过滤、展示归属建筑/楼层/位置、设备照片上传。
- 新增智电设备型号目录模块:型号 CRUD、类型字典。
- 新增空间拓扑与用电架构:复用现有
customer/topology页面,将设备台账按建筑/楼层进行拓扑化展示(前端展示为主,复用现有设备数据接口)。 - 替换
/device占位路由为真实的设备管理页面入口。 - 后端接口统一 JWT + RBAC 鉴权(覆盖所有设备模块端点),接口保持标准 RESTful JSON(兼容 APP)。
- 安全基线:防 SQL 注入(参数化查询/Sequelize 参数绑定、禁止字符串拼 SQL),防 XSS(前端统一转义输出、后端对输入做校验与白名单)。
- 前端页面样式参考客户管理模块样式(
client/src/views/customer/**)。
Impact
- 影响数据库表:现有
customer_equipment、smart_device(不新增表,不强改已有字段,若需补充字段走 migration)。 - 新增后端文件:
customer_equipment与smart_device的 controller / service / dto / entity。 - 新增前端文件:设备台账页面、设备型号目录页面、对应 api 封装、路由调整。
- 复用现有:
customer_building、customer_room、鉴权中间件(auth/rbac)、上传能力。
ADDED Requirements
Requirement: 客户设备台账管理
系统 SHALL 提供客户设备台账的增删改查、分页列表、按客户过滤、按建筑/楼层/位置筛选。
- 设备字段:设备编码(唯一)、客户ID、设备名称、设备类型(配电间/配电井/配电箱)、所属建筑、楼层、位置、描述、备注、照片。
- 设备编码唯一性校验,重复需返回明确错误。
Scenario: 查询列表
- WHEN 用户带
customerId与分页参数请求设备台账列表 - THEN 返回该客户下已关联的设备分页数据,并按创建时间倒序
Scenario: 创建/更新设备
- WHEN 用户提交设备表单
- THEN 系统校验必填字段与设备编码唯一性后写入数据库,并关联客户
Scenario: 删除设备
- WHEN 用户删除某设备
- THEN 系统删除该设备记录
Requirement: 智电设备型号目录
系统 SHALL 提供智电设备型号的增删改查与分页列表,类型字段使用设备类型字典(网关/探测器/采集器等)。
Scenario: 型号列表与维护
- WHEN 用户访问型号目录并执行 CRUD
- THEN 型号数据正确维护,类型展示为可读字典名称
Requirement: 空间拓扑与用电架构
系统 SHALL 提供设备在空间(建筑→楼层→位置)下的拓扑化展示,复用现有拓扑页面能力,设备数据来源于设备台账接口。
Scenario: 查看某客户空间拓扑
- WHEN 用户进入某客户的空间拓扑页
- THEN 按建筑/楼层聚合展示设备位置与用电结构
Requirement: 接口鉴权与 APP 兼容
系统 SHALL 对所有设备相关 /api/* 端点启用 JWT + RBAC 鉴权;接口保持标准 RESTful JSON 返回,兼容后端 web 前端与 APP 直接调用。
Scenario: 未授权访问
- WHEN 请求未携带有效 token
- THEN 返回 401,不返回业务数据
Scenario: 无权限访问
- WHEN 已登录但角色无对应权限码
- THEN 返回 403
Requirement: 防 SQL 注入与防 XSS
系统 SHALL 使用参数化查询(Sequelize 参数绑定),禁止通过字符串拼接 SQL;对所有用户可控输入在写入前做校验与过滤,前端展示输出统一转义以防 XSS。
Scenario: 恶意输入处理
- WHEN 用户提交含 SQL 注入或脚本片段的输入
- THEN 输入被当作普通数据安全落库或拦截,前端展示不执行任何脚本
MODIFIED Requirements
Requirement: 设备监控占位路由
client/src/router/index.ts 中 /device(name: Device, permission: device:list)占位组件从 Placeholder.vue 替换为真实设备管理入口。
REMOVED Requirements
(无)
参考实现
- 后端结构参考:
server/src/controller/customer.controller.ts及 service/dto/entity 目录。 - 前端样式参考:
client/src/views/customer/info/index.vue、client/src/api/customer.ts。 - 鉴权中间件:
server/src/middleware/auth.middleware.ts、server/src/middleware/rbac.middleware.ts。