Commit Graph

4616 Commits (3c592887b97b838fd2005910015355e50727a025)

Author SHA1 Message Date
YunaiV 3c592887b9 feat(mes):统一 dv、cal、md 的代码规范 2026-05-24 23:11:02 +08:00
YunaiV 8ab0c53011 Merge remote-tracking branch 'origin/master' into migration
# Conflicts:
#	apps/web-antd/src/views/iot/home/modules/message-trend-card.vue
#	apps/web-antd/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue
#	apps/web-antd/src/views/mes/md/client/components/md-client-select-dialog.vue
#	apps/web-ele/src/views/iot/home/modules/message-trend-card.vue
#	apps/web-ele/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue
#	apps/web-ele/src/views/iot/thingmodel/modules/input-output-param.vue
#	pnpm-lock.yaml
#	pnpm-workspace.yaml
2026-05-24 22:20:36 +08:00
YunaiV 13561b933f feat(mes):优化 cal holiday 的界面,和 vue3 + ep 风格对齐 2026-05-24 22:12:02 +08:00
YunaiV 19911a19c0 feat(mes):统一代码规范,form.vue 的 2026-05-24 21:38:08 +08:00
YunaiV 1edf29abeb fix(iot): 修复设备模拟器属性值类型转换
- 按物模型 dataSpecsList 还原 enum/bool 属性原始值类型
- 保持设备消息筛选和卡片分页与 vue3 + ep 源项目一致
- 更新 IoT bug 状态,归档 B144 并清空剩余 todo
2026-05-24 21:36:33 +08:00
YunaiV 617d50f68f feat(mes):完成 dv 的整体迁移(需要评审) 2026-05-24 20:26:00 +08:00
YunaiV 53a00f6e15 feat(mes):完成 cal plan 【排班计划】的迁移 2026-05-24 20:16:26 +08:00
YunaiV 2bcd81dc94 feat(mes):完成 cal team 【班组】的迁移 2026-05-24 20:12:16 +08:00
YunaiV 858011bfab feat(mes):重构 tm-tool-type-tree.vue 为 list.vue 更合理 2026-05-24 20:00:22 +08:00
YunaiV 48547bc53b fix: 修复 IoT 迁移页面多处交互与契约问题
- 修复告警记录产品/设备筛选联动
- 清理设备详情延迟刷新 timer,避免卸载后触发查询
- 优化 OTA 固件编辑态只读展示与任务列表分页重置
- 修复场景联动值输入回显和布尔值类型
- 修复设备模拟器输入串台、数值类型提交和服务参数校验
- 更新 IoT bug 归档与迁移说明
2026-05-24 19:41:15 +08:00
YunaiV eb0f2a5ff2 feat(mes):tm tool 基本迁移完毕 2026-05-24 19:04:50 +08:00
YunaiV 51a05bfc39 feat(mes):tm tool 的 tm-tool-select.vue 组件 2026-05-24 18:36:20 +08:00
YunaiV 6fb45f1ded fix(iot): 修复场景联动动态列表 key 与校验问题
- 新增 getStableObjectKey,统一处理对象列表 v-for 稳定 key
- 场景联动触发器、执行器、条件组、条件项改用稳定对象 key
- 保持场景规则 API 类型不包含 UI 专用 _key 字段
- 修复场景联动触发器/执行器校验与地图详情跳转
2026-05-24 16:43:02 +08:00
YunaiV aeff25209d fix(iot): 修复 13 处 bug 并完成 codex 三轮收口
按 codex 两轮 review 分批处理 IoT 模块 13 处 bug,对第二轮反馈中
B42/B47 的类型/字段问题做最终收尾,所有修复 web-antd / web-ele 两端同步。

主要修复:
- B91  设备分组:删除前校验 deviceCount,分组下有设备时弹警告
- B40  物模型 array 数据规格:从 Radio.Group @change 事件正确取值(antd)
- B42  物模型属性历史:list 写入时按 idx 生成 _rowKey,模板 row-key="_rowKey"
       list 类型改 IotDeviceApi.DeviceProperty & { _rowKey: string }
       匹配后端 IotDevicePropertyMapper.xml 实际返回的字段
       (修掉 codex 指出的 antd row-key TS2322 与 ele 同毫秒撞键)
- B119 物模型表单:edit 模式禁用 identifier 编辑
- B47  场景规则主条件:产品/设备切换时清 deviceId/identifier/operator/value
       (修掉 codex 指出的 condition.value.param TS2339,Trigger 无 param)
- B44  数据目的数据库配置:SQL 复制按钮 setTimeout 在 onBeforeUnmount 中清理
- B51  场景规则首页统计:total 取接口 result.total,其余基于当前页
- B29  产品卡片视图:图标为 URL 时改用 <img> 渲染,复用 @vben/utils 的 isHttpUrl
- B43  首页设备地图:移除过度设计的 AbortController,回归 vue3 源项目同款
       InfoWindow 监听写法,querySelector 限定到 .BMap_bubble_content 子树
- B105 场景规则设备选择器:productId 变化后旧 deviceId 不在新列表则清空
- B45  通用 key-value 编辑器:v-for key 改用递增的 _uid,避免编辑/删除时 DOM 复用错乱
- B132 设备导入表单:beforeUpload 校验 .xls/.xlsx
- B126 设备详情:四个 tab 子组件 v-if 增加 device.id 守卫

附带工具收敛:
- @vben-core/shared/utils 新增 formatDayjs,统一 antd TimePicker/DatePicker
  value-format 后回传的 Dayjs|string 归一
- 场景规则首页 updateStatistics 补回 JSDoc,对齐文件内其他 function 风格

验证:
- 改动文件 pnpm exec eslint 0 error
- pnpm -F @vben/web-antd / @vben/web-ele exec vue-tsc --noEmit --skipLibCheck
  过滤 src/views/iot/|src/api/iot/ 均 0 hit
2026-05-24 10:11:43 +08:00
YunaiV 241cf76788 fix(iot): 修复 21 处 bug(P1×15 + P2×6)
经 codex 4 轮复评定稿,antd / ele 两端同步。

P1(场景规则 / 物模型 / Modbus / Redis sink / 路由):
- B7/B8 隐藏路由 path 与 activePath 对齐 vue3 源(产品 / OTA 固件详情)
- B9 移除后端不存在的 deleteSceneRuleList 封装
- B10 物模型 number specs 恢复 min/max/step/unit 校验
- B11 物模型新增枚举项补 dataType: ENUM
- B12 物模型 struct 非空校验绑 fieldPath,array 嵌套显式覆盖
       property.dataSpecs.dataSpecsList,确保父表单 validate 触发
- B13 struct 与 input-output-param 编辑回填 cloneDeep,取消不污染原对象
- B14 Modbus Client 模式 ip/port/timeout/retryInterval 改 dependencies 条件必填
- B19 Redis sink 补 dataStructure(默认 Stream)+ Hash/ZSet 条件字段
- B20 仅 ALERT_RECOVER 强校验 alertConfigId,ALERT_TRIGGER 放行
- B21 conditionGroups 递归校验
       · 设备状态/属性 param 必填
       · CURRENT_TIME 按 operator 区分:TODAY 免、BETWEEN_TIME 双段、其它单段
       · 触发器 / 条件 / 执行器 deviceId 改显式 null/undefined 判断,
         保留「全部设备 = 0」(后端 action 支持广播执行)
- B22 事件上报条件改回普通 Input,允许标量值或留空
- B23 antd 当前时间条件 :value / @update:value 绑定 + Dayjs 类型 normalize;
       归一逻辑抽到 @vben/utils.formatDayjs(packages/@core/base/shared/utils/date.ts),
       供所有 app 复用
- B24 设备控制动作切换无条件清依赖,去掉 isInitialized 冗余守卫
- B26 JSON 参数输入先全部校验通过后再写入父表单

P2(产品 / 设备 / 物模型展示 / 数据源):
- B28 产品 deviceType 去默认值,强制用户显式选择
- B30 设备列表 DeviceName 加点击详情 slot
- B31 设备卡片显示备注名称(nickname || deviceName)
- B32 设备详情 hasLocation 改用 != null,合法 0 坐标不再判空
- B41 物模型数据定义展示顺序改为 name-value
- B46 数据源 getData() 剔除仅 UI 用的 identifierLoading 临时字段
2026-05-24 00:32:35 +08:00
YunaiV ef57c96b2f fix(iot): 修复 6 处 bug(P1×5 + P3×1)
- product/product/data.ts: 网关子设备不显示联网方式
  show 条件由 != GATEWAY 改为 != GATEWAY_SUB(原写法漏判子设备)
- home/message-trend-card.vue: onMounted 兜底首次拉取
  ShortcutDateRangePicker 早期 emit 触发的请求落在 useEcharts
  isActiveRef=false 阶段会被静默丢弃;并加 isFirstMount guard 跳过
  子组件首次 emit,消除首次进入的双请求
- ota/firmware/data.ts: FileUpload accept 改回 ['bin','zip','pdf']
  并同步 helpText,对齐 vue3 源约定
- device/device/index.vue: 批量删除补 confirm 二次确认弹窗,
  与 system 模块批删风格一致,避免一键误删
- device/device/detail/modules/modbus-point-form.vue: 字节序仅在
  「为空 / 不属于新 rawDataType 合法选项」才重置,避免编辑回填时
  setValues 触发 handleValuesChange 把已保存字节序覆盖

antd + ele 两端同步。
2026-05-23 22:04:08 +08:00
xingyu4j fb2595ef90 Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin 2026-05-23 18:39:12 +08:00
芋道源码 eaaf55eafa
!346 fix(sms): 修复短信渠道列表展示不一致
Merge pull request !346 from 芋道源码/dev
2026-05-23 08:45:03 +00:00
YunaiV d910450426 fix(sms): 修复短信渠道列表展示不一致 2026-05-23 16:41:36 +08:00
PanFu f813245827
feat: 偏好设置的快捷键列表追加ESC快捷键的控制(关闭当前窗口) (#7947)
* feat: 快捷键追加ESC控制,关闭当前窗口

* feat: 偏好设置中,页面切换动画的颜色看不清的问题(使用当前主题色)

* feat: 三种弹出框支持快捷键ESC动作

* feat: 代码自动格式化(3个框架改动)

* feat: 代码自动格式化(3个框架改动)

* fix: 修正locale数据获取方式

* 单元测试问题修改

* 单元测试问题修改

* fix: 解决代码评论的问题

* fix: 解决代码评论的问题

* fix: 解决代码评论的问题

* fix: 解决代码评论的问题

* 单元测试问题修改

* fix: 解决评论问题

* fix: 解决代码格式导致pnpm run lint报错的问题

---------

Co-authored-by: PanFu <panfu@zhihuaai.com>
2026-05-23 09:50:35 +08:00
芋道源码 cfbd13289f
!345 迁移 wms + iot 部分
Merge pull request !345 from 芋道源码/migration
2026-05-23 01:42:47 +00:00
过冬 e98f0b7558
fix: 移动端禁用混合布局菜单拆分 (#7949) 2026-05-23 04:21:19 +08:00
Reese Wellin cd86de54e1
fix(preferences): 修复主题等个性化信息持久化被初始化配置覆盖 (#7948)
调整 initPreferences 中 merge 顺序,使用户缓存优先于 initialPreferences。

Fixes #7943
2026-05-23 04:17:46 +08:00
YunaiV 152964395d fix(iot): 修复场景联动动作类型切换 + 数据规则弹窗 4 处 bug
- B50 动作类型切换清理失效:updateActionType 先调 onActionTypeChange
  (此时 action.type 仍是旧值)再赋新值;onActionTypeChange 内恒真的
  type !== action.type 简化为 if (action.identifier)
- B16 新增弹窗不重置主表单:onOpenChange 关闭分支补 formApi.resetForm()
- B17 允许空数据源提交:source-config-form.validate() 补空数组校验
- B18 子表单校验 reject 未处理(弹窗关闭不掉):onConfirm 内 try/catch
  包子表单校验,失败 return 中止提交
2026-05-22 20:24:30 +08:00
Jin Mao 60eb1335f8 chore: vite 降级到8.0.10 2026-05-22 13:20:25 +08:00
xingyu f2b3b12553
chore: pnpm v11 (#7942)
* chore: remove rolldown dep

* fix: issues-helper and maintain-one-comment are temporarily disabled due to security issues

* chore: update deps

* fix: change error type to TypeError for non-browser environment check in LocalStorageDriver

* chore: update pnpm v11
2026-05-22 12:02:14 +08:00
layhuts c066889c37
Fix: 在isMobile=true时无法自定义Drawer的class问题 (#7941)
* fix: 在isMobile=true时无法自定义Drawer的class问题

* fix: 在ResizableHandle两边增加边距
2026-05-22 11:56:09 +08:00
YunaiV f8c869f1ff feat(mes):md client select 迁移 2026-05-22 08:41:54 +08:00
YunaiV 00779aacb3 feat(mes): 迁移 cal、dv、tm 的 api 2026-05-22 08:34:47 +08:00
928646789 6b81d1b0d5
fix: preferences-button click to show setting drawer (#7938) 2026-05-22 07:26:12 +08:00
afe1 126b33687a
chore: vite config tsconfig include (#7936)
* fix: catelog

* fix: system

* fix(vite-config): include tsdown config in tsconfig
2026-05-22 07:25:50 +08:00
YunaiV 9d665bd6b9 docs(iot): 新增 codex 评审入口 + 登记异步竞态不修决策
- review-for-codex.md:本轮修复背景 + 决策 + 文件清单 + 给 codex
  的 5 项重点关注。与 bug.md(待修源头) / bug_ignore.md(不修登记)
  形成三文件分工,后续 codex / 二次评审不会丢上下文
- bug_ignore.md/I-1:登记 scene 表单 3 处异步竞态(property-selector
  / device-selector / device-control-config 的 watch 异步加载)不修决策。
  评估理由:触发窗口极窄、低频操作、~40 行 epoch 模板代码成本不匹配、
  vue3 源也未做。复评条件:API 层接入 AbortController 时顺手补、
  用户实际反馈、改后端 push 模式
2026-05-21 21:26:36 +08:00
Jin Mao 5b67c2e740 chore: 更新pnpm-lock 2026-05-21 20:44:38 +08:00
Jin Mao 2d7c3c3072 chore: 更新pnpm-lock 2026-05-21 20:40:49 +08:00
Jin Mao 5cc68c9dd0 chore: 更新 vite 依赖版本
- 将 vite 版本从 ^8.0.13 降级到 ^8.0.10
- 保持其他依赖包版本不变
2026-05-21 20:22:28 +08:00
YunaiV df8e23542b fix(iot): 修复 scene 表单 vue-tsc 3 处类型错误
- ele device-control-config:
  - defaultParams 类型显式为 Record<string, any> ;
    param.identifier 可能为 undefined 时跳过赋值
  - ElOption :value="service.identifier" 改为非空断言 service.identifier!
- ele json-params-input:getParamTypeTag 用 as const 让 TS 自动推断字面值
  联合('primary' | 'success' | 'info' | 'warning' | 'danger'),传给
  ElTag.type 不再报错
- antd value-input:handleNumberChange 参数改为 any 内部 String 转换
  (AntD InputNumber @change 类型为 ValueType = string | number ,
   原 number | undefined 报错)
2026-05-21 19:58:33 +08:00
YunaiV e7361a60ec feat(iot):md 模块,支持生成 2026-05-21 18:48:57 +08:00
YunaiV 66843f2392 chore(iot): 数组回调缩写参数展开为完整业务命名
- products.find((p)) → ((product)),propertyList.find((p)) → ((property))
  等:把 .find / .filter / .map / .reduce 的单字母回调参数 (p / d / s / g / v
  / acc / val) 全部展开为 product / device / service / group / value /
  total 等完整命名
- 涉及 web-antd 与 web-ele 两侧 :device 列表 / 卡片 / 物模型属性历史 /
  ota 固件 / 场景执行器服务选择 / 属性选择器 / 产品选择组件
- 外层已绑定同名变量的场景,回调形参用 item 避免命名重复
2026-05-21 18:46:59 +08:00
YunaiV 83bf576daf feat(mes): rename field 'level' to 'configLevel' for clarity 2026-05-21 17:45:25 +08:00
YunaiV 2a97bed546 feat(mes): 移除多余 defineOptions 2026-05-21 17:36:30 +08:00
YunaiV c8ce1a8911 fix(iot): 设备配置详情统一 460px 高度 + 按钮加 8px 间距,卡片视图删除按钮改 !h-8 对齐其它按钮高度 2026-05-21 17:27:17 +08:00
YunaiV d1a2601b6c fix(iot): alert 模块对齐后端 VO + 搜索体验对齐 vben 实践(P1)
- alert/config API 删除多余字段 updateTime
- alert/record API 删除多余字段 deviceName / productName / processTime
- alert/record 搜索表单告警级别字段 configLevel → level ,
  对齐后端 IotAlertRecordPageReqVO.level(之前提交后端不会按级别筛选)
- alert/record 搜索表单设备字段改用 ApiSelect + getSimpleDeviceList 全量加载,
  showSearch / filterable 模糊搜索,对齐 vben 项目 13+ 处 ApiSelect 主流实践
- alert/config + alert/record 列表移除空跑 checkbox 列(无批量删除接口)
2026-05-21 16:39:30 +08:00
YunaiV d2587c17b0 fix: iot 固件的优化 2026-05-21 15:11:01 +08:00
YunaiV 33cdfcac3c feat(im): 修管理端 3 处:群消息 atUserNicknames 类型允许 null、移除前端无效的「消息内容」查询入口、表情包宽高加表单校验 2026-05-21 15:10:22 +08:00
YunaiV 58f2e23654 fix: iot 补齐 vue3 源缺失的表单校验(P1)
- 物模型功能定义「数据类型」字段补 required 必填校验
- 产品选择器(ProductSelect)补搜索能力:antd 加 show-search + option-filter-prop ,ele 加 filterable
- 设备表单 onConfirm 增加 advancedFormApi.validate() 调用,
  否则高级表单(含经纬度等字段)的 schema rules 不会触发
- 设备经纬度增加「成对填写」跨字段校验:仅填一项时给 warning 提示,
  与 vue3 源 DeviceForm.vue 行为对齐
2026-05-21 14:43:06 +08:00
YunaiV d207e3b82c feat(mes): 优化 md 基础模块的迁移 2026-05-21 13:23:33 +08:00
YunaiV 1afa70bb53 fix: iot 二次确认统一改用 popconfirm 模式(P1)
- 设备详情「配置推送」按钮包 Popconfirm / ElPopconfirm,防误下发
- 场景联动列表 TableAction 启用 / 停用项改用 popConfirm 配置
- 产品详情头部「发布 / 撤销发布 / 同步物模型表结构」三处按钮同步切换
- 移除命令式 Modal.confirm / ElMessageBox.confirm,与 system / iot 现有惯例一致
- 顺带消除 ele 端 ElMessageBox.confirm 取消未 catch 的未处理 promise
2026-05-21 12:44:12 +08:00
YunaiV 751ba2c782 feat(mes): 迁移工作站管理及设备、工具、人员关联 2026-05-21 11:10:21 +08:00
YunaiV 057ca0bfde refactor: 收敛 iot rule/scene API 的重复类型声明(P1)
- antd / ele api/iot/rule/scene,删除外层重复的 4 个 interface
- createSceneRule / updateSceneRule 入参改用 RuleSceneApi.SceneRule
- 业务文件 import 统一改用 RuleSceneApi.SceneRule / Trigger / TriggerCondition / Action
- 清理 2 处 TODO @haohao 残留注释

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 11:01:09 +08:00
YunaiV df720b2c1a style: 应用 lint 格式化到 ele scene 设备控制 / 属性选择器组件
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 10:44:32 +08:00