From 0beea4d461543d862a043f7423ce1d9e31ea210a Mon Sep 17 00:00:00 2001 From: XieYongHong <18010623010@163.com> Date: Thu, 1 Aug 2024 14:50:54 +0800 Subject: [PATCH] release: 2.2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 优化docker * fix: 修复用户管理查询条件在..中,不在..中无效问题 * fix: 删除FRuleEditor多余文件 * fix: 修复产品进行规则属性调试时,部分内容无法调试成功 * fix: bug#25001 * fix: 优化物联卡详情仪表盘显示异常;修改菜单拖拽排序 * fix:bug#25001 * fix: 优化物联卡详情仪表盘显示异常 * fix: 修改菜单拖拽排序 * fix: 24641、24804、25111、22958、24806、25377、25597、24628、25704、24545、24479 * fix: 优化物联卡批量导入数量统计;优化物联卡状态查询列表 * fix: 24641、24804、25111、22958、24806、25377、25597 * fix: 24628 * feat: 修改区域管理删除逻辑 * fix: 24628、25704 * fix: 24545 * fix: bug#25414 * fix: bug#24479 * fix: bug#23410 * fix: bug#24404 * fix: bug#25374 * fix: bug#25062 * fix: bug#25062 * fix: bug#22409 * fix: bug#25525、26083 * fix: bug#25525、26083 Co-authored-by: leiqiaochu * fix: bug#26186 * fix: bug#26233 * fix: bug#26233 * feat: 物模型-功能定义、事件定义添加【其它配置】 * feat: 新增metadataTable组件;新增虚拟滚动table功能;优化物模型右键菜单;优化物模型搜索;优化物模型拓展配置 * feat: 新增metadataTable组件 * feat: 新增虚拟滚动table功能 * fix: 优化虚拟滚动 * fix: 优化物模型属性、功能、事件、标签组件 * fix: 优化物模型右键菜单 * feat: 新增右键功能 * fix: 优化虚拟滚动 * fix: 优化物模型其它配置参数 * fix: 优化物模型搜索;优化物模型拓展配置 * fix: 优化存储方式导致物模型无法新增、修改提示语 * fix: 优化存储方式导致物模型无法新增、修改提示语 * feat: 新增日历维护管理 * feat: 日历维护日历组件 * feat: 日历维护新增标签 * feat: 日历维护左侧标签树新增功能 * feat: 日历维护左侧标签树 * feat: 日历维护左侧标签功能 * feat: 日历维护 * feat: 日历维护日历功能 * feat: 日历维护添加标签功能 * feat: 日历维护模块 * feat: 修改日历组件交互逻辑 * feat: 修改日历维护组件 * feat: 日历维护tips * feat: 封装日历预览组件 * feat: 日历维护数据请求逻辑 * feat: 修改请求逻辑及快速跳转功能 * feat: 远程升级交互修改 * style: 远程升级交互修改 * style: 远程升级模块交互修改 * style: 远程升级关闭单个升级记录 * feat: 新增批量操作后更新状态逻辑 * fix: 修改任务详情交互逻辑 * fix: 修改远程升级权限按钮 * style: 远程升级抽屉无数据样式 * style: 修改升级任务详情滚动样式 * fix: 新建远程升级任务接口传参 * update: 场景联动-时间添加Calendar组件;优化场景联动多条件;优化场景联动样式 * feat: 场景联动-时间添加Calendar组件 * fix: 优化场景联动多条件 * fix: 优化场景联动绑定告警配置 * update: 对接场景联动-执行动作绑定告警新接口 * update: 场景联动-定时触发新增自定义日历 * fix: 优化场景联动-自定义日历标签下拉筛选 * fix: 优化场景联动-自定义日历标签数据回显异常 * fix: 优化场景联动-说明排版及样式 * fix: 优化场景联动样式 * fix: 优化物模型编辑状态校验逻辑;优化场景联动-执行动作绑定告警查询条件 * fix: 优化物模型编辑状态校验逻辑 * fix: 优化场景联动-执行动作绑定告警查询条件 * fix: 优化物模型其它配置tag显示 * fix: 优化设备物模型-继承属性删除限制 * update: 告警记录优化 * feat: 告警记录 * feat: 抽屉蒙层关闭 * feat: 告警记录 * feat: 告警记录功能开发 * feat: 告警记录基础功能 * feat: 告警日志跳转设备逻辑 * feat: 提取计算时间差组件 * feat: 删除冗余代码 * fix: 修复执行动作-设备-无法选择内置属性 * fix: 修复执行动作-通知-无法选择固定邮箱 * fix: 修复执行动作-通知-固定邮箱校验提示 * feat: 新增设备详情告警列表 * feat: 抽屉蒙层关闭 * feat: 告警记录功能开发 * feat: 告警记录基础功能 * feat: 告警日志跳转设备逻辑 * feat: 设备详情告警列表 * feat: 提取计算时间差组件 * feat: 产品告警列表和设备告警列表 * feat: 产品请求数据逻辑 * feat: 基础配置增加部分配置项 * update: 取消地图不填写key兼容 * feat: 告警等级请求优化 * feat: 新增视频插件接入和视频插件网关 * feat: 视频接入 * feat: 视频插件接入和视频插件网关 * update: 优化告警配置新增场景联动逻辑 * update: 优化告警配置新增场景联动逻辑 * update: 优化告警配置新增场景联动逻辑 * update: 优化告警配置关联场景联动 * update: 优化告警配置关联场景联动; 修复部分场景联动bug * update: 优化告警配置-关联场景联动取消关联操作 * feat: 新增设备物联卡 * feat: 物联网卡 * feat: 设备物联卡 * fix: bug#26868、26876、26860、26869 * fix: bug#26868、26876、26876、26860 * fix: bug#26869 * update: 优化地区管理 * update: 优化地区管理 * bug#27400、27423、27035、26867、27395 * fix: bug#27395 * fix: bug#27400、27423 * fix: bug#27035 * fix: bug#26867 * fix: 优化代码逻辑 * fix: 优化登录页面挂载久了之后无法登录;修复执行动作-触发告警-关联告警,关联告警弹窗中搜索项未调用接口 * fix: 优化登录页面挂载久了之后无法登录 * fix: 修复执行动作-触发告警-关联告警,关联告警弹窗中搜索项未调用接口 * fix: bug#27018 * fix: bug#27019 * fix: 优化告警卡片样式 * fix: bug#27029 * fix: 优化主题色 * fix: 修复设备物模型无法保存 * update: 优化告警配置删除交互逻辑 * fix: bug#26877 * feat: 修改告警配置删除交互逻辑 * fix: 修改请求判断条件及提示语句 * fix: bug#27220物模型-标签 删除读写类型;bug#27217修复设备物模型保存之后继承的物模型变为可编辑状态问题 * fix: bug#27220物模型-标签 删除读写类型 * fix: bug#27217修复设备物模型保存之后继承的物模型变为可编辑状态问题 * fix: bug#27230修复物模型-全屏状态下,无法显示属性详情弹窗 * fix: bug#27230修复物模型-全屏状态下,无法显示保存操作提示 * fix: bug#27368修复告警配置查询条件 * fix: bug#27415场景联动-关联告警:弹窗隐藏footer * fix: 优化登录密码 * fix: 修复物模型新增行属性来源不显示编辑按钮 * fix: 修复物模型复制行-粘贴行,不能编辑 * fix: 修复物模型删除行,错误提示依旧存在 * fix: bug#27152修复物模型保存页面无提示 * fix: bug#27155修复物模型存在相同标识提示异常 * fix: bug#27155修复物模型数据类型为object时联动配置中进行多次配置数据类型界面异常 * fix: bug#27173优化物模型读写类型样式 * fix: bug#26862日历新增后删除失败问题;Bacnet新增广播端口限制1-65535;优化日历维护可拖拽区域;空白日期快速作用覆盖 * fix: bug#27347新增onvif和插件视频接入图标 * fix: bug#26862日历新增后删除失败问题 * fix: bug#27035日历组件渲染宽高不固定问题 * fix: bug#27234 Bacnet新增广播端口限制1-65535 * fix: bug#27373修复告警记录告警持续时间错误问题 * fix: bug#27374 优化高景源设备ID * fix: bug#26860优化日历维护可拖拽区域、bug#27528空白日期快速作用覆盖 * fix: bug#27222修复物模型查看属性详情时,详情中存储方式显示错误;修复物模型-编辑规则-规则属性详情显示标识 * fix: bug#27425修复物模型,配置单位可搜索 * fix: bug#27182优化物模型编辑规则样式 * fix: bug#27184修改物模型编辑规则不能选择规则属性 * fix: 修复切换产品,物模型显示异常 * fix: bug#27218修复物模型-编辑规则-规则属性详情显示标识 * fix: bug#27222修复物模型查看属性详情时,详情中存储方式显示错误 * fix: 修复告警配置查询结果异常 * fix: bug修改数采表单校验、个人中心站内信json无法展开、修改告警记录处理方式取值 * fix: bug修改数采表单校验、bug#27384个人中心站内信json无法展开 * feat: 修改告警记录处理方式取值 * feat: 手动触发展示优化 * fix: 优化函数引用 * fix: 修改引用和查询条件 告警手动触发 * fix: 修复物模型详情精度显示;bug#27225修复物模型复制粘贴操作逻辑;修复物模型编辑规则-查看属性,是否只读展示错误 * fix: 修复物模型详情精度显示 * fix: bug#27224修复物模型详情指标显示 * fix: bug#27225修复物模型复制粘贴操作逻辑 * fix: bug#27226修复物模型复制跨标签粘贴逻辑 * fix: bug#27425修复物模型,单位无法进行搜索 * fix: bug#27565修复物模型,单位无法回显 * fix: 优化物模型详情数据类型展示 * revert: 撤销物模型-编辑规则过滤条件 * fix: bug#27569修复物模型编辑规则-查看属性,是否只读展示错误 * fix: bug#27216修复编辑规则属性赋值为空时进行运行需进行提示 * fix: bug#27182优化编辑规则样式 * fix: bug#27223修复物模型详情,属性来源后方无查看按钮 * fix: bug#27506优化场景联动触发规则样式 * fix: bug#27434修复场景联动新增执行动作后,在告警配置新增添加时,变更为了无效的数据 * fix: bug#27263修复场景联动添加设备下发指令读操作,保存后查看,提示数据发生更改 * fix: bug#27365修复场景联动添加设备下发指选择内置参数为设备名称,upperKey异常 * fix: bug#27365修复场景联动条件下拉没有字段名称 * fix: bug#27090修复场景联动触发条件参数类型为array时显示异常 * fix: 优化物联网卡ui,远程升级ui * fix: 修改告警记录ui * feat: 告警记录ui修改 * feat: 修改日历维护ui * feat: 远程升级ui * feat: 物联网卡ui * fix: bug#27530IEC104采集器,在点位中设置点位死区“百分比”时,过滤异常 * fix: 日历事件新增tooltip * fix: bug#27521新增BACNet设备实例号只输入正整数 * fix: bug#27534IEC104采集批量导入,文案没有实时更新 * fix: bug#27530IEC104采集器,在点位中设置点位死区“百分比”时,过滤异常 * fix: bug#27688设备导出不选择产品,未导出全部设备 * feat: 视频设备新增配置是否支持录像和云台控制功能 * fix: bug#27696当阿里云关联付费实例时,无法绑定成功,界面报错 * fix: 屏蔽bug27696修改代码 * fix: bug#27696当阿里云关联付费实例时,无法绑定成功,界面报错,服务器异常 * fix: bug#27701MODBUS_TCP点位,配置中寄存器过大时,卡片中显示优化 * fix: bug#27543视频设备>>>插件视频,无法进行录制(本地和云端都不行) * fix: 控制录像显隐 * fix: bug#27618 OPC_UA点位进行批量操作-编辑时,只推送变化的数据在不进行选择时,是否对当前点位的数据进行修改 * fix: 日历事件新增tooltip * fix: bug#27521新增BACNet设备实例号只输入正整数 * fix: bug#27534IEC104采集批量导入,文案没有实时更新 * fix: bug#27530IEC104采集器,在点位中设置点位死区“百分比”时,过滤异常 * fix: bug#27688设备导出不选择产品,未导出全部设备 * feat: 视频设备新增配置是否支持录像和云台控制功能 * fix: bug#27696当阿里云关联付费实例时,无法绑定成功,界面报错 * fix: 屏蔽bug27696修改代码 * fix: bug#27696当阿里云关联付费实例时,无法绑定成功,界面报错,服务器异常 * fix: bug#27701MODBUS_TCP点位,配置中寄存器过大时,卡片中显示优化 * fix: bug#27543视频设备>>>插件视频,无法进行录制(本地和云端都不行) * fix: 控制录像显隐 * fix: bug#27618 OPC_UA点位进行批量操作-编辑时,只推送变化的数据在不进行选择时,是否对当前点位的数据进行修改 * fix: bug#27741产品(设备)快速导入时,复制的其它产品物模型TSL在另外一个产品导入时,无法导入成功 * fix: 远程升级ui * fix: bug#27698修复设备标签-地图无法正确回显点位;修复视频设备通道管理无法修改厂商;优化场景联动-触发条件提示语 * fix: bug#27350修复告警配置查看关联的场景联动显示异常 * fix: bug#27053修复场景联动名称没有长度限制 * fix: bug#27693修复告警配置-定时触发界面展示错误 * fix: bug#27432修复告警配置-过滤执行动作中没有关联告警的场景联动 * fix: 优化告警配置-场景联动交互 * fix: bug#27071修复场景联动-触发告警动作删除,同步删除关联告警 * fix: 优化场景联动-触发规则弹窗宽度 * fix: bug#27051修复场景联动条件删除提示 * fix: 修改ICCID查询条件 * fix: 优化物模型条件数组输入框 * fix: bug#27542优化物模型条件数组输入框 * fix: bug#27580修复地区管理下级区域没有地图边界 * fix: bug#27595修复地区管理无法拖拽操作 * fix: bug#27189优化场景联动-手动触发绑定告警查询参数 * fix: bug#27090优化场景联动-触发条件提示语 * fix: bug#27755修复视频设备通道管理无法修改厂商 * fix: bug#27758修复视频播放界面样式 * fix: bug#27698修复设备标签-地图无法正确回显点位 * fix: bug#27742告警记录>>>设备tab页进行搜索,搜索结果展示错误;删除采集器后,右侧该采集器下的点位仍然显示在页面 * fix: bug#26613当认证配置填入为数值类型时,填写完成后保存,再次查看未回显 * fix: bug#26399规则编排列表模式下查看,界面展示需优化 * fix: bug#26527视频中心仪表盘,进行跨年搜索时,界面展示需优化 * fix: bug#26423物联卡详情界面查看,平台类型和运营商显示错误 * fix: bug#26542边缘网关>>>网关设备>>>快速,接入网关选择鼠标放上去后,没有浮窗展示省略的内容 * fix: bug#27822删除采集器后,右侧该采集器下的点位仍然显示在页面 * fix: bug#27742告警记录>>>设备tab页进行搜索,搜索结果展示错误 * fix: bug#27837修复场景联动属性为array,输入值校验无法通过;【地区管理】修复无法把下级区域拖动到上一级 * fix: bug#26716修复场景联动-执行动作-通知方式样式 * fix: bug#27042修复场景联动-多条件保存校验无错误提示 * fix: bug#27744修复物模型-规则编排标签多出的按钮 * fix: bug#27756修复视频设备-无法清除用户名和密码 * fix: 修复地区管理下级区域无法显示范围 * fix: 修复地区管理无法拖拽 * fix: bug#27740修复物模型-array类型元素类型为enum无校验提示 * fix: bug#27832屏蔽视频分享 * fix: bug#27837修复场景联动属性为array,输入值校验无法通过 * fix: bug#27848修复设备功能样式错位 * fix: bug#27850【地区管理】修复新增勾选下一级区域无法新增 * fix: bug#27852【地区管理】修复无法把下级区域拖动到上一级 * feat: 2.2版本运行状态优化 * feat: 运行状态2.2 * feat: 设备运行状态列表高级搜索 * feat: 新增列表原始值查询 * feat: 2.2版本运行状态优化 * feat: 删除冗余代码 * fix: bug#18167应用管理>>>第三方应用>>>API服务,seucreKey,提高密码强度 Co-authored-by: leiqiaochu * fix: bug#2785720【告警配置】优化绑定场景联动详情展示防抖配置 * fix: bug#27100【场景联动】执行动作,功能执行内置参数添加columns值 * fix: bug#27579【地区管理】修复编辑弹窗关闭后,地图区域消失 * fix: bug#27714【告警配置】关联场景联动样式优化 * fix: bug#27859【地区管理】修复拖拽区域后排序错乱 * fix: bug#27859【地区管理】修复切换路由页面异常 * fix: bug#27859【地区管理】优化自定义区域自适应地图可视范围 * fix: bug#27851【场景联动】修改设备功能时间类型为时间插件 * fix: bug#2785720【告警配置】优化绑定场景联动详情展示防抖配置 * feat: 新增国际化配置 * fix: bug#27891 物联卡进行运营商搜索时,无法搜索出正确结果 * fix: bug#27992【物联卡管理】ctwingCmp平台类型在停机后,运营商状态后面感叹号无提示;【设备】物联网卡绑定设备后,设备详情中上方多了导航栏 * fix: bug#27911编辑标签弹框文案和标签颜色优化 * fix: bug#27920新增onvif页,部分输入框红色提示语错误 bug#27919新增onvif页,部分输入框内无说明文案,需优化 * fix: bug#27928onvif通道列表页,可点击新增通道 * fix: bug#27924新增onvif页,所属产品下拉框没有默认选中产品 * fix: bug#27931插件视频设备通道列表-搜索下拉框多了“厂商” bug#27932插件视频设备通道列表-新增通道弹框缺少“视频地址”输入框 * fix: bug#27934插件视频设备通道列表-编辑通道展示内容需要同新增一致 * fix: bug#27918onvif查看通道页页面布局与需求不一致 * fix: bug#27935插件视频设备通道列表回放-本地下载到云端后,下载按钮已经变成了查看按钮,文案优化 * fix: bug#27945详情页,图表下方错误显示暂无数据图标 * fix: bug#27879【采集器】colector_gateway协议-批量导入的下载模板报错 * fix: bug#27938产品(设备)导入物模型TSL导出的json文件时,无法导入成功(复制json进行导入时,可以导入,但是界面有错误提示) * fix: bug#27980升级任务-任务详情 列表中状态的展示文案与需求不符 * fix: 删除远程升级老版代码 * fix: bug#数采gateway协议兼容导入数据 * fix: bug#27995【设备】物联网卡绑定设备后,设备详情中上方多了导航栏 * fix: bug#27992【物联卡管理】ctwingCmp平台类型在停机后,运营商状态后面感叹号无提示 * fix: bug#27926修复物模型规则属性弹窗不展示读写类型;bug#27940优化GeoJson自适应显示范围;bug#27978优化告警配置-关联场景联动卡片样式 * fix: bug#27926修复物模型规则属性弹窗不展示读写类型 * fix: 物模型-编辑规则代码优化 * fix: bug#27944优化上传GeoJson提示语 * fix: bug#27940优化GeoJson自适应显示范围 * fix: 【地区管理】优化GeoJSON销毁函数 * fix: bug#27976 告警配置卡片优化 * fix: bug#27978优化告警配置-关联场景联动卡片样式 * fix: bug#28027【日历维护】新增标签,红色必填文案优化;【采集器】当opc_ua和BacNet新增点位时,可以进行批量添加 * fix: 通道管理查询筛选值 * fix: bug#28027【日历维护】新增标签,红色必填文案优化 * fix: bug#27911【日历维护】编辑标签弹框文案和标签颜色优化 * fix: bug#国标级联解绑通道选择部分通道导致当页全部解绑bug * fix: bug#27889【采集器】当opc_ua和BacNet新增点位时,可以进行批量添加 * fix: bug#27931【视频设备】插件视频设备通道列表-搜索下拉框多了“厂商” * fix: bug运营商状态查询优化 * fix: bug#27887修复告警配置条件回显异常;修复数据字典内置数据操作限制;修复场景联动-无法删除执行动作;修复物模型-编辑规则,无法选择属性 * fix: 优化按需引入配置 * fix: bug#27887修复告警配置条件回显异常 * fix: bug#27913修复物模型滚动事件异常导致枚举数量显示不对 * fix: bug#27974修复数据字典内置数据操作限制 * feat: bug#28012场景联动-编辑执行动作新增校验 * fix: bug#28015修复场景联动-设备触发无法选择日历 * fix: bug#28030修复场景联动-无法删除执行动作 * fix: bug#28057修复物模型-编辑规则,无法选择属性 * bug#28051修复初始化数据没有个人中心菜单;优化个人中心菜单展示;修复场景联动-手动触发,执行动作没有按”标签“ * fix: bug#28051修复初始化数据没有个人中心菜单;优化个人中心菜单展示 * fix: bug#28034修复场景联动-手动触发,执行动作没有按”标签“ * fix: bug#28058优化视频通道左侧树没有数据时隐藏 * feat: 优化二次确认请求逻辑 * feat: 二次确认交互修改 * feat: 修改二次确认组件,替换popConfirm * feat: 修改二次确认请求 * feat: 请求中loading逻辑修改 * feat: 当被删除设备的网关类型为Ctwing设备接入时,提醒弹窗内容与其他设备有区别 * feat: 优化二次弹窗 * feat: 优化二次确认弹窗逻辑 * feat: 优化二次弹窗逻辑 * feat: 优化二次确认请求逻辑 * fix: 优化日历维护权限问题 * fix: 优化日历维护 * fix: 优化日历维护权限问题 * fix: 修改错误请求 * feat: 优化远程升级ui;优化二次确认弹窗 * feat: 产品和设备详情页新增远程升级页面tab * feat: 修改设备远程升级过滤逻辑 * feat: 升级任务详情新增设备版本列 * feat: 优化二次确认弹窗 * feat: 优化远程升级ui * fix: 优化物模型复制显示;优化物模型hooks代码;优化场景联动执行动作icon;优化物模型分组新增逻辑;优化全局样式 * fix: 物模型优化复制显示;优化物模型hooks代码 * fix: 优化场景联动执行动作icon * remove: 删除多余文件 * fix: 优化物模型分组新增逻辑 * fix: 优化全局样式 * fix: 修复Ctwing和OneNet保存时transport传值为HTTP;物模型列表新增筛选 * fix: 修复Ctwing和OneNet保存时transport传值为HTTP * feat: 物模型列表新增筛选 * fix: bug#28077视频设备查看通道,通道新增按钮展示需优化;【Dueros】动作映射-指令类型为修改属性,参数类型为date时,重新点击指令类型下拉框显示异常;【组织管理】资产解绑二次确认弹框和组织删除二次确认弹框文案优化 * fix: bug#28077视频设备查看通道,通道新增按钮展示需优化 * fix: bug#28088【产品】产品查看详情,选择物模型映射页面后切换到产品列表页面,再次点击没有物模型映射的产品查看详情,没有物模型映射tab的也展示了物模型映射 * fix: bug#28102 选择API后点击第二次保存时提示错误 * fix: bug#28119【Dueros】动作映射-指令类型为修改属性,参数类型为date时,重新点击指令类型下拉框显示异常 * fix: bug#28118【Dueros】动作映射-指令类型为调用功能,参数列表值输入框与类型不一致 * fix: bug#28121 【远程升级】远程升级>>>升级任务,任务详情列表展示当前设备版本 * fix: bug#28169【产品】产品、设备、远程升级,查看升级任务,界面展示需优化 * fix: bug#28174【产品】产品查看远程升级界面展示需优化(设备界面也需要优化) * fix: bug#28173【组织管理】资产解绑二次确认弹框和组织删除二次确认弹框文案优化 * fix: bug#28172启用/禁用二次确认弹框提示语优化 * fix: 列表模式下操作栏间距优化 * fix: bug#28165【通道管理】 正常状态通道删除按钮提示语优化 * fix: bug#28164【远程升级】设备拉取任务的任务详情中,[全部暂停]按钮的逻辑错误 * fix: bug#28156【网络组件】列表形式,删除按钮超出操作列 * fix: bug#28155【设备】设备诊断tab-【忽略】二次弹框优化 * fix: bug#28124【采集器】modbus_tcp新增点位失败 * fix: bug#28161【告警配置】删除二次弹框,缺少图标 * feat: 优化北向输出样式 * feat: 北向输出交互修改 * feat: 优化北向输出样式 * feat: 修改视频设备概要抽屉样式 * feat: 视频设备点击概要说明抽屉 * feat: “用户名”列中的数据添加背景色,原判断规则不变(仍支持中文) * feat: 优化用户系统ui * feat: 修改视频设备概要抽屉样式 * feat: 采集器Bacnet写入新增写入优先级表单项 * feat: 修改场景联动执行动作选择方式显示逻辑 * feat: 规则引擎-场景联动-设备触发 * feat: 采集器Bacnet写入新增写入优先级表单项 * feat: 新增物模型-属性导入 * feat: 新增物模型-属性导入 * feat: 设备接入网关详情 * feat: 设备接入网关详情 * fix: bug#28230修复场景联动-执行动作-设备无法选择标签;优化设备映射查询接口;修改物模型导入接口以及相关处理逻辑 * fix: bug#28119修复zIndex导致布局错乱 * fix: bug#28230修复场景联动-执行动作-设备无法选择标签 * fix: 优化设备映射查询接口 * fix: 修改物模型导入接口以及相关处理逻辑 * fix: bug#24828修复插件设备ID映射不回显已映射的设备;修复场景联动触发规则选择自定义日历未触发;修复通知管理-通知记录回显之前输入的筛选值 * fix: bug#24828修复插件设备ID映射不回显已映射的设备 * fix: bug#24062修复场景联动触发规则选择自定义日历未触发 * fix: bug#24085优化菜单配置,保存后刷新页面 * fix: bug#28113 修复通知管理-通知记录回显之前输入的筛选值 * fix: bug#28243修复场景联动设备触发默认条件名称显示错误 * fix: bug#28233修复场景联动执行动作-设备触发-首个执行动作不可选择 * fix: bug#28248修复物模型属性-array数据类型回显异常 * fix: bug#28250 优化物模型全屏退出导致popover无法关闭 * fix: bug#28234 优化物模型复制提示显示数值错误 * fix: bug#28239 修复物模型保存时,校验成功后,异常提示还存在 * fix: bug#28196【阿里云】新增阿里云时,名称输入框回显了上一次选中阿里云的名称;【数据源管理】管理页面中左侧新增后,进行切换到存在字段的表后,在切换到新增的表,右侧页面未同步刷新;【设备接入网关】设备接入网关,当说明内容过长,查看详情时,界面展示需优化;【产品】产品导入物模型时,导入失败后,界面提示语需优化 * fix: bug#28196【阿里云】新增阿里云时,名称输入框回显了上一次选中阿里云的名称 * fix: bug#28197新增阿里云时,触发了必填校验,切换到其他阿里云数据时,必填红色文案仍然显示 * fix: bug#28195【阿里云】所选择的平台产品被禁用时,页面上方没有展示横幅 * fix: bug#28194【DuerOS】左侧数据进行启/禁用时按钮文案未进行更新 * fix: bug#28193【阿里云】搜索的数据不存在时,页面右侧展示优化 * fix: bug#28192【DuerOS】数据名称过长时,左侧展示异常 * fix: bug#28191【DuerOS】启用状态的数据,应不能进行删除 * fix: bug#28186【规则编排】启用二次确认弹框文案错误 * fix: bug#28203 【设备接入网关】创建onvif设备接入网关时,右侧说明内容错误 * fix: bug#28204【仪表盘】昨日流量统计时间统计错误,统计成了今日 * fix: bug#28187 【采集器】数据类型为16进制时,进行输入数据解密展示异常 * fix: bug#28208【视频设备】视频设备展示接入方式同原型不一致 * fix: bug#28209【视频设备】视频设备查看详情,接入密码展示同需求不符 * fix: bug#28206【插件管理】进行新增时,上传插件后,下发还提示的“请上传文件” * fix: bug#28164 全部暂停时状态文案显示错误多了0% * fix: bug#28158【设备】多次点击删除按钮,没有弹出弹框 * fix: bug#28146设备运行状态>>>详情查看,图标搜索展示结果错误(ClickHouse-行式存储) * fix: 优化运行状态图表模式时间轴取值问题 * fix: 产品设备接入网关物模型兼容问题 * fix: bug#28205【视频设备】视频设备,选择接入方式为插件时,快速新增产品失败 * fix: bug#28033 【远程升级】设备拉取中已升级设备进行二次添加到升级中时,列表的状态显示优化 * fix: bug#11092 【仪表盘】功能缺失同需求不符 * fix: bug#28092 【数据源管理】管理页面中左侧新增后,进行切换到存在字段的表后,在切换到新增的表,右侧页面未同步刷新 * fix: bug#28252【设备接入网关】设备接入网关,当说明内容过长,查看详情时,界面展示需优化 * fix: bug#28255【采集器】新增S7协议的点位时,字符串长度校验异常 * fix: bug#28089【产品】产品导入物模型时,导入失败后,界面提示语需优化 * feat: 新增物模型属性阈值 * feat: 物模型属性阈值 * feat: 物模型属性阈值限制功能 * feat: 阈值功能传值优化 * fix: bug#28187【采集器】数据类型为16进制时,进行输入数据解密展示异常;【插件管理】进行新增时,上传插件后,下发还提示的“请上传文件”;【设备】物模型-属性定义-其他配置,不填写任何配置项,点击确认,页面报错 * fix: bug#28187【采集器】数据类型为16进制时,进行输入数据解密展示异常 * fix: bug#28317、28308、28307、28306、28305、28303 * fix: bug#28206 【插件管理】进行新增时,上传插件后,下发还提示的“请上传文件” * feat: 新增新Onenet * fix: bug#28331【设备】物模型-属性定义-其他配置,不填写任何配置项,点击确认,页面报错 * fix: 产品设备告警详情删除原始值项 * feat: 【场景联动】执行动作(告警)-过滤条件新增告警下拉列表 * fix: 修复物模型属性导入请求取消异常 * fix: 修复场景联动执行动作-设备触发无法选择设置属性 * feat: 【场景联动】执行动作(告警)-过滤条件新增告警下拉列表 * fix: 【场景联动】优化执行动作(告警)- 过滤条件告警下拉列表无法隐藏;修复可编辑表格虚拟滚动逻辑 * fix: 【场景联动】优化执行动作(告警)- 过滤条件告警下拉列表无法隐藏 * fix: 【告警配置】-关联场景联动-优化卡片样式 * fix: 修复可编辑表格虚拟滚动逻辑 * fix: bug#27692 【采集器】采集器的点位数据数组类型时,写入数据不能进行写入数组数据;物模型-属性定义-其他配置-拓展配置,处理方式选择“记录”或“告警”点击确认无响应 * fix: bug#28350【告警记录】告警记录列表中,处理类型缺失,导致列表展示内容错位(系统处理的缺少类型导致) * fix: bacnet批量添加 * fix: bug#28365 物模型-属性定义-其他配置-拓展配置,处理方式选择“记录”或“告警”点击确认无响应 * fix: bug#27692 【采集器】采集器的点位数据数组类型时,写入数据不能进行写入数组数据 * fix: bug#27974、28378、28380【数据字典】内置的数据字典应不能进行编辑,删除,禁用 * fix: 修改详情告警无效数据接口 * fix: bug#28368、28369、28317仪表盘时间轴格式 * fix: bug#27974、28378、28380【数据字典】内置的数据字典应不能进行编辑,删除,禁用 * fix: bug#28399物模型-属性定义-其他配置-指标配置,删除操作无响应,点击确认按钮也无响应;【采集器】采集器可以扫描后批量选择点位 * fix: bug#28387、28392、28393 * fix: bug#28399物模型-属性定义-其他配置-指标配置,删除操作无响应,点击确认按钮也无响应 * fix: bug#28026 【采集器】采集器可以扫描后批量选择点位 * fix: bug#28403产品(设备)页面中的告警记录展示需要有告警记录(告警中心)查询权限,告警记录处理按钮需要有告警记录(告警中心)中的操作权限 * fix: bug#28413、28415【应用管理】编辑内部集成应用,清空接入地址也能校验成功、应用类型字段为空 * fix: bug#28409 【应用管理】启用或禁用时,整个页面会进行刷新操作,使用感不太好 * fix: bug#28440 【证书管理】证书管理上传对应的证书文件后,依然后错误提示;【设备接入网关】新的OneNet网关查看详情中无数据 * fix: bug#28403、28423、28427 * fix: bug#物模型属性定义其他配置,阈值限制不展开渲染导致校验逻辑不通过,确定按钮没有效果的bug * fix: bug#28422 【设备接入网关】新的OneNet网关查看详情中无数据 * fix: bug#28440 【证书管理】证书管理上传对应的证书文件后,依然后错误提示 * update: 替换播放器插件为xgplayer * fix: 【场景联动】-过滤条件优化告警下拉选择 * fix: 【场景联动】修复执行动作-标签没有下拉数据 * fix: 【告警配置】优化卡片数据展示 * update: 替换播放器插件为xgplayer * update: 更新相关播放器逻辑 * fix: bug#28443、284444 * fix: bug 修改预处理数据相关bug * fix: bug#28443、284444 * fix: 修复物模型-规则编辑开始运行参数添加类型 * fix: 更换全局AlarmLevelIcon组件 * fix: bug#28434 修复编辑未绘制范围也能进行保存 * fix: 优化物模型-规则编辑ts类型 * fix: 修复物模型-规则编辑开始运行参数添加类型 * fix: 更新monaco-editor版本,修复高亮报错异常 * fix: 修改2.2版本ui * fix: 优化场景联动、告警配置ui * fix: 更新可编辑表格右键菜单 * fix: 优化场景联动、告警配置ui * fix: 【场景联动】兼容上传物模型没有expands属性 * fix: 告警配置搜索条件优化;【设备】预处理数据-告警数据,列表排序错乱 * fix: 修改2.2版本bug和ui * fix: bug#28462【产品】预处理数据-告警数据-告警日志 下方的文案需进行优化 * fix: bug#28464【设备】预处理数据-告警数据,列表排序错乱 * fix: 告警配置搜索条件优化 * fix: 隐藏告警配置场景联动列表项 Co-authored-by: leiqiaochu * fix: 展示设备和产品详情告警日志的告警等级 * fix: 优化全局modal样式 * fix: 【设备管理】优化仪表盘x轴时间格式 * fix: 优化全局滚动条样式 * fix: 【场景联动】优化执行动作-选择方式样式 * fix: 优化全局modal样式 * fix: 修改设备和产品详情告警查询接口 * fix: 【场景联动】优化条件按钮颜色 * fix: bug#28467、28466 * fix: 修改设备和产品详情告警查询接口 * fix: 修改预处理数据ui样式 * fix: bug#28467、28466 * fix: bug#27001【远程升级】升级进度展示数据与需求不符 * fix: bug#28471【产品】拓展配置处理方式说明文案优化 * release: 2.2.0 * update: 更新docker版本号 --- .commitlintrc.cjs | 6 +- .gitignore | 3 +- build.sh | 4 +- config/config.ts | 4 +- du-i18n.config.json | 25 + package.json | 24 +- plugin/jetlinks.ts | 29 +- public/images/access/media-plugin.png | Bin 0 -> 5211 bytes public/images/access/onvif.png | Bin 0 -> 3915 bytes public/images/calendar/hover.png | Bin 0 -> 1392 bytes src/App.vue | 8 +- src/api/comm.ts | 8 +- src/api/data-collect/collector.ts | 12 +- src/api/device/firmware.ts | 10 + src/api/device/instance.ts | 331 +-- src/api/device/product.ts | 33 +- src/api/northbound/alicloud.ts | 5 + src/api/northbound/dueros.ts | 5 + src/api/rule-engine/configuration.ts | 8 + src/api/rule-engine/log.ts | 19 +- src/api/rule-engine/scene.ts | 5 +- src/api/system/calendar.ts | 17 + .../AMapComponent/{index.vue => AMap.vue} | 0 .../AMapComponent/DistrictSearch.vue | 116 ++ src/components/AMapComponent/GeoJson.vue | 91 + src/components/AMapComponent/index.ts | 7 + src/components/AMapComponent/useMap.ts | 4 + src/components/AlarmLeveIcon/index.vue | 27 + src/components/BadgeStatus/color.ts | 6 - src/components/BatchDropdown/index.vue | 6 +- src/components/CardBox/index.vue | 15 +- src/components/CardSelect/CardSelect.vue | 282 +++ src/components/CardSelect/RadioButton.vue | 72 + src/components/CardSelect/index.ts | 11 + src/components/CheckButton/CheckButton.vue | 163 ++ src/components/CheckButton/index.ts | 3 + src/components/ConfirmModal/index.vue | 76 + .../FRuleEditor-copy/Operator/index.vue | 163 -- src/components/FRuleEditor/Debug/index.vue | 183 +- src/components/FRuleEditor/Operator/index.vue | 51 +- src/components/FRuleEditor/index.vue | 53 +- src/components/GeoComponent/index.vue | 9 +- src/components/Metadata/Table/Table.vue | 468 +++++ .../Metadata/Table/TableFormItem.vue | 201 ++ src/components/Metadata/Table/body.vue | 282 +++ .../Metadata/Table/components/Array/index.vue | 216 ++ .../Table/components/Boolean/Item.vue | 67 + .../Table/components/Boolean/ItemContext.vue | 76 + .../Table/components/Boolean/index.vue | 117 ++ .../Table/components/BooleanSelect/index.vue | 80 + .../Table/components/ContextMenu/index.ts | 90 + .../Table/components/ContextMenu/menu.vue | 117 ++ .../Metadata/Table/components/Date/Item.vue | 66 + .../Metadata/Table/components/Date/index.vue | 78 + .../Table/components/Double/ScaleItem.vue | 48 + .../Table/components/Double/index.vue | 90 + .../Metadata/Table/components/Enum/Item.vue | 74 + .../Table/components/Enum/ItemContent.vue | 150 ++ .../Metadata/Table/components/Enum/index.vue | 87 + .../Metadata/Table/components/File/Type.vue | 54 + .../Metadata/Table/components/File/index.vue | 81 + .../Metadata/Table/components/Group/index.vue | 68 + .../Table/components/Integer/index.vue | 75 + .../Table/components/Object/index.vue | 232 +++ .../Table/components/Popover/index.vue | 111 ++ .../Metadata/Table/components/Search/Sort.vue | 153 ++ .../Metadata/Table/components/Search/index.ts | 2 + .../Table/components/Search/search.vue | 205 ++ .../Metadata/Table/components/String/Item.vue | 48 + .../Table/components/String/index.vue | 79 + .../Metadata/Table/components/Type/data.ts | 67 + .../Metadata/Table/components/Type/index.vue | 57 + .../Table/components/UnitSelect/index.vue | 74 + .../Metadata/Table/components/index.ts | 15 + .../Metadata/Table/components/utils.ts | 156 ++ src/components/Metadata/Table/consts.ts | 22 + src/components/Metadata/Table/context.ts | 51 + src/components/Metadata/Table/demo.vue | 245 +++ src/components/Metadata/Table/group.vue | 252 +++ src/components/Metadata/Table/header.vue | 132 ++ src/components/Metadata/Table/hooks/index.ts | 3 + .../Metadata/Table/hooks/useGroup.ts | 57 + .../Metadata/Table/hooks/useResizeObserver.ts | 26 + .../Metadata/Table/hooks/useValidate.ts | 112 ++ src/components/Metadata/Table/index.ts | 5 + src/components/Metadata/Table/props.ts | 38 + src/components/Metadata/Table/utils.ts | 96 + .../Metadata/components/ReadType.vue | 46 +- src/components/Metadata/index.ts | 0 src/components/Modal/DragModal.vue | 326 +++ src/components/Modal/index.ts | 1 + src/components/PermissionButton/index.vue | 291 ++- src/components/Player/ScreenPlayer.vue | 47 +- src/components/Player/index.less | 15 +- src/components/Player/index.vue | 161 +- src/components/Player/utils.ts | 13 + src/components/RadioCard/index.vue | 10 +- src/components/ValueItem/index.vue | 25 +- src/components/ValueItem/types.d.ts | 4 +- src/components/index.ts | 10 +- src/hook/index.ts | 1 + src/hook/useAlarmLevel.ts | 30 + src/hook/useRequest.ts | 13 +- src/i18n/index.ts | 17 + src/i18n/locale/en.json | 1773 +++++++++++++++++ src/i18n/locale/zh.json | 1773 +++++++++++++++++ src/i18n/temp/home_2024-7-4-926838.json | 8 + src/i18n/temp/home_2024-7-4-926841.json | 36 + src/i18n/temp/home_2024-7-4-926843.json | 10 + src/i18n/temp/home_2024-7-4-926845.json | 8 + src/i18n/temp/home_2024-7-4-926846.json | 8 + src/i18n/temp/home_2024-7-4-926849.json | 14 + src/i18n/temp/home_2024-7-4-926853.json | 12 + src/i18n/temp/home_2024-7-4-926855.json | 38 + src/i18n/temp/home_2024-7-4-926856.json | 24 + src/i18n/temp/home_2024-7-4-926861.json | 8 + src/i18n/temp/home_2024-7-4-926866.json | 14 + src/i18n/temp/home_2024-7-4-926873.json | 8 + src/i18n/temp/home_2024-7-4-926911.json | 68 + src/i18n/temp/user_2024-7-4-265143.json | 38 + src/main.ts | 5 + src/store/alarm.ts | 1 - src/store/system.ts | 17 +- src/style/global.less | 2 + src/style/modal.less | 9 + src/style/scrollbar.less | 28 + src/style/variable.less | 5 + src/utils/comm.ts | 15 +- src/utils/menu.ts | 18 +- src/utils/request.ts | 6 +- src/utils/utils.ts | 7 + src/utils/variable.ts | 1 + src/views/DataCollect/Channel/Save/index.vue | 2 +- src/views/DataCollect/Channel/index.vue | 113 +- .../Collector/Point/Save/DeathArea.vue | 6 +- .../Collector/Point/Save/SaveModBus.vue | 90 +- .../Collector/Point/Save/SaveS7.vue | 2 +- .../Collector/Point/Scan/Table.vue | 26 +- .../DataCollect/Collector/Point/Scan/Tree.vue | 229 ++- .../Collector/Point/Scan/index.vue | 19 + .../Collector/Point/ScanBacnet/Table.vue | 125 +- .../Collector/Point/ScanBacnet/Tree.vue | 76 +- .../Collector/Point/ScanBacnet/index.vue | 12 + .../Point/components/BatchUpdate/index.vue | 107 +- .../Point/components/Import/index.vue | 9 +- .../Point/components/WritePoint/index.vue | 226 ++- .../DataCollect/Collector/Point/index.vue | 448 +++-- .../DataCollect/Collector/Tree/Save/index.vue | 13 +- .../DataCollect/Collector/Tree/index.vue | 164 +- src/views/DataCollect/Collector/data.ts | 47 +- src/views/DataCollect/Dashboard/tool.ts | 8 +- src/views/Log/Access/index.vue | 46 +- src/views/Log/System/index.vue | 42 +- src/views/Log/index.vue | 1 - src/views/Northbound/AliCloud/Detail/doc.vue | 130 +- src/views/Northbound/AliCloud/Tree/index.vue | 134 ++ src/views/Northbound/AliCloud/index.vue | 286 +-- .../DuerOS/Detail/command/EditTable.vue | 4 +- src/views/Northbound/DuerOS/Detail/doc.vue | 21 +- src/views/Northbound/DuerOS/Detail/index.vue | 1197 +++++------ src/views/Northbound/DuerOS/Tree/index.vue | 138 ++ src/views/Northbound/DuerOS/index.vue | 298 +-- .../components/BindThirdAccount/index.vue | 15 +- .../components/ViewDialog.vue | 162 +- .../components/NotificationRecord/index.vue | 11 +- src/views/device/Category/index.vue | 37 +- .../device/DashBoard/components/Amap.vue | 2 +- src/views/device/DashBoard/index.vue | 2 +- .../device/Firmware/Task/Detail/Save.vue | 32 - .../device/Firmware/Task/Detail/index.vue | 621 +++--- .../Firmware/Task/Save/SelectDevices.vue | 34 +- src/views/device/Firmware/Task/Save/index.vue | 16 +- src/views/device/Firmware/Task/index.vue | 405 ++-- src/views/device/Firmware/index.vue | 73 +- .../AlarmRecord/Alarm/components/AlarmLog.vue | 83 + .../Detail/AlarmRecord/Alarm/index.vue | 444 +++++ .../Detail/AlarmRecord/Invalid/index.vue | 128 ++ .../Instance/Detail/AlarmRecord/index.vue | 33 + .../ChildDevice/EdgeMap/PatchMapping.vue | 41 +- .../Detail/ChildDevice/EdgeMap/index.vue | 73 +- .../Instance/Detail/ChildDevice/index.vue | 50 +- .../Instance/Detail/Diagnose/Status/index.tsx | 579 +++--- .../Instance/Detail/EdgeMap/PatchMapping.vue | 17 +- .../device/Instance/Detail/EdgeMap/index.vue | 134 +- .../device/Instance/Detail/Firmware/index.vue | 193 ++ .../Detail/Function/components/Simple.vue | 9 + .../Detail/Info/components/Config/index.vue | 65 +- .../Info/components/InklingModal/index.vue | 16 +- .../Detail/Info/components/Tags/Save.vue | 12 +- .../device/Instance/Detail/Log/index.vue | 2 +- .../Detail/Running/Property/Detail/Charts.vue | 136 +- .../Detail/Running/Property/Detail/Table.vue | 21 +- .../Running/Property/Detail/TimeComponent.vue | 22 +- .../Detail/Running/Property/Detail/index.vue | 61 +- .../Detail/Running/Property/index.vue | 5 +- .../device/Instance/Detail/Running/index.vue | 43 +- .../components/EditTable/PatchMapping.vue | 43 +- .../Detail/components/EditTable/index.vue | 93 +- src/views/device/Instance/Detail/index.vue | 117 +- src/views/device/Instance/index.vue | 211 +- .../Product/Detail/DeviceAccess/index.vue | 19 +- .../Detail/DeviceAccess/metadataModal.vue | 7 +- src/views/device/Product/Detail/index.vue | 251 ++- src/views/device/Product/index.vue | 81 +- .../device/components/InklingDevice/index.vue | 13 +- .../Metadata/Base/DetailModal/EventModal.vue | 18 +- .../Base/DetailModal/FunctionModal.vue | 17 +- .../Base/DetailModal/PropertiesModal.vue | 153 +- .../Metadata/Base/DetailModal/TagsModal.vue | 45 +- .../Metadata/Base/DetailModal/utils.ts | 25 + .../components/Metadata/Base/Edit/index.vue | 8 +- .../Metadata/Base/components/Constraint.vue | 24 +- .../Base/components/Import/Import.vue | 230 +++ .../Metadata/Base/components/Import/index.ts | 1 + .../Metadata/Base/components/Import/util.ts | 110 + .../Properties/Metrics/BooleanSelect.vue | 26 +- .../components/Properties/Metrics/Metrics.vue | 125 +- .../Properties/Metrics/ValueItem.vue | 65 +- .../components/Properties/Metrics/item.vue | 18 +- .../components/Properties/StorageSetting.vue | 3 +- .../Base/components/Properties/hooks.ts | 106 + .../Metadata/Base/components/Source.vue | 468 +++-- .../Metadata/Base/components/Tags/Type.vue | 12 +- .../components/VirtualRule/DetailModal.vue | 52 + .../Base/components/VirtualRule/index.vue | 47 +- .../components/Metadata/Base/hooks/index.ts | 3 +- .../Metadata/Base/hooks/useGroup.ts | 36 + .../Metadata/Base/hooks/useMatadata.ts | 24 +- .../Metadata/Base/hooks/useOperateLimits.ts | 6 +- .../device/components/Metadata/Base/utils.ts | 140 +- .../device/components/Metadata/Cat/index.vue | 2 +- .../components/Metadata/Import/index.vue | 22 +- .../device/components/Metadata/index.vue | 277 +-- .../device/components/Metadata/metadata.ts | 22 +- src/views/device/data.ts | 10 +- src/views/edge/Device/index.vue | 81 +- src/views/edge/Resource/index.vue | 76 +- src/views/home/components/BasicCountCard.vue | 10 +- src/views/home/components/BootCard.vue | 4 +- src/views/home/components/BootCardSmall.vue | 4 +- .../components/ComprehensiveHome/index.vue | 66 +- .../home/components/DevOpsHome/index.vue | 35 +- src/views/home/components/DeviceCountCard.vue | 10 +- .../home/components/DeviceHome/index.vue | 34 +- src/views/home/components/InitHome/index.vue | 6 +- src/views/home/components/PlatformPicCard.vue | 5 +- src/views/home/components/StepCard.vue | 4 +- .../components/dialogs/DeviceChooseDialog.vue | 20 +- .../dialogs/ProductChooseDialog.vue | 10 +- src/views/home/index.vue | 5 +- src/views/init-home/Basic/index.vue | 98 +- src/views/init-home/Menu/index.vue | 2 +- src/views/init-home/Role/index.vue | 4 +- src/views/init-home/data/baseMenu.ts | 823 ++++---- src/views/init-home/data/interface.ts | 6 +- src/views/init-home/index.vue | 6 +- src/views/iot-card/CardManagement/Sync.vue | 3 +- src/views/iot-card/Dashboard/index.vue | 4 +- src/views/iot-card/Platform/index.vue | 257 ++- src/views/link/AccessConfig/Detail/index.vue | 13 +- .../Outline/components/FifthKind.vue | 100 + .../Outline/components/FirstKind.vue | 197 ++ .../Outline/components/FourthKind.vue | 19 + .../Outline/components/SecondKind.vue | 143 ++ .../Outline/components/SixthKind.vue | 67 + .../Outline/components/ThirdKind.vue | 84 + src/views/link/AccessConfig/Outline/index.vue | 85 + .../AccessConfig/components/Cloud/Ctwing.vue | 2 +- .../AccessConfig/components/Cloud/OneNet.vue | 4 +- .../AccessConfig/components/Media/Onvif.vue | 9 +- .../AccessConfig/components/Media/index.vue | 20 +- .../AccessConfig/components/Plugin/index.vue | 737 +++---- src/views/link/AccessConfig/data.ts | 4 + src/views/link/AccessConfig/index.vue | 120 +- src/views/link/Certificate/Detail/index.vue | 4 +- src/views/link/Certificate/index.vue | 19 +- .../link/DashBoard/components/Network.vue | 1 - src/views/link/DashBoard/components/tool.ts | 2 +- src/views/link/Protocol/index.vue | 15 +- src/views/link/Type/Detail/index.vue | 199 +- src/views/link/Type/data.ts | 18 +- src/views/link/Type/index.vue | 49 +- src/views/link/plugin/Save.vue | 327 +-- src/views/link/plugin/UploadFile.vue | 159 +- src/views/link/plugin/index.vue | 527 ++--- .../Cascade/Channel/BindChannel/index.vue | 5 +- src/views/media/Cascade/Channel/index.vue | 200 +- src/views/media/Cascade/index.vue | 65 +- src/views/media/DashBoard/index.vue | 5 + .../media/Device/Channel/Live/Preset.vue | 6 +- src/views/media/Device/Channel/Live/index.vue | 119 +- .../media/Device/Channel/Live/shareLive.vue | 79 +- src/views/media/Device/Channel/Save.vue | 51 +- .../media/Device/Channel/Share/index.vue | 4 +- src/views/media/Device/Channel/Tree/index.vue | 165 +- src/views/media/Device/Channel/data.ts | 10 + src/views/media/Device/Channel/index.less | 45 +- src/views/media/Device/Channel/index.vue | 114 +- src/views/media/Device/Playback/iconNode.vue | 21 +- src/views/media/Device/Playback/index.vue | 60 +- src/views/media/Device/Playback/timeLine.vue | 10 +- src/views/media/Device/Save/SaveProduct.vue | 204 +- src/views/media/Device/Summary/index.vue | 148 ++ src/views/media/Device/const.ts | 6 +- src/views/media/Device/index.vue | 119 +- src/views/media/Stream/Detail/index.vue | 4 +- src/views/media/Stream/index.vue | 34 +- src/views/notice/Config/Detail/index.vue | 4 +- src/views/notice/Config/Log/index.vue | 7 +- src/views/notice/Config/SyncUser/index.vue | 76 +- src/views/notice/Config/index.vue | 42 +- src/views/notice/Template/Log/index.vue | 28 +- src/views/notice/Template/index.vue | 42 +- .../rule-engine/Alarm/Config/Io/index.vue | 5 +- src/views/rule-engine/Alarm/Config/index.vue | 5 +- .../HandTrigger/components/Actions.vue | 186 ++ .../HandTrigger/components/BranchesTabs.vue | 72 + .../HandTrigger/components/CardBox.vue | 566 ++++++ .../Alarm/Configuration/HandTrigger/index.vue | 107 +- .../Configuration/Save/Scene/Save/Actions.vue | 395 ++++ .../Save/Scene/Save/BranchesTabs.vue | 168 ++ .../Configuration/Save/Scene/Save/CardBox.vue | 599 ++++++ .../Save/Scene/Save/Terms/ActionsFilter.vue | 71 + .../Save/Scene/Save/Terms/Terms.vue | 87 + .../Save/Scene/Save/Terms/WhenItem.vue | 123 ++ .../Configuration/Save/Scene/Save/tags.vue | 70 + .../Configuration/Save/Scene/Save/utils.ts | 93 +- .../Configuration/Save/Scene/SceneDrawer.vue | 131 ++ .../Alarm/Configuration/Save/Scene/index.vue | 344 ++-- .../rule-engine/Alarm/Configuration/index.vue | 290 +-- .../rule-engine/Alarm/Log/Detail/info.vue | 53 +- .../rule-engine/Alarm/Log/Record/index.vue | 33 +- .../Alarm/Log/SolveComponent/index.vue | 30 +- .../TabComponent/components/DetailDrawer.vue | 148 ++ .../Alarm/Log/TabComponent/components/Log.vue | 164 ++ .../Log/TabComponent/components/LogDetail.vue | 78 + .../Log/TabComponent/components/Record.vue | 134 ++ .../Alarm/Log/components/Duration.vue | 43 + src/views/rule-engine/Instance/index.vue | 4 +- .../Scene/Save/Device/AddModal.vue | 44 +- .../Scene/Save/Device/CheckItem.vue | 18 +- .../Scene/Save/Device/InvokeFunction.vue | 3 +- .../rule-engine/Scene/Save/Device/OrgList.vue | 3 +- .../rule-engine/Scene/Save/Device/Type.vue | 46 +- .../Scene/Save/Device/WriteProperty.vue | 5 +- .../rule-engine/Scene/Save/Device/index.vue | 10 +- .../rule-engine/Scene/Save/Device/util.ts | 7 +- .../rule-engine/Scene/Save/Manual/index.vue | 18 +- .../rule-engine/Scene/Save/Timer/AddModal.vue | 9 +- .../rule-engine/Scene/Save/Timer/Title.vue | 5 +- .../rule-engine/Scene/Save/Timer/index.vue | 12 +- .../Save/action/Device/actions/EditTable.vue | 18 +- .../action/Device/actions/FunctionItem.vue | 190 +- .../action/Device/actions/WriteProperty.vue | 17 +- .../Save/action/Device/actions/index.vue | 151 +- .../Scene/Save/action/Device/device/Tag.vue | 73 +- .../Save/action/Device/device/TopCard.vue | 45 +- .../Scene/Save/action/Device/device/index.vue | 190 +- .../Scene/Save/action/Device/device/util.ts | 32 + .../Scene/Save/action/Device/index.vue | 13 +- .../Save/action/ListItem/CheckFilterItem.vue | 102 + .../Scene/Save/action/ListItem/CheckItem.vue | 102 +- .../Save/action/ListItem/FilterCondition.vue | 890 +++++---- .../Save/action/ListItem/FilterGroup.vue | 463 +++-- .../Scene/Save/action/ListItem/Item.vue | 993 +++++---- .../Scene/Save/action/ListItem/List.vue | 9 +- .../Scene/Save/action/ListItem/util.ts | 90 +- .../Save/action/Modal/ActionTypeComponent.vue | 4 +- .../Scene/Save/action/Modal/index.vue | 45 +- .../action/Notify/VariableDefinitions.vue | 8 +- .../Scene/Save/action/Notify/index.vue | 14 +- .../Save/action/Notify/variableItem/User.vue | 49 +- .../Save/action/TriggerAlarm/AlarmModal.vue | 233 +++ .../Scene/Save/action/TriggerAlarm/index.vue | 222 ++- .../rule-engine/Scene/Save/action/index.vue | 73 +- src/views/rule-engine/Scene/Save/asstes.ts | 4 +- .../Scene/Save/components/AddButton.vue | 21 +- .../Scene/Save/components/CardSelect.vue | 87 +- .../Scene/Save/components/Description.vue | 84 + .../DropdownButton/DropdownButton.vue | 11 +- .../Save/components/DropdownButton/Time.vue | 3 +- .../Save/components/DropdownButton/index.less | 14 +- .../Save/components/DropdownButton/util.ts | 9 +- .../components/FunctionCall/FunctionCall.vue | 4 +- .../Save/components/ParamsDropdown/Array.vue | 65 +- .../components/ParamsDropdown/ArrayItem.vue | 2 +- .../Save/components/ParamsDropdown/index.ts | 10 +- .../Save/components/ParamsDropdown/index.vue | 8 +- .../Save/components/ParamsDropdown/typings.ts | 4 + .../Scene/Save/components/Terms/Branches.vue | 54 +- .../components/Terms/BranchesNameEdit.vue | 50 + .../Scene/Save/components/Terms/TermsItem.vue | 1 - .../Save/components/Terms/TermsTabPane.vue | 53 + .../Scene/Save/components/Terms/WhenItem.vue | 273 +-- .../Scene/Save/components/Terms/util.ts | 18 +- .../Scene/Save/components/Timer/Calendar.vue | 263 +++ .../Scene/Save/components/Timer/index.vue | 72 +- .../Scene/Save/components/Timer/util.ts | 8 +- .../Scene/Save/components/Title.vue | 1 - .../Scene/Save/components/TopCard.vue | 87 +- .../Scene/Save/hooks/useTrigger.ts | 1 - src/views/rule-engine/Scene/Save/index.vue | 53 +- src/views/rule-engine/Scene/Save/util.ts | 249 +-- src/views/rule-engine/Scene/index.vue | 3 +- src/views/rule-engine/Scene/typings.ts | 11 + .../system/Apply/Save/components/EditForm.vue | 21 +- .../Apply/Save/components/RequestTable.vue | 2 +- .../system/Apply/componenets/ThirdMenu.vue | 885 ++++---- src/views/system/Basis/index.vue | 126 +- src/views/system/Basis/typing.d.ts | 18 + .../system/Calendar/CalendarRight/index.vue | 142 ++ .../system/Calendar/FullCalendar/index.vue | 761 +++++++ .../Calendar/Tags/components/editTag.vue | 127 ++ src/views/system/Calendar/Tags/index.vue | 200 ++ src/views/system/Calendar/index.vue | 24 + .../system/DataSource/Management/index.vue | 57 +- src/views/system/DataSource/index.vue | 13 +- .../components/AddDeviceOrProductDialog.vue | 8 +- .../system/Department/components/LeftTree.vue | 232 ++- src/views/system/Department/device/index.vue | 16 +- src/views/system/Department/product/index.vue | 8 +- src/views/system/Department/user/index.vue | 75 +- .../Dictionary/components/Left/index.vue | 302 ++- .../Dictionary/components/Right/index.vue | 4 +- src/views/system/Menu/Detail/BasicInfo.vue | 2 +- src/views/system/Menu/Detail/ButtonMange.vue | 4 +- src/views/system/Menu/Setting/index.vue | 9 +- src/views/system/Menu/index.vue | 60 +- .../Permission/components/EditDialog.vue | 4 +- src/views/system/Permission/index.vue | 16 +- .../Platforms/Api/components/ApiDoes.vue | 2 +- .../Platforms/Api/components/ApiTest.vue | 4 +- .../Platforms/Api/components/ChooseApi.vue | 4 +- src/views/system/Region/Save/GeoJsonModal.vue | 46 + src/views/system/Region/util.ts | 31 + src/views/system/Relationship/index.vue | 4 +- .../system/Role/Detail/Permiss/index.vue | 6 +- .../Role/Detail/components/PermissTree.vue | 19 +- src/views/system/Role/RoleLeft/index.vue | 2 +- src/views/system/Role/RoleRight/index.vue | 2 +- .../system/User/components/EditUserDialog.vue | 18 +- src/views/user/Login/index.vue | 1209 +++++------ src/views/user/Login/utils.ts | 9 + yarn.lock | 1277 +++++++----- 444 files changed, 32349 insertions(+), 11505 deletions(-) create mode 100644 du-i18n.config.json create mode 100644 public/images/access/media-plugin.png create mode 100644 public/images/access/onvif.png create mode 100644 public/images/calendar/hover.png create mode 100644 src/api/system/calendar.ts rename src/components/AMapComponent/{index.vue => AMap.vue} (100%) create mode 100644 src/components/AMapComponent/DistrictSearch.vue create mode 100644 src/components/AMapComponent/GeoJson.vue create mode 100644 src/components/AMapComponent/index.ts create mode 100644 src/components/AMapComponent/useMap.ts create mode 100644 src/components/AlarmLeveIcon/index.vue create mode 100644 src/components/CardSelect/CardSelect.vue create mode 100644 src/components/CardSelect/RadioButton.vue create mode 100644 src/components/CardSelect/index.ts create mode 100644 src/components/CheckButton/CheckButton.vue create mode 100644 src/components/CheckButton/index.ts create mode 100644 src/components/ConfirmModal/index.vue delete mode 100644 src/components/FRuleEditor-copy/Operator/index.vue create mode 100644 src/components/Metadata/Table/Table.vue create mode 100644 src/components/Metadata/Table/TableFormItem.vue create mode 100644 src/components/Metadata/Table/body.vue create mode 100644 src/components/Metadata/Table/components/Array/index.vue create mode 100644 src/components/Metadata/Table/components/Boolean/Item.vue create mode 100644 src/components/Metadata/Table/components/Boolean/ItemContext.vue create mode 100644 src/components/Metadata/Table/components/Boolean/index.vue create mode 100644 src/components/Metadata/Table/components/BooleanSelect/index.vue create mode 100644 src/components/Metadata/Table/components/ContextMenu/index.ts create mode 100644 src/components/Metadata/Table/components/ContextMenu/menu.vue create mode 100644 src/components/Metadata/Table/components/Date/Item.vue create mode 100644 src/components/Metadata/Table/components/Date/index.vue create mode 100644 src/components/Metadata/Table/components/Double/ScaleItem.vue create mode 100644 src/components/Metadata/Table/components/Double/index.vue create mode 100644 src/components/Metadata/Table/components/Enum/Item.vue create mode 100644 src/components/Metadata/Table/components/Enum/ItemContent.vue create mode 100644 src/components/Metadata/Table/components/Enum/index.vue create mode 100644 src/components/Metadata/Table/components/File/Type.vue create mode 100644 src/components/Metadata/Table/components/File/index.vue create mode 100644 src/components/Metadata/Table/components/Group/index.vue create mode 100644 src/components/Metadata/Table/components/Integer/index.vue create mode 100644 src/components/Metadata/Table/components/Object/index.vue create mode 100644 src/components/Metadata/Table/components/Popover/index.vue create mode 100644 src/components/Metadata/Table/components/Search/Sort.vue create mode 100644 src/components/Metadata/Table/components/Search/index.ts create mode 100644 src/components/Metadata/Table/components/Search/search.vue create mode 100644 src/components/Metadata/Table/components/String/Item.vue create mode 100644 src/components/Metadata/Table/components/String/index.vue create mode 100644 src/components/Metadata/Table/components/Type/data.ts create mode 100644 src/components/Metadata/Table/components/Type/index.vue create mode 100644 src/components/Metadata/Table/components/UnitSelect/index.vue create mode 100644 src/components/Metadata/Table/components/index.ts create mode 100644 src/components/Metadata/Table/components/utils.ts create mode 100644 src/components/Metadata/Table/consts.ts create mode 100644 src/components/Metadata/Table/context.ts create mode 100644 src/components/Metadata/Table/demo.vue create mode 100644 src/components/Metadata/Table/group.vue create mode 100644 src/components/Metadata/Table/header.vue create mode 100644 src/components/Metadata/Table/hooks/index.ts create mode 100644 src/components/Metadata/Table/hooks/useGroup.ts create mode 100644 src/components/Metadata/Table/hooks/useResizeObserver.ts create mode 100644 src/components/Metadata/Table/hooks/useValidate.ts create mode 100644 src/components/Metadata/Table/index.ts create mode 100644 src/components/Metadata/Table/props.ts create mode 100644 src/components/Metadata/Table/utils.ts create mode 100644 src/components/Metadata/index.ts create mode 100644 src/components/Modal/DragModal.vue create mode 100644 src/components/Modal/index.ts create mode 100644 src/components/Player/utils.ts create mode 100644 src/hook/useAlarmLevel.ts create mode 100644 src/i18n/index.ts create mode 100644 src/i18n/locale/en.json create mode 100644 src/i18n/locale/zh.json create mode 100644 src/i18n/temp/home_2024-7-4-926838.json create mode 100644 src/i18n/temp/home_2024-7-4-926841.json create mode 100644 src/i18n/temp/home_2024-7-4-926843.json create mode 100644 src/i18n/temp/home_2024-7-4-926845.json create mode 100644 src/i18n/temp/home_2024-7-4-926846.json create mode 100644 src/i18n/temp/home_2024-7-4-926849.json create mode 100644 src/i18n/temp/home_2024-7-4-926853.json create mode 100644 src/i18n/temp/home_2024-7-4-926855.json create mode 100644 src/i18n/temp/home_2024-7-4-926856.json create mode 100644 src/i18n/temp/home_2024-7-4-926861.json create mode 100644 src/i18n/temp/home_2024-7-4-926866.json create mode 100644 src/i18n/temp/home_2024-7-4-926873.json create mode 100644 src/i18n/temp/home_2024-7-4-926911.json create mode 100644 src/i18n/temp/user_2024-7-4-265143.json create mode 100644 src/style/global.less create mode 100644 src/style/modal.less create mode 100644 src/style/scrollbar.less create mode 100644 src/views/Northbound/AliCloud/Tree/index.vue create mode 100644 src/views/Northbound/DuerOS/Tree/index.vue delete mode 100644 src/views/device/Firmware/Task/Detail/Save.vue create mode 100644 src/views/device/Instance/Detail/AlarmRecord/Alarm/components/AlarmLog.vue create mode 100644 src/views/device/Instance/Detail/AlarmRecord/Alarm/index.vue create mode 100644 src/views/device/Instance/Detail/AlarmRecord/Invalid/index.vue create mode 100644 src/views/device/Instance/Detail/AlarmRecord/index.vue create mode 100644 src/views/device/Instance/Detail/Firmware/index.vue create mode 100644 src/views/device/components/Metadata/Base/DetailModal/utils.ts create mode 100644 src/views/device/components/Metadata/Base/components/Import/Import.vue create mode 100644 src/views/device/components/Metadata/Base/components/Import/index.ts create mode 100644 src/views/device/components/Metadata/Base/components/Import/util.ts create mode 100644 src/views/device/components/Metadata/Base/components/Properties/hooks.ts create mode 100644 src/views/device/components/Metadata/Base/components/VirtualRule/DetailModal.vue create mode 100644 src/views/device/components/Metadata/Base/hooks/useGroup.ts create mode 100644 src/views/link/AccessConfig/Outline/components/FifthKind.vue create mode 100644 src/views/link/AccessConfig/Outline/components/FirstKind.vue create mode 100644 src/views/link/AccessConfig/Outline/components/FourthKind.vue create mode 100644 src/views/link/AccessConfig/Outline/components/SecondKind.vue create mode 100644 src/views/link/AccessConfig/Outline/components/SixthKind.vue create mode 100644 src/views/link/AccessConfig/Outline/components/ThirdKind.vue create mode 100644 src/views/link/AccessConfig/Outline/index.vue create mode 100644 src/views/media/Device/Channel/data.ts create mode 100644 src/views/media/Device/Summary/index.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/HandTrigger/components/Actions.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/HandTrigger/components/BranchesTabs.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/HandTrigger/components/CardBox.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/Actions.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/BranchesTabs.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/CardBox.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/Terms/ActionsFilter.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/Terms/Terms.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/Terms/WhenItem.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/Save/tags.vue create mode 100644 src/views/rule-engine/Alarm/Configuration/Save/Scene/SceneDrawer.vue create mode 100644 src/views/rule-engine/Alarm/Log/TabComponent/components/DetailDrawer.vue create mode 100644 src/views/rule-engine/Alarm/Log/TabComponent/components/Log.vue create mode 100644 src/views/rule-engine/Alarm/Log/TabComponent/components/LogDetail.vue create mode 100644 src/views/rule-engine/Alarm/Log/TabComponent/components/Record.vue create mode 100644 src/views/rule-engine/Alarm/Log/components/Duration.vue create mode 100644 src/views/rule-engine/Scene/Save/action/Device/device/util.ts create mode 100644 src/views/rule-engine/Scene/Save/action/ListItem/CheckFilterItem.vue create mode 100644 src/views/rule-engine/Scene/Save/action/TriggerAlarm/AlarmModal.vue create mode 100644 src/views/rule-engine/Scene/Save/components/Description.vue create mode 100644 src/views/rule-engine/Scene/Save/components/Terms/BranchesNameEdit.vue create mode 100644 src/views/rule-engine/Scene/Save/components/Terms/TermsTabPane.vue create mode 100644 src/views/rule-engine/Scene/Save/components/Timer/Calendar.vue create mode 100644 src/views/system/Calendar/CalendarRight/index.vue create mode 100644 src/views/system/Calendar/FullCalendar/index.vue create mode 100644 src/views/system/Calendar/Tags/components/editTag.vue create mode 100644 src/views/system/Calendar/Tags/index.vue create mode 100644 src/views/system/Calendar/index.vue create mode 100644 src/views/system/Region/Save/GeoJsonModal.vue create mode 100644 src/views/system/Region/util.ts create mode 100644 src/views/user/Login/utils.ts diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index 9ead01b6..5897803b 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -15,6 +15,8 @@ module.exports = { 'style', // 格式(不影响代码变动) 'revert', // 撤销commit 回滚上一版本 'perf', // 性能优化 + 'remove', //删除 + 'release', // ] ], 'scope-case': [0], @@ -24,11 +26,11 @@ module.exports = { rules: { "commit-rule": ({ raw }) => { return [ - /^\[(build|feat|fix|update|refactor|docs|chore|style|revert|perf)].+/g.test(raw), + /^\[(build|feat|fix|update|refactor|docs|chore|style|revert|perf|remove|release)].+/g.test(raw), `commit备注信息格式错误,格式为 <[type] 修改内容>,type支持${types.join(",")}` ] } } } ] -} \ No newline at end of file +} diff --git a/.gitignore b/.gitignore index 21c8f822..692918f9 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,5 @@ components.d.ts *.njsproj *.sln *.sw? -.history \ No newline at end of file +.history +du-i18n.config.json diff --git a/build.sh b/build.sh index 5bbf1f2e..473d0d4d 100644 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0-SNAPSHOT . -docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.2.0-SNAPSHOT +docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.3.0-SNAPSHOT . +docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.3.0-SNAPSHOT diff --git a/config/config.ts b/config/config.ts index fc15fd10..830f005d 100644 --- a/config/config.ts +++ b/config/config.ts @@ -1,6 +1,6 @@ export default { theme: { - 'primary-color': '#1d39c4', + 'primary-color': '#1677FF', }, logo: '/favicon.ico', // 浏览器标签页logo title: 'Jetlinks', // 浏览器标签页title @@ -10,4 +10,4 @@ export default { mode: 'inline', theme: 'light', // 'dark' 'light' } -} \ No newline at end of file +} diff --git a/du-i18n.config.json b/du-i18n.config.json new file mode 100644 index 00000000..248bbdbe --- /dev/null +++ b/du-i18n.config.json @@ -0,0 +1,25 @@ +{ + "quoteKeys": [ + "$t", + "$t", + "i18n.t" + ], + "defaultLang": "zh", + "tempLangs": [ + "zh", + "en" + ], + "langPaths": "**/src/i18n/locale/**", + "transSourcePaths": "**/src/i18n/source/**", + "tempPaths": "**/src/i18n/temp/**", + "tempFileName": "", + "multiFolders": [ + "src", + "views" + ], + "uncheckMissKeys": [], + "isSingleQuote": true, + "isOnlineTrans": true, + "baiduAppid": "20240704002091621", + "baiduSecrectKey": "CQdjuZ1v8AaZtx1NQQsW" +} diff --git a/package.json b/package.json index b3b967db..da0e34a9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "jetlinks-vue", "private": true, - "version": "0.0.0", + "version": "2.2.0", "scripts": { "dev": "vite --mode develop", "dev:force": "vite --force --mode develop", @@ -14,19 +14,27 @@ }, "dependencies": { "@ant-design/icons-vue": "^7.0.1", + "@fullcalendar/core": "^6.1.13", + "@fullcalendar/daygrid": "^6.1.13", + "@fullcalendar/interaction": "^6.1.13", + "@fullcalendar/vue3": "^6.1.13", "@liveqing/liveplayer-v3": "^3.7.10", + "@types/axios": "^0.14.0", "@types/marked": "^4.0.8", "@vitejs/plugin-vue-jsx": "^3.0.0", - "@vuemap/vue-amap": "^1.1.20", + "@vuemap/vue-amap": "^2.1.2", "@vueuse/core": "^9.10.0", "ant-design-vue": "^3.2.15", + "async-validator": "^4.2.5", "axios": "^1.2.1", + "colorpicker-v3": "^2.10.2", + "cronstrue": "^2.50.0", "driver.js": "^0.9.8", "echarts": "^5.4.1", "event-source-polyfill": "^1.0.31", "global": "^4.4.0", "jetlinks-store": "^0.0.3", - "jetlinks-ui-components": "^1.0.38", + "jetlinks-ui-components": "^1.0.47", "jsencrypt": "^3.3.2", "less": "^4.1.3", "less-loader": "^11.1.0", @@ -46,9 +54,10 @@ "markdown-it-toc-done-right": "^4.2.0", "marked": "^4.2.12", "moment": "^2.29.4", - "monaco-editor": "^0.36.0", + "monaco-editor": "^0.50.0", "nrm": "^1.2.5", "pinia": "^2.0.28", + "resize-observer-polyfill": "^1.5.1", "rollup-plugin-copy": "^3.4.0", "rxjs": "^7.8.1", "unplugin-auto-import": "^0.12.1", @@ -57,10 +66,15 @@ "vite-plugin-monaco-editor": "^1.1.0", "vue": "3.3.4", "vue-cropper": "^1.0.9", + "vue-i18n": "^9.13.1", "vue-json-viewer": "^3.0.4", "vue-router": "^4.1.6", "vue3-json-viewer": "^2.2.2", - "vue3-ts-jsoneditor": "^2.7.1" + "vue3-ts-jsoneditor": "^2.7.1", + "xgplayer": "^3.0.19", + "xgplayer-flv": "^3.0.20-beta.0", + "xgplayer-hls": "^3.0.19", + "xgplayer-hls.js": "2.2.2" }, "devDependencies": { "@commitlint/cli": "^17.4.1", diff --git a/plugin/jetlinks.ts b/plugin/jetlinks.ts index 683da500..06f00800 100644 --- a/plugin/jetlinks.ts +++ b/plugin/jetlinks.ts @@ -295,7 +295,6 @@ function getSideEffects(compName: string, options: JetlinksVueResolverOptions, _ return const lib = options.cjs ? 'lib' : 'es' const packageName = options?.packageName || 'jetlinks-ui-components' - if (importStyle === 'less' || importLess) { const styleDir = getStyleDir(compName, _isAntd) return `${packageName}/${lib}/${styleDir}/style` @@ -319,8 +318,25 @@ const primitiveNames = ['AIcon','Affix', 'Anchor', 'AnchorLink', 'message', 'Not 'DataTableObject', 'CheckButton', ] + const prefix = 'J' +const proComponents = [ + 'ProTable', 'Search', 'AdvancedSearch', 'Ellipsis', 'MonacoEditor', 'ProLayout', 'ScrollTable', 'TableCard', 'Scrollbar', 'CardSelect', 'PopconfirmModal', 'DataTable', + 'DataTableArray', + 'DataTableString', + 'DataTableInteger', + 'DataTableDouble', + 'DataTableBoolean', + 'DataTableEnum', + 'DataTableFile', + 'DataTableDate', + 'DataTableTypeSelect', + 'DataTableObject', + 'CheckButton', + 'ValueItem' +] + let jetlinksNames: Set function genJetlinksNames(primitiveNames: string[]): void { @@ -356,11 +372,20 @@ export function JetlinksVueResolver(options: JetlinksVueResolverOptions = {}): a } const _isJetlinks = isJetlinks(name) const _isAntd = isAntdv(name) + if ((_isJetlinks || _isAntd) && !options?.exclude?.includes(name)) { + // const importName = filterName.includes(name) ? name : name.slice(1) + // + // options.packageName = proComponents.includes(importName) ? 'jetlinks-ui-components' : 'ant-design-vue' + // + // const path = `${options.packageName}/${options.cjs ? 'lib' : 'es'}` + // const stylePath = getSideEffects(importName, options, !proComponents.includes(importName)) + const importName = filterName.includes(name) ? name : name.slice(1) options.packageName = _isJetlinks ? 'jetlinks-ui-components' : 'ant-design-vue' const path = `${options.packageName}/${options.cjs ? 'lib' : 'es'}` const stylePath = getSideEffects(importName, options, _isAntd) + return { name: importName, from: path, @@ -369,4 +394,4 @@ export function JetlinksVueResolver(options: JetlinksVueResolverOptions = {}): a } } } -} \ No newline at end of file +} diff --git a/public/images/access/media-plugin.png b/public/images/access/media-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..6eab68fb60625e0f4f79b6e188087927f2980aea GIT binary patch literal 5211 zcmV-h6r}5kP)Px#1am@3R0s$N2z&@+hyVZ-1xZ9fRCt{2oqK$g)tSeC&vV{)=AF#s#w8apkOZPM zAjV6#rPj8hRcm$IwFWQLUaVF>rFiXUwYL4#)=w>NwRE*uT&cP(>I$~I+Y4&DD=p}v z)k;8al5kH51TeRm%;i1jJo^U>21r5@W|C0*{U@Kyd*1V&`Oe9Co^#%JPJqAjcTQ$# zxEnAKzWSKBG1GNnO7Z%oH-&Z%cYFH7NhA2$pSDf}1+Nguk3sZjCVVSpqidGVDT)qv z+xlX}3$9%dEpZfTV967h1F-6L68k^oI_pHFgsk2C%-6zeKqSN6)}9!#f@>E@gc17) zGZ!c$4O+VP99@Q$>ydbqE!$jWdClTEUc+#-wJ%1T;Mye;PzSoE644Yf*nvdrE(8Lm zuX99GJ_SQnEaX_=jsKXFvumi@dpt&r;IBR=Zo9;)9m7)urp2c8HaI#pkUB&{W0k|F zGH6dA=+!;(73$1Zd;80X5PaQZ@d?_>2ZTA$x3T_CSled+%M`+1K7>zol*5$h zcy00RW3%?5c4x>0U$roLh7$RJ04)N&6?$L+EK@Ltia=b&pgn=kXx$Tcjm>Hx%(~#K zABl}4hh~UKf_=T&a%#{4EK?|9w(ORHoO0!22YI12zx=}B18ZMoP4G33M~g{2H5N8U zVCqRH-p$sv1`CtpT5&4aRij|+)@SB~*8rIfgc%oHyPzfFAh$-8j0a>3{I1=ZzDA}I zaYG#NsvtHTV6OZ3o4hTVsykzX4+k*ORibsXz~3=c0W4D(;Q}|{RaqhStX=igoX9cL z^MR5P!Lt{3R*R_V0&3B^eVc+xW}@CEzRq#*l0G1&f$|*65CW}zB5pVUFs1<{LX6ZAkj@?opXqJx7g&?>^Ax2fygTaOO;q2MZiM>sj!qdX4cxfV4?kx)QbYW zo0&YZm_+1#RK#or{1HF>%@*&8l~Lr&Zcu8q08ozCW_n28dKKIqYy1R&^{n8*ViMq0 zzTZR>d4&+E65_F9O*2`uTKbWL^-FM?_oHZIkn1|ZDVC&&p<1l3>u3NmX+VP093fhG zD&%iZG%MHBhN>Kg$_%g%zSLPxY3emC=$SzYPIE}~Ux~Po*sUC_=p7rvvvf+$&n+<@ zDk_OJHg6A2H3=#+mhwdS6f0CF8Z(>#7EP?~Sd>0*?~XuOwAEXhQ{aCE0P=F}uKj!6 zSvtixZ+E{Z zf*I-GiLgp3c}cN3LRhTby8}QOlj(@IdQ0P-SkEl$0hA5&n#L%{Q9Rj-TLCfqPgHE0 zj0jGX77e)Lh*Tw@jw`zHoyf(;=UD&{-KV}M$-uppXLMW%08I_y8HuQRK2mIMJGwXS z-4Q4gi&?~2a_FTpSTtHo9|3@_eSG8g1G())(lN0*x(K~sjB-@KndlHItw9@%UYiNA zX)-GKJ^bAw{_gIgfz)~td(3kW#-L0DQvpB>rpDU6JGRt$v$~h*+@oIa+>>{(!2xso z#Om0RSey5A00`!oCGn2n4FJ%+*Be7OzyJX40&t9AW0a%VndrJ)VSL*zA{&UU&h$N= zED282U36e7vBV+%*6yMwR!0}@*bweGGzMQONuLricNL)W#7LPjbb}MXcLCD@0AAQ% zwS8Ugo#_unr?|`*x|kSCDyMhczI}b}9mc0S)8qNkElP`Jmn&eY&G>p_HpHgMvfwm_ zM9X`kiR}7ALGm!EHkzh9wMz_7H3qYkbFk-$P@dK55|DHhPfRV@zCI*?bO6Y60(KXG zAA4bcRbMSgi**7#8CGJHO4f_w#6Yuxfigsb)4V4dq|PBiYt!by8OB#%0)S+Kf3A#r z$QZdnDOuz=vfgL{DccB55KGknFt#MIX#d_oqfXI$05HCq6>C$owzhc?!6^U`-K%~Q z-J1tuAX1?JR8%hYuo6Quxk(f!pt5ZC5JPj7WAJy2Bwi6gYaqmz1VU0l3`1{d#zGvg1(C?G+*v1VWM@DX?RLArvB++$2`li{eCI=Vh89?!ian z?+%6d>&CdXtnmGUQa=@ss#I4S!5F%Ma}Pe4&l;^}0657oQqoni066m&%_W)We1QAw=Px03V|gk+pIu%eB5 zqvU@>dDgIlW5!P90QqC&Y=SezT5b~UueS!n{_I@|(!QFUj5}QapsWUnGRl&} ziaiU_7Sib;>BI$GUimU1)W6JBm z+?iKg^~$J;XRbWEc3#8UWj~zsr$?{2Pp7&nRxF%#_jxxy{fHPHzTnp1-!x_BobNC@ zv5(!nWZuC=bQ2d1ONPDapZRWGcy!tFO)o!kSvKGE(PUNdrQdq>o{E2%bw4}7hWwJ# z_5gqi<}fLzj7hoHk85lEMDts}4_lpzB%=FE0HC<)qjj-&ca^p_t*Z^@6t0Z!-(It4 z)1Pkvfa#ZhbIT{b_UrFBft+oV&i&F8Z~f}-^GP|eH=e!qvh8m!y$k@}`qka%w>7N` z1BU{kvI(}3P-L_pZ)^U?^s%8J>#6$oH=n;{RN3?=#ZlyV5jU0S8g2ZPvBpnWqXhtV zt^UnqKi*N5?A%`?#xLFZ)_;9D-qw6(D8FQdHGU-B>$@XHhYxK3YdHXTxntKEod}2W zinm3^R=y4Zv3GYKmUu7_T7UnpH5Uc*ivH5@>QnzDmWL$3XI1b^56qlvQpuY3=1n*F z?fc5b__lS&>H=myVx3^d7Z=t|IP0@d=8QV!6;f{VgtI>Tq!Y+#1^}@p(!K1e#dALL zr$?{2&sq~sM)wy1Kq}T+VRY(^EW8SwJgRbP19qV~O;&WrBfoDWeU z5cQM+W{j)}esjq^Rj!wt3>S`jZOo((J=MDVoqTI_d)K?$&r5Xfs|5gJKK#t_&bR*a z`Z49_)C0iQ*Pp$g-Cz^|tkt=BrKcS(7a2WaPt9k(KTo;AmT}WA{!6N>wa8D#Dnfb1 z+W?@o@$IXRZcEeK%ZfT$>d&wI@a*Rb#!rjojhXb@y8r&}wIbrfasbQ$Vam#F&+G_h zR%c%QVAF+nEc-<=(P47(OLv|B^(8Ns)m*+*C%evMC)fZ0(=Y$l{VN`ueO}|*Wf1_V zzWDY%A|?{dDR?EXxT@Z9Lx;sWflvbgoc^i1wx+Xy@uy$f5(pLSQ*N*YA{6h~TTwWE z+H+@pZr<{AnYN~N;Y}|uxG%4$YI!$su%Pk!SMPZXc_u{|9vTV{pwOIEJ?{k&UPIXymMUovIp+u_2p*IS#`UFFByD`KsU zQ=8siRsyk=GeKWGhJWM??8P5`{F~uXWh>kFZoaQ_8|K5($d_SEjCx0e;wuUs^@<}=@)m+tYxL%-Imqyb+d#mf{zt zCH6*df(M_fXdMU!a~#b|BW~hwNfeG<%t}k@OKwlck5@k1kQEV_ga|v9I0zoxirv5k zGb;lp=my<`ONd%TWo*P6c^n!dv}ksS2EH`ff5C^A5CH&vEFu1_l3p4mtzDvk$JD>2 z(O$C%OE#As=QQIGv9g|l6ZBJ7TjM8AwrvVB1z8cWN{O-w%OHpfiDieF#t2N0&m{Mr zrWv|iEG<^r`?yV7i=-d#&-(290kR^nHpQ?>B67j*k3?vmE4ibOF5Bx6!GsM~@PDGr zR)Ul2DS*A-u_Tr#^)9UU2O;cLu03X>r``oea-K4s@zu<31rw>E+=A<5z`!O06jVk9 zP8DFet1y4@P2pp<3Onw!uy%n&94ApDBI7ybZ}YX^babveqzq9W+#4d|J0up4H_;O1 z9B;F`e$TsSKP-9TCT9q2#QMnwBE2s&O&%b_Bv_@h1}8Xy*~HL3y*R{z$q}Pqk{ZDxR!#}XsrL)q4NGTHzc$tz^vcoa z7qm|{?4Dsox?Iuq+NQb&Ti1XXs;M$y!79$cXj0BZ0(K2%OY;+4niIO_r_pLCH3cxO zTF0`#<5ZRfvw;{_bpa}(m?n|pb{p4gp1m!ycQEy3WbO01A4%BecU41kl~vfOKR-WKsy+HJlUUJ-hMvCZIbbp%SdnN=CaD~+L`0R4wVVC1;eKZZ z17S$^55DTL#3Z)1hDhQ@cQue;@N2y%AebC6#40Xu$H3TfV&2l~ht|As3uP@Z59JQn zbnU{#WD%N9;rqn+^*b64Uv>mDz(M3 z-?xP02sW@uW~&_vl?(GIW!0Kr&IxYJc*Fb2unSI8yC7N;VCNhI>-M=Nc`t%R#8=Qs z%c1e)s3NjqZ7I-5DXU@MU_m{;%o1X-ZtqR zE=H_i0I0oJ0`AyYH56Bhr2~LzC6OzP(Q5&B3%fj-z)^8@-Lp3iZZRg?jA+4WuKR_A zB@sWvYMLox?*s6PCEV{S)b(_mW+ZV^2u^d&Px#1am@3R0s$N2z&@+hyVZ%^+`lQRCt{2ooj4d$92d5=gi!@cey0>q9mFU^`J=G zAp=WE9Kh-Waf&u+J{Ty1(1~TcC>lEoqQXd;0{zeewh^FcVYn*X$dM7(NNZJYETA9k z1a*U=?prQw!K4~ViJqn&)XOqOa=E*A@60*xbMDN& zL*QdRW+6k3?m#(w;{^>SeC{`kh7au7nm*a+{>+92BY4aAN7jN;UsmW}g6Q9w@Fzvd z4({2uBHQS`&BVMH+`l8+ZVfg;C{p-K5c3^U`4Sz(A(mkwX1$g@(wl$rqSATEEyb=737c>~viC*jZZiT-fMRx+$70anZ zHND(ezLP=c!c;Wy(${IcR{fnV^Fr{WFXY!a(a#cT9`VExVVbD4E^moKZR%9QIyN{N zC)xdt41^68Tnb>SoF?xNs}@G8RX39jldZHwv}2mhQ(UXqg#nK6J>3*~4Ll<&00 zG8M+&+V!2~HT$JbrEY@1x-+}csD46$3kr7}uDk$NEtu0QK-|NibK!V);H5uaUeiEW zbHQKx>xmAsv{_XPoVdfn#fk%1wJ^#o9CU*0Iul@sqV(X)zgu}=or#(We&~nUmE`Ou zfix-n5psnOYSmVyFxf!VuIIokg_q;Iw`B%_>ITB93+~@>q1mEklNwzG=rJU@;cB;0 zZB&CahfxnyG9mN8-)@bLRjcl*3BDS@)b*%yXBEj%y#iRZ@XCvWFzOK{jzsqUXj}75 zx98%_bBLsbE78=Ok9n68-{IKNuVB8I-48M4!kypKsYDCkGwE(hbV0p z(OAVFA&uwt)L}UoWtK4A31FRi3aKyl0s-&I;fpa0E z#p?*V%#c00>zl#;aspvlf=dC6jjn>%<6d%S%J1>Q#IrUrWqO#XNtg$IJj*~hE5ZG* zY8YIc=vCG`A$Hg$BPWds+}ygnFd^b4;HXE5h$h^BzVb({@6TBNb`?JS+<31B<{l!t zSWM#M2Fbz>U{%6WQ@c0Rtx9LTM(^&~Mz@SV(+d9D4<@|EnVJe3$}QwJ^%; zO?nNpenGunX34zt_fOE+)G|EX$)xy}LZ5)>62tP591d=WClOLVs)9#BwB7M|`;BGn zbSD$zC*m+f>dvUxdx?2iB|cu;E-xI2q9tJMQQ@ToJgd<4LWP^|TBjGR^ggushQbXq zQ>20oMA5IQ`r|+{?{9x=#Wk_IloA~V72j0=#zvR@Et0os1y4nMQUGv(4I&6O08!UR zO*B!o1gbqsyj;bfCGqd-EOM|}2`=$b6zx4)0-L&9NLMh-1xefhl@XK55?tas(aL?$ z51(i@LF7F3SWBHAxQIjtgo}=*O$%;KMS@FAirz=WONfK64})knLFCnTtH>H6Tok8+ z#NwvUw`OKef=j5%2sB>MqP;iP8txVi)2C9yW-Zir4$ zF+QS(3*}}7;qW+$n$;1bt{4oGc8dvB}_ z>>3O7D6y-z*b)sAT%tCjiBnwxqg#|cpeG>7sMc9*i3STUaYZz7s!N6DAUfz^ws$Fk z#Or&|WVAN@ojvnJ@D)_z<7|RqRqiNHbkM;}cPSYXucx7|;bKeFRq)Wk*2lcZX7%VJ z!f9qbkZz4%T)DP*^^yNcnX?j26fIGvjpV^1diqwM*pr8%p8!BAHJeAU-eZ7Bf>?y`Iq-KC!CQ0RZsSTsn6CMD#!s)7I)=<;~PZ@X*1`gC)5{ z*lPm+s;XV>6MY;&XYO+FH$eWrTb+At<}Nq}F<(@}&#TIR6YQUgzx^1ywm1Lj8;=!> z_&fj*>*2OF?(wE3SF=Z0>mt}E<}m;u!hx=hV_zv9A3E4P=8F6@fX*{VGn-d+Pwbtz zlxltdy!~weXj|#txIAL}T#@<=mK-cZiEVX7vmF4=pEi%FqK^m=0!|F@TWdZ!vW0!REs0Y*y~C%AG3{$i*s zU>OJoBdF#%A30yhW|pIH`<5#ay;D7Xaxnws1=8{G#0xh#F@gNsD`lcRC#;}G6UExgGIDnR< zz*_;phO*m3VpUBb98!bdWvz=~6VR&wpo-1!{k-M7XWvWro%&_dmx=|m9R#T2)T-|6 zPfeg@zkm{?bobXP{P!ia%$+}|Bc@2`nSlBXcigr7k3t^%qbLo>Z5rb3eL0~CDbiBF*tj^Kja6a!WUH8l5hy4UZDv|`7z*j)J8C~ zLCU6>ti+V$jZ-ys9rvVA@sv_81qCkBr(U5)77me`??umF3Rj?^43kfKIH)&N(%6XFVR?JCoX`BTc zD@Ae8B(5ZvoljgD9<->Y6bMbgkXT5ilKLta>|9t1V95JC0#bto?e;pR20|fDfh!xI z%NNXSJZvgR1@k(9Rg1X>!r2R6paHB}R2m4Uy^|A?7Pj^-Z;9AQ)JxwpTx#>rK zJpV3pu%3xbJ-6Um2zW>wQp$J}-l@Qwfx-4&TQfJU?cH`xsegwyTU*$qs;jt|oJd@9 zrlGlR6()P;f~qE#RA8gELezA-&F*GBY4`AR+NwdkSs~4m#7BwT#p-mqOd2HEl(Gh! z>R>U;$;dC_b3=#rJk>Yj{%>W^if(zn&;^xELh4lI2uY#758BmPFj@5mK6Xg0U}M`s z_DHfgIJoCQn$^a76;C@qvSYN{bFfiVbAh@ePKvoo>ne*n306SBCeOe!GIlKirz+Xf ze2(+_N)LTM+Y4jv2KXuZLw#U!fN3^N8_4je@PLdv^=x$d1-)s?CK9T%EIZr-Rsr!Y=< z$(=T?${9xu1bavv0?;tCPF2#D>Ft-R^lv0;vh?@xbC+7lHfLc4H?r;&^$E2dJaI`8fAXY)JA$5*?Y;4r7 zYT8NUaI!oz>&&1W>auwK)fWmISY#8C=Do`uB}L^MEX_eMS@pywuL#=UWgRge8%ffG z|MUdaEHKyeNf+9(v(T+d_mC!|#=B!lC0m45AXou0n&gDTMP$P+7QURyj_d9S!?__*H~R&~G6a`WE@qCDcmo^GC5ao{Q-xhsXG_B#jVomw zBC-Z5@3ADOJjw0Xy=Ezx$mdy!5ky@|6f&jv?%GOq*|+_=e$>0c8~OdexY&|wY2HMn zcTll-OgNcY!fgb5NX#tGQhJ>-FEwHYU*48FRP~O}l75*NKa z-6oxlV%`b{fc~d643|_Fseajew;u?OalqXK&Z>0-uRLDaWK6A@*Mdtt z`gfYqLVlw-`VCe29)SN6!k+~O1GieHnNKVT!6hF0VRoe^^c5EQzukY(@*j=v&&SLI Z{vVU*H^5OLJoEqn002ovPDHLkV1g=#YOw$S literal 0 HcmV?d00001 diff --git a/public/images/calendar/hover.png b/public/images/calendar/hover.png new file mode 100644 index 0000000000000000000000000000000000000000..10756cad510e1d55b8466a95ac3f9352982b5592 GIT binary patch literal 1392 zcmV-$1&{iPP)Px#1am@3R0s$N2z&@+hyVZu8c9S!R7i>4lu=AmR~X0tEv?+Ng+Z_&1%-lwUbQVn zVwRS;n+!BDWw01j77`v@OfYdzLY&4`9%PBpEGA2anL&ozh(a?13M4dL%(9B3lL8eL zgaAodO0~Bwr4)Mm?P0^fWX{ZF5Booz^KgE@obUV20sgnSc=4jVsi{f&ww$So zUC8J2$s7)czrMacC=!WcD@@U90nhU}moH!LzJI?z@5YT*D3wZ_Jb4lxk0+Rv^v;j{ zc6*jsBK4-Hr!Tu)u9B>*EFl;SPDrIv-}Lmfdh6D$zZs3jPcB@za8D!>(JR++yWJZ* zJ3D{Y>-A)@Scr&dU|@hYZQ4WzgMn_{xvu=r0DwWsibat{V`|j1NSHW={v|25Si;JODDp6kk0e0=$g=f#6fr!8` z3~Fj>ke!_kqtS?i2M?m7qoZ(se*QfG6YDl*Y-}vEr>DoG(P-%U_3K1LWU*MNtgMXu zem^ZPE>e4YJ9)icT1hk-B_bl5%|=S4GIsaw-5alf&1Un4va+%dH5$!#XV0GXRaI3{ zad9#6JWuoU^W<{5NDu^ComebJfk1#Fkq8kHO-xKsN=gbfH8r_bxZ;(CR4Of=oSgi+ zyuAGA!oot*`1m*+4hO7OE97!HSeAt#2#7|b@caGf>+6Hx??*#J1Mb|p0{~Dc6xgz5 z3wWN-Ug?7v0B+vA8E3QE4ipp=B%eQj9+xg%LQ6{vN=r-8+S&?15I{s|Z*RwyD_6kt zJkFgv2e;decaB!GPZBu zj^^fOn9XLyVt?~$yXOWkehrz)??AWmb zfj|ILQ&YHh?Hcy(-HWueG`n0bf3ZfuFwB=6$9-R0TN~}_>Ox&z9lT!ennB3S%tU&6 zIz~rFVKf@?H?#qqo}Q|#q{*_OMzG{Mny#h5)u+nQc{9br%oXji{ZqH6Np42kVquR$jBIvkB=W% z_YDAm%jMcIJUm=!u~=qICKDM925M<(q36$^(_hov+)OOXQfq4~S*=#mYPHnc+xrs{ zz5bggBJtzLj}P?r_Ku!DeVPgi3W(!4ayp$vL==fc$ZogO?%lhI<2cf2G_-m1X404LLbE$j{Gzp;oJZ zP$(4kP$G}@=tYC~^ygViM)85wzhZf@?=P$-naFwBBXCi_*XRDQd>ynJux y&YeqtclM10E18^}WTMgN#-*ht&+DN7X?_Qm7n;ghzJ#0r0000 - + @@ -9,7 +14,6 @@ import { ConfigProvider } from 'jetlinks-ui-components' import zhCN from 'jetlinks-ui-components/es/locale/zh_CN'; import { storeToRefs } from 'pinia'; import { useSystem } from './store/system'; -import DefaultSetting from '../config/config' import {LocalStore} from "@/utils/comm"; import {TOKEN_KEY} from "@/utils/variable"; diff --git a/src/api/comm.ts b/src/api/comm.ts index 312d52ce..3f273af9 100644 --- a/src/api/comm.ts +++ b/src/api/comm.ts @@ -4,6 +4,8 @@ import { SearchHistoryList } from 'components/Search/types' export const FILE_UPLOAD = `${BASE_API_PATH}/file/static`; +export const FileUpload = `${BASE_API_PATH}/file/upload`; + /** * 保存查询记录 * @param data @@ -31,11 +33,11 @@ export const systemVersion = () => server.get<{edition?: string}>('/system/versi /** * 聚合查询 - * @param data - * @returns + * @param data + * @returns */ export const queryDashboard = (data: Record) => server.post(`/dashboard/_multi`, data) export const fileUpload = (data: any) => server.post('/file/static', data) -export const lowCodeUrl = () => server.get('/system/config/low-code') \ No newline at end of file +export const lowCodeUrl = () => server.get('/system/config/low-code') diff --git a/src/api/data-collect/collector.ts b/src/api/data-collect/collector.ts index df3d219d..64f7ffed 100644 --- a/src/api/data-collect/collector.ts +++ b/src/api/data-collect/collector.ts @@ -83,5 +83,15 @@ export const getBacnetObjectList = (channelId: string, instanceNumber: string) = */ export const getBacnetPropertyIdNotUse = (data: any) => server.post(`/collect/bacnet/${data.collectorId}/unused/ids`, data) +// /** +// * 查询所有属性id +// */ +// export const getBacnetAllPropertyId = () => server.get('/collect/bacnet/property/ids') + /**查询bacnet值类型*/ -export const getBacnetValueType = () => server.get(`/collect/bacnet/value/types`) \ No newline at end of file +export const getBacnetValueType = () => server.get(`/collect/bacnet/value/types`) + +/** + * 导出点位数据 + */ +export const exportPoint = (collectorId:string,provider:string) => server.get(`/data-collect/point/${collectorId}/${provider}/export.xlsx`, {}, {responseType: 'blob'}) \ No newline at end of file diff --git a/src/api/device/firmware.ts b/src/api/device/firmware.ts index 19e3c7b0..7a71a5a5 100644 --- a/src/api/device/firmware.ts +++ b/src/api/device/firmware.ts @@ -11,12 +11,16 @@ export const remove = (id: string) => server.remove(`/firmware/${id}`); export const query = (data: object) => server.post(`/firmware/_query/`, data); +export const queryPaginateNot = (data: object) => server.post('/firmware/_query/no-paging',data) + export const querySystemApi = (data?: object) => server.post(`/system/config/scopes`, data); export const task = (data: Record) => server.post(`/firmware/upgrade/task/detail/_query`, data); +export const queryTaskPaginateNot = (data:any)=> server.post('/firmware/upgrade/task/detail/_query/no-paging',data) + export const taskById = (id: string) => server.get(`/firmware/upgrade/task/${id}`); @@ -29,6 +33,10 @@ export const deleteTask = (id: string) => export const history = (data: Record) => server.post(`/firmware/upgrade/history/_query`, data); +export const historyPaginateNot =(data:Record) => + server.post('/firmware/upgrade/history/_query/no-paging',data) + + export const historyCount = (data: Record) => server.post(`/firmware/upgrade/history/_count`, data); @@ -41,6 +49,8 @@ export const stopTask = (id: string) => export const startOneTask = (data: string[]) => server.post(`/firmware/upgrade/task/_start`, data); +export const stopOneTask = (data: string[]) => + server.post('/firmware/upgrade/task/_stop',data) // export const queryProduct = (data?: any) => // server.post(`/device-product/_query/no-paging`, data); export const queryProduct = (data?: any) => diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index a4fad8de..3ca23491 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -14,7 +14,7 @@ export const resetRule = (productId:string,deviceId:string,data:any) => server.r /** * 删除设备物模型 * @param deviceId 设备ID - * @returns + * @returns */ export const deleteMetadata = (deviceId: string) => server.remove(`/device-instance/${deviceId}/metadata`) @@ -22,7 +22,7 @@ export const deleteMetadata = (deviceId: string) => server.remove(`/device-insta * 保存设备物模型 * @param id 设备ID * @param data 物模型 - * @returns + * @returns */ export const saveMetadata = (id: string, data: DeviceMetadata) => server.put(`/device/instance/${id}/metadata`, data) @@ -36,58 +36,58 @@ export const detail = (id: string) => server.get(`/device-instan /** * 查询数据 * @param data 分页搜索数据 - * @returns + * @returns */ export const query = (data?: Record) => server.post('/device-instance/_query', data) /** * 不分页查询设备 - * @param data - * @returns + * @param data + * @returns */ export const queryNoPagingPost = (data?: Record) => server.post('/device-instance/_query/no-paging?paging=false', data) /** * 删除设备 * @param id 设备ID - * @returns + * @returns */ export const _delete = (id: string) => server.remove(`/device-instance/${id}`) /** * 启用设备 * @param id 设备ID - * @param data - * @returns + * @param data + * @returns */ export const _deploy = (id: string) => server.post(`/device-instance/${id}/deploy`) /** * 禁用设备 * @param id 设备ID - * @param data - * @returns + * @param data + * @returns */ export const _undeploy = (id: string) => server.post(`/device-instance/${id}/undeploy`) /** * 批量激活设备 * @param data 设备id数组 - * @returns + * @returns */ export const batchDeployDevice = (data: string[]) => server.put(`/device-instance/batch/_deploy`, data) /** * 批量注销设备 * @param data 设备id数组 - * @returns + * @returns */ export const batchUndeployDevice = (data: string[]) => server.put(`/device-instance/batch/_unDeploy`, data) /** * 批量删除 * @param data 设备id数组 - * @returns + * @returns */ export const batchDeleteDevice = (data: string[]) => server.put(`/device-instance/batch/_delete`, data) @@ -95,7 +95,7 @@ export const batchDeleteDevice = (data: string[]) => server.put(`/device-instanc * 下载设备模板 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceTemplateDownload = (productId: string, type: string) => `${BASE_API_PATH}/device-instance/${productId}/template.${type}` @@ -104,7 +104,7 @@ export const templateDownload = (productId: string, type: string) => server.get( * 设备导入 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boolean) => `${BASE_API_PATH}/device-instance/${productId}/import/_withlog?fileUrl=${fileUrl}&autoDeploy=${autoDeploy}&:X_Access_Token=${LocalStore.get(TOKEN_KEY)}` @@ -112,21 +112,21 @@ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boo * 设备导出 * @param productId 产品id * @param type 文件类型 - * @returns + * @returns */ export const deviceExport = (productId: string, type: string, params?: any) => server.get(`/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`, params, {responseType: 'blob'}) export const deviceExportPath = (productId: string, type: string) => (`${BASE_API_PATH}/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`) /** * 验证设备ID是否重复 * @param id 设备id - * @returns + * @returns */ export const isExists = (id: string) => server.get(`/device-instance/${id}/exists`) /** * 修改设备信息 * @param data 设备信息 - * @returns + * @returns */ export const update = (data: Partial) => data.id ? server.patch(`/device-instance`, data) : server.post(`/device-instance`, data) @@ -134,27 +134,27 @@ export const update = (data: Partial) => data.id ? server.patch( * 修改设备信息 * @param id 设备id * @param data 设备信息 - * @returns + * @returns */ export const modify = (id: string, data: Partial) => server.put(`/device-instance/${id}`, data) /** * 获取配置信息 * @param id 设备id - * @returns + * @returns */ export const getConfigMetadata = (id: string) => server.get(`/device-instance/${id}/config-metadata`) /** * 断开连接 * @param id 设备id - * @returns + * @returns */ export const _disconnect = (id: string) => server.post(`/device-instance/${id}/disconnect`) /** * 查询用户列表 - * @returns + * @returns */ export const queryUserListNoPaging = () => server.post(`/user/_query/no-paging`, { paging: false, @@ -164,16 +164,16 @@ export const queryUserListNoPaging = () => server.post(`/user/_query/no-paging`, /** * 保存设备关系 * @param id 设备id - * @param data - * @returns + * @param data + * @returns */ export const saveRelations = (id: string, data: Record) => server.patch(`/device/instance/${id}/relations`, data) /** * 修改标签 * @param id 设备id - * @param data - * @returns + * @param data + * @returns */ export const saveTags = (id: string, data: Record) => server.patch(`/device/instance/${id}/tag`, data) @@ -181,14 +181,14 @@ export const saveTags = (id: string, data: Record) => server.patch( * 删除标签 * @param deviceId 设备id * @param id 标签id - * @returns + * @returns */ export const delTags = (deviceId: string, id: string) => server.remove(`/device/instance/${deviceId}/tag/${id}`) /** * 恢复默认配置 * @param deviceId 设备id - * @returns + * @returns */ export const configurationReset = (deviceId: string) => server.put(`/device-instance/${deviceId}/configuration/_reset`) @@ -196,16 +196,16 @@ export const configurationReset = (deviceId: string) => server.put(`/device-inst * 查询事件详情列表 * @param deviceId 设备id * @param eventId 事件id - * @param data - * @returns + * @param data + * @returns */ export const getEventList = (deviceId: string, eventId: string, data: Record) => server.post(`/device-instance/${deviceId}/event/${eventId}?format=true`, data) /** * 设置属性至设备 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const setProperty = (deviceId: string, data: Record) => server.put(`/device-instance/${deviceId}/property`, data) @@ -213,7 +213,7 @@ export const setProperty = (deviceId: string, data: Record) => serv * 获取最新属性值 * @param deviceId 设备id * @param type 属性id - * @returns + * @returns */ export const getProperty = (deviceId: string, type: string) => server.get(`/device/standard/${deviceId}/property/${type}`) @@ -221,7 +221,7 @@ export const getProperty = (deviceId: string, type: string) => server.get(`/devi * 查询设备的物模型指标 * @param deviceId 设备id * @param propertyId 属性id - * @returns + * @returns */ export const queryMetric = (deviceId: string, propertyId: string) => server.get(`/device-instance/${deviceId}/metric/property/${propertyId}`) @@ -229,8 +229,8 @@ export const queryMetric = (deviceId: string, propertyId: string) => server.get( * 保存设备的物模型指标 * @param deviceId 设备id * @param propertyId 属性id - * @param data - * @returns + * @param data + * @returns */ export const saveMetric = (deviceId: string, propertyId: string, data: Record) => server.patch(`/device-instance/${deviceId}/metric/property/${propertyId}`, data) @@ -238,24 +238,24 @@ export const saveMetric = (deviceId: string, propertyId: string, data: Record) => server.post(`/device/gateway/${deviceId}/unbind/${childrenId}`, data) /** * 批量解绑子设备 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const unbindBatchDevice = (deviceId: string, data: Record) => server.post(`/device/gateway/${deviceId}/unbind`, data) /** * 子设备绑定 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const bindDevice = (deviceId: string, data: Record) => server.post(`/device/gateway/${deviceId}/bind`, data) @@ -271,7 +271,7 @@ export const queryDeviceMapping = (deviceId: string, data?: any) => server.post( export const saveDeviceMapping = (deviceId: string, data: any) => server.post(`/edge/operations/${deviceId}/device-mapping-save-batch/invoke`, data) /** - *批量删除云端映射设备 + *批量删除云端映射设备 */ export const deleteDeviceMapping = (deviceId: string, data:any) => server.post(`/edge/operations/${deviceId}/device-mapping-delete-by-deviceid/invoke`, data) @@ -294,64 +294,64 @@ export const addDevice = (params: any) => server.post("/device-instance", params /** * 设备接入网关状态 * @param id 设备接入网关id - * @returns + * @returns */ export const queryGatewayState = (id: string) => server.get(`/gateway/device/${id}/detail`) /** * 网络组件状态 * @param id 网络组件id - * @returns + * @returns */ export const queryNetworkState = (id: string) => server.get(`/network/config/${id}`) /** * 产品状态 * @param id 产品id - * @returns + * @returns */ export const queryProductState = (id: string) => server.get(`/device/product/${id}`) /** * 产品配置 * @param id 产品id - * @returns + * @returns */ export const queryProductConfig = (id: string) => server.get(`/device/product/${id}/config-metadata`) /** * 设备配置 * @param id 设备id - * @returns + * @returns */ export const queryDeviceConfig = (id: string) => server.get(`/device-instance/${id}/config-metadata`) /** * 查询协议 - * @param type - * @param transport - * @returns + * @param type + * @param transport + * @returns */ export const queryProtocolDetail = (type: string, transport: string) => server.get(`/protocol/${type}/transport/${transport}`) /** * 网络组件启用 * @param id 网络组件ID - * @returns + * @returns */ export const startNetwork = (id: string) => server.post(`/network/config/${id}/_start`) /** * 启用网关 * @param id 网关id - * @returns + * @returns */ export const startGateway = (id: string) => server.post(`/gateway/device/${id}/_startup`) /** * 网关详情 * @param id 网关id - * @returns + * @returns */ export const getGatewayDetail = (id: string) => server.get(`/gateway/device/${id}`) @@ -366,231 +366,231 @@ export const getUnit = () => server.get(`/protocol/units`) * 执行功能 * @param deviceId 设备id * @param functionId 功能id - * @param data - * @returns + * @param data + * @returns */ export const executeFunctions = (deviceId: string, functionId: string, data: any) => server.post(`/device/invoked/${deviceId}/function/${functionId}`, data) /** * 读取属性 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const readProperties = (deviceId: string, data: any) => server.post(`/device/instance/${deviceId}/properties/_read`, data) /** * 设置属性 * @param deviceId 设备id - * @param data - * @returns + * @param data + * @returns */ export const settingProperties = (deviceId: string, data: any) => server.put(`/device/instance/${deviceId}/property`, data) /** * 设备功能-执行 * @param id 设备id - * @param action - * @param data - * @returns + * @param action + * @param data + * @returns */ export const execute = (id: string, action: string, data: any) => server.post(`/device/invoked/${id}/function/${action}`, data) /** * 查询通道列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryChannelNoPaging = (data: any) => server.post(`data-collect/channel/_query/no-paging`, data) /** * 查询采集器列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryCollectorNoPaging = (data: any) => server.post(`/data-collect/collector/_query/no-paging`, data) /** * 查询点位列表不分页 - * @param data - * @returns + * @param data + * @returns */ export const queryPointNoPaging = (data: any) => server.post(`/data-collect/point/_query/no-paging`, data) /** * 查询映射列表 - * @param thingType - * @param thingId - * @param params - * @returns + * @param thingType + * @param thingId + * @param params + * @returns */ export const queryMapping = (thingType: string, thingId: any, params?: any) => server.get(`/things/collector/${thingType}/${thingId}/_query`, params) /** * 删除映射 - * @param thingType - * @param thingId - * @param data - * @returns + * @param thingType + * @param thingId + * @param data + * @returns */ export const removeMapping = (thingType: string, thingId: any, data?: any) => server.post(`/things/collector/${thingType}/${thingId}/_delete`, data) /** * 映射树 - * @param data - * @returns + * @param data + * @returns */ export const treeMapping = (data?: any) => server.post(`/data-collect/channel/_all/tree`, data) /** * 保存映射 - * @param thingId - * @param provider - * @param data - * @returns + * @param thingId + * @param provider + * @param data + * @returns */ export const saveMapping = (thingId: any, provider: string, data?: any) => server.patch(`/things/collector/device/${thingId}/${provider}`, data) /** * 查询边缘网关通道 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgeChannel = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-channel-list/invoke`, data) /** * 查询边缘网关采集器 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgeCollector = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-list/invoke`, data) /** * 查询边缘网关点位 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const edgePoint = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-point-list/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const getEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-list/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const removeEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-delete/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const treeEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/data-collector-channel-tree/invoke`, data) /** - * - * @param deviceId - * @param data - * @returns + * + * @param deviceId + * @param data + * @returns */ export const saveEdgeMap = (deviceId: string, data?: any) => server.post(`/edge/operations/${deviceId}/device-collector-save/invoke`, data) /** * 查询属性详情 - * @param deviceId - * @param params - * @returns + * @param deviceId + * @param params + * @returns */ export const getPropertyData = (deviceId: string, params: Record) => server.get(`/device-instance/${deviceId}/properties/_query`, params) /** * 聚合查询设备属性 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const getPropertiesInfo = (deviceId: string, data: Record) => server.post(`/device-instance/${deviceId}/agg/_query`, data) /** * 聚合查询设备属性 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const getPropertiesList = (deviceId: string, property: string, data: Record) => server.post(`/device-instance/${deviceId}/property/${property}/_query/no-paging`, data) /** * 获取指定协议 - * @param id - * @param transport - * @returns + * @param id + * @param transport + * @returns */ export const getProtocal = (id: string, transport: string) => server.get(`/protocol/${id}/transport/${transport}`) /** * 获取产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const productCode = (productId: string) => server.get(`/device/transparent-codec/${productId}`) /** * 保存产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const saveProductCode = (productId: string, data: Record) => server.post(`/device/transparent-codec/${productId}`, data) /** * 获取设备解析规则 - * @param productId - * @param deviceId - * @returns + * @param productId + * @param deviceId + * @returns */ export const deviceCode = (productId: string, deviceId: string) => server.get(`device/transparent-codec/${productId}/${deviceId}`) /** * 保存设备解析规则 - * @param productId + * @param productId * 查询设备日志 - * @param deviceId - * @param data - * @returns + * @param deviceId + * @param data + * @returns */ export const saveDeviceCode = (productId: string, deviceId: string, data: Record) => server.post(`/device/transparent-codec/${productId}/${deviceId}`, data) /** * 编码测试 - * @param data - * @returns + * @param data + * @returns */ export const testCode = (data: Record) => server.post(`/device/transparent-codec/decode-test`, data) /** * 删除设备解析规则 - * @param productId - * @param deviceId - * @returns + * @param productId + * @param deviceId + * @returns */ export const delDeviceCode = (productId: string, deviceId: string) => server.remove(`/device/transparent-codec/${productId}/${deviceId}`) /** * 删除产品解析规则 - * @param productId - * @returns + * @param productId + * @returns */ export const delProductCode = (productId: string) => server.remove(`/device/transparent-codec/${productId}`) export const queryLog = (deviceId: string, data: Record) => server.post(`/device-instance/${deviceId}/logs`, data) /** * 查询设备日志类型 - * @returns + * @returns */ export const queryLogsType = () => server.get(`/dictionary/device-log-type/items`) @@ -626,13 +626,60 @@ export const queryProductCodeTips = (productId: string) => server.get(`/device/t /** * 获取设备物模型规则TS * @param deviceId 设备ID - * @returns + * @returns */ -export const queryTypescript = (deviceId:string) => server.get(`/device/${deviceId}/virtual-property.d.ts`) +export const queryTypescript = (deviceId:string) => server.get(`/device/${deviceId}/virtual-property.d.ts`) /** * 获取产品物模型规则TS * @param productId 产品ID + * @returns + */ +export const queryProductTs = (productId:string) => server.get(`/product/${productId}/virtual-property.d.ts`) + +/** + * 阈值限制-新增/修改-产品 + * @param data + */ +export const updateProductThreshold = (productId:string,propertyId:string,data: any) => server.put(`/message/preprocessor/product/${productId}/property/${propertyId}`, data) + +/** + * 阈值限制-新增/修改-设备 + * @param data + */ +export const updateDeviceThreshold = (productId:string,deviceId:string,propertyId:string,data: any) => server.put(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`, data) + +/** + * 阈值限制-设备物模型阈值限制 + * @param productId + * @param deviceId + * @param propertyId + */ +export const queryDeviceThreshold = (productId: string, deviceId: string, propertyId: string) => server.get(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`) + +/** + * 阈值限制-产品物模型阈值限制 + * @param productId + * @param propertyId + */ +export const queryProductThreshold = (productId: string, propertyId: string) => server.get(`/message/preprocessor/product/${productId}/property/${propertyId}`) + +/** + * 阈值限制-删除产品物模型的阈值 + * @param productId + * @param propertyId * @returns */ -export const queryProductTs = (productId:string) => server.get(`/product/${productId}/virtual-property.d.ts`) \ No newline at end of file +export const deleteProductThreshold = (productId:string,propertyId:string,data:any) => server.remove(`/message/preprocessor/product/${productId}/property/${propertyId}`,data) + +/** + * 阈值限制-删除产品物模型的阈值 + * @param productId + * @param propertyId + * @returns + */ +export const deleteDeviceThreshold = (productId:string,deviceId:string,propertyId:string,data:any) => server.remove(`/message/preprocessor/device/${productId}/${deviceId}/property/${propertyId}`,data) + +export const getTemplate = (id: string, format: string) => `${BASE_API_PATH}/device/instance/${id}/property-metadata/template.${format}` + +export const uploadAnalyzeMetadata = (data: any) => server.post('/device/instance/property-metadata/file/analyze', data) diff --git a/src/api/device/product.ts b/src/api/device/product.ts index de7e0256..90de1d2a 100644 --- a/src/api/device/product.ts +++ b/src/api/device/product.ts @@ -1,11 +1,12 @@ import { OperatorItem } from '@/components/FRuleEditor/Operator/typings' import server from '@/utils/request' import { DeviceMetadata, ProductItem, DepartmentItem, MetadataType } from '@/views/device/Product/typings' +import {BASE_API_PATH} from "@/utils/variable"; /** * 根据条件查询产品(不带翻页) * @param data 查询条件 - * @returns + * @returns */ export const queryNoPagingPost = (data: any) => server.post(`/device-product/_query/no-paging?paging=false`, data) @@ -14,7 +15,7 @@ export const queryNoPagingPost = (data: any) => server.post(`/device-product/_qu * @param direction from|to * @param type 物模型类型 * @param data 物模型数据 - * @returns + * @returns */ export const convertMetadata = (direction: 'from' | 'to', type: string, data: any) => server.post(`/device/product/metadata/convert-${direction}/${type}`, data) @@ -22,20 +23,20 @@ export const convertMetadata = (direction: 'from' | 'to', type: string, data: an * 修改产品 * @param id 产品ID * @param data 产品数据 - * @returns + * @returns */ export const modify = (id: string, data: any) => server.put(`/device-product/${id}`, data) /** - * - * @returns + * + * @returns */ export const getCodecs = () => server.get<{id: string, name: string}>('/device/product/metadata/codecs') /** * 根据产品ID获取产品详情 * @param id 产品ID - * @returns + * @returns */ export const detail = (id: string) => server.get(`/device-product/${id}`) @@ -80,31 +81,31 @@ export const category = (data: any) => server.get('/device/category/_tree?paging /** * 启用产品 * @param productId 产品ID - * @param data - * @returns + * @param data + * @returns */ export const _deploy = (productId: string) => server.post(`/device-product/${productId}/deploy`) /** * 禁用产品 * @param productId 产品ID - * @param data - * @returns + * @param data + * @returns */ export const _undeploy = (productId: string) => server.post(`/device-product/${productId}/undeploy`) /** * 新增产品 - * @param data - * @returns + * @param data + * @returns */ export const addProduct = (data:any) => server.post('/device-product',data) /** * 修改产品 * @param id 产品ID - * @param data - * @returns + * @param data + * @returns */ export const editProduct = (data: any) => server.put(`/device-product/${data.id}`, data) @@ -122,7 +123,7 @@ export const deleteProduct = (id: string) => server.remove(`/device-product/${id /** * 保存产品 * @param data 产品信息 - * @returns + * @returns */ export const saveProductMetadata = (data: Record) => server.patch('/device-product', data) @@ -219,5 +220,7 @@ export const saveProductVirtualProperty = (productId: string, data: any[]) => se export const queryProductVirtualProperty = (productId: string, propertyId: string) => server.get(`/virtual/property/product/${productId}/${propertyId}`) +export const getTemplate = (id: string, format: string) => `${BASE_API_PATH}/device/product/${id}/property-metadata/template.${format}` + diff --git a/src/api/northbound/alicloud.ts b/src/api/northbound/alicloud.ts index 669899ef..89d278db 100644 --- a/src/api/northbound/alicloud.ts +++ b/src/api/northbound/alicloud.ts @@ -7,6 +7,11 @@ import server from '@/utils/request' */ export const query = (data: Record) => server.post('/device/aliyun/bridge/_query', data) +/** + * 查询数据不分页 + */ +export const queryPaginateNot = (data: any) => server.post('/device/aliyun/bridge/_query/no-paging', data) + /** * 查询产品列表 * @param data diff --git a/src/api/northbound/dueros.ts b/src/api/northbound/dueros.ts index 63562377..e7d95784 100644 --- a/src/api/northbound/dueros.ts +++ b/src/api/northbound/dueros.ts @@ -7,6 +7,11 @@ import server from '@/utils/request' */ export const query = (data: Record) => server.post('/dueros/product/_query', data) +/** + * 查询数据不分页 + */ +export const queryPaginateNot = (data:any) => server.post('/dueros/product/_query/no-paging',data) + /** * 查询产品列表 * @param id diff --git a/src/api/rule-engine/configuration.ts b/src/api/rule-engine/configuration.ts index 5570a740..99548f49 100644 --- a/src/api/rule-engine/configuration.ts +++ b/src/api/rule-engine/configuration.ts @@ -46,7 +46,15 @@ export const detail = (id:string) => server.get(`/alarm/config/${id}`); export const unbindScene = (id:string,data:any) => server.post(`/alarm/rule/bind/${id}/_delete`,data); +export const unBindAlarm = (id: string, alarmId: string, data: any) => server.post(`/alarm/rule/bind/${alarmId}/${id}/_delete`, data) +export const unBindAlarmMultiple = (data: any) => server.post(`/alarm/rule/bind/_delete`, data) /** * 保存关联场景 */ export const bindScene = (data:any) => server.patch("/alarm/rule/bind",data) + +/** + * 查询关联的场景执行动作id + * @param data + */ +export const queryBindScene = (data:any) => server.post("/alarm/rule/bind/_query",data) diff --git a/src/api/rule-engine/log.ts b/src/api/rule-engine/log.ts index 1f88a9d5..27288831 100644 --- a/src/api/rule-engine/log.ts +++ b/src/api/rule-engine/log.ts @@ -25,6 +25,13 @@ export const getOrgList = (parmas?:any) => server.get('/organization/_query/no-p */ export const query = (data:any) => server.post('/alarm/record/_query/',data); +/** + * 设备产品专用查询 + * @param data + * @returns + */ +export const queryByDevice = (data:any) => server.post(`/alarm/record/device/_query`,data) + /** * 告警处理 */ @@ -49,4 +56,14 @@ export const queryHistoryList = (data:any) => server.post('/alarm/history/_query /** * 获取告警处理结果 */ -export const queryHandleHistory = (data:any) => server.post('/alarm/record/handle-history/_query',data); \ No newline at end of file +export const queryHandleHistory = (data:any) => server.post('/alarm/record/handle-history/_query',data); + +/** + * 获取告警日志(新) + */ +export const queryLogList = (alarmConfigId:any,data:any) => server.post(`/alarm/history/${alarmConfigId}/_query`,data) + +/** + * 查询无效数据 + */ +export const queryInvalidData = (data:any) => server.post('/message/preprocessor/invalid/_query',data) diff --git a/src/api/rule-engine/scene.ts b/src/api/rule-engine/scene.ts index 2fe75528..9fbe6435 100644 --- a/src/api/rule-engine/scene.ts +++ b/src/api/rule-engine/scene.ts @@ -27,4 +27,7 @@ export const queryBuiltInParams = (data: any, params?: any) => server.post(`/sce export const getParseTerm = (data: Record) => server.post(`/scene/parse-term-column`, data) -export const queryAlarmList = (data: Record) => server.post(`/alarm/config/_query/`, data) +export const queryAlarmPage = (data: Record) => server.post(`/alarm/config/_query`, data) + +export const queryAlarmList = (data: Record) => server.post(`/alarm/config/_query/no-paging`, data) +export const queryAlarmCount = (data: Record) => server.post(`/alarm/config/_count`, data) diff --git a/src/api/system/calendar.ts b/src/api/system/calendar.ts new file mode 100644 index 00000000..2b3b2cdd --- /dev/null +++ b/src/api/system/calendar.ts @@ -0,0 +1,17 @@ +import server from '@/utils/request'; +//编辑标签 +export const saveTag = (data:any) => server.patch('/calendar/tags',data) +//查询标签列表 +export const queryTags = () => server.get('/calendar/tags') +//删除标签 +export const deleteTags = (ids:any) => server.remove('/calendar/tags',{},{data:ids}) +//保存标签颜色 +export const saveTagsColor = (data:any) => server.post('/system/config/calendar-tag-color',data) +//查询标签颜色 +export const getTagsColor = () => server.get('/system/config/calendar-tag-color'); +//查询指定日期内的日历 +export const queryEvents = (dateFrom:any,dateTo:any) => server.get(`/calendar/${dateFrom}/${dateTo}`) +//批量保存指定日期的日历 +export const saveEvents = (data:any) => server.patch('/calendar',data) +//清空日历 +export const clearAll = () => server.remove('/calendar/mine/_all') \ No newline at end of file diff --git a/src/components/AMapComponent/index.vue b/src/components/AMapComponent/AMap.vue similarity index 100% rename from src/components/AMapComponent/index.vue rename to src/components/AMapComponent/AMap.vue diff --git a/src/components/AMapComponent/DistrictSearch.vue b/src/components/AMapComponent/DistrictSearch.vue new file mode 100644 index 00000000..d64d9654 --- /dev/null +++ b/src/components/AMapComponent/DistrictSearch.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/components/AMapComponent/GeoJson.vue b/src/components/AMapComponent/GeoJson.vue new file mode 100644 index 00000000..9b61b97f --- /dev/null +++ b/src/components/AMapComponent/GeoJson.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/AMapComponent/index.ts b/src/components/AMapComponent/index.ts new file mode 100644 index 00000000..d5ebf374 --- /dev/null +++ b/src/components/AMapComponent/index.ts @@ -0,0 +1,7 @@ +import AMap from './AMap.vue' + +export * from './useMap' +export { default as DistrictSearch } from './DistrictSearch.vue' +export { default as GeoJson } from './GeoJson.vue' + +export default AMap diff --git a/src/components/AMapComponent/useMap.ts b/src/components/AMapComponent/useMap.ts new file mode 100644 index 00000000..61a634c8 --- /dev/null +++ b/src/components/AMapComponent/useMap.ts @@ -0,0 +1,4 @@ +export const useMap = () => { + return inject('parentInstance') +} + diff --git a/src/components/AlarmLeveIcon/index.vue b/src/components/AlarmLeveIcon/index.vue new file mode 100644 index 00000000..c8b52ecd --- /dev/null +++ b/src/components/AlarmLeveIcon/index.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/components/BadgeStatus/color.ts b/src/components/BadgeStatus/color.ts index a6f8d8fa..d79c300a 100644 --- a/src/components/BadgeStatus/color.ts +++ b/src/components/BadgeStatus/color.ts @@ -5,12 +5,6 @@ const color = { 'success': '36, 178, 118', 'warning': '255, 144, 0', 'default': '102, 102, 102', - //告警颜色 - 'level1': '229, 0, 18', - 'level2': '255, 148, 87', - 'level3': '250, 189, 71', - 'level4': '153, 153, 153', - 'level5': '196, 196, 196' } export const getHexColor = (code: string, pe: number = 0.1) => { const _color = color[code] || color.default diff --git a/src/components/BatchDropdown/index.vue b/src/components/BatchDropdown/index.vue index 928bed9a..f7b17f28 100644 --- a/src/components/BatchDropdown/index.vue +++ b/src/components/BatchDropdown/index.vue @@ -53,6 +53,7 @@ diff --git a/src/components/CardSelect/RadioButton.vue b/src/components/CardSelect/RadioButton.vue new file mode 100644 index 00000000..48fb30fb --- /dev/null +++ b/src/components/CardSelect/RadioButton.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/CardSelect/index.ts b/src/components/CardSelect/index.ts new file mode 100644 index 00000000..a3abafb4 --- /dev/null +++ b/src/components/CardSelect/index.ts @@ -0,0 +1,11 @@ +import CardSelect from './CardSelect.vue'; +import type { App } from 'vue'; + +CardSelect.name = 'JCardSelect'; + +CardSelect.install = function (app: App) { + app.component('JCardSelect', CardSelect); + return app; +}; + +export default CardSelect; diff --git a/src/components/CheckButton/CheckButton.vue b/src/components/CheckButton/CheckButton.vue new file mode 100644 index 00000000..3746f451 --- /dev/null +++ b/src/components/CheckButton/CheckButton.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/CheckButton/index.ts b/src/components/CheckButton/index.ts new file mode 100644 index 00000000..ea647f55 --- /dev/null +++ b/src/components/CheckButton/index.ts @@ -0,0 +1,3 @@ +import CheckButton from "./CheckButton.vue"; + +export default CheckButton diff --git a/src/components/ConfirmModal/index.vue b/src/components/ConfirmModal/index.vue new file mode 100644 index 00000000..7d58d944 --- /dev/null +++ b/src/components/ConfirmModal/index.vue @@ -0,0 +1,76 @@ + + + + diff --git a/src/components/FRuleEditor-copy/Operator/index.vue b/src/components/FRuleEditor-copy/Operator/index.vue deleted file mode 100644 index 2fdce988..00000000 --- a/src/components/FRuleEditor-copy/Operator/index.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - diff --git a/src/components/FRuleEditor/Debug/index.vue b/src/components/FRuleEditor/Debug/index.vue index 672da007..d21df3f9 100644 --- a/src/components/FRuleEditor/Debug/index.vue +++ b/src/components/FRuleEditor/Debug/index.vue @@ -3,6 +3,11 @@
+ -
{{ @@ -71,7 +38,7 @@ :pagination="false" bordered size="small" - :scroll="{ y: 200 }" + :scroll="{ y: 180 }" > @@ -56,8 +59,12 @@ const props = defineProps({ type: String, default: '', }, + tableData: { + type: Array, + default: [], + }, }); -const emits = defineEmits(['change']); +const emits = defineEmits(['change', 'addAll', 'cancelAll']); const channelId = props.data?.channelId; const instanceNumber = props.data?.configuration?.instanceNumber; @@ -70,8 +77,11 @@ const treeData = ref(); const treeAllData = ref(); const onLoadData = async () => { - spinning.value = true - const resp: any = await getBacnetObjectList(channelId, instanceNumber).finally(() => spinning.value = false); + spinning.value = true; + const resp: any = await getBacnetObjectList( + channelId, + instanceNumber, + ).finally(() => (spinning.value = false)); if (resp.status === 200) { treeData.value = resp.result.map((item: any) => { return { @@ -101,7 +111,7 @@ const handleData = (arr: any): any[] => { }); }; -const onCheck = ( info: any) => { +const onCheck = (info: any) => { const one: any = { ...info }; const list: any = []; const last: any = list.length ? list[list.length - 1] : undefined; @@ -175,27 +185,42 @@ const getPoint = async () => { if (res.status === 200) { selectKeys.value = res.result.map((item: any) => item.pointKey); } - // getScanOpcUAList(); }; -onMounted(() => { - getPoint(); - onLoadData(); -}); - -const getScanOpcUAList = async () => { - spinning.value = true; - const res: any = await getBacnetObjectList(channelId, instanceNumber); - treeAllData.value = res.result.map((item: any) => ({ - ...item, - key: item.id, - title: item.name, - disabled: item?.folder || false, - })); - spinning.value = false; +const allControl = () => { + if (props.tableData.length) { + emits('cancelAll'); + } else { + const allData = treeData.value?.map((i) => { + return { + features: { + value: (i?.features || []).includes('changedOnly'), + check: true, + }, + nodeId: + `${i?.objectId.type}:${i?.objectId.instanceNumber}` || '', + objectId: i?.objectId || {}, + name: i?.name || '', + propertyId: i?.propertyId || '', + valueType: i?.valueType || '', + accessModes: { + value: i?.accessModes || [], + check: true, + }, + type: i?.type, + configuration: { + ...i?.configuration, + interval: { + value: i?.configuration?.interval || 3000, + check: true, + }, + nodeId: i?.id, + }, + }; + }); + emits('addAll', allData); + } }; -// getScanOpcUAList(); - watch( () => isSelected.value, (value) => { @@ -220,6 +245,11 @@ watch( }, { deep: true }, ); + +onMounted(() => { + getPoint(); + onLoadData(); +}); diff --git a/src/views/DataCollect/Collector/Point/index.vue b/src/views/DataCollect/Collector/Point/index.vue index 20d484c1..2cf943ab 100644 --- a/src/views/DataCollect/Collector/Point/index.vue +++ b/src/views/DataCollect/Collector/Point/index.vue @@ -1,6 +1,10 @@ - + diff --git a/src/views/account/Center/components/BindThirdAccount/index.vue b/src/views/account/Center/components/BindThirdAccount/index.vue index 8e07e584..04620de2 100644 --- a/src/views/account/Center/components/BindThirdAccount/index.vue +++ b/src/views/account/Center/components/BindThirdAccount/index.vue @@ -29,13 +29,10 @@
- - 解除绑定 - + 解除绑定 { - unBind_api(id).then((resp) => { + const response = unBind_api(id) + response.then((resp) => { if (resp.status === 200) { onlyMessage('解绑成功', 'success'); getSsoBinds(); } }); + return response }; const clickBind = (id: string) => { window.open( diff --git a/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue b/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue index a31b86a9..577cd6ed 100644 --- a/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue +++ b/src/views/account/Center/components/StationMessage/components/NotificationRecord/components/ViewDialog.vue @@ -1,29 +1,64 @@ @@ -121,11 +120,10 @@ const handleSearch = async () => { } }; - -const expandedKeys = ref([]) +const expandedKeys = ref([]); const onCheck = (keys: string[], e: any) => { // console.log(expandedKeys.push(e)); - expandedKeys.value.push(e.node.id) + expandedKeys.value.push(e.node.id); checkedKeys.value = [...keys]; leftList.value = e?.checkedNodes || []; }; @@ -155,7 +153,6 @@ const getChannel = async () => { }; const onLoadData: TreeProps['loadData'] = (treeNode) => { - return new Promise(async (resolve) => { if (treeNode.dataRef?.children) { resolve(); diff --git a/src/views/device/Instance/Detail/EdgeMap/index.vue b/src/views/device/Instance/Detail/EdgeMap/index.vue index c3690030..be8caa67 100644 --- a/src/views/device/Instance/Detail/EdgeMap/index.vue +++ b/src/views/device/Instance/Detail/EdgeMap/index.vue @@ -106,68 +106,49 @@ @@ -252,7 +233,7 @@ const columns = [ const permissionStore = usePermissionStore(); const data: any = ref([]); -const isPermission = permissionStore.hasPermission('device/Instance:update'); +// const isPermission = permissionStore.hasPermission('device/Instance:update'); const current = ref(1); const pageSize = ref(10); @@ -348,20 +329,20 @@ const handleSearch = async () => { loading.value = false; }; -const unbind = async (id: string) => { +const unbind = (id: string) => { const _deviceId = instanceStore.current.id; if (id && _deviceId) { - const resp = await removeEdgeMap( - instanceStore.current?.parentId || '', - { - deviceId: _deviceId, - idList: [id], - }, - ); - if (resp.status === 200) { - onlyMessage('操作成功!', 'success'); - handleSearch(); - } + const response = removeEdgeMap(instanceStore.current?.parentId || '', { + deviceId: _deviceId, + idList: [id], + }); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!', 'success'); + handleSearch(); + } + }); + return response; } }; @@ -415,7 +396,7 @@ const onSave = () => { }); }; -const onAction = async (record: any) => { +const onAction = (record: any) => { const array = (modelRef.dataSource || [])?.filter( (item: any) => item.channelId, ); @@ -430,14 +411,17 @@ const onAction = async (record: any) => { provider: array[0]?.provider, requestList: [...filterArray, arr], }; - const resp = await saveEdgeMap( + const response = saveEdgeMap( instanceStore.current.parentId || '', submitData, ); - if (resp.status === 200) { - onlyMessage('操作成功!', 'success'); - onRefresh(); - } + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!', 'success'); + onRefresh(); + } + }); + return response }; const onRefresh = async () => { diff --git a/src/views/device/Instance/Detail/Firmware/index.vue b/src/views/device/Instance/Detail/Firmware/index.vue new file mode 100644 index 00000000..a35dfcae --- /dev/null +++ b/src/views/device/Instance/Detail/Firmware/index.vue @@ -0,0 +1,193 @@ + + + + diff --git a/src/views/device/Instance/Detail/Function/components/Simple.vue b/src/views/device/Instance/Detail/Function/components/Simple.vue index f336564f..b80f812d 100644 --- a/src/views/device/Instance/Detail/Function/components/Simple.vue +++ b/src/views/device/Instance/Detail/Function/components/Simple.vue @@ -76,6 +76,11 @@ value: item.value, })) " + :extra="{ + style: { + zIndex: 1030 + } + }" /> @@ -245,6 +250,10 @@ const handleClear = (func: any) => { const onTabChange = (_key: string) => { executeResult.value = ''; }; + +const getPopupContainer = () => { + return document.body +} \ No newline at end of file + diff --git a/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue b/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue index e5d3870f..f105b1a2 100644 --- a/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue +++ b/src/views/device/Instance/Detail/Running/Property/Detail/TimeComponent.vue @@ -24,12 +24,12 @@ import dayjs from 'dayjs'; import type { Dayjs } from 'dayjs'; import { PropType } from 'vue'; -type Props = [Dayjs, Dayjs] | undefined +type Props = [Dayjs, Dayjs] | undefined; const props = defineProps({ modelValue: { type: Object as PropType, - default: undefined + default: undefined, }, }); @@ -38,14 +38,12 @@ type Emits = { }; const emit = defineEmits(); - const radioValue = ref('today'); const dateValue = ref(); - const onRangeChange = (value: Props) => { emit('update:modelValue', value); radioValue.value = ''; -} +}; const getTime = (type: string): Props => { let st: number = 0; @@ -55,10 +53,10 @@ const getTime = (type: string): Props => { } else if (type === 'week') { st = dayjs().subtract(6, 'days').valueOf(); } else if (type === 'month') { - st = dayjs().subtract(29, 'days').valueOf(); + st = dayjs().subtract(30, 'days').valueOf(); } - return [dayjs(st), dayjs(et)] -} + return [dayjs(st), dayjs(et)]; +}; const onRadioChange = (e: any) => { const value: string = e.target.value; @@ -67,15 +65,15 @@ const onRadioChange = (e: any) => { }; onMounted(() => { - radioValue.value = 'today' + radioValue.value = 'today'; emit('update:modelValue', getTime('today')); -}) +}); watch( () => props.modelValue, (newVal: Props) => { - dateValue.value = newVal + dateValue.value = newVal; }, { immediate: true, deep: true }, ); - \ No newline at end of file + diff --git a/src/views/device/Instance/Detail/Running/Property/Detail/index.vue b/src/views/device/Instance/Detail/Running/Property/Detail/index.vue index aff79dd5..b1adcd17 100644 --- a/src/views/device/Instance/Detail/Running/Property/Detail/index.vue +++ b/src/views/device/Instance/Detail/Running/Property/Detail/index.vue @@ -1,15 +1,32 @@ - + -
+
{ statusRef.value = getWebSocket( `instance-editor-info-status-${id}`, @@ -193,8 +209,10 @@ const getStatus = (id: string) => { { deviceId: id, }, - ).subscribe((message:any) => { - if(message.payload?.value?.type !== instanceStore.current?.state.value){ + ).subscribe((message: any) => { + if ( + message.payload?.value?.type !== instanceStore.current?.state.value + ) { instanceStore.refresh(id); } }); @@ -202,6 +220,12 @@ const getStatus = (id: string) => { const getDetail = () => { const keys = list.value.map((i) => i.key); + if (permissionStore.hasPermission('rule-engine/Alarm/Log:view')) { + list.value.push({ + key: 'AlarmRecord', + tab: '预处理数据', + }); + } if ( instanceStore.current?.protocol && !['modbus-tcp', 'opc-ua'].includes(instanceStore.current?.protocol) && @@ -245,10 +269,10 @@ const getDetail = () => { instanceStore.current?.protocol === 'collector-gateway' && !keys.includes('GateWay') ) { - list.value.push({ - key: 'GateWay', - tab: '数采映射', - }); + list.value.push({ + key: 'GateWay', + tab: '数采映射', + }); } if ( instanceStore.current?.deviceType?.value === 'gateway' && @@ -277,24 +301,26 @@ const getDetail = () => { ) && !keys.includes('MetadataMap') ) { - list.value.push({ key: 'MetadataMap', tab: '物模型映射'}); + list.value.push({ key: 'MetadataMap', tab: '物模型映射' }); } }; const initPage = async (newId: any) => { - await instanceStore.refresh(String(newId)); - getStatus(String(newId)); - list.value = [...initList]; - getDetail(); - instanceStore.tabActiveKey = 'Info'; -} + await instanceStore.refresh(String(newId)); + getStatus(String(newId)); + list.value = [...initList]; + getDetail(); + instanceStore.tabActiveKey = 'Info'; +}; onBeforeRouteUpdate((to: any) => { - if (to.params?.id!==instanceStore.current.id && to.name === 'device/Instance/Detail') { - initPage(to.params?.id) - } -}) - + if ( + to.params?.id !== instanceStore.current.id && + to.name === 'device/Instance/Detail' + ) { + initPage(to.params?.id); + } +}); const getDetailFn = async () => { const _id = route.params?.id; @@ -303,8 +329,11 @@ const getDetailFn = async () => { getStatus(String(_id)); list.value = [...initList]; getDetail(); + instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; + }else{ + instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; } - instanceStore.tabActiveKey = routerParams.params.value.tab || 'Info'; + }; onMounted(() => { @@ -313,31 +342,37 @@ onMounted(() => { const onTabChange = (e: string) => { if (instanceStore.tabActiveKey === 'Metadata') { - EventEmitter.emit('MetadataTabs', () => { - instanceStore.tabActiveKey = e; - }) + EventEmitter.emit('MetadataTabs', () => { + instanceStore.tabActiveKey = e; + }); } else { - instanceStore.tabActiveKey = e; + instanceStore.tabActiveKey = e; } }; -const handleAction = async () => { +const handleAction = () => { if (instanceStore.current?.id) { - const resp = await _deploy(instanceStore.current?.id); - if (resp.status === 200) { - onlyMessage('操作成功!'); - instanceStore.refresh(instanceStore.current?.id); - } + const response = _deploy(instanceStore.current?.id); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!'); + instanceStore.refresh(instanceStore.current?.id); + } + }); + return response; } }; -const handleDisconnect = async () => { +const handleDisconnect = () => { if (instanceStore.current?.id) { - const resp = await _disconnect(instanceStore.current?.id); - if (resp.status === 200) { - onlyMessage('操作成功!'); - instanceStore.refresh(instanceStore.current?.id); - } + const response = _disconnect(instanceStore.current?.id); + response.then((resp) => { + if (resp.status === 200) { + onlyMessage('操作成功!'); + instanceStore.refresh(instanceStore.current?.id); + } + }); + return response; } }; @@ -355,7 +390,7 @@ const jumpProduct = () => { }; onUnmounted(() => { - instanceStore.current = {} as any + instanceStore.current = {} as any; statusRef.value && statusRef.value.unsubscribe(); }); @@ -368,4 +403,4 @@ onUnmounted(() => { overflow: hidden; text-overflow: ellipsis; } - \ No newline at end of file + diff --git a/src/views/device/Instance/index.vue b/src/views/device/Instance/index.vue index e9fcfe4a..681d6395 100644 --- a/src/views/device/Instance/index.vue +++ b/src/views/device/Instance/index.vue @@ -42,112 +42,6 @@ :actions="batchActions" @change="onCheckChange" /> - \ No newline at end of file + diff --git a/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue b/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue index 66661098..84a57060 100644 --- a/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue +++ b/src/views/device/components/Metadata/Base/DetailModal/TagsModal.vue @@ -30,6 +30,7 @@ {{ readTypeText }} + {{ settingData[data.expands?.storageType] }} \ No newline at end of file + diff --git a/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue b/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue index 370dedb6..075bdade 100644 --- a/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue +++ b/src/views/device/components/Metadata/Base/components/Properties/Metrics/Metrics.vue @@ -1,29 +1,44 @@