Commit 6ba2997c authored by ninglx's avatar ninglx

按需求改动超限 & 处理bug

parent 2dc3308f
......@@ -422,19 +422,17 @@
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true,
"version": "7.24.8",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
"integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
"integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
"dev": true,
"version": "7.24.7",
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"engines": {
"node": ">=6.9.0"
}
......@@ -505,9 +503,12 @@
}
},
"node_modules/@babel/parser": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz",
"integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==",
"version": "7.25.6",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"dependencies": {
"@babel/types": "^7.25.6"
},
"bin": {
"parser": "bin/babel-parser.js"
},
......@@ -1813,13 +1814,12 @@
}
},
"node_modules/@babel/types": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz",
"integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==",
"dev": true,
"version": "7.25.6",
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5",
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
......@@ -1940,9 +1940,9 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
......@@ -2926,14 +2926,76 @@
"node": ">=4"
}
},
"node_modules/@vue/compiler-core": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
"integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.24.7",
"@vue/shared": "3.4.38",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-core/node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"optional": true,
"peer": true,
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/@vue/compiler-dom": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
"integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"@vue/compiler-core": "3.4.38",
"@vue/shared": "3.4.38"
}
},
"node_modules/@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
"integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
"@babel/parser": "^7.24.7",
"@vue/compiler-core": "3.4.38",
"@vue/compiler-dom": "3.4.38",
"@vue/compiler-ssr": "3.4.38",
"@vue/shared": "3.4.38",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.10",
"postcss": "^8.4.40",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-ssr": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
"integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"@vue/compiler-dom": "3.4.38",
"@vue/shared": "3.4.38"
}
},
"node_modules/@vue/component-compiler-utils": {
......@@ -3013,6 +3075,14 @@
"webpack": ">=4.0.0"
}
},
"node_modules/@vue/shared": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.38.tgz",
"integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
"dev": true,
"optional": true,
"peer": true
},
"node_modules/@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
......@@ -3982,6 +4052,15 @@
"node": ">=8"
}
},
"node_modules/bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
}
},
"node_modules/blob.js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/blob.js/-/blob.js-1.0.1.tgz",
......@@ -7070,6 +7149,14 @@
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true,
"optional": true,
"peer": true
},
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
......@@ -7526,6 +7613,12 @@
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
"node_modules/filesize": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
......@@ -10025,6 +10118,17 @@
"npm": ">=5"
}
},
"node_modules/magic-string": {
"version": "0.30.11",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.11.tgz",
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"dev": true,
"optional": true,
"peer": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
......@@ -10503,10 +10607,16 @@
"thenify-all": "^1.0.0"
}
},
"node_modules/nan": {
"version": "2.20.0",
"resolved": "https://registry.npmmirror.com/nan/-/nan-2.20.0.tgz",
"integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
"optional": true
},
"node_modules/nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"funding": [
{
"type": "github",
......@@ -11250,9 +11360,9 @@
"dev": true
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"node_modules/picomatch": {
"version": "2.3.1",
......@@ -11361,9 +11471,9 @@
}
},
"node_modules/postcss": {
"version": "8.4.28",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz",
"integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==",
"version": "8.4.41",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.41.tgz",
"integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
"funding": [
{
"type": "opencollective",
......@@ -11379,9 +11489,9 @@
}
],
"dependencies": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"nanoid": "^3.3.7",
"picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
......@@ -14179,9 +14289,9 @@
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
......@@ -15004,7 +15114,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"engines": {
"node": ">=4"
}
......@@ -15895,6 +16004,16 @@
"integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
"dev": true
},
"node_modules/vue/node_modules/@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"dependencies": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
}
},
"node_modules/vuex": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz",
......@@ -17264,16 +17383,14 @@
}
},
"@babel/helper-string-parser": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
"integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
"dev": true
"version": "7.24.8",
"resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
"integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ=="
},
"@babel/helper-validator-identifier": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
"integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
"dev": true
"version": "7.24.7",
"resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="
},
"@babel/helper-validator-option": {
"version": "7.22.5",
......@@ -17328,9 +17445,12 @@
}
},
"@babel/parser": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz",
"integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ=="
"version": "7.25.6",
"resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.25.6.tgz",
"integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
"requires": {
"@babel/types": "^7.25.6"
}
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.22.5",
......@@ -18204,13 +18324,12 @@
}
},
"@babel/types": {
"version": "7.22.10",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz",
"integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==",
"dev": true,
"version": "7.25.6",
"resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.25.6.tgz",
"integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
"requires": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.5",
"@babel/helper-string-parser": "^7.24.8",
"@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0"
}
},
......@@ -18306,9 +18425,9 @@
"dev": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true
},
"@jridgewell/trace-mapping": {
......@@ -19127,14 +19246,72 @@
}
}
},
"@vue/compiler-core": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
"integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"@babel/parser": "^7.24.7",
"@vue/shared": "3.4.38",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
},
"dependencies": {
"entities": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"optional": true,
"peer": true
}
}
},
"@vue/compiler-dom": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
"integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"@vue/compiler-core": "3.4.38",
"@vue/shared": "3.4.38"
}
},
"@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
"integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
"@babel/parser": "^7.24.7",
"@vue/compiler-core": "3.4.38",
"@vue/compiler-dom": "3.4.38",
"@vue/compiler-ssr": "3.4.38",
"@vue/shared": "3.4.38",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.10",
"postcss": "^8.4.40",
"source-map-js": "^1.2.0"
}
},
"@vue/compiler-ssr": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
"integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"@vue/compiler-dom": "3.4.38",
"@vue/shared": "3.4.38"
}
},
"@vue/component-compiler-utils": {
......@@ -19201,6 +19378,14 @@
"dev": true,
"requires": {}
},
"@vue/shared": {
"version": "3.4.38",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.4.38.tgz",
"integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
"dev": true,
"optional": true,
"peer": true
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
......@@ -19974,6 +20159,15 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"optional": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"blob.js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/blob.js/-/blob.js-1.0.1.tgz",
......@@ -22435,6 +22629,14 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
},
"estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
"dev": true,
"optional": true,
"peer": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
......@@ -22803,6 +23005,12 @@
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
},
"filesize": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
......@@ -24717,6 +24925,17 @@
}
}
},
"magic-string": {
"version": "0.30.11",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.11.tgz",
"integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==",
"dev": true,
"optional": true,
"peer": true,
"requires": {
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
......@@ -25098,10 +25317,16 @@
"thenify-all": "^1.0.0"
}
},
"nan": {
"version": "2.20.0",
"resolved": "https://registry.npmmirror.com/nan/-/nan-2.20.0.tgz",
"integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
"optional": true
},
"nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g=="
},
"nanomatch": {
"version": "1.2.13",
......@@ -25692,9 +25917,9 @@
"dev": true
},
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
},
"picomatch": {
"version": "2.3.1",
......@@ -25775,13 +26000,13 @@
"integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg=="
},
"postcss": {
"version": "8.4.28",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz",
"integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==",
"version": "8.4.41",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.41.tgz",
"integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
"requires": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
"nanoid": "^3.3.7",
"picocolors": "^1.0.1",
"source-map-js": "^1.2.0"
}
},
"postcss-calc": {
......@@ -28058,9 +28283,9 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
},
"source-map-resolve": {
"version": "0.5.3",
......@@ -28727,8 +28952,7 @@
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
},
"to-object-path": {
"version": "0.3.0",
......@@ -29304,6 +29528,18 @@
"requires": {
"@vue/compiler-sfc": "2.7.14",
"csstype": "^3.1.0"
},
"dependencies": {
"@vue/compiler-sfc": {
"version": "2.7.14",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
"integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
"requires": {
"@babel/parser": "^7.18.4",
"postcss": "^8.4.14",
"source-map": "^0.6.1"
}
}
}
},
"vue-clipboard2": {
......@@ -61,7 +61,8 @@ export default {
starttime: this.replaceTimeGap(this.timeModel.startTime),
endtime: this.replaceTimeGap(this.timeModel.endTime),
});
console.log("video response", response);
console.log("video response 请求完成", response);
this.$emit('loadEnd')
this.videoUrl = response.content;
setTimeout(() => {
this.$refs.loopVideoPlayer.load();
......
......@@ -24,17 +24,17 @@
</div> -->
</div>
<div class="left_box aside" :class="[{ hide_left: !show }]">
<regional-index class="item" />
<traffic-flow class="item" />
<ped-and-no-vehicles class="item" />
<regional-index class="item"/>
<traffic-flow class="item"/>
<ped-and-no-vehicles class="item"/>
</div>
<div class="right_box aside" :class="[{ hide_right: !show }]">
<in-transit class="item" />
<traffic-event class="item" />
<in-transit class="item"/>
<traffic-event class="item"/>
<msg-card class="item item-warningData" title="告警信息">
<div class="full-w full-h" v-loading="alarmLoading" element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.8)">
<el-tabs @tab-click='tabClick' v-model='activeName' style="height: 100%;">
element-loading-background="rgba(0, 0, 0, 0.8)">
<el-tabs v-model='activeName' style="height: 100%;">
<el-tab-pane name='11' key="1" style="height: 100%;">
<template slot="label">
<div style="display: flex">
......@@ -51,9 +51,9 @@
</template>
<div class="traffics">
<vue-seamless-scroll ref='11' class="warningMsg" :data="warningData" :class-option="optionSetting"
v-show="warningData.length">
v-show="warningData.length">
<li v-for="(item, index) of warningData" :key="index" @mouseover="addWarningPopup(item)"
@mouseout="delWarningPopup(item)">
@mouseout="delWarningPopup(item)">
<div class="warningItem">
<div class="left-type" :class="[
{ acci: item.eventType === '疑似事故' },
......@@ -85,7 +85,7 @@
</li>
</vue-seamless-scroll>
<div class="emptyText" v-show="!warningData.length">
<img :src="require('../../../assets/images/holo/svg/noWarning.svg')" />
<img :src="require('../../../assets/images/holo/svg/noWarning.svg')"/>
<div>暂无告警信息</div>
</div>
</div>
......@@ -104,21 +104,21 @@
</div>
</div>
</template>
<div class="traffics">
<vue-seamless-scroll ref='22' class="warningMsg" :data="overData" :class-option="optionSetting1"
v-show="overData.length">
<li @click="playOverHistoryTrace(item)" v-for="(item, index) of overData" class="overItem"
:key="index">
<div class='topLicense'> <span>预警时间:</span>{{ item.timeStamp }}</div>
<div class="trafficss">
<!-- <vue-seamless-scroll ref='22' class="warningMsg" :data="overData" :class-option="optionSetting1"-->
<!-- v-show="overData.length">-->
<div @click="playOverHistoryTrace(item)" v-for="(item, index) of overData" class="overItem"
:key="index">
<div class='topLicense'><span>预警时间:</span>{{ item.timeStamp }}</div>
<div class='detailMsg'>
<div><span>车牌:</span>{{ item.plateNo }}</div>
<div :title='item.inDirName'><span>行驶方向:</span>{{ item.inDirName }}</div>
<div><span>超限类型:</span>{{ item.type }}</div>
<div><span>超限类型:</span>{{ dict.overCarType[item.type] }}</div>
</div>
</li>
</vue-seamless-scroll>
</div>
<!-- </vue-seamless-scroll>-->
<div class="emptyText" v-show="!overData.length">
<img :src="require('../../../assets/images/holo/svg/noWarning.svg')" />
<img :src="require('../../../assets/images/holo/svg/noWarning.svg')"/>
<div>暂无超限信息</div>
</div>
</div>
......@@ -134,8 +134,8 @@
import dict from "@/config/holo/dictionary";
import msgCard from "../../../components/Standard/msg-card.vue";
import vueSeamlessScroll from 'vue-seamless-scroll'
import { eventAlarm, getAlarmOverDatas, getOverDatas } from "../../../dao/situation";
import { initWs } from "../../../config/holo/websocket";
import {eventAlarm, getAlarmOverDatas, getOverDatas} from "../../../dao/situation";
import {initWs} from "../../../config/holo/websocket";
import RegionalIndex from "./msgLeft/regionalIndex.vue";
import TrafficFlow from "./msgLeft/trafficFlow.vue";
import pedAndNoVehicles from "./msgLeft/pedAndNoVehicles.vue";
......@@ -158,16 +158,29 @@ export default {
dict,
activeName: '11',
overData: [
{ "plateNo": "京A895413", "inDirName": "东向西", "type": "201", "timeStamp": "2024-08-27 15:39:18" },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "504", "timeStamp": "2024-08-27 15:39:18" },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "504", "timeStamp": "2024-08-27 15:39:18" },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "504", "timeStamp": "2024-08-27 15:39:18" },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
// { "plateNo": "京A895413", "inDirName": "东向西", "type": "105", "timeStamp": "2024-08-27 15:39:18",length:10 },
],
alarmLoading: true,
overLoading: true,
init: true,
// 告警信息
warningData: [],
warningData: [
// {id:1},
// {id:1},
// {id:1},
// {id:1},
// {id:1},
// {id:1},
// {id:1},
// {id:1},
// {id:1},
],
lastWarningData: [],
topDataSecond: {},
topDataMin: {},
......@@ -190,7 +203,7 @@ export default {
},
optionSetting1() {
return {
step: 0.5, // 数值越大速度滚动越快
step: 0, // 数值越大速度滚动越快
limitMoveNum: 4, // 开始无缝滚动的数据量 this.dataList.length
hoverStop: true, // 是否开启鼠标悬停stop
direction: 1, // 0向下 1向上 2向左 3向右
......@@ -235,27 +248,33 @@ export default {
let year, month, day, hour, min, sec;
year = time.getFullYear();
month =
time.getMonth() + 1 < 10
? "0" + (time.getMonth() + 1)
: time.getMonth() + 1;
time.getMonth() + 1 < 10
? "0" + (time.getMonth() + 1)
: time.getMonth() + 1;
day = time.getDate() < 10 ? "0" + time.getDate() : time.getDate();
hour = time.getHours() < 10 ? "0" + time.getHours() : time.getHours();
min =
time.getMinutes() < 10 ? "0" + time.getMinutes() : time.getMinutes();
time.getMinutes() < 10 ? "0" + time.getMinutes() : time.getMinutes();
sec =
time.getSeconds() < 10 ? "0" + time.getSeconds() : time.getSeconds();
time.getSeconds() < 10 ? "0" + time.getSeconds() : time.getSeconds();
let dateTime = `${year}-${month}-${day} ${hour}:${min}:${sec}`; //+year + month + day + hour + min + sec;
return dateTime;
},
playOverHistoryTrace(row) {
let wsSend = {
"dataType": "OVER_RUN", //数据类型【固定值】
"timeStamp": row.timeStamp, //时间
'endTime': this.timeFormat(new Date(new Date(row.timeStamp).getTime() + 1000 * 10)),
"timeStamp": this.timeFormat(new Date(new Date(row.timeStamp).getTime() - 1000 * 10)),
'endTime': this.timeFormat(new Date(new Date(row.timeStamp).getTime() + 1000 *10)),
"globalId": row.globalId, //车辆ID
"overType": row.type //超限类型
"overType": row.type, //超限类型
'urls': row.videoUrls,
// 'urls': ['video/1.mp4','video/1.mp4'],
}
if (row.type == '105') {
wsSend.vehicleHeight = row.length
} else {
wsSend.vehicleWidth = row.length
}
console.log('close real time', row, wsSend);
this.$emit("playOverHistoryTrace", wsSend)
},
// 获取超限列表
......@@ -272,9 +291,6 @@ export default {
}
})
},
tabClick(e) {
this.$refs[e.name].reset()
},
initHelMetSocket() {
this.helMetSocket = initWs({
name: "callHelmet",
......@@ -306,7 +322,7 @@ export default {
return match?.name || "未定义";
},
addWarningPopup(item) {
this.$emit("addWarningPopup", item, { type: "hover" });
this.$emit("addWarningPopup", item, {type: "hover"});
},
delWarningPopup(item) {
this.$emit("delWarningPopup", item.eventSerialNumber);
......@@ -314,21 +330,21 @@ export default {
diff(oldData, newData) {
// id 只在 newData 中存在且不在 oldData 中存在的即为 add
return newData.filter(
(e) => !oldData.find((c) => c.startTime === e.startTime)
(e) => !oldData.find((c) => c.startTime === e.startTime)
);
},
getEventAlarm() {
// this.alarmLoading = true
eventAlarm().then((res) => {
this.alarmLoading = false
// console.log("事件告警", res.content);
console.log("事件告警", res.content);
this.warningData = res.content;
if (!this.init) {
if (this.lastWarningData.length !== res.content.length) {
// 最新发生的告警信息
let newMegs = this.diff(this.lastWarningData, this.warningData);
for (let item of newMegs) {
this.$emit("addWarningPopup", item, { type: "auto" });
this.$emit("addWarningPopup", item, {type: "auto"});
}
}
}
......@@ -337,14 +353,14 @@ export default {
});
},
getOverDataTopSecond() {
getOverDatas({ type: 1 }).then((res) => {
getOverDatas({type: 1}).then((res) => {
if (res.content) {
this.topDataSecond = res.content;
}
});
},
getOverDataTopMin() {
getOverDatas({ type: 2 }).then((res) => {
getOverDatas({type: 2}).then((res) => {
if (res.content) {
this.topDataMin = res.content;
}
......@@ -473,8 +489,27 @@ export default {
display: flex;
align-items: center;
justify-content: center;
overflow: auto;
width: 100%;
height: 100%;
.warningMsg {
overflow: hidden;
}
}
.trafficss {
color: rgba(155, 177, 212, 1);
//display: flex;
//align-items: center;
//justify-content: center;
overflow: auto;
width: 100%;
height: 100%;
.warningMsg {
overflow: auto;
}
}
::v-deep .el-tabs__item {
......@@ -488,9 +523,9 @@ export default {
::v-deep .el-tabs__active-bar {
background: linear-gradient(90deg,
transparent 0%,
rgba(41, 110, 194, 1) 50%,
transparent 100%);
transparent 0%,
rgba(41, 110, 194, 1) 50%,
transparent 100%);
}
::v-deep .el-tabs__header {
......@@ -535,6 +570,8 @@ export default {
display: flex;
align-items: center;
justify-content: center;
background-color: rgba(24, 144, 255, 0.4);
color: rgba(24, 144, 255, 1);
span {
display: inline-block;
......@@ -595,6 +632,7 @@ export default {
}
.message {
border: 1px solid rgba(24, 144, 255, 0.4);
padding: 0 0 0 10px;
// border: 1px solid rgba(60, 27, 37, 1);
display: flex;
......@@ -691,6 +729,9 @@ export default {
}
}
}
.overItem:last-child{
margin-bottom: 0;
}
}
.map-mask {
......@@ -702,19 +743,19 @@ export default {
z-index: 10;
pointer-events: none;
background-image: linear-gradient(90deg,
rgba(3, 11, 25, 1) 0%,
rgba(3, 11, 25, 0.2) 8%,
rgba(3, 11, 25, 0) 12%,
rgba(3, 11, 25, 0) 50%,
rgba(3, 11, 25, 0) 88%,
rgba(3, 11, 25, 0.2) 92%,
rgba(3, 11, 25, 1) 100%),
linear-gradient(0deg,
rgba(3, 11, 25, 1) 0%,
rgba(3, 11, 25, 0.2) 8%,
rgba(3, 11, 25, 0) 12%,
rgba(3, 11, 25, 0) 80%,
rgba(3, 11, 25, 0.5) 95%,
rgba(3, 11, 25, 1) 100%);
rgba(3, 11, 25, 1) 0%,
rgba(3, 11, 25, 0.2) 8%,
rgba(3, 11, 25, 0) 12%,
rgba(3, 11, 25, 0) 50%,
rgba(3, 11, 25, 0) 88%,
rgba(3, 11, 25, 0.2) 92%,
rgba(3, 11, 25, 1) 100%),
linear-gradient(0deg,
rgba(3, 11, 25, 1) 0%,
rgba(3, 11, 25, 0.2) 8%,
rgba(3, 11, 25, 0) 12%,
rgba(3, 11, 25, 0) 80%,
rgba(3, 11, 25, 0.5) 95%,
rgba(3, 11, 25, 1) 100%);
}
</style>
<template>
<div class="main situation" v-loading.fullscreen.lock="loading" element-loading-text="数据加载中..."
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)">
<track-switcher :detetors="detetorsArray" :boxShow="boxesShow" @timeChange="timeChange" v-show="trackSwitcherVis"
@closeRealTime="closeRealTime" @openRealTime="openRealTime"></track-switcher>
<situation-time v-show="currentCheck === 'first' && timeState" class="situationTime" :time="situationTimeVal" />
<wMap :mapId="'situation-map'" ref="wMap" />
@closeRealTime="closeRealTime" @openRealTime="openRealTime"></track-switcher>
<situation-time v-show="currentCheck === 'first' && timeState" class="situationTime" :time="situationTimeVal"/>
<wMap :mapId="'situation-map'" ref="wMap"/>
<!--左右图表组件-->
<message-boxes @playOverHistoryTrace="playOverHistoryTrace" @delWarningPopup="delWarningPopup"
@addWarningPopup="addWarningPopup" :show="boxesShow" />
@addWarningPopup="addWarningPopup" :show="boxesShow"/>
<!--图层切换按钮-->
<layers-switch ref="switch" :show="boxesShow" @changeCheck="changeCheck" @visibleChange="visibleChange"
:class="boxesShow ? 'generalSwitch' : 'rightSwitch'" />
:class="boxesShow ? 'generalSwitch' : 'rightSwitch'"/>
<!--视频播放组件-->
<video-list ref="videoList" v-if="showCameras.length" @updateCamera="updateCameraCPB" @resetCamera="resetCamera"
@delVideo="deleteVideo" :showCameras="showCameras" />
@delVideo="deleteVideo" :showCameras="showCameras"/>
<!--路口详情-->
<cross-detail v-if="dialogVisible.crossDetail" @actionFinished="actionFinished" dialogId="crossDetail"
:crossDetailData="crossDetailData" />
:crossDetailData="crossDetailData"/>
<!--底部交通事件趋势分析-->
<traffic-events-tend @updateHeatMap="refreshEventLayer" v-if="currentCheck === 'third'" />
<traffic-events-tend @updateHeatMap="refreshEventLayer" v-if="currentCheck === 'third'"/>
<!--设备图例控制-->
<equipment-switch @equipmentChange="equipmentChange" v-if="currentCheck === 'fourth'" />
<equipment-switch @equipmentChange="equipmentChange" v-if="currentCheck === 'fourth'"/>
<!--单车超限历史轨迹视频-->
<sigalTraceVideos :key="sigalKey" v-if="showHisVid" :timeDuration="timeDuration"></sigalTraceVideos>
<sigalTraceVideos @isReady="singalHistoryVideoReady" :urls="hisUrls" :key="sigalKey"
v-if="showHisVid"></sigalTraceVideos>
</div>
</template>
......@@ -34,7 +35,7 @@ import MessageBoxes from "./floatData/messageBoxes.vue";
import CrossDetail from "./crossDetail.vue";
import VideoList from "./floatData/videoList.vue";
import TrafficEventsTend from "./floatData/trafficEventsTend.vue";
import { initWs } from "../../config/holo/websocket";
import {initWs} from "../../config/holo/websocket";
import dict from "../../config/holo/dictionary";
import mapAssets from "../../config/holo/mapAssets";
import * as mapTools from "../../utils/mapboxTools";
......@@ -59,7 +60,7 @@ import {
equip_radar,
getDetetors,
} from "../../dao/situation";
import { convertPointsToGeo, convertPointsWktToGeo, convertToLineWithWkt } from "../../utils/mapboxTools";
import {convertPointsToGeo, convertPointsWktToGeo, convertToLineWithWkt} from "../../utils/mapboxTools";
const VehiclePopup = Vue.extend(vehicleDetail);
const EquipmentPopup = Vue.extend(equipmentPopup);
......@@ -68,11 +69,11 @@ const AlarmPopup = Vue.extend(alarmPopup)
let pulsingDots = [];
const canvasImages = [
{ size: 250, color: "252, 1, 26" },
{ size: 400, color: "255,235,59" },
{ size: 400, color: "255, 141, 26" },
{ size: 400, color: "227, 5, 5" },
{ size: 400, color: "24, 144, 255" },
{size: 250, color: "252, 1, 26"},
{size: 400, color: "255,235,59"},
{size: 400, color: "255, 141, 26"},
{size: 400, color: "227, 5, 5"},
{size: 400, color: "24, 144, 255"},
];
for (let i = 0; i < canvasImages.length; i++) {
let size = canvasImages[i].size;
......@@ -108,18 +109,18 @@ for (let i = 0; i < canvasImages.length; i++) {
pulsingDots.push(pulsingDot);
}
let map,
equipPopup = null, // 设备弹窗
popupInstance = null, // 设备弹窗组件实例 用来更新数据与销毁
vehiclePopups = {},
popupVises = {},
vehiclePopupInstances = {},
licenseLabel = {}, // 车牌号label
vehicleModels = {}, // 车辆model
vehicleModelTypes = {},
lastFrameTime = null,
noTrackMsg = null,
AlarmPopupIns = {},
trackTimer = null; // 轨迹心跳检测
equipPopup = null, // 设备弹窗
popupInstance = null, // 设备弹窗组件实例 用来更新数据与销毁
vehiclePopups = {},
popupVises = {},
vehiclePopupInstances = {},
licenseLabel = {}, // 车牌号label
vehicleModels = {}, // 车辆model
vehicleModelTypes = {},
lastFrameTime = null,
noTrackMsg = null,
AlarmPopupIns = {},
trackTimer = null; // 轨迹心跳检测
export default {
mixins: [
......@@ -154,10 +155,11 @@ export default {
return {
sigalKey: '',
showHisVid: false,
timeDuration: {
startTime: "",
endTime: "",
},
hisUrls: [],
// timeDuration: {
// startTime: "",
// endTime: "",
// },
// Mixin 公用数据
crossGeo: null, //所有路口lnglat geojson集合
sockets: [],
......@@ -206,6 +208,7 @@ export default {
cLocation: "",
overCarsPoints: {}, // 储存超限车辆动态经纬度
backToRealTimer: null, // 存储回到实时车流倒计时器
historyWsToSend: null,
};
},
watch: {
......@@ -213,18 +216,35 @@ export default {
boxesShow(val) {
if (val) {
document
.getElementsByClassName("mapboxgl-ctrl-bottom-right")[0]
.classList.remove("mapboxgl-ctrl-bottom-right-hide-box");
.getElementsByClassName("mapboxgl-ctrl-bottom-right")[0]
.classList.remove("mapboxgl-ctrl-bottom-right-hide-box");
} else {
document
.getElementsByClassName("mapboxgl-ctrl-bottom-right")[0]
.classList.add("mapboxgl-ctrl-bottom-right-hide-box");
.getElementsByClassName("mapboxgl-ctrl-bottom-right")[0]
.classList.add("mapboxgl-ctrl-bottom-right-hide-box");
}
},
},
created() {
},
mounted() {
this.$EventBus.$on("emitPopupClose", ({id, overRun}) => {
console.log('eventbus event received...', id)
vehiclePopups[`popup${id}`]?.remove();
delete vehiclePopups[`popup${id}`];
delete this.highLightCarTracks[id]
delete this.overCarsPoints[id]
popupVises[`popup${id}`] = false;
// 如果当前正在播放超限历史轨迹 则停止
if (this.showHisVid && overRun) {
console.log('close his ws...')
clearTimeout(this.backToRealTimer)
this.backToRealTimer = null
this.closeWs('callCar1').then(() => {
this.openRealTime()
})
}
})
getDetetors().then((res) => {
this.detetorsArray = res.content;
});
......@@ -241,9 +261,9 @@ export default {
];
for (let item of needDicts) {
queue.push(
this.$store.dispatch("QUERY_DICT", {
type: item,
})
this.$store.dispatch("QUERY_DICT", {
type: item,
})
);
}
Promise.all(queue).then(() => {
......@@ -276,7 +296,7 @@ export default {
// 重度拥堵: 3,
// 疑似事故: 4,
// };
let resItem = Object.assign({}, item, { longitude: item.lng, latitude: item.lat, type: 3 })
let resItem = Object.assign({}, item, {longitude: item.lng, latitude: item.lat, type: 3})
mapTools.addOrUpdateWarningWave(map, [resItem], item.eventSerialNumber);
// 上报产生的告警 弹窗提醒 定时销毁
let popup = new mapboxgl.Popup({
......@@ -285,10 +305,10 @@ export default {
offset: [0, 0],
});
popup
.setLngLat([item.lng, item.lat])
.setHTML('<div id="alarm_popup"></div>')
.addTo(map)
.addClassName("alarmPopup");
.setLngLat([item.lng, item.lat])
.setHTML('<div id="alarm_popup"></div>')
.addTo(map)
.addClassName("alarmPopup");
new AlarmPopup({
propsData: {
model: item,
......@@ -325,61 +345,73 @@ export default {
this.lastLocation = [];
});
},
// 视频就绪后开始播放轨迹
singalHistoryVideoReady() {
console.log('视频请求完成,开始播放单车历史轨迹。。。');
this.loading = false
// 播放单车历史ws
let socket = initWs({
name: "callCar1",
url: `ws://${window.wsHost}/holows/subscribe`,
callback: this.callCar,
});
socket.ws.onopen = () => {
if (this.backToRealTimer) {
clearTimeout(this.backToRealTimer)
this.backToRealTimer = null
}
this.backToRealTimer = setTimeout(() => {
// vehiclePopups[`popup${id}`]?.remove();
// delete vehiclePopups[`popup${id}`];
// delete this.highLightCarTracks[id]
// delete this.overCarsPoints[id]
// popupVises[`popup${id}`] = false;
this.closeWs('callCar1').then(() => {
this.removeVehiclePopup()
this.overCarsPoints = {}
this.openRealTime()
})
this.backToRealTimer = null
}, 1000 * 20)
if (socket.ws.readyState === 1) {
this.showHisVid = true
this.sockets.push(socket);
delete this.historyWsToSend.urls
let msg = JSON.stringify(this.historyWsToSend)
socket.ws.send(msg);
// socket.ws.send('{"dataType":"OVER_RUN","timeStamp":"2024-09-13 16:44:30.000","endTime":"2024-09-13 16:44:40.000","globalId":"10552117","vehicleHeight":6,"vehicleWidth":2.55,"overType":1}')
}
};
},
playOverHistoryTrace(sendMsg) {
this.historyWsToSend = sendMsg
if (this.backToRealTimer) {
clearTimeout(this.backToRealTimer)
this.backToRealTimer = null
}
Promise.all([this.closeWs('callCar'), this.closeWs('callCar1')]).then(() => {
console.log('closed all...');
// todo 清除popups
this.removeVehiclePopup()
this.overCarsPoints = {}
this.removeAllRadars()
this.radarShow = false
this.clearTrackTimer();
window.tb?.clear(null, true);
window.tb?.update();
this.lastLocation = [];
this.timeDuration = {
startTime: sendMsg.timeStamp,
endTime: sendMsg.endTime,
};
// 开始请求视频
this.sigalKey = sendMsg.globalId
this.hisUrls = sendMsg.urls || []
this.$nextTick(() => {
// 播放单车历史ws
let socket = initWs({
name: "callCar1",
url: `ws://${window.wsHost}/holows/subscribe`,
callback: this.callCar,
});
socket.ws.onopen = () => {
if (this.backToRealTimer) {
clearTimeout(this.backToRealTimer)
this.backToRealTimer = null
}
this.backToRealTimer = setTimeout(() => {
this.closeWs('callCar1').then(() => {
this.openRealTime()
this.showHisVid = false
})
this.backToRealTimer = null
}, 1000 * 10)
if (socket.ws.readyState === 1) {
this.sockets.push(socket);
this.showHisVid = true
this.sigalKey = sendMsg.globalId
// socket.ws.send('{ dataType: "1"}');
// socket.ws.send('{"dataType":"OVER_RUN","timeStamp":"2024-09-06 15:01:17.000","endTime":"2024-09-06 15:01:27.000","globalId":"10547041","vehicleHeight":6,"vehicleWidth":2.55,"overType":1}')
socket.ws.send(JSON.stringify(sendMsg));
}
};
// socket.ws.onclose = () => {
// // this.closeRealTime()
// if(this.showHisVid){
// this.showHisVid = false
// this.openRealTime()
// }
// };
if (this.hisUrls.length) {
this.loading = true
} else {
this.singalHistoryVideoReady()
}
})
})
},
openRealTime() {
this.registerListener();
......@@ -393,9 +425,9 @@ export default {
for (let item of equips) {
if (map.getLayer(item.label)) {
map.setLayoutProperty(
item.label,
"visibility",
item.check ? "visible" : "none"
item.label,
"visibility",
item.check ? "visible" : "none"
);
}
}
......@@ -450,10 +482,10 @@ export default {
offsetLength = offsetLength + Number(cameraItem.installHeight);
}
let translatedPoint = turf.destination(
this.cLocation,
offsetLength, // 相机向前偏移距离
this.cBearing,
{ units: "meters" }
this.cLocation,
offsetLength, // 相机向前偏移距离
this.cBearing,
{units: "meters"}
).geometry.coordinates;
map.flyTo({
center: translatedPoint,
......@@ -505,14 +537,14 @@ export default {
}
for (let i = 0; i < pulsingDots.length; i++) {
if (map && !map.hasImage(`pulsingDot${i}`))
map.addImage(`pulsingDot${i}`, pulsingDots[i], { pixelRatio: 2 });
map.addImage(`pulsingDot${i}`, pulsingDots[i], {pixelRatio: 2});
}
// 添加map icons图片资源 ---end
this.loading = false;
this.mixDraw(map);
map.addControl(
new mapboxgl.NavigationControl({ showZoom: false }),
"bottom-right"
new mapboxgl.NavigationControl({showZoom: false}),
"bottom-right"
);
this.refreshBounds();
// 快捷键
......@@ -522,24 +554,24 @@ export default {
if (event.altKey && event.keyCode === 82) {
this.rulerStatus = !this.rulerStatus;
this.rulerStatus
? mapTools.addCalibrationTail(map)
: this.removeLayers("calibrationTailLine,chunkSymbol,chunkText");
? mapTools.addCalibrationTail(map)
: this.removeLayers("calibrationTailLine,chunkSymbol,chunkText");
}
// alt + x 显示隐藏绘制工具
if (event.altKey && event.keyCode === 88) {
this.boxesShow = false;
if (
document.getElementsByClassName("mapboxgl-ctrl-top-right")[0]
.style.display === "none" ||
document.getElementsByClassName("mapboxgl-ctrl-top-right")[0]
.style.display === ""
document.getElementsByClassName("mapboxgl-ctrl-top-right")[0]
.style.display === "none" ||
document.getElementsByClassName("mapboxgl-ctrl-top-right")[0]
.style.display === ""
) {
document.getElementsByClassName(
"mapboxgl-ctrl-top-right"
"mapboxgl-ctrl-top-right"
)[0].style.display = "unset";
} else {
document.getElementsByClassName(
"mapboxgl-ctrl-top-right"
"mapboxgl-ctrl-top-right"
)[0].style.display = "none";
}
}
......@@ -622,7 +654,7 @@ export default {
type: "gltf",
units: "meters",
scale: 0.8,
adjustment: { x: 0.5, y: 1, z: -0.5 },
adjustment: {x: 0.5, y: 1, z: -0.5},
bbox: true,
};
window.tb.loadObj(options, (model) => {
......@@ -719,7 +751,7 @@ export default {
let centerP = turf.point([map.getCenter().lng, map.getCenter().lat]);
// 取最近点的crossId
let nearest = turf.nearestPoint(centerP, this.crossGeo);
this.firstCrossClick({ features: [nearest] })
this.firstCrossClick({features: [nearest]})
}
//--------------------------------------------------------------------
// 注册车辆实时ws
......@@ -732,6 +764,7 @@ export default {
socket.ws.onopen = () => {
console.log('ws open callCar')
if (socket.ws.readyState === 1) {
this.showHisVid = false
socket.ws.send('{ dataType: "1"}');
this.sockets.push(socket);
}
......@@ -749,10 +782,10 @@ export default {
offset: [0, -30],
});
eventPopup
.setLngLat([data.lng, data.lat])
.setHTML('<div id="event_popup"></div>')
.addTo(map)
.addClassName("eventPopup");
.setLngLat([data.lng, data.lat])
.setHTML('<div id="event_popup"></div>')
.addTo(map)
.addClassName("eventPopup");
new EventPopup({
propsData: {
model: data,
......@@ -761,7 +794,7 @@ export default {
},
// 交通事件热力图 & 点
refreshEventLayer(type) {
eventInfo({ dayType: type }).then((res) => {
eventInfo({dayType: type}).then((res) => {
// 热力图 - 如果还未创建 先创建图层 赋值
if (this.currentCheck === "third") {
mapTools.addOrUpdateEventHeat(map, res.content);
......@@ -833,12 +866,12 @@ export default {
distance = 80;
}
let bearing = map.getBearing(); // 平移方向,0 表示正北方向
let options = { units: "meters" };
let options = {units: "meters"};
let translatedPoint = turf.destination(
prop.wkt.split(","),
distance,
bearing,
options
prop.wkt.split(","),
distance,
bearing,
options
);
// 将地图中心点设置为平移后的点
map.flyTo({
......@@ -850,14 +883,14 @@ export default {
offset: [0, -20],
});
equipPopup
.setLngLat(prop.wkt.split(","))
.setHTML('<div id="equipment_popup"></div>')
.addTo(map)
.setMaxWidth("500")
.addClassName("equipmentPopup");
.setLngLat(prop.wkt.split(","))
.setHTML('<div id="equipment_popup"></div>')
.addTo(map)
.setMaxWidth("500")
.addClassName("equipmentPopup");
popupInstance = new EquipmentPopup({
propsData: {
model: { equip_type: type, ...prop },
model: {equip_type: type, ...prop},
},
});
popupInstance.$mount("#equipment_popup");
......@@ -884,12 +917,12 @@ export default {
this.$refs.videoList?.destroyAll();
this.hideTb();
this.closeAllWs()
.then(() => {
this.hideTb();
this[`switch${checkItem.label}`]();
})
.catch(() => {
});
.then(() => {
this.hideTb();
this[`switch${checkItem.label}`]();
})
.catch(() => {
});
} else {
if (beforeLabel === "fourth") {
equipPopup?.remove();
......@@ -915,15 +948,15 @@ export default {
return item.code == options.originalColor;
});
let realColor = colorDesc
? dict.colorMatch[colorDesc.name]
: "#fff";
? dict.colorMatch[colorDesc.name]
: "#fff";
child.material.color.set(realColor);
}
});
}
model.setCoords([options.longitude, options.latitude]);
model.userData.data = options;
model.setRotation({ x: 90, y: 360 - options.courseAngle - 90, z: 0 });
model.setRotation({x: 90, y: 360 - options.courseAngle - 90, z: 0});
},
// 更新超限车辆高亮波纹底盘
updateOverCarLnglat() {
......@@ -957,6 +990,7 @@ export default {
},
removeVehiclePopup() {
for (let key in vehiclePopups) {
vehiclePopups[key]?.remove();
}
vehiclePopups = {};
......@@ -989,23 +1023,17 @@ export default {
properties: data,
}
vehiclePopups[`popup${data.id}`] = new mapboxgl.Popup({
closeButton: true,
// closeButton: true,
closeButton: false,
anchor: "bottom",
closeOnClick: false,
offset: [0, -20],
});
vehiclePopups[`popup${data.id}`]
.setLngLat([data.longitude, data.latitude])
.setHTML(`<div id="vehicle_popup${data.id}"></div>`)
.addTo(map)
.addClassName("vehicleDetailPopup");
vehiclePopups[`popup${data.id}`].on("close", () => {
vehiclePopups[`popup${data.id}`] = null;
delete vehiclePopups[`popup${data.id}`];
delete this.highLightCarTracks[data.id]
delete this.overCarsPoints[data.id]
popupVises[`popup${data.id}`] = false;
});
.setLngLat([data.longitude, data.latitude])
.setHTML(`<div id="vehicle_popup${data.id}"></div>`)
.addTo(map)
.addClassName("vehicleDetailPopup");
popupVises[`popup${data.id}`] = true;
vehiclePopupInstances[`popup${data.id}`] = new VehiclePopup({
propsData: {
......@@ -1013,7 +1041,7 @@ export default {
},
});
vehiclePopupInstances[`popup${data.id}`].$mount(
`#vehicle_popup${data.id}`
`#vehicle_popup${data.id}`
);
}
},
......@@ -1075,7 +1103,7 @@ export default {
} else {
this.clearLicense();
this.removeLayers(
"lightLayer,lightLayerText,vehicleSelectWave,vehiclePic,waitingLayer"
"lightLayer,lightLayerText,vehicleSelectWave,vehiclePic,waitingLayer"
);
mapTools.addOrUpdateVehicle(map, msg);
map.on("click", "vehicle", this.vehicleCircleClick);
......@@ -1096,7 +1124,6 @@ export default {
}
// 超限车辆弹窗判断 todo
if (item.overRun?.overType) {
console.log('检测到超限...', item.overRun)
// 如果超限车辆第一次添加 则设置 popupVises[`popup${item.id}`] 为 true
if (!this.overCarsPoints[item.id]) {
popupVises[`popup${item.id}`] = true
......@@ -1106,19 +1133,21 @@ export default {
for (let t of overArr) {
overStr += dict.overCarType[t]
}
this.$notify({
title: '超限车辆',
dangerouslyUseHTMLString: true,
customClass: 'manageWebNotify',
message: `
if (!this.showHisVid && ['add', 'com'].includes(item.dill)) {
this.$notify({
title: '超限车辆',
dangerouslyUseHTMLString: true,
customClass: 'manageWebNotify',
message: `
<div>车牌号:${item.picLicense || '--'}</div>
<div>超限类型:${overStr}</div>
<div>预警时间:${item.overRun.timeStamp}</div>
`,
type: 'warning',
position: 'bottom-right',
duration: 5000
});
type: 'warning',
position: 'bottom-right',
duration: 5000
});
}
}
if (['add', 'com'].includes(item.dill)) {
if (popupVises[`popup${item.id}`]) {
......@@ -1139,8 +1168,8 @@ export default {
if (zoom > 18) {
// 新增
if (
item.dill === "add" ||
(item.dill === "com" && !vehicleModels[item.id])
item.dill === "add" ||
(item.dill === "com" && !vehicleModels[item.id])
) {
this.addVehicleModels(item);
if (this.licenseState) this.addVehicleLicenses(item);
......@@ -1161,8 +1190,8 @@ export default {
if (item.dill === "com") {
// 车型中途变化 清除并重新创建
if (
vehicleModels[key].userData.data.originalType !==
item.originalType
vehicleModels[key].userData.data.originalType !==
item.originalType
) {
if (vehicleModels[key]) {
window.tb.clear(item.id, true);
......@@ -1178,8 +1207,8 @@ export default {
if (licenseLabel[`license${item.id}`]) {
// 如果车牌model存在且未改变 则setCoords
if (
licenseLabel[`license${item.id}`].userData.data
.picLicense == item.picLicense
licenseLabel[`license${item.id}`].userData.data
.picLicense == item.picLicense
) {
licenseLabel[`license${item.id}`].setCoords([
item.longitude,
......@@ -1248,9 +1277,9 @@ export default {
let model = vehicleModelTypes[`car${option.originalType}`].duplicate();
this.setModel(model, option, true);
model.addEventListener(
"SelectedChange",
this.onSelectedChangeVehicle,
false
"SelectedChange",
this.onSelectedChangeVehicle,
false
);
vehicleModels[option.id] = model;
window.tb.add(model, option.id);
......@@ -1262,7 +1291,7 @@ export default {
ele.style.color = "white";
ele.innerText = option.picLicense;
ele.style.backgroundImage = `url('${mapAssets.mapIcons[`license${option.licenseColor}`]
}')`;
}')`;
ele.style.backgroundSize = "100% 100%";
ele.style.fontSize = "8px";
ele.style.textAlign = "center";
......@@ -1273,7 +1302,7 @@ export default {
topMargin: 2,
});
license.setCoords([option.longitude, option.latitude, 4]);
license.userData.data = { picLicense: option.picLicense };
license.userData.data = {picLicense: option.picLicense};
window.tb.add(license, `license${option.id}`);
licenseLabel[`license${option.id}`] = license;
}
......@@ -1350,6 +1379,7 @@ export default {
},
beforeDestroy() {
this.$EventBus.$off("emitPopupClose");
this.clearTrackTimer();
this.closeAllWs();
window.tb.dispose();
......@@ -1445,7 +1475,7 @@ export default {
box-shadow: none !important;
}
.mapboxgl-ctrl-group button+button {
.mapboxgl-ctrl-group button + button {
border-top: unset !important;
}
......
......@@ -4,6 +4,7 @@
<div class="vehicleDetailInner">
<div class="head">
<span class="titleBefore"></span><span>{{ model.picLicense || "暂无车牌号信息" }}</span>
<div @click="emitPopupClose" class="el-icon-close"></div>
</div>
<div class="content">
<div class="detailItem">
......@@ -71,6 +72,9 @@ export default {
// console.log("model", this.model);
},
methods: {
emitPopupClose(){
this.$EventBus.$emit("emitPopupClose",{id:this.model.id,overRun: !this.notExceed});
},
convertDict(type, value) {
for (let item of store.state.dicts[type]) {
if (item.code == value) {
......@@ -146,6 +150,15 @@ export default {
color: white;
display: flex;
align-items: center;
position: relative;
div{
position: absolute;
cursor: pointer;
right: 3px;
top: 18px;
font-weight: bold;
font-size: 20px;
}
span {
display: inline-block;
......
<template>
<div id="holo_historyCameraContainer" class="eventCameraContainer" v-show="true">
<div id="historyCameraContainer" class="historyCameraContainer">
<div class="cameraVideoShow" :key="index" v-for="(item, index) of channels" v-show="true"
:id="`videoVisibles${item}`">
<loop-video class="holo_his" ref="hisVideo" :autoplay="true" :timeModel="timeDuration" :channel="item"></loop-video>
</div>
</div>
<div id="holo_historyCameraContainer" class="eventCameraContainer" v-show="true">
<div id="historyCameraContainer" class="historyCameraContainer">
<div class="cameraVideoShow" :key="index" v-for="(item, index) of urls" v-show="true"
:id="`videoVisibles${item}`">
<!-- <loop-video @loadEnd="loadEnd" class="holo_his" ref="hisVideo" :autoplay="true" :timeModel="timeDuration" :channel="item"></loop-video>-->
<video :src="item" style="object-fit: fill;width: 100%;height: 100%;" @canplay="videoCanPlay" autoplay
muted
loop
class="videoControl" ref="loopVideoPlayer">
<!-- <source :src="item" type="video/mp4" />-->
<!-- 您的浏览器不支持 video 属性。-->
</video>
</div>
</div>
</div>
</template>
<script>
import LoopVideo from "../../../components/Standard/loopVideo.vue";
export default {
name: "historyVideos",
components: {
LoopVideo,
},
props: {
channels: {
type: Array,
default() {
return ['2', '9']
}
},
timeDuration: {
type: Object,
default() {
return {
startTime: '',
endTime: ''
}
}
},
},
data() {
return {
}
name: "historyVideos",
components: {
LoopVideo,
},
props: {
// channels: {
// type: Array,
// default() {
// return ['2', '9']
// }
// },
urls: {
type: Array,
default() {
return []
}
},
computed: {},
methods: {
// playHisVideos() {
// if (this.$refs.hisVideo) {
// for (let container of this.$refs.hisVideo) {
// container?.startPlay();
// }
// }
// }
// timeDuration: {
// type: Object,
// default() {
// return {
// startTime: '',
// endTime: ''
// }
// }
// },
},
mounted() {
console.log('urls', this.urls)
},
data() {
return {
ready: false
}
},
computed: {},
methods: {
// playHisVideos() {
// if (this.$refs.hisVideo) {
// for (let container of this.$refs.hisVideo) {
// container?.startPlay();
// }
// }
// }
videoCanPlay() {
if (!this.ready) {
this.ready = true
this.$emit('isReady')
}
},
},
};
</script>
<style lang="less" scoped>
.eventCameraContainer {
position: absolute;
width: 600px;
height: 200px;
max-width: 600px;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
display: flex;
margin: 0 auto;
border: 1px solid rgba(83, 146, 189, 1);
background: rgba(10, 26, 41, 0.9);
border-radius: 6px;
.holo_his{
border: 1px solid rgba(255,255,255,0.3);
}
position: absolute;
width: 600px;
height: 200px;
max-width: 600px;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
display: flex;
margin: 0 auto;
border: 1px solid rgba(83, 146, 189, 1);
background: rgba(10, 26, 41, 0.9);
border-radius: 6px;
.historyCameraContainer {
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
height: 100%;
.holo_his {
border: 1px solid rgba(255, 255, 255, 0.3);
.cameraVideoShow {
width: 50%;
height: 100%;
padding: 4px;
}
}
.lessWidthVideo {
width: calc(100% - 6px);
}
.historyCameraContainer {
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
height: 100%;
.cameraVideoShow {
width: 50%;
height: 100%;
padding: 4px;
}
.normalWidthVideo {
width: 100%;
}
.lessWidthVideo {
width: calc(100% - 6px);
}
.noVideo {
pointer-events: none;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
font-size: 32px;
color: #04396f;
.normalWidthVideo {
width: 100%;
}
}
.noVideo {
pointer-events: none;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
font-size: 32px;
color: #04396f;
}
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment