Przeglądaj źródła

feat: 合并到主分支

yanghao 5 dni temu
rodzic
commit
b71d80772c
100 zmienionych plików z 4700 dodań i 384 usunięć
  1. 4 1
      .env.dev
  2. 1 1
      .env.local
  3. 3 0
      .env.prod
  4. 4 1
      index.html
  5. 6 0
      package.json
  6. 952 344
      pnpm-lock.yaml
  7. BIN
      public/js/EasyPlayer.swf
  8. 0 0
      public/js/EasyWasmPlayer.js
  9. BIN
      public/js/jessibuca-pro/bg.jpg
  10. 0 0
      public/js/jessibuca-pro/decoder-pro-audio.js
  11. BIN
      public/js/jessibuca-pro/decoder-pro-audio.wasm
  12. 0 0
      public/js/jessibuca-pro/decoder-pro-hard-not-wasm.js
  13. 0 0
      public/js/jessibuca-pro/decoder-pro-hard.js
  14. 8 0
      public/js/jessibuca-pro/decoder-pro-mt-worker.js
  15. BIN
      public/js/jessibuca-pro/decoder-pro-mt-worker.wasm
  16. 0 0
      public/js/jessibuca-pro/decoder-pro-mt-worker.worker.js
  17. 0 0
      public/js/jessibuca-pro/decoder-pro-mt.js
  18. 7 0
      public/js/jessibuca-pro/decoder-pro-simd-mt-worker.js
  19. BIN
      public/js/jessibuca-pro/decoder-pro-simd-mt-worker.wasm
  20. 0 0
      public/js/jessibuca-pro/decoder-pro-simd-mt-worker.worker.js
  21. 0 0
      public/js/jessibuca-pro/decoder-pro-simd-mt.js
  22. 0 0
      public/js/jessibuca-pro/decoder-pro-simd.js
  23. BIN
      public/js/jessibuca-pro/decoder-pro-simd.wasm
  24. 0 0
      public/js/jessibuca-pro/decoder-pro.js
  25. BIN
      public/js/jessibuca-pro/decoder-pro.wasm
  26. BIN
      public/js/jessibuca-pro/expand-hover.png
  27. BIN
      public/js/jessibuca-pro/expand.png
  28. BIN
      public/js/jessibuca-pro/jessibuca-logo.png
  29. 0 0
      public/js/jessibuca-pro/jessibuca-pro-multi.js
  30. 0 0
      public/js/jessibuca-pro/jessibuca-pro-talk.js
  31. 0 0
      public/js/jessibuca-pro/jessibuca-pro.js
  32. BIN
      public/js/jessibuca-pro/logo.png
  33. BIN
      public/js/jessibuca-pro/zoom-stop-hover.png
  34. BIN
      public/js/jessibuca-pro/zoom-stop.png
  35. 53 0
      src/api/pms/video/category.ts
  36. 114 0
      src/api/pms/video/channel.ts
  37. 333 0
      src/api/pms/video/device.ts
  38. 8 0
      src/api/pms/video/dicts.ts
  39. 61 0
      src/api/pms/video/group.ts
  40. 158 0
      src/api/pms/video/list.ts
  41. 52 0
      src/api/pms/video/mediaServer.ts
  42. 106 0
      src/api/pms/video/model.ts
  43. 77 0
      src/api/pms/video/product.ts
  44. 44 0
      src/api/pms/video/protocol.ts
  45. 88 0
      src/api/pms/video/record.ts
  46. 53 0
      src/api/pms/video/salve.ts
  47. 34 0
      src/api/pms/video/sipConfig.ts
  48. 73 0
      src/api/pms/video/sipdevice.ts
  49. 64 0
      src/api/pms/video/temp.ts
  50. 53 0
      src/api/pms/video/template.ts
  51. 186 0
      src/api/pms/video/user.ts
  52. 10 0
      src/api/pms/video/warn.ts
  53. 53 0
      src/api/rq/iotmeasurebook/index.ts
  54. BIN
      src/assets/icon/clear.png
  55. BIN
      src/assets/icon/download.png
  56. BIN
      src/assets/icon/fangda-hov.png
  57. BIN
      src/assets/icon/fangda.png
  58. BIN
      src/assets/icon/guangquan+.png
  59. BIN
      src/assets/icon/guangquan-.png
  60. BIN
      src/assets/icon/guangquan-hov+.png
  61. BIN
      src/assets/icon/guangquan-hov-.png
  62. BIN
      src/assets/icon/icon-card.png
  63. BIN
      src/assets/icon/icon-ercode.png
  64. BIN
      src/assets/icon/icon-font.png
  65. BIN
      src/assets/icon/icon-fullscreen.png
  66. BIN
      src/assets/icon/icon-info.png
  67. BIN
      src/assets/icon/icon-list.png
  68. BIN
      src/assets/icon/icon-rank-1.png
  69. BIN
      src/assets/icon/icon-rank-2.png
  70. BIN
      src/assets/icon/icon-rank-3.png
  71. BIN
      src/assets/icon/icon-rank-4.png
  72. BIN
      src/assets/icon/icon-search.png
  73. BIN
      src/assets/icon/jujiao+.png
  74. BIN
      src/assets/icon/jujiao-.png
  75. BIN
      src/assets/icon/jujiao-hov+.png
  76. BIN
      src/assets/icon/jujiao-hov-.png
  77. BIN
      src/assets/icon/save.png
  78. BIN
      src/assets/icon/suoxiao-hov.png
  79. BIN
      src/assets/icon/suoxiao.png
  80. BIN
      src/assets/imgs/gateway.png
  81. 56 0
      src/assets/imgs/gateway.svg
  82. BIN
      src/assets/imgs/product.png
  83. 66 0
      src/assets/imgs/product.svg
  84. BIN
      src/assets/imgs/qrcode.png
  85. BIN
      src/assets/imgs/video.png
  86. 45 0
      src/assets/imgs/video.svg
  87. BIN
      src/assets/imgs/wifi-die.png
  88. BIN
      src/assets/imgs/wifi-live.png
  89. BIN
      src/assets/imgs/zlm-logo.png
  90. 1 0
      src/assets/svgs/device.svg
  91. 1 0
      src/assets/svgs/share.svg
  92. 0 0
      src/assets/svgs/wifi_0.svg
  93. 0 0
      src/assets/svgs/wifi_1.svg
  94. 0 0
      src/assets/svgs/wifi_2.svg
  95. 0 0
      src/assets/svgs/wifi_3.svg
  96. 0 0
      src/assets/svgs/wifi_4.svg
  97. 57 35
      src/components/SvgIcon/index.vue
  98. 70 2
      src/config/axios/service.ts
  99. 344 0
      src/config/axios/service2.ts
  100. 1455 0
      src/locales/zh-CN.ts

+ 4 - 1
.env.dev

@@ -4,7 +4,10 @@ NODE_ENV=production
 VITE_DEV=true
 VITE_DEV=true
 
 
 # 请求路径
 # 请求路径
-VITE_BASE_URL='https://iot.deepoil.cc'
+VITE_BASE_URL='http://1.94.244.160:66'
+
+# MQTT服务地址
+VITE_MQTT_SERVER_URL = ''
 
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
 VITE_UPLOAD_TYPE=server
 VITE_UPLOAD_TYPE=server

+ 1 - 1
.env.local

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=true
 VITE_DEV=true
 
 
 # 请求路径  http://192.168.188.149:48080  https://iot.deepoil.cc
 # 请求路径  http://192.168.188.149:48080  https://iot.deepoil.cc
-VITE_BASE_URL='https://iot.deepoil.cc'
+VITE_BASE_URL='http://192.168.188.149:48080'
 
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server
 VITE_UPLOAD_TYPE=server

+ 3 - 0
.env.prod

@@ -6,6 +6,9 @@ VITE_DEV=false
 # 请求路径
 # 请求路径
 VITE_BASE_URL='https://aims.deepoil.cc'
 VITE_BASE_URL='https://aims.deepoil.cc'
 
 
+# MQTT服务地址
+VITE_MQTT_SERVER_URL = ''
+
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
 VITE_UPLOAD_TYPE=server
 VITE_UPLOAD_TYPE=server
 
 

+ 4 - 1
index.html

@@ -5,8 +5,11 @@
     <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
     <script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.6.1/dist/sockjs.min.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.6.1/dist/sockjs.min.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/stompjs@2.3.3/lib/stomp.min.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/stompjs@2.3.3/lib/stomp.min.js"></script>
-    <script async type="text/javascript" src="/js/base64.min.js"></script>
+    <script type="text/javascript" src="/js/base64.min.js"></script>
     <script src="https://api.map.baidu.com/api?v=3.0&ak=c0crhdxQ5H7WcqbcazGr7mnHrLa4GmO0"></script>
     <script src="https://api.map.baidu.com/api?v=3.0&ak=c0crhdxQ5H7WcqbcazGr7mnHrLa4GmO0"></script>
+
+    <script src="/js/jessibuca-pro/jessibuca-pro.js"></script>
+    <script type="text/javascript" src="/js/EasyWasmPlayer.js"></script>
     <meta charset="UTF-8" />
     <meta charset="UTF-8" />
     <link rel="icon" href="/favicon.ico" />
     <link rel="icon" href="/favicon.ico" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
     <meta http-equiv="X-UA-Compatible" content="IE=edge" />

+ 6 - 0
package.json

@@ -35,6 +35,7 @@
     "@iconify/iconify": "^3.1.1",
     "@iconify/iconify": "^3.1.1",
     "@microsoft/fetch-event-source": "^2.0.1",
     "@microsoft/fetch-event-source": "^2.0.1",
     "@number-flow/vue": "^0.4.8",
     "@number-flow/vue": "^0.4.8",
+    "@riophae/vue-treeselect": "^0.4.0",
     "@types/echarts": "^5.0.0",
     "@types/echarts": "^5.0.0",
     "@videojs-player/vue": "^1.0.0",
     "@videojs-player/vue": "^1.0.0",
     "@vueuse/core": "^10.9.0",
     "@vueuse/core": "^10.9.0",
@@ -57,8 +58,10 @@
     "driver.js": "^1.3.1",
     "driver.js": "^1.3.1",
     "echarts": "^5.6.0",
     "echarts": "^5.6.0",
     "echarts-wordcloud": "^2.1.0",
     "echarts-wordcloud": "^2.1.0",
+    "element-china-area-data": "^6.1.0",
     "element-plus": "2.9.1",
     "element-plus": "2.9.1",
     "fast-xml-parser": "^4.3.2",
     "fast-xml-parser": "^4.3.2",
+    "file-saver": "^2.0.5",
     "highlight.js": "^11.9.0",
     "highlight.js": "^11.9.0",
     "jsencrypt": "^3.3.2",
     "jsencrypt": "^3.3.2",
     "lodash-es": "^4.17.21",
     "lodash-es": "^4.17.21",
@@ -71,6 +74,7 @@
     "mitt": "^3.0.1",
     "mitt": "^3.0.1",
     "moment": "^2.30.1",
     "moment": "^2.30.1",
     "motion-v": "^1.7.4",
     "motion-v": "^1.7.4",
+    "mqtt": "^5.14.1",
     "nprogress": "^0.2.0",
     "nprogress": "^0.2.0",
     "pinia": "^2.1.7",
     "pinia": "^2.1.7",
     "pinia-plugin-persistedstate": "^3.2.1",
     "pinia-plugin-persistedstate": "^3.2.1",
@@ -86,8 +90,10 @@
     "vue-dompurify-html": "^4.1.4",
     "vue-dompurify-html": "^4.1.4",
     "vue-echarts": "^7.0.3",
     "vue-echarts": "^7.0.3",
     "vue-i18n": "9.10.2",
     "vue-i18n": "9.10.2",
+    "vue-json-viewer": "^3.0.4",
     "vue-router": "4.4.5",
     "vue-router": "4.4.5",
     "vue-types": "^5.1.1",
     "vue-types": "^5.1.1",
+    "vue3-next-qrcode": "^4.0.0",
     "vue3-signature": "^0.2.4",
     "vue3-signature": "^0.2.4",
     "vuedraggable": "^4.1.0",
     "vuedraggable": "^4.1.0",
     "vuex": "^4.1.0",
     "vuex": "^4.1.0",

Plik diff jest za duży
+ 952 - 344
pnpm-lock.yaml


BIN
public/js/EasyPlayer.swf


Plik diff jest za duży
+ 0 - 0
public/js/EasyWasmPlayer.js


BIN
public/js/jessibuca-pro/bg.jpg


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-audio.js


BIN
public/js/jessibuca-pro/decoder-pro-audio.wasm


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-hard-not-wasm.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-hard.js


Plik diff jest za duży
+ 8 - 0
public/js/jessibuca-pro/decoder-pro-mt-worker.js


BIN
public/js/jessibuca-pro/decoder-pro-mt-worker.wasm


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-mt-worker.worker.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-mt.js


Plik diff jest za duży
+ 7 - 0
public/js/jessibuca-pro/decoder-pro-simd-mt-worker.js


BIN
public/js/jessibuca-pro/decoder-pro-simd-mt-worker.wasm


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-simd-mt-worker.worker.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-simd-mt.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro-simd.js


BIN
public/js/jessibuca-pro/decoder-pro-simd.wasm


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/decoder-pro.js


BIN
public/js/jessibuca-pro/decoder-pro.wasm


BIN
public/js/jessibuca-pro/expand-hover.png


BIN
public/js/jessibuca-pro/expand.png


BIN
public/js/jessibuca-pro/jessibuca-logo.png


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/jessibuca-pro-multi.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/jessibuca-pro-talk.js


Plik diff jest za duży
+ 0 - 0
public/js/jessibuca-pro/jessibuca-pro.js


BIN
public/js/jessibuca-pro/logo.png


BIN
public/js/jessibuca-pro/zoom-stop-hover.png


BIN
public/js/jessibuca-pro/zoom-stop.png


+ 53 - 0
src/api/pms/video/category.ts

@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+// 查询产品分类列表
+export function listCategory(query) {
+  return request.get({
+    url: '/rq/iot-category/list',
+   
+    params: query
+  })
+}
+
+// 查询产品简短分类列表
+export function listShortCategory(query) {
+  return request.get({
+    url: '/rq/iot-category/shortlist',
+  
+    params: query,
+  })
+}
+
+// 查询产品分类详细
+export function getCategory(categoryId) {
+  return request.get({
+    url: '/rq/iot-category/' + categoryId,
+ 
+  })
+}
+
+// 新增产品分类
+export function addCategory(data) {
+  return request.post({
+    url: '/rq/iot-category',
+    
+    data: data
+  })
+}
+
+// 修改产品分类
+export function updateCategory(data) {
+  return request.put({
+    url: '/rq/iot-category',
+  
+    data: data
+  })
+}
+
+// 删除产品分类
+export function delCategory(categoryId) {
+  return request.delete({
+    url: `/rq/iot-category/delete?id=${categoryId}`
+  
+  })
+}

+ 114 - 0
src/api/pms/video/channel.ts

@@ -0,0 +1,114 @@
+import request from '@/config/axios'
+
+// 查询监控设备通道信息列表
+export async function listChannel(query) {
+  return await request.get({
+    url: '/rq/yf-sip-device-channel/page',
+    params: query
+  })
+}
+
+// 查询监控设备通道信息详细
+export function getChannel(channelId) {
+  return request.get({
+    url: '/sip/channel/' + channelId
+  })
+}
+
+// 新增监控设备通道信息
+export function addChannel(createNum, data) {
+  return request.post({
+    url: '/rq/yf-sip-device-channel/' + createNum,
+
+    data
+  })
+}
+
+// 修改监控设备通道信息
+export function updateChannel(data) {
+  return request.put({
+    url: '/sip/channel',
+
+    data: data
+  })
+}
+
+// 删除监控设备通道信息
+export function delChannel(channelId) {
+  return request.delete({
+    url: '/sip/channel/' + channelId
+  })
+}
+
+// 开始播放
+export function startPlay(deviceId, channelId) {
+  return request.get({
+    url: '/rq/sip/player/play/' + deviceId + '/' + channelId  // /rq/sip/player/play
+  })
+}
+
+// 获取流信息
+export function getStreaminfo(deviceId, channelId) {
+  return request.get({
+    url: '/sip/player/playstream/' + deviceId + '/' + channelId
+  })
+}
+
+export function playbackvideo(deviceId, channelId, query) {
+  return request.get({
+    url: '/rq/sip/player/playback/' + deviceId + '/' + channelId,
+
+    params: query
+  })
+}
+
+export function closeStream(deviceId, channelId, streamId) {
+  return request.get({
+    url: '/rq/sip/player/closeStream/' + deviceId + '/' + channelId + '/' + streamId
+  })
+}
+
+export function playbackPause(deviceId, channelId, streamId) {
+  return request.get({
+    url: '/sip/player/playbackPause/' + deviceId + '/' + channelId + '/' + streamId
+  })
+}
+
+export function playbackReplay(deviceId, channelId, streamId) {
+  return request.get({
+    url: '/sip/player/playbackReplay/' + deviceId + '/' + channelId + '/' + streamId
+  })
+}
+
+export function playbackSeek(deviceId, channelId, streamId, query) {
+  return request.get({
+    url: '/rq/sip/player/playbackSeek/' + deviceId + '/' + channelId + '/' + streamId,
+
+    params: query
+  })
+}
+
+export function playbackSpeed(deviceId, channelId, streamId, query) {
+  return request.get({
+    url: '/sip/player/playbackSpeed/' + deviceId + '/' + channelId + '/' + streamId,
+
+    params: query
+  })
+}
+
+// 监控设备绑定设备或场景
+export function binding(data) {
+  return request.post({
+    url: '/iot/relation/addOrUp',
+
+    data
+  })
+}
+// 通过设备或场景查询监控设备通道信息
+export function listRelDeviceOrScene(query) {
+  return request.get({
+    url: '/sip/channel/listRelDeviceOrScene',
+
+    params: query
+  })
+}

+ 333 - 0
src/api/pms/video/device.ts

@@ -0,0 +1,333 @@
+import request from '@/config/axios'
+
+// 查询设备列表
+export function listDevice(query) {
+    return request.get({
+        url: '/iot/device/list',
+       
+        params: query,
+    });
+}
+
+// 查询未授权设备列表
+export function listUnAuthDevice(query) {
+    return request.get({
+        url: '/iot/device/unAuthlist',
+       
+        params: query,
+    });
+}
+
+// 查询分组可添加设备分页列表
+export function listDeviceByGroup(query) {
+    return request.get({
+        url: '/iot/device/listByGroup',
+        
+        params: query,
+    });
+}
+
+// 查询设备简短列表
+export function listDeviceShort(query) {
+    return request.get({
+        url: '/rq/yf-iot-device/shortList',
+       
+        params: query,
+    });
+}
+
+// 查询所有设备简短列表
+export function listAllDeviceShort() {
+    return request.get({
+        url: '/iot/device/all',
+        
+    });
+}
+
+// 查询设备详细
+export function getDevice(deviceId) {
+    return request.get({
+        url: '/rq/yf-iot-device/' + deviceId,
+        
+    });
+}
+
+// 设备数据同步
+export function deviceSynchronization(serialNumber) {
+    return request.get({
+        url: '/iot/device/synchronization/' + serialNumber,
+       
+    });
+}
+
+// 根据设备编号查询设备详细
+export function getDeviceBySerialNumber(serialNumber) {
+    return request.get({
+        url: '/iot/device/getDeviceBySerialNumber/' + serialNumber,
+       
+    });
+}
+
+// 查询设备统计信息
+export function getDeviceStatistic() {
+    return request.get({
+        url: '/iot/device/statistic',
+       
+    });
+}
+
+// 选择分配设备
+export function distributionDevice(deptId, deviceIds) {
+    return request.post({
+        url: '/iot/device/assignment?deptId=' + deptId + '&deviceIds=' + deviceIds,
+       
+    });
+}
+//回收设备
+export function recycleDevice(deviceIds, recoveryDeptId) {
+    return request.post({
+        url: '/iot/device/recovery?deviceIds=' + deviceIds + '&recoveryDeptId=' + recoveryDeptId,
+        
+    });
+}
+//查询设备导入记录
+export function listImportRecord(params) {
+    return request.get({
+        url: '/iot/record/list',
+       
+        params: params,
+    });
+}
+//查询设备回收记录
+export function listRecycleRecord(params) {
+    return request.get({
+        url: '/iot/record/list',
+       
+        params: params,
+    });
+}
+//查询设备分配记录
+export function listAllotRecord(params) {
+    return request.get({
+        url: '/iot/record/list',
+      
+        params: params,
+    });
+}
+
+// 查询设备运行状态详细
+export function getDeviceRunningStatus(params) {
+    return request.get({
+        url: '/iot/device/runningStatus',
+      
+        params: params,
+    });
+}
+
+// 查询设备物模型的值
+export function getDeviceThingsModelValue(deviceId) {
+    return request.get({
+        url: '/iot/device/thingsModelValue/' + deviceId,
+       
+    });
+}
+
+// 新增设备
+export function addDevice(data) {
+    return request.post({
+        url: '/rq/yf-iot-device',
+        
+        data: data,
+    });
+}
+
+// 修改设备
+export function updateDevice(data) {
+    return request.put({
+        url: '/rq/yf-iot-device',
+       
+        data: data,
+    });
+}
+
+// 删除设备
+export function delDevice(deviceId) {
+    return request.delete({
+        url: '/rq/yf-iot-device/' + deviceId,
+       
+    });
+}
+
+// 生成设备编号
+export function generatorDeviceNum(params) {
+    return request.get({
+        url: '/rq/yf-iot-device/generator',
+        
+        params: params,
+    });
+}
+
+export function getGwDevCode(params) {
+    return request.get({
+        url: '/iot/device/gwDevCount',
+        
+        params: params,
+    });
+}
+
+//mqtt连接参数查看
+export function getMqttConnect(params) {
+    return request.get({
+        url: '/iot/device/getMqttConnectData',
+        
+        params: params,
+    });
+}
+
+
+// 查询设备变量概况
+export function listThingsModel(query) {
+    return request.get({
+        url: '/iot/device/listThingsModel',
+       
+        params: query,
+    });
+}
+
+// 查询设备历史轨迹
+export function getdevicehis(params) {
+    return request.get({
+        url: '/iot/device/devicehis',
+       
+        params: params,
+    });
+}
+
+// 测试dtu
+export function getDevDtu(data) {
+    return request.post({
+        url: '/iot/device/getDevDtu',
+       
+        data: data,
+    });
+}
+
+export function getDtuDeviceList(params) {
+    return request.get({
+        url: '/iot/device/getDtuDeviceList',
+       
+        params: params,
+    });
+}
+
+export function addDeviceUsers(data) {
+    return request.post({
+        url: '/iot/device/addDeviceUsers',
+      
+        data: data,
+    });
+}
+
+export function getDtuDeviceGroup() {
+    return request.get({
+        url: '/iot/device/getDtuDeviceGroup',
+       
+    });
+}
+
+export function updateDtuDevice(data) {
+    return request.post({
+        url: '/iot/device/updateDtuDevice',
+      
+        data: data,
+    });
+}
+
+export function deleteDtuDevice(data) {
+    return request.post({
+        url: '/iot/device/deleteDtuDevice',
+      
+        data: data,
+    });
+}
+
+export function getDtuDeviceGroupList(params) {
+    return request.get({
+        url: '/iot/device/getDtuDeviceGroupList',
+        
+        params: params,
+    });
+}
+
+export function addAndUpdateDtuDevGroup(data) {
+    return request.post({
+        url: '/iot/device/addAndUpdateDtuDevGroup',
+       
+        data: data,
+    });
+}
+
+export function deleteDtuDeviceGroup(params) {
+    return request.get({
+        url: '/iot/device/deleteDtuDeviceGroup',
+        
+        params: params,
+    });
+}
+
+export function selectDeviceAisfptList(params) {
+    return request.get({
+        url: '/iot/device/selectDeviceAisfptList',
+       
+        params: params,
+    });
+}
+
+export function addAndUpdateDeviceAisfpt(data) {
+    return request.post({
+        url: '/iot/device/addAndUpdateDeviceAisfpt',
+        
+        data: data,
+    });
+}
+
+export function deleteDeviceAisfpt(params) {
+    return request.get({
+        url: '/iot/device/deleteDeviceAisfpt',
+       
+        params: params,
+    });
+}
+
+export function getDeviceAbnormalList(query) {
+    return request.get({
+        url: `/iot/device/getDeviceAbnormalList`,
+       
+        params: query
+    })
+}
+
+export function updateMqttConnectData(query) {
+    return request.post({
+        url: `/iot/device/updateMqttConnectData`,
+       
+        data: query
+    })
+}
+
+// 查询设备统计信息
+export function getdeviceBoardList() {
+    return request.get({
+        url: '/iot/device/deviceBoardList',
+       
+    });
+}
+
+
+// 根据经纬度来查询地图上的数据
+export function deviceLongitudeAndLatitudeApi() {
+    return request.get({
+        url: '/iot/device/deviceLongitudeAndLatitude',
+       
+    });
+}

+ 8 - 0
src/api/pms/video/dicts.ts

@@ -0,0 +1,8 @@
+import request from '@/config/axios'
+
+// 查询设备列表
+export function getDicts(type) {
+    return request.get({
+        url: `/system/dict-data/type/${type}`,
+    });
+}

+ 61 - 0
src/api/pms/video/group.ts

@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+
+// 查询设备分组列表
+export function listGroup(query) {
+  return request.get({
+    url: '/rq/iot-group/page',
+   
+    params: query
+  })
+}
+
+// 查询设备分组详细
+export function getGroup(groupId) {
+  return request.get({
+    url: '/rq/iot-group/' + groupId,
+  
+  })
+}
+
+// 查询分组下的关联设备ID数组
+export function getDeviceIds(groupId) {
+  return request.get({
+    url: '/rq/iot-group/getDeviceIds/' + groupId,
+  
+  })
+}
+
+// 新增设备分组
+export function addGroup(data) {
+  return request.post({
+    url: '/rq/iot-group',
+ 
+    data: data
+  })
+}
+
+// 修改设备分组
+export function updateGroup(data) {
+  return request.put({
+    url: '/rq/iot-group',
+ 
+    data: data
+  })
+}
+
+// 更新分组下的设备
+export function updateDeviceGroups(data) {
+  return request.put({
+    url: '/rq/iot-group/updateDeviceGroups',
+  
+    data: data
+  })
+}
+
+// 删除设备分组
+export function delGroup(groupId) {
+  return request.delete({
+    url: '/rq/iot-group/' + groupId,
+   
+  })
+}

+ 158 - 0
src/api/pms/video/list.ts

@@ -0,0 +1,158 @@
+import request from '@/config/axios'
+
+// 查询场景管理列表
+export function getSceneModelList(query) {
+    return request.get({
+        url: '/scene/model/list',
+      
+        params: query,
+    });
+}
+
+// 新增场景管理
+export function addSceneModel(data) {
+    return request.post({
+        url: '/scene/model',
+        
+        data: data,
+    });
+}
+
+// 修改场景管理
+export function updateSceneModel(data) {
+    return request.put({
+        url: '/scene/model',
+       
+        data: data,
+    });
+}
+
+// 删除场景管理
+export function deleteSceneModel(id) {
+    return request.delete({
+        url: '/scene/model/' + id,
+       
+    });
+}
+
+// 获取场景管理详细信息
+export function getSceneModelDetail(id) {
+    return request.get({
+        url: '/scene/model/' + id,
+       
+    });
+}
+
+// 点击查看进入后查询变量列表
+export function getSceneModelDataList(query) {
+    return request.get({
+        url: '/scene/modelData/list',
+       
+        params: query,
+    });
+}
+
+// 查询场景关联设备列表
+export function getSceneModelDeviceList(query) {
+    return request.get({
+        url: '/scene/modelDevice/list',
+       
+        params: query,
+    });
+}
+
+// 新增场景关联设备
+export function addModelDevice(data) {
+    return request.post({
+        url: '/scene/modelDevice',
+       
+        data: data,
+    });
+}
+
+// 删除场景关联设备
+export function deleteModelDevice(id) {
+    return request.delete({
+        url: '/scene/modelDevice/' + id,
+       
+    });
+}
+
+// 编辑场景关联设备
+export function updateModelDevice(data) {
+    return request.put({
+        url: '/scene/modelDevice',
+       
+        data: data,
+    });
+}
+
+// 点击编辑进入后根据类型查询变量列表
+export function getSceneModelDataListByType(query) {
+    return request.get({
+        url: '/scene/modelData/listByType',
+       
+        params: query,
+    });
+}
+
+// 全部启用
+export function enableModelDevice(data) {
+    return request.post({
+        url: '/scene/modelDevice/editEnable',
+      
+        data: data,
+    });
+}
+
+// 启用变量
+export function enableModelData(data) {
+    return request.post({
+        url: '/scene/modelData/editEnable',
+       
+        data: data,
+    });
+}
+
+// 获取场景录入运算变量列表
+export function getSceneModelTagList(query) {
+    return request.get({
+        url: '/scene/modelTag/list',
+       
+        params: query,
+    });
+}
+
+// 新增场景录入运算变量
+export function addSceneModelTag(data) {
+    return request.post({
+        url: '/scene/modelTag',
+       
+        data: data,
+    });
+}
+
+// 编辑场景录入运算变量
+export function updateSceneModelTag(data) {
+    return request.put({
+        url: '/scene/modelTag',
+        
+        data: data,
+    });
+}
+
+// 删除场景录入运算变量
+export function deleteSceneModelTag(id) {
+    return request.delete({
+        url: '/scene/modelTag/' + id,
+       
+    });
+}
+
+// 获取场景录入运算变量详情
+export function getSceneModelTag(id) {
+    return request.get({
+        url: '/scene/modelTag/' + id,
+        
+    });
+}

+ 52 - 0
src/api/pms/video/mediaServer.ts

@@ -0,0 +1,52 @@
+import request from '@/config/axios'
+
+// 查询流媒体服务器配置列表
+export function listmediaServer(query) {
+  return request.get({
+    url: '/rq/yf-media-server/page',
+   
+    params: query
+  })
+}
+
+// 查询流媒体服务器配置详细
+export function getmediaServer() {
+  return request.get({
+    url: '/rq/yf-media-server/',
+    
+  })
+}
+
+// 新增流媒体服务器配置
+export function addmediaServer(data) {
+  return request.post({
+    url: '/rq/yf-media-server/create',
+    
+    data: data
+  })
+}
+
+// 修改流媒体服务器配置
+export function updatemediaServer(data) {
+  return request.put({
+    url: '/rq/yf-media-server/update',
+    
+    data: data
+  })
+}
+
+// 删除流媒体服务器配置
+export function delmediaServer(id) {
+  return request.delete({
+    url: '/rq/yf-media-server/' + id,
+   
+  })
+}
+
+export function checkmediaServer(query) {
+  return request.get({
+    url: '/rq/yf-media-server/check' ,
+    
+    params: query
+  })
+}

+ 106 - 0
src/api/pms/video/model.ts

@@ -0,0 +1,106 @@
+import request from '@/config/axios'
+
+// 查询物模型列表
+export function listModel(query) {
+  return request.get({
+    url: '/rq/iot-things-model/page',
+ 
+    params: query,
+  });
+}
+
+// 查询物模型详细
+export function getModel(modelId) {
+  return request.get({
+    url: '/iot/model/' + modelId,
+   
+  });
+}
+
+// 查询物模型对应分享设备用户权限列表
+export function permListModel(productId) {
+  return request.get({
+    url: '/iot/model/permList/' + productId,
+   
+  });
+}
+
+// 新增物模型
+export function addModel(data) {
+  return request.post({
+    url: '/iot/model',
+
+    data: data,
+  });
+}
+
+// 导入通用物模型
+export function importModel(data) {
+  return request.post({
+    url: '/iot/model/import',
+  
+    data: data,
+  });
+}
+
+// 导入excel物模型
+export function importExcel(data) {
+    return request.post({
+        url: '/iot/model/importExcel',
+        
+        data: data,
+    });
+}
+
+
+// 修改物模型
+export function updateModel(data) {
+  return request.put({
+    url: '/iot/model',
+   
+    data: data,
+  });
+}
+
+// 删除物模型
+export function delModel(modelId) {
+  return request.delete({
+    url: '/iot/model/' + modelId,
+   
+  });
+}
+
+// 根据产品ID获取缓存的物模型
+export function cacheJsonThingsModel(productId) {
+  return request.get({
+    url: '/iot/model/cache/' + productId,
+    
+  });
+}
+
+// 同步采集点模板到产品物模型
+export function synchron(data) {
+  return request.post({
+    url: '/iot/model/synchron',
+   
+    data: data,
+  });
+}
+
+// 根据产品ID获取缓存的物模型
+export function getlListModbus(query) {
+  return request.get({
+    url: '/iot/model/listModbus',
+   
+    params: query,
+  });
+}
+
+// 根据产品ID获取缓存的物模型
+export function getWriteList(query) {
+  return request.get({
+    url: '/iot/model/write',
+ 
+    params: query,
+  });
+}

+ 77 - 0
src/api/pms/video/product.ts

@@ -0,0 +1,77 @@
+import request from '@/config/axios'
+
+// 查询产品列表
+export function listProduct(query) {
+  return request.get({
+    url: '/rq/iot-product/list',
+   
+    params: query
+  })
+}
+
+// 查询产品列表
+export function listShortProduct() {
+  return request.get({
+    url: '/rq/iot-product/shortList',
+    
+  })
+}
+
+// 查询产品详细
+export function getProduct(productId) {
+  return request.get({
+    url: `/rq/iot-product/get?id=${productId}`,
+  })
+}
+
+// 新增产品
+export function addProduct(data) {
+  return request.post({
+    url: '/rq/iot-product',
+   
+    data: data
+  })
+}
+
+// 修改产品
+export function updateProduct(data) {
+  return request.put({
+    url: '/rq/iot-product',
+   
+    data: data
+  })
+}
+
+// 获取产品下设备的数量
+export function deviceCount(productId) {
+  return request.get({
+    url: '/rq/iot-product/deviceCount/' + productId,
+    
+  })
+}
+
+// 更新产品状态
+export function changeProductStatus(data) {
+  return request.put({
+    url: '/rq/iot-product/status',
+   
+    data:data
+  })
+}
+
+// 删除产品
+export function delProduct(productId) {
+  return request.delete({
+    url: '/rq/iot-product/' + productId,
+    
+  })
+}
+
+// 根据采集点模板id查询所有产品
+export function selectByTempleId(params) {
+  return request.get({
+    url: '/rq/iot-product/queryByTemplateId',
+    
+    params: params
+  })
+}

+ 44 - 0
src/api/pms/video/protocol.ts

@@ -0,0 +1,44 @@
+import request from '@/config/axios'
+
+// 查询协议列表
+export function listProtocol(query) {
+  return request.get({
+    url: '/rq/iot-protocol/list',
+    
+    params: query
+  })
+}
+
+// 查询协议详细
+export function getProtocol(id) {
+  return request.get({
+    url: '/rq/iot-protocol' + id,
+    
+  })
+}
+
+// 新增协议
+export function addProtocol(data) {
+  return request.post({
+    url: '/rq/iot-protocol',
+  
+    data: data
+  })
+}
+
+// 修改协议
+export function updateProtocol(data) {
+  return request.put({
+    url: '/rq/iot-protocol',
+   
+    data: data
+  })
+}
+
+// 删除协议
+export function delProtocol(id) {
+  return request.delete({
+    url: '/rq/iot-protocol/' + id,
+    
+  })
+}

+ 88 - 0
src/api/pms/video/record.ts

@@ -0,0 +1,88 @@
+import request from '@/config/axios'
+
+export function getDevRecord(deviceId,channelId,query) {
+  return request.get({
+    url: '/rq/sip/record/devquery/' + deviceId + "/" + channelId,
+ 
+    params: query
+  })
+}
+
+export function getRecord(channelId,sn) {
+  return request.get({
+    url: '/sip/record/query/' + channelId + "/" + sn,
+   
+  })
+}
+
+export function getServerRecord(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/list',
+  
+    params: query
+  })
+}
+
+export function getServerRecordByDate(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/date/list',
+ 
+    params: query
+  })
+}
+
+export function getServerRecordByStream(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/stream/list',
+   
+    params: query
+  })
+}
+
+export function getServerRecordByApp(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/app/list',
+   
+    params: query
+  })
+}
+
+export function getServerRecordByFile(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/file/list',
+   
+    params: query
+  })
+}
+
+export function getServerRecordByDevice(query) {
+  return request.get({
+    url: '/sip/record/serverRecord/device/list',
+   
+    params: query
+  })
+}
+
+export function startPlayRecord(deviceId, channelId) {
+  return request.get({
+    url: '/rq/sip/record/play/' + deviceId + "/" + channelId,
+   
+  })
+}
+
+export function startDownloadRecord(deviceId, channelId, query) {
+  return request.get({
+    url: '/rq/sip/record/download/' + deviceId + "/" + channelId,
+ 
+    params: query
+  })
+}
+
+
+export function uploadRecord(query) {
+  return request.get({
+    url: '/sip/record/upload',
+    
+    params: query
+  })
+}

+ 53 - 0
src/api/pms/video/salve.ts

@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+// 查询变量模板设备从机列表
+export function listSalve(query) {
+  return request.get({
+    url: '/iot/salve/list',
+ 
+    params: query
+  })
+}
+
+// 查询变量模板设备从机详细
+export function getSalve(id) {
+  return request.get({
+    url: '/iot/salve/' + id,
+  
+  })
+}
+
+// 新增变量模板设备从机
+export function addSalve(data) {
+  return request.post({
+    url: '/iot/salve',
+   
+    data: data
+  })
+}
+
+// 修改变量模板设备从机
+export function updateSalve(data) {
+  return request.put({
+    url: '/iot/salve',
+ 
+    data: data
+  })
+}
+
+// 删除变量模板设备从机
+export function delSalve(id) {
+  return request.delete({
+    url: '/iot/salve/' + id,
+   
+  })
+}
+
+//根据产品id查询从机列表
+export function listByPid(params) {
+    return request.get({
+        url: "/iot/salve/listByPId",
+       
+        params: params,
+    })
+}

+ 34 - 0
src/api/pms/video/sipConfig.ts

@@ -0,0 +1,34 @@
+import request from '@/config/axios'
+
+// 查询sip系统配置详细
+export function getSipconfig(productId) {
+  return request.get({
+    url: '/rq/iot-sip-config/' + productId,
+  
+  })
+}
+
+// 新增sip系统配置
+export function addSipconfig(data) {
+  return request.post({
+    url: '/rq/iot-sip-config',
+   
+    data: data
+  })
+}
+
+// 修改sip系统配置
+export function updateSipconfig(data) {
+  return request.put({
+    url: '/rq/iot-sip-config/update',
+  
+    data: data
+  })
+}
+
+export function delSipconfigByProductId(productId) {
+  return request.delete({
+    url: '/rq/iot-sip-config/product/' + productId,
+   
+  })
+}

+ 73 - 0
src/api/pms/video/sipdevice.ts

@@ -0,0 +1,73 @@
+import request from '@/config/axios'
+
+// 查询监控设备列表
+export function listSipDevice(query) {
+  return request.get({
+    url: '/sip/device/list',
+    params: query
+  })
+}
+
+export function listSipDeviceChannel(deviceId) {
+  return request.get({
+    url: '/rq/yf-sip-device/listchannel/'+ deviceId,
+    
+  })
+}
+
+// 查询监控设备详细
+export function getSipDevice(deviceId) {
+  return request.get({
+    url: '/sip/device/' + deviceId,
+  
+  })
+}
+
+// 新增监控设备
+export function addSipDevice(data) {
+  return request.post({
+    url: '/sip/device',
+  
+    data: data
+  })
+}
+
+// 修改监控设备
+export function updateSipDevice(data) {
+  return request.put({
+    url: '/sip/device',
+  
+    data: data
+  })
+}
+
+// 删除监控设备
+export function delSipDevice(deviceId) {
+  return request.delete({
+    url: '/sip/device/' + deviceId,
+   
+  })
+}
+
+export function delSipDeviceBySipId(sipId) {
+  return request.delete({
+    url: '/rq/yf-sip-device/sipid/' + sipId,
+    
+  })
+}
+
+export function ptzdirection(deviceId,channelId,data) {
+  return request.post({
+    url: '/sip/ptz/direction/'+ deviceId + "/" + channelId,
+   
+    data: data
+  })
+}
+
+export function ptzscale(deviceId,channelId,data) {
+  return request.post({
+    url: '/sip/ptz/scale/'+ deviceId + "/" + channelId,
+    
+    data: data
+  })
+}

+ 64 - 0
src/api/pms/video/temp.ts

@@ -0,0 +1,64 @@
+import request from '@/config/axios'
+
+// 查询设备采集变量模板列表
+export function listTemp(query) {
+  return request.get({
+    url: '/rq/iot-var-temp/page',
+    
+    params: query
+  })
+}
+
+// 查询设备采集变量模板详细
+export function getTemp(templateId) {
+  return request.get({
+    url: '/iot/temp/' + templateId,
+   
+  })
+}
+
+// 新增设备采集变量模板
+export function addTemp(data) {
+  return request.post({
+    url: '/iot/temp',
+  
+    data: data
+  })
+}
+
+// 修改设备采集变量模板
+export function updateTemp(data) {
+  return request.put({
+    url: '/iot/temp',
+   
+    data: data
+  })
+}
+
+// 删除设备采集变量模板
+export function delTemp(templateId) {
+  return request.delete({
+    url: '/iot/temp/' + templateId,
+    
+  })
+}
+
+
+//根据产品查询采集点关联
+export function getDeviceTemp(params){
+  return request.get({
+    url: '/iot/temp/getTemp' ,
+    
+    params: params,
+    
+  })
+}
+
+export function getTempByPId(params){
+  return request.get({
+    url: '/rq/iot-var-temp/getTempByPid',
+    params: params,
+    
+
+  })
+}

+ 53 - 0
src/api/pms/video/template.ts

@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+
+// 查询通用物模型列表
+export function listTemplate(query) {
+  return request.get({
+    url: '/rq/iot-things-model-template/list',
+    
+    params: query
+  })
+}
+
+// 查询通用物模型详细
+export function getTemplate(templateId) {
+  return request.get({
+    url: '/iot/template/' + templateId,
+   
+  })
+}
+
+// 新增通用物模型
+export function addTemplate(data) {
+  return request.post({
+    url: '/iot/template',
+  
+    data: data
+  })
+}
+
+// 修改通用物模型
+export function updateTemplate(data) {
+  return request.put({
+    url: '/iot/template',
+   
+    data: data
+  })
+}
+
+// 删除通用物模型
+export function delTemplate(templateId) {
+  return request.delete({
+    url: '/iot/template/' + templateId,
+    
+  })
+}
+
+// 查询通用物模型详细
+export function getAllPoints(params) {
+  return request.get({
+    url: '/rq/iot-things-model-template/getPoints',
+   
+    params: params,
+  })
+}

+ 186 - 0
src/api/pms/video/user.ts

@@ -0,0 +1,186 @@
+import request from '@/config/axios'
+function parseStrEmpty(str) {
+  if (!str || str == "undefined" || str == "null") {
+    return "";
+  }
+  return str;
+}
+
+// 查询用户列表
+export function listUser(query) {
+    return request.get({
+        url: '/system/user/list',
+        
+        params: query,
+    });
+}
+
+// 查询终端用户列表
+export function terminalUserList(query) {
+    return request.get({
+        url: '/system/user/listTerminal',
+       
+        params: query,
+    });
+}
+// 查询用户详细
+export function getUser(userId) {
+    return request.get({
+        url: '/system/user/' + parseStrEmpty(userId),
+       
+    });
+}
+// 查询角色列表
+export function getRole(deptId) {
+    return request.get({
+        url: '/system/dept/getRole?deptId=' + deptId,
+       
+    });
+}
+
+// 新增用户
+export function addUser(data) {
+    return request.post({
+        url: '/system/user',
+       
+        data: data,
+    });
+}
+
+// 修改用户
+export function updateUser(data) {
+    return request.put({
+        url: '/system/user',
+       
+        data: data,
+    });
+}
+
+// 删除用户
+export function delUser(userId) {
+    return request.delete({
+        url: '/system/user/' + userId,
+      
+    });
+}
+
+// 用户密码重置
+export function resetUserPwd(userId, password) {
+    const data = {
+        userId,
+        password,
+    };
+    return request.put({
+        url: '/system/user/resetPwd',
+        
+        data: data,
+    });
+}
+
+// 用户状态修改
+export function changeUserStatus(userId, status) {
+    const data = {
+        userId,
+        status,
+    };
+    return request.put({
+        url: '/system/user/changeStatus',
+       
+        data: data,
+    });
+}
+// 获取微信二维码
+export function getLoginParam() {
+    return request.get({
+        url: '/wechat/getWxBindQr',
+       
+    });
+}
+// 解除绑定
+export function secureBind(data) {
+    return request.post({
+        url: '/wechat/cancelBind',
+       
+        data: data,
+    });
+}
+// 查询用户个人信息
+export function getUserProfile() {
+    return request.get({
+        url: '/system/user/profile',
+       
+    });
+}
+
+// 修改用户个人信息
+export function updateUserProfile(data) {
+    return request.put({
+        url: '/system/user/profile',
+       
+        data: data,
+    });
+}
+
+// 用户密码重置
+export function updateUserPwd(oldPassword, newPassword) {
+    const data = {
+        oldPassword,
+        newPassword,
+    };
+    return request.put({
+        url: '/system/user/profile/updatePwd',
+        
+        params: data,
+    });
+}
+
+// 用户头像上传
+export function uploadAvatar(data) {
+    return request.post({
+        url: '/system/user/profile/avatar',
+       
+        data: data,
+    });
+}
+
+// 查询授权角色
+export function getAuthRole(userId) {
+    return request.get({
+        url: '/system/user/authRole/' + userId,
+        
+    });
+}
+
+// 保存授权角色
+export function updateAuthRole(data) {
+    return request.put({
+        url: '/system/user/authRole',
+      
+        params: data,
+    });
+}
+
+// 查询机构下拉树结构
+export function deptsTreeSelect() {
+    return request.get({
+        url: '/system/user/deptTree',
+       
+    });
+}
+
+// 查询子机构下拉树结构
+export function deptsTreeSelectSub(showOwner) {
+    return request.get({
+        url: '/system/user/deptTree?showOwner=' + showOwner,
+       
+    });
+}
+
+// 查询终端用户列表
+export function getByDeptId(query) {
+  return request.get({
+    url: '/system/user/getByDeptId',
+   
+    params: query,
+  });
+}

+ 10 - 0
src/api/pms/video/warn.ts

@@ -0,0 +1,10 @@
+import request from '@/config/axios'
+
+// 查询用户列表
+export function warnList(query) {
+    return request.get({
+        url: '/rq/iot-video-alarm/page',
+        
+        params: query,
+    });
+}

+ 53 - 0
src/api/rq/iotmeasurebook/index.ts

@@ -0,0 +1,53 @@
+import request from '@/config/axios/service2'
+
+// 计量器具台账 VO
+export interface IotMeasureBookVO {
+  id: number // 主键id
+  measureCode: string // 计量器具编码
+  measureName: string // 计量器具名称
+  classify: string // 分类
+  dutyPerson: string // 责任人
+  buyDate: string // 采购日期
+  brand: string // 品牌
+  modelName: string // 规格型号
+  validity: Date // 有效期
+  lastTime: string // 上次检验/校准日期
+  measureUnit: string // 单位
+  measurePrice: number // 价格
+  measurePic: string // 图片
+  remark: string // 备注
+  deptId: number // 部门id
+}
+
+// 计量器具台账 API
+export const IotMeasureBookApi = {
+  // 查询计量器具台账分页
+  getIotMeasureBookPage: async (params: any) => {
+    return await request.get({ url: `/rq/iot-measure-book/page`, params })
+  },
+
+  // 查询计量器具台账详情
+  getIotMeasureBook: async (id: number) => {
+    return await request.get({ url: `/rq/iot-measure-book/get?id=` + id })
+  },
+
+  // 新增计量器具台账
+  createIotMeasureBook: async (data: IotMeasureBookVO) => {
+    return await request.post({ url: `/rq/iot-measure-book/create`, data })
+  },
+
+  // 修改计量器具台账
+  updateIotMeasureBook: async (data: IotMeasureBookVO) => {
+    return await request.put({ url: `/rq/iot-measure-book/update`, data })
+  },
+
+  // 删除计量器具台账
+  deleteIotMeasureBook: async (id: number) => {
+    return await request.delete({ url: `/rq/iot-measure-book/delete?id=` + id })
+  },
+
+  // 导出计量器具台账 Excel
+  exportIotMeasureBook: async (params) => {
+    return await request.download({ url: `/rq/iot-measure-book/export-excel`, params })
+  },
+}

BIN
src/assets/icon/clear.png


BIN
src/assets/icon/download.png


BIN
src/assets/icon/fangda-hov.png


BIN
src/assets/icon/fangda.png


BIN
src/assets/icon/guangquan+.png


BIN
src/assets/icon/guangquan-.png


BIN
src/assets/icon/guangquan-hov+.png


BIN
src/assets/icon/guangquan-hov-.png


BIN
src/assets/icon/icon-card.png


BIN
src/assets/icon/icon-ercode.png


BIN
src/assets/icon/icon-font.png


BIN
src/assets/icon/icon-fullscreen.png


BIN
src/assets/icon/icon-info.png


BIN
src/assets/icon/icon-list.png


BIN
src/assets/icon/icon-rank-1.png


BIN
src/assets/icon/icon-rank-2.png


BIN
src/assets/icon/icon-rank-3.png


BIN
src/assets/icon/icon-rank-4.png


BIN
src/assets/icon/icon-search.png


BIN
src/assets/icon/jujiao+.png


BIN
src/assets/icon/jujiao-.png


BIN
src/assets/icon/jujiao-hov+.png


BIN
src/assets/icon/jujiao-hov-.png


BIN
src/assets/icon/save.png


BIN
src/assets/icon/suoxiao-hov.png


BIN
src/assets/icon/suoxiao.png


BIN
src/assets/imgs/gateway.png


+ 56 - 0
src/assets/imgs/gateway.svg

@@ -0,0 +1,56 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 81 80" class="design-iconfont">
+  <path d="M46.3594 57.6562H52.2188V55.3125H48.7031V47.0312H46.3594V57.6562Z" fill="url(#kpkn6ylv3__paint0_linear_6946_492)"/>
+  <path d="M28.7812 57.6562H34.6406V47.0312H32.2969V55.3125H28.7812V57.6562Z" fill="url(#kpkn6ylv3__paint1_linear_6946_492)"/>
+  <path d="M41.6719 47.0312H39.3281V54.1406H41.6719V47.0312Z" fill="url(#kpkn6ylv3__paint2_linear_6946_492)"/>
+  <path d="M25.1875 32.6172C25.375 25.6797 31.1719 20 38.1562 20C38.9531 20 39.75 20.0703 40.5 20.2109C44.4141 20.9375 47.7891 23.5234 49.6406 27.1094C52.8281 26.9922 55.5469 29.4766 55.7344 32.6172C58.5703 33.9531 60.5 36.8359 60.5 40C60.5 44.5234 56.7422 48.2031 52.2188 48.2031H28.7812C24.2578 48.2031 20.5 44.5234 20.5 40C20.5 36.8359 22.3516 33.9531 25.1875 32.6172Z" fill="url(#kpkn6ylv3__paint3_linear_6946_492)"/>
+  <path d="M33.4922 40.375L35.5078 41.5937C36.5859 39.8359 38.4375 38.7812 40.5 38.7812C42.5625 38.7812 44.4141 39.8359 45.4922 41.5937L47.5078 40.375C46.0078 37.9141 43.3828 36.4375 40.5 36.4375C37.6172 36.4375 34.9922 37.9141 33.4922 40.375Z" fill="url(#kpkn6ylv3__paint4_linear_6946_492)"/>
+  <path d="M29.5078 37.9375L31.5 39.1562C33.4219 35.9922 36.7969 34.0937 40.5 34.0937C44.2031 34.0937 47.5781 35.9922 49.5 39.1562L51.4922 37.9375C49.1484 34.0703 45.0234 31.75 40.5 31.75C35.9766 31.75 31.8516 34.0703 29.5078 37.9375Z" fill="url(#kpkn6ylv3__paint5_linear_6946_492)"/>
+  <path d="M37.5001 42.8125L39.4923 44.0547C39.7032 43.7031 40.1017 43.5156 40.5001 43.5156C40.8986 43.5156 41.297 43.7031 41.5079 44.0547L43.5001 42.8125C42.8439 41.7578 41.672 41.2188 40.5001 41.2188C39.3282 41.2188 38.1564 41.7578 37.5001 42.8125Z" fill="url(#kpkn6ylv3__paint6_linear_6946_492)"/>
+  <path d="M40.5 52.9688C42.4453 52.9688 44.0156 54.5391 44.0156 56.4844C44.0156 58.4297 42.4453 60 40.5 60C38.5547 60 36.9844 58.4297 36.9844 56.4844C36.9844 54.5391 38.5547 52.9688 40.5 52.9688Z" fill="url(#kpkn6ylv3__paint7_linear_6946_492)"/>
+  <path d="M54.5625 60C56.5 60 58.0781 58.4219 58.0781 56.4844C58.0781 54.5469 56.5 52.9688 54.5625 52.9688C52.625 52.9688 51.0469 54.5469 51.0469 56.4844C51.0469 58.4219 52.625 60 54.5625 60Z" fill="url(#kpkn6ylv3__paint8_linear_6946_492)"/>
+  <path d="M26.4375 60C28.375 60 29.9531 58.4219 29.9531 56.4844C29.9531 54.5469 28.375 52.9688 26.4375 52.9688C24.5 52.9688 22.9219 54.5469 22.9219 56.4844C22.9219 58.4219 24.5 60 26.4375 60Z" fill="url(#kpkn6ylv3__paint9_linear_6946_492)"/>
+  <defs>
+    <linearGradient id="kpkn6ylv3__paint0_linear_6946_492" x1="49.2891" y1="47.0312" x2="49.2891" y2="57.6562" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint1_linear_6946_492" x1="31.7109" y1="47.0312" x2="31.7109" y2="57.6562" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint2_linear_6946_492" x1="40.5" y1="57.1503" x2="40.5" y2="38.7465" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#273A9B"/>
+      <stop offset="1" stop-color="#88CDFF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint3_linear_6946_492" x1="40.5" y1="20" x2="40.5" y2="48.2031" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint4_linear_6946_492" x1="36.7659" y1="38.115" x2="36.7659" y2="41.5937" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint5_linear_6946_492" x1="34.6429" y1="34.1595" x2="34.6429" y2="39.1562" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint6_linear_6946_492" x1="38.9016" y1="42.1414" x2="38.9016" y2="44.0547" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint7_linear_6946_492" x1="38.6267" y1="55.2563" x2="38.6267" y2="60" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint8_linear_6946_492" x1="54.5625" y1="64.2562" x2="54.5625" y2="51.0094" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#F3C57A"/>
+      <stop offset=".49" stop-color="#F39369"/>
+      <stop offset="1" stop-color="#E94867"/>
+    </linearGradient>
+    <linearGradient id="kpkn6ylv3__paint9_linear_6946_492" x1="26.4375" y1="64.2562" x2="26.4375" y2="51.0094" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#F3C57A"/>
+      <stop offset=".49" stop-color="#F39369"/>
+      <stop offset="1" stop-color="#E94867"/>
+    </linearGradient>
+  </defs>
+</svg>

BIN
src/assets/imgs/product.png


+ 66 - 0
src/assets/imgs/product.svg

@@ -0,0 +1,66 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 81 80" class="design-iconfont">
+  <path d="M56.328 56.0937L55.4999 60H50.4999L49.6718 56.0937L52.9999 54.6016L56.328 56.0937Z" fill="url(#kiuy5gxed__paint0_linear_6946_358)"/>
+  <path d="M31.328 56.0937L30.4999 60H25.4999L24.6717 56.0937L27.9999 54.6016L31.328 56.0937Z" fill="url(#kiuy5gxed__paint1_linear_6946_358)"/>
+  <path d="M58 41.0937L57.5 20H53.4922L53 41.0937L55.5 42.2031L58 41.0937Z" fill="url(#kiuy5gxed__paint2_linear_6946_358)"/>
+  <path d="M28 41.0937L27.5 20H23.4922L22.9922 41.0937L25.4922 42.2031L28 41.0937Z" fill="url(#kiuy5gxed__paint3_linear_6946_358)"/>
+  <path d="M20.5 41.0938V56.0937H60.5V41.0938H55.5L40.5 43.5937L25.5 41.0938H20.5Z" fill="url(#kiuy5gxed__paint4_linear_6946_358)"/>
+  <path d="M25.5 41.0938L26.3281 46.0937H54.6719L55.5 41.0938H25.5Z" fill="url(#kiuy5gxed__paint5_linear_6946_358)"/>
+  <path d="M55.7969 49.8047H53.4531V52.1484H55.7969V49.8047Z" fill="url(#kiuy5gxed__paint6_linear_6946_358)"/>
+  <path d="M51.0859 49.8047H48.7422V52.1484H51.0859V49.8047Z" fill="#fff"/>
+  <path d="M46.375 49.8047H44.0312V52.1484H46.375V49.8047Z" fill="url(#kiuy5gxed__paint7_linear_6946_358)"/>
+  <path d="M32.2578 49.8047H25.2109V52.1484H32.2578V49.8047Z" fill="url(#kiuy5gxed__paint8_linear_6946_358)"/>
+  <path d="M38.0079 36.0942L39.6642 37.7505C39.8986 37.5239 40.1954 37.4067 40.5001 37.4067C40.8048 37.4067 41.1095 37.5239 41.3361 37.7505L42.9923 36.0942C42.3048 35.4067 41.3986 35.063 40.5001 35.063C39.6017 35.063 38.6954 35.4067 38.0079 36.0942Z" fill="url(#kiuy5gxed__paint9_linear_6946_358)"/>
+  <path d="M34.6797 32.7656L36.3359 34.4219C37.4453 33.3125 38.9297 32.6953 40.5 32.6953C42.0703 32.6953 43.5547 33.3047 44.6641 34.4219L46.3203 32.7656C44.7656 31.2109 42.6953 30.3516 40.5 30.3516C38.3047 30.3516 36.2344 31.2109 34.6797 32.7656Z" fill="url(#kiuy5gxed__paint10_linear_6946_358)"/>
+  <path d="M31.3514 29.438L33.0077 31.0942C35.0077 29.0942 37.6718 27.9927 40.4999 27.9927C43.328 27.9927 45.9921 29.0942 47.9921 31.0942L49.6483 29.438C47.203 26.9927 43.953 25.6489 40.4999 25.6489C37.0468 25.6489 33.7968 26.9927 31.3514 29.438Z" fill="url(#kiuy5gxed__paint11_linear_6946_358)"/>
+  <defs>
+    <linearGradient id="kiuy5gxed__paint0_linear_6946_358" x1="51.2265" y1="56.3579" x2="51.2265" y2="60" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint1_linear_6946_358" x1="26.2265" y1="56.3579" x2="26.2265" y2="60" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint2_linear_6946_358" x1="55.5" y1="20" x2="55.5" y2="42.2031" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint3_linear_6946_358" x1="25.4961" y1="20" x2="25.4961" y2="42.2031" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint4_linear_6946_358" x1="40.5" y1="41.0938" x2="40.5" y2="56.0937" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint5_linear_6946_358" x1="32.5073" y1="42.7204" x2="32.5073" y2="46.0937" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint6_linear_6946_358" x1="54.625" y1="53.5672" x2="54.625" y2="49.1516" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#F3C57A"/>
+      <stop offset=".49" stop-color="#F39369"/>
+      <stop offset="1" stop-color="#E94867"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint7_linear_6946_358" x1="45.2031" y1="53.1406" x2="45.2031" y2="47.0734" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#273A9B"/>
+      <stop offset="1" stop-color="#88CDFF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint8_linear_6946_358" x1="28.7344" y1="53.1406" x2="28.7344" y2="47.0734" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#273A9B"/>
+      <stop offset="1" stop-color="#88CDFF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint9_linear_6946_358" x1="39.1722" y1="35.9373" x2="39.1722" y2="37.7505" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint10_linear_6946_358" x1="37.3987" y1="31.6758" x2="37.3987" y2="34.4219" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="kiuy5gxed__paint11_linear_6946_358" x1="35.6252" y1="27.4205" x2="35.6252" y2="31.0942" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+  </defs>
+</svg>

BIN
src/assets/imgs/qrcode.png


BIN
src/assets/imgs/video.png


+ 45 - 0
src/assets/imgs/video.svg

@@ -0,0 +1,45 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 81 80" class="design-iconfont">
+  <path d="M45.5324 52.8665H58.4946V46.7275H45.5324V52.8665Z" fill="url(#itvt2lb2h__paint0_linear_6946_3241)"/>
+  <path d="M59.6665 39.5947H57.3228V60.0003H59.6665V39.5947Z" fill="url(#itvt2lb2h__paint1_linear_6946_3241)"/>
+  <path d="M23.9452 32.4814L29.2003 35.2454L26.0313 40.2667L20.6858 39.5655L19.6665 35.7614L23.9452 32.4814Z" fill="url(#itvt2lb2h__paint2_linear_6946_3241)"/>
+  <path d="M44.8031 45.9931L43.4914 41.0977L41.7935 41.5527L41.794 41.554L41.2222 41.7073L42.5348 46.6031L43.6669 46.2996L43.6553 46.2563L43.6711 46.2964L44.8031 45.9931Z" fill="url(#itvt2lb2h__paint3_linear_6946_3241)"/>
+  <path d="M42.6343 42.429L47.3103 41.1761L45.3749 33.9531L36.0171 36.4612L37.9538 43.6847L42.6301 42.4309L42.624 42.4079L42.6343 42.429Z" fill="url(#itvt2lb2h__paint4_linear_6946_3241)"/>
+  <path d="M53.4557 34.8325L50.4121 23.4736L38.4107 26.6894L38.41 26.6867L23.4588 30.6953L26.5045 42.055L41.4557 38.0464L41.4535 38.0382L41.46 38.0467L53.4557 34.8325Z" fill="url(#itvt2lb2h__paint5_linear_6946_3241)"/>
+  <path d="M55.043 28.9391L52.6477 20L25.4228 27.2949L30.0171 32.313L40.377 29.5371L42.7652 32.229L55.043 28.9391Z" fill="url(#itvt2lb2h__paint6_linear_6946_3241)"/>
+  <path d="M45.6256 53.5943C43.4942 54.1654 41.2956 52.896 40.7244 50.7646C40.1533 48.6331 41.4228 46.4345 43.5542 45.8634C45.6856 45.2923 47.8843 46.5617 48.4554 48.6932C49.0265 50.8246 47.757 53.0232 45.6256 53.5943Z" fill="url(#itvt2lb2h__paint7_linear_6946_3241)"/>
+  <defs>
+    <linearGradient id="itvt2lb2h__paint0_linear_6946_3241" x1="52.0135" y1="46.7275" x2="52.0135" y2="52.8665" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint1_linear_6946_3241" x1="58.4946" y1="39.5947" x2="58.4946" y2="60.0003" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint2_linear_6946_3241" x1="24.4334" y1="44.9793" x2="24.4334" y2="30.312" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#F3C57A"/>
+      <stop offset=".49" stop-color="#F39369"/>
+      <stop offset="1" stop-color="#E94867"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint3_linear_6946_3241" x1="43.0126" y1="48.9337" x2="43.0126" y2="34.682" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#273A9B"/>
+      <stop offset="1" stop-color="#88CDFF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint4_linear_6946_3241" x1="41.6637" y1="33.9531" x2="41.6637" y2="43.6847" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint5_linear_6946_3241" x1="39.9328" y1="32.3665" x2="24.9817" y2="36.3752" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#7AB2FF"/>
+      <stop offset="1" stop-color="#E6F2FF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint6_linear_6946_3241" x1="32.3414" y1="24.0059" x2="32.3414" y2="32.313" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+    <linearGradient id="itvt2lb2h__paint7_linear_6946_3241" x1="44.5899" y1="45.7266" x2="44.5899" y2="53.7311" gradientUnits="userSpaceOnUse">
+      <stop stop-color="#004DF3"/>
+      <stop offset="1" stop-color="#5294FF"/>
+    </linearGradient>
+  </defs>
+</svg>

BIN
src/assets/imgs/wifi-die.png


BIN
src/assets/imgs/wifi-live.png


BIN
src/assets/imgs/zlm-logo.png


+ 1 - 0
src/assets/svgs/device.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1640528598588" class="icon" viewBox="0 0 1280 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16798" xmlns:xlink="http://www.w3.org/1999/xlink" width="160" height="128"><defs><style type="text/css"></style></defs><path d="M153.64583333 62h984.375C1176.87083362 62 1208.33333333 93.5 1208.33333333 132.3125v205.49999971c0 38.85000029-31.5 70.35000029-70.3125 70.35000029H153.64583333A70.3125 70.3125 0 0 1 83.33333333 337.85V132.3125C83.33333333 93.46249971 114.83333333 62 153.64583333 62z m104.92499971 138.44999971a34.61249971 34.61249971 0 0 0 0 69.22500029h212.02500058a34.61249971 34.61249971 0 0 0 0-69.22500029H258.57083304zM153.64583333 615.87500029h984.375c38.85000029 0 70.3125 31.5 70.3125 70.3125v205.5375C1208.33333333 930.53750029 1176.83333333 962 1138.02083333 962H153.64583333A70.3125 70.3125 0 0 1 83.33333333 891.6875v-205.49999971c0-38.85000029 31.5-70.35000029 70.3125-70.35000029z m104.92499971 138.4875a34.61249971 34.61249971 0 1 0 0 69.22499942h212.02500058a34.61249971 34.61249971 0 1 0 0-69.22499942H258.57083304z" p-id="16799"></path></svg>

Plik diff jest za duży
+ 1 - 0
src/assets/svgs/share.svg


Plik diff jest za duży
+ 0 - 0
src/assets/svgs/wifi_0.svg


Plik diff jest za duży
+ 0 - 0
src/assets/svgs/wifi_1.svg


Plik diff jest za duży
+ 0 - 0
src/assets/svgs/wifi_2.svg


Plik diff jest za duży
+ 0 - 0
src/assets/svgs/wifi_3.svg


Plik diff jest za duży
+ 0 - 0
src/assets/svgs/wifi_4.svg


+ 57 - 35
src/components/SvgIcon/index.vue

@@ -1,47 +1,69 @@
 <template>
 <template>
-  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
-  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
+  <div 
+    v-if="isExternalIcon" 
+    :style="styleExternalIcon" 
+    class="svg-external-icon svg-icon"
+    v-bind="$attrs"
+  ></div>
+  <svg 
+    v-else 
+    :class="svgClass" 
+    aria-hidden="true"
+    v-bind="$attrs"
+  >
     <use :xlink:href="iconName" />
     <use :xlink:href="iconName" />
   </svg>
   </svg>
 </template>
 </template>
 
 
-<script>
-import { isExternal } from '@/utils/validate'
+<script setup>
+import { computed } from 'vue'
 
 
-export default {
+
+// 启用 inheritAttrs 选项
+defineOptions({
   name: 'SvgIcon',
   name: 'SvgIcon',
-  props: {
-    iconClass: {
-      type: String,
-      required: true
-    },
-    className: {
-      type: String,
-      default: ''
-    }
+  inheritAttrs: false
+})
+
+// 定义 props
+const props = defineProps({
+  iconClass: {
+    type: String,
+    required: true
   },
   },
-  computed: {
-    isExternal() {
-      return isExternal(this.iconClass)
-    },
-    iconName() {
-      return `#icon-${this.iconClass}`
-    },
-    svgClass() {
-      if (this.className) {
-        return 'svg-icon ' + this.className
-      } else {
-        return 'svg-icon'
-      }
-    },
-    styleExternalIcon() {
-      return {
-        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
-        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
-      }
-    }
+  className: {
+    type: String,
+    default: ''
   }
   }
+})
+
+ function isExternal(path) {
+    return /^(https?:|mailto:|tel:)/.test(path)
 }
 }
+
+// 计算属性
+const isExternalIcon = computed(() => {
+  return isExternal(props.iconClass)
+})
+
+const iconName = computed(() => {
+  return `#icon-${props.iconClass}`
+})
+
+const svgClass = computed(() => {
+  if (props.className) {
+    return 'svg-icon ' + props.className
+  } else {
+    return 'svg-icon'
+  }
+})
+
+const styleExternalIcon = computed(() => {
+  return {
+    mask: `url(${props.iconClass}) no-repeat 50% 50%`,
+    '-webkit-mask': `url(${props.iconClass}) no-repeat 50% 50%`
+  }
+})
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
@@ -58,4 +80,4 @@ export default {
   mask-size: cover!important;
   mask-size: cover!important;
   display: inline-block;
   display: inline-block;
 }
 }
-</style>
+</style>

+ 70 - 2
src/config/axios/service.ts

@@ -1,11 +1,11 @@
 import axios, { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
 import axios, { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
 
 
-import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
+import { ElMessage, ElMessageBox, ElNotification, ElLoading } from 'element-plus'
 import qs from 'qs'
 import qs from 'qs'
 import { config } from '@/config/axios/config'
 import { config } from '@/config/axios/config'
 import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth'
 import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth'
 import errorCode from './errorCode'
 import errorCode from './errorCode'
-
+import { saveAs } from 'file-saver'
 import { resetRouter } from '@/router'
 import { resetRouter } from '@/router'
 import { deleteUserCache } from '@/hooks/web/useCache'
 import { deleteUserCache } from '@/hooks/web/useCache'
 import { langHelper } from '@/utils/langHelper'
 import { langHelper } from '@/utils/langHelper'
@@ -296,4 +296,72 @@ const handleAuthorized = () => {
   }
   }
   return Promise.reject(t('sys.api.timeoutMessage'))
   return Promise.reject(t('sys.api.timeoutMessage'))
 }
 }
+
+let downloadLoadingInstance
+function tansParams(params) {
+  let result = ''
+  for (const propName of Object.keys(params)) {
+    const value = params[propName]
+    const part = encodeURIComponent(propName) + '='
+    if (value !== null && value !== '' && typeof value !== 'undefined') {
+      if (typeof value === 'object') {
+        for (const key of Object.keys(value)) {
+          if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') {
+            const params = propName + '[' + key + ']'
+            const subPart = encodeURIComponent(params) + '='
+            result += subPart + encodeURIComponent(value[key]) + '&'
+          }
+        }
+      } else {
+        result += part + encodeURIComponent(value) + '&'
+      }
+    }
+  }
+  return result
+}
+async function blobValidate(data) {
+  try {
+    const text = await data.text()
+    JSON.parse(text)
+    return false
+  } catch (error) {
+    return true
+  }
+}
+export function download(url, params, filename, config) {
+  downloadLoadingInstance = ElLoading.service({
+    text: '正在下载数据,请稍候',
+    spinner: 'el-icon-loading',
+    background: 'rgba(0, 0, 0, 0.7)'
+  })
+  return service
+    .post(url, params, {
+      transformRequest: [
+        (params) => {
+          return tansParams(params)
+        }
+      ],
+      headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+      responseType: 'blob',
+      ...config
+    })
+    .then(async (data) => {
+      const isLogin = await blobValidate(data)
+      if (isLogin) {
+        const blob = new Blob([data.data])
+        saveAs(blob, filename)
+      } else {
+        const resText = await data.data.text()
+        const rspObj = JSON.parse(resText)
+        const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
+        ElMessage.error(errMsg)
+      }
+      downloadLoadingInstance.close()
+    })
+    .catch((r) => {
+      console.error(r)
+      ElMessage.error('下载文件出现错误,请联系管理员!')
+      downloadLoadingInstance.close()
+    })
+}
 export { service }
 export { service }

+ 344 - 0
src/config/axios/service2.ts

@@ -0,0 +1,344 @@
+import axios, { AxiosError, AxiosInstance, AxiosResponse, InternalAxiosRequestConfig } from 'axios'
+
+import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
+import qs from 'qs'
+import { getAccessToken, getRefreshToken, getTenantId, removeToken, setToken } from '@/utils/auth'
+import errorCode from './errorCode'
+
+import { resetRouter } from '@/router'
+import { deleteUserCache } from '@/hooks/web/useCache'
+import {langHelper} from '@/utils/langHelper'
+import { useLocaleStore } from '@/store/modules/locale'
+
+
+
+
+const config: {
+  base_url: string
+  result_code: number | string
+  default_headers: AxiosHeaders
+  request_timeout: number
+} = {
+  /**
+   * api请求基础路径
+   */
+  base_url: 'http://192.168.188.190:48080/admin-api',
+  /**
+   * 接口成功返回状态码
+   */
+  result_code: 200,
+
+  /**
+   * 接口请求超时时间
+   */
+  request_timeout: 120000,
+
+  /**
+   * 默认接口请求类型
+   * 可选值:application/x-www-form-urlencoded multipart/form-data
+   */
+  default_headers: 'application/json'
+}
+
+
+
+
+// servive
+const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE
+const { result_code, base_url, request_timeout } = config
+// const localeStore = useLocaleStore()
+// 需要忽略的提示。忽略后,自动 Promise.reject('error')
+const ignoreMsgs = [
+  '无效的刷新令牌', // 刷新令牌被删除时,不用提示
+  '刷新令牌已过期' // 使用刷新令牌,刷新获取新的访问令牌时,结果因为过期失败,此时需要忽略。否则,会导致继续 401,无法跳转到登出界面
+]
+// 是否显示重新登录
+export const isRelogin = { show: false }
+// Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现
+// 请求队列
+let requestList: any[] = []
+// 是否正在刷新中
+let isRefreshToken = false
+// 请求白名单,无须token的接口
+const whiteList: string[] = ['/login', '/refresh-token']
+
+// 创建axios实例
+const service2: AxiosInstance = axios.create({
+  baseURL: base_url, // api 的 base_url
+  timeout: request_timeout, // 请求超时时间
+  withCredentials: false, // 禁用 Cookie 等信息
+  // 自定义参数序列化函数
+  paramsSerializer: (params) => {
+    return qs.stringify(params, { allowDots: true })
+  }
+})
+
+// request拦截器
+service2.interceptors.request.use(
+  (config: InternalAxiosRequestConfig) => {
+    // 是否需要设置 token
+    let isToken = (config!.headers || {}).isToken === false
+    whiteList.some((v) => {
+      if (config.url && config.url.indexOf(v) > -1) {
+        return (isToken = false)
+      }
+    })
+    if (getAccessToken() && !isToken) {
+      config.headers.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token
+    }
+    // 设置租户
+    if (tenantEnable && tenantEnable === 'true') {
+      const tenantId = getTenantId()
+      if (tenantId) config.headers['tenant-id'] = tenantId
+    }
+    const method = config.method?.toUpperCase()
+    // 防止 GET 请求缓存
+    if (method === 'GET') {
+      config.headers['Cache-Control'] = 'no-cache'
+      config.headers['Pragma'] = 'no-cache'
+    }
+    // 自定义参数序列化函数
+    else if (method === 'POST') {
+      const contentType = config.headers['Content-Type'] || config.headers['content-type']
+      if (contentType === 'application/x-www-form-urlencoded') {
+        if (config.data && typeof config.data !== 'string') {
+          config.data = qs.stringify(config.data)
+        }
+      }
+    }
+    return config
+  },
+  (error: AxiosError) => {
+    // Do something with request error
+    console.log(error) // for debug
+    return Promise.reject(error)
+  }
+)
+
+// response 拦截器
+service2.interceptors.response.use(
+  async (response: AxiosResponse<any>) => {
+    let { data } = response
+    const config = response.config
+    if (!data) {
+      // 返回“[HTTP]请求没有返回值”;
+      throw new Error()
+    }
+    const { t } = useI18n()
+    // 未设置状态码则默认成功状态
+    // 二进制数据则直接返回,例如说 Excel 导出
+    if (
+      response.request.responseType === 'blob' ||
+      response.request.responseType === 'arraybuffer'
+    ) {
+      // 注意:如果导出的响应为 json,说明可能失败了,不直接返回进行下载
+      if (response.data.type !== 'application/json') {
+        return response.data
+      }
+      data = await new Response(response.data).json()
+    }
+    const code = data.code || result_code
+    // 获取错误信息
+    const msg = data.msg || errorCode[code] || errorCode['default']
+    if (ignoreMsgs.indexOf(msg) !== -1) {
+      // 如果是忽略的错误码,直接返回 msg 异常
+      return Promise.reject(msg)
+    } else if (code === 401) {
+      // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
+      if (!isRefreshToken) {
+        isRefreshToken = true
+        // 1. 如果获取不到刷新令牌,则只能执行登出操作
+        if (!getRefreshToken()) {
+          return handleAuthorized()
+        }
+        // 2. 进行刷新访问令牌
+        try {
+          const refreshTokenRes = await refreshToken()
+          // 2.1 刷新成功,则回放队列的请求 + 当前请求
+          setToken((await refreshTokenRes).data.data)
+          config.headers!.Authorization = 'Bearer ' + getAccessToken()
+          requestList.forEach((cb: any) => {
+            cb()
+          })
+          requestList = []
+          return service2(config)
+        } catch (e) {
+          // 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
+          // 2.2 刷新失败,只回放队列的请求
+          requestList.forEach((cb: any) => {
+            cb()
+          })
+          // 提示是否要登出。即不回放当前请求!不然会形成递归
+          return handleAuthorized()
+        } finally {
+          requestList = []
+          isRefreshToken = false
+        }
+      } else {
+        // 添加到队列,等待刷新获取到新的令牌
+        return new Promise((resolve) => {
+          requestList.push(() => {
+            config.headers!.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+            resolve(service2(config))
+          })
+        })
+      }
+    } else if (code === 500) {
+      ElMessage.error(t('sys.api.errMsg500'))
+      return Promise.reject(new Error(msg))
+    } else if (code === 901) {
+      ElMessage.error({
+        offset: 300,
+        dangerouslyUseHTMLString: true,
+        message:
+          '<div>' +
+          t('sys.api.errMsg901') +
+          '</div>' +
+          '<div> &nbsp; </div>' +
+          '<div>参考 https://doc.iocoder.cn/ 教程</div>' +
+          '<div> &nbsp; </div>' +
+          '<div>5 分钟搭建本地环境</div>'
+      })
+      return Promise.reject(new Error(msg))
+    } else if (code !== 200) {
+      if (msg === '无效的刷新令牌') {
+        // hard coding:忽略这个提示,直接登出
+        console.log(msg)
+        return handleAuthorized()
+      } else {
+        ElNotification.error({ title: msg })
+      }
+      return Promise.reject('error')
+    } else {
+      // const lang = localeStore.getCurrentLocale.lang
+
+      const requestUrl = response.config.url || ''
+      // 判断是否包含rq/iot路径
+      if (requestUrl.includes('rq/')||requestUrl.includes('system/dict')||requestUrl.includes('system/auth/get-permission-info')||requestUrl.includes('system/dept/list')
+        ||requestUrl.includes('system/menu/simple-list')||requestUrl.includes('system/menu/list')||requestUrl.includes('system/dept/simple-list')
+        ||requestUrl.includes('pms/')||requestUrl.includes('system/user/page')||requestUrl.includes('supplier/base/page')||requestUrl.includes('system/dept/get')
+        ||requestUrl.includes('system/user/simpleUserList')||requestUrl.includes('system/dept/companyLevelDepts')||requestUrl.includes('system/dept/companyLevelChildrenDepts')
+        ||requestUrl.includes('system/user/companyDeptsEmployee')||requestUrl.includes('system/dept/specifiedSimpleDepts')) {
+        const localeStore = useLocaleStore()
+        const lang = localeStore.getCurrentLocale.lang
+        if (data&& data.data) {
+          if (data.data.list) {
+            if (Array.isArray(data.data.list)) {
+              const list = langHelper.transformArray(data.data.list, lang)
+              data.data.list = list;
+              return data;
+            }
+          }else if (data &&Array.isArray(data.data)) {
+            const list = langHelper.transformArray(data.data, lang)
+            data.data = list;
+            return data;
+          }else if (data && typeof data.data === 'object') {
+            const object =  langHelper.transformObject(data, lang)
+            data = object
+            return data
+          } else {
+            return data
+          }
+        }
+
+      }else {
+        return data
+      }
+      // return data
+    }
+  },
+  (error: AxiosError) => {
+    console.log('err' + error) // for debug
+    let { message } = error
+    const { t } = useI18n()
+    if (message === 'Network Error') {
+      message = t('sys.api.errorMessage')
+    } else if (message.includes('timeout')) {
+      message = t('sys.api.apiTimeoutMessage')
+    } else if (message.includes('Request failed with status code')) {
+      message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
+    }
+    ElMessage.error(message)
+    return Promise.reject(error)
+  }
+)
+
+const refreshToken = async () => {
+  axios.defaults.headers.common['tenant-id'] = getTenantId()
+  return await axios.post(base_url + '/system/auth/refresh-token?refreshToken=' + getRefreshToken())
+}
+const handleAuthorized = () => {
+  const { t } = useI18n()
+  if (!isRelogin.show) {
+    // 如果已经到登录页面则不进行弹窗提示
+    if (window.location.href.includes('login')) {
+      return
+    }
+    isRelogin.show = true
+    ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
+      showCancelButton: false,
+      closeOnClickModal: false,
+      showClose: false,
+      closeOnPressEscape: false,
+      confirmButtonText: t('login.relogin'),
+      type: 'warning'
+    }).then(() => {
+      resetRouter() // 重置静态路由表
+      deleteUserCache() // 删除用户缓存
+      removeToken()
+      isRelogin.show = false
+      // 干掉token后再走一次路由让它过router.beforeEach的校验
+      window.location.href = window.location.href
+    })
+  }
+  return Promise.reject(t('sys.api.timeoutMessage'))
+}
+
+
+
+
+
+
+// index.ts
+const request = (option: any) => {
+  const { headersType, headers, ...otherOption } = option
+  return service2({
+    ...otherOption,
+    headers: {
+      'Content-Type': headersType || config.default_headers,
+      ...headers
+    }
+  })
+}
+export default {
+  get: async <T = any>(option: any) => {
+    const res = await request({ method: 'GET', ...option })
+    return res.data as unknown as T
+  },
+  post: async <T = any>(option: any) => {
+    const res = await request({ method: 'POST', ...option })
+    return res.data as unknown as T
+  },
+  postOriginal: async (option: any) => {
+    const res = await request({ method: 'POST', ...option })
+    return res
+  },
+  delete: async <T = any>(option: any) => {
+    const res = await request({ method: 'DELETE', ...option })
+    return res.data as unknown as T
+  },
+  put: async <T = any>(option: any) => {
+    const res = await request({ method: 'PUT', ...option })
+    return res.data as unknown as T
+  },
+  download: async <T = any>(option: any) => {
+    const res = await request({ method: 'GET', responseType: 'blob', ...option })
+    return res as unknown as Promise<T>
+  },
+  upload: async <T = any>(option: any) => {
+    option.headersType = 'multipart/form-data'
+    const res = await request({ method: 'POST', ...option })
+    return res as unknown as Promise<T>
+  }
+}
+

+ 1455 - 0
src/locales/zh-CN.ts

@@ -1234,6 +1234,1461 @@ export default {
     MaterialManagement: '物料管理',
     MaterialManagement: '物料管理',
     modifyOrder: '修改工单'
     modifyOrder: '修改工单'
   },
   },
+  sip: {
+    'splitview998531-0': '拼命加载中',
+    'splitview998531-1': '分屏:',
+    'splitview998531-2': '单屏',
+    'splitview998531-3': '四屏',
+    'splitview998531-4': '九屏',
+    'splitview998531-5': '截图',
+    'channel998532-0': '设备ID',
+    'channel998532-1': '通道ID',
+    'channel998532-2': '快照',
+    'channel998532-3': '通道名称',
+    'channel998532-4': '产品型号',
+    'channel998532-5': '状态',
+    'channel998532-6': '查看直播',
+    'channel998532-7': '修改监控设备通道信息',
+    'channel998532-8': '是否确认删除监控设备通道信息编号为{0}的数据项?',
+    'channel998532-9': '推流状态',
+    'channel998532-10': '无',
+    'channel998532-11': '推流中',
+    'channel998532-12': '直播录像状态',
+    'channel998532-13': '无',
+    'channel998532-14': '录像中',
+    'channel998532-15': '录像转存状态',
+    'channel998532-16': '无',
+    'channel998532-17': '转存中',
+    'channel998532-18': '删除成功',
+    'index998533-0': '设备ID',
+    'index998533-1': '请输入设备编号',
+    'index998533-2': '通道ID',
+    'index998533-3': '请输入通道ID',
+    'index998533-4': '状态',
+    'index998533-5': '请选择状态',
+    'index998533-6': '批量生成',
+    'index998533-7': '批量删除',
+    'index998533-8': '所属产品',
+    'index998533-9': '设备类型',
+    'index998533-10': '行政区域',
+    'index998533-11': '注册时间',
+    'index998533-12': '设备绑定',
+    'index998533-13': '行政区划',
+    'index998533-14': '请选择设备类型',
+    'index998533-15': '通道类型',
+    'index998533-16': '请选择通道类型',
+    'index998533-17': '请选择产品',
+    'index998533-18': '选择',
+    'index998533-19': '请输入生成通道数量',
+    'index998533-20': '通道数量',
+    'index998533-21': '生 成',
+    'index998533-22': '关联设备',
+    'index998533-23': '请选择设备',
+    'index998533-24': '关联场景',
+    'index998533-25': '请选择场景',
+    'index998533-26': '默认播放协议不能为空',
+    'index998533-27': '服务器ip不能为空',
+    'index998533-28': '服务器域名不能为空',
+    'index998533-29': '流媒体密钥不能为空',
+    'index998533-30': 'http端口不能为空',
+    'index998533-31': 'https端口不能为空',
+    'index998533-32': 'rtmp端口不能为空',
+    'index998533-33': 'rtsp端口不能为空',
+    'index998533-34': 'rtp端口范围不能为空',
+    'index998533-35': '删除标志不能为空',
+    'index998533-36': '创建者不能为空',
+    'index998533-37': '创建时间不能为空',
+    'index998533-38': '生成设备通道',
+    'index998533-39': '修改产品分类',
+    'index998533-40': '监控设备绑定',
+    'index998533-41': '绑定成功',
+    'index998533-42': '通道数量至少一个',
+    'index998533-43': '请选择所属产品',
+    'index998533-44': '请选择地区,设备类型,通道类型!!',
+    'index998533-45': '是否确认删除ID为',
+    'index998533-46': '复制成功!',
+    'index998533-47': '复制失败!',
+    'mediaServerEdit998534-0': '流媒体服务器节点',
+    'mediaServerEdit998534-1': '服务器IP',
+    'mediaServerEdit998534-2': '媒体服务IP',
+    'mediaServerEdit998534-3': 'Http端口',
+    'mediaServerEdit998534-4': '媒体服务HTTP端口',
+    'mediaServerEdit998534-5': '服务密钥',
+    'mediaServerEdit998534-6': '媒体服务SECRET',
+    'mediaServerEdit998534-7': '配置名称',
+    'mediaServerEdit998534-8': '服务器IP',
+    'mediaServerEdit998534-9': '播放协议',
+    'mediaServerEdit998534-10': 'Http端口',
+    'mediaServerEdit998534-11': 'Https端口',
+    'mediaServerEdit998534-12': 'Rtsp端口',
+    'mediaServerEdit998534-13': '流媒体密钥',
+    'mediaServerEdit998534-14': '服务器域名',
+    'mediaServerEdit998534-15': '自动配置',
+    'mediaServerEdit998534-16': '收流模式',
+    'mediaServerEdit998534-17': '多端口',
+    'mediaServerEdit998534-18': '单端口',
+    'mediaServerEdit998534-19': '收流端口',
+    'mediaServerEdit998534-20': '起始',
+    'mediaServerEdit998534-21': '终止',
+    'mediaServerEdit998534-22': 'Rtmp端口',
+    'mediaServerEdit998534-23': '录像管理端口',
+    'mediaServerEdit998534-24': '请输入有效的IP地址',
+    'mediaServerEdit998534-25': '请输入有效的端口号',
+    'mediaServerEdit998534-26': '配置地址连接成功',
+    'mediaServerEdit998534-27': '配置地址无法连接',
+    'mediaServerEdit998534-28': '端口号应该在-65535之间',
+    'mediaServer998535-0': '新增节点',
+    'mediaServer998535-1': '配置名称',
+    'mediaServer998535-2': '服务器IP',
+    'mediaServer998535-3': '播放协议',
+    'mediaServer998535-4': '创建时间',
+    'mediaServer998535-5': '重启中...',
+    'mediaServer998535-6': '暂无数据,请添加流媒体服务器节点',
+    'mediaServer998535-7': '是否确认删除流媒体服务器配置编号为{0}的数据项?',
+    'product-list998536-0': '选择产品',
+    'product-list998536-1': '租户名称',
+    'product-list998536-2': '联网方式',
+    'sipConfig998537-0': '默认配置',
+    'sipConfig998537-1': '服务器地址',
+    'sipConfig998537-2': '服务器域',
+    'sipConfig998537-3': '认证密码',
+    'sipConfig998537-4': '请输入认证密码',
+    'sipConfig998537-5': '接入方式',
+    'sipConfig998537-6': '服务器端口',
+    'sipConfig998537-7': '服务器ID',
+    'sipConfig998537-8': '服务器域不能为空',
+    'sipConfig998537-9': '服务器sipid不能为空',
+    'sipConfig998537-10': 'sip认证密码不能为空',
+    'sipidGen998538-0': '行政区划',
+    'sipidGen998538-1': '生成设备编号和通道',
+    'sipidGen998538-2': '已生成设备编号和通道',
+    'sipidGen998538-3': '请选择地区,设备类型,通道类型!!',
+    'user-list558539-0': '选择用户',
+    'user-list558539-1': '手机号码',
+    'user-list558539-2': '用户编号',
+    'user-list558539-3': '用户名称',
+    'user-list558539-4': '用户昵称',
+    'user-list558539-5': '创建时间',
+    'user-list558539-6': '手机号码不能为空',
+    'user-list558539-7': '手机号码长度为11位',
+    'record239091-0': '服务器标识',
+    'record239091-1': '请选择',
+    'record239091-2': '应用名',
+    'record239091-3': '流ID',
+    'record239091-4': '时间',
+    'record239091-5': '请先选择服务器标识',
+    'record239091-6': '请选择日期'
+  },
+
+  product: {
+    'index091251-0': '产品名称',
+    'index091251-1': '请输入产品名称',
+    'index091251-2': '分类名称',
+    'index091251-3': '请输入产品分类名称',
+    'index091251-4': '状态',
+    'index091251-5': '请选择状态',
+    'index091251-6': '搜索',
+    'index091251-7': '重置',
+    'index091251-8': '显示上级机构产品',
+    'index091251-9': '选中后,本级可以看上级的产品',
+    'index091251-10': '新增',
+    'index091251-11': '私有',
+    'index091251-12': '取消发布',
+    'index091251-13': '已发布',
+    'index091251-14': '现在发布',
+    'index091251-15': '未发布',
+    'index091251-16': '所属分类',
+    'index091251-17': '产品类型',
+    'index091251-18': '联网方式',
+    'index091251-19': '设备授权',
+    'index091251-20': '已启用',
+    'index091251-21': '未启用',
+    'index091251-22': '查看详情',
+    'index091251-23': '删除',
+    'index091251-24': '查看设备',
+    'index091251-25': '暂无数据,请添加产品',
+    'index091251-26': '该功能暂未实现,参考教程和项目的SDK示例',
+    'index091251-27': '设备类型',
+    'index091251-28': '下 载',
+    'index091251-29': '取 消',
+    'index091251-30': '确定取消发布?',
+    'index091251-31': '没有操作权限',
+    'index091251-32': '产品发布后,可以创建对应的设备',
+    'index091251-33':
+      '重要提示:产品下已有{0}个设备,取消发布可以修改产品信息和模型,重新发布后对应设备状态将会被重置!',
+    'index091251-34': '提示',
+    'index091251-35': '确定',
+    'index091251-38': '生成SDK',
+    'index091251-39': '是否确认删除产品编号为{0}的数据项?',
+    'index091251-40': '组态设计',
+    'product-app045891-0': '刷新',
+    'product-app045891-1': '该功能暂不可用,后面版本发布',
+    'product-app045891-2': '名称',
+    'product-app045891-3': '标识符',
+    'product-app045891-4': '物模型类别',
+    'product-app045891-5': '数据类型',
+    'product-app045891-6': '部件',
+    'product-app045891-7': '系统定义的部件',
+    'product-app045891-8': '高级功能',
+    'product-app045891-9': '自定义页面',
+    'product-app045891-10': '请输入自定义页面',
+    'product-app045891-11': '界面展示',
+    'product-authorize314975-0': '设备编号',
+    'product-authorize314975-1': '请输入设备编号',
+    'product-authorize314975-2': '授权码',
+    'product-authorize314975-3': '请输入授权码',
+    'product-authorize314975-4': '状态',
+    'product-authorize314975-5': '请选择状态',
+    'product-authorize314975-6': '搜索',
+    'product-authorize314975-7': '重置',
+    'product-authorize314975-8': '生成授权码',
+    'product-authorize314975-9': '批量删除',
+    'product-authorize314975-10': '导出',
+    'product-authorize314975-11': 'Tips:双击可以复制授权码。',
+    'product-authorize314975-12': '授权时间',
+    'product-authorize314975-13': '备注',
+    'product-authorize314975-14': '操作',
+    'product-authorize314975-15': '删除',
+    'product-authorize314975-17': '设备名称',
+    'product-authorize314975-18': '请输入设备名称',
+    'product-authorize314975-19': '选择',
+    'product-authorize314975-20': '设备ID',
+    'product-authorize314975-21': '用户名称',
+    'product-authorize314975-22': '设备状态',
+    'product-authorize314975-23': '请输入内容',
+    'product-authorize314975-24': '确 定',
+    'product-authorize314975-25': '取 消',
+    'product-authorize314975-26': '设备详情',
+    'product-authorize314975-27': '提示:查找不到设备,可能已经被删除',
+    'product-authorize314975-28': '未激活',
+    'product-authorize314975-29': '禁用',
+    'product-authorize314975-30': '在线',
+    'product-authorize314975-31': '离线',
+    'product-authorize314975-32': '设备影子',
+    'product-authorize314975-33': '启用',
+    'product-authorize314975-35': '定位方式',
+    'product-authorize314975-36': '自动定位',
+    'product-authorize314975-37': '设备定位',
+    'product-authorize314975-38': '自定义位置',
+    'product-authorize314975-39': '产品名称',
+    'product-authorize314975-40': '租户名称',
+    'product-authorize314975-41': '固件版本',
+    'product-authorize314975-42': '所在地址',
+    'product-authorize314975-43': '设备经度',
+    'product-authorize314975-44': '设备纬度',
+    'product-authorize314975-45': '入网IP',
+    'product-authorize314975-46': '设备信号',
+    'product-authorize314975-47': '创建时间',
+    'product-authorize314975-48': '激活时间',
+    'product-authorize314975-49': '备注信息',
+    'product-authorize314975-50': '查看设备',
+    'product-authorize314975-51': '关 闭',
+    'product-authorize314975-52': '输入授权码数量',
+    'product-authorize314975-53': '确 定',
+    'product-authorize314975-54': '取 消',
+    'product-authorize314975-55': '数量内容不正确',
+    'product-authorize314975-56': '新增授权码成功',
+    'product-authorize314975-57': '取消新增',
+    'product-authorize314975-58': '选择设备',
+    'product-authorize314975-59': '设备授权成功',
+    'product-authorize314975-60': '请选择要授权的设备',
+    'product-authorize314975-61': '备注成功',
+    'product-authorize314975-62': '是否确认删除产品授权码编号为{0}的数据项?',
+    'product-authorize314975-63': '删除成功',
+    'product-authorize314975-64': '成功',
+    'product-authorize314975-66': '复制成功!',
+    'product-authorize314975-67': '失败',
+    'product-authorize314975-68': '复制失败!',
+    'product-edit473153-0': '基本信息',
+    'product-edit473153-1': '产品名称',
+    'product-edit473153-2': '请输入产品名称',
+    'product-edit473153-3': '产品分类',
+    'product-edit473153-4': '请选择分类',
+    'product-edit473153-5': '通讯协议',
+    'product-edit473153-6': '产品建立后,不允许修改通讯协议,修改会导致该产品下设备脏数据问题',
+    'product-edit473153-7': '请选择协议',
+    'product-edit473153-8': '当前通讯协议为modbus协议,请选择采集点模板,默认添加设备为网关设备',
+    'product-edit473153-9': '采集点模板',
+    'product-edit473153-10': '删除',
+    'product-edit473153-11': '选择模板',
+    'product-edit473153-13': '请选择设备类型',
+    'product-edit473153-14': '传输协议',
+    'product-edit473153-15': '请选择传输协议',
+    'product-edit473153-16': '联网方式',
+    'product-edit473153-17': '请选择联网方式',
+    'product-edit473153-18': '私有产品',
+    'product-edit473153-19': '设置为私有产品后,下级不能查看',
+    'product-edit473153-20': '启用授权',
+    'product-edit473153-21': '认证方式',
+    'product-edit473153-22': '请选择认证方式',
+    'product-edit473153-23': '定位方式',
+    'product-edit473153-24': '请选择设备状态',
+    'product-edit473153-25': '产品编号',
+    'product-edit473153-26': '自动生成',
+    'product-edit473153-27': 'Mqtt账号',
+    'product-edit473153-28': '不填自动生成',
+    'product-edit473153-29': 'Mqtt密码',
+    'product-edit473153-30': '不填则自动生成',
+    'product-edit473153-31': '产品秘钥',
+    'product-edit473153-32': '备注信息',
+    'product-edit473153-33': '请输入内容',
+    'product-edit473153-34': '产品图片',
+    'product-edit473153-35': '提示:上传后需要提交保存',
+    'product-edit473153-36': '修 改',
+    'product-edit473153-37': '新 增',
+    'product-edit473153-38': '产品模型',
+    'product-edit473153-39': '固件管理',
+    'product-edit473153-40': '设备授权',
+    'product-edit473153-41': 'SIP配置',
+    'product-edit473153-42': '发布产品',
+    'product-edit473153-43': '取消发布',
+    'product-edit473153-44': '返回列表',
+    'product-edit473153-45': '模板名称',
+    'product-edit473153-46': '搜索',
+    'product-edit473153-47': '重置',
+    'product-edit473153-48': '选择采集点模板',
+    'product-edit473153-49': '物模型列表',
+    'product-edit473153-50': '从机数量:',
+    'product-edit473153-51': '变量数量:',
+    'product-edit473153-52': '采集方式:',
+    'product-edit473153-53': '物模型名称',
+    'product-edit473153-54': '寄存器',
+    'product-edit473153-55': '数值类型',
+    'product-edit473153-56': '取 消',
+    'product-edit473153-57': '确 定',
+    'product-edit473153-58': '产品名称不能为空',
+    'product-edit473153-59': '产品分类ID不能为空',
+    'product-edit473153-60': '设备协议不能为空',
+    'product-edit473153-61': '传输协议不能为空',
+    'product-edit473153-62': '修改成功',
+    'product-edit473153-63': '请选择采集点模板',
+    'product-edit473153-64': '添加成功,可以开始定义物模型或配置',
+    'product-edit473153-65': '物模型已经从采集点模板同步至产品',
+    'product-edit473153-66': '确定取消发布?',
+    'product-edit473153-67': '产品发布后,可以创建对应的设备',
+    'product-edit473153-68':
+      '重要提示:产品下已有{0}个设备,取消发布可以修改产品信息和模型,重新发布后对应设备状态将会被重置!',
+    'product-edit473153-69': '提示',
+    'product-edit473153-70': '确定',
+    'product-edit473153-71': '取消',
+    'product-edit473153-72': '启用',
+    'product-edit473153-74': '停用',
+    'product-edit473153-75': '确认要{0}授权码吗?',
+    'product-edit473153-77': '授权码已',
+    'product-edit473153-78': '设备类型',
+    'product-edit473153-79': '组态应用',
+    'product-edit473153-80': 'Modbus配置',
+    'product-edit473153-81': '通讯协议',
+    'product-edit473153-82': '请选择协议',
+    'product-firmware420545-0': '新增',
+    'product-firmware420545-1': '刷新',
+    'product-firmware420545-2': '固件名称',
+    'product-firmware420545-3': '固件版本',
+    'product-firmware420545-4': '状态',
+    'product-firmware420545-5': '最新',
+    'product-firmware420545-6': '默认',
+    'product-firmware420545-7': '创建时间',
+    'product-firmware420545-8': '下载地址',
+    'product-firmware420545-9': '固件描述',
+    'product-firmware420545-10': '操作',
+    'product-firmware420545-11': '查看',
+    'product-firmware420545-12': '删除',
+    'product-firmware420545-13': '请输入固件名称',
+    'product-firmware420545-14': '请输入固件版本',
+    'product-firmware420545-15': '最新固件',
+    'product-firmware420545-16': '提示:产品中只能有一个最新固件',
+    'product-firmware420545-17': '固件上传',
+    'product-firmware420545-18': '请输入固件信息',
+    'product-firmware420545-19': '新 增',
+    'product-firmware420545-20': '修 改',
+    'product-firmware420545-21': '取消',
+    'product-firmware420545-24': '固件名称不能为空',
+    'product-firmware420545-25': '固件版本不能为空',
+    'product-firmware420545-26': '文件路径不能为空',
+    'product-firmware420545-27': '添加产品固件',
+    'product-firmware420545-28': '修改产品固件',
+    'product-firmware420545-29': '修改成功',
+    'product-firmware420545-30': '新增成功',
+    'product-firmware420545-31': '是否确认删除产品固件编号为{0}的数据项?',
+    'product-firmware420545-32': '删除成功',
+    'product-select-template318012-0': '名称',
+    'product-select-template318012-1': '请输入物模型名称',
+    'product-select-template318012-2': '类别',
+    'product-select-template318012-3': '请选择模型类别',
+    'product-select-template318012-4': '搜索',
+    'product-select-template318012-5': '重置',
+    'product-select-template318012-6': '标识符',
+    'product-select-template318012-7': '物模型类别',
+    'product-select-template318012-8': '图表展示',
+    'product-select-template318012-9': '实时监测',
+    'product-select-template318012-10': '只读',
+    'product-select-template318012-11': '历史存储',
+    'product-select-template318012-12': '数据类型',
+    'product-things-model142341-0': '新增',
+    'product-things-model142341-1': '导入通用物模型',
+    'product-things-model142341-2': '刷新',
+    'product-things-model142341-3': '查看物模型',
+    'product-things-model142341-4': '注意:标识符不能重复',
+    'product-things-model142341-5': '请选择设备从机:',
+    'product-things-model142341-6': '请选择设备从机',
+    'product-things-model142341-7': '网关物模型',
+    'product-things-model142341-8': '名称',
+    'product-things-model142341-9': '标识符',
+    'product-things-model142341-10': '寄存器地址(10进制)',
+    'product-things-model142341-12': '图表展示',
+    'product-things-model142341-13': '实时监测',
+    'product-things-model142341-14': '只读',
+    'product-things-model142341-15': '历史存储',
+    'product-things-model142341-16': '物模型类别',
+    'product-things-model142341-17': '数据类型',
+    'product-things-model142341-18': '数据定义',
+    'product-things-model142341-19': '计算公式',
+    'product-things-model142341-20': '排序',
+    'product-things-model142341-21': '操作',
+    'product-things-model142341-22': '查看',
+    'product-things-model142341-23': '删除',
+    'product-things-model142341-24': '模型名称',
+    'product-things-model142341-25': '请输入物模型名称,例如:温度',
+    'product-things-model142341-26': '模型标识',
+    'product-things-model142341-27': '请输入标识符,例如:temperature',
+    'product-things-model142341-28': '模型排序',
+    'product-things-model142341-29': '请输入排序',
+    'product-things-model142341-30': '模型类别',
+    'product-things-model142341-31': '属性',
+    'product-things-model142341-32': '功能',
+    'product-things-model142341-33': '事件',
+    'product-things-model142341-34': '模型特性',
+    'product-things-model142341-35': '只读数据',
+    'product-things-model142341-36': '分享权限',
+    'product-things-model142341-37': '请选择数据类型',
+    'product-things-model142341-38': '整数',
+    'product-things-model142341-39': '小数',
+    'product-things-model142341-40': '布尔',
+    'product-things-model142341-41': '枚举',
+    'product-things-model142341-42': '字符串',
+    'product-things-model142341-43': '数组',
+    'product-things-model142341-44': '对象',
+    'product-things-model142341-45': '取值范围',
+    'product-things-model142341-46': '最小值',
+    'product-things-model142341-47': '到',
+    'product-things-model142341-48': '最大值',
+    'product-things-model142341-49': '单位',
+    'product-things-model142341-50': '请输入单位,例如:℃',
+    'product-things-model142341-51': '步长',
+    'product-things-model142341-52': '请输入步长,例如:1',
+    'product-things-model142341-53': '设备上行数据经计算公式计算后显示 。',
+    'product-things-model142341-54': '公式中的%s为占位符,是固定字段。',
+    'product-things-model142341-55': '如:',
+    'product-things-model142341-56': '加:%s+10',
+    'product-things-model142341-57': '减:%s-10',
+    'product-things-model142341-58': '乘:%s*10',
+    'product-things-model142341-59': '除:%s/10',
+    'product-things-model142341-60': '除(保留小数):%s%10.00',
+    'product-things-model142341-61': '保留小数',
+    'product-things-model142341-62': '控制公式',
+    'product-things-model142341-63': '布尔值',
+    'product-things-model142341-64': '例如:关闭',
+    'product-things-model142341-65': '(0 值对应文本)',
+    'product-things-model142341-66': '例如:打开',
+    'product-things-model142341-67': '(1 值对应文本)',
+    'product-things-model142341-68': '展示方式',
+    'product-things-model142341-69': '请选择展示方式',
+    'product-things-model142341-70': '下拉框',
+    'product-things-model142341-71': '按钮',
+    'product-things-model142341-72': '枚举项',
+    'product-things-model142341-73': '参数值,例如:0',
+    'product-things-model142341-74': '参数描述,例如:中速档位',
+    'product-things-model142341-75': '添加枚举项',
+    'product-things-model142341-76': '最大长度',
+    'product-things-model142341-77': '例如:1024',
+    'product-things-model142341-78': '(字符串的最大长度)',
+    'product-things-model142341-79': '元素个数',
+    'product-things-model142341-80': '例如:5',
+    'product-things-model142341-81': '数组类型',
+    'product-things-model142341-82': '对象参数',
+    'product-things-model142341-83': '请选择设备',
+    'product-things-model142341-84': '编辑',
+    'product-things-model142341-85': '添加参数',
+    'product-things-model142341-86': '删除',
+    'product-things-model142341-87': '对象参数',
+    'product-things-model142341-88': '请选择设备',
+    'product-things-model142341-89': '修 改',
+    'product-things-model142341-90': '新 增',
+    'product-things-model142341-91': '取消',
+    'product-things-model142341-92': '复制',
+    'product-things-model142341-94': '物模型名称不能为空',
+    'product-things-model142341-95': '标识符,产品下唯一不能为空',
+    'product-things-model142341-96': '模型排序不能为空',
+    'product-things-model142341-97': '模型类别不能为空',
+    'product-things-model142341-98': '数据类型不能为空',
+    'product-things-model142341-99': '添加物模型',
+    'product-things-model142341-100': '修改物模型',
+    'product-things-model142341-101': '物模型',
+    'product-things-model142341-102': '对象的参数不能为空',
+    'product-things-model142341-103': '对象类型模型标识输入不能包含下划线,请重新填写模型标识!',
+    'product-things-model142341-104': '参数标识',
+    'product-things-model142341-105': '重复',
+    'product-things-model142341-106': '请重新选择数据类型!',
+    'product-things-model142341-107': '修改成功',
+    'product-things-model142341-108': '新增成功',
+    'product-things-model142341-109': '是否确认删除物模型编号为{0}的数据项?',
+    'product-things-model142341-111': '删除成功',
+    'product-things-model142341-112': '采集点删除请在采集点模板修改',
+    'product-things-model142341-113': '关闭',
+    'product-things-model142341-114': '打开',
+    'product-things-model142341-115': '低',
+    'product-things-model142341-116': '高',
+    'product-things-model142341-117': '最大值:',
+    'product-things-model142341-118': '最小值:',
+    'product-things-model142341-119': '步长:',
+    'product-things-model142341-120': '单位:',
+    'product-things-model142341-121': '最大长度:',
+    'product-things-model142341-122': '数组类型:',
+    'product-things-model142341-123': '元素个数:',
+    'product-things-model142341-124': '寄存器地址',
+    'product-things-model142341-125': '删除',
+    'product-things-model142341-126': '导入',
+    'product-things-model142341-127': 'APP展示',
+    'product-things-model142341-128': '请选择是否在App展示',
+    'product-things-model142341-129': '物模型类型',
+    'product-things-model142341-130': '请选择物模型类型',
+    'product-things-model142341-131': '是否历史存储',
+    'product-things-model142341-132': '请选择是否历史存储',
+    'product-things-model142341-133': '搜索',
+    'product-things-model142341-134': '重置',
+    'product-things-model142341-135': '分组',
+    'product-modbus562372-0': '网关子设备配置',
+    'product-modbus562372-1': '网关子设备配置默认的子设备地址,轮询方式',
+    'product-modbus562372-2': '编辑设备配置',
+    'product-modbus562372-3': '保存',
+    'product-modbus562372-4': '取消',
+    'product-modbus562372-5': '设备状态 :',
+    'product-modbus562372-6': '配置设备状态是来自网关还是设备下变量通讯是否正常;',
+    'product-modbus562372-7':
+      '如选择网关则设备的在离线状态取自网关的在离线状态,如果选择设备数据,则设备在所选时长内无变量通讯则判定设备离线。',
+    'product-modbus562372-8':
+      '                  当选择设备数据时,建议时长大于模板内最小采集频率,否则设备将频繁被动离线。',
+    'product-modbus562372-9': '选择时长 :',
+    'product-modbus562372-10': '使用设备数据判断方式,要确认在轮训时间内有数据上报',
+    'product-modbus562372-11': '请选择默认时长',
+    'product-modbus562372-12': ' 设备下多久无数据则判定该设备离线',
+    'product-modbus562372-13': '采集方式 :',
+    'product-modbus562372-14': '默认地址 :',
+    'product-modbus562372-15': '从机地址',
+    'product-modbus562372-16':
+      '子设备的默认地址,若在设备详情的子设备中设置了子设备地址,则默认值会被覆盖',
+    'product-modbus562372-17': 'IO寄存器',
+    'product-modbus562372-18': 'IO 寄存器包括线圈、离散寄存器,可以和开关量属性绑定',
+    'product-modbus562372-19': '编辑寄存器',
+    'product-modbus562372-20': '批量导入',
+    'product-modbus562372-21': '导出',
+    'product-modbus562372-22': '保存',
+    'product-modbus562372-23': '取消',
+    'product-modbus562372-24': '序号',
+    'product-modbus562372-25': '属性',
+    'product-modbus562372-26': '关联属性',
+    'product-modbus562372-27': '物模型',
+    'product-modbus562372-28': '标识符',
+    'product-modbus562372-29': '从机地址',
+    'product-modbus562372-30': '寄存器地址',
+    'product-modbus562372-31': '是否只读',
+    'product-modbus562372-32': '只读',
+    'product-modbus562372-33': '读写',
+    'product-modbus562372-34': '操作',
+    'product-modbus562372-35': '删除',
+    'product-modbus562372-36': '添加一个IO寄存器',
+    'product-modbus562372-37': '添加多个IO寄存器',
+    'product-modbus562372-38': '数据寄存器',
+    'product-modbus562372-39': '数据寄存器包括输入寄存器、保持寄存器,可以和数值型属性绑定',
+    'product-modbus562372-40': '批量导入',
+    'product-modbus562372-41': '导出',
+    'product-modbus562372-42': '数据类型',
+    'product-modbus562372-43': '读取个数',
+    'product-modbus562372-44': '添加单个数据寄存器',
+    'product-modbus562372-45': '添加多个数据寄存器',
+    'product-modbus562372-46': '关联属性不能为空',
+    'product-modbus562372-47': '寄存器地址不能为空',
+    'product-modbus562372-48': '是否只读(0-否,1-是)不能为空',
+    'product-modbus562372-49': 'modbus数据类型不能为空',
+    'product-modbus562372-50': '读取个数不能为空',
+    'product-modbus562372-51': '寄存器类型 1-IO寄存器 2-数据寄存器不能为空',
+    'product-modbus562372-52': '保存成功',
+    'product-modbus562372-53': '修改成功',
+    'product-modbus562372-311': '位偏移量',
+    'product-scada638785-0': '暂无组态',
+    'thimgs-mopdel-list738493-0': '选择物模型',
+    'thimgs-mopdel-list738493-1': '名称',
+    'thimgs-mopdel-list738493-2': '请输入物模型名称',
+    'thimgs-mopdel-list738493-3': '搜索',
+    'thimgs-mopdel-list738493-4': '重置',
+    'thimgs-mopdel-list738493-5': '物模型',
+    'thimgs-mopdel-list738493-6': '标识符',
+    'thimgs-mopdel-list738493-7': '确定',
+    'thimgs-mopdel-list738493-8': '关 闭',
+    'componentsbatchImportModbus745343-0': 'IO寄存器模板',
+    'componentsbatchImportModbus745343-1': '数据寄存器模板',
+    'category142342-0': '产品分类名称',
+    'category142342-1': '显示顺序',
+    'category142342-2': '请输入显示顺序',
+    'category142342-3': '请输入内容',
+    'category142342-4': '产品分类名称不能为空',
+    'category142342-5': '是否系统通用不能为空',
+    'category142342-6': '添加产品分类',
+    'category142342-7': '修改产品分类',
+    'category142342-8': '是否确认删除产品分类编号为{0}的数据项?',
+    'product-scada034908-0': '创建组态'
+  },
+  device: {
+    'allot-import-dialog060657-0': '产品',
+    'allot-import-dialog060657-1': '请选择产品',
+    'allot-import-dialog060657-2': '目标机构',
+    'allot-import-dialog060657-3': '请选择目标机构',
+    'allot-import-dialog060657-7': '1.仅允许导入xls、xlsx格式文件。',
+    'allot-import-dialog060657-8':
+      '2.单次最多分配1000个设备,单次设备较多时需要较长的校验、导入时间。',
+    'allot-import-dialog060657-9':
+      '3.上传文件并分配后,可到设备列表-更多操作-设备导入记录中查看上传失败的设备详情信息。',
+    'allot-import-dialog060657-10': '设备分配模板',
+    'allot-import-dialog060657-12': '确认分配',
+    'allot-import-dialog060657-13': '导入分配',
+    'allot-import-dialog060657-14': '产品不能为空',
+    'allot-import-dialog060657-15': '目标机构不能为空',
+    'allot-import-dialog060657-17': '导入结果',
+    'allot-record155854-0': '设备分配记录',
+    'allot-record155854-1': '归属机构',
+    'allot-record155854-2': '产品名称',
+    'allot-record155854-5': '设备被分配前的归属机构',
+    'allot-record155854-7': '设备被分配后的归属机构',
+    'allot-record155854-8': '分配总数',
+    'allot-record155854-9': '分配成功',
+    'allot-record155854-10': '分配失败',
+    'allot-record155854-11': '分配状态',
+    'allot-record155854-12': '分配方式',
+    'allot-record155854-13': '分配时间',
+    'allot-record155854-15': '下载明细',
+    'batch-import-dialog850870-5': '提示:仅允许导入xls、xlsx格式文件。',
+    'batch-import-dialog850870-6': '下载设备导入模板',
+    'device-edit148398-0': '* 基本信息',
+    'device-edit148398-1': '设备名称',
+    'device-edit148398-2': '请输入设备名称',
+    'device-edit148398-3': '摘要',
+    'device-edit148398-4': '所属产品',
+    'device-edit148398-5': '产品名称',
+    'device-edit148398-6': '选择',
+    'device-edit148398-7': '设备编号',
+    'device-edit148398-8': '请输入设备编号',
+    'device-edit148398-9': '生成',
+    'device-edit148398-10': '当前选择TCP协议,设备编号生成为HEX格式',
+    'device-edit148398-11':
+      '当前选择的产品属于modbus协议,将在网关设备创建后根据采集点模板生成子设备',
+    'device-edit148398-12': '固件版本',
+    'device-edit148398-13': '请输入固件版本',
+    'device-edit148398-14': '模拟设备',
+    'device-edit148398-15': '设备影子',
+    'device-edit148398-16': '禁用设备',
+    'device-edit148398-17': '备注信息',
+    'device-edit148398-18': '请输入备注信息',
+    'device-edit148398-19': '定位方式',
+    'device-edit148398-20': '请选择设备状态',
+    'device-edit148398-21': '设备经度',
+    'device-edit148398-22': '请输入设备经度',
+    'device-edit148398-23': '坐标拾取',
+    'device-edit148398-24': '设备纬度',
+    'device-edit148398-25': '请输入设备纬度',
+    'device-edit148398-26': '所在地址',
+    'device-edit148398-27': '请输入设备所在地址',
+    'device-edit148398-28': '入网地址',
+    'device-edit148398-29': '设备入网IP',
+    'device-edit148398-30': '激活时间',
+    'device-edit148398-31': '设备激活时间',
+    'device-edit148398-32': '设备信号',
+    'device-edit148398-33': '设备信号强度',
+    'device-edit148398-34': '其他信息',
+    'device-edit148398-35': '认证信息',
+    'device-edit148398-36': '二维码',
+    'device-edit148398-37': '地图展示区域,新增后显示',
+    'device-edit148398-38': '修',
+    'device-edit148398-39': '改',
+    'device-edit148398-40': '新',
+    'device-edit148398-41': '增',
+    'device-edit148398-42': '运行状态',
+    'device-edit148398-43': '子设备',
+    'device-edit148398-44': '设备通道',
+    'device-edit148398-45': '设备直播',
+    'device-edit148398-46': '直播录像',
+    'device-edit148398-47': '设备定时',
+    'device-edit148398-48': '设备分享',
+    'device-edit148398-49': '事件日志',
+    'device-edit148398-50': '指令日志',
+    'device-edit148398-51': '实时监测',
+    'device-edit148398-52': '监测统计',
+    'device-edit148398-53': '返回列表',
+    'device-edit148398-54': '摘要(设备上传的只读数据)',
+    'device-edit148398-55': '复制',
+    'device-edit148398-56': '设备二维码',
+    'device-edit148398-57': '关 闭',
+    'device-edit148398-58': 'Mqtt连接参数',
+    'device-edit148398-59': '一键复制',
+    'device-edit148398-60': '设备名称不能为空',
+    'device-edit148398-61': '设备名称长度在 2 到 32 个字符',
+    'device-edit148398-62': '固件版本不能为空',
+    'device-edit148398-63': '接收到【设备状态-详情】主题:',
+    'device-edit148398-64': '接收到【设备状态-详情】内容:',
+    'device-edit148398-65': '设备编号不能为空',
+    'device-edit148398-66': '设备编号只能是字母和数字',
+    'device-edit148398-67': '所属产品不能为空',
+    'device-edit148398-68': '修改成功',
+    'device-edit148398-69': '设备编号已经存在,添加设备失败',
+    'device-edit148398-70': '添加设备成功',
+    'device-edit148398-71': '复制成功',
+    'device-edit148398-72': '请先选择产品',
+    'device-edit148398-73': '组态应用',
+    'device-edit148398-74': '数据采集',
+    'device-edit148398-75': '视频监控',
+    'device-edit148398-76': '数据调试',
+    'device-edit148398-77': '轮询任务',
+    'device-edit148398-78': '网关',
+    'device-edit148398-79': '云端录像',
+    'device-edit148398-80': '告警用户',
+    'device-edit148398-81': '设备告警',
+    'device-functionlog399522-0': '请选择设备从机:',
+    'device-functionlog399522-1': '请选择设备从机',
+    'device-functionlog399522-2': '从机地址:$',
+    'device-functionlog399522-3': '日志类型',
+    'device-functionlog399522-4': '请选择类型',
+    'device-functionlog399522-5': '标识符',
+    'device-functionlog399522-6': '请输入标识符',
+    'device-functionlog399522-7': '时间范围',
+    'device-functionlog399522-8': '开始日期',
+    'device-functionlog399522-9': '结束日期',
+    'device-functionlog399522-10': '搜索',
+    'device-functionlog399522-11': '重置',
+    'device-functionlog399522-12': '指令类型',
+    'device-functionlog399522-13': '设置值',
+    'device-functionlog399522-15': '下发时间',
+    'device-functionlog399522-16': '下发结果描述',
+    'device-functionlog399522-18': '删除',
+    'device-functionlog399522-19': '寄存器地址',
+    'device-functionlog399522-20': '标识符不能为空',
+    'device-functionlog399522-21': '1==服务下发,2=属性获取,3.OTA升级不能为空',
+    'device-functionlog399522-22': '日志值不能为空',
+    'device-functionlog399522-23': '设备编号不能为空',
+    'device-functionlog399522-24': '是否确认删除设备服务下发日志编号为{0}的数据项?',
+    'device-functionlog399522-26': '删除成功',
+    'device-linkage188958-0': '请输入机构名称',
+    'device-linkage188958-1': '全部',
+    'device-linkage188958-2': '在线',
+    'device-linkage188958-3': '离线',
+    'device-linkage188958-5': '设备列表',
+    'device-linkage188958-25': '请选择设备状态',
+    'device-linkage188958-26': '设备经度',
+    'device-linkage188958-27': '请输入设备经度',
+    'device-linkage188958-28': '坐标拾取',
+    'device-linkage188958-29': '设备纬度',
+    'device-linkage188958-30': '请输入设备纬度',
+    'device-linkage188958-31': '所在地址',
+    'device-linkage188958-32': '请输入设备所在地址',
+    'device-linkage188958-33': '入网地址',
+    'device-linkage188958-34': '设备入网IP',
+    'device-linkage188958-35': '激活时间',
+    'device-linkage188958-36': '设备激活时间',
+    'device-linkage188958-37': '设备信号',
+    'device-linkage188958-38': '设备信号强度',
+    'device-linkage188958-39': '其他信息',
+    'device-linkage188958-40': '认证信息',
+    'device-linkage188958-41': '二维码',
+    'device-linkage188958-42': '地图展示区域,新增后显示',
+    'device-linkage188958-43': '运行状态',
+    'device-linkage188958-44': '子设备',
+    'device-linkage188958-45': '设备通道',
+    'device-linkage188958-46': '设备直播',
+    'device-linkage188958-47': '直播录像',
+    'device-linkage188958-48': '设备定时',
+    'device-linkage188958-49': '设备分享',
+    'device-linkage188958-50': '事件日志',
+    'device-linkage188958-51': '指令日志',
+    'device-linkage188958-52': '实时监测',
+    'device-linkage188958-53': '监测统计',
+    'device-linkage188958-54': '摘要(设备上传的只读数据)',
+    'device-linkage188958-55': '复制',
+    'device-linkage188958-56': '设备二维码',
+    'device-linkage188958-57': '关 闭',
+    'device-linkage188958-58': 'Mqtt连接参数',
+    'device-linkage188958-59': '一键复制',
+    'device-linkage188958-60': '设备名称不能为空',
+    'device-linkage188958-61': '设备名称长度在 2 到 32 个字符',
+    'device-linkage188958-62': '固件版本不能为空',
+    'device-linkage188958-63': '接收到【设备状态-详情】主题:',
+    'device-linkage188958-64': '接收到【设备状态-详情】内容:',
+    'device-linkage188958-65': '设备编号不能为空',
+    'device-linkage188958-66': '设备编号只能是字母和数字',
+    'device-linkage188958-67': '所属产品不能为空',
+    'device-linkage188958-68': '修改成功',
+    'device-linkage188958-69': '设备编号已经存在,添加设备失败',
+    'device-linkage188958-70': '添加设备成功',
+    'device-linkage188958-71': '复制成功',
+    'device-linkage188958-72': '请先选择产品',
+    'device-linkage188958-73': '告警用户',
+    'device-log798283-0': '日志类型',
+    'device-log798283-1': '请选择类型',
+    'device-log798283-2': '标识符',
+    'device-log798283-3': '请输入标识符',
+    'device-log798283-4': '时间范围',
+    'device-log798283-5': '开始日期',
+    'device-log798283-6': '结束日期',
+    'device-log798283-7': '搜索',
+    'device-log798283-8': '重置',
+    'device-log798283-9': '类型',
+    'device-log798283-10': '模式',
+    'device-log798283-11': '影子模式',
+    'device-log798283-12': '在线模式',
+    'device-log798283-13': '其他信息',
+    'device-log798283-14': '时间',
+    'device-log798283-15': '动作',
+    'device-log798283-16': '备注',
+    'device-log798283-17': '无',
+    'device-log798283-18': '设备升级',
+    'device-log798283-19': '设备上线',
+    'device-log798283-20': '设备离线',
+    'device-log798283-21': '元素',
+    'device-monitor817489-0': '监测间隔',
+    'device-monitor817489-1': '取值范围500-10000毫秒',
+    'device-monitor817489-2': '请输入监测间隔',
+    'device-monitor817489-3': '监测次数',
+    'device-monitor817489-4': '取值方位1-300',
+    'device-monitor817489-5': '请输入监测次数',
+    'device-monitor817489-6': '开始监测',
+    'device-monitor817489-7': '停止监测',
+    'device-monitor817489-8': '正在接收设备数据,请耐心等待......',
+    'device-monitor817489-9': '接收到【设备状态】主题:',
+    'device-monitor817489-10': '接收到【设备状态】内容:',
+    'device-monitor817489-11': '接收到【实时监测】主题:',
+    'device-monitor817489-12': '接收到【实时监测】内容:',
+    'device-monitor817489-13': '设备不在线,下发指令失败',
+    'device-monitor817489-14': '实时监测的间隔范围500-10000毫秒',
+    'device-monitor817489-15': '实时监测数量范围1-300',
+    'device-monitor817489-16': '更新实时监测',
+    'device-monitor817489-17': '关闭实时监测',
+    'device-monitor817489-18': '(单位',
+    'device-monitor817489-19': '无',
+    'device-recycle864193-0': '设备回收',
+    'device-recycle864193-1': '回收机构',
+    'device-recycle864193-2': '请选择回收机构',
+    'device-recycle864193-5': '查询',
+    'device-recycle864193-6': '重置',
+    'device-recycle864193-7': '所有设备',
+    'device-recycle864193-8': '暂无数据',
+    'device-recycle864193-12': '已选设备',
+    'device-recycle864193-13': '确定回收',
+    'device-recycle864193-14': '回收机构不能为空',
+    'device-select-allot.903153-0': '分配设备',
+    'device-select-allot.903153-4': '查询',
+    'device-select-allot.903153-5': '重置',
+    'device-select-allot.903153-6': '所有设备',
+    'device-select-allot.903153-7': '暂无数据',
+    'device-select-allot.903153-11': '已选设备',
+    'device-select-allot.903153-14': '确定分配',
+    'device-statistic932674-0': '请选择设备从机:',
+    'device-statistic932674-1': '请选择设备从机',
+    'device-statistic932674-2': '时间范围',
+    'device-statistic932674-3': '开始日期',
+    'device-statistic932674-4': '结束日期',
+    'device-statistic932674-5': '查询',
+    'device-statistic932674-6': '统计 (单位',
+    'device-statistic932674-7': '无',
+    'device-sub299018-2': '设备状态',
+    'device-sub299018-3': '请选择设备状态',
+    'device-sub299018-4': '搜索',
+    'device-sub299018-5': '重置',
+    'device-sub299018-7': '网关编码',
+    'device-sub299018-8': '从机地址',
+    'device-sub299018-10': '激活时间',
+    'device-sub299018-11': '创建时间',
+    'device-sub299018-13': '修改',
+    'device-sub299018-14': '设备名',
+    'device-sub299018-15': '请输入设备名',
+    'device-sub299018-19': '设备名不能为空',
+    'device-sub299018-20': '固件版本不能为空',
+    'device-sub299018-21': '添加设备',
+    'device-sub299018-22': '修改设备',
+    'device-sub299018-23': '修改成功',
+    'device-sub299018-24': '新增成功',
+    'device-sub299018-25': '是否确认删除设备编号为{0}的数据项?',
+    'device-sub299018-27': '删除成功',
+    'device-sub299018-28': '绑定的子设备默认子设备地址继承产品',
+    'device-user037521-0': '刷新',
+    'device-user037521-1': '用户编号',
+    'device-user037521-2': '用户名称',
+    'device-user037521-3': '手机号码',
+    'device-user037521-4': '用户类型',
+    'device-user037521-5': '拥有者',
+    'device-user037521-6': '分享',
+    'device-user037521-7': '分享时间',
+    'device-user037521-8': '备注',
+    'device-user037521-10': '查看',
+    'device-user037521-11': '取消分享',
+    'device-user037521-12': '设备分享',
+    'device-user037521-13': '请输入用户手机号码',
+    'device-user037521-14': '查询用户',
+    'device-user037521-15': '用户信息',
+    'device-user037521-16': '用户ID:',
+    'device-user037521-17': '手机号码:',
+    'device-user037521-18': '用户名称:',
+    'device-user037521-19': '设置用户权限',
+    'device-user037521-20': '权限名称',
+    'device-user037521-21': '权限标识',
+    'device-user037521-24': '修改',
+    'device-user037521-25': '关 闭',
+    'device-user037521-26': '手机号码不能为空',
+    'device-user037521-27': '手机号码长度为11位',
+    'device-user037521-28': '确认取消分享设备?',
+    'device-user037521-29': '取消分享成功',
+    'device-user037521-30': '查询不到设备信息,请刷新后重试',
+    'device-user037521-31': '查询不到用户信息,或者该用户已经是设备用户',
+    'device-user037521-32': '设备升级',
+    'device-user037521-33': '设备OTA升级',
+    'device-user037521-34': '设备定时',
+    'device-user037521-35': '定时执行任务',
+    'device-user037521-36': '设备日志',
+    'device-user037521-37': '包含事件日志和指令日志',
+    'device-user037521-38': '实时监测',
+    'device-user037521-39': '下发实时监测指令后,图表实时显示设备上报数据',
+    'device-user037521-40': '监测统计',
+    'device-user037521-41': '图表显示存储的历史监测数据',
+    'device-user037521-42': '更新成功',
+    'device-user037521-43': '新增成功',
+    'device-timer433369-0': '定时名称',
+    'device-timer433369-1': '请输入定时名称',
+    'device-timer433369-2': '定时状态',
+    'device-timer433369-3': '请选择定时状态',
+    'device-timer433369-4': '搜索',
+    'device-timer433369-5': '重置',
+    'device-timer433369-6': '新增',
+    'device-timer433369-7': '名称',
+    'device-timer433369-8': '描述',
+    'device-timer433369-9': 'CRON表达式',
+    'device-timer433369-10': '动作',
+    'device-timer433369-11': '状态',
+    'device-timer433369-12': '启用',
+    'device-timer433369-14': '查看',
+    'device-timer433369-15': '定时详细',
+    'device-timer433369-16': '删除',
+    'device-timer433369-17': '执行一次',
+    'device-timer433369-18': '执行时间',
+    'device-timer433369-19': '选择时间',
+    'device-timer433369-20': '选择星期',
+    'device-timer433369-21': '请选择',
+    'device-timer433369-22': 'cron表达式',
+    'device-timer433369-23': 'cron执行表达式',
+    'device-timer433369-24': '生成表达式',
+    'device-timer433369-25': '自定义表达式',
+    'device-timer433369-26': '执行动作',
+    'device-timer433369-27': '请选择类型',
+    'device-timer433369-28': '请选择父级物模型',
+    'device-timer433369-29': '值',
+    'device-timer433369-30': '请输入字符串',
+    'device-timer433369-31': '添加执行动作',
+    'device-timer433369-32': '新 增',
+    'device-timer433369-33': '修 改',
+    'device-timer433369-35': 'Cron表达式生成器',
+    'device-timer433369-36': '定时编号:',
+    'device-timer433369-37': '定时名称:',
+    'device-timer433369-38': '定时分组:',
+    'device-timer433369-39': '创建时间:',
+    'device-timer433369-40': '是否并发:',
+    'device-timer433369-41': '允许',
+    'device-timer433369-42': '禁止',
+    'device-timer433369-43': 'cron表达式:',
+    'device-timer433369-44': '执行策略:',
+    'device-timer433369-45': '默认策略',
+    'device-timer433369-46': '立即执行',
+    'device-timer433369-47': '放弃执行',
+    'device-timer433369-48': '下次执行时间:',
+    'device-timer433369-49': '定时状态:',
+    'device-timer433369-50': '正常',
+    'device-timer433369-51': '暂停',
+    'device-timer433369-52': '执行动作:',
+    'device-timer433369-53': '关 闭',
+    'device-timer433369-54': '周一',
+    'device-timer433369-55': '周二',
+    'device-timer433369-56': '周三',
+    'device-timer433369-57': '周四',
+    'device-timer433369-58': '周五',
+    'device-timer433369-59': '周六',
+    'device-timer433369-60': '周日',
+    'device-timer433369-61': '属性',
+    'device-timer433369-62': '功能',
+    'device-timer433369-63': '定时名称不能为空',
+    'device-timer433369-64': '停用',
+    'device-timer433369-65': '确认要{0}定时吗?',
+    'device-timer433369-67': '成功',
+    'device-timer433369-68': '确认要立即执行一次{0}',
+    'device-timer433369-69': '执行成功',
+    'device-timer433369-70': '添加定时',
+    'device-timer433369-71': '修改定时',
+    'device-timer433369-72': '无单位',
+    'device-timer433369-73': '是否确认删除定时定时编号为{0}的数据项?',
+    'device-timer433369-75': '删除成功',
+    'device-timer433369-76': '时间',
+    'device-timer433369-77': '每天',
+    'device-timer433369-78': '周一、',
+    'device-timer433369-79': '周二、',
+    'device-timer433369-80': '周三、',
+    'device-timer433369-81': '周四、',
+    'device-timer433369-82': '周五、',
+    'device-timer433369-83': '周六、',
+    'device-timer433369-84': '周日、',
+    'device-timer433369-85': '自定义Cron表达式',
+    'device-timer433369-86': '无',
+    'device-timer433369-87': '执行时间不能空',
+    'device-timer433369-88': '请选择要执行的星期',
+    'device-timer433369-89': 'cron表达式不能为空',
+    'device-timer433369-90': '执行动作中的选项和值不能为空',
+    'device-timer433369-91': '修改成功',
+    'device-timer433369-92': '新增成功',
+    'import-record086254-0': '设备导入记录',
+    'import-record086254-2': '批次任务状态',
+    'import-record086254-3': '开始日期',
+    'import-record086254-4': '结束日期',
+    'import-record086254-5': '搜索',
+    'import-record086254-6': '重置',
+    'import-record086254-7': '批次号',
+    'import-record086254-8': '设备总数',
+    'import-record086254-9': '成功数量',
+    'import-record086254-10': '失败数量',
+    'import-record086254-11': '任务状态',
+    'import-record086254-12': '完成时间',
+    'import-record086254-13': '产品名称',
+    'device-modbus.433390-1': '新增轮询任务',
+    'index.105953-0': '设备名称',
+    'index.105953-1': '请输入设备名称',
+    'index.105953-2': '设备编号',
+    'index.105953-3': '请输入设备编号',
+    'index.105953-4': '设备状态',
+    'index.105953-5': '请选择设备状态',
+    'index.105953-6': '我的分组',
+    'index.105953-7': '请选择我的分组',
+    'index.105953-8': '搜索',
+    'index.105953-9': '重置',
+    'index.105953-10': '新增设备',
+    'index.105953-11': '手动添加',
+    'index.105953-12': '批量导入',
+    'index.105953-13': '分配设备',
+    'index.105953-14': '选择分配',
+    'index.105953-15': '导入分配',
+    'index.105953-16': '回收设备',
+    'index.105953-17': '切换展示',
+    'index.105953-18': '显示下级机构数据',
+    'index.105953-19': '选中后,本级可以看下级的数据',
+    'index.105953-20': '编号',
+    'index.105953-21': '产品',
+    'index.105953-22': '协议',
+    'index.105953-23': '通讯协议',
+    'index.105953-24': '子设备数',
+    'index.105953-26': '启用',
+    'index.105953-27': '禁用',
+    'index.105953-28': '状态',
+    'index.105953-29': '信号',
+    'index.105953-32': '激活时间',
+    'index.105953-33': '创建时间',
+    'index.105953-35': '删除',
+    'index.105953-36': '查看',
+    'index.105953-37': '二维码',
+    'index.105953-38': '分享的设备',
+    'index.105953-39': '产品',
+    'index.105953-40': '运行状态',
+    'index.105953-41': '暂无数据,请添加设备',
+    'index.105953-42': '设备二维码',
+    'index.105953-43': '接收到【设备状态】主题:',
+    'index.105953-44': '接收到【设备状态】内容:',
+    'index.105953-45': '是否确认删除设备编号为{0}的数据项?',
+    'index.105953-47': '删除成功',
+    'index.105953-48': '更多操作',
+    'index.105953-49': '导入记录',
+    'index.105953-50': '生成设备编号',
+    'index.105953-51': '设备回收记录',
+    'index.105953-52': '设备分配记录',
+    'index.105953-53': '告警:',
+    'index.105953-54': '生成设备编号',
+    'index.105953-55': '生成数量',
+    'index.105953-56': '确 定',
+    'index.105953-57': '关 闭',
+    'index.105953-58': '暂无组态,请先配置模板组态!',
+    'product-list.058448-0': '选择产品',
+    'product-list.058448-2': '请输入产品名称',
+    'product-list.058448-3': '搜索',
+    'product-list.058448-4': '重置',
+    'product-list.058448-6': '分类名称',
+    'product-list.058448-7': '租户名称',
+    'product-list.058448-8': '授权码',
+    'product-list.058448-9': '启用',
+    'product-list.058448-10': '未启用',
+    'product-list.058448-11': '认证方式',
+    'product-list.058448-12': '联网方式',
+    'product-list.058448-13': '创建时间',
+    'product-list.058448-14': '确定',
+    'product-list.058448-15': '关 闭',
+    'realTime-status099127-0': '从机实时状态',
+    'realTime-status099127-1': '属性上报',
+    'realTime-status099127-2': '时间:',
+    'realTime-status099127-3': '服务下发',
+    'realTime-status099127-4': '发送',
+    'realTime-status099127-5': '设 备 指 令',
+    'realTime-status099127-6': '服务下发:',
+    'realTime-status099127-7': '设备应答:',
+    'realTime-status099127-8': '暂无数据',
+    'realTime-status099127-9': '请选择设备从机',
+    'realTime-status099127-10': '网关实时状态',
+    'realTime-status099127-11': '设备模式',
+    'realTime-status099127-12': '请选择',
+    'realTime-status099127-13': '请输入字符串',
+    'realTime-status099127-14': '请输入字符串,单位:{0}',
+    'realTime-status099127-15': '指令发送',
+    'realTime-status099127-16': '设备离线时状态',
+    'realTime-status099127-17': '请输入小数',
+    'realTime-status099127-18': '请输入整数',
+    'realTime-status099127-19': '服务调用',
+    'realTime-status099127-20': '数据范围:',
+    'realTime-status099127-21': '取消',
+    'realTime-status099127-22': '确认',
+    'realTime-status099127-23': '在线模式',
+    'realTime-status099127-24': '影子模式',
+    'realTime-status099127-25': '离线模式',
+    'realTime-status099127-26': '下发指令',
+    'realTime-status099127-27': '服务调用成功!',
+    'realTime-status099127-28': '接收到【设备状态-运行】主题:',
+    'realTime-status099127-29': '接收到【设备状态-运行】内容:',
+    'realTime-status099127-30': '接收到【物模型】主题1:',
+    'realTime-status099127-31': '接收到【物模型】内容:',
+    'recycle-record.845969-0': '设备回收记录',
+    'recycle-record.845969-1': '机构名称',
+    'recycle-record.845969-4': '搜索',
+    'recycle-record.845969-5': '重置',
+    'recycle-record.845969-6': '被回收机构名称',
+    'recycle-record.845969-8': '回收时间',
+    'user-list.041943-0': '选择用户',
+    'user-list.041943-1': '手机号码',
+    'user-list.041943-2': '请输入用户手机号码',
+    'user-list.041943-3': '查询',
+    'user-list.041943-5': '用户编号',
+    'user-list.041943-6': '用户名称',
+    'user-list.041943-7': '用户昵称',
+    'user-list.041943-8': '创建时间',
+    'user-list.041943-9': '分享',
+    'user-list.041943-10': '关 闭',
+    'user-list.041943-11': '手机号码不能为空',
+    'user-list.041943-12': '手机号码长度为11位',
+    'user-list.041943-13': '新增成功',
+    'running-status866086-0': '设备模式',
+    'running-status866086-1': 'OTA升级',
+    'running-status866086-2': '检查更新',
+    'running-status866086-3': '请选择',
+    'running-status866086-4': '请输入字符串',
+    'running-status866086-5': '请输入字符串,单位:{0}',
+    'running-status866086-6': '指令发送',
+    'running-status866086-7': '请输入小数',
+    'running-status866086-8': '请输入整数',
+    'running-status866086-9': '设备离线时状态',
+    'running-status866086-10': '设备固件升级',
+    'running-status866086-11': '已经是最新版本,不需要升级',
+    'running-status866086-12': '可以升级到以下版本',
+    'running-status866086-13': '固件名称',
+    'running-status866086-16': '下载地址',
+    'running-status866086-17': '固件描述',
+    'running-status866086-18': '升 级',
+    'running-status866086-20': '设备控制',
+    'running-status866086-21': '接收到【设备状态-运行】主题:',
+    'running-status866086-22': '接收到【设备状态-运行】内容:',
+    'running-status866086-23': '接收到【物模型】主题1:',
+    'running-status866086-24': '接收到【物模型】内容:',
+    'running-status866086-25': '服务调用成功!',
+    'running-status866086-26': '在线模式',
+    'running-status866086-27': '影子模式',
+    'running-status866086-28': '离线模式',
+    'running-status866086-29': '元素个数不匹配,数组元素个数为',
+    'running-status866086-30': '个,以英文逗号分隔。',
+    'running-status866086-31': '设备升级',
+    'sub.083943-0': '添加子设备',
+    'sub.083943-1': '移除子设备',
+    'sub.083943-2': '设置子设备地址',
+    'sub.083943-3': '子设备地址',
+    'sub.083943-4': '是否确认删除设备编号为{0]的数据项?',
+    'sub.083943-5': '保存成功',
+    'sub-device-list323213-0': '选择设备',
+    'sub-device-list323213-1': '请输入子设备编号',
+    'sub-device-list323213-2': '名称',
+    'sub-device-list323213-3': '请输入子设备名称',
+    'sub-device-list323213-4': '添加子设备成功',
+    'scada.789543-0': '暂无组态',
+    'variable-case347856-0': '变量类型',
+    'variable-case347856-1': '请选择变量',
+    'variable-case347856-2': '变量名称',
+    'variable-case347856-3': '请输入变量名称',
+    'variable-case347856-4': '搜素',
+    'variable-case347856-5': '重置',
+    'variable-case347856-6': '变量ID',
+    'variable-case347856-7': '变量类型',
+    'variable-case347856-8': '变量名称',
+    'variable-case347856-9': '更新时间',
+    'variable-case347856-10': '当前值',
+    'variable-case347856-11': '操作',
+    'variable-case347856-12': '历史查询',
+    'variable-case347856-13': '主动采集',
+    'variable-case347856-14': '下发指令主动采集变量,是否继续?',
+    'variable-case347856-15': '提示',
+    'variable-case347856-16': '采集所有',
+    'inline-video986754-0': '暂无视频',
+    'iot.group.index.637432-0': '分组名称',
+    'iot.group.index.637432-1': '请输入分组名称',
+    'iot.group.index.637432-2': '我的分组',
+    'iot.group.index.637432-3': '搜索',
+    'iot.group.index.637432-4': '重置',
+    'iot.group.index.637432-5': '新增',
+    'iot.group.index.637432-6': '分组排序',
+    'iot.group.index.637432-7': '创建时间',
+    'iot.group.index.637432-8': '所属用户',
+    'iot.group.index.637432-9': '备注',
+    'iot.group.index.637432-10': '操作',
+    'iot.group.index.637432-11': '查看设备',
+    'iot.group.index.637432-12': '添加设备',
+    'iot.group.index.637432-13': '查看',
+    'iot.group.index.637432-14': '删除',
+    'iot.group.index.637432-15': '请输入分组排序',
+    'iot.group.index.637432-16': '请输入内容',
+    'iot.group.index.637432-17': '修 改',
+    'iot.group.index.637432-18': '新 增',
+    'iot.group.index.637432-19': '取 消',
+    'iot.group.index.637432-20': '分组名称不能为空',
+    'iot.group.index.637432-21': '分组排序不能为空,最大值为99',
+    'iot.group.index.637432-22': '添加设备分组',
+    'iot.group.index.637432-23': '修改设备分组',
+    'iot.group.index.637432-24': '修改成功',
+    'iot.group.index.637432-25': '新增成功',
+    'iot.group.index.637432-26': '是否确认删除设备分组编号为{0}的数据项?',
+    'iot.group.index.637432-27': '删除成功',
+    'iot.group.device-list.849593-0': '选择设备',
+    'iot.group.device-list.849593-1': '设备名称',
+    'iot.group.device-list.849593-2': '请输入设备名称',
+    'iot.group.device-list.849593-3': '搜索',
+    'iot.group.device-list.849593-4': '设备名称',
+    'iot.group.device-list.849593-5': '设备编号',
+    'iot.group.device-list.849593-6': '产品名称',
+    'iot.group.device-list.849593-7': '设备类型',
+    'iot.group.device-list.849593-8': '分享',
+    'iot.group.device-list.849593-9': '拥有',
+    'iot.group.device-list.849593-10': '设备状态',
+    'iot.group.device-list.849593-11': '确 定',
+    'iot.group.device-list.849593-12': '取 消',
+    'iot.group.device-list.849593-13': '更新分组下的设备成功',
+    'instruction-parsing830424-0': '下发设备号:',
+    'instruction-parsing830424-1': '手动下发',
+    'instruction-parsing830424-2': '设备返回',
+    'instruction-parsing830424-3': '设备上报',
+    'instruction-parsing830424-4': '解析数据',
+    'instruction-parsing830424-5': '已解析',
+    'instruction-parsing830424-6': '物模型名称:',
+    'instruction-parsing830424-7': '标识符:',
+    'instruction-parsing830424-8': '数据值:',
+    'instruction-parsing830424-9': '更多解析',
+    'instruction-parsing830424-10': '请输入内容',
+    'instruction-parsing830424-11': '请选择',
+    'instruction-parsing830424-12': '下发',
+    'instruction-parsing830424-13': '上报',
+    'instruction-parsing830424-14': '发送',
+    'instruction-parsing830424-15': '常用快捷指令',
+    'instruction-parsing830424-16': '指令生成',
+    'instruction-parsing830424-17': '添加至常用快捷键',
+    'instruction-parsing830424-18': '生成指令数据',
+    'instruction-parsing830424-19': '从机地址',
+    'instruction-parsing830424-20': '指令类型',
+    'instruction-parsing830424-21': '功能码',
+    'instruction-parsing830424-22': '起始寄存器地址',
+    'instruction-parsing830424-23': '寄存器值',
+    'instruction-parsing830424-24': '寄存器值',
+    'instruction-parsing830424-25': '线圈状态值',
+    'instruction-parsing830424-26': '点击生成预览',
+    'instruction-parsing830424-27': '添加至常用',
+    'instruction-parsing830424-28': '复制数据',
+    'instruction-parsing830424-29': '指令名称',
+    'instruction-parsing830424-30': '请输入',
+    'instruction-parsing830424-31': '指令数据',
+    'instruction-parsing830424-32': '取消',
+    'instruction-parsing830424-33': '确定',
+    'instruction-parsing830424-34': '删除常用快捷键',
+    'instruction-parsing830424-35': '确认删除',
+    'instruction-parsing830424-36': '吗?',
+    'instruction-parsing830424-37': '取消',
+    'instruction-parsing830424-38': '确定',
+    'instruction-parsing830424-39': '更多解析',
+    'instruction-parsing830424-40': '序号',
+    'instruction-parsing830424-41': '物模型名称',
+    'instruction-parsing830424-42': '标识符',
+    'instruction-parsing830424-43': '数据值',
+    'instruction-parsing830424-44': '线圈个数',
+    'instruction-parsing830424-45': '寄存器个数',
+    'instruction-parsing830424-46': '线圈值',
+    'instruction-parsing830424-47': '寄存器值',
+    'instruction-parsing830424-48': '01 读取线圈状态',
+    'instruction-parsing830424-49': '02 读取输入状态',
+    'instruction-parsing830424-50': '03 读取保存寄存器',
+    'instruction-parsing830424-51': '04 读取输入寄存器',
+    'instruction-parsing830424-52': '05 写入单个线圈寄存器',
+    'instruction-parsing830424-53': '06 写入单个保存寄存器',
+    'instruction-parsing830424-54': '15 写入多个线圈状态',
+    'instruction-parsing830424-55': '16 写入多个保存寄存器',
+    'instruction-parsing830424-56': '下发',
+    'instruction-parsing830424-57': '上报',
+    'instruction-parsing830424-58': '编辑',
+    'instruction-parsing830424-59': '新增',
+    'instruction-parsing830424-60': '快捷指令成功',
+    'instruction-parsing830424-61': '快捷指令失败',
+    'instruction-parsing830424-62': '编码失败',
+    'instruction-parsing830424-63': '指令不能为空',
+    'instruction-parsing830424-64': '发送失败',
+    'instruction-parsing830424-65': '解析为空',
+    'instruction-parsing830424-66': '编码失败',
+    'instruction-parsing830424-67': '编辑',
+    'instruction-parsing830424-68': '删除',
+    'instruction-parsing830424-69': '删除指令成功',
+    'instruction-parsing830424-70': '删除指令失败',
+    'device-modbus-task384302-0': '定时名称',
+    'device-modbus-task384302-1': '请输入定时名称',
+    'device-modbus-task384302-2': '定时状态',
+    'device-modbus-task384302-3': '请选择定时状态',
+    'device-modbus-task384302-4': '搜索',
+    'device-modbus-task384302-5': '重置',
+    'device-modbus-task384302-6': '新增',
+    'device-modbus-task384302-7': '名称',
+    'device-modbus-task384302-8': '描述',
+    'device-modbus-task384302-9': 'CRON表达式',
+    'device-modbus-task384302-10': '动作',
+    'device-modbus-task384302-11': '删除',
+    'device-modbus-task384302-12': '添加至常用快捷键',
+    'device-modbus-task384302-13': '生成指令数据',
+    'device-modbus-task384302-14': '从机地址',
+    'device-modbus-task384302-15': '功能码',
+    'device-modbus-task384302-16': '起始寄存器地址',
+    'device-modbus-task384302-17': '寄存器值',
+    'device-modbus-task384302-18': '线圈状态值',
+    'device-modbus-task384302-19': '时间周期',
+    'device-modbus-task384302-20': '周期循环',
+    'device-modbus-task384302-21': '适用周期规则的场景,自然日固定周期循环轮询一次。',
+    'device-modbus-task384302-22': '例如:每天07点轮询一次(取值时间范围:今日07点-昨日07点)',
+    'device-modbus-task384302-23': '每',
+    'device-modbus-task384302-24': '轮询一次',
+    'device-modbus-task384302-25': '点击生成预览',
+    'device-modbus-task384302-26': '复制数据',
+    'device-modbus-task384302-27': '取消',
+    'device-modbus-task384302-28': '确定',
+    'device-modbus-task384302-29': '线圈个数',
+    'device-modbus-task384302-30': '寄存器个数',
+    'device-modbus-task384302-31': '线圈值',
+    'device-modbus-task384302-32': '寄存器值',
+    'device-modbus-task384302-33': '01 读取线圈状态',
+    'device-modbus-task384302-34': '02 读取输入状态',
+    'device-modbus-task384302-35': '03 读取保存寄存器',
+    'device-modbus-task384302-36': '04 读取输入寄存器',
+    'device-modbus-task384302-37': '05 写入单个线圈寄存器',
+    'device-modbus-task384302-38': '06 写入单个保存寄存器',
+    'device-modbus-task384302-39': '15 写入多个线圈状态',
+    'device-modbus-task384302-40': '16 写入多个保存寄存器',
+    'device-modbus-task384302-41': '编码失败',
+    'device-modbus-task384302-42': '启用',
+    'device-modbus-task384302-43': '停用',
+    'device-modbus-task384302-44': '确认要{0}定时吗?',
+    'device-modbus-task384302-45': '成功',
+    'device-modbus-task384302-46': '时间',
+    'device-modbus-task384302-47': '每天',
+    'device-modbus-task384302-48': '周一、',
+    'device-modbus-task384302-49': '周二、',
+    'device-modbus-task384302-50': '周三、',
+    'device-modbus-task384302-51': '周四、',
+    'device-modbus-task384302-52': '周五、',
+    'device-modbus-task384302-53': '周六、',
+    'device-modbus-task384302-54': '周日、',
+    'device-modbus-task384302-55': '自定义Cron表达式',
+    'device-modbus-task384302-56': '任务id',
+    'device-modbus-task384302-57': '指令',
+    'device-modbus-task384302-58': '状态',
+    'device-modbus-task384302-59': '定时时间',
+    'device-modbus-task384302-60': '操作',
+    'device-modbus-task384302-61': '删除',
+    'device-modbus-task384302-62': '修改成功',
+    'device-modbus-task384302-63': '新增成功',
+    'device-modbus-task384302-64': '是否确认删除轮训任务列编号为{0}的数据项?',
+    'device-modbus-task384302-65': '删除成功',
+    'order.index.045965-1': '添加指令权限控制',
+    'order.index.045965-2': '修改指令权限控制',
+    'order.index.045965-3': '是否确认删除指令权限控制编号为{0}的数据项?',
+    'order.index.045965-4': '指令',
+    'order.index.045965-5': '设备',
+    'order.index.045965-6': '用户',
+    'order.index.045965-7': '可操作次数',
+    'order.index.045965-8': '开始时间',
+    'order.index.045965-9': '结束时间',
+    'order.index.045965-10': '选择设备',
+    'order.index.045965-11': '选择用户',
+    'order.index.045965-12': '指令配置',
+    'order.index.045965-13': '全选',
+    'order.index.045965-14': '操作次数',
+    'order.index.045965-15': '开始时间',
+    'order.index.045965-16': '请选择开始时间',
+    'order.index.045965-17': '结束时间',
+    'order.index.045965-18': '请选择结束时间',
+    'order.index.045965-19': '选择文件',
+    'order.index.045965-20': '图片',
+    'order.index.045965-21': '备注',
+    'order.index.045965-22': '请输入内容',
+    'order.index.045965-23': '确 定',
+    'order.index.045965-24': '取 消',
+    'order.index.045965-25': '请选择设备',
+    'order.index.045965-26': '请选择用户',
+    'order.index.045965-27': '操作次数不能为空',
+    'order.index.045965-28': '请选择开始时间',
+    'order.index.045965-29': '请选择结束时间',
+    'order.index.045965-30': '至少选择一个指令',
+    'device-alert309509-0': '告警名称',
+    'device-alert309509-1': '请输入告警名称',
+    'device-alert309509-2': '告警级别',
+    'device-alert309509-3': '请选择告警级别',
+    'device-alert309509-4': '处理状态',
+    'device-alert309509-5': '请选择处理状态',
+    'device-alert309509-6': '搜索',
+    'device-alert309509-7': '重置',
+    'device-alert309509-8': '告警来源',
+    'device-alert309509-9': '告警时间',
+    'device-alert309509-10': '数据',
+    'device-alert309509-11': '处理状态',
+    'device-alert309509-12': '操作',
+    'device-alert309509-13': '处理',
+    'device-alert309509-14': '处理结果',
+    'device-alert309509-15': '请输入内容',
+    'device-alert309509-16': '确 定',
+    'device-alert309509-17': '取 消',
+    'device-alert309509-18': '处理内容不能为空',
+    'device-alert309509-19': '修改设备告警',
+    'device-alert309509-20': '修改成功',
+    'device-alert309509-21': '新增成功',
+    'device-variable930930-0': '设备未激活',
+    'device-variable930930-1': '设备处于禁用状态',
+    'device-variable930930-2': '设备处于离线状态',
+    'device-variable930930-3': '下发成功',
+    'device-variable930930-4': '请输入数据',
+    'device-variable930930-5': '编辑',
+    'device-variable930930-6': '确定',
+    'device-variable930930-7': '取消',
+    'device-variable930930-8': '请输入数据',
+    'device-variable930930-9': '设备未激活',
+    'device-variable930930-10': '设备处于禁用状态',
+    'device-variable930930-11': '设备处于离线状态',
+    'realTime-status845353-0': '编辑',
+    'realTime-status845353-1': '下发指令',
+    'realTime-status845353-2': '上报时间:',
+    'realTime-status845353-3': '下发指令',
+    'realTime-status845353-4': '取消',
+    'realTime-status845353-5': '确定',
+    'realTime-status845353-6': '下发成功'
+  },
 
 
   'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
   'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
 }
 }

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików