Files
iot-device-management-frontend/apps/web-antd/src/locales/langs/zh-CN/page.json
lzh 887e51eaaa [F11] 设备查询页 subsystemId 筛选 + 未归属标签
- apps/web-antd/src/api/iot/device/device/index.ts
  - Device 接口加 subsystemId/subsystemName
  - 新增 BindSubsystemReqVO + bindDeviceSubsystem (PUT /iot/device/bindSubsystem)
- apps/web-antd/src/views/iot/device/device/index.vue
  - 筛选器:子系统下拉 + 未归属哨兵 -1 (→ queryParams.unassigned=true)
  - 单设备/批量绑定弹窗,批量 100 台/批
  - 行操作 + TableAction 增加"绑定子系统"按钮 (auth: iot:device:update)
- apps/web-antd/src/views/iot/device/device/data.ts
  - useGridColumns 追加"所属子系统"列 (slot: subsystem)
- apps/web-antd/src/views/iot/device/device/modules/card-view.vue
  - 卡片视图加子系统信息行 + 未归属红标签
  - Props 透传 subsystems / searchParams.subsystemId / unassigned
- apps/web-antd/src/views/iot/device/device/__tests__/device-subsystem-filter.spec.ts
  - 14 用例: 筛选参数转换 / 未归属标签条件 / 批量分批逻辑
- locales/langs/{zh-CN,en-US}/page.json: iot.device.filter.subsystem.* 12 键同步
- Known Pitfalls 落地: 评审 A2 NULL 醒目红标签 / 哨兵 -1 → unassigned=true /
  批量 100 台分批 / iot:device:update 权限 / simple-list 加载静默降级

后端 B11 API 补充契约:
- GET /iot/device/page?unassigned=true (subsystemId IS NULL 过滤)
- PUT /iot/device/bindSubsystem { deviceId, subsystemId: number | null }
- 分页响应 Device 含 subsystemId?: number | null + subsystemName?: string

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 23:02:01 +08:00

271 lines
8.7 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"auth": {
"login": "登录",
"register": "注册",
"codeLogin": "验证码登录",
"qrcodeLogin": "二维码登录",
"forgetPassword": "忘记密码",
"profile": "个人中心"
},
"dashboard": {
"title": "概览",
"analytics": "分析页",
"workspace": "工作台"
},
"action": {
"action": "操作",
"add": "新增",
"edit": "编辑",
"delete": "删除",
"save": "保存",
"import": "导入",
"export": "导出",
"submit": "提交",
"cancel": "取消",
"confirm": "确认",
"reset": "重置",
"search": "搜索",
"more": "更多"
},
"tenant": {
"placeholder": "请选择租户",
"success": "切换租户成功"
},
"mp": {
"upload": {
"invalidFormat": "上传{0}格式不对!",
"maxSize": "上传{0}大小不能超过{1}M!",
"image": "图片",
"video": "视频",
"voice": "语音"
}
},
"iot": {
"device": {
"filter": {
"subsystem": {
"placeholder": "全部子系统",
"unassigned": "未归属",
"bind": "绑定子系统",
"bindTitle": "绑定子系统",
"batchBind": "批量绑定子系统",
"batchBindTitle": "批量绑定子系统",
"batchBindSuccess": "已成功绑定 {0} 台设备",
"bindSuccess": "绑定成功",
"selectRequired": "请先选择子系统",
"selectDeviceTip": "请先选择要绑定的设备",
"binding": "正在绑定...",
"batchBindHint": "已选 {0} 台设备,每批最多 100 台"
}
}
},
"subsystem": {
"title": "子系统",
"listTitle": "子系统列表",
"name": "子系统名称",
"namePlaceholder": "请输入子系统名称",
"nameRequired": "子系统名称不能为空",
"nameTooLong": "子系统名称长度不能超过 128 个字符",
"code": "子系统编码",
"codePlaceholder": "请输入编码,如 security、clean",
"codeRequired": "子系统编码不能为空",
"codeTooLong": "子系统编码长度不能超过 64 个字符",
"codeFormat": "编码格式错误:仅允许小写字母/数字/下划线,且以字母开头",
"codeHelp": "格式:小写字母开头,允许数字和下划线,如 clean_01",
"status": "状态",
"statusEnabled": "启用",
"statusDisabled": "禁用",
"statusPlaceholder": "请选择状态",
"icon": "图标",
"iconPlaceholder": "图标 URL 或 iconify 名称",
"description": "描述",
"descriptionPlaceholder": "请输入子系统描述",
"deviceCount": "设备数",
"searchPlaceholder": "搜索名称 / 编码",
"viewDevices": "查看设备",
"deleteDisabledTip": "子系统下有 {0} 台设备,无法删除",
"deviceListTitle": "子系统设备列表",
"deviceName": "设备名称",
"serialNumber": "序列号",
"deviceState": "在线状态",
"deviceOnline": "在线",
"deviceOffline": "离线",
"deviceSearchPlaceholder": "搜索设备名称",
"statTotal": "设备总数",
"statOnline": "在线设备",
"statAlarm": "告警设备",
"statsNotice": "统计数据由 Redis 缓存提供,可能有短暂延迟(⚠️ A6",
"batchBind": "批量绑定设备",
"batchBindHint": "每批最多支持 100 台设备同时绑定",
"bindSuccess": "已成功绑定 {0} 台设备",
"selectDeviceTip": "请先选择要绑定的设备",
"unbind": "移除",
"unbindConfirm": "确认将设备「{0}」从当前子系统移除?",
"unbinding": "正在移除设备...",
"unbindSuccess": "设备已移除",
"transferCandidate": "候选设备",
"transferSelected": "已选设备"
},
"dag": {
"toolbar": {
"zoomIn": "放大",
"zoomOut": "缩小",
"fitView": "适应视图",
"undo": "撤销 (Ctrl+Z)",
"redo": "重做 (Ctrl+Y)",
"save": "保存"
},
"canvas": {
"readonly": "只读模式",
"empty": "拖拽节点到画布开始编排"
},
"panel": {
"title": "节点类型",
"searchPlaceholder": "搜索节点...",
"loading": "加载中...",
"loadError": "加载失败,请刷新重试",
"noMatch": "未找到匹配节点",
"category": {
"trigger": "触发器",
"condition": "条件",
"action": "动作"
}
},
"node": {
"device_state": {
"name": "设备状态",
"desc": "设备上线/下线时触发"
},
"device_property": {
"name": "设备属性上报",
"desc": "设备属性数据上报时触发"
},
"device_event": {
"name": "设备事件",
"desc": "设备上报事件时触发"
},
"device_service": {
"name": "设备服务调用",
"desc": "设备服务被调用时触发"
},
"timer": {
"name": "定时触发",
"desc": "按 Cron 表达式定时触发"
},
"expression": {
"name": "表达式判断",
"desc": "Aviator 表达式计算条件"
},
"time_range": {
"name": "时间段判断",
"desc": "判断当前时间是否在指定范围"
},
"condition_device_state": {
"name": "设备状态判断",
"desc": "判断设备当前在线状态"
},
"property_set": {
"name": "下发属性",
"desc": "向设备下发属性设置指令"
},
"service_invoke": {
"name": "调用服务",
"desc": "调用设备服务"
},
"alarm_trigger": {
"name": "触发告警",
"desc": "触发设备告警"
},
"alarm_clear": {
"name": "清除告警",
"desc": "清除设备告警"
},
"notify": {
"name": "发送通知",
"desc": "发送消息通知(短信/邮件/webhook"
}
}
},
"alarm": {
"state": {
"archived": "已归档",
"activeUnacked": "活跃·未确认",
"activeAcked": "活跃·已确认",
"clearedUnacked": "已清除·未确认",
"clearedAcked": "已清除·已确认",
"unknown": "未知"
},
"severity": {
"critical": "紧急",
"major": "重要",
"minor": "次要",
"warning": "警告",
"info": "信息",
"unknown": "未知"
},
"list": {
"title": "告警记录"
},
"field": {
"alarmName": "告警名称",
"severity": "严重度",
"state": "状态",
"deviceName": "设备",
"productName": "产品",
"triggerCount": "触发次数",
"startTs": "首次触发",
"endTs": "最近触发",
"clearTs": "清除时间",
"ackTs": "确认时间"
},
"filter": {
"all": "全部",
"ackState": "确认状态",
"clearState": "清除状态",
"archived": "归档",
"unacked": "未确认",
"acked": "已确认",
"active": "活跃",
"cleared": "已清除",
"excludeArchived": "排除归档",
"allRecords": "全部记录",
"onlyArchived": "只看归档"
},
"op": {
"ack": "确认",
"unack": "撤销确认",
"clear": "清除",
"archive": "归档",
"noOps": "无可操作",
"confirmTitle": "操作确认",
"ackConfirm": "确认该告警?",
"unackConfirm": "撤销确认该告警?",
"clearConfirm": "清除该告警?",
"archiveConfirm": "归档该告警?归档后不可操作。",
"batchAck": "批量确认",
"batchClear": "批量清除",
"batchArchive": "批量归档",
"batchAckConfirm": "确认选中的 {count} 条告警?",
"batchClearConfirm": "清除选中的 {count} 条告警?",
"batchArchiveConfirm": "归档选中的 {count} 条告警?归档后不可操作。",
"selectFirst": "请先选择记录",
"ackSuccess": "确认成功",
"unackSuccess": "撤销确认成功",
"clearSuccess": "清除成功",
"archiveSuccess": "归档成功"
},
"detail": {
"title": "告警详情",
"basicInfo": "基本信息",
"propagationPath": "传播路径",
"details": "告警详情",
"remark": "处理备注",
"remarkPlaceholder": "请输入处理备注",
"remarkSaved": "备注已保存",
"history": "历史变化",
"noHistory": "暂无历史记录"
}
}
}
}