You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
301 lines
12 KiB
301 lines
12 KiB
1 month ago
|
Array.prototype.remove = function(from, to) {
|
||
|
var rest = this.slice((to || from) + 1 || this.length);
|
||
|
this.length = from < 0 ? this.length + from : from;
|
||
|
return this.push.apply(this, rest);
|
||
|
};
|
||
|
(function($){
|
||
|
$.BrowserInfo = {
|
||
|
IsIE: /*@cc_on!@*/false,
|
||
|
IsIE6Under: /*@cc_on!@*/false && (parseInt(navigator.userAgent.toLowerCase().match(/msie (\d+)/)[1], 10) <= 6),
|
||
|
getWindowSize : function(){//定义浏览器窗口的宽度和高度
|
||
|
return {
|
||
|
width: window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth),
|
||
|
height: window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight)
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
//ary.hasOwnProperty(key);
|
||
|
$.toastrNotify = {
|
||
|
backupTitle : document.title,//备份标题
|
||
|
scheduleQueue:[],//调度队列信息,消息时间最老的记录,放最前面
|
||
|
scheduleQueueUuid:[],
|
||
|
maxTipCount:3,//最大tip显示
|
||
|
tipsArrayIndex : 0,
|
||
|
tipItemIndex : 0,
|
||
|
interval : [],//调度器对象
|
||
|
timer:null,//标题闪烁的调度器
|
||
|
ajaxCallbackTimer:null,//消息推送后告知服务端的调度器
|
||
|
ajaxMessageQueue:[],//消息告知服务端的数组
|
||
|
ajaxCallbackFunc:null,//回调函数
|
||
|
messageFields:{
|
||
|
uuid:'uuid',
|
||
|
title:'title',
|
||
|
sender:'sender_name',
|
||
|
content:'content',
|
||
|
type:'type',
|
||
|
date:'date'
|
||
|
},
|
||
|
intervalTimer : 5000,//显示时间 单位毫秒
|
||
|
tipWidth : 300,//提示框宽度
|
||
|
tipHeight : 118,//提示框高度
|
||
|
tipMarginBottom:12,//tip之间的间隔
|
||
|
tipMarginRight:10,//tip右侧间隔
|
||
|
tipToolBar : null,//关闭所有层 jq对象
|
||
|
currentTipsArray : [],//提示框数组,存储的是html jq对象
|
||
|
|
||
|
//渲染消息提示框
|
||
|
resizeTips : function(){//设置消息提示框的位置 只供内部JS调用
|
||
|
var ie6 = $.BrowserInfo.IsIE6Under;
|
||
|
var wsize = $.BrowserInfo.getWindowSize();
|
||
|
var top= 0;
|
||
|
var tag = 0;
|
||
|
var arrayLength = $.toastrNotify.currentTipsArray.length;
|
||
|
for(var i=0;i<arrayLength;i++){
|
||
|
var o = $($.toastrNotify.currentTipsArray[i]);
|
||
|
if(o){
|
||
|
tag++;
|
||
|
var bottom = i * ($.toastrNotify.tipMarginBottom + $.toastrNotify.tipHeight);
|
||
|
o.css({ position: (ie6)? "absolute" : "fixed",height:$.toastrNotify.tipHeight, right: 5, bottom: bottom,'z-index' : "99999999" });
|
||
|
$("body").append(o);
|
||
|
}
|
||
|
}
|
||
|
//最上方的工具条
|
||
|
if(tag>0){
|
||
|
if($.toastrNotify.tipToolBar!=null){
|
||
|
var _height = arrayLength * ($.toastrNotify.tipMarginBottom + $.toastrNotify.tipHeight) + 25 - $.toastrNotify.tipMarginBottom ;
|
||
|
$($.toastrNotify.tipToolBar).css({ width:($.toastrNotify.tipWidth+2), position: (ie6)? "absolute" : "fixed", height:_height, right: 5, bottom: 0,'z-index' : "99999990" });
|
||
|
$($.toastrNotify.tipToolBar).fadeIn(800);
|
||
|
$.toastrNotify.startBlinkTitle('【新消息提醒】');
|
||
|
}
|
||
|
}else{
|
||
|
$($.toastrNotify.tipToolBar).hide();
|
||
|
$.toastrNotify.stopBlinkTitle();
|
||
|
}
|
||
|
},
|
||
|
tipTypeMapping:{
|
||
|
"0":{name:'系统消息',css:'fa-bell-o info'},
|
||
|
"1":{name:'站内信',css:'fa-envelope-o message'}
|
||
|
},
|
||
|
//系统消息;站内信
|
||
|
closeTip : function(index){//关闭消息提示框 只供内部JS调用
|
||
|
$("#jqthiscurrenttips"+index).fadeOut(800,function(){
|
||
|
//800毫秒后弹出,并重新渲染
|
||
|
for(var i=0;i<$.toastrNotify.currentTipsArray.length;i++){
|
||
|
if($("#jqthiscurrenttips"+index).html()==$.toastrNotify.currentTipsArray[i].html()){
|
||
|
$("#jqthiscurrenttips"+index).remove();//从DOM,删除当前元素
|
||
|
//从数组移除
|
||
|
$.toastrNotify.currentTipsArray.remove(i);
|
||
|
$.toastrNotify.tipsArrayIndex --;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
$.toastrNotify.resizeTips();
|
||
|
$.toastrNotify.openTip();//尝试打开
|
||
|
});
|
||
|
},
|
||
|
closeTipByInterval : function(index){//通过调度任务关闭tip
|
||
|
$.toastrNotify.closeTip(index);
|
||
|
clearInterval($.toastrNotify.interval[index]);
|
||
|
},
|
||
|
closeAllTip : function(){//关闭所有提示框
|
||
|
$('.tip-item[id^="jqthiscurrenttips"]').remove();//以jqthiscurrenttips开头
|
||
|
$.toastrNotify.tipsArrayIndex = 0;
|
||
|
$.toastrNotify.currentTipsArray = [];
|
||
|
if($.toastrNotify.scheduleQueue.length == 0){
|
||
|
$($.toastrNotify.tipToolBar).hide();
|
||
|
$.toastrNotify.resizeTips();
|
||
|
}else{
|
||
|
$.toastrNotify.openTip();//尝试打开
|
||
|
}
|
||
|
|
||
|
},
|
||
|
startAjaxCallback:function(){
|
||
|
if($.toastrNotify.ajaxCallbackTimer == null){
|
||
|
if($.toastrNotify.ajaxMessageQueue && $.toastrNotify.ajaxMessageQueue.length > 0){
|
||
|
function noticeServer(){
|
||
|
if($.toastrNotify.ajaxMessageQueue.length == 0){
|
||
|
$.toastrNotify.endAjaxCallback();
|
||
|
return;
|
||
|
}
|
||
|
if(typeof $.toastrNotify.ajaxCallbackFunc =='function'){
|
||
|
var uuidArray = [];
|
||
|
for(var i=0;i<$.toastrNotify.ajaxMessageQueue.length;i++){
|
||
|
var queueObj = $.toastrNotify.ajaxMessageQueue[i];
|
||
|
var isCallback = queueObj.isCallback == false ? false : true;//默认需要回调
|
||
|
if(isCallback == true){
|
||
|
uuidArray.push(queueObj[$.toastrNotify.messageFields.uuid]);
|
||
|
}
|
||
|
}
|
||
|
var str = uuidArray.join(',');
|
||
|
$.toastrNotify.ajaxCallbackFunc(str);
|
||
|
}
|
||
|
$.toastrNotify.ajaxMessageQueue = [];
|
||
|
}
|
||
|
$.toastrNotify.ajaxCallbackTimer = setInterval(noticeServer, 1000);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
endAjaxCallback:function(){
|
||
|
if($.toastrNotify.ajaxCallbackTimer!=null){
|
||
|
clearInterval($.toastrNotify.ajaxCallbackTimer);
|
||
|
$.toastrNotify.ajaxCallbackTimer = null;
|
||
|
}
|
||
|
},
|
||
|
openTip:function(){
|
||
|
if($.toastrNotify.tipsArrayIndex < $.toastrNotify.maxTipCount){
|
||
|
var popedObj = $.toastrNotify.scheduleQueue.shift();//从最前面拿
|
||
|
$.toastrNotify.scheduleQueueUuid.shift();
|
||
|
if(popedObj){
|
||
|
$.toastrNotify.ajaxMessageQueue.push(popedObj);
|
||
|
$.toastrNotify.startAjaxCallback();//启动通知进程
|
||
|
var type = popedObj[$.toastrNotify.messageFields.type],title = popedObj[$.toastrNotify.messageFields.title],content = popedObj[$.toastrNotify.messageFields.content],isAutomaticClose = popedObj.isAutomaticClose ? popedObj.isAutomaticClose:false;
|
||
|
var sender_name = popedObj[$.toastrNotify.messageFields.sender] ? popedObj[$.toastrNotify.messageFields.sender]:'';
|
||
|
var syscreatedate = popedObj[$.toastrNotify.messageFields.date] ? popedObj[$.toastrNotify.messageFields.date] :'';
|
||
|
/************组装提示框开始***************/
|
||
|
var divobj = $("<div class='tip-item' style='width:"+$.toastrNotify.tipWidth+"px;height:"+$.toastrNotify.tipHeight+"px;display:none;' id='jqthiscurrenttips"+$.toastrNotify.tipItemIndex+"'></div>");
|
||
|
var tableStrArray = [];
|
||
|
tableStrArray.push('<div class="tip-item-title">');
|
||
|
tableStrArray.push(' <div class="tip-icon fa '+$.toastrNotify.tipTypeMapping[type].css+'">');
|
||
|
tableStrArray.push(' </div>');
|
||
|
tableStrArray.push(' <div>');
|
||
|
tableStrArray.push(' <span onclick="$.toastrNotify.closeTipByInterval('+$.toastrNotify.tipItemIndex+');" class="tip-close jqcurrentindextag'+$.toastrNotify.tipItemIndex+'">×</span>');
|
||
|
tableStrArray.push(' <span class="tip-title-main">'+$.toastrNotify.tipTypeMapping[type].name+(title? ':'+title : '')+'</span>');
|
||
|
var extraTitle = type=='1' ? (sender_name ? sender_name+'  '+syscreatedate :syscreatedate) :syscreatedate;
|
||
|
tableStrArray.push(' <span class="tip-title-extra">'+extraTitle+'</span>');
|
||
|
tableStrArray.push(' </div>');
|
||
|
tableStrArray.push(' <div style="clear: both;"></div>');
|
||
|
tableStrArray.push('</div>');
|
||
|
tableStrArray.push('<div class="tip-item-content"');
|
||
|
var uuid = popedObj[$.toastrNotify.messageFields.uuid] ? popedObj[$.toastrNotify.messageFields.uuid] :'';
|
||
|
if(uuid){
|
||
|
tableStrArray.push(' id="'+uuid+'" ');
|
||
|
}
|
||
|
tableStrArray.push('><span>');
|
||
|
tableStrArray.push(' '+content);
|
||
|
tableStrArray.push('</span></div>');
|
||
|
|
||
|
divobj.append(tableStrArray.join(''));
|
||
|
|
||
|
/************组装提示框结束***************/
|
||
|
$.toastrNotify.currentTipsArray[$.toastrNotify.tipsArrayIndex] = divobj;
|
||
|
var ie6 = $.BrowserInfo.IsIE6Under;
|
||
|
var b = $(document.body);
|
||
|
var w = $(window);
|
||
|
var ie6scroll = function(){
|
||
|
divobj.css({ top: getWindowScrollOffset() });
|
||
|
};
|
||
|
$.toastrNotify.resizeTips();
|
||
|
if(ie6) w.scroll(ie6scroll);
|
||
|
//绑定window的resize事件
|
||
|
w.resize($.toastrNotify.resizeTips);
|
||
|
$(divobj).fadeIn(800);
|
||
|
if(isAutomaticClose){
|
||
|
var timeVal = popedObj.automaticCloseTime;
|
||
|
if(!timeVal){
|
||
|
timeVal = $.toastrNotify.intervalTimer;
|
||
|
}
|
||
|
$.toastrNotify.interval[$.toastrNotify.tipItemIndex] = setInterval("$.toastrNotify.closeTipByInterval('"+$.toastrNotify.tipItemIndex+"')",timeVal);
|
||
|
}
|
||
|
$.toastrNotify.tipsArrayIndex ++;
|
||
|
$.toastrNotify.tipItemIndex++;
|
||
|
|
||
|
setTimeout(arguments.callee,10);
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
showTip : function(jparam){//打开消息提示框
|
||
|
/**************组装关闭所有层开始**********************/
|
||
|
if($.toastrNotify.tipToolBar==null){
|
||
|
var sobj =$("<div class='tip-container' style='display:none;'></div>");
|
||
|
|
||
|
var closeAll=$("<div class='tip-title' title='关闭全部'><span style='float:right;'>关闭全部</span></div>");
|
||
|
closeAll.bind("click",function(){
|
||
|
$.toastrNotify.closeAllTip();
|
||
|
});
|
||
|
sobj.append(closeAll);
|
||
|
$.toastrNotify.tipToolBar = sobj;
|
||
|
/**************组装关闭所有层结束**********************/
|
||
|
$("body").append(sobj);
|
||
|
}
|
||
|
//type,title,content,isAutomaticClose
|
||
|
var isNotExist = false;
|
||
|
if($.toastrNotify.messageFields.uuid){
|
||
|
var curUUid = jparam[$.toastrNotify.messageFields.uuid];
|
||
|
if(curUUid){
|
||
|
if($.inArray(curUUid, $.toastrNotify.scheduleQueueUuid) == -1){
|
||
|
if($('#'+curUUid).length == 0){
|
||
|
isNotExist = true;
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
isNotExist = true;
|
||
|
}
|
||
|
}else{
|
||
|
isNotExist = true;
|
||
|
}
|
||
|
if(isNotExist == true){
|
||
|
$.toastrNotify.scheduleQueue.push(jparam);
|
||
|
$.toastrNotify.scheduleQueueUuid.push(curUUid);
|
||
|
}
|
||
|
$.toastrNotify.openTip();//尝试打开
|
||
|
},
|
||
|
//桌面通知
|
||
|
browserNotify : function(title,body){
|
||
|
if (window.Notification) {
|
||
|
//弹出窗体消息
|
||
|
var popNotice = function() {
|
||
|
if (Notification.permission == "granted") {
|
||
|
var notification = new Notification(title,{
|
||
|
body: body,
|
||
|
icon: 'https://www.bugclose.com/oss/20/4a/a9/f2b23c66113f.png'
|
||
|
});
|
||
|
setTimeout(notification.close.bind(notification), 5000);
|
||
|
//点击消息
|
||
|
notification.onclick = function() {
|
||
|
|
||
|
notification.close();
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
//接受消息
|
||
|
if (Notification.permission == "granted") {
|
||
|
popNotice();
|
||
|
} else if (Notification.permission != "denied") {
|
||
|
Notification.requestPermission(function (permission) {
|
||
|
popNotice();
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
isDocumentHidden:function(){
|
||
|
var hidden = false;
|
||
|
if (typeof document.hidden !== "undefined") {
|
||
|
hidden = document.hidden;
|
||
|
} else if (typeof document.mozHidden !== "undefined") {
|
||
|
hidden = document.mozHidden;
|
||
|
} else if (typeof document.msHidden !== "undefined") {
|
||
|
hidden = document.msHidden;
|
||
|
} else if (typeof document.webkitHidden !== "undefined") {
|
||
|
hidden = document.webkitHidden;
|
||
|
}
|
||
|
return hidden;
|
||
|
},
|
||
|
startBlinkTitle:function(title){
|
||
|
$.toastrNotify.stopBlinkTitle();
|
||
|
function blink(){
|
||
|
//网页当前状态判断
|
||
|
//显示消息
|
||
|
document.title = document.title == $.toastrNotify.backupTitle? title: $.toastrNotify.backupTitle;
|
||
|
}
|
||
|
blink();
|
||
|
$.toastrNotify.timer = setInterval(blink, 1000);
|
||
|
},
|
||
|
stopBlinkTitle:function(){
|
||
|
if($.toastrNotify.timer != null){
|
||
|
document.title = $.toastrNotify.backupTitle;
|
||
|
clearInterval($.toastrNotify.timer);
|
||
|
$.toastrNotify.timer = null;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
})(jQuery);
|