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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 @@ + + + + + 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 @@ + + + + + + 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 }} + {{ 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 @@ + + + + + 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 @@ + + + + + + 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 }} + {{ 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) - }) - } -} + + +
+ + +
+
+ + + +
+
+
+
+ 识别关注要点: +
+
+ {{ 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) - }) - } -}