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.
zhishifufei_php/public/pc/scripts/customerServer.js

515 lines
40 KiB

9 months ago
// 图片
var base64ImageObject = {
// 手机端客服图片
mobileIcon: 'data:image/png;base64,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
// pc端客服图片
pcIcon: 'data:image/png;base64,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
// 关闭客服服务,向下按钮
putItAway: 'data:image/png;base64,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'
}
const settingObj = {};
//悬浮按钮样式
function customerServerStyle() {
//PC端悬浮按钮样式
this.customerServer_container = {
position: 'fixed',
bottom: '10px',
right: '2px',
// background: 'linear-gradient(270deg, #1890FF 0%, #3875EA 100%)',
// color: '#fff',
// 'border-radius': '4px',
// width: '230px',
// padding: '8px 10px',
'box-sizing': 'border-box',
cursor: 'pointer',
'z-index': 99
};
this.connect_customerServer = {
display: 'flex',
'align-items': 'center',
'justify-content': 'space-between',
};
this.connect_customerServer_img = {
width: '100%',
};
//移动端悬浮按钮样式
this.customerServer_container_mobile = {
position: 'fixed',
right: 0,
top: '500px',
margin: 'auto',
width: '40px',
height: '40px',
background: 'linear-gradient(270deg, #1890FF 0%, #3875EA 100%)',
'border-radius': '50%',
'z-index': 998
};
this.customerServer_container_mobile_image = {
width: '100%',
height: 'auto',
};
//未读消息演示
this.connent_count = {
position: 'absolute',
top: '-12px',
right: 0,
background: 'red',
width: '25px',
height: '25px',
'border-radius': '50%',
display: 'flex',
'align-items': 'center',
'justify-content': 'center',
'font-size': '12px',
opacity: '.9'
};
//iframe样式
this.iframe_content = {
position: 'fixed',
'z-index': 999,
right: 0,
'border-radius': '4px',
transition: '.3s',
}
}
const customerServerStyleObject = new customerServerStyle();
//初始化函数
function initCustomerServer(option) {
this.outLine = false; // 是否在离线界面
this.settingObj = settingObj;
this.settingObj.openUrl = `${option.openUrl || location.origin}/chat/index`; //服务器地址加路由, 若不传入则自动获取引入应用所在服务器的域名
this.settingObj.domId = option.customerServerTip || 'customerServerTip'; //浮动客服dom
this.settingObj.insertDomNode = option.insertDomNode || 'body' // 插入的标签
this.settingObj.token = option.token; // token为必填项
this.settingObj.pcIcon = option.pcIcon || base64ImageObject.pcIcon; // pcIcon 电脑端客服图片
this.settingObj.mobileIcon = option.mobileIcon || base64ImageObject.mobileIcon; // mobile 手机端客服图片
this.settingObj.deviceType = option.deviceType || ''; // Mobile 手机端打开
this.settingObj.isShowTip = option.isShowTip; // false隐藏 true 展示 客服悬浮按钮默认展示
this.settingObj.windowStyle = option.windowStyle || ''; // pc 端打开默认最精简模式,center居中模式
this.settingObj.kefuid = option.kefuid || 0; // 指定客服,默认随机
this.settingObj.sendUserData = option.sendUserData || {}; // 用户信息,默认游客
this.settingObj.productInfo = option.productInfo || {}; // 携带产品信息,默认空
this.appDom = null;
this.initStatus = false;//是否初始化过
// 判断当前环境下的设备是pc端 || 移动端, 将客户信息挂载到iframe的链接上
this.setMatchMedia = () => {
if (!this.settingObj.deviceType) {
const matchMedia = window.matchMedia;
// 自动判断启动端 pc 或是 移动
if (matchMedia('(max-width: 600px)').matches) {
this.settingObj.deviceType = 'Mobile';
} else if (matchMedia('(max-width: 992px)').matches) {
this.settingObj.deviceType = 'pc';
} else {
this.settingObj.deviceType = 'pc';
}
;
}
// console.log(this.settingObj.deviceType);
// 获取客服客户相关参数
let params = {
token: this.settingObj.token,
deviceType: this.settingObj.deviceType,
windowStyle: this.settingObj.windowStyle,
isShowTip: this.settingObj.isShowTip,
kefuid: this.settingObj.kefuid
};
this.settingObj.openUrl += `?` + toParams(params) + `&`;
let customerServerData = '';
if (this.settingObj.sendUserData && Object.keys(this.settingObj.sendUserData).length) {
customerServerData = toParams(this.settingObj.sendUserData);
this.settingObj.openUrl += `${customerServerData}&`;
}
}
// 创建 联系客服小弹窗按钮(点击时打开聊天界面),创建iframe容器 并将iframe添加至body中
this.createCustomerServerContainer = () => {
let iframeHtml = `<iframe src="${this.settingObj.openUrl}" frameborder="0" class="iframe_contanier" style="width:100%; height:100%;"></iframe>`;
var app = document.createElement('div');
this.appDom = app;
app.setAttribute('id', 'app');
if (this.settingObj.deviceType == 'Mobile') {
// 联系客服按钮dom结构 移动端悬浮按钮样式
let kefuMobilehtml = `
<div class="customerServer_container_mobile" id="${this.settingObj.domId}">
<img class="customerServer_container_mobile_image" src="${this.settingObj.mobileIcon}"></img>
<div class="connent_count"></div>
</div>
`;
app.innerHTML = kefuMobilehtml;
this.body = document.querySelector(this.settingObj.insertDomNode);
this.body.appendChild(app);
var fwuss = document.querySelector('.customerServer_container_mobile');
var maxW = document.body.clientWidth - 50;
var maxH = document.body.clientHeight - 50;
var oL, oT;
fwuss.addEventListener('touchstart', (e) => {
var ev = e || window.event;
var touch = ev.targetTouches[0];
oL = touch.clientX - fwuss.offsetLeft;
oT = touch.clientY - fwuss.offsetTop;
document.addEventListener("touchmove", defaultEvent, false);
})
fwuss.addEventListener('touchmove', (e) => {
var ev = e || window.event;
var touch = ev.targetTouches[0];
var oLeft = touch.clientX - oL;
var oTop = touch.clientY - oT;
if (oLeft < 0) {
oLeft = 0;
} else if (oLeft >= maxW) {
oLeft = maxW;
}
if (oTop < 0) {
oTop = 0;
} else if (oTop >= maxH) {
oTop = maxH;
}
fwuss.style.left = oLeft + 'px';
fwuss.style.top = oTop + 'px';
});
fwuss.addEventListener('touchend', function () {
document.removeEventListener("touchmove", defaultEvent);
});
function defaultEvent(e) {
e.preventDefault();
}
} else {
//电脑端悬浮按钮样式
let kefuhtml = `
<div class="customerServer_container" id="${this.settingObj.domId}">
<div class="connect_customerServer">
<img class="connect_customerServer_img" src="${this.settingObj.pcIcon}"></img>
</div>
<div class="connent_count"></div>
</div>
`;
app.innerHTML = kefuhtml;
this.body = document.querySelector(this.settingObj.insertDomNode);
this.body.appendChild(app);
}
// 创建完毕后,添加样式,样式可以从外部传入
this.iframeLayout = document.createElement('div');
this.iframeLayout.setAttribute('id', 'iframe_content');
this.setStyleOfCustomerServer(this.iframeLayout, customerServerStyleObject.iframe_content);
this.iframeLayout.style['z-index'] = 999;
this.iframeLayout.innerHTML = iframeHtml;
this.body.appendChild(this.iframeLayout);
// 获取联系客服按钮dom对象
this.connentServerDom = document.querySelector(`#${this.settingObj.domId}`);
// 判断联系客服按钮是否默认展示
if (this.settingObj.isShowTip === false) {
this.connentServerDom.style.display = 'none';
}
// 获取 iframe 弹框dom对象,便于后期数据交互
this.iframe_contanier = document.querySelector('.iframe_contanier');
}
// 设置基本样式样式
this.batchSetStyle = () => {
Object.keys(customerServerStyleObject).forEach(item => {
if (document.querySelector(`.${item}`)) {
this.setStyleOfCustomerServer(document.querySelector(`.${item}`), customerServerStyleObject[item]);
}
})
}
// 设置初始化样式,包括iframe弹宽初始定位,未读消息等
this.initPositionStyle = () => {
//移动端初始化样式
let mobileInitStyle = {
width: '100%',
height: '100%',
top: '100%',
left: 0
}
// pc端初始化样式
let pcInitStyle = {
width: '377px',
bottom: '-645px',
height: '645px',
'z-index': 999,
'box-shadow': '1px 1px 15px 0px rgba(0, 0, 0, 0.3)'
}
// 判断设备的类型,是移动端或是pc端
if (this.settingObj.deviceType == 'Mobile') {
this.setStyleOfCustomerServer(this.iframeLayout, mobileInitStyle);
} else {
this.setStyleOfCustomerServer(this.iframeLayout, pcInitStyle);
}
// 用来展示未读消息数的小圆点
this.connent_count = document.querySelector('.connent_count');
this.connent_count.style.display = 'none';
}
//加载聊天框
this.loadwindow = () => {
// 接收来自iframe中的参数
window.addEventListener("message", e => {
// 关闭弹框
if (e.data.type == 'closeWindow') {
if (this.settingObj.deviceType == 'Mobile') {
this.iframeLayout.style.top = '100%';
} else if (this.settingObj.windowStyle == 'center') {
this.setStyleOfCustomerServer(this.iframeLayout, {
display: 'none'
});
} else {
this.iframeLayout.style.bottom = '-645px';
this.iframeLayout.style.opacity = '0';
}
if (this.settingObj.isShowTip !== false) {
this.connentServerDom.style.display = 'block';
}
}
// 收取未读消息
if (e.data.type == 'message_num') {
if (e.data.num > 0) {
this.connent_count.style.display = 'flex';
this.connent_count.innerHTML = e.data.num;
} else {
this.connent_count.style.display = 'none';
}
}
// 跳转到离线留言界面
if (e.data.type == 'customerOutLine') {
this.outLine = true;
this.setStyleOfCustomerServer(this.iframeLayout, {
width: this.outLine ? '378px' : '730px',
})
}
// 监听,跳转回中间页,重置outline(来自反馈成功界面)
if (e.data.type == 'reload') {
this.outLine = false;
}
});
};
// 打开客服聊天框
this.getCustomeServer = () => {
//检测是否初始化过
if(this.initStatus === false){
this.init();
}
if (this.settingObj.deviceType == 'Mobile') {
this.iframeLayout.style.top = '0';
} else if (this.settingObj.windowStyle == 'center') {
this.setStyleOfCustomerServer(this.iframeLayout, {
top: 0,
left: 0,
bottom: 0,
right: 0,
margin: 'auto',
width: this.outLine ? '378px' : '730px',
display: 'block',
transition: 'none',
'border-radius': '8px',
overflow: 'hidden',
'box-shadow': '1px 1px 15px 0px rgba(0, 0, 0, 0.3)'
});
} else {
this.iframeLayout.style.bottom = 0;
this.iframeLayout.style.opacity = '1';
}
//悬浮按钮隐藏
this.connentServerDom.style.display = 'none';
this.iframe_contanier.contentWindow.postMessage({
type: 'getImgOrText',
productInfo: this.settingObj.productInfo
}, "*"); // 传送图文数据
this.iframe_contanier.contentWindow.postMessage({type: 'openCustomeServer'}, "*"); //通知iframe 打开了客服弹框
}
// 更新传送的图文信息
this.postProductMessage = (productInfo) => {
this.iframe_contanier.contentWindow.postMessage({type: 'getImgOrText', productInfo: productInfo}, "*"); // 传送图文数据
}
}
initCustomerServer.prototype.destroy = function(){
this.appDom.remove()
this.iframeLayout.remove();
this.initStatus = false;
}
//初始化
initCustomerServer.prototype.init = function () {
this.setMatchMedia();
this.createCustomerServerContainer();
this.batchSetStyle();
this.initPositionStyle();
this.loadwindow();
this.initStatus = true;
this.connentServerDom.removeEventListener('click',this.getCustomeServer);
// 联系客服小按钮,点击事件
this.connentServerDom.addEventListener('click', this.getCustomeServer)
};
//封装全局设置样式方法
initCustomerServer.prototype.setStyleOfCustomerServer = function (dom, styleObj) {
Object.keys(styleObj).forEach(item => {
dom['style'][item] = styleObj[item]
})
};
//封装全局获取openUle方法
initCustomerServer.prototype.getOpenUrl = function () {
return this.settingObj.openUrl;
}
//vue 开发调试专用,vue开发请去掉下一行注释
// export default initCustomerServer;
// let useCustomerServer = new initCustomerServer(option);
// useCustomerServer.init();
// 生成指定范围内的随机数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function ajax(options) {
var xhr = null;
var params = options.data;
//创建对象
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest()
} else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
switch (options.type) {
case 'GET':
xhr.open(options.type, options.url + "?" + params, options.async);
xhr.send(null);
break;
case 'POST':
xhr.open(options.type, options.url, options.async);
xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
xhr.setRequestHeader("Authori-zation", `Bearer ${token}`);
xhr.send(JSON.stringify(params));
break;
default:
break;
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
options.success(xhr.responseText);
}
}
}
// 将Object 改装成以 & 符号连接的字符串
function toParams(param) {
var result = ""
for (let name in param) {
if (typeof param[name] != 'function') {
result += "&" + name + "=" + encodeURI(param[name]);
}
}
return result.substring(1)
}
//set session
function setSen(k, val) {
if (typeof val == 'string') {
sessionStorage.setItem(k, val);
return val;
}
sessionStorage.setItem(k, JSON.stringify(val));
return val;
}
//get session
function getSen(k) {
let uu = sessionStorage.getItem(k);
try {
if (typeof JSON.parse(uu) != 'number') {
uu = JSON.parse(uu);
}
} catch (e) {
}
return uu;
}
//set local
function setLoc(k, val) {
if (typeof val == 'string') {
localStorage.setItem(k, val);
return val;
}
localStorage.setItem(k, JSON.stringify(val));
return val;
}
//get local
function getLoc(k) {
let uu = localStorage.getItem(k);
try {
if (typeof JSON.parse(uu) != 'number') {
uu = JSON.parse(uu);
}
} catch (e) {
}
return uu;
}
//序列化对象和数组
function serialize(data) {
if (data != null && data != '') {
try {
return JSON.parse(JSON.stringify(data));
} catch (e) {
if (data instanceof Array) {
return [];
}
return {};
}
}
return data;
}