Files
SIPAIIS_WMS_JSSW/WebRoot/jsp/visual/switch.jsp
2026-01-16 14:13:44 +08:00

330 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page import="com.sipai.entity.base.ServerObject"%>
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%>
<!DOCTYPE html>
<!-- <html lang="zh-CN"> -->
<!-- BEGIN HEAD -->
<head>
<title>大屏</title>
<style>
#subModal {
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
min-width: 80%;
/*这个比例可以自己按需调节*/
overflow: visible;
bottom: inherit;
right: inherit;
}
.dropdown::-webkit-scrollbar{
width:10px;
height:10px;
}
.dropdown::-webkit-scrollbar-thumb{
width:4px;
height:60px;
background-color:#33acd1;
border-radius:3px;
}
.dropdown::-webkit-scrollbar-track
{
border-radius: 10px;
background-color: rgba(255,255,255,.5);
}
</style>
<!-- 引用页头及CSS页-->
<jsp:include page="/jsp/incVisual.jsp"></jsp:include>
<script type="text/javascript">
var websocket = null;
//websocket接收信息触发换屏
function registerEvent() {
websocket.onopen = function (event) {
console.log("大屏已连接");
}
websocket.onmessage = function (event) {
//console.log("height", document.documentElement.offsetHeight);
if (event.data != "大屏已连接" && event.data != "大屏已断开" && event.data != "控制已断开" && event.data != "控制已连接") {
//传递JSON先转换为数组再判定type
var json = eval(event.data);
if (json[0].type == "interaction") {//交互
//交互模态判断
if (json[0].id != null && json[0].id != "") {
createInteraction(json[0].id);
}
} else if (json[0].type == "clearInteraction") {//清除交互
if (document.getElementById("subModal")) {
if (document.getElementById("frameCamera")) {
$("frameCamera").remove();
}
//console.log(document.getElementById("subModal"));
closeModal("subModal");
$("div").removeClass("modal-backdrop fade in");
//setTimeout($("div").removeClass("modal-backdrop fade in"),1000);
}
} else if (json[0].type == "plan") {//方案
//根据方案id获取方案数据
createPage(json[0].id);
} else {
}
}
};
websocket.onclose = function (event) {
console.log("大屏已断开");
$("#Show").hide();
$("#Start").show();
$("#Start h2").text("连接已断开!");
reconnect();
};
//连接发生错误的回调方法
websocket.onerror = function () {
$("#Show").hide();
$("#Start").show();
$("#Start h2").text("连接已断开!");
reconnect();
};
}
//setTimeout(function(){location.reload()},3600000); //指定1小时刷新一次
//自动重连websocket
function reconnect() {
var userName = "大屏";
// websocket = new WebSocket('ws://' + window.location.host + ext.contextPath + '/chat?userName=' + userName);
websocket = new WebSocket(ext.basePath.replace("http","ws")+"/chat/"+userName);
websocket.onopen = function (event) {
console.log("大屏已连接");
}
websocket.onmessage = function (event) {
if (event.data != "大屏已连接" && event.data != "大屏已断开") {
//传递JSON先转换为数组再判定type
var json = eval(event.data);
if (json[0].type == "interaction") {//交互
//交互模态判断
if (json[0].id != null && json[0].id != "") {
createInteraction(json[0].id);
}
} else if (json[0].type == "clearInteraction") {//清除交互
if (document.getElementById("subModal")) {
if (document.getElementById("frameCamera")) {
$("frameCamera").remove();
}
//console.log(document.getElementById("subModal"));
closeModal("subModal");
$("div").removeClass("modal-backdrop fade in");
//setTimeout($("div").removeClass("modal-backdrop fade in"),1000);
}
} else if (json[0].type == "plan") {//方案
//根据方案id获取方案数据
createPage(json[0].id);
} else {
}
}
};
websocket.onclose = function (event) {
setTimeout("reconnect();", 8000);
};
//连接发生错误的回调方法 `1
websocket.onerror = function () {
$("#Show").hide();
$("#Start").show();
$("#Start h2").text("连接已断开!");
websocket.close();
};
}
$(window).unload(function () {
console.log("大屏关闭");
websocket.close();
});
//获取url地址根目录 当前taomcat下路径
function getRootPath(){
var pathName = window.location.pathname.substring(1);
// var webName = pathName == '' ? '' : pathName.substring(0, pathName.indexOf('/'));
return window.location.protocol + '//' + window.location.host;
}
function createPage(planId) {
// console.log("opener",opener);
if(opener == null){
window.close();
}
destroyIframe();
$("#layout").html("");//先清空
$("#Start").hide();
$("#Show").show();
$.post(ext.contextPath + '/plan/getPlanWholeInfo.do', { planId: planId }, function (data) {
//console.log("tbheight", document.getElementById("layout").offsetHeight);
//背景赋色
document.getElementById('layout').style.backgroundColor = data[0].backgroundColor;
//背景图
if(data[0].image!=''){
$('#layout').css("background","url("+getRootPath()+""+data[0].image+") no-repeat");
$('#layout').css("background-size","contain");
}
//生成框架
var rowno = 0;
var $tr = $('');
var layoutList = data[0].planLayout;
// console.log(layoutList);
for (var i = 0; i < layoutList.length; i++) {
if (layoutList[i].layoutDetail.rowno == rowno) {
//添加td
if (layoutList[i].jspCode != "" && layoutList[i].jspCode != undefined) {
var iframeHeight=layoutHeight*(Number(layoutList[i].height)/100)+"px";
// console.log(miniHeight);
// console.log(iframeHeight);
var $td = $('<td width="' + layoutList[i].width + '%" colspan="' + layoutList[i].layoutDetail.colspan + '" rowspan = "' + layoutList[i].layoutDetail.rowspan
+ '"><iframe id="frame' + i + '" scrolling="no" allowtransparency="yes" style="height:'+iframeHeight+';width:100%;border:0px;padding:0px;margin:0px" src="'
+ ext.contextPath + '/jsp/visual/modules/' + layoutList[i].jspCode + '.jsp?backgroundColor=' + data[0].backgroundColor.replace(/\#/g, "")
+ '&planLayoutId=' + layoutList[i].id + '&fId=frame' + i + '&videoType=switch"></iframe></td>');
$tr.append($td);
} else {
var $td = $('<td width="' + layoutList[i].width + '%" colspan="' + layoutList[i].layoutDetail.colspan + '" rowspan = "' + layoutList[i].layoutDetail.rowspan
+ '"></td>');
$tr.append($td);
}
} else if (layoutList[i].layoutDetail.rowno > rowno) {
//大于表示要换行 将原来tr添加到table
// if (i != 0) {
// $("#layout").append($tr);
// }
//生成新tr
rowno = layoutList[i].layoutDetail.rowno;
var miniHeight = 0;
for (var j = 0; j < layoutList.length; j++) {
if (layoutList[j].layoutDetail.rowno == rowno) {
if (miniHeight == 0) {
miniHeight = layoutList[j].height;//此行号第一条先默认miniHeigth
} else {
if (Number(miniHeight) > Number(layoutList[j].height) ) {
miniHeight = layoutList[j].height;
}
}
}
}
$tr = $('<tr height="' + miniHeight + '%"></tr>');
// console.log(layoutHeight);
// console.log(miniHeight);
//以及此行第一个td
if (layoutList[i].jspCode != "" && layoutList[i].jspCode != undefined) {
var iframeHeight=layoutHeight*(layoutList[i].height/100)+"px";
// console.log(layoutHeight);
// console.log(miniHeight);
// console.log(iframeHeight);
var $td = $('<td width="' + layoutList[i].width + '%" colspan="' + layoutList[i].layoutDetail.colspan + '" rowspan = "' + layoutList[i].layoutDetail.rowspan
+ '"><iframe id="frame' + i + '" scrolling="no" allowtransparency="yes" style="height:'+iframeHeight+';width:100%;border:0px;padding:0px;margin:0px" src="'
+ ext.contextPath + '/jsp/visual/modules/' + layoutList[i].jspCode + '.jsp?backgroundColor=' + data[0].backgroundColor.replace(/\#/g, "")
+ '&planLayoutId=' + layoutList[i].id + '&fId=frame' + i + '&videoType=switch"></iframe></td>');
$tr.append($td);
} else {
var $td = $('<td width="' + layoutList[i].width + '%" colspan="' + layoutList[i].layoutDetail.colspan + '" rowspan = "' + layoutList[i].layoutDetail.rowspan
+ '"></td>');
$tr.append($td);
}
$("#layout").append($tr);
} else {
}
}
$("#layout").append($tr);//最后一次添加tr
}, 'json');
}
var interactionId = "";//用于表示两次点击的是否是同一个交互按钮
function createInteraction(id) {
destroyIframe();//删除所有iframe
//先关闭模态
if (document.getElementById("subModal")) {
//有摄像头先关闭摄像头
if (document.getElementById("frameCamera")) {
$("#frameCamera").remove();
}
//console.log(document.getElementById("subModal"));
closeModal("subModal");
$("div").removeClass("modal-backdrop fade in");
//setTimeout($("div").removeClass("modal-backdrop fade in"),1000);
}
//再判断连续两次是否相同交互
if (interactionId == id) {
//相同交互
interactionId = "";
} else {
//非相同交互
$.post(ext.contextPath + '/plan/openInteraction.do', { id: id }, function (data) {
$("#interactionDiv").html(data);
openModal('subModal');
//console.log("height", document.documentElement.offsetHeight);
});
interactionId = id;
}
}
var layoutHeight="";
//websocket触发换屏
$(document).ready(function () {
$.post(ext.contextPath + '/plan/getPlanById.do', { id: '${planId}' }, function (data) {
// console.log(data);
layoutHeight=data[0].height;
if(layoutHeight.indexOf("%")>0){
layoutHeight=$(document).height();
}
$("#pageBody").height(data[0].height);
$("#pageBody").width(data[0].width);
if(Number(window.screen.width)<Number(data[0].width)){
$("#pageBody").css('overflow-x','scroll');
}else{
$("#pageBody").css('overflow-x','hidden');
}
if(Number(window.screen.height)<Number(data[0].height)){
$("#pageBody").css('overflow-y','scroll');
}else{
$("#pageBody").css('overflow-y','hidden');
}
if ('WebSocket' in window) {
window.focus();
// 创建websocket对象
var userName = "大屏";
if (websocket) {
websocket.close();
}
websocket = new WebSocket(ext.basePath.replace("http","ws")+"/chat/"+userName);
// websocket = new WebSocket('ws://' + window.location.host + ext.contextPath + '/chat?userName=' + userName);
registerEvent();
//点击树节点自动显示浏览界面
// createPage('${planId}');
}
else {
alert('当前浏览器不支持websocket')
}
},'json');
});
</script>
</head>
<body id="pageBody" class="dropdown" style="margin:0;padding:0;">
<div id="interactionDiv"></div>
<div style="width:100%;height:100%;margin:0;padding:0;display: none;" id="Show">
<table id="layout" style="overflow: auto;width:100%;height:100%;">
</table>
</div>
<div style="width:100%;height:100%;margin:0;padding:0;" id="Start">
<h2>请拖动至大屏中,然后进行方案投至。</h2>
</div>
</body>
</html>