更多登录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",
|
"name": "jetlinks-vue",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@ant-design/icons-vue": "^7.0.1",
|
||||||
"@liveqing/liveplayer-v3": "^3.7.10",
|
"@liveqing/liveplayer-v3": "^3.7.10",
|
||||||
"@types/marked": "^4.0.8",
|
"@types/marked": "^4.0.8",
|
||||||
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
||||||
|
@ -31,6 +32,7 @@
|
||||||
"nrm": "^1.2.5",
|
"nrm": "^1.2.5",
|
||||||
"pinia": "^2.0.28",
|
"pinia": "^2.0.28",
|
||||||
"rollup-plugin-copy": "^3.4.0",
|
"rollup-plugin-copy": "^3.4.0",
|
||||||
|
"rxjs": "^7.8.1",
|
||||||
"unplugin-auto-import": "^0.12.1",
|
"unplugin-auto-import": "^0.12.1",
|
||||||
"unplugin-vue-components": "^0.22.12",
|
"unplugin-vue-components": "^0.22.12",
|
||||||
"v-clipboard3": "^0.1.4",
|
"v-clipboard3": "^0.1.4",
|
||||||
|
@ -130,9 +132,9 @@
|
||||||
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
||||||
},
|
},
|
||||||
"node_modules/@ant-design/icons-vue": {
|
"node_modules/@ant-design/icons-vue": {
|
||||||
"version": "6.1.0",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
|
||||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
"integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ant-design/colors": "^6.0.0",
|
"@ant-design/colors": "^6.0.0",
|
||||||
"@ant-design/icons-svg": "^4.2.1"
|
"@ant-design/icons-svg": "^4.2.1"
|
||||||
|
@ -1944,6 +1946,32 @@
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
||||||
"integrity": "sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ=="
|
"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": {
|
"node_modules/@vueuse/shared": {
|
||||||
"version": "9.12.0",
|
"version": "9.12.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
||||||
|
@ -2273,6 +2301,18 @@
|
||||||
"vue": ">=3.2.0"
|
"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": {
|
"node_modules/anymatch": {
|
||||||
"version": "3.1.3",
|
"version": "3.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||||
|
@ -3015,6 +3055,62 @@
|
||||||
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
||||||
"dev": true
|
"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": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
@ -7825,11 +7921,15 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/ansicolors": {
|
"node_modules/npm/node_modules/ansicolors": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/ansicolors/-/ansicolors-0.3.2.tgz",
|
||||||
|
"integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/ansistyles": {
|
"node_modules/npm/node_modules/ansistyles": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/ansistyles/-/ansistyles-0.1.3.tgz",
|
||||||
|
"integrity": "sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
@ -7842,6 +7942,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/archy": {
|
"node_modules/npm/node_modules/archy": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/archy/-/archy-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
@ -8054,6 +8156,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/cli-columns": {
|
"node_modules/npm/node_modules/cli-columns": {
|
||||||
"version": "3.1.2",
|
"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,
|
"inBundle": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8195,6 +8299,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/columnify": {
|
"node_modules/npm/node_modules/columnify": {
|
||||||
"version": "1.5.4",
|
"version": "1.5.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/columnify/-/columnify-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8715,6 +8821,10 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/init-package-json": {
|
"node_modules/npm/node_modules/init-package-json": {
|
||||||
"version": "2.0.5",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8747,6 +8857,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/is-cidr": {
|
"node_modules/npm/node_modules/is-cidr": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/is-cidr/-/is-cidr-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "BSD-2-Clause",
|
"license": "BSD-2-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8885,6 +8997,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmaccess": {
|
"node_modules/npm/node_modules/libnpmaccess": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmaccess/-/libnpmaccess-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8899,6 +9013,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmdiff": {
|
"node_modules/npm/node_modules/libnpmdiff": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmdiff/-/libnpmdiff-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8917,6 +9033,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmexec": {
|
"node_modules/npm/node_modules/libnpmexec": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmexec/-/libnpmexec-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8938,6 +9056,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmfund": {
|
"node_modules/npm/node_modules/libnpmfund": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmfund/-/libnpmfund-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8946,6 +9066,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmhook": {
|
"node_modules/npm/node_modules/libnpmhook": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmhook/-/libnpmhook-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8958,6 +9080,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmorg": {
|
"node_modules/npm/node_modules/libnpmorg": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmorg/-/libnpmorg-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8970,6 +9094,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmpack": {
|
"node_modules/npm/node_modules/libnpmpack": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmpack/-/libnpmpack-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8983,6 +9109,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmpublish": {
|
"node_modules/npm/node_modules/libnpmpublish": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmpublish/-/libnpmpublish-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -8998,6 +9126,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmsearch": {
|
"node_modules/npm/node_modules/libnpmsearch": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmsearch/-/libnpmsearch-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9009,6 +9139,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmteam": {
|
"node_modules/npm/node_modules/libnpmteam": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmteam/-/libnpmteam-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9021,6 +9153,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/libnpmversion": {
|
"node_modules/npm/node_modules/libnpmversion": {
|
||||||
"version": "1.2.1",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9322,6 +9456,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/npmlog": {
|
"node_modules/npm/node_modules/node-gyp/node_modules/npmlog": {
|
||||||
"version": "4.1.2",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9380,6 +9516,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/npm-audit-report": {
|
"node_modules/npm/node_modules/npm-audit-report": {
|
||||||
"version": "2.1.5",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9468,6 +9606,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/npm-profile": {
|
"node_modules/npm/node_modules/npm-profile": {
|
||||||
"version": "5.0.4",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9497,11 +9637,15 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/npm-user-validate": {
|
"node_modules/npm/node_modules/npm-user-validate": {
|
||||||
"version": "1.0.1",
|
"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,
|
"inBundle": true,
|
||||||
"license": "BSD-2-Clause"
|
"license": "BSD-2-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/npmlog": {
|
"node_modules/npm/node_modules/npmlog": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9513,6 +9657,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": {
|
"node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet": {
|
||||||
"version": "2.0.0",
|
"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,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -9565,6 +9711,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/opener": {
|
"node_modules/npm/node_modules/opener": {
|
||||||
"version": "1.5.2",
|
"version": "1.5.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/opener/-/opener-1.5.2.tgz",
|
||||||
|
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "(WTFPL OR MIT)",
|
"license": "(WTFPL OR MIT)",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -9723,6 +9871,8 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/qrcode-terminal": {
|
"node_modules/npm/node_modules/qrcode-terminal": {
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
|
||||||
|
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"qrcode-terminal": "bin/qrcode-terminal.js"
|
"qrcode-terminal": "bin/qrcode-terminal.js"
|
||||||
|
@ -10155,11 +10305,15 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/text-table": {
|
"node_modules/npm/node_modules/text-table": {
|
||||||
"version": "0.2.0",
|
"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,
|
"inBundle": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/tiny-relative-date": {
|
"node_modules/npm/node_modules/tiny-relative-date": {
|
||||||
"version": "1.3.0",
|
"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,
|
"inBundle": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
@ -10427,6 +10581,14 @@
|
||||||
"node": ">=6"
|
"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": {
|
"node_modules/only": {
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
||||||
|
@ -11447,10 +11609,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rxjs": {
|
"node_modules/rxjs": {
|
||||||
"version": "7.8.0",
|
"version": "7.8.1",
|
||||||
"resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
|
||||||
"integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
|
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.1.0"
|
"tslib": "^2.1.0"
|
||||||
}
|
}
|
||||||
|
@ -11700,6 +11861,11 @@
|
||||||
"tslib": "^2.0.3"
|
"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": {
|
"node_modules/source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
@ -12929,6 +13095,22 @@
|
||||||
"vue": "^3.2.37"
|
"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": {
|
"node_modules/warning": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||||
|
@ -13349,9 +13531,9 @@
|
||||||
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw=="
|
||||||
},
|
},
|
||||||
"@ant-design/icons-vue": {
|
"@ant-design/icons-vue": {
|
||||||
"version": "6.1.0",
|
"version": "7.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
|
||||||
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
|
"integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@ant-design/colors": "^6.0.0",
|
"@ant-design/colors": "^6.0.0",
|
||||||
"@ant-design/icons-svg": "^4.2.1"
|
"@ant-design/icons-svg": "^4.2.1"
|
||||||
|
@ -14683,6 +14865,25 @@
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.12.0.tgz",
|
||||||
"integrity": "sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ=="
|
"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": {
|
"@vueuse/shared": {
|
||||||
"version": "9.12.0",
|
"version": "9.12.0",
|
||||||
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.12.0.tgz",
|
||||||
|
@ -14975,6 +15176,17 @@
|
||||||
"shallow-equal": "^1.0.0",
|
"shallow-equal": "^1.0.0",
|
||||||
"vue-types": "^3.0.0",
|
"vue-types": "^3.0.0",
|
||||||
"warning": "^4.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": {
|
"anymatch": {
|
||||||
|
@ -15578,6 +15790,36 @@
|
||||||
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
"integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
|
||||||
"dev": true
|
"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": {
|
"combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
|
@ -19297,10 +19539,14 @@
|
||||||
},
|
},
|
||||||
"ansicolors": {
|
"ansicolors": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/ansicolors/-/ansicolors-0.3.2.tgz",
|
||||||
|
"integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"ansistyles": {
|
"ansistyles": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/ansistyles/-/ansistyles-0.1.3.tgz",
|
||||||
|
"integrity": "sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g==",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"aproba": {
|
"aproba": {
|
||||||
|
@ -19311,6 +19557,8 @@
|
||||||
},
|
},
|
||||||
"archy": {
|
"archy": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/archy/-/archy-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"are-we-there-yet": {
|
"are-we-there-yet": {
|
||||||
|
@ -19470,6 +19718,8 @@
|
||||||
},
|
},
|
||||||
"cli-columns": {
|
"cli-columns": {
|
||||||
"version": "3.1.2",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"string-width": "^2.0.0",
|
"string-width": "^2.0.0",
|
||||||
|
@ -19562,6 +19812,8 @@
|
||||||
},
|
},
|
||||||
"columnify": {
|
"columnify": {
|
||||||
"version": "1.5.4",
|
"version": "1.5.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/columnify/-/columnify-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"strip-ansi": "^3.0.0",
|
"strip-ansi": "^3.0.0",
|
||||||
|
@ -19947,6 +20199,8 @@
|
||||||
},
|
},
|
||||||
"init-package-json": {
|
"init-package-json": {
|
||||||
"version": "2.0.5",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"npm-package-arg": "^8.1.5",
|
"npm-package-arg": "^8.1.5",
|
||||||
|
@ -19970,6 +20224,8 @@
|
||||||
},
|
},
|
||||||
"is-cidr": {
|
"is-cidr": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/is-cidr/-/is-cidr-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cidr-regex": "^3.1.1"
|
"cidr-regex": "^3.1.1"
|
||||||
|
@ -20074,6 +20330,8 @@
|
||||||
},
|
},
|
||||||
"libnpmaccess": {
|
"libnpmaccess": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmaccess/-/libnpmaccess-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"aproba": "^2.0.0",
|
"aproba": "^2.0.0",
|
||||||
|
@ -20084,6 +20342,8 @@
|
||||||
},
|
},
|
||||||
"libnpmdiff": {
|
"libnpmdiff": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmdiff/-/libnpmdiff-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@npmcli/disparity-colors": "^1.0.1",
|
"@npmcli/disparity-colors": "^1.0.1",
|
||||||
|
@ -20098,6 +20358,8 @@
|
||||||
},
|
},
|
||||||
"libnpmexec": {
|
"libnpmexec": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmexec/-/libnpmexec-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@npmcli/arborist": "^2.3.0",
|
"@npmcli/arborist": "^2.3.0",
|
||||||
|
@ -20115,6 +20377,8 @@
|
||||||
},
|
},
|
||||||
"libnpmfund": {
|
"libnpmfund": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmfund/-/libnpmfund-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@npmcli/arborist": "^2.5.0"
|
"@npmcli/arborist": "^2.5.0"
|
||||||
|
@ -20122,6 +20386,8 @@
|
||||||
},
|
},
|
||||||
"libnpmhook": {
|
"libnpmhook": {
|
||||||
"version": "6.0.3",
|
"version": "6.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmhook/-/libnpmhook-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"aproba": "^2.0.0",
|
"aproba": "^2.0.0",
|
||||||
|
@ -20130,6 +20396,8 @@
|
||||||
},
|
},
|
||||||
"libnpmorg": {
|
"libnpmorg": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmorg/-/libnpmorg-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"aproba": "^2.0.0",
|
"aproba": "^2.0.0",
|
||||||
|
@ -20138,6 +20406,8 @@
|
||||||
},
|
},
|
||||||
"libnpmpack": {
|
"libnpmpack": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmpack/-/libnpmpack-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@npmcli/run-script": "^1.8.3",
|
"@npmcli/run-script": "^1.8.3",
|
||||||
|
@ -20147,6 +20417,8 @@
|
||||||
},
|
},
|
||||||
"libnpmpublish": {
|
"libnpmpublish": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmpublish/-/libnpmpublish-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"normalize-package-data": "^3.0.2",
|
"normalize-package-data": "^3.0.2",
|
||||||
|
@ -20158,6 +20430,8 @@
|
||||||
},
|
},
|
||||||
"libnpmsearch": {
|
"libnpmsearch": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmsearch/-/libnpmsearch-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"npm-registry-fetch": "^11.0.0"
|
"npm-registry-fetch": "^11.0.0"
|
||||||
|
@ -20165,6 +20439,8 @@
|
||||||
},
|
},
|
||||||
"libnpmteam": {
|
"libnpmteam": {
|
||||||
"version": "2.0.4",
|
"version": "2.0.4",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/libnpmteam/-/libnpmteam-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"aproba": "^2.0.0",
|
"aproba": "^2.0.0",
|
||||||
|
@ -20173,6 +20449,8 @@
|
||||||
},
|
},
|
||||||
"libnpmversion": {
|
"libnpmversion": {
|
||||||
"version": "1.2.1",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@npmcli/git": "^2.0.7",
|
"@npmcli/git": "^2.0.7",
|
||||||
|
@ -20392,6 +20670,8 @@
|
||||||
},
|
},
|
||||||
"npmlog": {
|
"npmlog": {
|
||||||
"version": "4.1.2",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"are-we-there-yet": "~1.1.2",
|
"are-we-there-yet": "~1.1.2",
|
||||||
|
@ -20436,6 +20716,8 @@
|
||||||
},
|
},
|
||||||
"npm-audit-report": {
|
"npm-audit-report": {
|
||||||
"version": "2.1.5",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"chalk": "^4.0.0"
|
"chalk": "^4.0.0"
|
||||||
|
@ -20502,6 +20784,8 @@
|
||||||
},
|
},
|
||||||
"npm-profile": {
|
"npm-profile": {
|
||||||
"version": "5.0.4",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"npm-registry-fetch": "^11.0.0"
|
"npm-registry-fetch": "^11.0.0"
|
||||||
|
@ -20523,10 +20807,14 @@
|
||||||
},
|
},
|
||||||
"npm-user-validate": {
|
"npm-user-validate": {
|
||||||
"version": "1.0.1",
|
"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
|
"bundled": true
|
||||||
},
|
},
|
||||||
"npmlog": {
|
"npmlog": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/npmlog/-/npmlog-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"are-we-there-yet": "^2.0.0",
|
"are-we-there-yet": "^2.0.0",
|
||||||
|
@ -20537,6 +20825,8 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"are-we-there-yet": {
|
"are-we-there-yet": {
|
||||||
"version": "2.0.0",
|
"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,
|
"bundled": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"delegates": "^1.0.0",
|
"delegates": "^1.0.0",
|
||||||
|
@ -20574,6 +20864,8 @@
|
||||||
},
|
},
|
||||||
"opener": {
|
"opener": {
|
||||||
"version": "1.5.2",
|
"version": "1.5.2",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/opener/-/opener-1.5.2.tgz",
|
||||||
|
"integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"p-map": {
|
"p-map": {
|
||||||
|
@ -20688,6 +20980,8 @@
|
||||||
},
|
},
|
||||||
"qrcode-terminal": {
|
"qrcode-terminal": {
|
||||||
"version": "0.12.0",
|
"version": "0.12.0",
|
||||||
|
"resolved": "http://registry.jetlinks.cn/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz",
|
||||||
|
"integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==",
|
||||||
"bundled": true
|
"bundled": true
|
||||||
},
|
},
|
||||||
"qs": {
|
"qs": {
|
||||||
|
@ -20994,10 +21288,14 @@
|
||||||
},
|
},
|
||||||
"text-table": {
|
"text-table": {
|
||||||
"version": "0.2.0",
|
"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
|
"bundled": true
|
||||||
},
|
},
|
||||||
"tiny-relative-date": {
|
"tiny-relative-date": {
|
||||||
"version": "1.3.0",
|
"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
|
"bundled": true
|
||||||
},
|
},
|
||||||
"treeverse": {
|
"treeverse": {
|
||||||
|
@ -21250,6 +21548,14 @@
|
||||||
"mimic-fn": "^2.1.0"
|
"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": {
|
"only": {
|
||||||
"version": "0.0.2",
|
"version": "0.0.2",
|
||||||
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
"resolved": "https://registry.jetlinks.cn/only/-/only-0.0.2.tgz",
|
||||||
|
@ -22037,10 +22343,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rxjs": {
|
"rxjs": {
|
||||||
"version": "7.8.0",
|
"version": "7.8.1",
|
||||||
"resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
|
||||||
"integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
|
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"tslib": "^2.1.0"
|
"tslib": "^2.1.0"
|
||||||
}
|
}
|
||||||
|
@ -22254,6 +22559,11 @@
|
||||||
"tslib": "^2.0.3"
|
"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": {
|
"source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
@ -23156,6 +23466,21 @@
|
||||||
"vue": "^3.2.37"
|
"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": {
|
"warning": {
|
||||||
"version": "4.0.3",
|
"version": "4.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
"event-source-polyfill": "^1.0.31",
|
"event-source-polyfill": "^1.0.31",
|
||||||
"global": "^4.4.0",
|
"global": "^4.4.0",
|
||||||
"jetlinks-store": "^0.0.3",
|
"jetlinks-store": "^0.0.3",
|
||||||
"jetlinks-ui-components": "^1.0.34-12",
|
"jetlinks-ui-components": "^1.0.38",
|
||||||
"js-cookie": "^3.0.1",
|
"js-cookie": "^3.0.1",
|
||||||
"jsencrypt": "^3.3.2",
|
"jsencrypt": "^3.3.2",
|
||||||
"less": "^4.1.3",
|
"less": "^4.1.3",
|
||||||
|
|
|
@ -115,7 +115,7 @@ export const deviceImport = (productId: string, fileUrl: string, autoDeploy: boo
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const deviceExport = (productId: string, type: string, params?: any) => server.get(`/device-instance${!!productId ? `/${productId}` : ''}/export.${type}`, params, {responseType: 'blob'})
|
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是否重复
|
* 验证设备ID是否重复
|
||||||
* @param id 设备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 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`)
|
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">
|
<div class="card-state-content">
|
||||||
<BadgeStatus
|
<BadgeStatus
|
||||||
|
v-if="!customBadge"
|
||||||
:status="status"
|
:status="status"
|
||||||
:text="statusText"
|
:text="statusText"
|
||||||
:statusNames="statusNames"
|
:statusNames="statusNames"
|
||||||
></BadgeStatus>
|
></BadgeStatus>
|
||||||
|
<CustomBadgeStatus
|
||||||
|
v-else
|
||||||
|
:status="status"
|
||||||
|
:text="statusText"
|
||||||
|
:statusNames="statusNames">
|
||||||
|
</CustomBadgeStatus>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -89,6 +96,7 @@
|
||||||
|
|
||||||
<script setup lang="ts" name='CardBox'>
|
<script setup lang="ts" name='CardBox'>
|
||||||
import BadgeStatus from '@/components/BadgeStatus/index.vue';
|
import BadgeStatus from '@/components/BadgeStatus/index.vue';
|
||||||
|
import CustomBadgeStatus from '@/components/BadgeStatus/CustomBadgeStatus.vue'
|
||||||
import color, { getHexColor } from '../BadgeStatus/color';
|
import color, { getHexColor } from '../BadgeStatus/color';
|
||||||
import type { ActionsType } from '@/components/Table';
|
import type { ActionsType } from '@/components/Table';
|
||||||
import { PropType } from 'vue';
|
import { PropType } from 'vue';
|
||||||
|
@ -143,6 +151,10 @@ const props = defineProps({
|
||||||
disabled: {
|
disabled: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
},
|
||||||
|
customBadge:{
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,8 @@ export const defaultBranches = [
|
||||||
},
|
},
|
||||||
then: [],
|
then: [],
|
||||||
executeAnyway: true,
|
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>}
|
* @returns {Promise<never>}
|
||||||
*/
|
*/
|
||||||
const errorHandler = (error: any) => {
|
const errorHandler = (error: any) => {
|
||||||
|
|
||||||
if (error.response) {
|
if (error.response) {
|
||||||
const data = error.response.data
|
const data = error.response.data
|
||||||
const status = error.response.status
|
const status = error.response.status
|
||||||
|
@ -182,7 +181,13 @@ const errorHandler = (error: any) => {
|
||||||
} else if (status === 403) {
|
} else if (status === 403) {
|
||||||
showNotification('Forbidden', (data.message + '').substr(0, 90), '403')
|
showNotification('Forbidden', (data.message + '').substr(0, 90), '403')
|
||||||
} else if (status === 500) {
|
} else if (status === 500) {
|
||||||
showNotification('Server Side Error', (data.message + '').substr(0, 90), '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) {
|
} else if (status === 400) {
|
||||||
showNotification('Request Error', (data.message + '').substr(0, 90), '400')
|
showNotification('Request Error', (data.message + '').substr(0, 90), '400')
|
||||||
} else if (status === 401) {
|
} else if (status === 401) {
|
||||||
|
|
|
@ -8,10 +8,7 @@
|
||||||
:maxlength="64"
|
:maxlength="64"
|
||||||
/>
|
/>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
<j-form-item
|
<j-form-item label="对象ID" :name="['configuration', 'ObjectId']">
|
||||||
label="对象ID"
|
|
||||||
:name="['configuration', 'ObjectId']"
|
|
||||||
>
|
|
||||||
<j-card>
|
<j-card>
|
||||||
<j-form-item label="对象类型">
|
<j-form-item label="对象类型">
|
||||||
<j-input
|
<j-input
|
||||||
|
@ -40,10 +37,13 @@
|
||||||
></j-input>
|
></j-input>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
<j-form-item label="值类型" :name="['configuration', 'valueType']">
|
<j-form-item label="值类型" :name="['configuration', 'valueType']">
|
||||||
<j-select
|
<j-select v-model:value="formData.configuration.valueType">
|
||||||
v-model:value="formData.configuration.valueType"
|
<j-select-option
|
||||||
>
|
v-for="item in bacnetValueType"
|
||||||
<j-select-option v-for="item in bacnetValueType" :key="item" :value="item">{{ item }}</j-select-option>
|
:key="item"
|
||||||
|
:value="item"
|
||||||
|
>{{ item }}</j-select-option
|
||||||
|
>
|
||||||
</j-select>
|
</j-select>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
<j-form-item
|
<j-form-item
|
||||||
|
@ -141,7 +141,11 @@
|
||||||
</j-modal>
|
</j-modal>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<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 { randomString } from '@/utils/utils';
|
||||||
import DeathArea from './DeathArea.vue';
|
import DeathArea from './DeathArea.vue';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
|
@ -1,57 +1,109 @@
|
||||||
<template>
|
<template>
|
||||||
<SaveChild v-if="childVisible" @close-child-save="closeChildSave" :childData="_current" />
|
<SaveChild
|
||||||
|
v-if="childVisible"
|
||||||
|
@close-child-save="closeChildSave"
|
||||||
|
:childData="_current"
|
||||||
|
/>
|
||||||
<div v-else>
|
<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 /> -->
|
<!-- <j-divider /> -->
|
||||||
<JProTable ref="childDeviceRef" :columns="columns" :request="query" :bodyStyle="{
|
<JProTable
|
||||||
padding: 0
|
ref="childDeviceRef"
|
||||||
}" :defaultParams="{
|
:columns="columns"
|
||||||
terms: [
|
:request="query"
|
||||||
{
|
:bodyStyle="{
|
||||||
column: 'parentId',
|
padding: 0,
|
||||||
value: detail?.id || '',
|
}"
|
||||||
termType: 'eq',
|
:defaultParams="{
|
||||||
},
|
terms: [
|
||||||
],
|
{
|
||||||
}" :rowSelection="{
|
column: 'parentId',
|
||||||
selectedRowKeys: _selectedRowKeys,
|
value: detail?.id || '',
|
||||||
onChange: onSelectChange,
|
termType: 'eq',
|
||||||
}" :params="params" :model="'TABLE'">
|
},
|
||||||
|
],
|
||||||
|
}"
|
||||||
|
:rowSelection="{
|
||||||
|
selectedRowKeys: _selectedRowKeys,
|
||||||
|
onChange: onSelectChange,
|
||||||
|
}"
|
||||||
|
:params="params"
|
||||||
|
:model="'TABLE'"
|
||||||
|
>
|
||||||
<template #rightExtraRender>
|
<template #rightExtraRender>
|
||||||
<j-space>
|
<j-space>
|
||||||
<PermissionButton type="primary" v-if="detail?.accessProvider === 'official-edge-gateway'
|
<PermissionButton
|
||||||
" hasPermission="device/Instance:update" @click="
|
type="primary"
|
||||||
_current = {};
|
v-if="
|
||||||
childVisible = true;
|
detail?.accessProvider === 'official-edge-gateway'
|
||||||
">新增并绑定</PermissionButton>
|
"
|
||||||
<PermissionButton type="primary" @click="visible = true" hasPermission="device/Instance:update">
|
hasPermission="device/Instance:update"
|
||||||
绑定</PermissionButton>
|
@click="
|
||||||
<PermissionButton type="primary" hasPermission="device/Instance:update" :popConfirm="{
|
_current = {};
|
||||||
title: '确定解绑吗?',
|
childVisible = true;
|
||||||
onConfirm: handleUnBind,
|
"
|
||||||
}">批量解除</PermissionButton>
|
>新增并绑定</PermissionButton
|
||||||
|
>
|
||||||
|
<PermissionButton
|
||||||
|
type="primary"
|
||||||
|
@click="visible = true"
|
||||||
|
hasPermission="device/Instance:update"
|
||||||
|
>
|
||||||
|
绑定</PermissionButton
|
||||||
|
>
|
||||||
|
<PermissionButton
|
||||||
|
type="primary"
|
||||||
|
hasPermission="device/Instance:update"
|
||||||
|
:popConfirm="{
|
||||||
|
title: '确定解绑吗?',
|
||||||
|
onConfirm: handleUnBind,
|
||||||
|
}"
|
||||||
|
>批量解除</PermissionButton
|
||||||
|
>
|
||||||
</j-space>
|
</j-space>
|
||||||
</template>
|
</template>
|
||||||
<template #registryTime="slotProps">
|
<template #registryTime="slotProps">
|
||||||
{{
|
{{
|
||||||
slotProps.registryTime
|
slotProps.registryTime
|
||||||
? moment(slotProps.registryTime).format(
|
? moment(slotProps.registryTime).format(
|
||||||
'YYYY-MM-DD HH:mm:ss',
|
'YYYY-MM-DD HH:mm:ss',
|
||||||
)
|
)
|
||||||
: ''
|
: ''
|
||||||
}}
|
}}
|
||||||
</template>
|
</template>
|
||||||
<template #state="slotProps">
|
<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>
|
||||||
<template #action="slotProps">
|
<template #action="slotProps">
|
||||||
<j-space :size="16">
|
<j-space :size="16">
|
||||||
<template v-for="i in getActions(slotProps, 'table')" :key="i.key">
|
<template
|
||||||
<PermissionButton v-if="i.key !== 'update' || detail.accessProvider === 'official-edge-gateway'"
|
v-for="i in getActions(slotProps, 'table')"
|
||||||
:disabled="i.disabled" :popConfirm="i.popConfirm" :tooltip="{
|
:key="i.key"
|
||||||
|
>
|
||||||
|
<PermissionButton
|
||||||
|
v-if="
|
||||||
|
i.key !== 'update' ||
|
||||||
|
detail.accessProvider ===
|
||||||
|
'official-edge-gateway'
|
||||||
|
"
|
||||||
|
:disabled="i.disabled"
|
||||||
|
:popConfirm="i.popConfirm"
|
||||||
|
:tooltip="{
|
||||||
...i.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>
|
<template #icon>
|
||||||
<AIcon :type="i.icon" />
|
<AIcon :type="i.icon" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -60,20 +112,31 @@
|
||||||
</j-space>
|
</j-space>
|
||||||
</template>
|
</template>
|
||||||
</JProTable>
|
</JProTable>
|
||||||
<BindChildDevice v-if="visible" :parentIds="parentIds" @change="closeBindDevice" />
|
<BindChildDevice
|
||||||
|
v-if="visible"
|
||||||
|
:parentIds="parentIds"
|
||||||
|
@change="closeBindDevice"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import type { ActionsType } from '@/components/Table';
|
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 { useInstanceStore } from '@/store/instance';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import BindChildDevice from './BindChildDevice/index.vue';
|
import BindChildDevice from './BindChildDevice/index.vue';
|
||||||
import { usePermissionStore } from '@/store/permission';
|
import { usePermissionStore } from '@/store/permission';
|
||||||
import SaveChild from './SaveChild/index.vue';
|
import SaveChild from './SaveChild/index.vue';
|
||||||
import { onlyMessage } from '@/utils/comm';
|
import { onlyMessage } from '@/utils/comm';
|
||||||
|
import { cloneDeep } from 'lodash-es';
|
||||||
|
|
||||||
const instanceStore = useInstanceStore();
|
const instanceStore = useInstanceStore();
|
||||||
const { detail } = storeToRefs(instanceStore);
|
const { detail } = storeToRefs(instanceStore);
|
||||||
|
@ -93,7 +156,7 @@ const params = ref<Record<string, any>>({});
|
||||||
const _selectedRowKeys = ref<string[]>([]);
|
const _selectedRowKeys = ref<string[]>([]);
|
||||||
const visible = ref<boolean>(false);
|
const visible = ref<boolean>(false);
|
||||||
const _current = ref({});
|
const _current = ref({});
|
||||||
const parentIds = ref<any[]>([instanceStore.detail.id])
|
const parentIds = ref<any[]>([instanceStore.detail.id]);
|
||||||
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
|
@ -195,13 +258,21 @@ const getActions = (data: Partial<Record<string, any>>): ActionsType[] => {
|
||||||
data.id,
|
data.id,
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
if (
|
||||||
const res = await deleteDeviceMapping(
|
instanceStore.current.accessProvider ===
|
||||||
detail.value.id,
|
'official-edge-gateway'
|
||||||
{ ids: [data.id] }
|
) {
|
||||||
)
|
const res = await deleteDeviceMapping(detail.value.id, {
|
||||||
|
ids: [data.id],
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (resp.status === 200) {
|
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();
|
childDeviceRef.value?.reload();
|
||||||
onlyMessage('操作成功!');
|
onlyMessage('操作成功!');
|
||||||
}
|
}
|
||||||
|
@ -242,10 +313,9 @@ const handleUnBind = async () => {
|
||||||
_selectedRowKeys.value,
|
_selectedRowKeys.value,
|
||||||
);
|
);
|
||||||
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
if (instanceStore.current.accessProvider === 'official-edge-gateway') {
|
||||||
const res = await deleteDeviceMapping(
|
const res = await deleteDeviceMapping(detail.value.id, {
|
||||||
detail.value.id,
|
ids: [_selectedRowKeys.value],
|
||||||
{ ids: [_selectedRowKeys.value] }
|
});
|
||||||
)
|
|
||||||
}
|
}
|
||||||
if (resp.status === 200) {
|
if (resp.status === 200) {
|
||||||
onlyMessage('操作成功!');
|
onlyMessage('操作成功!');
|
||||||
|
@ -275,8 +345,8 @@ const closeChildSave = () => {
|
||||||
childVisible.value = false;
|
childVisible.value = false;
|
||||||
};
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log(detail.value.accessProvider)
|
console.log(detail.value.accessProvider);
|
||||||
})
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
</div>
|
</div>
|
||||||
</j-col>
|
</j-col>
|
||||||
<j-col :span="9">
|
<j-col :span="9">
|
||||||
<h6>执行结果:</h6>
|
<h4>执行结果:</h4>
|
||||||
<span class="execute-result">
|
<span class="execute-result">
|
||||||
{{ executeResult }}
|
{{ executeResult }}
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
</div>
|
</div>
|
||||||
</j-col>
|
</j-col>
|
||||||
<j-col :span="9">
|
<j-col :span="9">
|
||||||
<h6>执行结果:</h6>
|
<h4>执行结果:</h4>
|
||||||
<span
|
<span
|
||||||
:ref="`result${func.id}Ref`"
|
:ref="`result${func.id}Ref`"
|
||||||
class="execute-result"
|
class="execute-result"
|
||||||
|
|
|
@ -151,7 +151,7 @@ const queryInkling = () => {
|
||||||
queryPluginAccessDetail(instanceStore.current?.accessId).then(async res => {
|
queryPluginAccessDetail(instanceStore.current?.accessId).then(async res => {
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
channelId.value = res.result.channelId
|
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) {
|
if (pluginRes.success) {
|
||||||
inklingDeviceId.value = pluginRes.result?.externalId
|
inklingDeviceId.value = pluginRes.result?.externalId
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<pro-search
|
<pro-search
|
||||||
class="device-running-search"
|
class="device-running-search"
|
||||||
|
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
target="device-instance-running-events"
|
target="device-instance-running-events"
|
||||||
@search="handleSearch"
|
@search="handleSearch"
|
||||||
|
@ -14,6 +13,11 @@
|
||||||
:params="params"
|
:params="params"
|
||||||
:bodyStyle="{ padding: '0 0 0 24px' }"
|
: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">
|
<template #timestamp="slotProps">
|
||||||
{{ dayjs(slotProps.timestamp).format('YYYY-MM-DD HH:mm:ss') }}
|
{{ dayjs(slotProps.timestamp).format('YYYY-MM-DD HH:mm:ss') }}
|
||||||
</template>
|
</template>
|
||||||
|
@ -23,8 +27,16 @@
|
||||||
</j-button>
|
</j-button>
|
||||||
</template>
|
</template>
|
||||||
</JProTable>
|
</JProTable>
|
||||||
<j-modal :width="600" v-model:visible="visible" title="详情" class="device-running-event-modal">
|
<j-modal
|
||||||
<JsonViewer :value="info" style="max-height: calc(100vh - 400px);overflow: auto;"/>
|
: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>
|
<template #footer>
|
||||||
<j-button type="primary" @click="visible = false">关闭</j-button>
|
<j-button type="primary" @click="visible = false">关闭</j-button>
|
||||||
</template>
|
</template>
|
||||||
|
@ -36,6 +48,7 @@ import dayjs from 'dayjs';
|
||||||
import { getEventList } from '@/api/device/instance';
|
import { getEventList } from '@/api/device/instance';
|
||||||
import { useInstanceStore } from '@/store/instance';
|
import { useInstanceStore } from '@/store/instance';
|
||||||
import JsonViewer from 'vue-json-viewer';
|
import JsonViewer from 'vue-json-viewer';
|
||||||
|
import { cloneDeep } from 'lodash-es';
|
||||||
|
|
||||||
const events = defineProps({
|
const events = defineProps({
|
||||||
data: {
|
data: {
|
||||||
|
@ -46,45 +59,65 @@ const events = defineProps({
|
||||||
const instanceStore = useInstanceStore();
|
const instanceStore = useInstanceStore();
|
||||||
|
|
||||||
const defaultColumns = [
|
const defaultColumns = [
|
||||||
{
|
{
|
||||||
title: '时间',
|
title: '时间',
|
||||||
dataIndex: 'timestamp',
|
dataIndex: 'timestamp',
|
||||||
key: 'timestamp',
|
key: 'timestamp',
|
||||||
scopedSlots: true,
|
scopedSlots: true,
|
||||||
search: {
|
search: {
|
||||||
type: 'date',
|
type: 'date',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
{
|
||||||
{
|
title: '操作',
|
||||||
title: '操作',
|
dataIndex: 'action',
|
||||||
dataIndex: 'action',
|
key: 'action',
|
||||||
key: 'action',
|
scopedSlots: true,
|
||||||
scopedSlots: true,
|
},
|
||||||
}
|
];
|
||||||
]
|
|
||||||
|
|
||||||
const columns = ref<Array<Record<string, any>>>([...defaultColumns]);
|
const columns = ref<Array<Record<string, any>>>([...defaultColumns]);
|
||||||
const params = ref<Record<string, any>>({});
|
const params = ref<Record<string, any>>({});
|
||||||
const visible = ref<boolean>(false);
|
const visible = ref<boolean>(false);
|
||||||
const info = ref<Record<string, any>>({});
|
const info = ref<Record<string, any>>({});
|
||||||
|
const objectKey = ref<Array>([]);
|
||||||
|
|
||||||
const _getEventList = (_params: any) =>
|
const _getEventList = (_params: any) =>
|
||||||
getEventList(instanceStore.current.id || '', events.data.id || '', _params);
|
getEventList(instanceStore.current.id || '', events.data.id || '', _params);
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
columns.value = [...defaultColumns]
|
columns.value = [...defaultColumns];
|
||||||
if (events.data?.valueType?.type === 'object') {
|
if (events.data?.valueType?.type === 'object') {
|
||||||
(events.data.valueType?.properties || []).reverse().map((i: any) => {
|
const eventProperties = cloneDeep(events.data.valueType?.properties || [])
|
||||||
columns.value.splice(0, 0, {
|
eventProperties.reverse().map((i: any) => {
|
||||||
key: i.id,
|
if (i.valueType?.type === 'object') {
|
||||||
title: i.name,
|
objectKey.value.push({
|
||||||
dataIndex: `${i.id}_format`,
|
key:i.id,
|
||||||
search: {
|
dataIndex: `${i.id}_format`
|
||||||
type: i?.valueType?.type || 'string',
|
});
|
||||||
rename: i.id
|
columns.value.splice(0, 0, {
|
||||||
},
|
key: i.id,
|
||||||
ellipsis: true,
|
title: i.name,
|
||||||
});
|
dataIndex: `${i.id}_format`,
|
||||||
|
search: {
|
||||||
|
type: i?.valueType?.type || 'string',
|
||||||
|
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 {
|
} else {
|
||||||
columns.value.splice(0, 0, {
|
columns.value.splice(0, 0, {
|
||||||
|
@ -99,8 +132,8 @@ const handleSearch = (_params: any) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const detail = (_info: any) => {
|
const detail = (_info: any) => {
|
||||||
info.value = _info
|
info.value = _info;
|
||||||
visible.value = true
|
visible.value = true;
|
||||||
// Modal.info({
|
// Modal.info({
|
||||||
// title: () => '详情',
|
// title: () => '详情',
|
||||||
// width: 850,
|
// width: 850,
|
||||||
|
|
|
@ -51,7 +51,8 @@
|
||||||
import { queryNoPagingPost } from '@/api/device/product';
|
import { queryNoPagingPost } from '@/api/device/product';
|
||||||
import { downloadFileByUrl } from '@/utils/utils';
|
import { downloadFileByUrl } from '@/utils/utils';
|
||||||
import { paramsEncodeQuery } from '@/utils/encodeQuery';
|
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 emit = defineEmits(['close']);
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -88,23 +89,26 @@ const productName = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const handleOk = async () => {
|
const handleOk = async () => {
|
||||||
console.log(props.data)
|
|
||||||
const params = paramsEncodeQuery(props.data);
|
const params = paramsEncodeQuery(props.data);
|
||||||
// downloadFile(
|
// downloadFile(
|
||||||
// deviceExport(modelRef.product || '', modelRef.fileType),
|
// deviceExport(modelRef.product || '', modelRef.fileType),
|
||||||
// params,
|
// params,
|
||||||
// );
|
// );
|
||||||
const res: any = await deviceExport(
|
// const res: any = await deviceExport(
|
||||||
modelRef.product || '',
|
// modelRef.product || '',
|
||||||
modelRef.fileType,
|
// modelRef.fileType,
|
||||||
params
|
// params
|
||||||
);
|
// );
|
||||||
if (res) {
|
console.log(props.data,params)
|
||||||
const blob = new Blob([res], { type: modelRef.fileType });
|
window.open(`${deviceExportPath( modelRef.product || '',modelRef.fileType)}?X-Access-Token=${getToken()
|
||||||
const url = URL.createObjectURL(blob);
|
}`)
|
||||||
downloadFileByUrl(url, `${productName.value ? (productName.value + '下设备') : '设备实例'}`, modelRef.fileType);
|
// if (res) {
|
||||||
emit('close');
|
// 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 = () => {
|
const handleCancel = () => {
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang='ts' name='DeviceImportFile'>
|
<script setup lang='ts' name='DeviceImportFile'>
|
||||||
|
import {inject,Ref} from 'vue'
|
||||||
import { FILE_UPLOAD } from '@/api/comm';
|
import { FILE_UPLOAD } from '@/api/comm';
|
||||||
import { TOKEN_KEY } from '@/utils/variable';
|
import { TOKEN_KEY } from '@/utils/variable';
|
||||||
import { LocalStore, onlyMessage } from '@/utils/comm';
|
import { LocalStore, onlyMessage } from '@/utils/comm';
|
||||||
|
@ -96,10 +97,10 @@ const modelRef = reactive({
|
||||||
});
|
});
|
||||||
|
|
||||||
const importLoading = ref<boolean>(false);
|
const importLoading = ref<boolean>(false);
|
||||||
const flag = ref<boolean>(false);
|
const flag = inject("flag") as Ref<boolean>;
|
||||||
const count = ref<number>(0);
|
const count = ref<number>(0);
|
||||||
const errCount = ref<number>(0);
|
|
||||||
|
|
||||||
|
const errCount = ref<number>(0);
|
||||||
const errMessage = ref<string>('');
|
const errMessage = ref<string>('');
|
||||||
const disabled = ref(false);
|
const disabled = ref(false);
|
||||||
|
|
||||||
|
@ -140,6 +141,7 @@ const submitData = async (fileUrl: string) => {
|
||||||
errCount.value = 0;
|
errCount.value = 0;
|
||||||
const autoDeploy = !!modelRef?.file?.autoDeploy || false;
|
const autoDeploy = !!modelRef?.file?.autoDeploy || false;
|
||||||
importLoading.value = true;
|
importLoading.value = true;
|
||||||
|
flag.value = true;
|
||||||
let dt = 0;
|
let dt = 0;
|
||||||
let et = 0;
|
let et = 0;
|
||||||
const source = new EventSourcePolyfill(
|
const source = new EventSourcePolyfill(
|
||||||
|
@ -159,11 +161,12 @@ const submitData = async (fileUrl: string) => {
|
||||||
errCount.value = et;
|
errCount.value = et;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
flag.value=false;
|
||||||
disabled.value = false;
|
disabled.value = false;
|
||||||
};
|
};
|
||||||
source.onerror = (e: { status: number }) => {
|
source.onerror = (e: { status: number }) => {
|
||||||
if (e.status === 403) errMessage.value = '暂无权限,请联系管理员';
|
if (e.status === 403) errMessage.value = '暂无权限,请联系管理员';
|
||||||
flag.value = false;
|
flag.value= false;
|
||||||
disabled.value = false;
|
disabled.value = false;
|
||||||
source.close();
|
source.close();
|
||||||
};
|
};
|
||||||
|
@ -182,6 +185,7 @@ const uploadChange = async (info: Record<string, any>) => {
|
||||||
disabled.value = false;
|
disabled.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang='less'>
|
<style scoped lang='less'>
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
</j-form>
|
</j-form>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<File v-if='importData.type ==="file"' :product='importData.productId' />
|
<File v-if='importData.type ==="file"' :product='importData.productId' />
|
||||||
<Plugin v-else :accessId='productDetail.accessId' @change='pluginChange'/>
|
<Plugin v-else :accessId='productDetail.accessId' @change='pluginChange'/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
<j-button v-if='steps === 0' @click='cancel' >取消</j-button>
|
<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 !== 0' @click='prev' >上一步</j-button>
|
||||||
<j-button v-if='steps !== 2' @click='next' type='primary'>下一步</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>
|
</template>
|
||||||
</j-modal>
|
</j-modal>
|
||||||
<j-modal
|
<j-modal
|
||||||
|
@ -55,27 +55,25 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang='ts' setup name='DeviceImport'>
|
<script lang='ts' setup name='DeviceImport'>
|
||||||
|
import {provide} from 'vue'
|
||||||
import Product from './product.vue'
|
import Product from './product.vue'
|
||||||
import { getImage, onlyMessage } from '@/utils/comm'
|
import { getImage, onlyMessage } from '@/utils/comm'
|
||||||
import File from './file.vue'
|
import File from './file.vue'
|
||||||
import Plugin from './plugin.vue'
|
import Plugin from './plugin.vue'
|
||||||
import { importDeviceByPlugin } from '@/api/device/instance'
|
import { importDeviceByPlugin } from '@/api/device/instance'
|
||||||
|
|
||||||
const emit = defineEmits(['cancel', 'save']);
|
const emit = defineEmits(['cancel', 'save']);
|
||||||
|
|
||||||
const steps = ref(0) // 步骤
|
const steps = ref(0) // 步骤
|
||||||
|
|
||||||
const importData = reactive<{productId?: string, type?: string}>({
|
const importData = reactive<{productId?: string, type?: string}>({
|
||||||
productId: undefined,
|
productId: undefined,
|
||||||
type: undefined,
|
type: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
const productDetail = ref()
|
const productDetail = ref()
|
||||||
const deviceList = ref<any[]>([])
|
const deviceList = ref<any[]>([])
|
||||||
const visible = ref(true)
|
const visible = ref(true)
|
||||||
const importVisible = ref(false)
|
const importVisible = ref(false)
|
||||||
const count = ref(0)
|
const count = ref(0)
|
||||||
|
const flag = ref<boolean>(false)
|
||||||
|
provide("flag",flag)
|
||||||
const typeOptions = computed(() => {
|
const typeOptions = computed(() => {
|
||||||
const array = [
|
const array = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -720,6 +720,7 @@ const getActions = (
|
||||||
const resp = await _delete(data.id);
|
const resp = await _delete(data.id);
|
||||||
if (resp.status === 200) {
|
if (resp.status === 200) {
|
||||||
onlyMessage('操作成功!');
|
onlyMessage('操作成功!');
|
||||||
|
_selectedRowKeys.value=[];
|
||||||
instanceRef.value?.reload();
|
instanceRef.value?.reload();
|
||||||
} else {
|
} else {
|
||||||
onlyMessage('操作失败!', 'error');
|
onlyMessage('操作失败!', 'error');
|
||||||
|
|
|
@ -327,7 +327,7 @@ const handleClick = (data: any) => {
|
||||||
const add = () => {
|
const add = () => {
|
||||||
const url = menuStore.hasMenu('link/AccessConfig/Detail');
|
const url = menuStore.hasMenu('link/AccessConfig/Detail');
|
||||||
if (url) {
|
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) => {
|
tab.onTabSaveSuccess = (value: any) => {
|
||||||
if (value.status === 200) {
|
if (value.status === 200) {
|
||||||
tableRef.value.reload();
|
tableRef.value.reload();
|
||||||
|
|
|
@ -173,7 +173,7 @@ const queryInkingDevices = (data: string[]) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await getInkingDevices(data,props.pluginId);
|
const res = await getInkingDevices(data,props.accessId);
|
||||||
if (res) {
|
if (res) {
|
||||||
disabledKeys.value = res.result?.map((item) => item.externalId);
|
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 { saveMetadata } from "@/api/device/instance";
|
||||||
import type { DeviceInstance } from "../../Instance/typings";
|
import type { DeviceInstance } from "../../Instance/typings";
|
||||||
import type { DeviceMetadata, MetadataItem, MetadataType, ProductItem } from "../../Product/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 filterProductMetadata = (data: any[], productMetaData: any[]) => {
|
||||||
const ids = productMetaData.map((item: any) => item.id)
|
const ids = productMetaData.map((item: any) => item.id)
|
||||||
|
@ -69,7 +69,28 @@ export const asyncUpdateMetadata = (
|
||||||
case 'product':
|
case 'product':
|
||||||
return saveProductMetadata(data);
|
return saveProductMetadata(data);
|
||||||
case 'device':
|
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: '注册时间',
|
title: '注册时间',
|
||||||
|
|
|
@ -10,9 +10,7 @@
|
||||||
:maxCount="1"
|
:maxCount="1"
|
||||||
:showUploadList="false"
|
:showUploadList="false"
|
||||||
@change="uploadChange"
|
@change="uploadChange"
|
||||||
:accept="
|
:accept="props?.file ? `.${props?.file}` : '.xlsx'"
|
||||||
props?.file ? `.${props?.file}` : '.xlsx'
|
|
||||||
"
|
|
||||||
:before-upload="beforeUpload"
|
:before-upload="beforeUpload"
|
||||||
>
|
>
|
||||||
<j-button>
|
<j-button>
|
||||||
|
@ -28,20 +26,35 @@
|
||||||
</j-space>
|
</j-space>
|
||||||
</div>
|
</div>
|
||||||
</j-space>
|
</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-if="flag" status="processing" text="进行中" />
|
||||||
<j-badge v-else status="success" text="已完成" />
|
<j-badge v-else status="success" text="已完成" />
|
||||||
<span>总数量:{{ count }}</span>
|
<span>总数量:{{ count }}</span>
|
||||||
<p style="color: red">{{ errMessage }}</p>
|
<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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { FILE_UPLOAD } from '@/api/comm';
|
import { FILE_UPLOAD } from '@/api/comm';
|
||||||
import { TOKEN_KEY } from '@/utils/variable';
|
|
||||||
import { LocalStore, onlyMessage } from '@/utils/comm';
|
import { LocalStore, onlyMessage } from '@/utils/comm';
|
||||||
import { downloadFileByUrl } from '@/utils/utils';
|
import { downloadFileByUrl } from '@/utils/utils';
|
||||||
import { exportCard, _import } from '@/api/iot-card/cardManagement';
|
import { exportCard, _import } from '@/api/iot-card/cardManagement';
|
||||||
|
import { TOKEN_KEY, BASE_API_PATH } from '@/utils/variable';
|
||||||
|
import { getToken } from '@/utils/comm';
|
||||||
|
|
||||||
type Emits = {
|
type Emits = {
|
||||||
(e: 'update:modelValue', data: string[]): void;
|
(e: 'update:modelValue', data: string[]): void;
|
||||||
|
@ -63,11 +76,16 @@ const props = defineProps({
|
||||||
default: 'xlsx',
|
default: 'xlsx',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
type ImportStatus = 'wait' | 'importing' | 'done';
|
||||||
|
const importStatus = ref<ImportStatus>('wait'); //导入进度
|
||||||
const importLoading = ref<boolean>(false);
|
const importLoading = ref<boolean>(false);
|
||||||
const flag = ref<boolean>(false);
|
const flag = ref<boolean>(false);
|
||||||
const count = ref<number>(0);
|
const count = ref<number>(0);
|
||||||
const errMessage = ref<string>('');
|
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 downFile = async (type: string) => {
|
||||||
const res: any = await exportCard(type);
|
const res: any = await exportCard(type);
|
||||||
|
@ -96,20 +114,60 @@ const beforeUpload = (_file: any) => {
|
||||||
const uploadChange = async (info: Record<string, any>) => {
|
const uploadChange = async (info: Record<string, any>) => {
|
||||||
importLoading.value = true;
|
importLoading.value = true;
|
||||||
if (info.file.status === 'done') {
|
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: '' };
|
const resp: any = info.file.response || { result: '' };
|
||||||
flag.value = true;
|
handleImport(resp);
|
||||||
_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;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
|
||||||
|
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')"
|
:actions="getActions(slotProps, 'card')"
|
||||||
v-bind="slotProps"
|
v-bind="slotProps"
|
||||||
:active="_selectedRowKeys.includes(slotProps.id)"
|
:active="_selectedRowKeys.includes(slotProps.id)"
|
||||||
:status="slotProps.cardStateType.value"
|
:status="slotProps.cardStateType?.value"
|
||||||
:statusText="slotProps.cardStateType.text"
|
:statusText="slotProps.cardStateType?.text"
|
||||||
:statusNames="{
|
:statusNames="{
|
||||||
using: 'processing',
|
using: 'processing',
|
||||||
toBeActivated: 'default',
|
toBeActivated: 'default',
|
||||||
|
@ -183,14 +183,6 @@
|
||||||
</j-row>
|
</j-row>
|
||||||
<j-divider style="margin: 12px 0" />
|
<j-divider style="margin: 12px 0" />
|
||||||
<div class="content-bottom">
|
<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>
|
||||||
<div class="progress-text">
|
<div class="progress-text">
|
||||||
<div>
|
<div>
|
||||||
|
@ -240,42 +232,6 @@
|
||||||
<span>{{ item?.text }}</span>
|
<span>{{ item?.text }}</span>
|
||||||
</template>
|
</template>
|
||||||
</PermissionButton>
|
</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>
|
</template>
|
||||||
</CardBox>
|
</CardBox>
|
||||||
</template>
|
</template>
|
||||||
|
@ -532,6 +488,7 @@ const columns = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '总流量',
|
title: '总流量',
|
||||||
|
key: 'totalFlow',
|
||||||
dataIndex: 'totalFlow',
|
dataIndex: 'totalFlow',
|
||||||
width: 120,
|
width: 120,
|
||||||
scopedSlots: true,
|
scopedSlots: true,
|
||||||
|
@ -723,6 +680,7 @@ const getActions = (
|
||||||
const resp: any = await del(data.id);
|
const resp: any = await del(data.id);
|
||||||
if (resp.status === 200) {
|
if (resp.status === 200) {
|
||||||
onlyMessage('操作成功');
|
onlyMessage('操作成功');
|
||||||
|
_selectedRowKeys.value=[];
|
||||||
cardManageRef.value?.reload();
|
cardManageRef.value?.reload();
|
||||||
} else {
|
} else {
|
||||||
onlyMessage('操作失败!', 'error');
|
onlyMessage('操作失败!', 'error');
|
||||||
|
@ -777,6 +735,9 @@ const cancelSelect = () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleClick = (dt: any) => {
|
const handleClick = (dt: any) => {
|
||||||
|
if(!dt?.cardStateType){
|
||||||
|
return
|
||||||
|
}
|
||||||
if (isCheck.value) {
|
if (isCheck.value) {
|
||||||
if (_selectedRowKeys.value.includes(dt.id)) {
|
if (_selectedRowKeys.value.includes(dt.id)) {
|
||||||
const _index = _selectedRowKeys.value.findIndex((i) => i === dt.id);
|
const _index = _selectedRowKeys.value.findIndex((i) => i === dt.id);
|
||||||
|
|
|
@ -209,7 +209,13 @@ const columns = [
|
||||||
width: 150,
|
width: 150,
|
||||||
search: {
|
search: {
|
||||||
type: 'select',
|
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,
|
scopedSlots: true,
|
||||||
},
|
},
|
||||||
|
@ -378,32 +384,42 @@ const getDetails = (slotProps: Partial<Record<string, any>>) => {
|
||||||
} else {
|
} else {
|
||||||
!!cluster[0].configuration.publicHos && (head = '公网:');
|
!!cluster[0].configuration.publicHos && (head = '公网:');
|
||||||
}
|
}
|
||||||
if( !shareCluster && cluster.length > 1){
|
if (!shareCluster && cluster.length > 1) {
|
||||||
const contentItem2 = (cluster[0].configuration.publicHost ||
|
const contentItem2 =
|
||||||
cluster[0].configuration.remoteHost) +
|
(cluster[0].configuration.publicHost ||
|
||||||
':' +
|
cluster[0].configuration.remoteHost) +
|
||||||
(cluster[0].configuration.publicPort ||
|
':' +
|
||||||
cluster[0].configuration.remotePort)
|
(cluster[0].configuration.publicPort ||
|
||||||
let headItme2 ='远程'
|
cluster[0].configuration.remotePort);
|
||||||
!!cluster[0].configuration.publicHos && (headItme2 = '公网:');
|
let headItme2 = '远程';
|
||||||
if(cluster.length > 2){
|
!!cluster[0].configuration.publicHos && (headItme2 = '公网:');
|
||||||
return head + headers + content + " " + headItme2 + headers + contentItem2 + '。。。'
|
if (cluster.length > 2) {
|
||||||
}
|
return (
|
||||||
return head + headers + content + " " + headItme2 + headers + contentItem2
|
head +
|
||||||
|
headers +
|
||||||
|
content +
|
||||||
|
' ' +
|
||||||
|
headItme2 +
|
||||||
|
headers +
|
||||||
|
contentItem2 +
|
||||||
|
'。。。'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
head + headers + content + ' ' + headItme2 + headers + contentItem2
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return head + headers + content;
|
return head + headers + content;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// const getSupports = async () => {
|
||||||
|
// const res: any = await supports();
|
||||||
const getSupports = async () => {
|
// options.value = res.result.map((item: any) => ({
|
||||||
const res: any = await supports();
|
// value: item.id,
|
||||||
options.value = res.result.map((item: any) => ({
|
// label: item.name,
|
||||||
value: item.id,
|
// }));
|
||||||
label: item.name,
|
// };
|
||||||
}));
|
// getSupports();
|
||||||
};
|
|
||||||
getSupports();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索
|
* 搜索
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
</template>
|
</template>
|
||||||
<template #card="slotProps">
|
<template #card="slotProps">
|
||||||
<CardBox
|
<CardBox
|
||||||
|
@click="()=>jumpDetail(slotProps)"
|
||||||
:value="slotProps"
|
:value="slotProps"
|
||||||
:actions="getActions(slotProps, 'card')"
|
:actions="getActions(slotProps, 'card')"
|
||||||
v-bind="slotProps"
|
v-bind="slotProps"
|
||||||
|
@ -450,4 +451,8 @@ getProductList();
|
||||||
const getProductName = (pid: string) => {
|
const getProductName = (pid: string) => {
|
||||||
return productList.value.find((f: any) => f.value === pid)?.label;
|
return productList.value.find((f: any) => f.value === pid)?.label;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const jumpDetail = (data:any) =>{
|
||||||
|
menuStory.jumpPage('device/Instance/Detail', { id: data.id });
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
:key="index"
|
:key="index"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
>
|
>
|
||||||
<div
|
<Ellipsis
|
||||||
style="
|
style="
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
style="height: 40px"
|
style="height: 40px"
|
||||||
alt=""
|
alt=""
|
||||||
/>{{ item.label }}
|
/>{{ item.label }}
|
||||||
</div>
|
</Ellipsis>
|
||||||
</j-radio-button>
|
</j-radio-button>
|
||||||
</j-radio-group>
|
</j-radio-group>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
|
|
|
@ -78,9 +78,16 @@
|
||||||
<div class="content-des-title">
|
<div class="content-des-title">
|
||||||
关联场景联动
|
关联场景联动
|
||||||
</div>
|
</div>
|
||||||
<Ellipsis style='margin-bottom: 18px;'
|
<Ellipsis style="margin-bottom: 18px"
|
||||||
><div>
|
><div>
|
||||||
{{ (slotProps?.scene || []).map((item: any) => item?.name).join(',') || '' }}
|
{{
|
||||||
|
(slotProps?.scene || [])
|
||||||
|
.map(
|
||||||
|
(item: any) =>
|
||||||
|
item?.name,
|
||||||
|
)
|
||||||
|
.join(',') || ''
|
||||||
|
}}
|
||||||
</div></Ellipsis
|
</div></Ellipsis
|
||||||
>
|
>
|
||||||
</j-col>
|
</j-col>
|
||||||
|
@ -88,10 +95,15 @@
|
||||||
<div class="content-des-title">
|
<div class="content-des-title">
|
||||||
告警级别
|
告警级别
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<Ellipsis>
|
||||||
{{ (defaultLevel || []).find((item: any) => item?.level === slotProps.level)?.title ||
|
{{
|
||||||
slotProps.level }}
|
(defaultLevel || []).find(
|
||||||
</div>
|
(item: any) =>
|
||||||
|
item?.level ===
|
||||||
|
slotProps.level,
|
||||||
|
)?.title || slotProps.level
|
||||||
|
}}
|
||||||
|
</Ellipsis>
|
||||||
</j-col>
|
</j-col>
|
||||||
</j-row>
|
</j-row>
|
||||||
</template>
|
</template>
|
||||||
|
@ -122,21 +134,20 @@
|
||||||
<span>{{ map[slotProps.targetType] }}</span>
|
<span>{{ map[slotProps.targetType] }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #level="slotProps">
|
<template #level="slotProps">
|
||||||
<j-tooltip
|
<Ellipsis>
|
||||||
placement="topLeft"
|
{{
|
||||||
:title="(defaultLevel || []).find((item) => item?.level === slotProps.level)?.title ||
|
(defaultLevel || []).find(
|
||||||
slotProps.level"
|
(item) => item?.level === slotProps.level,
|
||||||
>
|
)?.title || slotProps.level
|
||||||
<div class="ellipsis">
|
}}
|
||||||
{{ (defaultLevel || []).find((item) => item?.level === slotProps.level)?.title ||
|
</Ellipsis>
|
||||||
slotProps.level }}
|
|
||||||
</div>
|
|
||||||
</j-tooltip>
|
|
||||||
</template>
|
</template>
|
||||||
<template #scene="slotProps">
|
<template #scene="slotProps">
|
||||||
<span
|
<span>{{
|
||||||
>{{(slotProps?.scene || []).map((item) => item?.name).join(',') || ''}}</span
|
(slotProps?.scene || [])
|
||||||
>
|
.map((item) => item?.name)
|
||||||
|
.join(',') || ''
|
||||||
|
}}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #state="slotProps">
|
<template #state="slotProps">
|
||||||
<BadgeStatus
|
<BadgeStatus
|
||||||
|
@ -184,7 +195,12 @@
|
||||||
</FullPage>
|
</FullPage>
|
||||||
</div>
|
</div>
|
||||||
</page-container>
|
</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>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
@ -267,7 +283,6 @@ const columns = [
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
width: 200,
|
width: 200,
|
||||||
ellipsis: true,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '关联场景联动',
|
title: '关联场景联动',
|
||||||
|
@ -278,20 +293,23 @@ const columns = [
|
||||||
type: 'select',
|
type: 'select',
|
||||||
// defaultTermType: 'rule-bind-alarm',
|
// defaultTermType: 'rule-bind-alarm',
|
||||||
options: async () => {
|
options: async () => {
|
||||||
const allData = await queryList({paging: false, sorts: [{ name: 'createTime', order: 'desc' }]})
|
const allData = await queryList({
|
||||||
const result = allData.result?.data as any[]
|
paging: false,
|
||||||
|
sorts: [{ name: 'createTime', order: 'desc' }],
|
||||||
|
});
|
||||||
|
const result = allData.result?.data as any[];
|
||||||
if (allData.success && result && result.length) {
|
if (allData.success && result && result.length) {
|
||||||
const sceneDataMap = new Map() // 用于去重
|
const sceneDataMap = new Map(); // 用于去重
|
||||||
result.forEach(item => {
|
result.forEach((item) => {
|
||||||
item.scene.forEach((a: any) => {
|
item.scene.forEach((a: any) => {
|
||||||
sceneDataMap.set(a.id, {
|
sceneDataMap.set(a.id, {
|
||||||
label: a.name,
|
label: a.name,
|
||||||
value: a.id
|
value: a.id,
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
|
|
||||||
return [...sceneDataMap.values()]
|
return [...sceneDataMap.values()];
|
||||||
}
|
}
|
||||||
|
|
||||||
// const res = await getScene(
|
// const res = await getScene(
|
||||||
|
@ -362,21 +380,21 @@ const map = {
|
||||||
const handleSearch = (e: any) => {
|
const handleSearch = (e: any) => {
|
||||||
const _terms = (e?.terms || []).map((item: any) => {
|
const _terms = (e?.terms || []).map((item: any) => {
|
||||||
item.terms = item.terms.map((i: any) => {
|
item.terms = item.terms.map((i: any) => {
|
||||||
if(i.column === 'scene'){
|
if (i.column === 'scene') {
|
||||||
return {
|
return {
|
||||||
...i,
|
...i,
|
||||||
termType: 'rule-bind-alarm',
|
termType: 'rule-bind-alarm',
|
||||||
column: 'id'
|
column: 'id',
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
return i
|
return i;
|
||||||
})
|
});
|
||||||
return item
|
return item;
|
||||||
})
|
});
|
||||||
params.value = {
|
params.value = {
|
||||||
...e,
|
...e,
|
||||||
terms: _terms
|
terms: _terms,
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
const queryDefaultLevel = () => {
|
const queryDefaultLevel = () => {
|
||||||
queryLevel().then((res) => {
|
queryLevel().then((res) => {
|
||||||
|
@ -406,7 +424,7 @@ const getActions = (
|
||||||
},
|
},
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
visible.value = true;
|
visible.value = true;
|
||||||
current.value = data
|
current.value = data;
|
||||||
},
|
},
|
||||||
icon: 'LikeOutlined',
|
icon: 'LikeOutlined',
|
||||||
},
|
},
|
||||||
|
@ -467,7 +485,7 @@ const getActions = (
|
||||||
data?.state?.value !== 'disabled'
|
data?.state?.value !== 'disabled'
|
||||||
? '请先禁用该告警,再删除'
|
? '请先禁用该告警,再删除'
|
||||||
: '删除',
|
: '删除',
|
||||||
placement:"topLeft"
|
placement: 'topLeft',
|
||||||
},
|
},
|
||||||
popConfirm: {
|
popConfirm: {
|
||||||
title: '确认删除?',
|
title: '确认删除?',
|
||||||
|
@ -491,7 +509,7 @@ const getActions = (
|
||||||
const onSave = () => {
|
const onSave = () => {
|
||||||
visible.value = false;
|
visible.value = false;
|
||||||
tableRef.value?.reload();
|
tableRef.value?.reload();
|
||||||
}
|
};
|
||||||
const add = () => {
|
const add = () => {
|
||||||
menuStory.jumpPage('rule-engine/Alarm/Configuration/Save');
|
menuStory.jumpPage('rule-engine/Alarm/Configuration/Save');
|
||||||
};
|
};
|
||||||
|
@ -500,4 +518,4 @@ const add = () => {
|
||||||
.content-des-title {
|
.content-des-title {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
4: 'level4',
|
4: 'level4',
|
||||||
5: 'level5',
|
5: 'level5',
|
||||||
}"
|
}"
|
||||||
|
:customBadge="true"
|
||||||
>
|
>
|
||||||
<template #img>
|
<template #img>
|
||||||
<img
|
<img
|
||||||
|
@ -121,6 +122,13 @@
|
||||||
<template #alarmTime="slotProps">
|
<template #alarmTime="slotProps">
|
||||||
{{ dayjs(slotProps.alarmTime).format('YYYY-MM-DD HH:mm:ss')}}
|
{{ dayjs(slotProps.alarmTime).format('YYYY-MM-DD HH:mm:ss')}}
|
||||||
</template>
|
</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">
|
<template #state="slotProps">
|
||||||
<BadgeStatus
|
<BadgeStatus
|
||||||
:status="slotProps.state.value"
|
:status="slotProps.state.value"
|
||||||
|
@ -240,6 +248,7 @@ const columns = [
|
||||||
title: '告警级别',
|
title: '告警级别',
|
||||||
dataIndex: 'level',
|
dataIndex: 'level',
|
||||||
key: 'level',
|
key: 'level',
|
||||||
|
width:200,
|
||||||
search: {
|
search: {
|
||||||
type: 'select',
|
type: 'select',
|
||||||
options: data.value.defaultLevel.map((item: any) => {
|
options: data.value.defaultLevel.map((item: any) => {
|
||||||
|
@ -249,6 +258,7 @@ const columns = [
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
scopedSlots: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '最近告警时间',
|
title: '最近告警时间',
|
||||||
|
|
|
@ -20,7 +20,14 @@
|
||||||
:title="item.alarmName"
|
:title="item.alarmName"
|
||||||
placement="topLeft"
|
placement="topLeft"
|
||||||
>
|
>
|
||||||
<a @click="()=>{return jumpDetail(item)}">{{ item.alarmName }}</a>
|
<a
|
||||||
|
@click="
|
||||||
|
() => {
|
||||||
|
return jumpDetail(item);
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>{{ item.alarmName }}</a
|
||||||
|
>
|
||||||
</j-tooltip>
|
</j-tooltip>
|
||||||
</div>
|
</div>
|
||||||
<div class="new-alarm-item-state">
|
<div class="new-alarm-item-state">
|
||||||
|
@ -42,13 +49,16 @@
|
||||||
{{ item.state?.text }}
|
{{ item.state?.text }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
:class="[
|
:class="[
|
||||||
'new-alarm-item-level',
|
'new-alarm-item-level',
|
||||||
`level-${item.level}`,
|
`level-${item.level}`,
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
{{ item.levelName }}
|
<Ellipsis style="width: calc(100%)">
|
||||||
|
{{ item.levelName }}
|
||||||
|
</Ellipsis>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
@ -72,9 +82,12 @@ const props = defineProps({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const menuStore = useMenuStore();
|
const menuStore = useMenuStore();
|
||||||
const jumpDetail = (item:any) =>{
|
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>
|
</script>
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
.new-alarm {
|
.new-alarm {
|
||||||
|
@ -155,4 +168,4 @@ const jumpDetail = (item:any) =>{
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
</TitleComponent>
|
</TitleComponent>
|
||||||
<template v-if='open'>
|
<template v-if='open'>
|
||||||
<div>
|
<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
|
<j-tab-pane
|
||||||
v-for="(b, i) in group"
|
v-for="(b, i) in group"
|
||||||
:key="b.id"
|
:key="b.id"
|
||||||
:tab="`条件${i + 1}`"
|
:tab="b.branchName || `条件${i+1}`"
|
||||||
:closable="false"
|
:closable="false"
|
||||||
>
|
>
|
||||||
<template v-for='(item, index) in data.branches'>
|
<template v-for='(item, index) in data.branches'>
|
||||||
|
@ -64,6 +64,13 @@
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</template>
|
||||||
|
|
||||||
<script setup lang='ts' name='Terms'>
|
<script setup lang='ts' name='Terms'>
|
||||||
|
@ -84,6 +91,8 @@ const open = ref<boolean>(false)
|
||||||
const columnOptions = ref<any>([])
|
const columnOptions = ref<any>([])
|
||||||
const group = ref<Array<{ id: string, len: number}>>([])
|
const group = ref<Array<{ id: string, len: number}>>([])
|
||||||
const activeKey = ref('')
|
const activeKey = ref('')
|
||||||
|
const editConditionVisible = ref(false);
|
||||||
|
const conditionName = ref<any>('')
|
||||||
|
|
||||||
provide(ContextKey, columnOptions)
|
provide(ContextKey, columnOptions)
|
||||||
|
|
||||||
|
@ -183,7 +192,8 @@ const addGroup = () => {
|
||||||
},
|
},
|
||||||
then: [],
|
then: [],
|
||||||
executeAnyway: true,
|
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(branchesItem)
|
||||||
data.value.branches?.push(null as any)
|
data.value.branches?.push(null as any)
|
||||||
|
@ -210,6 +220,24 @@ const groupDelete = (g: any, index: number) => {
|
||||||
activeKey.value = group.value[_index].id
|
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(() => {
|
watchEffect(() => {
|
||||||
if (data.value.trigger?.device) {
|
if (data.value.trigger?.device) {
|
||||||
queryColumn({ trigger: data.value.trigger })
|
queryColumn({ trigger: data.value.trigger })
|
||||||
|
@ -242,7 +270,8 @@ watchEffect(() => {
|
||||||
_group[lastIndex + 1] = {
|
_group[lastIndex + 1] = {
|
||||||
id: `group_${item.key}`,
|
id: `group_${item.key}`,
|
||||||
len: 1,
|
len: 1,
|
||||||
start: index
|
start: index,
|
||||||
|
branchName:item.branchName
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_group[lastIndex].len += 1
|
_group[lastIndex].len += 1
|
||||||
|
@ -258,7 +287,7 @@ watchEffect(() => {
|
||||||
activeKey.value = _group[0].id
|
activeKey.value = _group[0].id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(group.value,'group')
|
||||||
})
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1438,6 +1438,17 @@ import { Rule } from 'ant-design-vue/lib/form';
|
||||||
import ApplyList from './ApplyList/index.vue';
|
import ApplyList from './ApplyList/index.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['changeApplyType']);
|
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 routeQuery = useRoute().query;
|
||||||
const menuStory = useMenuStore();
|
const menuStory = useMenuStore();
|
||||||
|
|
||||||
|
@ -1601,6 +1612,8 @@ onMounted(async () => {
|
||||||
typeOptions.value = typeOptions.value.filter((i: any) => {
|
typeOptions.value = typeOptions.value.filter((i: any) => {
|
||||||
return i.value === routeQuery.provider;
|
return i.value === routeQuery.provider;
|
||||||
});
|
});
|
||||||
|
console.log(typeOptions.value[0].value)
|
||||||
|
form.data.logoUrl = defaultImg[typeOptions.value[0].value]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -53,11 +53,11 @@
|
||||||
</slot>
|
</slot>
|
||||||
</template>
|
</template>
|
||||||
<template #content>
|
<template #content>
|
||||||
<h3 class="card-item-content-title">
|
<Ellipsis>
|
||||||
<Ellipsis>
|
<h3 class="card-item-content-title">
|
||||||
{{ slotProps.name }}
|
{{ slotProps.name }}
|
||||||
</Ellipsis>
|
</h3>
|
||||||
</h3>
|
</Ellipsis>
|
||||||
<j-row>
|
<j-row>
|
||||||
<j-col :span="12">
|
<j-col :span="12">
|
||||||
<div class="card-item-content-text">
|
<div class="card-item-content-text">
|
||||||
|
@ -102,13 +102,21 @@
|
||||||
) in item.children"
|
) in item.children"
|
||||||
:key="i"
|
:key="i"
|
||||||
>
|
>
|
||||||
<j-tooltip :title="o?.tooltip?.title">
|
<j-tooltip
|
||||||
|
:title="
|
||||||
|
o?.tooltip?.title
|
||||||
|
"
|
||||||
|
>
|
||||||
<j-button
|
<j-button
|
||||||
type="link"
|
type="link"
|
||||||
@click="o.onClick"
|
@click="o.onClick"
|
||||||
:disabled="o.disabled"
|
:disabled="
|
||||||
|
o.disabled
|
||||||
|
"
|
||||||
>
|
>
|
||||||
<AIcon :type="o.icon" />
|
<AIcon
|
||||||
|
:type="o.icon"
|
||||||
|
/>
|
||||||
<span>{{
|
<span>{{
|
||||||
o.text
|
o.text
|
||||||
}}</span>
|
}}</span>
|
||||||
|
@ -189,13 +197,18 @@
|
||||||
:data="current"
|
:data="current"
|
||||||
@refresh="table.refresh"
|
@refresh="table.refresh"
|
||||||
/>
|
/>
|
||||||
<ThirdMenu
|
<ThirdMenu
|
||||||
v-if="dialogVisible && current.provider === 'third-party'"
|
v-if="dialogVisible && current.provider === 'third-party'"
|
||||||
:data="current"
|
:data="current"
|
||||||
mode="edit"
|
mode="edit"
|
||||||
@cancel="dialogVisible = false"
|
@cancel="dialogVisible = false"
|
||||||
@ok="() => { dialogVisible = false; table.refresh}"
|
@ok="
|
||||||
/>
|
() => {
|
||||||
|
dialogVisible = false;
|
||||||
|
table.refresh;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Add v-if="visible" @close="visible = false" />
|
<Add v-if="visible" @close="visible = false" />
|
||||||
</page-container>
|
</page-container>
|
||||||
|
@ -204,12 +217,12 @@
|
||||||
<script setup lang="ts" name="Apply">
|
<script setup lang="ts" name="Apply">
|
||||||
import PermissionButton from '@/components/PermissionButton/index.vue';
|
import PermissionButton from '@/components/PermissionButton/index.vue';
|
||||||
import MenuDialog from './componenets/MenuDialog.vue';
|
import MenuDialog from './componenets/MenuDialog.vue';
|
||||||
import ThirdMenu from './componenets/ThirdMenu.vue'
|
import ThirdMenu from './componenets/ThirdMenu.vue';
|
||||||
import {
|
import {
|
||||||
getApplyList_api,
|
getApplyList_api,
|
||||||
changeApplyStatus_api,
|
changeApplyStatus_api,
|
||||||
delApply_api,
|
delApply_api,
|
||||||
queryType
|
queryType,
|
||||||
} from '@/api/system/apply';
|
} from '@/api/system/apply';
|
||||||
import { getImage, onlyMessage } from '@/utils/comm';
|
import { getImage, onlyMessage } from '@/utils/comm';
|
||||||
import { useMenuStore } from '@/store/menu';
|
import { useMenuStore } from '@/store/menu';
|
||||||
|
@ -219,21 +232,21 @@ import Add from './Save/Add.vue';
|
||||||
const menuStory = useMenuStore();
|
const menuStory = useMenuStore();
|
||||||
const permission = 'system/Apply';
|
const permission = 'system/Apply';
|
||||||
|
|
||||||
const typeOptions = ref<any[]>([])
|
const typeOptions = ref<any[]>([]);
|
||||||
const visible = ref<boolean>(false)
|
const visible = ref<boolean>(false);
|
||||||
const addMenuVisible = ref<boolean>(false)
|
const addMenuVisible = ref<boolean>(false);
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
queryType().then((resp: any) => {
|
queryType().then((resp: any) => {
|
||||||
if(resp.status === 200){
|
if (resp.status === 200) {
|
||||||
const arr = resp.result.map((item: any) => ({
|
const arr = resp.result.map((item: any) => ({
|
||||||
label: item.name,
|
label: item.name,
|
||||||
value: item.provider,
|
value: item.provider,
|
||||||
}))
|
}));
|
||||||
typeOptions.value = arr
|
typeOptions.value = arr;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
title: '名称',
|
title: '名称',
|
||||||
|
@ -309,14 +322,14 @@ const columns = [
|
||||||
const queryParams = ref({});
|
const queryParams = ref({});
|
||||||
|
|
||||||
const tableRef = ref();
|
const tableRef = ref();
|
||||||
const current = ref<any>({})
|
const current = ref<any>({});
|
||||||
const table = {
|
const table = {
|
||||||
refresh: () => {
|
refresh: () => {
|
||||||
// tableRef.value.reload(queryParams.value);
|
// tableRef.value.reload(queryParams.value);
|
||||||
window.location.reload()
|
window.location.reload();
|
||||||
},
|
},
|
||||||
toAdd: () => {
|
toAdd: () => {
|
||||||
visible.value = true
|
visible.value = true;
|
||||||
},
|
},
|
||||||
toSave: (id?: string, view = false) => {
|
toSave: (id?: string, view = false) => {
|
||||||
if (id) menuStory.jumpPage('system/Apply/Save', {}, { id, view });
|
if (id) menuStory.jumpPage('system/Apply/Save', {}, { id, view });
|
||||||
|
@ -408,7 +421,7 @@ const table = {
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
selectId.value = data.id;
|
selectId.value = data.id;
|
||||||
selectProvider.value = data.provider;
|
selectProvider.value = data.provider;
|
||||||
current.value = data
|
current.value = data;
|
||||||
dialogVisible.value = true;
|
dialogVisible.value = true;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
|
@ -44,11 +44,13 @@
|
||||||
label="排序"
|
label="排序"
|
||||||
:rules="[{ required: true, message: '请输入排序' }]"
|
:rules="[{ required: true, message: '请输入排序' }]"
|
||||||
>
|
>
|
||||||
<j-input
|
<j-input-number
|
||||||
|
style="width: 100%;"
|
||||||
v-model:value="form.data.sortIndex"
|
v-model:value="form.data.sortIndex"
|
||||||
placeholder="请输入排序"
|
placeholder="请输入排序"
|
||||||
:maxlength="64"
|
:controls="false"
|
||||||
@blur="form.checkSort"
|
:min="0"
|
||||||
|
:max="99999999"
|
||||||
/>
|
/>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
</j-form>
|
</j-form>
|
||||||
|
@ -140,7 +142,6 @@ const filterTree = (treeNode: treeType[]) => {
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
data: {} as formType,
|
data: {} as formType,
|
||||||
beforeSortIndex: '' as string | number,
|
|
||||||
|
|
||||||
init: () => {
|
init: () => {
|
||||||
if (props.data.id) {
|
if (props.data.id) {
|
||||||
|
@ -160,19 +161,10 @@ const form = reactive({
|
||||||
sortIndex: props.data.sortIndex,
|
sortIndex: props.data.sortIndex,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
form.beforeSortIndex = form.data.sortIndex;
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
formRef.value?.clearValidate();
|
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: () => {
|
submit: () => {
|
||||||
const api = form.data.id ? updateDepartment_api : addDepartment_api;
|
const api = form.data.id ? updateDepartment_api : addDepartment_api;
|
||||||
form.data.parentId = form.data.parentId ? form.data.parentId : '';
|
form.data.parentId = form.data.parentId ? form.data.parentId : '';
|
||||||
|
|
|
@ -215,15 +215,15 @@ const openDialog = (row: any = {}) => {
|
||||||
// 计算默认排序值,为子列表中最大的排序值+1
|
// 计算默认排序值,为子列表中最大的排序值+1
|
||||||
let sortIndex = row.sortIndex || 1;
|
let sortIndex = row.sortIndex || 1;
|
||||||
if (!row.id) {
|
if (!row.id) {
|
||||||
let childrens = [] as any[];
|
let children = [] as any[];
|
||||||
if (row.parentId) {
|
if (row.parentId) {
|
||||||
childrens = row.children;
|
children = row.children;
|
||||||
} else childrens = treeData.value;
|
} else children = treeData.value;
|
||||||
const indexs =
|
const index =
|
||||||
childrens?.length > 0
|
children?.length > 0
|
||||||
? childrens?.map((item) => item.sortIndex)
|
? children?.map((item) => item.sortIndex)
|
||||||
: [0];
|
: [0];
|
||||||
sortIndex = Math.max(...indexs) + 1;
|
sortIndex = Math.max(...index) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dialog.selectItem = { ...row, sortIndex };
|
dialog.selectItem = { ...row, sortIndex };
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<j-spin :spinning="loading" :delay="500">
|
<j-spin :spinning="loading" :delay="500">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="left" >
|
<div class="left">
|
||||||
<img
|
<img
|
||||||
style="width: 100%; height: 100%"
|
style="width: 100%; height: 100%"
|
||||||
:src="basis.background || getImage('/login.png')"
|
:src="basis.background || getImage('/login.png')"
|
||||||
|
@ -37,22 +37,16 @@
|
||||||
:model="form"
|
:model="form"
|
||||||
class="login-form"
|
class="login-form"
|
||||||
@finish="onFinish"
|
@finish="onFinish"
|
||||||
:rules='rules'
|
:rules="rules"
|
||||||
>
|
>
|
||||||
<j-form-item
|
<j-form-item label="账号" name="username">
|
||||||
label="账号"
|
|
||||||
name="username"
|
|
||||||
>
|
|
||||||
<j-input
|
<j-input
|
||||||
v-model:value="form.username"
|
v-model:value="form.username"
|
||||||
placeholder="请输入账号"
|
placeholder="请输入账号"
|
||||||
:maxlength="64"
|
:maxlength="64"
|
||||||
></j-input>
|
></j-input>
|
||||||
</j-form-item>
|
</j-form-item>
|
||||||
<j-form-item
|
<j-form-item label="密码" name="password">
|
||||||
label="密码"
|
|
||||||
name="password"
|
|
||||||
>
|
|
||||||
<j-input-password
|
<j-input-password
|
||||||
v-model:value="form.password"
|
v-model:value="form.password"
|
||||||
placeholder="请输入密码"
|
placeholder="请输入密码"
|
||||||
|
@ -117,25 +111,89 @@
|
||||||
</j-divider>
|
</j-divider>
|
||||||
<div class="other-button">
|
<div class="other-button">
|
||||||
<div
|
<div
|
||||||
class='other-button-item'
|
class="other-button-item"
|
||||||
v-for="(item, index) in bindings.slice(0,4)"
|
v-for="(
|
||||||
:key="index"
|
item, index
|
||||||
@click="handleClickOther(item)"
|
) in bindings.slice(0, 4)"
|
||||||
|
:key="index"
|
||||||
|
@click="handleClickOther(item)"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
style="width: 32px; height: 32px"
|
style="
|
||||||
:alt="item.name"
|
width: 32px;
|
||||||
:src="
|
height: 32px;
|
||||||
item.logoUrl || iconMap.get(
|
|
||||||
item.provider,
|
|
||||||
) || defaultImg
|
|
||||||
"
|
"
|
||||||
/>
|
:alt="item.name"
|
||||||
|
:src="
|
||||||
|
item.logoUrl ||
|
||||||
|
iconMap.get(
|
||||||
|
item.provider,
|
||||||
|
) ||
|
||||||
|
defaultImg
|
||||||
|
"
|
||||||
|
/>
|
||||||
</div>
|
</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>
|
||||||
|
</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>
|
||||||
<div class="more" v-if="bindings.length > 4" @click="moreVisible = true">
|
<!-- <div class="more" v-if="bindings.length > 4" @click="moreVisible = true">
|
||||||
查看更多
|
查看更多
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -161,14 +219,14 @@
|
||||||
</div>
|
</div>
|
||||||
</j-spin>
|
</j-spin>
|
||||||
</div>
|
</div>
|
||||||
<j-modal
|
<!-- <j-modal
|
||||||
title="更多登录"
|
title="更多登录"
|
||||||
:visible="moreVisible"
|
:visible="moreVisible"
|
||||||
@cancel="() => (moreVisible = false)"
|
@cancel="() => (moreVisible = false)"
|
||||||
:footer="null"
|
:footer="null"
|
||||||
:width="800"
|
:width="800"
|
||||||
>
|
>
|
||||||
<div class="more-button">
|
<div class="more-button">
|
||||||
<div
|
<div
|
||||||
class="more-button-item"
|
class="more-button-item"
|
||||||
v-for="(item, index) in bindings"
|
v-for="(item, index) in bindings"
|
||||||
|
@ -180,33 +238,40 @@
|
||||||
:alt="item.name"
|
:alt="item.name"
|
||||||
:src="item.logoUrl"
|
: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 }}
|
{{ item.name }}
|
||||||
</Ellipsis>
|
</Ellipsis>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</j-modal>
|
</j-modal> -->
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getImage } from '@/utils/comm';
|
import { getImage } from '@/utils/comm';
|
||||||
import {
|
import {
|
||||||
config,
|
config,
|
||||||
code,
|
code,
|
||||||
authLogin,
|
authLogin,
|
||||||
getInitSet,
|
getInitSet,
|
||||||
systemVersion,
|
systemVersion,
|
||||||
bindInfo,
|
bindInfo,
|
||||||
settingDetail, userDetail,
|
settingDetail,
|
||||||
authLoginConfig
|
userDetail,
|
||||||
} from '@/api/login'
|
authLoginConfig,
|
||||||
|
} from '@/api/login';
|
||||||
import { useUserInfo } from '@/store/userInfo';
|
import { useUserInfo } from '@/store/userInfo';
|
||||||
import { useSystem } from '@/store/system'
|
import { useSystem } from '@/store/system';
|
||||||
import { LocalStore } from '@/utils/comm';
|
import { LocalStore } from '@/utils/comm';
|
||||||
import { BASE_API_PATH, TOKEN_KEY, Version_Code } from '@/utils/variable';
|
import { BASE_API_PATH, TOKEN_KEY, Version_Code } from '@/utils/variable';
|
||||||
import { SystemConst } from '@/utils/consts';
|
import { SystemConst } from '@/utils/consts';
|
||||||
import {encrypt} from '@/utils/encrypt'
|
import { encrypt } from '@/utils/encrypt';
|
||||||
import { closeWs } from '@/utils/websocket'
|
import { closeWs } from '@/utils/websocket';
|
||||||
|
|
||||||
const store = useUserInfo();
|
const store = useUserInfo();
|
||||||
const systemStore = useSystem();
|
const systemStore = useSystem();
|
||||||
|
@ -217,7 +282,7 @@ const viewLogo = getImage('/view-logo.png');
|
||||||
const LoginWarpStyle = reactive({
|
const LoginWarpStyle = reactive({
|
||||||
backgroundImage: `url(${bgImage})`,
|
backgroundImage: `url(${bgImage})`,
|
||||||
});
|
});
|
||||||
const moreVisible = ref(false)
|
const moreVisible = ref(false);
|
||||||
const screenWidth = ref(document.body.clientWidth);
|
const screenWidth = ref(document.body.clientWidth);
|
||||||
const screenHeight = ref(document.body.clientHeight);
|
const screenHeight = ref(document.body.clientHeight);
|
||||||
|
|
||||||
|
@ -230,44 +295,44 @@ const form = reactive({
|
||||||
verifyKey: '',
|
verifyKey: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const RsaConfig = reactive<any>({
|
const RsaConfig = reactive<any>({
|
||||||
enabled:false, //是否加密
|
enabled: false, //是否加密
|
||||||
publicKey:'', //rsa公钥,使用此公钥对密码进行加密
|
publicKey: '', //rsa公钥,使用此公钥对密码进行加密
|
||||||
id:'' //密钥ID
|
id: '', //密钥ID
|
||||||
})
|
});
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
username: [
|
username: [
|
||||||
{
|
{
|
||||||
validator(_: any, value: string) {
|
validator(_: any, value: string) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return Promise.reject('请输入账号!')
|
return Promise.reject('请输入账号!');
|
||||||
}
|
}
|
||||||
return Promise.resolve()
|
return Promise.resolve();
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
password: [
|
password: [
|
||||||
{
|
{
|
||||||
validator(_: any, value: string) {
|
validator(_: any, value: string) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return Promise.reject('请输入密码!')
|
return Promise.reject('请输入密码!');
|
||||||
}
|
}
|
||||||
return Promise.resolve()
|
return Promise.resolve();
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
verifyCode: [
|
verifyCode: [
|
||||||
{
|
{
|
||||||
validator(_: any, value: string) {
|
validator(_: any, value: string) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return Promise.reject('请输入验证码!')
|
return Promise.reject('请输入验证码!');
|
||||||
}
|
}
|
||||||
return Promise.resolve()
|
return Promise.resolve();
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
]
|
],
|
||||||
}
|
};
|
||||||
|
|
||||||
const codeUrl = ref('');
|
const codeUrl = ref('');
|
||||||
const codeConfig = ref(false);
|
const codeConfig = ref(false);
|
||||||
|
@ -290,45 +355,47 @@ const onFinish = async () => {
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
...form,
|
...form,
|
||||||
password:RsaConfig.enabled?encrypt(form.password,RsaConfig.publicKey):form.password,
|
password: RsaConfig.enabled
|
||||||
encryptId:RsaConfig.enabled?RsaConfig.id:undefined
|
? encrypt(form.password, RsaConfig.publicKey)
|
||||||
}
|
: form.password,
|
||||||
|
encryptId: RsaConfig.enabled ? RsaConfig.id : undefined,
|
||||||
|
};
|
||||||
|
|
||||||
const res: any = await authLogin(data);
|
const res: any = await authLogin(data);
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
if (res.success) {
|
if (res.success) {
|
||||||
LocalStore.set(TOKEN_KEY, res?.result.token);
|
LocalStore.set(TOKEN_KEY, res?.result.token);
|
||||||
const userResp = await userDetail()
|
const userResp = await userDetail();
|
||||||
if (userResp.success) {
|
if (userResp.success) {
|
||||||
store.$patch({
|
store.$patch({
|
||||||
userInfos: {
|
userInfos: {
|
||||||
...userResp.result,
|
...userResp.result,
|
||||||
token: res?.result.token,
|
token: res?.result.token,
|
||||||
},
|
},
|
||||||
isAdmin: userResp.username === "admin",
|
isAdmin: userResp.username === 'admin',
|
||||||
});
|
});
|
||||||
|
|
||||||
if (userResp.result?.username === 'admin') {
|
if (userResp.result?.username === 'admin') {
|
||||||
const resp: any = await getInitSet();
|
const resp: any = await getInitSet();
|
||||||
if (resp.status === 200 && !resp.result.length) {
|
if (resp.status === 200 && !resp.result.length) {
|
||||||
window.location.href = '/#/init-home';
|
window.location.href = '/#/init-home';
|
||||||
// router.push('/init-home')
|
// router.push('/init-home')
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
store.$patch({
|
||||||
|
...res.result,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
store.$patch({
|
|
||||||
...res.result
|
|
||||||
});
|
|
||||||
}
|
|
||||||
window.location.href = '/';
|
window.location.href = '/';
|
||||||
// router.push('/')
|
// router.push('/')
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
form.verifyCode = '';
|
form.verifyCode = '';
|
||||||
getCode();
|
getCode();
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
getRsa()
|
getRsa();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -345,7 +412,6 @@ const getCode = async () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const getOpen = () => {
|
const getOpen = () => {
|
||||||
LocalStore.removeAll();
|
LocalStore.removeAll();
|
||||||
systemVersion().then((res: any) => {
|
systemVersion().then((res: any) => {
|
||||||
|
@ -360,24 +426,24 @@ const getOpen = () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
systemStore.getFront()
|
systemStore.getFront();
|
||||||
};
|
};
|
||||||
|
|
||||||
//获取加密信息
|
//获取加密信息
|
||||||
const getRsa =async () =>{
|
const getRsa = async () => {
|
||||||
const res:any = await authLoginConfig()
|
const res: any = await authLoginConfig();
|
||||||
if(res.status === 200){
|
if (res.status === 200) {
|
||||||
if(res.result?.encrypt){
|
if (res.result?.encrypt) {
|
||||||
RsaConfig.enabled = res.result?.encrypt.enabled
|
RsaConfig.enabled = res.result?.encrypt.enabled;
|
||||||
RsaConfig.publicKey = res.result?.encrypt.publicKey
|
RsaConfig.publicKey = res.result?.encrypt.publicKey;
|
||||||
RsaConfig.id = res.result?.encrypt.id
|
RsaConfig.id = res.result?.encrypt.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
const basis = computed(() => {
|
const basis = computed(() => {
|
||||||
return systemStore.configInfo['front'] || {}
|
return systemStore.configInfo['front'] || {};
|
||||||
})
|
});
|
||||||
const handleClickOther = (item: any) => {
|
const handleClickOther = (item: any) => {
|
||||||
LocalStore.set('onLogin', 'no');
|
LocalStore.set('onLogin', 'no');
|
||||||
window.open(`${BASE_API_PATH}/application/sso/${item.id}/login`);
|
window.open(`${BASE_API_PATH}/application/sso/${item.id}/login`);
|
||||||
|
@ -411,11 +477,10 @@ getOpen();
|
||||||
getCode();
|
getCode();
|
||||||
screenRotation(screenWidth.value, screenHeight.value);
|
screenRotation(screenWidth.value, screenHeight.value);
|
||||||
|
|
||||||
closeWs()
|
closeWs();
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
getRsa()
|
getRsa();
|
||||||
})
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
|
@ -538,10 +603,15 @@ onMounted(()=>{
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
.other-button-item {
|
.other-button-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.more {
|
||||||
|
cursor: pointer;
|
||||||
|
.moreIcon {
|
||||||
|
transform: translateY(50%);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
.more{
|
.more{
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -567,9 +637,9 @@ onMounted(()=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-form-button {
|
.login-form-button {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -637,11 +707,13 @@ onMounted(()=>{
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
overflow: auto;
|
||||||
|
width: 300px;
|
||||||
.more-button-item {
|
.more-button-item {
|
||||||
width: 18%;
|
width: 62px;
|
||||||
margin-left: 2%;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 20px
|
margin-bottom: 10px;
|
||||||
|
margin-left: 12px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -97,8 +97,8 @@ export default defineConfig(({ mode}) => {
|
||||||
// target: 'http://192.168.32.163:8844', //张本地
|
// target: 'http://192.168.32.163:8844', //张本地
|
||||||
// target: 'http://120.77.179.54:8844', // 120测试
|
// target: 'http://120.77.179.54:8844', // 120测试
|
||||||
target: 'http://192.168.33.46:8844', // 本地开发环境
|
target: 'http://192.168.33.46:8844', // 本地开发环境
|
||||||
// target: 'http://192.168.33.1:8845', // 社区版开发环境
|
// target: 'http://192.168.33.1:8848', // 社区版开发环境
|
||||||
// target: 'http://192.168.32.200:8844', // 刘本地
|
// target: 'http://192.168.32.207:8844', // 刘本地
|
||||||
// target: 'http://192.168.32.187:8844', // 谭本地
|
// target: 'http://192.168.32.187:8844', // 谭本地
|
||||||
ws: 'ws://192.168.33.46:8844',
|
ws: 'ws://192.168.33.46:8844',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
|
|
Loading…
Reference in New Issue