let dtree, util, tree,layer;
let noNum = 0, num = 0, all = 0;
let type = 'city';
let puidParam;
let winDom = 'videoPlayer';
let ty_code='to-1';
let nrUvpVideoObj;
let passWay = localStorage.getItem("passWay");
layui.extend({
dtree: '../../js/layui_dtree/dtree/dtree'
}).use(['util', 'dtree','layer'], function () {
util = layui.util;
dtree = layui.dtree;
layer = layui.layer;
//动态加载js
if(ty_code==passWay){
$("#videoPlayer").css("display","none");
passWay=ty_code;
uaplogin();
let url=playVideoUrl('fly','h264','main','123456');
//初始化加载
var ip=video_ip;
var token=video_token;
var port=video_port;
nrUvpVideoObj = new UVPVideoObj({ id: 'windowbox',
ip,
port,
token,
ak,
callback: onEventNotify,
winNum:1
});
playControl();
playControl2();
}else{
initVideo();
}
initTreeCity("");
//按钮点击事件
util.event('lay-active', {
city: function () {
changBtn(this, $(this).parent(), 'checkBtn');
if (type !== 'city') {
initTreeCity("");
type = 'city';
}
},
risk: function () {
changBtn(this, $(this).parent(), 'checkBtn');
if (type !== 'risk') {
initTreeRisk("");
type = 'risk';
}
},
regular: function () {
changBtn(this, $(this).parent(), 'checkBtn');
if (type !== 'regular') {
initTreeRegular("");
type = 'regular';
}
},
swCity:function(){
changBtn(this, $(this).parent(), 'checkBtn');
if (type !== 'swCity') {
initTreeSwCity("");
type = 'swCity';
}
},
query: function () {
let keyWord = $('#keyWord').val();
let pattern = new RegExp("[%_<>]");
if (pattern.test(keyWord)) {
$("#keyWord").val('');
return layer.msg('关键字查询包含特殊字符,请重新输入', {
icon: 7,
time: 2000 //2秒关闭(如果不配置,默认是3秒)
});
}
if (type === 'city') {
initTreeCity(keyWord);
} else if(type === 'risk'){
initTreeRisk(keyWord);
}else if(type === 'regular'){
initTreeRegular(keyWord);
}else if(type === 'swCity'){
initTreeSwCity(keyWord);
}
},
photoLocal: function () {
screenshot();
},
videoRemote: function () {
if (videoObject.playState) {
if (isEmpty(videoObject.remoteId)) {
$(this).attr("src", "../../img/video/videoRemote-select.png");
remoteVideo(videoObject.devCode, 0);
} else {
$(this).attr("src", "../../img/video/videoRemote.png");
stopRemote(videoObject.remoteId, 0)
}
} else {
layer.msg("请先播放视频。。。", {icon: 0});
}
},
photoRemote: function () {
if (videoObject.playState) {
remoteVideo(videoObject.devCode, 1);
} else {
layer.msg("请先播放视频。。。", {icon: 0});
}
}
});
dtree.on("node('ballTree')", function (obj) {
if (!videoObject.recordVideoState && isEmpty(videoObject.remoteId)) {
let data = obj.param.recordData;
let devName = data.tName;
if (passWay == null || passWay == '') {
passWay = 'to-2';
}
if (data.genre === '1') {
if(data.puid==null || data.puid=='' || passWay==ty_code){
//播放统一视频
videoObject.devCode =data.tCode;
nrUvpVideoObj.uvpVideoPlay({
winNum:1,
codeType:1,
devCode:data.tCode,
devName:'',
})
}else{
if (!isEmpty(data.puid)) {
if (videoObject.devCode !== data.puid) {
videoObject.devCode = data.puid;
puidParam=data.puid;
playVideo(1, videoObject.devCode);
} else {
layer.msg("视频正在播放中....", {icon: 0});
}
} else {
layer.msg("工程未绑定球机", {icon: 0});
}
}
}else if (data.genre === '2'){
console.log("--->",obj)
}
} else {
if (isEmpty(videoObject.remoteId)) {
layer.msg("当前视频正在本地录像,请先关闭本地录像", {icon: 0});
} else {
layer.msg("当前视频正在远程录像,请先关闭远程录像", {icon: 0});
}
}
});
tree = dtree.render({
elem: "#ballTree",
initLevel: 1,
data: [],
checkbar: false,//开启复选框
menubar: false,
ficon: ['2'],
skin: "lay",
record: true,
toolbar: true,
toolbarFun: toolbarFun,
done: function (res, $ul, first) {
$('.icon-shexiangtou1').next().css('color', "#2f82fb");
$('div[data-id$="top"]').addClass('top');
}
});
});
//树右击事件
let toolbarFun = {
loadToolbarBefore: function (buttons, param, $div) {
if (param.recordData.genre === '1') {
openRemotePatrol(param.nodeId, param.recordData.puid, param.recordData.tCode, param.recordData.twCode, param.recordData.tdCode, param.recordData.passWay);
}
}
}
function videofullscreen(box) {
var video = document.getElementById("windowbox");
if (!document.fullscreenElement) {
video.requestFullscreen().catch(err => {
console.error("Fullscreen request failed:", err);
});
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') {
handleEscapePress();
}
});
document.addEventListener('fullscreenchange', handleFullscreenChange);
} else {
if (document.exitFullscreen) {
document.exitFullscreen();
$('#videoControlBtn').css('display', 'none');
}
}
}
// 全屏状态变化处理
function handleFullscreenChange() {
const isFullscreen = document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement ||
document.msFullscreenElement;
// console.log('全屏状态变化:', isFullscreen ? '进入全屏' : '退出全屏');
if (isFullscreen) {
// 进入全屏时的操作
// console.log('现在可以监听ESC键了');
$('#videoControlBtn').removeAttr('style');
} else {
// 退出全屏
$('#videoControlBtn').css('display', 'none');
}
}
function handleEscapePress() {
const isFullscreen = document.fullscreenElement ||
document.webkitFullscreenElement ||
document.mozFullScreenElement ||
document.msFullscreenElement;
if (isFullscreen) {
console.log('在全屏状态下按下了ESC键');
// 这里可以添加自定义逻辑,比如显示控制栏等
}
}
/*打开远程巡视页面*/
function openRemotePatrol(id, puid, tCode, twCode, tdCode, passWay) {
let layerIndex = layer.open({
id: "remotePatrol",
title: false,
type: 2,
maxmin: false,
content: '../dutyTask/remotePatrol/remotePatrol.html',
area: ['100%', '100%'],
closeBtn: 0,
success: function (layero, index) {
let iframeWin = window["layui-layer-iframe" + layerIndex];
iframeWin.setParams(id, puid, tCode, twCode, tdCode, passWay);
},
end: function () {
}
});
}
/**
* 地市树
* @param keyWord
*/
function initTreeCity(keyWord) {
$.ajax({
headers: {
'decrypt':'decrypt',
'encryption':'encryption',
'Authorization':localStorage.getItem("tokens")
},
type:'POST',
url: dataUrl + 'proteam/pot/video/getMenuListCity',
data: {
keyWord: $('#keyWord').val()
},
success: function (data) {
calleArr(data.data);
let treeData = [{
id: "top",
title: '球机 (在线:' + num + ' ' + " 不在线:" + '' + noNum + ' ' + " 总数:" + all + ')',
checkArr: "0",
parentId: "-1",
children: data.data,
iconClass: 'iconfont icon-shexiangtou',
spread: true,
}];
dtree.reload(tree, {
data: treeData,
});
}
});
}
/**
* 省外球机树
* @param keyWord
*/
function initTreeSwCity(keyWord) {
$.ajax({
type:'post',
headers: {
'Authorization':localStorage.getItem("tokens"),
"encryption":"encryption",
"encrypt": sm3(JSON.stringify({
keyWord: keyWord
}))
},
url: dataUrl + 'proteam/pot/video/getMenuListSWCity',
data: {
keyWord: keyWord
},
success: function (data) {
calleArr2(data.data);
let treeData = [{
id: "top",
title: '省外球机 (在线:' + num + ' ' + " 不在线:" + '' + noNum + ' ' + " 总数:" + all + ')',
checkArr: "0",
parentId: "-1",
children: data.data,
iconClass: 'iconfont icon-shexiangtou',
spread: true,
}];
dtree.reload(tree, {
data: treeData
});
}
});
}
/**
* @param {Object} keyWord
*/
function initTreeRisk(keyWord) {
$.ajax({
type:'post',
headers: {
'Authorization':localStorage.getItem("tokens"),
"encryption":"encryption",
"encrypt": sm3(JSON.stringify({
keyWord: keyWord
}))
},
url: dataUrl + 'proteam/pot/video/getMenuListRisk',
data: {
keyWord: keyWord
},
success: function (data) {
calleArr(data.data);
let treeData = [{
id: "top",
title: '球机 (在线:' + num + ' ' + " 不在线:" + '' + noNum + ' ' + " 总数:" + all + ')',
checkArr: "0",
parentId: "-1",
children: data.data,
iconClass: 'iconfont icon-shexiangtou',
spread: true,
}];
dtree.reload(tree, {
data: treeData
});
}
});
}
// 固定球机树
function initTreeRegular(){
$.ajax({
type:'post',
headers: {
'Authorization':localStorage.getItem("tokens"),
"encryption":"encryption",
"encrypt": sm3(JSON.stringify({
keyWord: $('#keyWord').val()
}))
},
url: dataUrl + 'proteam/pot/video/getMenuListRegular',
data: {
keyWord: $('#keyWord').val()
},
success: function (data) {
handleData(data.data);
let treeData = [{
id: "top",
title: '固定球机 (在线:' + num + ' ' + " 不在线:" + '' + noNum + ' ' + " 总数:" + all + ')',
checkArr: "0",
parentId: "-1",
children: data.data,
iconClass: 'iconfont icon-shexiangtou',
spread: true,
}];
dtree.reload(tree, {
data: treeData,
});
$('.dtree-lay-item').css('padding-left','20px');
}
});
}
/**
* 遍历树数据
* @param treeData
*/
function calleArr(treeData) {
console.log(treeData)
num = 0;
noNum = 0;
all = 0;
for (let i in treeData) {
let objNum = 0;
let objNoNum = 0;
let obj = treeData[i];
obj.iconClass = 'iconfont icon-dingwei';
if (obj.children) {
for (let i in obj.children) {
if (!isEmpty(obj.children[i].puid)) {
//判断球机图标
if (!isEmpty(obj.children[i].state) && obj.children[i].state === '1') {
//在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou1';
num++;
objNum++;
} else {
//不在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
} else {
//不在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
all++;
}
obj.title = obj.title + ' (' + objNum + '/' + objNoNum + ')';
}
}
}
/**
* 遍历树数据
* @param treeData
*/
function calleArr2(treeData) {
console.log(treeData)
num = 0;
noNum = 0;
all = 0;
for (let i in treeData) {
let objNum = 0;
let objNoNum = 0;
treeData.iconClass = 'iconfont icon-shexiangtou';
if (!isEmpty(treeData[i].puid)) {
//判断球机图标
if (!isEmpty(treeData[i].state) && treeData[i].state === '1') {
//在线图标
treeData[i].iconClass = 'iconfont icon-shexiangtou1';
num++;
objNum++;
} else {
//不在线图标
treeData[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
} else {
//不在线图标
treeData[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
all++;
treeData.title = treeData.title + ' (' + objNum + '/' + objNoNum + ')';
}
}
// 处理固定式球机数据
function handleData(treeData){
num = 0;
noNum = 0;
all = 0;
for (let i in treeData) {
let objNum = 0;
let objNoNum = 0;
let obj = treeData[i];
obj.iconClass = 'none';
if (obj.children) {
for (let i in obj.children) {
if (!isEmpty(obj.children[i].puid)) {
//判断球机图标
if (!isEmpty(obj.children[i].state) && obj.children[i].state === '1') {
//在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou1';
num++;
objNum++;
} else {
//不在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
} else {
//不在线图标
obj.children[i].iconClass = 'iconfont icon-shexiangtou';
noNum++;
objNoNum++;
}
all++;
}
obj.title = obj.title + ' (' + objNum + '/' + objNoNum + ')';
}
}
}
/**
* 播放视频
* @param {Object} winNum
* @param {Object} devCode
* @param {Object} devName
* @param videoType 视频类型
*/
function playVideo(winNum, devCode) {
let index = devCode.indexOf("-");
if(index > 0){ // 固定球机播放
let puid = devCode.substring(0,index);
let idx = devCode.substring(index + 1,devCode.length);
QXPlayVideo(puid, idx, winDom)
}else{
QXPlayVideo(devCode, '0', winDom)
}
}
/**
* 云台控制
* @param devCode
*/
function playControl() {
let key;
//点击事件
let btn = $('[lay-event=control]');
btn.unbind();
btn.mousedown(function (event) {
if(ty_code==passWay){
key = tyControlType[$(this).attr('id')];
nrUvpVideoObj.uvpVideoControl({ devCode:videoObject.devCode, cmd:key[0] })
}else{
key = qxControlType[$(this).attr('id')];
if (videoObject.playState) {
key = qxControlType[$(this).attr('id')];
if (key[2]) {
//清新 -球机移动
turnControl(key[0], videoObject.devCode).then(r => {
});
} else {
//球机放大缩小
qxControl(videoObject.devCode, key[1])
}
}
}
event.stopPropagation();
}).mouseup(function (event) {
if(ty_code==passWay){
key = tyControlType[$(this).attr('id')];
nrUvpVideoObj.uvpVideoControl({ devCode:videoObject.devCode, cmd:key[1] })
}else{
key = qxControlType[$(this).attr('id')];
if (videoObject.playState) {
key = qxControlType[$(this).attr('id')];
if (key[2]) {
turnControl(key[3], videoObject.devCode).then(r => {
});
} else {
qxControl(videoObject.devCode, key[3])
}
}else {
layer.msg("请先播放视频....", {icon: 0});
}
}
event.stopPropagation();
});
}
// 获取所有操作按钮
const controlButtons = document.querySelectorAll('.control2');
const videoControlBtn = document.querySelectorAll('#videoControlBtn');
// 为每个按钮添加双击事件阻止
controlButtons.forEach(button => {
button.addEventListener('dblclick', function(e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return false;
});
});
videoControlBtn.forEach(button => {
button.addEventListener('dblclick', function(e) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return false;
});
});
// 视频全屏,按钮的点击事件
function playControl2() {
let key;
//点击事件
let btn = $('[lay-event=control2]');
btn.unbind();
btn.mousedown(function (event) {
event.stopPropagation();
if (ty_code == passWay) {
key = tyControlType[$(this).attr('id')];
nrUvpVideoObj.uvpVideoControl({ devCode: videoObject.devCode, cmd: key[0] })
} else {
key = qxControlType[$(this).attr('id')];
console.log(key);
if (videoObject.playState) {
key = qxControlType[$(this).attr('id')];
if (key[2]) {
//清新 -球机移动
turnControl(key[0], videoObject.devCode).then(r => {
});
} else {
//球机放大缩小
qxControl(videoObject.devCode, key[1])
}
}
}
event.stopPropagation();
}).mouseup(function (event) {
if (ty_code == passWay) {
key = tyControlType[$(this).attr('id')];
nrUvpVideoObj.uvpVideoControl({ devCode: videoObject.devCode, cmd: key[1] })
} else {
key = qxControlType[$(this).attr('id')];
if (videoObject.playState) {
key = qxControlType[$(this).attr('id')];
if (key[2]) {
turnControl(key[3], videoObject.devCode).then(r => {
});
} else {
qxControl(videoObject.devCode, key[3])
}
} else {
layer.msg("请先播放视频....", { icon: 0 });
}
}
event.stopPropagation();
});
}
/**
* 改变底部按钮样式
*/
function changBtn(dom, parentDom, css) {
let button = $(dom);
if (!button.hasClass(css)) {
$.each(parentDom.children(), function (index, item) {
$(item).removeClass(css);
});
}
button.addClass(css);
}
// 输入框查询禁用快捷键
let isProhibitKey = false;
function prohibitKey(type){
if(type === 1){ // 禁用
console.log('禁用')
isProhibitKey = true;
}else if(type === 2){ // 不禁用
console.log('不禁用')
isProhibitKey = false;
}
}
let numA = "";
let up = "W";
let down = "S";
let left = "A";
let right = "D";
let amplify = "Q";
let shrink = "E";
let farFocus = "R";
let nearFocus = "T";
let photoLocal = "F";
let videoLocal = "G";
let escape = "Escape";
//键盘监听事件——本地截屏
document.onkeydown = function (event) {
up = isEmpty(localStorage.getItem("up")) ? "W" : localStorage.getItem("up");
down = isEmpty(localStorage.getItem("down")) ? "S" : localStorage.getItem("down");
left = isEmpty(localStorage.getItem("left")) ? "A" : localStorage.getItem("left");
right = isEmpty(localStorage.getItem("right")) ? "D" : localStorage.getItem("right");
amplify = isEmpty(localStorage.getItem("amplify")) ? "Q" : localStorage.getItem("amplify");
shrink = isEmpty(localStorage.getItem("shrink")) ? "E" : localStorage.getItem("shrink");
farFocus = isEmpty(localStorage.getItem("farFocus")) ? "R" : localStorage.getItem("farFocus");
nearFocus = isEmpty(localStorage.getItem("nearFocus")) ? "T" : localStorage.getItem("nearFocus");
photoLocal = isEmpty(localStorage.getItem("photoLocal")) ? "F" : localStorage.getItem("photoLocal");
videoLocal = isEmpty(localStorage.getItem("videoLocal")) ? "G" : localStorage.getItem("videoLocal");
escape = isEmpty(localStorage.getItem("escape")) ? "Escape" : localStorage.getItem("escape");
let e = event || window.event || arguments.callee.caller.arguments[0];
if (numA !== e.code.replaceAll("Key", '')) {
whichkey(event);
}
numA = e.code.replaceAll("Key", '');
};
function whichkey(event) {
if(isProhibitKey){
return false;
}
let e = event || window.event || arguments.callee.caller.arguments[0];
if (e.code === escape && e) {
configure();
} else if (e && e.code.replaceAll("Key", '') === photoLocal) { // Ctrl_B
screenshot();
} else if (e && e.code.replaceAll("Key", '') === videoLocal) { // Ctrl_B
$("#videoLocal").click()
} else if (e && e.code.replaceAll("Key", '') === up) { // Ctrl_B
controlDown("up");
} else if (e && e.code.replaceAll("Key", '') === down) { // Ctrl_B
controlDown("down");
} else if (e && e.code.replaceAll("Key", '') === left) { // Ctrl_B
controlDown("left");
} else if (e && e.code.replaceAll("Key", '') === right) { // Ctrl_B
controlDown("right");
} else if (e && e.code.replaceAll("Key", '') === amplify) { // Ctrl_B
controlDown("amplify");
} else if (e && e.code.replaceAll("Key", '') === shrink) { // Ctrl_B
controlDown("shrink");
} else if (e && e.code.replaceAll("Key", '') === farFocus) { // Ctrl_B
controlDown("farFocus");
} else if (e && e.code.replaceAll("Key", '') === nearFocus) { // Ctrl_B
controlDown("nearFocus");
}
}
document.onkeyup = function (event) {
numA = "";
let e = event || window.event || arguments.callee.caller.arguments[0];
if (e && e.code.replaceAll("Key", '') === up) { // Ctrl_B
controlUp("up");
} else if (e && e.code.replaceAll("Key", '') === down) { // Ctrl_B
controlUp("down");
} else if (e && e.code.replaceAll("Key", '') === left) { // Ctrl_B
controlUp("left");
} else if (e && e.code.replaceAll("Key", '') === right) { // Ctrl_B
controlUp("right");
} else if (e && e.code.replaceAll("Key", '') === amplify) { // Ctrl_B
controlUp("amplify");
} else if (e && e.code.replaceAll("Key", '') === shrink) { // Ctrl_B
controlUp("shrink");
} else if (e && e.code.replaceAll("Key", '') === farFocus) { // Ctrl_B
controlUp("farFocus");
} else if (e && e.code.replaceAll("Key", '') === nearFocus) { // Ctrl_B
controlUp("nearFocus");
}
}
function controlDown(type) {
if(isProhibitKey){
return false;
}
//统一视频
if(ty_code==passWay){
let key= tyControlType[type];
nrUvpVideoObj.uvpVideoControl({ devCode:videoObject.devCode, cmd:key[0] })
}else{
if (videoObject.playState) {
let key= qxControlType[type];
if (key[2]) {
//清新 -球机移动
turnControl(key[0], videoObject.devCode).then(r => {
});
} else {
//球机放大缩小
qxControl(videoObject.devCode, key[1])
}
}else {
layer.msg("请先播放视频....", {icon: 0});
}
}
}
function controlUp(type) {
if(isProhibitKey){
return false;
}
if(ty_code==passWay){
let key= tyControlType[type];
nrUvpVideoObj.uvpVideoControl({ devCode:videoObject.devCode, cmd:key[1] })
}else{
if(videoObject.playState) {
//球机移动
let key = qxControlType[$(this).attr('id')];
if (key[2]) {
turnControl(key[3], videoObject.devCode).then(r => {
});
} else {
qxControl(videoObject.devCode, key[3])
}
} else {
layer.msg("请先播放视频....", {icon: 0});
}
}
}
function set3DisTrue(){
let is3D = $('#3dset').prop('checked')
if(is3D){
layer.msg('已开启3D云台', {icon: 1})
}else{
layer.msg('已关闭3D云台', {icon: 1})
}
localStorage.setItem("threeD",is3D);
}
function configure() {
let height = '80%', width = '30%';
let index = parent.layer.open({
id: "configure",
title: ['快捷键设置', 'font-size:18px;'],
type: 2,
shade: 0.1,
shadeClose: false,
maxmin: false,
content: '../video/configure.html',
area: [width, height],
});
}