HM-SPMS/web/nginx/html/js/index.js
2026-01-06 04:47:40 +08:00

785 lines
22 KiB
JavaScript

if (!$('#alarmNum').html()) {
$('#alarmNum').html('0');
}
var urlParam = decodeURIComponent(location.search);
if (urlParam.indexOf('theme') !== -1) {
var arr = urlParam.substr(urlParam.indexOf('theme')).split(/[\=\&]/g);
localStorage.setItem('configTheme', arr[1]);
}
function checkDisabled() {
var his = JSON.parse(sessionStorage.getItem('hisMenu') || '[]');
var index = sessionStorage.getItem('menuIndex');
if (his.length <= 1) {
$('#m_pre').addClass('disabled');
$('#m_next').addClass('disabled');
return false;
}
if (index == 0) {
$('#m_pre').addClass('disabled');
} else {
$('#m_pre').removeClass('disabled');
}
if (index == his.length - 1) {
$('#m_next').addClass('disabled');
} else {
$('#m_next').removeClass('disabled');
}
}
//* 面包屑菜单
function BreadcrumbClass() {
this.patchNavDataCache = this.patchNavData()
this.breadcrumSelectOptionHandleInit()
var el=$('#breadcrumb');
if(!el[0]){
console.error('面包屑菜单缺少容器');
return;
}
var stArr = $('#breadcrumb').attr('style').split(';').filter(function (f) {return !!f})
stArr.push('display: flex','flex;align-items: center')
$('#breadcrumb').attr('style',stArr.join(';'))
}
// 必定是跳转链接触发
BreadcrumbClass.prototype.initBreadcrumbHtml = function (targetItem) {
var chain = this.getBreadcrumbChainData(targetItem)
var htmlStr = this.getBreadcrumbHtmeStr(chain)
$('#breadcrumb').html(htmlStr);
}
BreadcrumbClass.prototype.getBreadcrumbChainData = function (item) {
var chain = []
var curItem = item
while (true) {
var pItem = this.patchNavDataCache.idMap[curItem._pId]
if(!pItem) break
chain.unshift({
...curItem,
nearArr:pItem.items
})
curItem = pItem
}
return chain
}
BreadcrumbClass.prototype.getBreadcrumbHtmeStr = function (chain) {
var strArr = chain.map(function (item) {
var str = ''
if(!item.nearArr){
str = '<span>'+ item.name +'</span>'
}else{
str = '<select class="breadcrumb-select" style="color:'+ navData.configure.itemSelectedTextColor+'">' +
item.nearArr.reduce(function (pre,o) {
var isSelected = ''
if(o._id === item._id) isSelected = 'selected'
return pre + '<option class="breadcrumb-option-item" value="'+ o._id +'" '+ isSelected +'>' + o.name + '</option>'
},'') +
'</select>'
}
return str
})
return strArr.join('<span class="breadcrumb-split-span" style="color:'+ navData.configure.itemSelectedTextColor+'"></span>')
}
BreadcrumbClass.prototype.breadcrumSelectOptionHandleInit = function () {
var that = this
$('#breadcrumb').on('change', 'select', function() {
var id = $(this).find('option:selected').val()
var targetItem = that.patchNavDataCache.idMap[id]
if(!targetItem) return console.log('目标无跳转路径数据')
var jumpItem = targetItem
while(true){
if(jumpItem.data) break
if(jumpItem.items && jumpItem.items.length > 0){
jumpItem = jumpItem.items[0]
}else{
jumpItem = null
break
}
}
if(!jumpItem) return console.log('无跳转路径数据')
var src = navDataSrc(jumpItem)
var aList = $('#nav li>p[href]')
for (var index = 0; index < aList.length; index++) {
var element = aList[index];
var jumpHref = $(element).attr('href')
if(jumpHref === src){
$(element).trigger('click');
break
}
}
})
}
BreadcrumbClass.prototype.patchNavData = function() {
var nveDatas = navData.items
var nveDatasRich = JSON.parse(JSON.stringify(nveDatas))
var idMap = {}
var dataMap = {}
var idMark = 0
patchId(nveDatasRich)
var fullNavMenuData = [{
id:'root',
items:[]
}]
$('#menu')
.find('button[nav-value]').each(function (i,btn,c) {
var nav_value = $(btn).attr('nav-value').split(',').filter(function (f) {
return !!f
})
var rootItem = {
_id:'topmenuIndex' + i,
_pId:'root',
name:$(btn).text(),
}
var items = nav_value.map(function (i) {
var item = nveDatasRich[i]
item._pId = rootItem._id
return item
})
rootItem.items = items
fullNavMenuData[0].items.push(rootItem)
})
patchMap(fullNavMenuData)
return {
idMap:idMap,
nveDatasRich:nveDatasRich,
dataMap:dataMap,
fullNavMenuData:fullNavMenuData
}
function patchId(cArr,Pitem) {
cArr.forEach(navItem => {
if(!navItem._id){
navItem._id = ++idMark
}
if(Pitem){
navItem._pId = Pitem._id
}
if(navItem.items && navItem.items.length>0){
patchId(navItem.items,navItem)
}
});
}
function patchMap(cArr) {
cArr.forEach(navItem => {
if(navItem.data) dataMap[navItem.data] = navItem
idMap[navItem._id] = navItem
if(navItem.items && navItem.items.length>0){
patchMap(navItem.items,navItem)
}
});
}
}
var BreadcrumbIns = new BreadcrumbClass()
var backFlag = false;
(function($) {
var navShowFlag = document.getElementById('nav_img');
var origin = location.origin;
var mynav = {
alarm_window: 'alarm',
event_window: 'rtevent',
trend: 'realtime',
实时事件: 'event',
历史趋势: 'history',
reportview: 'view',
reportdesign: 'design',
view_bi_design: origin + '/platform/pageManage',
view_bi_view: origin + '/platform/configView'
};
var lng = localStorage.getItem('i18n');
var nop;
if (!lng) {
nop = navigator.language == 'zh-CN' ? '没有权限' : 'No permissions';
} else {
nop = lng == 'cn' ? '没有权限' : 'No permissions';
}
$('#theme').on('click', function() {
var theme = localStorage.getItem('configTheme');
var fn = function(t) {
var ft = t === 'light' ? 'dark' : 'light';
localStorage.setItem('configTheme', t);
var urlParam = decodeURIComponent(location.href);
if (urlParam.indexOf('theme') !== -1) {
urlParam = urlParam.replace('theme=' + ft, 'theme=' + t);
}
location.href = urlParam.replace(ft + '/page', t + '/page');
};
if (theme === 'dark') {
fn('light');
} else {
fn('dark');
}
});
if (navShowFlag) {
$('#nav_img').on('click', function() {
var max = parseFloat($('#view').css('height'));
var min = parseFloat($('#m_navi').css('top')) + 1;
var height = parseFloat($('#nav').css('height'));
if (height == max + min) {
$('#nav').css('height', min + 'px');
} else {
$('#nav').css('height', max + min + 'px');
}
});
}
$('#m_alarmBtn').on('click', function() {
checkPower('alarm_window.glx', function(json) {
var res = JSON.parse(json);
if (res.flag || !powerFlag) {
$('#m_alarm').trigger('click');
} else {
alert(nop);
}
});
});
//*点击导航
$('#nav').on('click', 'li>p[href]', function() {
var el = $(this);
var href = el.attr('href');
var code = el.attr('code');
var mainIframe = $('#view').find('iframe');
var mainIframeBak = mainIframe.clone();
$('#view')
.find('iframe')
.remove();
mainIframeBak.attr('src', '/loading.html');
$('#view').append(mainIframeBak);
checkPower(code, function(json) {
var res = JSON.parse(json);
if (!powerFlag) {
res.flag = true;
}
var theme = localStorage.getItem('configTheme');
if (res.flag) {
$('#nav')
.find('.cur')
.removeClass('cur');
el.addClass('cur');
var selector = '#menu button[nav-value]';
var item =
$(selector + '.checked').index(selector) +
'-' +
el.index('#nav>ul p[href]');
sessionStorage.setItem('selMenu', item);
// 历史记录
var his = JSON.parse(sessionStorage.getItem('hisMenu') || '[]');
if (!backFlag) {
if (!(his.length !== 0 && his[his.length - 1] === item)) {
if (his.length > 30) {
his.splice(0, 1);
}
his.push(item);
sessionStorage.setItem('hisMenu', JSON.stringify(his));
}
sessionStorage.setItem('menuIndex', his.length - 1);
checkDisabled();
}
backFlag = false;
if (href === '../../page/view.html') {
var userGroup = sessionStorage.getItem('userGroup');
mainIframeBak.attr(
'src',
href +
'?theme=' +
theme +
'&userGroup=' +
encodeURI(userGroup) +
'&language=' +
lng
);
} else if (href === '../../page/design.html') {
mainIframeBak.attr(
'src',
href +
(href.indexOf('?') !== -1 ? '&' : '?') +
'theme=' +
theme +
'&language=' +
lng
);
} else if (href.indexOf('http://' !== -1)) {
mainIframeBak.attr('src', href);
} else {
mainIframeBak.attr(
'src',
href + (href.indexOf('?') !== -1 ? '&' : '?') + 'language=' + lng
);
}
if (navShowFlag) {
var min = parseFloat($('#m_navi').css('top')) + 1;
$('#nav').css('height', min + 'px');
}
} else {
alert(nop);
}
});
if($('#breadcrumb')&&$('#breadcrumb')[0]){
var tItem = BreadcrumbIns.patchNavDataCache.dataMap[code]
if(tItem) BreadcrumbIns.initBreadcrumbHtml(tItem)
}
});
$.fn.initNav = function(data) {
var keylist = ['levelTopItem', 'levelChildItem', 'levelLeafItem'];
createStyle(data.configure, keylist);
var el = createElement(data.items, 0);
this.html(el);
return this;
};
window.navDataSrc = navDataSrc
function navDataSrc(d){
var src = '',
dh = '';
dh = d.data.replace(/.*\\|.*\/|\.glx/g, ''); //删除正斜杠和反斜杠之前所有的字符串以及.glx
var pdh = mynav[dh] !== undefined ? mynav[dh] : dh;
var theme = localStorage.getItem('configTheme');
if (d.type === 'html') {
if (pdh.indexOf('http:') !== -1) {
src = pdh;
} else if (mynav[dh]) {
src = '../../page/' + encodeURI(pdh) + '.html';
} else {
src = '../../' + theme + '/page/' + encodeURI(pdh) + '.html';
}
// if (dh == "view") {
// // src = src + '?userGroup=flag';
// src = src + "?userGroup=" + sessionStorage.getItem("userGroup");
// }
} else if (d.type === 'canvas') {
src =
'../../configView.html?#/configView?fileName=' +
encodeURI(d.data.replace(/\.glx/g, ''));
} else if (d.type === 'energy') {
src = d.data;
}
return src;
}
function createEleP(d, item) {
var str = '';
var img = d.icon
? '<img class="img icon" src="../back_pixmap/' +
d.icon +
'" alt="&nbsp;"></img>'
: '<span class="img icon"></span>';
if (d.type) {
var src = navDataSrc(d)
str =
'<p class="node' +
item +
'" href="' +
src +
'" code="' +
d.data +
'" page-type="' +
d.type +
'" title="' +
d.name +
'">' +
'<em class="sim-border"></em>';
} else {
str = '<p class="node' + item + '" title="' + d.name + '">';
}
return str + img + d.name + '</p>';
}
function createElement(data, item) {
if (!data) {
return '';
}
item = item === undefined ? 0 : Number(item);
for (var i = 0, str = ''; i < data.length; i++) {
var d = data[i];
str += '<li>' + createEleP(d, item);
if (d.items && d.items.length) {
str += '<ul>' + createElement(d.items, item + 1) + '</ul>';
}
str += '</li>';
}
return str;
}
function createStyle(data, keylist) {
if ($('style#navstyle')[0]) {
return false;
} else {
var default_opacity = 'ff';
$('#nav').prepend('<style id="navstyle"></style>');
var el = $('style#navstyle');
$('#nav').css({
'background-color': data.backgroundColor + default_opacity
});
var style = '';
style +=
'#nav .img.icon{margin:' +
data.iconMargin +
'px;vertical-align:middle;display:inline-block;}' +
'#nav em.sim-border{width:' +
data.indicatorWidth +
'px;height:100%;display:inline-block;vertical-align:middle;background-color:transparent;}' +
'#nav li>p{height:' +
data.rowHeight +
'px;line-height:' +
data.rowHeight +
'px;}' +
'#nav li>p[href]:hover{background-color:' +
data.itemHoveredBgColor +
default_opacity +
';color:' +
data.itemHoveredTextColor +
';}' +
'#nav li>p.cur{background-color:' +
data.itemSelectedColor +
default_opacity +
';color:' +
data.itemSelectedTextColor +
';}';
style +=
'#nav li>p{white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}';
for (var i = 0; i < keylist.length; i++) {
var d = keylist[i];
style +=
'#nav p.node' +
i +
'{padding-left:' +
data[d + 'Indentation'] +
'px;background-color:' +
data[d + 'BgColor'] +
default_opacity +
';color:' +
data[d + 'TextColor'] +
';font-size:' +
data[d + 'TextSize'] +
'px;}';
style +=
'#nav p.node' + i + ' .img{width:' + data[d + 'IconSize'] + 'px;}';
}
el.html(style);
}
}
var oldid;
var alarmCount = initSocket({
url: 'alarmCountWebsocket',
success: function(res) {
var obj = res.data;
if (obj === undefined) {
return false;
}
$('#alarmNum').html(obj.count > 99 ? '99+' : obj.count);
if (obj.id !== oldid) {
audioplay.soundList = obj.soundFile;
audioplay.changeCurList();
}
oldid = obj.id;
},
open: function(count) {
count.send({
flag: 1
});
}
});
$(document).on('click', function() {
if (audioplay.state == 0) {
audioplay.init();
}
});
})(jQuery);
$(function() {
var username = sessionStorage.getItem('name');
$('#m_menuBar').html(
'<option value="' +
sessionStorage.getItem('id') +
'">' +
username +
'</option>'
);
//*点击顶部菜单 */
$('#menu')
.find('button[nav-value]')
.on('click', function() {
$('#menu')
.find('button[nav-value].checked')
.removeClass('checked');
$(this).addClass('checked');
var menuIndex = $(this).index('#menu button[nav-value]');
var nav_value = $(this)
.attr('nav-value')
.split(',');
var data_type = $(this).attr('data-type');
if (data_type == 3) {
var data = {
configure: navData.configure,
items: []
};
for (var i = 0; i < nav_value.length; i++) {
var n = nav_value[i];
if (n !== '' && n !== null && !isNaN(n)) {
data.items.push(navData.items[n]);
}
}
var el = $('#nav>ul').initNav(data);
// $('#breadcrumb').initBreadcrumb(data.items)
setTimeout(function() {
var data = (sessionStorage.getItem('selMenu') || '').split('-');
if (data[0] + '' === menuIndex + '') {
el.find('p[href]:eq(' + data[1] + ')').trigger('click');
} else {
el.find('p[href]:eq(0)').trigger('click');
sessionStorage.setItem('selMenu', menuIndex + '-0');
}
}, 80);
}
});
var menuSelData = (sessionStorage.getItem('selMenu') || '').split('-');
$('#menu')
.find(
'button[nav-value]:eq(' +
(menuSelData.length === 2 ? menuSelData[0] : 0) +
')'
)
.trigger('click');
$('button#m_exit').on('click', function() {
$.get('/ems/logoutAction', {}, function() {
location.href = '/';
});
sessionStorage.setItem('hisMenu', '[]');
sessionStorage.setItem('menuIndex', 0);
sessionStorage.setItem('selMenu', '0-0');
});
var timer, t;
setTimeout(function() {
if (timer) {
clearInterval(timer);
}
getServerTime();
setTimeout(arguments.callee, 600000);
}, 600000);
getServerTime();
function getServerTime() {
$.get(
'/ems/monitorBusiness/getSystemDateTime',
{},
function(res) {
var nop = localStorage.getItem('i18n');
if (!nop) {
nop = navigator.language == 'zh-CN' ? 'cn' : 'en';
}
var weekList = [
'星期日',
'星期一',
'星期二',
'星期三',
'星期四',
'星期五',
'星期六'
];
t = dayjs(res.sysTime);
$('#time').html(t.format('HH:mm:ss'));
timer = setInterval(function() {
t = t.add(1, 'second');
$('#time').html(t.format('HH:mm:ss'));
}, 1000);
if (nop == 'en') {
$('#date').html(t.format('MMM DD'));
$('#week').html(t.format('ddd'));
} else {
$('#date').html(t.format('MM月DD日'));
$('#week').html(weekList[t.day()]);
}
$('#safe-days-name').html(res.safeDaysMs[0].day_diff);
},
'JSON'
);
}
//放大缩小
$('#view').css('transform-origin', 'left top'); //设置原点
$('#view').css('transform', 'scale(1)');
//放大
$('#m_zoomIn').on('click', function() {
var transform = $('#view').css('transform');
if (transform !== 'none') {
var matrix = transform.replace(/[^0-9\-,\.]/g, '').split(',');
var value = parseFloat(matrix[0]) + 0.1;
if (value > 3) {
value = 3;
}
value = value.toFixed(1);
matrix[0] = value;
matrix[3] = value;
$('#view').css('transform', 'matrix(' + matrix.join(',') + ')');
} else {
$('#view').css('transform', 'matrix(1,0,0,1,0,0)');
}
});
//缩小
$('#m_zoomOut').on('click', function() {
var transform = $('#view').css('transform');
if (transform !== 'none') {
var matrix = transform.replace(/[^0-9\-,\.]/g, '').split(',');
var value = parseFloat(matrix[0]) - 0.1;
if (value < 0.4) {
value = 0.4;
}
value = value.toFixed(1);
matrix[0] = value;
matrix[3] = value;
$('#view').css('transform', 'matrix(' + matrix.join(',') + ')');
} else {
$('#view').css('transform', 'matrix(1,0,0,1,0,0)');
}
});
//复原
$('#m_zoom').on('click', function() {
$('#view').css('transform', 'matrix(1,0,0,1,0,0)');
});
//首页
$('#m_index').on('click', function() {
if (
$('#menu')
.find('button[nav-value]:first')
.hasClass('checked')
) {
$('#nav')
.find('p[href]:first')
.trigger('click');
} else {
$('#menu')
.find('button[nav-value]:first')
.trigger('click');
}
});
//前进后退
$('#m_pre').on('click', function() {
if ($(this).hasClass('disabled')) {
return false;
}
if(backFlag){return false}
backFlag = true;
var his = JSON.parse(sessionStorage.getItem('hisMenu') || '[]');
if (his.length <= 1) {
return false;
}
var index = parseInt(sessionStorage.getItem('menuIndex'), 10);
index = index !== 0 && !index ? his.length - 1 : index - 1;
if (index < 0) {
alert('没有记录了');
return false;
}
var sel = his[index];
sessionStorage.setItem('selMenu', sel);
sessionStorage.setItem('menuIndex', index);
sel = sel.split('-');
$('#menu')
.find('button[nav-value]:eq(' + sel[0] + ')')
.trigger('click');
checkDisabled();
});
$('#m_next').on('click', function() {
if ($(this).hasClass('disabled')) {
return false;
}
if(backFlag){return false}
backFlag = true;
var his = JSON.parse(sessionStorage.getItem('hisMenu') || '[]');
if (his.length <= 1) {
return false;
}
var index = parseInt(sessionStorage.getItem('menuIndex'), 10);
index = index !== 0 && !index ? his.length - 1 : index + 1;
if (index >= his.length) {
alert('没有记录了');
return false;
}
var sel = his[index];
sessionStorage.setItem('selMenu', sel);
sessionStorage.setItem('menuIndex', index);
sel = sel.split('-');
$('#menu')
.find('button[nav-value]:eq(' + sel[0] + ')')
.trigger('click');
checkDisabled();
});
//禁止截屏
$('#m_snapScreen').addClass('disabled');
//禁止滚动截屏
$('#m_shotScreen').addClass('disabled');
//禁止轮播
$('#m_rollBtn').addClass('disabled');
});
//声音报警
var audioplay = {
soundList: [],
audio: '',
curList: [],
state: 0,
path: '../../audio/',
suffix: '.wav',
init: function() {
this.curList = this.soundList;
this.playList();
},
changeCurList: function() {
if (this.state == 2) {
this.audio.pause();
this.audio.currentTime = 0;
}
this.init();
},
playList: function() {
var i = 0,
arr = this.curList || [];
var me = this;
var path = me.path;
var suffix = me.suffix;
this.audio = new Audio(path + arr[i] + suffix);
this.state = 1;
this.audio.oncanplay = function() {
me.audio.play();
me.state = 2;
};
me.audio.onended = function() {
if (arr[++i]) {
me.audio.src = path + arr[i] + suffix;
me.audio.play();
} else {
i = 0;
if (!arr[0]) {
return false;
} else {
me.audio.src = path + arr[i] + suffix;
me.audio.play();
}
}
};
if (typeof this.audio.play !== 'function') {
// me.state = 0;
console.log('no');
}
}
};