diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/src/views/monitor/realTime/control-media.vue b/src/views/monitor/realTime/control-media.vue
index 46e92c7..8162009 100644
--- a/src/views/monitor/realTime/control-media.vue
+++ b/src/views/monitor/realTime/control-media.vue
@@ -289,14 +289,21 @@
return null
}
}
-
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 拉取流
async function fetchMediaStream(deviceId: string, channelId: string) {
loading.value = true
const res = await getMediaStream(deviceId, channelId, mediaToken.value)
loading.value = false
if (res && res.data) {
- mediaUrl.value = `${res.data.ws_flv}?token=${window.localStorage.getItem('token')}`
+ const url = res.data.ws_flv || res.data.flv
+ mediaUrl.value = `${url}?token=${window.localStorage.getItem('token')}`
+ console.log('获取到的流地址', mediaUrl.value)
jessibucaRef.value.play(mediaUrl.value)
return res.data.flv
}
@@ -360,12 +367,14 @@
frameborder="0"
class="videoControl"
/> -->
-
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/src/views/monitor/realTime/control-media.vue b/src/views/monitor/realTime/control-media.vue
index 46e92c7..8162009 100644
--- a/src/views/monitor/realTime/control-media.vue
+++ b/src/views/monitor/realTime/control-media.vue
@@ -289,14 +289,21 @@
return null
}
}
-
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 拉取流
async function fetchMediaStream(deviceId: string, channelId: string) {
loading.value = true
const res = await getMediaStream(deviceId, channelId, mediaToken.value)
loading.value = false
if (res && res.data) {
- mediaUrl.value = `${res.data.ws_flv}?token=${window.localStorage.getItem('token')}`
+ const url = res.data.ws_flv || res.data.flv
+ mediaUrl.value = `${url}?token=${window.localStorage.getItem('token')}`
+ console.log('获取到的流地址', mediaUrl.value)
jessibucaRef.value.play(mediaUrl.value)
return res.data.flv
}
@@ -360,12 +367,14 @@
frameborder="0"
class="videoControl"
/> -->
-
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/src/views/monitor/realTime/control-media.vue b/src/views/monitor/realTime/control-media.vue
index 46e92c7..8162009 100644
--- a/src/views/monitor/realTime/control-media.vue
+++ b/src/views/monitor/realTime/control-media.vue
@@ -289,14 +289,21 @@
return null
}
}
-
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 拉取流
async function fetchMediaStream(deviceId: string, channelId: string) {
loading.value = true
const res = await getMediaStream(deviceId, channelId, mediaToken.value)
loading.value = false
if (res && res.data) {
- mediaUrl.value = `${res.data.ws_flv}?token=${window.localStorage.getItem('token')}`
+ const url = res.data.ws_flv || res.data.flv
+ mediaUrl.value = `${url}?token=${window.localStorage.getItem('token')}`
+ console.log('获取到的流地址', mediaUrl.value)
jessibucaRef.value.play(mediaUrl.value)
return res.data.flv
}
@@ -360,12 +367,14 @@
frameborder="0"
class="videoControl"
/> -->
-
+
+
+
+
+
+
+ ({{ data.onlineDevices }}/{{ data.totalDevices }})
+
+
+
+ {{ node.label }}
+ ({{ data.device.deviceTypeName }})
+
+ {{ node.label }}
+ {{ node.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 识别关注要点:
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1屏
+
+
+ 4屏
+
+
+
+
+
+ {{ loadingTest }}
+
+
+
+
+
+
+ {{ loadingTestSplit4[index] }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/config/config.json b/public/config/config.json
index 6b43e49..15c0255 100644
--- a/public/config/config.json
+++ b/public/config/config.json
@@ -3,7 +3,7 @@
"baseUrl": "http://192.168.83.42:6909/safe-server/",
"deployPathDec": "****************注意:这个/alarm的alarm一定要改成部署的文件夹的名字***************************",
"deployPath": "/safe",
- "mediaBaseUrl": "http://192.168.83.65:8099",
+ "mediaBaseUrl": "http://192.168.83.42:8099",
"lat-bd": "39.91459528",
"lng-bd": "116.26499505",
"lat": "39.90",
diff --git a/public/playerVideo6/jessibuca.js b/public/playerVideo6/jessibuca.js
index 601f208..1450494 100644
--- a/public/playerVideo6/jessibuca.js
+++ b/public/playerVideo6/jessibuca.js
@@ -37,8 +37,8 @@
hasControl: !1,
loadingText: '',
background: '',
- // decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
- decoder: `/playerVideo6/decoder.js`, // 本地使用
+ decoder: `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`, // 线上使用
+ // decoder: `/playerVideo6/decoder.js`, // 本地使用
// decoder: import.meta.env.MODE === 'development' ? `/playerVideo6/decoder.js` : `${window.localStorage.getItem('deployPath')}/playerVideo6/decoder.js`,
url: '',
rotate: 0,
diff --git a/src/assets/bigScreen/active-splitScreen1RealTime.svg b/src/assets/bigScreen/active-splitScreen1RealTime.svg
new file mode 100644
index 0000000..9b7012a
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen1RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/active-splitScreen4RealTime.svg b/src/assets/bigScreen/active-splitScreen4RealTime.svg
new file mode 100644
index 0000000..07b44d2
--- /dev/null
+++ b/src/assets/bigScreen/active-splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/canclefull.png b/src/assets/bigScreen/canclefull.png
new file mode 100644
index 0000000..196eb25
--- /dev/null
+++ b/src/assets/bigScreen/canclefull.png
Binary files differ
diff --git a/src/assets/bigScreen/full.png b/src/assets/bigScreen/full.png
new file mode 100644
index 0000000..24fc006
--- /dev/null
+++ b/src/assets/bigScreen/full.png
Binary files differ
diff --git a/src/assets/bigScreen/shot.png b/src/assets/bigScreen/shot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/bigScreen/shot.png
Binary files differ
diff --git a/src/assets/bigScreen/splitScreen1RealTime copy.svg b/src/assets/bigScreen/splitScreen1RealTime copy.svg
new file mode 100644
index 0000000..5308ea8
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen1RealTime copy.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/bigScreen/splitScreen4RealTime.svg b/src/assets/bigScreen/splitScreen4RealTime.svg
new file mode 100644
index 0000000..6e3eb58
--- /dev/null
+++ b/src/assets/bigScreen/splitScreen4RealTime.svg
@@ -0,0 +1 @@
+
diff --git a/src/assets/images/screenShot.png b/src/assets/images/screenShot.png
new file mode 100644
index 0000000..36397d1
--- /dev/null
+++ b/src/assets/images/screenShot.png
Binary files differ
diff --git a/src/views/alarm/dangerAssessment/manage/list.vue b/src/views/alarm/dangerAssessment/manage/list.vue
index 8560782..a0ce1d1 100644
--- a/src/views/alarm/dangerAssessment/manage/list.vue
+++ b/src/views/alarm/dangerAssessment/manage/list.vue
@@ -15,6 +15,7 @@
import { getDictByCode } from '@/api/system/dict'
import ButtonBox from '@/components/buttonBox/buttonBox.vue'
import type { IMenu } from '@/components/buttonBox/buttonBox'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
import type { dictType } from '@/global'
import { batchImport, delDangerAssessmentManage, getDangerAssessmentManageList } from '@/api/alarm/dangerAssessment/manage'
const { proxy } = getCurrentInstance() as any
@@ -128,8 +129,13 @@
})
}
// -----------------------------------文件上传-------------------------------------------
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const handleBatchImport = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -399,5 +405,7 @@
+
+
diff --git a/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
new file mode 100644
index 0000000..0cdecc0
--- /dev/null
+++ b/src/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/src/views/monitor/realTime/control-media.vue b/src/views/monitor/realTime/control-media.vue
index 46e92c7..8162009 100644
--- a/src/views/monitor/realTime/control-media.vue
+++ b/src/views/monitor/realTime/control-media.vue
@@ -289,14 +289,21 @@
return null
}
}
-
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 拉取流
async function fetchMediaStream(deviceId: string, channelId: string) {
loading.value = true
const res = await getMediaStream(deviceId, channelId, mediaToken.value)
loading.value = false
if (res && res.data) {
- mediaUrl.value = `${res.data.ws_flv}?token=${window.localStorage.getItem('token')}`
+ const url = res.data.ws_flv || res.data.flv
+ mediaUrl.value = `${url}?token=${window.localStorage.getItem('token')}`
+ console.log('获取到的流地址', mediaUrl.value)
jessibucaRef.value.play(mediaUrl.value)
return res.data.flv
}
@@ -360,12 +367,14 @@
frameborder="0"
class="videoControl"
/> -->
-
+
+
+
+
+
+
+ ({{ data.onlineDevices }}/{{ data.totalDevices }})
+
+
+
+ {{ node.label }}
+ ({{ data.device.deviceTypeName }})
+
+ {{ node.label }}
+ {{ node.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 识别关注要点:
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1屏
+
+
+ 4屏
+
+
+
+
+
+ {{ loadingTest }}
+
+
+
+
+
+
+ {{ loadingTestSplit4[index] }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/realTime/index-new-gm-plugin.vue b/src/views/monitor/realTime/index-new-gm-plugin.vue
index 836d14f..6acd125 100644
--- a/src/views/monitor/realTime/index-new-gm-plugin.vue
+++ b/src/views/monitor/realTime/index-new-gm-plugin.vue
@@ -5,40 +5,62 @@
import { createStream, sendHeart, stopStream } from '@/api/monitor/index-new-gm'
import { videoTree } from '@/api/monitor/broadcast'
import { analyzeFLVFirstFrame } from '@/utils/firstIframeTest'
+import drawArea from '@/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue'
import jessibuca from '@/views/bigScreen/jessibuca.vue'
import { analyzeFLV } from '@/utils/sustainIframeTest'
const router = useRouter()
-const timer = ref() // 定时器
+const loadingPositionsSplit4 = [
+ { top: '22%', left: '12%' },
+ { top: '22%', left: '62%' },
+ { top: '70%', left: '12%' },
+ { top: '70%', left: '62%' },
+]
+// const timer = ref() // 定时器
const treeRef = ref(null) as any
const filterText = ref('')
const data = ref([])
-const loadingTest = ref('视频加载中,请稍等...')
const defaultProps = ref({
children: 'children',
label: 'name',
isDisabled: 'disabled',
})
+const showOperateBtns = ref(true)
const baseurl = ref(window.location.href.split('/#')[0])
console.log('baseurl', baseurl.value)
const { proxy } = getCurrentInstance() as any
const mediaToken = ref('') // 流媒体token
-const currentData = ref() // 当前播放视频的设备信息
+const currentData: any = ref([null, null, null, null]) // 当前播放视频的设备信息
const width = ref(0)
const height = ref(0)
+const canvasWidth = ref(0)
+const canvasHeight = ref(0)
const loading = ref(false)
-const src = ref([''])
-const title = ref('')
+// const src = ref([''])
+const videoUrl = ref(['', '', '', '']) // 流url
+const timers: any = ref([null, null, null, null]) // 定时器
+const currentStreamId = ref(['', '', '', '']) // 正在播的流的国标号
+const title = ref(['', '', '', ''])
const leafLoading = ref(false)
const showLoadingText = ref(false)
+const loadingTest = ref('视频加载中,请稍等...')
+const showLoadingTextSplit4 = ref([false, false, false, false]) // 4分屏的Loadingtex
+const loadingTestSplit4 = ref(['视频加载中,请稍等...', '视频加载中,请稍等...', '视频加载中,请稍等...', '视频加载中,请稍等...'])
const currentLeafId = ref('')
-const currentStreamId = ref('') // 正在播的流的国标号
const resize = () => {
const divPlugin = document.getElementById('home') as any
- console.log(divPlugin)
// width.value = divPlugin.clientWidth / 2 - 20
// height.value = divPlugin.clientHeight / 2 - 5
- width.value = divPlugin.clientWidth
- height.value = divPlugin.clientHeight - 5
+ // width.value = divPlugin.clientWidth
+ // height.value = divPlugin.clientHeight - 5
+ height.value = divPlugin.clientHeight - 5 - 28
+ width.value = Number(((height.value / 9) * 16).toFixed(2))
+
+ // canvasHeight.value = divPlugin.clientHeight - 5 - 28
+ // canvasWidth.value = Number(((height.value / 9) * 16).toFixed(2))
+
+ // const videoAreaSize = document.getElementById('videoArea') as any
+ // canvasWidth.value = videoAreaSize.clientWidth - 2
+ canvasHeight.value = height.value
}
const jessibucaRef = ref()
@@ -46,6 +68,78 @@
// page(0)
}
+let treeClickCount = 0
+let currentIndex = 0
+// ---------------------------------------1/4屏切换相关---------------------------------------------
+const videoCount = ref(1) // 1/4屏切换
+// 从1屏切换到4屏的时候,如果1屏已经播放视频,那4屏从第2个开始播
+const handleChangeScreen = (value: number) => {
+ if (value === 4 && videoUrl.value[0] !== '') {
+ currentIndex = 1
+ }
+ else {
+ currentIndex = 0
+ }
+ title.value = [title.value[0], '', '', '']
+}
+
+// ------------------------------------------标注信息---------------------------------------------
+const points = ref([]) as any // 标注信息
+const drawPoints = ref([]) as any // 标注信息
+const hoveredDrawId = ref('') // 当前悬浮的标注项
+
+// 等比例计算实际数据
+const calRealData = (boundaryList: any) => {
+ if (!boundaryList.length) {
+ return false
+ }
+ const tempList = boundaryList.map((item: any) => {
+ return {
+ x: (item.x * width.value).toFixed(0),
+ y: (item.y * height.value).toFixed(0),
+ }
+ })
+ return tempList
+}
+
+// 绘制静态框
+function draw(list = []) {
+ if (!list.length) {
+ return false
+ }
+ console.log('获取到的标注信息', list)
+ const deviceBoundaryInfo = list.map((item: any) => {
+ return {
+ ...item,
+ drawId: item.modelRelationId || item.sceneRelationId,
+ boundary: item.boundary ? calRealData(JSON.parse(item.boundary)) : item.boundary, // 识别边界
+ }
+ })
+ points.value = deviceBoundaryInfo
+}
+
+// 切换画框
+const changeRadioDraw = (value: string) => {
+ const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
+ if (index !== -1) {
+ drawPoints.value = [{ ...points.value[index] }]
+ }
+}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
+// ------------------------------------------------获取流---------------------------------------------
+
function filterNode(value: any, data: { name: string | any[] }) {
if (value === '' || value === null) {
return true
@@ -55,9 +149,6 @@
}
}
-let treeClickCount = 0
-const currentCameras = [{}] as any
-
function handleNodeClick(data: any, node: any, self: any) {
console.log('获取设备信息', data)
if (data.device.deviceStatusName === '离线') {
@@ -70,54 +161,98 @@
if (data.children.length !== 0) { // 点击父亲
return
}
- if (data.device.id === currentLeafId.value) {
- return
+ // 这里处理双击事件
+ if (videoCount.value === 4 && currentIndex === 4) {
+ currentIndex = 0
+ }
+ leafLoading.value = true
+ if (videoCount.value === 4) {
+ showLoadingTextSplit4.value[currentIndex] = true
+ loadingTestSplit4.value[currentIndex] = '视频加载中,请稍等...'
+ }
+ else {
+ showLoadingText.value = true
+ loadingTest.value = '视频加载中,请稍等...'
}
- leafLoading.value = true
- showLoadingText.value = true
- loadingTest.value = '视频加载中,请稍等...'
currentLeafId.value = data.device.id
// 先停心跳
- if (timer.value) {
- clearInterval(timer.value)
+ if (timers.value[currentIndex]) {
+ clearInterval(timers.value[currentIndex])
}
// 播下一个流先停止上一个流
- if (currentStreamId.value) {
- handleStopStream(currentStreamId.value)
+ if (currentStreamId.value[currentIndex]) {
+ handleStopStream(currentStreamId.value[currentIndex])
}
- // 获取视频流接口
- fetchStream(data.device.cameraIndexCode).then((res: any) => {
- leafLoading.value = false
- showLoadingText.value = false
- const { url, createStreamResponseId } = res
- src.value[0] = `${url}?token=${window.localStorage.getItem('token')}`
- jessibucaRef.value.play(src.value[0])
- // testIFrame(`${url}?token=${window.localStorage.getItem('token')}`)
- currentCameras[0] = data
- title.value = data.device.monitorName.replace('-', ' - ')
- currentData.value = data.device
- // 记录正在播的流的国标号
- currentStreamId.value = createStreamResponseId
+ console.log('currentIndex', currentIndex)
+ // 获取视频流接口
+ fetchStream(data.device.cameraIndexCode).then(async (res: any) => {
+ leafLoading.value = false
+ if (videoCount.value === 4) {
+ showLoadingTextSplit4.value[currentIndex] = false
+ }
+ else {
+ showLoadingText.value = false
+ }
+
+ const { url, createStreamResponseId } = res
+ videoUrl.value[currentIndex] = `${url}?token=${window.localStorage.getItem('token')}`
+ jessibucaRef.value[currentIndex]?.changeUrl(videoUrl.value[currentIndex])
+ title.value[currentIndex] = data.device.monitorName.replace('-', ' - ')
+ currentData.value[currentIndex] = data.device
+ // 记录正在播的流的国标号
+ currentStreamId.value[currentIndex] = createStreamResponseId
+
+ // -------------------------------区域绘制---------------------------------------------
+ if (currentData.value[currentIndex] && currentData.value[currentIndex].deviceBoundaryDTOS && currentData.value[currentIndex].deviceBoundaryDTOS.length) {
+ draw(currentData.value[currentIndex].deviceBoundaryDTOS.filter((item: { boundary: string }) => item.boundary))
+ }
+ else {
+ points.value = []
+ drawPoints.value = []
+ }
+ // ------------------------------------------------------------------------------------
// 发送心跳
- timer.value = setInterval(() => {
- handleSendHeart(createStreamResponseId)
+ timers.value[currentIndex] = setInterval(() => {
+ handleSendHeart(createStreamResponseId[currentIndex])
}, Number(window.localStorage.getItem('timeGap')))
+ if (videoCount.value === 4) {
+ currentIndex++
+ }
}).catch(() => {
ElMessage.warning('未获取到流!请联系管理员!')
leafLoading.value = false
- loadingTest.value = '未获取到流!请联系管理员!'
+ if (videoCount.value === 1) {
+ loadingTest.value = '未获取到流!请联系管理员!'
+ }
+ else {
+ loadingTestSplit4.value[currentIndex] = '未获取到流!请联系管理员!'
+ }
})
}
treeClickCount = now
}
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 创建流
async function fetchStream(deviceId: string) {
loading.value = true
+ // const res = await setTimeout(() => {
+ // ElMessage.warning('获取视频数据中...')
+ // }, 3000)
+ // loading.value = false
+ // return {
+ // url: testurl[`${currentIndex}`],
+ // createStreamResponseId: currentIndex,
+ // }
const res = await createStream(deviceId)
loading.value = false
if (res && res.data) {
@@ -144,26 +279,14 @@
const res = await sendHeart(deviceId)
if (res && res.data) {
if (`${res.data.status}` !== 'on') { // 停止状态
- if (timer.value) {
- clearInterval(timer.value)
+ if (timers.value[currentIndex]) {
+ clearInterval(timers.value[currentIndex])
}
}
}
}
-function page(index: any) {
- console.log('跳转控制页')
-
- if (src.value[index] !== '') {
- router.push({
- path: '/realTime/control',
- query: {
- id: currentCameras[index].id,
- },
- })
- }
-}
-
+// ---------------------------------------------------------------------------------------------------
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
@@ -172,25 +295,20 @@
unwatch()
window.removeEventListener('resize', resize)
// window.removeEventListener('dblclick', iframeDblclick)
- clearInterval(timer.value)
- // 停止正在播放的流
- if (currentStreamId.value) {
- handleStopStream(currentStreamId.value)
- }
-})
-
-function solveData(data: any) {
- data.forEach((item: any) => {
- if (item.device) {
- item.name = `${item.name} (${item.device.deviceStatusName})`
- console.log('修改后的name', item.name)
- }
- if (item.children && item.children.length) {
- solveData(item.children)
+ timers.value.forEach((time: any) => {
+ if (time) {
+ clearInterval(time.value)
}
})
- return data
-}
+ // 停止正在播放的流
+ if (currentStreamId.value) {
+ currentStreamId.value.forEach((item: any) => {
+ if (item) {
+ handleStopStream(item)
+ }
+ })
+ }
+})
/**
* 向 type 为 '1' 的组织对象中注入设备统计字段(仅统计叶子节点设备)
@@ -252,49 +370,16 @@
videoTree().then((response) => {
if (response.code === 200) {
data.value = response.data
- console.log('==============', data.value)
console.log('计算设备在线数', injectDeviceCounts(data.value))
data.value = injectDeviceCounts(data.value)
-
- // data.value = solveData(data.value)
}
})
setTimeout(() => {
- // 双击跳转控制页
- // const iframe = document.getElementById('myframe')
- // const iframeDoc = iframe.contentDocument || iframe.contentWindow.document
-
- // iframeDoc.addEventListener('dblclick', iframeDblclick)
resize()
window.addEventListener('resize', resize)
// jessibucaRef.value.play('https://mister-ben.github.io/videojs-flvjs/bbb.flv')
}, 200)
})
-
-function testIFrame(videoUrl = '') {
- if (!videoUrl) { return }
- const testMethod = window.localStorage.getItem('flvIFrame')
- const flvIFrameTime = window.localStorage.getItem('flvIFrameTime') ? Number(window.localStorage.getItem('flvIFrameTime')) : 10
- if (testMethod === '1') {
- console.log('调用首帧检测方法')
- analyzeFLVFirstFrame(videoUrl).then((result) => {
- if (result === true) {
- console.log('✅ 首帧是关键帧(I帧)')
- }
- else if (result === false) {
- console.log('❌ 首帧不是关键帧')
- }
- else {
- console.log(`⚠️ ${result}`)
- }
- })
- }
- else if (testMethod === '2') {
- analyzeFLV(videoUrl, flvIFrameTime).then((result: any) => {
- console.log('分析结果:', result)
- })
- }
-}
@@ -312,22 +397,23 @@
class="filter-tree"
style="width: 100%;height: 100%"
:data="data"
- :filter-node-method="filterNode"
node-key="id"
+ :filter-node-method="filterNode"
:default-expand-all="true"
:props="defaultProps"
@node-click="handleNodeClick"
>
+
+
@@ -365,45 +451,117 @@
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
+ :split-screen="videoCount"
+ /> -->
+
+
+
+
+
+
+
+
+
+
+ 识别关注要点:
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+
+
+ {{ loadingTest }}
+
+
+
+
+
+
+ {{ loadingTestSplit4[index] }}
+
+
+
-
- {{ loadingTest }}
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1屏
+
+
+ 4屏
+
+
+
@@ -474,6 +632,66 @@
.loading-rotate {
animation: rotate 2s linear infinite;
}
+
+.video-area {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+}
+.title {
+ position: absolute;
+ // color: red;
+ color: #fff;
+ // top: 10rem;
+ z-index: 99999;
+}
+.oneScreen {
+ width: 100%;
+ height: 100%;
+ padding: 0px !important;
+ margin: 0px !important;
+}
+.jessibuca-root {
+ width: 100%;
+ height: 100%;
+ display: grid;
+ grid-template-columns: 1fr 1fr; /* 定义两列,每列占据相等空间 */
+ gap: 3px; /* 可选,添加一些间距 */
+ padding: 0px !important;
+ margin: 0px !important;
+}
+
+.drawDiv {
+ position: absolute;
+ z-index: 9999999;
+ top: 1%;
+ right: 1%;
+ border: 1px solid #fff;
+ padding: 10px 20px;
+ font-size: 14px;
+ color: #fff;
+ background-color: rgba(81, 82, 92, 0.7);
+ border-radius: 6px;
+ cursor: pointer;
+ .drawDivItem {
+ &:hover {
+ color: #67c23a
+ }
+ }
+}
+
+.right {
+ position: relative;
+ box-sizing: border-box;
+ flex: 1;
+ margin-left: 10px;
+ // padding-top: 30px;
+ // background: #161616;
+ border-radius: 15px 15px 0 0 ;
+ display: flex;
+ justify-items: center;
+}
diff --git a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
index 4280c58..05fcc4a 100644
--- a/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
+++ b/src/views/alarm/policyConfig/videoPreview/videoPreview.vue
@@ -26,7 +26,6 @@
const videoHeight = ref(360)
const points = ref([]) as any // 标注信息
const drawPoints = ref([]) as any // 标注信息
-const currentDrawButton = ref('') // 当前画的标注
// const palyUrl = `${url}?token=${window.localStorage.getItem('token')}`
const defaultProps = ref({
@@ -81,7 +80,7 @@
if (data.device.deviceStatusName === '离线') {
ElMessage.warning(`设备 ${data.device.monitorName} 离线`)
- return false
+ // return false
}
const now = new Date().getTime()
@@ -353,7 +352,6 @@
}
})
total.value = res.data.total
- alarmCount.value = alarmResultList.value.length
listLoading.value = false
}).catch(() => {
listLoading.value = false
@@ -467,23 +465,33 @@
}
})
points.value = deviceBoundaryInfo
- drawPoints.value = [{ ...points.value[0] }]
- console.log('drawPoints', drawPoints.value)
- currentDrawButton.value = drawPoints.value[0].drawId
}
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
+const hoveredDrawId = ref('') // 当前悬浮的标注项
// 切换画框
const changeRadioDraw = (value: string) => {
const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
if (index !== -1) {
drawPoints.value = [{ ...points.value[index] }]
- currentDrawButton.value = drawPoints.value[index].drawId
}
}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
onBeforeUnmount(() => {
unwatch()
@@ -506,7 +514,7 @@
* @param {Array} data - 包含组织和设备节点的 JSON 数组
* @returns {Array} 修改后的原始数据数组(直接修改对象引用)
*/
- function injectDeviceCounts(data: any[]): any {
+function injectDeviceCounts(data: any[]): any {
// ---------------------- 步骤 1:构建组织节点映射表 ---------------------- //
const orgMap = new Map() // 使用 Map 存储组织节点,便于快速查找
@@ -689,24 +697,19 @@
-
-
-
+
+ 识别关注要点:
+
+
-
- {{ item.remark }}
-
-
+ {{ item.remark }}
+
@@ -748,7 +751,7 @@
- 当日报警数: {{ alarmCount }}
+ 当日报警数: {{ total }}
diff --git a/src/views/bigScreen/realTimeClock.vue b/src/views/bigScreen/realTimeClock.vue
new file mode 100644
index 0000000..bdfb861
--- /dev/null
+++ b/src/views/bigScreen/realTimeClock.vue
@@ -0,0 +1,48 @@
+
+
+
+
+ {{ formattedTime }}
+
+
+
+
diff --git a/src/views/monitor/deviceManage/importSelectSecretDialog.vue b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
new file mode 100644
index 0000000..7c14119
--- /dev/null
+++ b/src/views/monitor/deviceManage/importSelectSecretDialog.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+ **请选择导入文件的密级,并按照选择的密级导入相应密级的文件**
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/deviceManage/listDevice.vue b/src/views/monitor/deviceManage/listDevice.vue
index bdd8cc9..8848009 100644
--- a/src/views/monitor/deviceManage/listDevice.vue
+++ b/src/views/monitor/deviceManage/listDevice.vue
@@ -9,6 +9,7 @@
import { exportFile } from '@/utils/exportUtils'
import { getDictByCode } from '@/api/system/dict'
import { download } from '@/utils/download'
+import importSelectSecretDialog from '@/views/monitor/deviceManage/importSelectSecretDialog.vue'
const { proxy } = getCurrentInstance() as any
const editDialog = ref() // 组件
const router = useRouter()
@@ -78,8 +79,13 @@
})
}
+const importSelectSecretDialogRef = ref()
// 点击批量导入
const uploadAll = () => {
+ importSelectSecretDialogRef.value.initDialog()
+}
+
+const confirmSecret = () => {
fileRef.value.click()
}
@@ -252,5 +258,6 @@
+
diff --git a/src/views/monitor/realTime/control-media.vue b/src/views/monitor/realTime/control-media.vue
index 46e92c7..8162009 100644
--- a/src/views/monitor/realTime/control-media.vue
+++ b/src/views/monitor/realTime/control-media.vue
@@ -289,14 +289,21 @@
return null
}
}
-
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 拉取流
async function fetchMediaStream(deviceId: string, channelId: string) {
loading.value = true
const res = await getMediaStream(deviceId, channelId, mediaToken.value)
loading.value = false
if (res && res.data) {
- mediaUrl.value = `${res.data.ws_flv}?token=${window.localStorage.getItem('token')}`
+ const url = res.data.ws_flv || res.data.flv
+ mediaUrl.value = `${url}?token=${window.localStorage.getItem('token')}`
+ console.log('获取到的流地址', mediaUrl.value)
jessibucaRef.value.play(mediaUrl.value)
return res.data.flv
}
@@ -360,12 +367,14 @@
frameborder="0"
class="videoControl"
/> -->
-
+
+
+
+
+
+
+ ({{ data.onlineDevices }}/{{ data.totalDevices }})
+
+
+
+ {{ node.label }}
+ ({{ data.device.deviceTypeName }})
+
+ {{ node.label }}
+ {{ node.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 识别关注要点:
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1屏
+
+
+ 4屏
+
+
+
+
+
+ {{ loadingTest }}
+
+
+
+
+
+
+ {{ loadingTestSplit4[index] }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/monitor/realTime/index-new-gm-plugin.vue b/src/views/monitor/realTime/index-new-gm-plugin.vue
index 836d14f..6acd125 100644
--- a/src/views/monitor/realTime/index-new-gm-plugin.vue
+++ b/src/views/monitor/realTime/index-new-gm-plugin.vue
@@ -5,40 +5,62 @@
import { createStream, sendHeart, stopStream } from '@/api/monitor/index-new-gm'
import { videoTree } from '@/api/monitor/broadcast'
import { analyzeFLVFirstFrame } from '@/utils/firstIframeTest'
+import drawArea from '@/views/alarm/policyConfig/monitorPoint/drawAreaRealTime.vue'
import jessibuca from '@/views/bigScreen/jessibuca.vue'
import { analyzeFLV } from '@/utils/sustainIframeTest'
const router = useRouter()
-const timer = ref() // 定时器
+const loadingPositionsSplit4 = [
+ { top: '22%', left: '12%' },
+ { top: '22%', left: '62%' },
+ { top: '70%', left: '12%' },
+ { top: '70%', left: '62%' },
+]
+// const timer = ref() // 定时器
const treeRef = ref(null) as any
const filterText = ref('')
const data = ref([])
-const loadingTest = ref('视频加载中,请稍等...')
const defaultProps = ref({
children: 'children',
label: 'name',
isDisabled: 'disabled',
})
+const showOperateBtns = ref(true)
const baseurl = ref(window.location.href.split('/#')[0])
console.log('baseurl', baseurl.value)
const { proxy } = getCurrentInstance() as any
const mediaToken = ref('') // 流媒体token
-const currentData = ref() // 当前播放视频的设备信息
+const currentData: any = ref([null, null, null, null]) // 当前播放视频的设备信息
const width = ref(0)
const height = ref(0)
+const canvasWidth = ref(0)
+const canvasHeight = ref(0)
const loading = ref(false)
-const src = ref([''])
-const title = ref('')
+// const src = ref([''])
+const videoUrl = ref(['', '', '', '']) // 流url
+const timers: any = ref([null, null, null, null]) // 定时器
+const currentStreamId = ref(['', '', '', '']) // 正在播的流的国标号
+const title = ref(['', '', '', ''])
const leafLoading = ref(false)
const showLoadingText = ref(false)
+const loadingTest = ref('视频加载中,请稍等...')
+const showLoadingTextSplit4 = ref([false, false, false, false]) // 4分屏的Loadingtex
+const loadingTestSplit4 = ref(['视频加载中,请稍等...', '视频加载中,请稍等...', '视频加载中,请稍等...', '视频加载中,请稍等...'])
const currentLeafId = ref('')
-const currentStreamId = ref('') // 正在播的流的国标号
const resize = () => {
const divPlugin = document.getElementById('home') as any
- console.log(divPlugin)
// width.value = divPlugin.clientWidth / 2 - 20
// height.value = divPlugin.clientHeight / 2 - 5
- width.value = divPlugin.clientWidth
- height.value = divPlugin.clientHeight - 5
+ // width.value = divPlugin.clientWidth
+ // height.value = divPlugin.clientHeight - 5
+ height.value = divPlugin.clientHeight - 5 - 28
+ width.value = Number(((height.value / 9) * 16).toFixed(2))
+
+ // canvasHeight.value = divPlugin.clientHeight - 5 - 28
+ // canvasWidth.value = Number(((height.value / 9) * 16).toFixed(2))
+
+ // const videoAreaSize = document.getElementById('videoArea') as any
+ // canvasWidth.value = videoAreaSize.clientWidth - 2
+ canvasHeight.value = height.value
}
const jessibucaRef = ref()
@@ -46,6 +68,78 @@
// page(0)
}
+let treeClickCount = 0
+let currentIndex = 0
+// ---------------------------------------1/4屏切换相关---------------------------------------------
+const videoCount = ref(1) // 1/4屏切换
+// 从1屏切换到4屏的时候,如果1屏已经播放视频,那4屏从第2个开始播
+const handleChangeScreen = (value: number) => {
+ if (value === 4 && videoUrl.value[0] !== '') {
+ currentIndex = 1
+ }
+ else {
+ currentIndex = 0
+ }
+ title.value = [title.value[0], '', '', '']
+}
+
+// ------------------------------------------标注信息---------------------------------------------
+const points = ref([]) as any // 标注信息
+const drawPoints = ref([]) as any // 标注信息
+const hoveredDrawId = ref('') // 当前悬浮的标注项
+
+// 等比例计算实际数据
+const calRealData = (boundaryList: any) => {
+ if (!boundaryList.length) {
+ return false
+ }
+ const tempList = boundaryList.map((item: any) => {
+ return {
+ x: (item.x * width.value).toFixed(0),
+ y: (item.y * height.value).toFixed(0),
+ }
+ })
+ return tempList
+}
+
+// 绘制静态框
+function draw(list = []) {
+ if (!list.length) {
+ return false
+ }
+ console.log('获取到的标注信息', list)
+ const deviceBoundaryInfo = list.map((item: any) => {
+ return {
+ ...item,
+ drawId: item.modelRelationId || item.sceneRelationId,
+ boundary: item.boundary ? calRealData(JSON.parse(item.boundary)) : item.boundary, // 识别边界
+ }
+ })
+ points.value = deviceBoundaryInfo
+}
+
+// 切换画框
+const changeRadioDraw = (value: string) => {
+ const index = points.value.findIndex((item: { drawId: string }) => item.drawId === value)
+ if (index !== -1) {
+ drawPoints.value = [{ ...points.value[index] }]
+ }
+}
+// 鼠标进入标注项时切换画框
+function handleMouseEnter(item: any) {
+ console.log('鼠标悬浮', item)
+
+ hoveredDrawId.value = item.drawId // 记录当前悬浮的 drawId
+ changeRadioDraw(item.drawId) // 触发画框切换
+}
+
+// 鼠标离开标注项时清除画框
+function handleMouseLeave() {
+ hoveredDrawId.value = '' // 清空悬浮状态
+ drawPoints.value = [] // 清除所有画框
+}
+// ------------------------------------------------获取流---------------------------------------------
+
function filterNode(value: any, data: { name: string | any[] }) {
if (value === '' || value === null) {
return true
@@ -55,9 +149,6 @@
}
}
-let treeClickCount = 0
-const currentCameras = [{}] as any
-
function handleNodeClick(data: any, node: any, self: any) {
console.log('获取设备信息', data)
if (data.device.deviceStatusName === '离线') {
@@ -70,54 +161,98 @@
if (data.children.length !== 0) { // 点击父亲
return
}
- if (data.device.id === currentLeafId.value) {
- return
+ // 这里处理双击事件
+ if (videoCount.value === 4 && currentIndex === 4) {
+ currentIndex = 0
+ }
+ leafLoading.value = true
+ if (videoCount.value === 4) {
+ showLoadingTextSplit4.value[currentIndex] = true
+ loadingTestSplit4.value[currentIndex] = '视频加载中,请稍等...'
+ }
+ else {
+ showLoadingText.value = true
+ loadingTest.value = '视频加载中,请稍等...'
}
- leafLoading.value = true
- showLoadingText.value = true
- loadingTest.value = '视频加载中,请稍等...'
currentLeafId.value = data.device.id
// 先停心跳
- if (timer.value) {
- clearInterval(timer.value)
+ if (timers.value[currentIndex]) {
+ clearInterval(timers.value[currentIndex])
}
// 播下一个流先停止上一个流
- if (currentStreamId.value) {
- handleStopStream(currentStreamId.value)
+ if (currentStreamId.value[currentIndex]) {
+ handleStopStream(currentStreamId.value[currentIndex])
}
- // 获取视频流接口
- fetchStream(data.device.cameraIndexCode).then((res: any) => {
- leafLoading.value = false
- showLoadingText.value = false
- const { url, createStreamResponseId } = res
- src.value[0] = `${url}?token=${window.localStorage.getItem('token')}`
- jessibucaRef.value.play(src.value[0])
- // testIFrame(`${url}?token=${window.localStorage.getItem('token')}`)
- currentCameras[0] = data
- title.value = data.device.monitorName.replace('-', ' - ')
- currentData.value = data.device
- // 记录正在播的流的国标号
- currentStreamId.value = createStreamResponseId
+ console.log('currentIndex', currentIndex)
+ // 获取视频流接口
+ fetchStream(data.device.cameraIndexCode).then(async (res: any) => {
+ leafLoading.value = false
+ if (videoCount.value === 4) {
+ showLoadingTextSplit4.value[currentIndex] = false
+ }
+ else {
+ showLoadingText.value = false
+ }
+
+ const { url, createStreamResponseId } = res
+ videoUrl.value[currentIndex] = `${url}?token=${window.localStorage.getItem('token')}`
+ jessibucaRef.value[currentIndex]?.changeUrl(videoUrl.value[currentIndex])
+ title.value[currentIndex] = data.device.monitorName.replace('-', ' - ')
+ currentData.value[currentIndex] = data.device
+ // 记录正在播的流的国标号
+ currentStreamId.value[currentIndex] = createStreamResponseId
+
+ // -------------------------------区域绘制---------------------------------------------
+ if (currentData.value[currentIndex] && currentData.value[currentIndex].deviceBoundaryDTOS && currentData.value[currentIndex].deviceBoundaryDTOS.length) {
+ draw(currentData.value[currentIndex].deviceBoundaryDTOS.filter((item: { boundary: string }) => item.boundary))
+ }
+ else {
+ points.value = []
+ drawPoints.value = []
+ }
+ // ------------------------------------------------------------------------------------
// 发送心跳
- timer.value = setInterval(() => {
- handleSendHeart(createStreamResponseId)
+ timers.value[currentIndex] = setInterval(() => {
+ handleSendHeart(createStreamResponseId[currentIndex])
}, Number(window.localStorage.getItem('timeGap')))
+ if (videoCount.value === 4) {
+ currentIndex++
+ }
}).catch(() => {
ElMessage.warning('未获取到流!请联系管理员!')
leafLoading.value = false
- loadingTest.value = '未获取到流!请联系管理员!'
+ if (videoCount.value === 1) {
+ loadingTest.value = '未获取到流!请联系管理员!'
+ }
+ else {
+ loadingTestSplit4.value[currentIndex] = '未获取到流!请联系管理员!'
+ }
})
}
treeClickCount = now
}
+const testurl = {
+ 3: 'https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv',
+ 1: 'https://mister-ben.github.io/videojs-flvjs/bbb.flv',
+ 2: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+ 0: 'http://cyberplayer.bcelive.com/videoworks/mda-kbuhu4wqdi08dwix/cyberplayer/flv/cyberplayer-demo.flv',
+}
// 创建流
async function fetchStream(deviceId: string) {
loading.value = true
+ // const res = await setTimeout(() => {
+ // ElMessage.warning('获取视频数据中...')
+ // }, 3000)
+ // loading.value = false
+ // return {
+ // url: testurl[`${currentIndex}`],
+ // createStreamResponseId: currentIndex,
+ // }
const res = await createStream(deviceId)
loading.value = false
if (res && res.data) {
@@ -144,26 +279,14 @@
const res = await sendHeart(deviceId)
if (res && res.data) {
if (`${res.data.status}` !== 'on') { // 停止状态
- if (timer.value) {
- clearInterval(timer.value)
+ if (timers.value[currentIndex]) {
+ clearInterval(timers.value[currentIndex])
}
}
}
}
-function page(index: any) {
- console.log('跳转控制页')
-
- if (src.value[index] !== '') {
- router.push({
- path: '/realTime/control',
- query: {
- id: currentCameras[index].id,
- },
- })
- }
-}
-
+// ---------------------------------------------------------------------------------------------------
const unwatch = watch(filterText, (newVal) => {
treeRef.value.filter(newVal)
})
@@ -172,25 +295,20 @@
unwatch()
window.removeEventListener('resize', resize)
// window.removeEventListener('dblclick', iframeDblclick)
- clearInterval(timer.value)
- // 停止正在播放的流
- if (currentStreamId.value) {
- handleStopStream(currentStreamId.value)
- }
-})
-
-function solveData(data: any) {
- data.forEach((item: any) => {
- if (item.device) {
- item.name = `${item.name} (${item.device.deviceStatusName})`
- console.log('修改后的name', item.name)
- }
- if (item.children && item.children.length) {
- solveData(item.children)
+ timers.value.forEach((time: any) => {
+ if (time) {
+ clearInterval(time.value)
}
})
- return data
-}
+ // 停止正在播放的流
+ if (currentStreamId.value) {
+ currentStreamId.value.forEach((item: any) => {
+ if (item) {
+ handleStopStream(item)
+ }
+ })
+ }
+})
/**
* 向 type 为 '1' 的组织对象中注入设备统计字段(仅统计叶子节点设备)
@@ -252,49 +370,16 @@
videoTree().then((response) => {
if (response.code === 200) {
data.value = response.data
- console.log('==============', data.value)
console.log('计算设备在线数', injectDeviceCounts(data.value))
data.value = injectDeviceCounts(data.value)
-
- // data.value = solveData(data.value)
}
})
setTimeout(() => {
- // 双击跳转控制页
- // const iframe = document.getElementById('myframe')
- // const iframeDoc = iframe.contentDocument || iframe.contentWindow.document
-
- // iframeDoc.addEventListener('dblclick', iframeDblclick)
resize()
window.addEventListener('resize', resize)
// jessibucaRef.value.play('https://mister-ben.github.io/videojs-flvjs/bbb.flv')
}, 200)
})
-
-function testIFrame(videoUrl = '') {
- if (!videoUrl) { return }
- const testMethod = window.localStorage.getItem('flvIFrame')
- const flvIFrameTime = window.localStorage.getItem('flvIFrameTime') ? Number(window.localStorage.getItem('flvIFrameTime')) : 10
- if (testMethod === '1') {
- console.log('调用首帧检测方法')
- analyzeFLVFirstFrame(videoUrl).then((result) => {
- if (result === true) {
- console.log('✅ 首帧是关键帧(I帧)')
- }
- else if (result === false) {
- console.log('❌ 首帧不是关键帧')
- }
- else {
- console.log(`⚠️ ${result}`)
- }
- })
- }
- else if (testMethod === '2') {
- analyzeFLV(videoUrl, flvIFrameTime).then((result: any) => {
- console.log('分析结果:', result)
- })
- }
-}
@@ -312,22 +397,23 @@
class="filter-tree"
style="width: 100%;height: 100%"
:data="data"
- :filter-node-method="filterNode"
node-key="id"
+ :filter-node-method="filterNode"
:default-expand-all="true"
:props="defaultProps"
@node-click="handleNodeClick"
>
+
+
@@ -365,45 +451,117 @@
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
+ :split-screen="videoCount"
+ /> -->
+
+
+
+
+
+
+
+
+
+
+ 识别关注要点:
+
+
+ {{ item.remark }}
+
+
+
+
+
+
+
+
+
+ {{ loadingTest }}
+
+
+
+
+
+
+ {{ loadingTestSplit4[index] }}
+
+
+
-
- {{ loadingTest }}
+
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1屏
+
+
+ 4屏
+
+
+
@@ -474,6 +632,66 @@
.loading-rotate {
animation: rotate 2s linear infinite;
}
+
+.video-area {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+}
+.title {
+ position: absolute;
+ // color: red;
+ color: #fff;
+ // top: 10rem;
+ z-index: 99999;
+}
+.oneScreen {
+ width: 100%;
+ height: 100%;
+ padding: 0px !important;
+ margin: 0px !important;
+}
+.jessibuca-root {
+ width: 100%;
+ height: 100%;
+ display: grid;
+ grid-template-columns: 1fr 1fr; /* 定义两列,每列占据相等空间 */
+ gap: 3px; /* 可选,添加一些间距 */
+ padding: 0px !important;
+ margin: 0px !important;
+}
+
+.drawDiv {
+ position: absolute;
+ z-index: 9999999;
+ top: 1%;
+ right: 1%;
+ border: 1px solid #fff;
+ padding: 10px 20px;
+ font-size: 14px;
+ color: #fff;
+ background-color: rgba(81, 82, 92, 0.7);
+ border-radius: 6px;
+ cursor: pointer;
+ .drawDivItem {
+ &:hover {
+ color: #67c23a
+ }
+ }
+}
+
+.right {
+ position: relative;
+ box-sizing: border-box;
+ flex: 1;
+ margin-left: 10px;
+ // padding-top: 30px;
+ // background: #161616;
+ border-radius: 15px 15px 0 0 ;
+ display: flex;
+ justify-items: center;
+}