更多登录ui修改;修复【全局优化】批量删除时,勾选的数据被删除了,上面的“已选择X顶”没有更新;修复物联网卡导入逻辑修改
* feat: 设备根据标签进行搜索功能 * fix: bug#23370 * fix: bug#17573 * fix: bug#23378 * fix: bug#20292 * fix: bug#23158 * fix: bug#23057 * fix: bug#23583 * fix: bug#23576 * fix: bug#23597、告警等级过长组件优化 * fix: 物联网卡导入逻辑 * fix: 物联网卡导入 * fix: 更多登录ui修改;修复【全局优化】批量删除时,勾选的数据被删除了,上面的“已选择X顶”没有更新;修复物联网卡导入逻辑修改 * fix: 更多登录ui修改 * fix:【全局优化】批量删除时,勾选的数据被删除了,上面的“已选择X顶”没有更新 * fix: 物联网卡导入逻辑修改 * fix: 组织新增排序修改; * fix: 组织新增排序修改 * fix: bug#23669、 23517、23758、23752、23744 * fix: 组件库更新 * fix: bug#23758、23752、23744 * feat: 新增设备根据标签进行搜索功能 * feat: 场景联动条件编辑 * feat: 新增设备根据标签进行搜索功能 * fix: 修改编辑条件名称
This commit is contained in:
parent
4c52039964
commit
a9a6a096e6
|
@ -8,6 +8,7 @@
|
|||
"name": "jetlinks-vue",
|
||||
"version": "0.0.0",
|
||||
"dependencies": {
|
||||
"@ant-design/icons-vue": "^7.0.1",
|
||||
"@liveqing/liveplayer-v3": "^3.7.10",
|
||||
"@types/marked": "^4.0.8",
|
||||
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
||||
|
@ -31,6 +32,7 @@
|
|||
"nrm": "^1.2.5",
|
||||
"pinia": "^2.0.28",
|
||||
"rollup-plugin-copy": "^3.4.0",
|
||||
"rxjs": "^7.8.1",
|
||||
"unplugin-auto-import": "^0.12.1",
|
||||
"unplugin-vue-components": "^0.22.12",
|
||||
"v-clipboard3": "^0.1.4",
|
||||
|
@ -130,9 +132,9 @@
|
|||
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
||||
},
|
||||
"node_modules/@ant-design/icons-vue": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
|
||||
"integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^6.0.0",
|
||||
"@ant-design/icons-svg": "^4.2.1"
|
||||
|
@ -1944,6 +1946,32 @@
|
|||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
||||
"integrity": "sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ=="
|
||||
},
|
||||
"node_modules/@vueuse/router": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/router/-/router-9.13.0.tgz",
|
||||
"integrity": "sha512-lcL6auSUGMGZMdDzZJb02QDe909AChzMXoxqFS3gL2E8mHmIx0SrNor+33UkqvvBPi18vXpDq/R7tPd9fxWwTg==",
|
||||
"dependencies": {
|
||||
"@vueuse/shared": "9.13.0",
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue-router": ">=4.0.0-rc.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@vueuse/router/node_modules/@vueuse/shared": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
|
||||
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
||||
"dependencies": {
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
}
|
||||
},
|
||||
"node_modules/@vueuse/shared": {
|
||||
"version": "9.12.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
||||
|
@ -2273,6 +2301,18 @@
|
|||
"vue": ">=3.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ant-design-vue/node_modules/@ant-design/icons-vue": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^6.0.0",
|
||||
"@ant-design/icons-svg": "^4.2.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": ">=3.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||
|
@ -3015,6 +3055,62 @@
|
|||
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/colorpicker-v3": {
|
||||
"version": "2.10.2",
|
||||
"resolved": "https://registry.npmjs.org/colorpicker-v3/-/colorpicker-v3-2.10.2.tgz",
|
||||
"integrity": "sha512-ZWPq5wcugS3NcL7DwYqVSP5mE/x45FK31olGpig+Tko5jUXk0danfEYi1Aei3lgYs+Z0zAfhbhqVuDgOdUs5Mw==",
|
||||
"dependencies": {
|
||||
"@vueuse/core": "^7.5.5",
|
||||
"vue": "^3.2.25"
|
||||
}
|
||||
},
|
||||
"node_modules/colorpicker-v3/node_modules/@vueuse/core": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-7.7.1.tgz",
|
||||
"integrity": "sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==",
|
||||
"dependencies": {
|
||||
"@vueuse/shared": "7.7.1",
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.1.0",
|
||||
"vue": "^2.6.0 || ^3.2.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
},
|
||||
"vue": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/colorpicker-v3/node_modules/@vueuse/core/node_modules/@vueuse/shared": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-7.7.1.tgz",
|
||||
"integrity": "sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==",
|
||||
"dependencies": {
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/antfu"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@vue/composition-api": "^1.1.0",
|
||||
"vue": "^2.6.0 || ^3.2.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@vue/composition-api": {
|
||||
"optional": true
|
||||
},
|
||||
"vue": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
|
@ -7825,11 +7921,15 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/ansicolors": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "http://registry.jetlinks.cn/ansicolors/-/ansicolors-0.3.2.tgz",
|
||||
"integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/ansistyles": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "http://registry.jetlinks.cn/ansistyles/-/ansistyles-0.1.3.tgz",
|
||||
"integrity": "sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
|
@ -7842,6 +7942,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/archy": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.jetlinks.cn/archy/-/archy-1.0.0.tgz",
|
||||
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
|
@ -8054,6 +8156,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/cli-columns": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/cli-columns/-/cli-columns-3.1.2.tgz",
|
||||
"integrity": "sha512-iQYpDgpPPmCjn534ikQOhi+ydP6uMar+DtJ6a0In4aGL/PKqWfao75s6eF81quQQaz7isGz+goNECLARRZswdg==",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@ -8195,6 +8299,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/columnify": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "http://registry.jetlinks.cn/columnify/-/columnify-1.5.4.tgz",
|
||||
"integrity": "sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ==",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@ -8715,6 +8821,10 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/init-package-json": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "http://registry.jetlinks.cn/init-package-json/-/init-package-json-2.0.5.tgz",
|
||||
"integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==",
|
||||
"resolved": "http://registry.jetlinks.cn/init-package-json/-/init-package-json-2.0.5.tgz",
|
||||
"integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8747,6 +8857,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/is-cidr": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "http://registry.jetlinks.cn/is-cidr/-/is-cidr-4.0.2.tgz",
|
||||
"integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==",
|
||||
"inBundle": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
|
@ -8885,6 +8997,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmaccess": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmaccess/-/libnpmaccess-4.0.3.tgz",
|
||||
"integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8899,6 +9013,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmdiff": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmdiff/-/libnpmdiff-2.0.4.tgz",
|
||||
"integrity": "sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8917,6 +9033,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmexec": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmexec/-/libnpmexec-2.0.1.tgz",
|
||||
"integrity": "sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8938,6 +9056,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmfund": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmfund/-/libnpmfund-1.1.0.tgz",
|
||||
"integrity": "sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8946,6 +9066,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmhook": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmhook/-/libnpmhook-6.0.3.tgz",
|
||||
"integrity": "sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8958,6 +9080,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmorg": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmorg/-/libnpmorg-2.0.3.tgz",
|
||||
"integrity": "sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8970,6 +9094,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmpack": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmpack/-/libnpmpack-2.0.1.tgz",
|
||||
"integrity": "sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8983,6 +9109,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmpublish": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmpublish/-/libnpmpublish-4.0.2.tgz",
|
||||
"integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -8998,6 +9126,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmsearch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmsearch/-/libnpmsearch-3.1.2.tgz",
|
||||
"integrity": "sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9009,6 +9139,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmteam": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmteam/-/libnpmteam-2.0.4.tgz",
|
||||
"integrity": "sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9021,6 +9153,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/libnpmversion": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmversion/-/libnpmversion-1.2.1.tgz",
|
||||
"integrity": "sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9322,6 +9456,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/node-gyp/node_modules/npmlog": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-4.1.2.tgz",
|
||||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9380,6 +9516,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/npm-audit-report": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-audit-report/-/npm-audit-report-2.1.5.tgz",
|
||||
"integrity": "sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9468,6 +9606,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/npm-profile": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-profile/-/npm-profile-5.0.4.tgz",
|
||||
"integrity": "sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9497,11 +9637,15 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/npm-user-validate": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-user-validate/-/npm-user-validate-1.0.1.tgz",
|
||||
"integrity": "sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==",
|
||||
"inBundle": true,
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/npm/node_modules/npmlog": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-5.0.1.tgz",
|
||||
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9513,6 +9657,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "http://registry.jetlinks.cn/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
|
||||
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
|
@ -9565,6 +9711,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/opener": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "http://registry.jetlinks.cn/opener/-/opener-1.5.2.tgz",
|
||||
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
|
||||
"inBundle": true,
|
||||
"license": "(WTFPL OR MIT)",
|
||||
"bin": {
|
||||
|
@ -9723,6 +9871,8 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/qrcode-terminal": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "http://registry.jetlinks.cn/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
|
||||
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
|
||||
"inBundle": true,
|
||||
"bin": {
|
||||
"qrcode-terminal": "bin/qrcode-terminal.js"
|
||||
|
@ -10155,11 +10305,15 @@
|
|||
},
|
||||
"node_modules/npm/node_modules/text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "http://registry.jetlinks.cn/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/tiny-relative-date": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "http://registry.jetlinks.cn/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz",
|
||||
"integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
|
@ -10427,6 +10581,14 @@
|
|||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/onigasm": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz",
|
||||
"integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==",
|
||||
"dependencies": {
|
||||
"lru-cache": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/only": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
||||
|
@ -11447,10 +11609,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/rxjs": {
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz",
|
||||
"integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
|
||||
"dev": true,
|
||||
"version": "7.8.1",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
|
||||
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
|
@ -11700,6 +11861,11 @@
|
|||
"tslib": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/sortablejs": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz",
|
||||
"integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA=="
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
@ -12929,6 +13095,22 @@
|
|||
"vue": "^3.2.37"
|
||||
}
|
||||
},
|
||||
"node_modules/vuedraggable": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
|
||||
"integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
|
||||
"dependencies": {
|
||||
"sortablejs": "1.14.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vue": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/vuedraggable/node_modules/sortablejs": {
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
|
||||
"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
|
||||
},
|
||||
"node_modules/warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
|
@ -13349,9 +13531,9 @@
|
|||
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
||||
},
|
||||
"@ant-design/icons-vue": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
|
||||
"integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
|
||||
"requires": {
|
||||
"@ant-design/colors": "^6.0.0",
|
||||
"@ant-design/icons-svg": "^4.2.1"
|
||||
|
@ -14683,6 +14865,25 @@
|
|||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
||||
"integrity": "sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ=="
|
||||
},
|
||||
"@vueuse/router": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/router/-/router-9.13.0.tgz",
|
||||
"integrity": "sha512-lcL6auSUGMGZMdDzZJb02QDe909AChzMXoxqFS3gL2E8mHmIx0SrNor+33UkqvvBPi18vXpDq/R7tPd9fxWwTg==",
|
||||
"requires": {
|
||||
"@vueuse/shared": "9.13.0",
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vueuse/shared": {
|
||||
"version": "9.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
|
||||
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
|
||||
"requires": {
|
||||
"vue-demi": "*"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@vueuse/shared": {
|
||||
"version": "9.12.0",
|
||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
||||
|
@ -14975,6 +15176,17 @@
|
|||
"shallow-equal": "^1.0.0",
|
||||
"vue-types": "^3.0.0",
|
||||
"warning": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ant-design/icons-vue": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
||||
"requires": {
|
||||
"@ant-design/colors": "^6.0.0",
|
||||
"@ant-design/icons-svg": "^4.2.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"anymatch": {
|
||||
|
@ -15578,6 +15790,36 @@
|
|||
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
||||
"dev": true
|
||||
},
|
||||
"colorpicker-v3": {
|
||||
"version": "2.10.2",
|
||||
"resolved": "https://registry.npmjs.org/colorpicker-v3/-/colorpicker-v3-2.10.2.tgz",
|
||||
"integrity": "sha512-ZWPq5wcugS3NcL7DwYqVSP5mE/x45FK31olGpig+Tko5jUXk0danfEYi1Aei3lgYs+Z0zAfhbhqVuDgOdUs5Mw==",
|
||||
"requires": {
|
||||
"@vueuse/core": "^7.5.5",
|
||||
"vue": "^3.2.25"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vueuse/core": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-7.7.1.tgz",
|
||||
"integrity": "sha512-PRRgbATMpoeUmkCEBtUeJgOwtew8s+4UsEd+Pm7MhkjL2ihCNrSqxNVtM6NFE4uP2sWnkGcZpCjPuNSxowJ1Ow==",
|
||||
"requires": {
|
||||
"@vueuse/shared": "7.7.1",
|
||||
"vue-demi": "*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@vueuse/shared": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-7.7.1.tgz",
|
||||
"integrity": "sha512-rN2qd22AUl7VdBxihagWyhUNHCyVk9IpvBTTfHoLH9G7rGE552X1f+zeCfehuno0zXif13jPw+icW/wn2a0rnQ==",
|
||||
"requires": {
|
||||
"vue-demi": "*"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
|
@ -19297,10 +19539,14 @@
|
|||
},
|
||||
"ansicolors": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "http://registry.jetlinks.cn/ansicolors/-/ansicolors-0.3.2.tgz",
|
||||
"integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==",
|
||||
"bundled": true
|
||||
},
|
||||
"ansistyles": {
|
||||
"version": "0.1.3",
|
||||
"resolved": "http://registry.jetlinks.cn/ansistyles/-/ansistyles-0.1.3.tgz",
|
||||
"integrity": "sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==",
|
||||
"bundled": true
|
||||
},
|
||||
"aproba": {
|
||||
|
@ -19311,6 +19557,8 @@
|
|||
},
|
||||
"archy": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.jetlinks.cn/archy/-/archy-1.0.0.tgz",
|
||||
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
|
||||
"bundled": true
|
||||
},
|
||||
"are-we-there-yet": {
|
||||
|
@ -19470,6 +19718,8 @@
|
|||
},
|
||||
"cli-columns": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/cli-columns/-/cli-columns-3.1.2.tgz",
|
||||
"integrity": "sha512-iQYpDgpPPmCjn534ikQOhi+ydP6uMar+DtJ6a0In4aGL/PKqWfao75s6eF81quQQaz7isGz+goNECLARRZswdg==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"string-width": "^2.0.0",
|
||||
|
@ -19562,6 +19812,8 @@
|
|||
},
|
||||
"columnify": {
|
||||
"version": "1.5.4",
|
||||
"resolved": "http://registry.jetlinks.cn/columnify/-/columnify-1.5.4.tgz",
|
||||
"integrity": "sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"strip-ansi": "^3.0.0",
|
||||
|
@ -19947,6 +20199,8 @@
|
|||
},
|
||||
"init-package-json": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "http://registry.jetlinks.cn/init-package-json/-/init-package-json-2.0.5.tgz",
|
||||
"integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"npm-package-arg": "^8.1.5",
|
||||
|
@ -19970,6 +20224,8 @@
|
|||
},
|
||||
"is-cidr": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "http://registry.jetlinks.cn/is-cidr/-/is-cidr-4.0.2.tgz",
|
||||
"integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"cidr-regex": "^3.1.1"
|
||||
|
@ -20074,6 +20330,8 @@
|
|||
},
|
||||
"libnpmaccess": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmaccess/-/libnpmaccess-4.0.3.tgz",
|
||||
"integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"aproba": "^2.0.0",
|
||||
|
@ -20084,6 +20342,8 @@
|
|||
},
|
||||
"libnpmdiff": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmdiff/-/libnpmdiff-2.0.4.tgz",
|
||||
"integrity": "sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"@npmcli/disparity-colors": "^1.0.1",
|
||||
|
@ -20098,6 +20358,8 @@
|
|||
},
|
||||
"libnpmexec": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmexec/-/libnpmexec-2.0.1.tgz",
|
||||
"integrity": "sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"@npmcli/arborist": "^2.3.0",
|
||||
|
@ -20115,6 +20377,8 @@
|
|||
},
|
||||
"libnpmfund": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmfund/-/libnpmfund-1.1.0.tgz",
|
||||
"integrity": "sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"@npmcli/arborist": "^2.5.0"
|
||||
|
@ -20122,6 +20386,8 @@
|
|||
},
|
||||
"libnpmhook": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmhook/-/libnpmhook-6.0.3.tgz",
|
||||
"integrity": "sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"aproba": "^2.0.0",
|
||||
|
@ -20130,6 +20396,8 @@
|
|||
},
|
||||
"libnpmorg": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmorg/-/libnpmorg-2.0.3.tgz",
|
||||
"integrity": "sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"aproba": "^2.0.0",
|
||||
|
@ -20138,6 +20406,8 @@
|
|||
},
|
||||
"libnpmpack": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmpack/-/libnpmpack-2.0.1.tgz",
|
||||
"integrity": "sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"@npmcli/run-script": "^1.8.3",
|
||||
|
@ -20147,6 +20417,8 @@
|
|||
},
|
||||
"libnpmpublish": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmpublish/-/libnpmpublish-4.0.2.tgz",
|
||||
"integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"normalize-package-data": "^3.0.2",
|
||||
|
@ -20158,6 +20430,8 @@
|
|||
},
|
||||
"libnpmsearch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmsearch/-/libnpmsearch-3.1.2.tgz",
|
||||
"integrity": "sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"npm-registry-fetch": "^11.0.0"
|
||||
|
@ -20165,6 +20439,8 @@
|
|||
},
|
||||
"libnpmteam": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmteam/-/libnpmteam-2.0.4.tgz",
|
||||
"integrity": "sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"aproba": "^2.0.0",
|
||||
|
@ -20173,6 +20449,8 @@
|
|||
},
|
||||
"libnpmversion": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "http://registry.jetlinks.cn/libnpmversion/-/libnpmversion-1.2.1.tgz",
|
||||
"integrity": "sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"@npmcli/git": "^2.0.7",
|
||||
|
@ -20392,6 +20670,8 @@
|
|||
},
|
||||
"npmlog": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-4.1.2.tgz",
|
||||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"are-we-there-yet": "~1.1.2",
|
||||
|
@ -20436,6 +20716,8 @@
|
|||
},
|
||||
"npm-audit-report": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-audit-report/-/npm-audit-report-2.1.5.tgz",
|
||||
"integrity": "sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"chalk": "^4.0.0"
|
||||
|
@ -20502,6 +20784,8 @@
|
|||
},
|
||||
"npm-profile": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-profile/-/npm-profile-5.0.4.tgz",
|
||||
"integrity": "sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"npm-registry-fetch": "^11.0.0"
|
||||
|
@ -20523,10 +20807,14 @@
|
|||
},
|
||||
"npm-user-validate": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/npm-user-validate/-/npm-user-validate-1.0.1.tgz",
|
||||
"integrity": "sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==",
|
||||
"bundled": true
|
||||
},
|
||||
"npmlog": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-5.0.1.tgz",
|
||||
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"are-we-there-yet": "^2.0.0",
|
||||
|
@ -20537,6 +20825,8 @@
|
|||
"dependencies": {
|
||||
"are-we-there-yet": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "http://registry.jetlinks.cn/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
|
||||
"integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"delegates": "^1.0.0",
|
||||
|
@ -20574,6 +20864,8 @@
|
|||
},
|
||||
"opener": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "http://registry.jetlinks.cn/opener/-/opener-1.5.2.tgz",
|
||||
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
|
||||
"bundled": true
|
||||
},
|
||||
"p-map": {
|
||||
|
@ -20688,6 +20980,8 @@
|
|||
},
|
||||
"qrcode-terminal": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "http://registry.jetlinks.cn/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
|
||||
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
|
||||
"bundled": true
|
||||
},
|
||||
"qs": {
|
||||
|
@ -20994,10 +21288,14 @@
|
|||
},
|
||||
"text-table": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "http://registry.jetlinks.cn/text-table/-/text-table-0.2.0.tgz",
|
||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
||||
"bundled": true
|
||||
},
|
||||
"tiny-relative-date": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "http://registry.jetlinks.cn/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz",
|
||||
"integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==",
|
||||
"bundled": true
|
||||
},
|
||||
"treeverse": {
|
||||
|
@ -21250,6 +21548,14 @@
|
|||
"mimic-fn": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"onigasm": {
|
||||
"version": "2.2.5",
|
||||
"resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.5.tgz",
|
||||
"integrity": "sha512-F+th54mPc0l1lp1ZcFMyL/jTs2Tlq4SqIHKIXGZOR/VkHkF9A7Fr5rRr5+ZG/lWeRsyrClLYRq7s/yFQ/XhWCA==",
|
||||
"requires": {
|
||||
"lru-cache": "^5.1.1"
|
||||
}
|
||||
},
|
||||
"only": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
||||
|
@ -22037,10 +22343,9 @@
|
|||
}
|
||||
},
|
||||
"rxjs": {
|
||||
"version": "7.8.0",
|
||||
"resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz",
|
||||
"integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
|
||||
"dev": true,
|
||||
"version": "7.8.1",
|
||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
|
||||
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
|
||||
"requires": {
|
||||
"tslib": "^2.1.0"
|
||||
}
|
||||
|
@ -22254,6 +22559,11 @@
|
|||
"tslib": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"sortablejs": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz",
|
||||
"integrity": "sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA=="
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
|
@ -23156,6 +23466,21 @@
|
|||
"vue": "^3.2.37"
|
||||
}
|
||||
},
|
||||
"vuedraggable": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz",
|
||||
"integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==",
|
||||
"requires": {
|
||||
"sortablejs": "1.14.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"sortablejs": {
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz",
|
||||
"integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"event-source-polyfill": "^1.0.31",
|
||||
"global": "^4.4.0",
|
||||
"jetlinks-store": "^0.0.3",
|
||||
"jetlinks-ui-components": "^1.0.34-12",
|
||||
"jetlinks-ui-components": "^1.0.38",
|
||||
"js-cookie": "^3.0.1",
|
||||
"jsencrypt": "^3.3.2",
|
||||
"less": "^4.1.3",
|
||||
|
|
|
@ -115,7 +115,7 @@ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boo
|
|||
* @returns
|
||||
*/
|
||||
export const deviceExport = (productId: string, type: string, params?: any) => server.get(`/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`, params, {responseType: 'blob'})
|
||||
|
||||
export const deviceExportPath = (productId: string, type: string) => (`${BASE_API_PATH}/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`)
|
||||
/**
|
||||
* 验证设备ID是否重复
|
||||
* @param id 设备id
|
||||
|
@ -607,7 +607,7 @@ export const metadataMapById = (type: 'device' | 'product', productId: string, d
|
|||
|
||||
export const getMetadataMapById = (type: 'device' | 'product', productId: string) => server.get(`/device/metadata/mapping/${type}/${productId}`)
|
||||
|
||||
export const getInkingDevices = (data: string[],pluginId:any) => server.post(`/plugin/mapping/device/${pluginId}/_all`, data)
|
||||
export const getInkingDevices = (data: string[],accessId:any) => server.post(`/plugin/mapping/device/${accessId}/_all`, data)
|
||||
|
||||
export const getProtocolMetadata = (id: string, transport: string) => server.get(`/protocol/${id}/${transport}/metadata`)
|
||||
|
||||
|
|
|
@ -0,0 +1,53 @@
|
|||
<template>
|
||||
<Ellipsis placement="topLeft" style="max-width:80px;">
|
||||
<span class="dot" :style="{ backgroundColor: _color}"></span>
|
||||
<span>{{ text }}</span>
|
||||
</Ellipsis>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
// import { StatusColorEnum } from '@/utils/consts.ts';
|
||||
import { getHexColor } from './color'
|
||||
const props = defineProps({
|
||||
text: {
|
||||
type: String,
|
||||
},
|
||||
status: {
|
||||
type: [String, Number],
|
||||
default: 'default',
|
||||
// validator: (value) => {
|
||||
// // 这个值必须匹配下列字符串中的一个
|
||||
// return Object.keys(StatusColorEnum).includes(value);
|
||||
// },
|
||||
},
|
||||
/**
|
||||
* 自定义status值颜色
|
||||
* @example {
|
||||
* 1: 'success',
|
||||
* 0: 'error'
|
||||
* }
|
||||
*/
|
||||
statusNames: {
|
||||
type: Object,
|
||||
default: () => ({
|
||||
'success': 'success',
|
||||
'warning': 'warning',
|
||||
'error': 'error',
|
||||
'default': 'default',
|
||||
})
|
||||
},
|
||||
});
|
||||
|
||||
const _color = computed(() => {
|
||||
return getHexColor(props.statusNames[props.status], 1)
|
||||
})
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.dot{
|
||||
display: inline-block;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border-radius: 50%;
|
||||
margin: 0 10px
|
||||
}
|
||||
</style>
|
|
@ -52,10 +52,17 @@
|
|||
>
|
||||
<div class="card-state-content">
|
||||
<BadgeStatus
|
||||
v-if="!customBadge"
|
||||
:status="status"
|
||||
:text="statusText"
|
||||
:statusNames="statusNames"
|
||||
></BadgeStatus>
|
||||
<CustomBadgeStatus
|
||||
v-else
|
||||
:status="status"
|
||||
:text="statusText"
|
||||
:statusNames="statusNames">
|
||||
</CustomBadgeStatus>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -89,6 +96,7 @@
|
|||
|
||||
<script setup lang="ts" name='CardBox'>
|
||||
import BadgeStatus from '@/components/BadgeStatus/index.vue';
|
||||
import CustomBadgeStatus from '@/components/BadgeStatus/CustomBadgeStatus.vue'
|
||||
import color, { getHexColor } from '../BadgeStatus/color';
|
||||
import type { ActionsType } from '@/components/Table';
|
||||
import { PropType } from 'vue';
|
||||
|
@ -143,6 +151,10 @@ const props = defineProps({
|
|||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
customBadge:{
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -55,7 +55,8 @@ export const defaultBranches = [
|
|||
},
|
||||
then: [],
|
||||
executeAnyway: true,
|
||||
branchId: Math.floor(Math.random() * 100000000)
|
||||
branchId: Math.floor(Math.random() * 100000000),
|
||||
branchName:'条件1'
|
||||
},
|
||||
];
|
||||
|
||||
|
|
|
@ -154,7 +154,6 @@ export const TokenLose = () => {
|
|||
* @returns {Promise<never>}
|
||||
*/
|
||||
const errorHandler = (error: any) => {
|
||||
|
||||
if (error.response) {
|
||||
const data = error.response.data
|
||||
const status = error.response.status
|
||||
|
@ -182,7 +181,13 @@ const errorHandler = (error: any) => {
|
|||
} else if (status === 403) {
|
||||
showNotification('Forbidden', (data.message + '').substr(0, 90), '403')
|
||||
} else if (status === 500) {
|
||||
//处理预置点位接口无预置点位导致超时--特殊处理
|
||||
const queryPreset = new RegExp('/function/QueryPreset')
|
||||
if(queryPreset.test(error.config.url)){
|
||||
showNotification('Server Side Error', ('该通道无预置点位' + '').substr(0, 90), '500')
|
||||
}else{
|
||||
showNotification('Server Side Error', (data.message + '').substr(0, 90), '500')
|
||||
}
|
||||
} else if (status === 400) {
|
||||
showNotification('Request Error', (data.message + '').substr(0, 90), '400')
|
||||
} else if (status === 401) {
|
||||
|
|
|
@ -8,10 +8,7 @@
|
|||
:maxlength="64"
|
||||
/>
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
label="对象ID"
|
||||
:name="['configuration', 'ObjectId']"
|
||||
>
|
||||
<j-form-item label="对象ID" :name="['configuration', 'ObjectId']">
|
||||
<j-card>
|
||||
<j-form-item label="对象类型">
|
||||
<j-input
|
||||
|
@ -40,10 +37,13 @@
|
|||
></j-input>
|
||||
</j-form-item>
|
||||
<j-form-item label="值类型" :name="['configuration', 'valueType']">
|
||||
<j-select
|
||||
v-model:value="formData.configuration.valueType"
|
||||
<j-select v-model:value="formData.configuration.valueType">
|
||||
<j-select-option
|
||||
v-for="item in bacnetValueType"
|
||||
:key="item"
|
||||
:value="item"
|
||||
>{{ item }}</j-select-option
|
||||
>
|
||||
<j-select-option v-for="item in bacnetValueType" :key="item" :value="item">{{ item }}</j-select-option>
|
||||
</j-select>
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
|
@ -141,7 +141,11 @@
|
|||
</j-modal>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { savePoint, updatePoint, getBacnetValueType } from '@/api/data-collect/collector';
|
||||
import {
|
||||
savePoint,
|
||||
updatePoint,
|
||||
getBacnetValueType,
|
||||
} from '@/api/data-collect/collector';
|
||||
import { randomString } from '@/utils/utils';
|
||||
import DeathArea from './DeathArea.vue';
|
||||
const props = defineProps({
|
||||
|
|
|
@ -1,11 +1,25 @@
|
|||
<template>
|
||||
<SaveChild v-if="childVisible" @close-child-save="closeChildSave" :childData="_current" />
|
||||
<SaveChild
|
||||
v-if="childVisible"
|
||||
@close-child-save="closeChildSave"
|
||||
:childData="_current"
|
||||
/>
|
||||
<div v-else>
|
||||
<pro-search :columns="columns" target="child-device" @search="handleSearch" class="device-child-device-search" />
|
||||
<pro-search
|
||||
:columns="columns"
|
||||
target="child-device"
|
||||
@search="handleSearch"
|
||||
class="device-child-device-search"
|
||||
/>
|
||||
<!-- <j-divider /> -->
|
||||
<JProTable ref="childDeviceRef" :columns="columns" :request="query" :bodyStyle="{
|
||||
padding: 0
|
||||
}" :defaultParams="{
|
||||
<JProTable
|
||||
ref="childDeviceRef"
|
||||
:columns="columns"
|
||||
:request="query"
|
||||
:bodyStyle="{
|
||||
padding: 0,
|
||||
}"
|
||||
:defaultParams="{
|
||||
terms: [
|
||||
{
|
||||
column: 'parentId',
|
||||
|
@ -13,23 +27,44 @@
|
|||
termType: 'eq',
|
||||
},
|
||||
],
|
||||
}" :rowSelection="{
|
||||
}"
|
||||
:rowSelection="{
|
||||
selectedRowKeys: _selectedRowKeys,
|
||||
onChange: onSelectChange,
|
||||
}" :params="params" :model="'TABLE'">
|
||||
}"
|
||||
:params="params"
|
||||
:model="'TABLE'"
|
||||
>
|
||||
<template #rightExtraRender>
|
||||
<j-space>
|
||||
<PermissionButton type="primary" v-if="detail?.accessProvider === 'official-edge-gateway'
|
||||
" hasPermission="device/Instance:update" @click="
|
||||
<PermissionButton
|
||||
type="primary"
|
||||
v-if="
|
||||
detail?.accessProvider === 'official-edge-gateway'
|
||||
"
|
||||
hasPermission="device/Instance:update"
|
||||
@click="
|
||||
_current = {};
|
||||
childVisible = true;
|
||||
">新增并绑定</PermissionButton>
|
||||
<PermissionButton type="primary" @click="visible = true" hasPermission="device/Instance:update">
|
||||
绑定</PermissionButton>
|
||||
<PermissionButton type="primary" hasPermission="device/Instance:update" :popConfirm="{
|
||||
"
|
||||
>新增并绑定</PermissionButton
|
||||
>
|
||||
<PermissionButton
|
||||
type="primary"
|
||||
@click="visible = true"
|
||||
hasPermission="device/Instance:update"
|
||||
>
|
||||
绑定</PermissionButton
|
||||
>
|
||||
<PermissionButton
|
||||
type="primary"
|
||||
hasPermission="device/Instance:update"
|
||||
:popConfirm="{
|
||||
title: '确定解绑吗?',
|
||||
onConfirm: handleUnBind,
|
||||
}">批量解除</PermissionButton>
|
||||
}"
|
||||
>批量解除</PermissionButton
|
||||
>
|
||||
</j-space>
|
||||
</template>
|
||||
<template #registryTime="slotProps">
|
||||
|
@ -42,16 +77,33 @@
|
|||
}}
|
||||
</template>
|
||||
<template #state="slotProps">
|
||||
<j-badge :text="slotProps.state.text" :status="statusMap.get(slotProps.state.value)" />
|
||||
<j-badge
|
||||
:text="slotProps.state.text"
|
||||
:status="statusMap.get(slotProps.state.value)"
|
||||
/>
|
||||
</template>
|
||||
<template #action="slotProps">
|
||||
<j-space :size="16">
|
||||
<template v-for="i in getActions(slotProps, 'table')" :key="i.key">
|
||||
<PermissionButton v-if="i.key !== 'update' || detail.accessProvider === 'official-edge-gateway'"
|
||||
:disabled="i.disabled" :popConfirm="i.popConfirm" :tooltip="{
|
||||
<template
|
||||
v-for="i in getActions(slotProps, 'table')"
|
||||
:key="i.key"
|
||||
>
|
||||
<PermissionButton
|
||||
v-if="
|
||||
i.key !== 'update' ||
|
||||
detail.accessProvider ===
|
||||
'official-edge-gateway'
|
||||
"
|
||||
:disabled="i.disabled"
|
||||
:popConfirm="i.popConfirm"
|
||||
:tooltip="{
|
||||
...i.tooltip,
|
||||
}" @click="i.onClick" type="link" style="padding: 0px"
|
||||
:hasPermission="'device/Instance:' + i.key">
|
||||
}"
|
||||
@click="i.onClick"
|
||||
type="link"
|
||||
style="padding: 0px"
|
||||
:hasPermission="'device/Instance:' + i.key"
|
||||
>
|
||||
<template #icon>
|
||||
<AIcon :type="i.icon" />
|
||||
</template>
|
||||
|
@ -60,20 +112,31 @@
|
|||
</j-space>
|
||||
</template>
|
||||
</JProTable>
|
||||
<BindChildDevice v-if="visible" :parentIds="parentIds" @change="closeBindDevice" />
|
||||
<BindChildDevice
|
||||
v-if="visible"
|
||||
:parentIds="parentIds"
|
||||
@change="closeBindDevice"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import moment from 'moment';
|
||||
import type { ActionsType } from '@/components/Table';
|
||||
import { query, unbindDevice, unbindBatchDevice, queryByParent, deleteDeviceMapping } from '@/api/device/instance';
|
||||
import {
|
||||
query,
|
||||
unbindDevice,
|
||||
unbindBatchDevice,
|
||||
queryByParent,
|
||||
deleteDeviceMapping,
|
||||
} from '@/api/device/instance';
|
||||
import { useInstanceStore } from '@/store/instance';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import BindChildDevice from './BindChildDevice/index.vue';
|
||||
import { usePermissionStore } from '@/store/permission';
|
||||
import SaveChild from './SaveChild/index.vue';
|
||||
import { onlyMessage } from '@/utils/comm';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
const instanceStore = useInstanceStore();
|
||||
const { detail } = storeToRefs(instanceStore);
|
||||
|
@ -93,7 +156,7 @@ const params = ref<Record<string, any>>({});
|
|||
const _selectedRowKeys = ref<string[]>([]);
|
||||
const visible = ref<boolean>(false);
|
||||
const _current = ref({});
|
||||
const parentIds = ref<any[]>([instanceStore.detail.id])
|
||||
const parentIds = ref<any[]>([instanceStore.detail.id]);
|
||||
|
||||
const columns = [
|
||||
{
|
||||
|
@ -195,13 +258,21 @@ const getActions = (data: Partial<Record<string, any>>): ActionsType[] => {
|
|||
data.id,
|
||||
{},
|
||||
);
|
||||
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
||||
const res = await deleteDeviceMapping(
|
||||
detail.value.id,
|
||||
{ ids: [data.id] }
|
||||
)
|
||||
if (
|
||||
instanceStore.current.accessProvider ===
|
||||
'official-edge-gateway'
|
||||
) {
|
||||
const res = await deleteDeviceMapping(detail.value.id, {
|
||||
ids: [data.id],
|
||||
});
|
||||
}
|
||||
if (resp.status === 200) {
|
||||
_selectedRowKeys.value.find((i:any,index:number)=>{
|
||||
if(i === data.id){
|
||||
_selectedRowKeys.value.splice(index,1)
|
||||
}
|
||||
return i === data.id
|
||||
})
|
||||
childDeviceRef.value?.reload();
|
||||
onlyMessage('操作成功!');
|
||||
}
|
||||
|
@ -242,10 +313,9 @@ const handleUnBind = async () => {
|
|||
_selectedRowKeys.value,
|
||||
);
|
||||
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
||||
const res = await deleteDeviceMapping(
|
||||
detail.value.id,
|
||||
{ ids: [_selectedRowKeys.value] }
|
||||
)
|
||||
const res = await deleteDeviceMapping(detail.value.id, {
|
||||
ids: [_selectedRowKeys.value],
|
||||
});
|
||||
}
|
||||
if (resp.status === 200) {
|
||||
onlyMessage('操作成功!');
|
||||
|
@ -275,8 +345,8 @@ const closeChildSave = () => {
|
|||
childVisible.value = false;
|
||||
};
|
||||
onMounted(() => {
|
||||
console.log(detail.value.accessProvider)
|
||||
})
|
||||
console.log(detail.value.accessProvider);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
</div>
|
||||
</j-col>
|
||||
<j-col :span="9">
|
||||
<h6>执行结果:</h6>
|
||||
<h4>执行结果:</h4>
|
||||
<span class="execute-result">
|
||||
{{ executeResult }}
|
||||
</span>
|
||||
|
|
|
@ -91,7 +91,7 @@
|
|||
</div>
|
||||
</j-col>
|
||||
<j-col :span="9">
|
||||
<h6>执行结果:</h6>
|
||||
<h4>执行结果:</h4>
|
||||
<span
|
||||
:ref="`result${func.id}Ref`"
|
||||
class="execute-result"
|
||||
|
|
|
@ -151,7 +151,7 @@ const queryInkling = () => {
|
|||
queryPluginAccessDetail(instanceStore.current?.accessId).then(async res => {
|
||||
if (res.success) {
|
||||
channelId.value = res.result.channelId
|
||||
const pluginRes = await getPluginData('device',channelId.value, instanceStore.current?.id)
|
||||
const pluginRes = await getPluginData('device',instanceStore.current?.accessId, instanceStore.current?.id)
|
||||
if (pluginRes.success) {
|
||||
inklingDeviceId.value = pluginRes.result?.externalId
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<template>
|
||||
<pro-search
|
||||
class="device-running-search"
|
||||
|
||||
:columns="columns"
|
||||
target="device-instance-running-events"
|
||||
@search="handleSearch"
|
||||
|
@ -14,6 +13,11 @@
|
|||
:params="params"
|
||||
:bodyStyle="{ padding: '0 0 0 24px' }"
|
||||
>
|
||||
<template v-for="i in objectKey" #[i.key]='slotProps'>
|
||||
<Ellipsis >
|
||||
<span @click="detail(slotProps[i.dataIndex])">{{ JSON.stringify(slotProps[i.dataIndex])}}</span>
|
||||
</Ellipsis>
|
||||
</template>
|
||||
<template #timestamp="slotProps">
|
||||
{{ dayjs(slotProps.timestamp).format('YYYY-MM-DD HH:mm:ss') }}
|
||||
</template>
|
||||
|
@ -23,8 +27,16 @@
|
|||
</j-button>
|
||||
</template>
|
||||
</JProTable>
|
||||
<j-modal :width="600" v-model:visible="visible" title="详情" class="device-running-event-modal">
|
||||
<JsonViewer :value="info" style="max-height: calc(100vh - 400px);overflow: auto;"/>
|
||||
<j-modal
|
||||
:width="600"
|
||||
v-model:visible="visible"
|
||||
title="详情"
|
||||
class="device-running-event-modal"
|
||||
>
|
||||
<JsonViewer
|
||||
:value="info"
|
||||
style="max-height: calc(100vh - 400px); overflow: auto"
|
||||
/>
|
||||
<template #footer>
|
||||
<j-button type="primary" @click="visible = false">关闭</j-button>
|
||||
</template>
|
||||
|
@ -36,6 +48,7 @@ import dayjs from 'dayjs';
|
|||
import { getEventList } from '@/api/device/instance';
|
||||
import { useInstanceStore } from '@/store/instance';
|
||||
import JsonViewer from 'vue-json-viewer';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
const events = defineProps({
|
||||
data: {
|
||||
|
@ -60,31 +73,51 @@ const defaultColumns = [
|
|||
dataIndex: 'action',
|
||||
key: 'action',
|
||||
scopedSlots: true,
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
const columns = ref<Array<Record<string, any>>>([...defaultColumns]);
|
||||
const params = ref<Record<string, any>>({});
|
||||
const visible = ref<boolean>(false);
|
||||
const info = ref<Record<string, any>>({});
|
||||
const objectKey = ref<Array>([]);
|
||||
|
||||
const _getEventList = (_params: any) =>
|
||||
getEventList(instanceStore.current.id || '', events.data.id || '', _params);
|
||||
|
||||
watchEffect(() => {
|
||||
columns.value = [...defaultColumns]
|
||||
columns.value = [...defaultColumns];
|
||||
if (events.data?.valueType?.type === 'object') {
|
||||
(events.data.valueType?.properties || []).reverse().map((i: any) => {
|
||||
const eventProperties = cloneDeep(events.data.valueType?.properties || [])
|
||||
eventProperties.reverse().map((i: any) => {
|
||||
if (i.valueType?.type === 'object') {
|
||||
objectKey.value.push({
|
||||
key:i.id,
|
||||
dataIndex: `${i.id}_format`
|
||||
});
|
||||
columns.value.splice(0, 0, {
|
||||
key: i.id,
|
||||
title: i.name,
|
||||
dataIndex: `${i.id}_format`,
|
||||
search: {
|
||||
type: i?.valueType?.type || 'string',
|
||||
rename: i.id
|
||||
rename: i.id,
|
||||
},
|
||||
scopedSlots: true,
|
||||
});
|
||||
} else {
|
||||
columns.value.splice(0, 0, {
|
||||
key: i.id,
|
||||
title: i.name,
|
||||
dataIndex: `${i.id}_format`,
|
||||
search: {
|
||||
type: i?.valueType?.type || 'string',
|
||||
rename: i.id,
|
||||
},
|
||||
ellipsis: true,
|
||||
scopedSlots: true,
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
columns.value.splice(0, 0, {
|
||||
|
@ -99,8 +132,8 @@ const handleSearch = (_params: any) => {
|
|||
};
|
||||
|
||||
const detail = (_info: any) => {
|
||||
info.value = _info
|
||||
visible.value = true
|
||||
info.value = _info;
|
||||
visible.value = true;
|
||||
// Modal.info({
|
||||
// title: () => '详情',
|
||||
// width: 850,
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
import { queryNoPagingPost } from '@/api/device/product';
|
||||
import { downloadFileByUrl } from '@/utils/utils';
|
||||
import { paramsEncodeQuery } from '@/utils/encodeQuery';
|
||||
import { deviceExport } from '@/api/device/instance';
|
||||
import { deviceExport , deviceExportPath} from '@/api/device/instance';
|
||||
import { getToken } from '@/utils/comm';
|
||||
|
||||
const emit = defineEmits(['close']);
|
||||
const props = defineProps({
|
||||
|
@ -88,23 +89,26 @@ const productName = computed(() => {
|
|||
})
|
||||
|
||||
const handleOk = async () => {
|
||||
console.log(props.data)
|
||||
|
||||
const params = paramsEncodeQuery(props.data);
|
||||
// downloadFile(
|
||||
// deviceExport(modelRef.product || '', modelRef.fileType),
|
||||
// params,
|
||||
// );
|
||||
const res: any = await deviceExport(
|
||||
modelRef.product || '',
|
||||
modelRef.fileType,
|
||||
params
|
||||
);
|
||||
if (res) {
|
||||
const blob = new Blob([res], { type: modelRef.fileType });
|
||||
const url = URL.createObjectURL(blob);
|
||||
downloadFileByUrl(url, `${productName.value ? (productName.value + '下设备') : '设备实例'}`, modelRef.fileType);
|
||||
emit('close');
|
||||
}
|
||||
// const res: any = await deviceExport(
|
||||
// modelRef.product || '',
|
||||
// modelRef.fileType,
|
||||
// params
|
||||
// );
|
||||
console.log(props.data,params)
|
||||
window.open(`${deviceExportPath( modelRef.product || '',modelRef.fileType)}?X-Access-Token=${getToken()
|
||||
}`)
|
||||
// if (res) {
|
||||
// const blob = new Blob([res], { type: modelRef.fileType });
|
||||
// const url = URL.createObjectURL(blob);
|
||||
// downloadFileByUrl(url, `${productName.value ? (productName.value + '下设备') : '设备实例'}`, modelRef.fileType);
|
||||
// emit('close');
|
||||
// }
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
|
|
|
@ -72,6 +72,7 @@
|
|||
</template>
|
||||
|
||||
<script setup lang='ts' name='DeviceImportFile'>
|
||||
import {inject,Ref} from 'vue'
|
||||
import { FILE_UPLOAD } from '@/api/comm';
|
||||
import { TOKEN_KEY } from '@/utils/variable';
|
||||
import { LocalStore, onlyMessage } from '@/utils/comm';
|
||||
|
@ -96,10 +97,10 @@ const modelRef = reactive({
|
|||
});
|
||||
|
||||
const importLoading = ref<boolean>(false);
|
||||
const flag = ref<boolean>(false);
|
||||
const flag = inject("flag") as Ref<boolean>;
|
||||
const count = ref<number>(0);
|
||||
const errCount = ref<number>(0);
|
||||
|
||||
const errCount = ref<number>(0);
|
||||
const errMessage = ref<string>('');
|
||||
const disabled = ref(false);
|
||||
|
||||
|
@ -140,6 +141,7 @@ const submitData = async (fileUrl: string) => {
|
|||
errCount.value = 0;
|
||||
const autoDeploy = !!modelRef?.file?.autoDeploy || false;
|
||||
importLoading.value = true;
|
||||
flag.value = true;
|
||||
let dt = 0;
|
||||
let et = 0;
|
||||
const source = new EventSourcePolyfill(
|
||||
|
@ -159,6 +161,7 @@ const submitData = async (fileUrl: string) => {
|
|||
errCount.value = et;
|
||||
}
|
||||
}
|
||||
flag.value=false;
|
||||
disabled.value = false;
|
||||
};
|
||||
source.onerror = (e: { status: number }) => {
|
||||
|
@ -182,6 +185,7 @@ const uploadChange = async (info: Record<string, any>) => {
|
|||
disabled.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped lang='less'>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<j-button v-if='steps === 0' @click='cancel' >取消</j-button>
|
||||
<j-button v-if='steps !== 0' @click='prev' >上一步</j-button>
|
||||
<j-button v-if='steps !== 2' @click='next' type='primary'>下一步</j-button>
|
||||
<j-button v-if='steps === 2' @click='save' type='primary'>确认</j-button>
|
||||
<j-button v-if='steps === 2' @click='save' type='primary' :disabled="flag">确认</j-button>
|
||||
</template>
|
||||
</j-modal>
|
||||
<j-modal
|
||||
|
@ -55,27 +55,25 @@
|
|||
</template>
|
||||
|
||||
<script lang='ts' setup name='DeviceImport'>
|
||||
import {provide} from 'vue'
|
||||
import Product from './product.vue'
|
||||
import { getImage, onlyMessage } from '@/utils/comm'
|
||||
import File from './file.vue'
|
||||
import Plugin from './plugin.vue'
|
||||
import { importDeviceByPlugin } from '@/api/device/instance'
|
||||
|
||||
const emit = defineEmits(['cancel', 'save']);
|
||||
|
||||
const steps = ref(0) // 步骤
|
||||
|
||||
const importData = reactive<{productId?: string, type?: string}>({
|
||||
productId: undefined,
|
||||
type: undefined,
|
||||
})
|
||||
|
||||
const productDetail = ref()
|
||||
const deviceList = ref<any[]>([])
|
||||
const visible = ref(true)
|
||||
const importVisible = ref(false)
|
||||
const count = ref(0)
|
||||
|
||||
const flag = ref<boolean>(false)
|
||||
provide("flag",flag)
|
||||
const typeOptions = computed(() => {
|
||||
const array = [
|
||||
{
|
||||
|
|
|
@ -720,6 +720,7 @@ const getActions = (
|
|||
const resp = await _delete(data.id);
|
||||
if (resp.status === 200) {
|
||||
onlyMessage('操作成功!');
|
||||
_selectedRowKeys.value=[];
|
||||
instanceRef.value?.reload();
|
||||
} else {
|
||||
onlyMessage('操作失败!', 'error');
|
||||
|
|
|
@ -327,7 +327,7 @@ const handleClick = (data: any) => {
|
|||
const add = () => {
|
||||
const url = menuStore.hasMenu('link/AccessConfig/Detail');
|
||||
if (url) {
|
||||
const tab: any = window.open(`${origin}/#${url}?view=false`);
|
||||
const tab: any = window.open(`${origin}/#${url}?view=false&save=true`);
|
||||
tab.onTabSaveSuccess = (value: any) => {
|
||||
if (value.status === 200) {
|
||||
tableRef.value.reload();
|
||||
|
|
|
@ -173,7 +173,7 @@ const queryInkingDevices = (data: string[]) => {
|
|||
return;
|
||||
}
|
||||
|
||||
const res = await getInkingDevices(data,props.pluginId);
|
||||
const res = await getInkingDevices(data,props.accessId);
|
||||
if (res) {
|
||||
disabledKeys.value = res.result?.map((item) => item.externalId);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ import { saveProductMetadata } from "@/api/device/product";
|
|||
import { saveMetadata } from "@/api/device/instance";
|
||||
import type { DeviceInstance } from "../../Instance/typings";
|
||||
import type { DeviceMetadata, MetadataItem, MetadataType, ProductItem } from "../../Product/typings";
|
||||
import { differenceBy } from "lodash-es";
|
||||
import { differenceBy , cloneDeep } from "lodash-es";
|
||||
|
||||
const filterProductMetadata = (data: any[], productMetaData: any[]) => {
|
||||
const ids = productMetaData.map((item: any) => item.id)
|
||||
|
@ -69,7 +69,28 @@ export const asyncUpdateMetadata = (
|
|||
case 'product':
|
||||
return saveProductMetadata(data);
|
||||
case 'device':
|
||||
return saveMetadata(data.id, JSON.parse(data.metadata || '{}'));
|
||||
const metadata = JSON.parse(data.metadata || '{}')
|
||||
const dealMetadata = cloneDeep(metadata)
|
||||
const productMetaData = JSON.parse(data?.productMetadata || '{}')
|
||||
// 筛选出产品的物模型 剔除不传递给接口保存
|
||||
const productMetaDataMap = new Map()
|
||||
Object.keys(productMetaData).forEach((key:any)=>{
|
||||
if(Array.isArray(productMetaData[key])){
|
||||
const ids = productMetaData[key].map((item:any)=>{
|
||||
return item.id
|
||||
})
|
||||
productMetaDataMap.set(key,ids)
|
||||
}
|
||||
})
|
||||
Object.keys(metadata).forEach((key:any)=>{
|
||||
if(Array.isArray(metadata[key])){
|
||||
dealMetadata[key] = metadata[key].filter((item:any,index:number)=>{
|
||||
//判断产品物模型是否有该id
|
||||
return !(productMetaDataMap.get(key) && productMetaDataMap.get(key).includes(item.id))
|
||||
})
|
||||
}
|
||||
})
|
||||
return saveMetadata(data.id, dealMetadata);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -300,6 +300,7 @@ const columns = [
|
|||
});
|
||||
}),
|
||||
},
|
||||
ellipsis:true
|
||||
},
|
||||
{
|
||||
title: '注册时间',
|
||||
|
|
|
@ -10,9 +10,7 @@
|
|||
:maxCount="1"
|
||||
:showUploadList="false"
|
||||
@change="uploadChange"
|
||||
:accept="
|
||||
props?.file ? `.${props?.file}` : '.xlsx'
|
||||
"
|
||||
:accept="props?.file ? `.${props?.file}` : '.xlsx'"
|
||||
:before-upload="beforeUpload"
|
||||
>
|
||||
<j-button>
|
||||
|
@ -28,20 +26,35 @@
|
|||
</j-space>
|
||||
</div>
|
||||
</j-space>
|
||||
<div style="margin-top: 20px" v-if="importLoading">
|
||||
<!-- <div style="margin-top: 20px" v-if="importLoading">
|
||||
<j-badge v-if="flag" status="processing" text="进行中" />
|
||||
<j-badge v-else status="success" text="已完成" />
|
||||
<span>总数量:{{ count }}</span>
|
||||
<p style="color: red">{{ errMessage }}</p>
|
||||
</div> -->
|
||||
<div class="importing-status" v-if="importStatus == 'importing'">
|
||||
<AIcon type="LoadingOutlined" />
|
||||
正在导入
|
||||
</div>
|
||||
<div class="column" v-if="importStatus != 'wait'">
|
||||
<p>
|
||||
<AIcon style="color: #00a4ff" type="CheckOutlined" />导入成功 总数量
|
||||
{{ successNumber }}
|
||||
</p>
|
||||
<span v-if="failNumber">
|
||||
<AIcon style="color: #e50012" type="CloseOutlined" />导入失败 总数量
|
||||
{{ failNumber }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { FILE_UPLOAD } from '@/api/comm';
|
||||
import { TOKEN_KEY } from '@/utils/variable';
|
||||
import { LocalStore, onlyMessage } from '@/utils/comm';
|
||||
import { downloadFileByUrl } from '@/utils/utils';
|
||||
import { exportCard, _import } from '@/api/iot-card/cardManagement';
|
||||
import { TOKEN_KEY, BASE_API_PATH } from '@/utils/variable';
|
||||
import { getToken } from '@/utils/comm';
|
||||
|
||||
type Emits = {
|
||||
(e: 'update:modelValue', data: string[]): void;
|
||||
|
@ -63,11 +76,16 @@ const props = defineProps({
|
|||
default: 'xlsx',
|
||||
},
|
||||
});
|
||||
|
||||
type ImportStatus = 'wait' | 'importing' | 'done';
|
||||
const importStatus = ref<ImportStatus>('wait'); //导入进度
|
||||
const importLoading = ref<boolean>(false);
|
||||
const flag = ref<boolean>(false);
|
||||
const count = ref<number>(0);
|
||||
const errMessage = ref<string>('');
|
||||
const detailFile = ref('');
|
||||
const successNumber = ref<number>(0);
|
||||
const failNumber = ref<number>(0);
|
||||
const errorMessage = ref();
|
||||
|
||||
const downFile = async (type: string) => {
|
||||
const res: any = await exportCard(type);
|
||||
|
@ -96,20 +114,60 @@ const beforeUpload = (_file: any) => {
|
|||
const uploadChange = async (info: Record<string, any>) => {
|
||||
importLoading.value = true;
|
||||
if (info.file.status === 'done') {
|
||||
// const resp: any = info.file.response || { result: '' };
|
||||
// flag.value = true;
|
||||
// _import(props.product, { fileUrl: resp.result })
|
||||
// .then((response: any) => {
|
||||
// count.value = response.result?.total || 0
|
||||
// onlyMessage('导入成功');
|
||||
// errMessage.value = '';
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// errMessage.value = err?.response?.data?.message || '导入失败'
|
||||
// })
|
||||
// .finally(() => {
|
||||
// flag.value = false;
|
||||
// });
|
||||
const resp: any = info.file.response || { result: '' };
|
||||
flag.value = true;
|
||||
_import(props.product, { fileUrl: resp.result })
|
||||
.then((response: any) => {
|
||||
count.value = response.result?.total || 0
|
||||
onlyMessage('导入成功');
|
||||
errMessage.value = '';
|
||||
})
|
||||
.catch((err) => {
|
||||
errMessage.value = err?.response?.data?.message || '导入失败'
|
||||
})
|
||||
.finally(() => {
|
||||
flag.value = false;
|
||||
});
|
||||
handleImport(resp);
|
||||
}
|
||||
};
|
||||
|
||||
const handleImport = async (file: any) => {
|
||||
let message: any = [];
|
||||
importStatus.value = 'importing';
|
||||
let event: EventSource;
|
||||
event = new EventSource(
|
||||
`${BASE_API_PATH}/network/card/${
|
||||
props.product
|
||||
}/_import?:X_Access_Token=${getToken()}&fileUrl=${file.result}`,
|
||||
{ withCredentials: true },
|
||||
);
|
||||
event.onopen = (e) => {
|
||||
// pushMessage.value = []
|
||||
console.log('open');
|
||||
};
|
||||
event.onmessage = (e) => {
|
||||
const result = JSON.parse(e.data);
|
||||
if (result.success) {
|
||||
successNumber.value++;
|
||||
} else {
|
||||
if (result.rowNumber !== -1) {
|
||||
failNumber.value++;
|
||||
message.push({
|
||||
rowNumber: `第${result.rowNumber}行`,
|
||||
message: result.message,
|
||||
name: result.name,
|
||||
});
|
||||
errorMessage.value = JSON.stringify(message);
|
||||
} else {
|
||||
detailFile.value = result.detailFile;
|
||||
}
|
||||
}
|
||||
};
|
||||
event.onerror = (err) => {
|
||||
importStatus.value = 'done';
|
||||
event.close();
|
||||
};
|
||||
};
|
||||
</script>
|
|
@ -142,8 +142,8 @@
|
|||
:actions="getActions(slotProps, 'card')"
|
||||
v-bind="slotProps"
|
||||
:active="_selectedRowKeys.includes(slotProps.id)"
|
||||
:status="slotProps.cardStateType.value"
|
||||
:statusText="slotProps.cardStateType.text"
|
||||
:status="slotProps.cardStateType?.value"
|
||||
:statusText="slotProps.cardStateType?.text"
|
||||
:statusNames="{
|
||||
using: 'processing',
|
||||
toBeActivated: 'default',
|
||||
|
@ -183,14 +183,6 @@
|
|||
</j-row>
|
||||
<j-divider style="margin: 12px 0" />
|
||||
<div class="content-bottom">
|
||||
<!-- <div v-if="slotProps.usedFlow === 0">-->
|
||||
<!-- <span class="flow-text">-->
|
||||
<!-- {{ slotProps.totalFlow }}-->
|
||||
<!-- </span>-->
|
||||
<!-- <span class="card-item-content-text">-->
|
||||
<!-- M 使用流量</span-->
|
||||
<!-- >-->
|
||||
<!-- </div>-->
|
||||
<div>
|
||||
<div class="progress-text">
|
||||
<div>
|
||||
|
@ -240,42 +232,6 @@
|
|||
<span>{{ item?.text }}</span>
|
||||
</template>
|
||||
</PermissionButton>
|
||||
<!-- <a-tooltip
|
||||
v-bind="item.tooltip"
|
||||
:title="item.disabled && item.tooltip.title"
|
||||
>
|
||||
<a-popconfirm
|
||||
v-if="item.popConfirm"
|
||||
v-bind="item.popConfirm"
|
||||
:disabled="item.disabled"
|
||||
>
|
||||
<a-button :disabled="item.disabled">
|
||||
<AIcon
|
||||
type="DeleteOutlined"
|
||||
v-if="item.key === 'delete'"
|
||||
/>
|
||||
<template v-else>
|
||||
<AIcon :type="item.icon" />
|
||||
<span>{{ item.text }}</span>
|
||||
</template>
|
||||
</a-button>
|
||||
</a-popconfirm>
|
||||
<template v-else>
|
||||
<a-button
|
||||
:disabled="item.disabled"
|
||||
@click="item.onClick"
|
||||
>
|
||||
<AIcon
|
||||
type="DeleteOutlined"
|
||||
v-if="item.key === 'delete'"
|
||||
/>
|
||||
<template v-else>
|
||||
<AIcon :type="item.icon" />
|
||||
<span>{{ item.text }}</span>
|
||||
</template>
|
||||
</a-button>
|
||||
</template>
|
||||
</j-tooltip> -->
|
||||
</template>
|
||||
</CardBox>
|
||||
</template>
|
||||
|
@ -532,6 +488,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
title: '总流量',
|
||||
key: 'totalFlow',
|
||||
dataIndex: 'totalFlow',
|
||||
width: 120,
|
||||
scopedSlots: true,
|
||||
|
@ -723,6 +680,7 @@ const getActions = (
|
|||
const resp: any = await del(data.id);
|
||||
if (resp.status === 200) {
|
||||
onlyMessage('操作成功');
|
||||
_selectedRowKeys.value=[];
|
||||
cardManageRef.value?.reload();
|
||||
} else {
|
||||
onlyMessage('操作失败!', 'error');
|
||||
|
@ -777,6 +735,9 @@ const cancelSelect = () => {
|
|||
};
|
||||
|
||||
const handleClick = (dt: any) => {
|
||||
if(!dt?.cardStateType){
|
||||
return
|
||||
}
|
||||
if (isCheck.value) {
|
||||
if (_selectedRowKeys.value.includes(dt.id)) {
|
||||
const _index = _selectedRowKeys.value.findIndex((i) => i === dt.id);
|
||||
|
|
|
@ -209,7 +209,13 @@ const columns = [
|
|||
width: 150,
|
||||
search: {
|
||||
type: 'select',
|
||||
options: options,
|
||||
options: async() => {
|
||||
const res: any = await supports();
|
||||
return options.value = res.result.map((item: any) => ({
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}));
|
||||
},
|
||||
},
|
||||
scopedSlots: true,
|
||||
},
|
||||
|
@ -379,31 +385,41 @@ const getDetails = (slotProps: Partial<Record<string, any>>) => {
|
|||
!!cluster[0].configuration.publicHos && (head = '公网:');
|
||||
}
|
||||
if (!shareCluster && cluster.length > 1) {
|
||||
const contentItem2 = (cluster[0].configuration.publicHost ||
|
||||
const contentItem2 =
|
||||
(cluster[0].configuration.publicHost ||
|
||||
cluster[0].configuration.remoteHost) +
|
||||
':' +
|
||||
(cluster[0].configuration.publicPort ||
|
||||
cluster[0].configuration.remotePort)
|
||||
let headItme2 ='远程'
|
||||
cluster[0].configuration.remotePort);
|
||||
let headItme2 = '远程';
|
||||
!!cluster[0].configuration.publicHos && (headItme2 = '公网:');
|
||||
if (cluster.length > 2) {
|
||||
return head + headers + content + " " + headItme2 + headers + contentItem2 + '。。。'
|
||||
return (
|
||||
head +
|
||||
headers +
|
||||
content +
|
||||
' ' +
|
||||
headItme2 +
|
||||
headers +
|
||||
contentItem2 +
|
||||
'。。。'
|
||||
);
|
||||
}
|
||||
return head + headers + content + " " + headItme2 + headers + contentItem2
|
||||
return (
|
||||
head + headers + content + ' ' + headItme2 + headers + contentItem2
|
||||
);
|
||||
}
|
||||
return head + headers + content;
|
||||
};
|
||||
|
||||
|
||||
|
||||
const getSupports = async () => {
|
||||
const res: any = await supports();
|
||||
options.value = res.result.map((item: any) => ({
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}));
|
||||
};
|
||||
getSupports();
|
||||
// const getSupports = async () => {
|
||||
// const res: any = await supports();
|
||||
// options.value = res.result.map((item: any) => ({
|
||||
// value: item.id,
|
||||
// label: item.name,
|
||||
// }));
|
||||
// };
|
||||
// getSupports();
|
||||
|
||||
/**
|
||||
* 搜索
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
</template>
|
||||
<template #card="slotProps">
|
||||
<CardBox
|
||||
@click="()=>jumpDetail(slotProps)"
|
||||
:value="slotProps"
|
||||
:actions="getActions(slotProps, 'card')"
|
||||
v-bind="slotProps"
|
||||
|
@ -450,4 +451,8 @@ getProductList();
|
|||
const getProductName = (pid: string) => {
|
||||
return productList.value.find((f: any) => f.value === pid)?.label;
|
||||
};
|
||||
|
||||
const jumpDetail = (data:any) =>{
|
||||
menuStory.jumpPage('device/Instance/Detail', { id: data.id });
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
:key="index"
|
||||
:value="item.value"
|
||||
>
|
||||
<div
|
||||
<Ellipsis
|
||||
style="
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
|
@ -65,7 +65,7 @@
|
|||
style="height: 40px"
|
||||
alt=""
|
||||
/>{{ item.label }}
|
||||
</div>
|
||||
</Ellipsis>
|
||||
</j-radio-button>
|
||||
</j-radio-group>
|
||||
</j-form-item>
|
||||
|
|
|
@ -78,9 +78,16 @@
|
|||
<div class="content-des-title">
|
||||
关联场景联动
|
||||
</div>
|
||||
<Ellipsis style='margin-bottom: 18px;'
|
||||
<Ellipsis style="margin-bottom: 18px"
|
||||
><div>
|
||||
{{ (slotProps?.scene || []).map((item: any) => item?.name).join(',') || '' }}
|
||||
{{
|
||||
(slotProps?.scene || [])
|
||||
.map(
|
||||
(item: any) =>
|
||||
item?.name,
|
||||
)
|
||||
.join(',') || ''
|
||||
}}
|
||||
</div></Ellipsis
|
||||
>
|
||||
</j-col>
|
||||
|
@ -88,10 +95,15 @@
|
|||
<div class="content-des-title">
|
||||
告警级别
|
||||
</div>
|
||||
<div>
|
||||
{{ (defaultLevel || []).find((item: any) => item?.level === slotProps.level)?.title ||
|
||||
slotProps.level }}
|
||||
</div>
|
||||
<Ellipsis>
|
||||
{{
|
||||
(defaultLevel || []).find(
|
||||
(item: any) =>
|
||||
item?.level ===
|
||||
slotProps.level,
|
||||
)?.title || slotProps.level
|
||||
}}
|
||||
</Ellipsis>
|
||||
</j-col>
|
||||
</j-row>
|
||||
</template>
|
||||
|
@ -122,21 +134,20 @@
|
|||
<span>{{ map[slotProps.targetType] }}</span>
|
||||
</template>
|
||||
<template #level="slotProps">
|
||||
<j-tooltip
|
||||
placement="topLeft"
|
||||
:title="(defaultLevel || []).find((item) => item?.level === slotProps.level)?.title ||
|
||||
slotProps.level"
|
||||
>
|
||||
<div class="ellipsis">
|
||||
{{ (defaultLevel || []).find((item) => item?.level === slotProps.level)?.title ||
|
||||
slotProps.level }}
|
||||
</div>
|
||||
</j-tooltip>
|
||||
<Ellipsis>
|
||||
{{
|
||||
(defaultLevel || []).find(
|
||||
(item) => item?.level === slotProps.level,
|
||||
)?.title || slotProps.level
|
||||
}}
|
||||
</Ellipsis>
|
||||
</template>
|
||||
<template #scene="slotProps">
|
||||
<span
|
||||
>{{(slotProps?.scene || []).map((item) => item?.name).join(',') || ''}}</span
|
||||
>
|
||||
<span>{{
|
||||
(slotProps?.scene || [])
|
||||
.map((item) => item?.name)
|
||||
.join(',') || ''
|
||||
}}</span>
|
||||
</template>
|
||||
<template #state="slotProps">
|
||||
<BadgeStatus
|
||||
|
@ -184,7 +195,12 @@
|
|||
</FullPage>
|
||||
</div>
|
||||
</page-container>
|
||||
<HandTrigger @save="onSave" @close="visible = false" v-if="visible" :data="current" />
|
||||
<HandTrigger
|
||||
@save="onSave"
|
||||
@close="visible = false"
|
||||
v-if="visible"
|
||||
:data="current"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
@ -267,7 +283,6 @@ const columns = [
|
|||
},
|
||||
},
|
||||
width: 200,
|
||||
ellipsis: true,
|
||||
},
|
||||
{
|
||||
title: '关联场景联动',
|
||||
|
@ -278,20 +293,23 @@ const columns = [
|
|||
type: 'select',
|
||||
// defaultTermType: 'rule-bind-alarm',
|
||||
options: async () => {
|
||||
const allData = await queryList({paging: false, sorts: [{ name: 'createTime', order: 'desc' }]})
|
||||
const result = allData.result?.data as any[]
|
||||
const allData = await queryList({
|
||||
paging: false,
|
||||
sorts: [{ name: 'createTime', order: 'desc' }],
|
||||
});
|
||||
const result = allData.result?.data as any[];
|
||||
if (allData.success && result && result.length) {
|
||||
const sceneDataMap = new Map() // 用于去重
|
||||
result.forEach(item => {
|
||||
const sceneDataMap = new Map(); // 用于去重
|
||||
result.forEach((item) => {
|
||||
item.scene.forEach((a: any) => {
|
||||
sceneDataMap.set(a.id, {
|
||||
label: a.name,
|
||||
value: a.id
|
||||
})
|
||||
})
|
||||
})
|
||||
value: a.id,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return [...sceneDataMap.values()]
|
||||
return [...sceneDataMap.values()];
|
||||
}
|
||||
|
||||
// const res = await getScene(
|
||||
|
@ -366,17 +384,17 @@ const handleSearch = (e: any) => {
|
|||
return {
|
||||
...i,
|
||||
termType: 'rule-bind-alarm',
|
||||
column: 'id'
|
||||
column: 'id',
|
||||
};
|
||||
}
|
||||
}
|
||||
return i
|
||||
})
|
||||
return item
|
||||
})
|
||||
return i;
|
||||
});
|
||||
return item;
|
||||
});
|
||||
params.value = {
|
||||
...e,
|
||||
terms: _terms
|
||||
}
|
||||
terms: _terms,
|
||||
};
|
||||
};
|
||||
const queryDefaultLevel = () => {
|
||||
queryLevel().then((res) => {
|
||||
|
@ -406,7 +424,7 @@ const getActions = (
|
|||
},
|
||||
onClick: () => {
|
||||
visible.value = true;
|
||||
current.value = data
|
||||
current.value = data;
|
||||
},
|
||||
icon: 'LikeOutlined',
|
||||
},
|
||||
|
@ -467,7 +485,7 @@ const getActions = (
|
|||
data?.state?.value !== 'disabled'
|
||||
? '请先禁用该告警,再删除'
|
||||
: '删除',
|
||||
placement:"topLeft"
|
||||
placement: 'topLeft',
|
||||
},
|
||||
popConfirm: {
|
||||
title: '确认删除?',
|
||||
|
@ -491,7 +509,7 @@ const getActions = (
|
|||
const onSave = () => {
|
||||
visible.value = false;
|
||||
tableRef.value?.reload();
|
||||
}
|
||||
};
|
||||
const add = () => {
|
||||
menuStory.jumpPage('rule-engine/Alarm/Configuration/Save');
|
||||
};
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
4: 'level4',
|
||||
5: 'level5',
|
||||
}"
|
||||
:customBadge="true"
|
||||
>
|
||||
<template #img>
|
||||
<img
|
||||
|
@ -121,6 +122,13 @@
|
|||
<template #alarmTime="slotProps">
|
||||
{{ dayjs(slotProps.alarmTime).format('YYYY-MM-DD HH:mm:ss')}}
|
||||
</template>
|
||||
<template #level="slotProps">
|
||||
<Ellipsis style="width: calc(100% - 20px)">
|
||||
{{ data.defaultLevel.find((i)=>{
|
||||
return i.level === slotProps.level
|
||||
}).title}}
|
||||
</Ellipsis>
|
||||
</template>
|
||||
<template #state="slotProps">
|
||||
<BadgeStatus
|
||||
:status="slotProps.state.value"
|
||||
|
@ -240,6 +248,7 @@ const columns = [
|
|||
title: '告警级别',
|
||||
dataIndex: 'level',
|
||||
key: 'level',
|
||||
width:200,
|
||||
search: {
|
||||
type: 'select',
|
||||
options: data.value.defaultLevel.map((item: any) => {
|
||||
|
@ -249,6 +258,7 @@ const columns = [
|
|||
};
|
||||
}),
|
||||
},
|
||||
scopedSlots: true
|
||||
},
|
||||
{
|
||||
title: '最近告警时间',
|
||||
|
|
|
@ -20,7 +20,14 @@
|
|||
:title="item.alarmName"
|
||||
placement="topLeft"
|
||||
>
|
||||
<a @click="()=>{return jumpDetail(item)}">{{ item.alarmName }}</a>
|
||||
<a
|
||||
@click="
|
||||
() => {
|
||||
return jumpDetail(item);
|
||||
}
|
||||
"
|
||||
>{{ item.alarmName }}</a
|
||||
>
|
||||
</j-tooltip>
|
||||
</div>
|
||||
<div class="new-alarm-item-state">
|
||||
|
@ -42,13 +49,16 @@
|
|||
{{ item.state?.text }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div
|
||||
:class="[
|
||||
'new-alarm-item-level',
|
||||
`level-${item.level}`,
|
||||
]"
|
||||
>
|
||||
<Ellipsis style="width: calc(100%)">
|
||||
{{ item.levelName }}
|
||||
</Ellipsis>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
@ -73,8 +83,11 @@ const props = defineProps({
|
|||
});
|
||||
const menuStore = useMenuStore();
|
||||
const jumpDetail = (item: any) => {
|
||||
menuStore.jumpPage(`rule-engine/Alarm/Log/Detail`,{id:item.id,detail:true});
|
||||
}
|
||||
menuStore.jumpPage(`rule-engine/Alarm/Log/Detail`, {
|
||||
id: item.id,
|
||||
detail: true,
|
||||
});
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="less">
|
||||
.new-alarm {
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
</TitleComponent>
|
||||
<template v-if='open'>
|
||||
<div>
|
||||
<j-tabs type="editable-card" v-model:activeKey="activeKey" @edit="addGroup">
|
||||
<j-tabs type="editable-card" v-model:activeKey="activeKey" @edit="addGroup" @tabClick="showEditCondition">
|
||||
<j-tab-pane
|
||||
v-for="(b, i) in group"
|
||||
:key="b.id"
|
||||
:tab="`条件${i + 1}`"
|
||||
:tab="b.branchName || `条件${i+1}`"
|
||||
:closable="false"
|
||||
>
|
||||
<template v-for='(item, index) in data.branches'>
|
||||
|
@ -64,6 +64,13 @@
|
|||
</j-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<j-modal v-if="editConditionVisible" title="编辑" visible @cancel="editConditionVisible = false" @ok="changeBranchName">
|
||||
<j-form layout='vertical'>
|
||||
<j-form-item label="条件名称:" :required="true">
|
||||
<j-input v-model:value="conditionName"></j-input>
|
||||
</j-form-item>
|
||||
</j-form>
|
||||
</j-modal>
|
||||
</template>
|
||||
|
||||
<script setup lang='ts' name='Terms'>
|
||||
|
@ -84,6 +91,8 @@ const open = ref<boolean>(false)
|
|||
const columnOptions = ref<any>([])
|
||||
const group = ref<Array<{ id: string, len: number}>>([])
|
||||
const activeKey = ref('')
|
||||
const editConditionVisible = ref(false);
|
||||
const conditionName = ref<any>('')
|
||||
|
||||
provide(ContextKey, columnOptions)
|
||||
|
||||
|
@ -183,7 +192,8 @@ const addGroup = () => {
|
|||
},
|
||||
then: [],
|
||||
executeAnyway: true,
|
||||
branchId: Math.floor(Math.random() * 100000000)
|
||||
branchId: Math.floor(Math.random() * 100000000),
|
||||
branchName:'条件'+ data.value.branches?.length
|
||||
}
|
||||
data.value.branches?.push(branchesItem)
|
||||
data.value.branches?.push(null as any)
|
||||
|
@ -210,6 +220,24 @@ const groupDelete = (g: any, index: number) => {
|
|||
activeKey.value = group.value[_index].id
|
||||
}
|
||||
|
||||
const showEditCondition = (key:any) =>{
|
||||
if(key === activeKey.value){
|
||||
editConditionVisible.value = true;
|
||||
conditionName.value = group.value.find((i:any)=>{
|
||||
return i.id === key
|
||||
})?.branchName
|
||||
}
|
||||
}
|
||||
|
||||
const changeBranchName = () =>{
|
||||
console.log(data.value)
|
||||
data.value.branches?.forEach((item:any)=>{
|
||||
if(item?.key === activeKey.value.slice(6)){
|
||||
item.branchName = conditionName.value
|
||||
}
|
||||
})
|
||||
editConditionVisible.value =false
|
||||
}
|
||||
watchEffect(() => {
|
||||
if (data.value.trigger?.device) {
|
||||
queryColumn({ trigger: data.value.trigger })
|
||||
|
@ -242,7 +270,8 @@ watchEffect(() => {
|
|||
_group[lastIndex + 1] = {
|
||||
id: `group_${item.key}`,
|
||||
len: 1,
|
||||
start: index
|
||||
start: index,
|
||||
branchName:item.branchName
|
||||
}
|
||||
} else {
|
||||
_group[lastIndex].len += 1
|
||||
|
@ -258,7 +287,7 @@ watchEffect(() => {
|
|||
activeKey.value = _group[0].id
|
||||
}
|
||||
}
|
||||
|
||||
console.log(group.value,'group')
|
||||
})
|
||||
|
||||
</script>
|
||||
|
|
|
@ -1438,6 +1438,17 @@ import { Rule } from 'ant-design-vue/lib/form';
|
|||
import ApplyList from './ApplyList/index.vue';
|
||||
|
||||
const emit = defineEmits(['changeApplyType']);
|
||||
|
||||
const defaultImg = {
|
||||
'internal-standalone': getImage('/apply/internal-standalone.png'),
|
||||
'internal-integrated': getImage('/apply/internal-integrated.png'),
|
||||
'wechat-webapp': getImage('/apply/wechat-webapp.png'),
|
||||
'dingtalk-ent-app': getImage('/apply/dingtalk-ent-app.png'),
|
||||
'third-party': getImage('/apply/third-party.png'),
|
||||
'wechat-miniapp': getImage('/apply/wechat-miniapp.png'),
|
||||
};
|
||||
|
||||
|
||||
const routeQuery = useRoute().query;
|
||||
const menuStory = useMenuStore();
|
||||
|
||||
|
@ -1601,6 +1612,8 @@ onMounted(async () => {
|
|||
typeOptions.value = typeOptions.value.filter((i: any) => {
|
||||
return i.value === routeQuery.provider;
|
||||
});
|
||||
console.log(typeOptions.value[0].value)
|
||||
form.data.logoUrl = defaultImg[typeOptions.value[0].value]
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -53,11 +53,11 @@
|
|||
</slot>
|
||||
</template>
|
||||
<template #content>
|
||||
<h3 class="card-item-content-title">
|
||||
<Ellipsis>
|
||||
<h3 class="card-item-content-title">
|
||||
{{ slotProps.name }}
|
||||
</Ellipsis>
|
||||
</h3>
|
||||
</Ellipsis>
|
||||
<j-row>
|
||||
<j-col :span="12">
|
||||
<div class="card-item-content-text">
|
||||
|
@ -102,13 +102,21 @@
|
|||
) in item.children"
|
||||
:key="i"
|
||||
>
|
||||
<j-tooltip :title="o?.tooltip?.title">
|
||||
<j-tooltip
|
||||
:title="
|
||||
o?.tooltip?.title
|
||||
"
|
||||
>
|
||||
<j-button
|
||||
type="link"
|
||||
@click="o.onClick"
|
||||
:disabled="o.disabled"
|
||||
:disabled="
|
||||
o.disabled
|
||||
"
|
||||
>
|
||||
<AIcon :type="o.icon" />
|
||||
<AIcon
|
||||
:type="o.icon"
|
||||
/>
|
||||
<span>{{
|
||||
o.text
|
||||
}}</span>
|
||||
|
@ -194,7 +202,12 @@
|
|||
:data="current"
|
||||
mode="edit"
|
||||
@cancel="dialogVisible = false"
|
||||
@ok="() => { dialogVisible = false; table.refresh}"
|
||||
@ok="
|
||||
() => {
|
||||
dialogVisible = false;
|
||||
table.refresh;
|
||||
}
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<Add v-if="visible" @close="visible = false" />
|
||||
|
@ -204,12 +217,12 @@
|
|||
<script setup lang="ts" name="Apply">
|
||||
import PermissionButton from '@/components/PermissionButton/index.vue';
|
||||
import MenuDialog from './componenets/MenuDialog.vue';
|
||||
import ThirdMenu from './componenets/ThirdMenu.vue'
|
||||
import ThirdMenu from './componenets/ThirdMenu.vue';
|
||||
import {
|
||||
getApplyList_api,
|
||||
changeApplyStatus_api,
|
||||
delApply_api,
|
||||
queryType
|
||||
queryType,
|
||||
} from '@/api/system/apply';
|
||||
import { getImage, onlyMessage } from '@/utils/comm';
|
||||
import { useMenuStore } from '@/store/menu';
|
||||
|
@ -219,9 +232,9 @@ import Add from './Save/Add.vue';
|
|||
const menuStory = useMenuStore();
|
||||
const permission = 'system/Apply';
|
||||
|
||||
const typeOptions = ref<any[]>([])
|
||||
const visible = ref<boolean>(false)
|
||||
const addMenuVisible = ref<boolean>(false)
|
||||
const typeOptions = ref<any[]>([]);
|
||||
const visible = ref<boolean>(false);
|
||||
const addMenuVisible = ref<boolean>(false);
|
||||
|
||||
onMounted(() => {
|
||||
queryType().then((resp: any) => {
|
||||
|
@ -229,11 +242,11 @@ onMounted(() => {
|
|||
const arr = resp.result.map((item: any) => ({
|
||||
label: item.name,
|
||||
value: item.provider,
|
||||
}))
|
||||
typeOptions.value = arr
|
||||
}));
|
||||
typeOptions.value = arr;
|
||||
}
|
||||
});
|
||||
})
|
||||
});
|
||||
const columns = [
|
||||
{
|
||||
title: '名称',
|
||||
|
@ -309,14 +322,14 @@ const columns = [
|
|||
const queryParams = ref({});
|
||||
|
||||
const tableRef = ref();
|
||||
const current = ref<any>({})
|
||||
const current = ref<any>({});
|
||||
const table = {
|
||||
refresh: () => {
|
||||
// tableRef.value.reload(queryParams.value);
|
||||
window.location.reload()
|
||||
window.location.reload();
|
||||
},
|
||||
toAdd: () => {
|
||||
visible.value = true
|
||||
visible.value = true;
|
||||
},
|
||||
toSave: (id?: string, view = false) => {
|
||||
if (id) menuStory.jumpPage('system/Apply/Save', {}, { id, view });
|
||||
|
@ -408,7 +421,7 @@ const table = {
|
|||
onClick: () => {
|
||||
selectId.value = data.id;
|
||||
selectProvider.value = data.provider;
|
||||
current.value = data
|
||||
current.value = data;
|
||||
dialogVisible.value = true;
|
||||
},
|
||||
});
|
||||
|
|
|
@ -44,11 +44,13 @@
|
|||
label="排序"
|
||||
:rules="[{ required: true, message: '请输入排序' }]"
|
||||
>
|
||||
<j-input
|
||||
<j-input-number
|
||||
style="width: 100%;"
|
||||
v-model:value="form.data.sortIndex"
|
||||
placeholder="请输入排序"
|
||||
:maxlength="64"
|
||||
@blur="form.checkSort"
|
||||
:controls="false"
|
||||
:min="0"
|
||||
:max="99999999"
|
||||
/>
|
||||
</j-form-item>
|
||||
</j-form>
|
||||
|
@ -140,7 +142,6 @@ const filterTree = (treeNode: treeType[]) => {
|
|||
const formRef = ref<FormInstance>();
|
||||
const form = reactive({
|
||||
data: {} as formType,
|
||||
beforeSortIndex: '' as string | number,
|
||||
|
||||
init: () => {
|
||||
if (props.data.id) {
|
||||
|
@ -160,19 +161,10 @@ const form = reactive({
|
|||
sortIndex: props.data.sortIndex,
|
||||
};
|
||||
}
|
||||
form.beforeSortIndex = form.data.sortIndex;
|
||||
nextTick(() => {
|
||||
formRef.value?.clearValidate();
|
||||
});
|
||||
},
|
||||
checkSort: (e: any) => {
|
||||
const value = e.target.value.match(/^[1-9]*/)[0];
|
||||
if (value) {
|
||||
form.data.sortIndex = value;
|
||||
form.beforeSortIndex = value;
|
||||
} else form.data.sortIndex = form.beforeSortIndex;
|
||||
},
|
||||
|
||||
submit: () => {
|
||||
const api = form.data.id ? updateDepartment_api : addDepartment_api;
|
||||
form.data.parentId = form.data.parentId ? form.data.parentId : '';
|
||||
|
|
|
@ -215,15 +215,15 @@ const openDialog = (row: any = {}) => {
|
|||
// 计算默认排序值,为子列表中最大的排序值+1
|
||||
let sortIndex = row.sortIndex || 1;
|
||||
if (!row.id) {
|
||||
let childrens = [] as any[];
|
||||
let children = [] as any[];
|
||||
if (row.parentId) {
|
||||
childrens = row.children;
|
||||
} else childrens = treeData.value;
|
||||
const indexs =
|
||||
childrens?.length > 0
|
||||
? childrens?.map((item) => item.sortIndex)
|
||||
children = row.children;
|
||||
} else children = treeData.value;
|
||||
const index =
|
||||
children?.length > 0
|
||||
? children?.map((item) => item.sortIndex)
|
||||
: [0];
|
||||
sortIndex = Math.max(...indexs) + 1;
|
||||
sortIndex = Math.max(...index) + 1;
|
||||
}
|
||||
|
||||
dialog.selectItem = { ...row, sortIndex };
|
||||
|
|
|
@ -37,22 +37,16 @@
|
|||
:model="form"
|
||||
class="login-form"
|
||||
@finish="onFinish"
|
||||
:rules='rules'
|
||||
>
|
||||
<j-form-item
|
||||
label="账号"
|
||||
name="username"
|
||||
:rules="rules"
|
||||
>
|
||||
<j-form-item label="账号" name="username">
|
||||
<j-input
|
||||
v-model:value="form.username"
|
||||
placeholder="请输入账号"
|
||||
:maxlength="64"
|
||||
></j-input>
|
||||
</j-form-item>
|
||||
<j-form-item
|
||||
label="密码"
|
||||
name="password"
|
||||
>
|
||||
<j-form-item label="密码" name="password">
|
||||
<j-input-password
|
||||
v-model:value="form.password"
|
||||
placeholder="请输入密码"
|
||||
|
@ -117,25 +111,89 @@
|
|||
</j-divider>
|
||||
<div class="other-button">
|
||||
<div
|
||||
class='other-button-item'
|
||||
v-for="(item, index) in bindings.slice(0,4)"
|
||||
class="other-button-item"
|
||||
v-for="(
|
||||
item, index
|
||||
) in bindings.slice(0, 4)"
|
||||
:key="index"
|
||||
@click="handleClickOther(item)"
|
||||
>
|
||||
<img
|
||||
style="width: 32px; height: 32px"
|
||||
style="
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
"
|
||||
:alt="item.name"
|
||||
:src="
|
||||
item.logoUrl || iconMap.get(
|
||||
item.logoUrl ||
|
||||
iconMap.get(
|
||||
item.provider,
|
||||
) || defaultImg
|
||||
) ||
|
||||
defaultImg
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<j-popover
|
||||
trigger="click"
|
||||
v-model:visible="moreVisible"
|
||||
placement="bottomRight"
|
||||
>
|
||||
<template #content>
|
||||
<j-scrollbar :max-height="120">
|
||||
<div class="more-button">
|
||||
<div
|
||||
class="more-button-item"
|
||||
v-for="(
|
||||
item, index
|
||||
) in bindings"
|
||||
:key="index"
|
||||
@click="
|
||||
handleClickOther(
|
||||
item,
|
||||
)
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
"
|
||||
:alt="item.name"
|
||||
:src="
|
||||
item.logoUrl
|
||||
"
|
||||
/>
|
||||
<Ellipsis
|
||||
style="
|
||||
margin-top: 5px;
|
||||
width: calc(
|
||||
100%
|
||||
);
|
||||
margin: 0
|
||||
auto;
|
||||
"
|
||||
>
|
||||
{{ item.name }}
|
||||
</Ellipsis>
|
||||
</div>
|
||||
<div class="more" v-if="bindings.length > 4" @click="moreVisible = true">
|
||||
</div>
|
||||
</j-scrollbar>
|
||||
</template>
|
||||
<div
|
||||
v-if="bindings.length > 4"
|
||||
class="more"
|
||||
>
|
||||
<AIcon
|
||||
class="moreIcon"
|
||||
type="MoreOutlined"
|
||||
style="font-size: 20px"
|
||||
></AIcon>
|
||||
</div>
|
||||
</j-popover>
|
||||
</div>
|
||||
<!-- <div class="more" v-if="bindings.length > 4" @click="moreVisible = true">
|
||||
查看更多
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -161,7 +219,7 @@
|
|||
</div>
|
||||
</j-spin>
|
||||
</div>
|
||||
<j-modal
|
||||
<!-- <j-modal
|
||||
title="更多登录"
|
||||
:visible="moreVisible"
|
||||
@cancel="() => (moreVisible = false)"
|
||||
|
@ -180,12 +238,18 @@
|
|||
:alt="item.name"
|
||||
:src="item.logoUrl"
|
||||
/>
|
||||
<Ellipsis style="margin-top: 5px; width:calc(100% - 40px); margin: 0 auto">
|
||||
<Ellipsis
|
||||
style="
|
||||
margin-top: 5px;
|
||||
width: calc(100% - 40px);
|
||||
margin: 0 auto;
|
||||
"
|
||||
>
|
||||
{{ item.name }}
|
||||
</Ellipsis>
|
||||
</div>
|
||||
</div>
|
||||
</j-modal>
|
||||
</j-modal> -->
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
@ -197,16 +261,17 @@ import {
|
|||
getInitSet,
|
||||
systemVersion,
|
||||
bindInfo,
|
||||
settingDetail, userDetail,
|
||||
authLoginConfig
|
||||
} from '@/api/login'
|
||||
settingDetail,
|
||||
userDetail,
|
||||
authLoginConfig,
|
||||
} from '@/api/login';
|
||||
import { useUserInfo } from '@/store/userInfo';
|
||||
import { useSystem } from '@/store/system'
|
||||
import { useSystem } from '@/store/system';
|
||||
import { LocalStore } from '@/utils/comm';
|
||||
import { BASE_API_PATH, TOKEN_KEY, Version_Code } from '@/utils/variable';
|
||||
import { SystemConst } from '@/utils/consts';
|
||||
import {encrypt} from '@/utils/encrypt'
|
||||
import { closeWs } from '@/utils/websocket'
|
||||
import { encrypt } from '@/utils/encrypt';
|
||||
import { closeWs } from '@/utils/websocket';
|
||||
|
||||
const store = useUserInfo();
|
||||
const systemStore = useSystem();
|
||||
|
@ -217,7 +282,7 @@ const viewLogo = getImage('/view-logo.png');
|
|||
const LoginWarpStyle = reactive({
|
||||
backgroundImage: `url(${bgImage})`,
|
||||
});
|
||||
const moreVisible = ref(false)
|
||||
const moreVisible = ref(false);
|
||||
const screenWidth = ref(document.body.clientWidth);
|
||||
const screenHeight = ref(document.body.clientHeight);
|
||||
|
||||
|
@ -233,41 +298,41 @@ const form = reactive({
|
|||
const RsaConfig = reactive<any>({
|
||||
enabled: false, //是否加密
|
||||
publicKey: '', //rsa公钥,使用此公钥对密码进行加密
|
||||
id:'' //密钥ID
|
||||
})
|
||||
id: '', //密钥ID
|
||||
});
|
||||
|
||||
const rules = {
|
||||
username: [
|
||||
{
|
||||
validator(_: any, value: string) {
|
||||
if (!value) {
|
||||
return Promise.reject('请输入账号!')
|
||||
}
|
||||
return Promise.resolve()
|
||||
}
|
||||
return Promise.reject('请输入账号!');
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
],
|
||||
password: [
|
||||
{
|
||||
validator(_: any, value: string) {
|
||||
if (!value) {
|
||||
return Promise.reject('请输入密码!')
|
||||
}
|
||||
return Promise.resolve()
|
||||
}
|
||||
return Promise.reject('请输入密码!');
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
],
|
||||
verifyCode: [
|
||||
{
|
||||
validator(_: any, value: string) {
|
||||
if (!value) {
|
||||
return Promise.reject('请输入验证码!')
|
||||
}
|
||||
return Promise.resolve()
|
||||
}
|
||||
}
|
||||
]
|
||||
return Promise.reject('请输入验证码!');
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const codeUrl = ref('');
|
||||
const codeConfig = ref(false);
|
||||
|
@ -290,22 +355,24 @@ const onFinish = async () => {
|
|||
|
||||
const data = {
|
||||
...form,
|
||||
password:RsaConfig.enabled?encrypt(form.password,RsaConfig.publicKey):form.password,
|
||||
encryptId:RsaConfig.enabled?RsaConfig.id:undefined
|
||||
}
|
||||
password: RsaConfig.enabled
|
||||
? encrypt(form.password, RsaConfig.publicKey)
|
||||
: form.password,
|
||||
encryptId: RsaConfig.enabled ? RsaConfig.id : undefined,
|
||||
};
|
||||
|
||||
const res: any = await authLogin(data);
|
||||
loading.value = false;
|
||||
if (res.success) {
|
||||
LocalStore.set(TOKEN_KEY, res?.result.token);
|
||||
const userResp = await userDetail()
|
||||
const userResp = await userDetail();
|
||||
if (userResp.success) {
|
||||
store.$patch({
|
||||
userInfos: {
|
||||
...userResp.result,
|
||||
token: res?.result.token,
|
||||
},
|
||||
isAdmin: userResp.username === "admin",
|
||||
isAdmin: userResp.username === 'admin',
|
||||
});
|
||||
|
||||
if (userResp.result?.username === 'admin') {
|
||||
|
@ -318,7 +385,7 @@ const onFinish = async () => {
|
|||
}
|
||||
} else {
|
||||
store.$patch({
|
||||
...res.result
|
||||
...res.result,
|
||||
});
|
||||
}
|
||||
window.location.href = '/';
|
||||
|
@ -328,7 +395,7 @@ const onFinish = async () => {
|
|||
form.verifyCode = '';
|
||||
getCode();
|
||||
loading.value = false;
|
||||
getRsa()
|
||||
getRsa();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -345,7 +412,6 @@ const getCode = async () => {
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
const getOpen = () => {
|
||||
LocalStore.removeAll();
|
||||
systemVersion().then((res: any) => {
|
||||
|
@ -360,24 +426,24 @@ const getOpen = () => {
|
|||
}
|
||||
}
|
||||
});
|
||||
systemStore.getFront()
|
||||
systemStore.getFront();
|
||||
};
|
||||
|
||||
//获取加密信息
|
||||
const getRsa = async () => {
|
||||
const res:any = await authLoginConfig()
|
||||
const res: any = await authLoginConfig();
|
||||
if (res.status === 200) {
|
||||
if (res.result?.encrypt) {
|
||||
RsaConfig.enabled = res.result?.encrypt.enabled
|
||||
RsaConfig.publicKey = res.result?.encrypt.publicKey
|
||||
RsaConfig.id = res.result?.encrypt.id
|
||||
}
|
||||
RsaConfig.enabled = res.result?.encrypt.enabled;
|
||||
RsaConfig.publicKey = res.result?.encrypt.publicKey;
|
||||
RsaConfig.id = res.result?.encrypt.id;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const basis = computed(() => {
|
||||
return systemStore.configInfo['front'] || {}
|
||||
})
|
||||
return systemStore.configInfo['front'] || {};
|
||||
});
|
||||
const handleClickOther = (item: any) => {
|
||||
LocalStore.set('onLogin', 'no');
|
||||
window.open(`${BASE_API_PATH}/application/sso/${item.id}/login`);
|
||||
|
@ -411,11 +477,10 @@ getOpen();
|
|||
getCode();
|
||||
screenRotation(screenWidth.value, screenHeight.value);
|
||||
|
||||
closeWs()
|
||||
closeWs();
|
||||
onMounted(() => {
|
||||
getRsa()
|
||||
})
|
||||
|
||||
getRsa();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
|
@ -541,7 +606,12 @@ onMounted(()=>{
|
|||
cursor: pointer;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
}
|
||||
.more {
|
||||
cursor: pointer;
|
||||
.moreIcon {
|
||||
transform: translateY(50%);
|
||||
}
|
||||
}
|
||||
.more{
|
||||
text-align: center;
|
||||
|
@ -637,11 +707,13 @@ onMounted(()=>{
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
cursor: pointer;
|
||||
overflow: auto;
|
||||
width: 300px;
|
||||
.more-button-item {
|
||||
width: 18%;
|
||||
margin-left: 2%;
|
||||
width: 62px;
|
||||
text-align: center;
|
||||
margin-bottom: 20px
|
||||
margin-bottom: 10px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -97,8 +97,8 @@ export default defineConfig(({ mode}) => {
|
|||
// target: 'http://192.168.32.163:8844', //张本地
|
||||
// target: 'http://120.77.179.54:8844', // 120测试
|
||||
target: 'http://192.168.33.46:8844', // 本地开发环境
|
||||
// target: 'http://192.168.33.1:8845', // 社区版开发环境
|
||||
// target: 'http://192.168.32.200:8844', // 刘本地
|
||||
// target: 'http://192.168.33.1:8848', // 社区版开发环境
|
||||
// target: 'http://192.168.32.207:8844', // 刘本地
|
||||
// target: 'http://192.168.32.187:8844', // 谭本地
|
||||
ws: 'ws://192.168.33.46:8844',
|
||||
changeOrigin: true,
|
||||
|
|
Loading…
Reference in New Issue