파일
ziqim/Yangcai365_design/manage/zinc/js/myMessageBox.js
T
2025-02-20 14:58:55 +08:00

279 라인
12 KiB
JavaScript
Raw Blame 히스토리

이 파일에는 모호한 유니코드 문자가 포함되어 있습니다
이 파일에는 다른 문자와 혼동될 수 있는 유니코드 문자가 포함되어 있습니다. 이것이 의도적인 것이라고 판단되면, 이 경고를 무시해도 됩니다. Escape 버튼을 눌러 보이지 않는 문자를 표시할 수 있습니다.
;!function (e) {
"use strict";
var _ws, n = function () {
this.v = "1.0.0";
this.busiMessageUrl = "http://192.168.3.115:9201/api-busi/messageBusi/readMessage/";
}, _url, _status, _lock = false, _id, _message = new Array(), _nowMessage;
var _onopen = function (event) {
_status = "open";
console.log("连接成功");
}, _onerror = function (event) {
_status = "error";
console.log("连接出错");
}, _onmessage = function (event) {
var obj = eval("(" + event.data + ")");
if(obj !=undefined && obj !=null){
if(obj[0].code == 1){
// 第一次历史消息查询失败的情况
return;
}if(obj[0].code == 0){
// 第一次历史消息查询成功的情况
if(obj[0].data.size == 1){
_message.push(obj[0].data.messageBusi);
_showMessage();
}else if(obj[0].data.size > 1){
// 提醒未读消息条数
_showHistoryMessage(obj[0].data.size);
}
return;
}
// 实时消息
for (var i = 0; i < obj.length; i++) {
_message.push(obj[i]);
}
if (_message.length > 0) {
_showMessage();
}
}
console.log("收到消息:" + event.data);
}, _onclose = function (event) {
_status = "close";
console.log("关闭连接");
}, _reconnection = function () {
if (!'WebSocket' in window) {
console.error("浏览器不支持推送消息");
return;
}
_ws = new WebSocket(_url,"message_box");
_ws.onopen = _onopen;
_ws.onerror = _onerror;
_ws.onmessage = _onmessage;
_ws.onclose = _onclose;
}, _closeHear = function () {
if (_id) {
clearInterval(_id);
}
}, _heartCheck = function () {
if (_lock) {
return;
}
_lock = true;
_closeHear();
_id = setInterval(function () {
if (_url && _status && _status == "close") {
console.log("尝试重连")
_reconnection();
} else if (_url && _status && _status == "open") {
console.log("心跳检测");
// _ws.send(new ArrayBuffer(4));
_ws.send("ping");
}
_lock = false;
}, 1000 * 60);
}, _readMsg = function () {
try {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
//当状态变化时处理的事情
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
//5.接收响应信息
var data = eval("(" + xmlHttp.responseText + ")");
if (data.code == 0) {
document.getElementById("messageDiv").remove();
_showMessage();
} else {
// 失败后添加至头部
_message.unshift(_nowMessage);
document.getElementById("messageDiv").remove();
_showMessage();
}
}
}
xmlHttp.open("POST", myWebSocket.busiMessageUrl + _nowMessage.id, false);
//4.发送请求
xmlHttp.send();
} catch (e) {
// 失败后添加至头部
_message.unshift(_nowMessage);
document.getElementById("messageDiv").remove();
_showMessage();
}
}, _readHistoryMsg = function () {
document.getElementById("messageDiv").remove();
}, _showHistoryMsg = function () {
document.getElementById("messageDiv").remove();
document.getElementsByClassName("myMessageBox")[0].click();
},_doCopyOrderIdInfo = function (orderId){
//复制订单号id
var inputEle = document.createElement("input");
document.designMode = "on";
inputEle.value = orderId;
document.body.appendChild(inputEle);
inputEle.select();
document.execCommand('copy');
inputEle.blur();
inputEle.style.display = 'none';
document.body.removeChild(inputEle);
document.designMode = "off";
_readMsg();
}, _showMessage = function () {
setTimeout(function () {
if (document.getElementById("messageDiv") != null || _message.length == 0) {
return;
}
_nowMessage = _message.shift();
var property = null;
if(_nowMessage.property !=undefined){
property = JSON.parse(_nowMessage.property);
}
var messageBody = _nowMessage.messageBody;
var orderId = _nowMessage.orderId;
var dateStr = _formatDate(new Date(parseInt(_nowMessage.sendTime)));
var htmls = `
<div id="messageDiv" style="width: 500px;border: 1px solid #cecdcd;background-color: #f2f2f2;color: #fff;position: fixed;right: 15px;bottom: 0px;border-radius: 10px;z-index: 999999;">
<div style="width: 500px;height: 55px;text-align: center;font-size: 24px;line-height: 50px;border-radius: 5px 5px 0 0;background-color:red;margin-left: -1px;">
消息提醒
</div>
<div style="border: 1px solid #000;border-radius: 11px;margin: 10px;text-align: center;background-color: #fff;color: #000;font-size: 20px;padding:20px;">
${messageBody}
</div>
<div style="display: flex;justify-content: center;">
<span style="color: black;font-size: 16px;margin: 15px;float: left;">提醒发送人:<span>${_nowMessage.producerOperateName ? _nowMessage.producerOperateName : "系统"}</span></span>
<span style="color: black;font-size: 16px;margin: 15px;float: right;margin-left: 40px;">消息时间:${dateStr}</span>
</div>
<div style="display: flex;justify-content: center;">
<div onclick="myWebSocket.readHistoryMsg()" style="width: 120px;height: 40px;border-radius: 5px;background-color:#009966;text-align: center;line-height: 40px;color: #fff;float: left;margin: 10px;cursor:pointer;">知道了</div>
<div onclick="myWebSocket.doCopyOrderIdInfo(${orderId});" style="width: 120px;height: 40px;border-radius: 5px;background-color:#199ed8;text-align: center;line-height: 40px;color: #fff;float: right;margin: 10px;cursor:pointer;margin-left:50px;">点击复制单号</div>
</div>
</div>`;
document.body.insertAdjacentHTML("beforeend", htmls);
}, 2000)
}, _showHistoryMessage = function (size) {
var dateStr = _formatDate(new Date());
var htmls = `
<div id="messageDiv" style="width: 500px;border: 1px solid #cecdcd;background-color: #f2f2f2;color: #fff;position: fixed;right: 15px;bottom: 0px;border-radius: 10px;z-index: 999999;">
<div style="width: 500px;height: 55px;text-align: center;font-size: 24px;line-height: 50px;border-radius: 5px 5px 0 0;background-color:red;margin-left: -1px;">
消息提醒
</div>
<div style="border: 1px solid #000;border-radius: 11px;margin: 10px;text-align: center;background-color: #fff;color: #000;font-size: 20px;padding:20px;">
您有${size}条消息未读
</div>
<div style="display: flex;justify-content: center;">
<span style="color: black;font-size: 16px;margin: 15px;float: left;">提醒发送人:<span>系统</span></span>
<span style="color: black;font-size: 16px;margin: 15px;float: right;margin-left: 40px;">消息时间:${dateStr}</span>
</div>
<div style="display: flex;justify-content: center;">
<div onclick="myWebSocket.readHistoryMsg()" style="width: 120px;height: 40px;border-radius: 5px;background-color:#009966;text-align: center;line-height: 40px;color: #fff;float: left;margin: 10px;cursor:pointer;">知道了</div>
<div onclick="myWebSocket.showHistoryMsg();" style="width: 120px;height: 40px;border-radius: 5px;background-color:#169BD5;text-align: center;line-height: 40px;color: #fff;float: right;margin: 10px;cursor:pointer;margin-left:50px;">查看消息</div>
</div>
</div>`;
document.body.insertAdjacentHTML("beforeend", htmls);
}, _utf8ByteToUnicodeStr = function (utf8Bytes) {
var unicodeStr = "";
for (var pos = 0; pos < utf8Bytes.length;) {
var flag = utf8Bytes[pos];
var unicode = 0;
if ((flag >>> 7) === 0) {
unicodeStr += String.fromCharCode(utf8Bytes[pos]);
pos += 1;
} else if ((flag & 0xFC) === 0xFC) {
unicode = (utf8Bytes[pos] & 0x3) << 30;
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 24;
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 18;
unicode |= (utf8Bytes[pos + 3] & 0x3F) << 12;
unicode |= (utf8Bytes[pos + 4] & 0x3F) << 6;
unicode |= (utf8Bytes[pos + 5] & 0x3F);
unicodeStr += String.fromCharCode(unicode);
pos += 6;
} else if ((flag & 0xF8) === 0xF8) {
unicode = (utf8Bytes[pos] & 0x7) << 24;
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 18;
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 12;
unicode |= (utf8Bytes[pos + 3] & 0x3F) << 6;
unicode |= (utf8Bytes[pos + 4] & 0x3F);
unicodeStr += String.fromCharCode(unicode);
pos += 5;
} else if ((flag & 0xF0) === 0xF0) {
unicode = (utf8Bytes[pos] & 0xF) << 18;
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 12;
unicode |= (utf8Bytes[pos + 2] & 0x3F) << 6;
unicode |= (utf8Bytes[pos + 3] & 0x3F);
unicodeStr += String.fromCharCode(unicode);
pos += 4;
} else if ((flag & 0xE0) === 0xE0) {
unicode = (utf8Bytes[pos] & 0x1F) << 12;
;
unicode |= (utf8Bytes[pos + 1] & 0x3F) << 6;
unicode |= (utf8Bytes[pos + 2] & 0x3F);
unicodeStr += String.fromCharCode(unicode);
pos += 3;
} else if ((flag & 0xC0) === 0xC0) { //110
unicode = (utf8Bytes[pos] & 0x3F) << 6;
unicode |= (utf8Bytes[pos + 1] & 0x3F);
unicodeStr += String.fromCharCode(unicode);
pos += 2;
} else {
unicodeStr += String.fromCharCode(utf8Bytes[pos]);
pos += 1;
}
}
return unicodeStr;
}, _formatDate = function (now) {
var year = now.getFullYear(); //取得4位数的年份
var month = now.getMonth() + 1; //取得日期中的月份,其中0表示1月,11表示12月
var date = now.getDate(); //返回日期月份中的天数(1到31
var hour = now.getHours(); //返回日期中的小时数(0到23
var minute = now.getMinutes(); //返回日期中的分钟数(0到59
var second = now.getSeconds(); //返回日期中的秒数(0到59
if (month < 10) {
month = "0" + month;
}
if (date < 10) {
date = "0" + date;
}
if (hour < 10) {
hour = "0" + hour;
}
if (minute < 10) {
minute = "0" + minute;
}
if (second < 10) {
second = "0" + second;
}
return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
};
n.prototype.init = function (url) {
if (!'WebSocket' in window) {
console.error("浏览器不支持推送消息");
return;
}
_url = url;
_ws = new WebSocket(_url,"message_box");
_ws.onopen = _onopen;
_ws.onerror = _onerror;
_ws.onmessage = _onmessage;
_ws.onclose = _onclose;
window.onbeforeunload = function (event) {
_ws.close();
};
_heartCheck();
}, n.prototype.close = function () {
_closeHear();
if(_ws){
_ws.close();
}
}, n.prototype.reconnection = _reconnection, n.prototype.readMsg = _readMsg, n.prototype.doCopyOrderIdInfo = _doCopyOrderIdInfo, n.prototype.readHistoryMsg = _readHistoryMsg,n.prototype.showHistoryMsg = _showHistoryMsg;
e.myWebSocket = new n;
}(window);