')
function appendLink(pDom, item) {
var cell = $('
' + item.name + '
')
pDom.append(cell)
bindCellClick(cell, item.url)
}
for (var index in list) {
var item = list[index]
var menu = item.menu
var name = item.name
if (menu) {
var groupHtml = $(`
`);
testHomePanel.find('.first-menu').append(groupHtml)
for (var index2 in menu) {
var item2 = menu[index2]
appendLink(groupHtml.find('.second-menu'), item2)
}
} else {
appendLink(testHomePanel.find('.first-menu'), item)
}
}
$('body').append(testHomePanel)
$('#testHomePanel').on('click', function (evt) {
if ($(evt.target).closest('.edit-content').length === 0) {
$('#testHomePanel').hide();
}
});
$('#testHomePort').on('change', function (evt) {
localStorage.setItem('testHomePort', this.checked ? '8080' : '')
});
}
function showPanel() {
var testHomePanel = $('#testHomePanel')
if (testHomePanel.length === 0) {
initPanel()
}
testHomePanel.show();
}
var testHomeBtn = $('');
$("body").prepend(testHomeBtn);
$('#testHomeBtn').on('touchmove', function (e) {
// 阻止其他事件
e.preventDefault();
// 判断手指数量
if (e.originalEvent.targetTouches.length === 1) {
var maxW = $(window).width()
var maxH = $(window).height()
// 将元素放在滑动位置
var touch = e.originalEvent.targetTouches[0];
var x = touch.clientX > 0 ? touch.clientX : 0
var y = touch.clientY > 0 ? touch.clientY : 0
x = x > maxW ? maxW : x
y = y > maxH ? maxH : y
setCss(x, y)
localStorage.setItem('testHomeBtn_x', x)
localStorage.setItem('testHomeBtn_y', y)
}
}).on('touchend', function (e) {
fadeNode()
}).on('touchstart', function (e) {
showNode()
}).on('click', function (e) {
showPanel()
});
fadeNode()
setCss(localStorage.getItem('testHomeBtn_x'), localStorage.getItem('testHomeBtn_y'))
}
});
//Cookie常量
var Cookie_Constant = {
//用户头像,或是代理商定义的logo作为用户头像
userHeadImg: "userHeadImg",
agentLogoUrl: "agentLogoUrl",
agentBrandName: "agentBrandName",
};
//初始化设置所有页面的LOGO
$(function () {
var dom = $('');
dom.attr("href", getCookie(Cookie_Constant.agentLogoUrl) || "/favicon.ico");
$("html head").append(dom);
var titleDom = $("title");
if (titleDom.hasClass("readonly")) {
return;
}
var oldTitle = titleDom.text();
var name = getCookie(Cookie_Constant.agentBrandName) || "";
var title = name + (name && oldTitle ? "-" : "") + oldTitle;
titleDom.text(title);
});
function getCookie(c_name) {
if ($.cookie) {
return $.cookie(c_name);
} else {
return null
}
}
function setCookie(c_name, value, option) {
if ($.cookie) {
$.cookie(c_name, value, option);
}
}
function clearCookie(name) {
$.cookie(name, null);
}
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return decodeURI(r[2]);
return null;
}
function getQueryStringByUrl(url, name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
url = url.substring(url.indexOf('?') || 0, url.length)
var r = url.substr(1).match(reg);
if (r != null)
return decodeURI(r[2]);
return null;
}
// exp 单位是毫秒
function setLocalStorage(key, value, exp) {
var curTime = new Date().getTime();
exp = exp || (1000 * 3600 * 24 * 30);//默认30天
localStorage.setItem(key, JSON.stringify({data: value, expTime: curTime + exp}));
}
function getLocalStorage(key) {
var curTime = new Date().getTime();
var data = localStorage.getItem(key);
if (data) {
var dataObj = JSON.parse(data);
if (curTime > dataObj.expTime) {
// 信息过期
return null;
} else {
var dataObjDatatoJson = dataObj.data;
return dataObjDatatoJson;
}
}
}
// exp 单位是毫秒
function setSessionStorage(key, value, exp) {
var curTime = new Date().getTime();
exp = exp || (1000 * 3600 * 24 * 30);//默认30天
sessionStorage.setItem(key, JSON.stringify({data: value, expTime: curTime + exp}));
}
function getSessionStorage(key) {
var curTime = new Date().getTime();
var data = sessionStorage.getItem(key);
if (data) {
var dataObj = JSON.parse(data);
if (curTime > dataObj.expTime) {
// 信息过期
return null;
} else {
var dataObjDatatoJson = dataObj.data;
return dataObjDatatoJson;
}
}
}
//展示通知消息
function showNotification(id, text) {
if (localStorage.Notification != id) {
var html = $('
');
$("body").prepend(html);
html.find(".notification-text").text(text);
html.click(function () {
var that = this;
msgPopup('温馨提示', text, "确定", function (e) {
localStorage.Notification = id;
$(that).remove();
});
});
}
}
//测试系统提示,避免让用户产生误解
function showTestInfo() {
if (isTest()) {
var html = $('
当前为测试系统,所有数据都是模拟数据!!!
');
$("body").prepend(html);
html.click(function () {
var that = this;
msgPopup('温馨提示', "当前为测试系统!您可以通过公众号【微付乐管理后台】登录正式系统,谢谢。", "确定", function (e) {
$(that).remove();
});
});
setTimeout(function () {
html.fadeOut(2000);
}, 1000);
}
}
function get_token_session_key(auth_domain) {
return auth_domain + "_session_id";
}
function get_token_headers(auth_domain) {
var token = localStorage.getItem(get_token_session_key(auth_domain)) || "";
return {
'jwt-auth-domain': auth_domain,
'jwt-token': token
};
}
//原ajax封装
function myAjax(option) {
//测试用模拟数据,本地局域网调试
if (isTest(true)) {
option.url = "/mock" + option.url;
} else {
option.url = "" + option.url;
}
var type = option.type;
var data = option.data;
var maskText = option.mask;
if (!option.dataType) {
option.dataType = 'json';//后台服务器返回数据类型,全为json
}
//默认超时时间设置
if (!option.timeout) {
option.timeout = 60000;//设置超时时间45秒,后台设备通讯的超时时间保持一致
}
var mask = null;
//利用mask防止post操作重复执行
//如果mask特意配置成false,则不展示
if (maskText != false) {
if ((type && type.toUpperCase() == "POST") || maskText != null) {
//mask倒计时,超时时间为准
var timeout = Math.round(option.timeout / 1000);
mask = initMaskInterval(timeout, option.maskDelay, option.maskContainer, maskText);
}
}
//get请求加参数,避免缓存
if (type.toUpperCase() == "GET") {
if (data == null) {
option.data = data = {};
}
if (typeof data !== "object") {
console.warn('不推荐的参数格式', data)
}
if (data.random === null && option.url.indexOf("random=") == -1) {
data.random = Math.random() * 1000;
}
}
//数据内容适配,
var successHand = option.success;
var errorHand = option.error;
var completeHand = option.complete;
if (successHand) {
option.success = function (response) {
//后台可能传data、para、payload,三者兼容
if (response) {
if (response.payload) {
response.para = response.payload;
response.data = response.payload;
}
}
successHand(response);
}
}
if (errorHand) {
option.error = function (response) {
//后台可能传data、para、payload,三者兼容
if (response) {
if (response.payload) {
response.para = response.payload;
response.data = response.payload;
}
}
errorHand(response);
}
}
option.complete = function (response) {
//后台可能传data、para、payload,三者兼容
if (response) {
if (response.payload) {
response.para = response.payload;
response.data = response.payload;
}
}
//清除mask
if (mask) {
mask.remove();
mask = null;
}
if (completeHand) {
completeHand(response);
}
};
$.ajax(option);
}
function initMaskInterval(timeout, maskDelay, maskContainer, msg) {
if (msg == null) {
msg = "";
}
var mask = new Mask({text: msg, container: maskContainer});
mask.show();
var maskInter = setInterval(function () {
timeout = timeout - 1;
var newMsg = msg + " " + timeout;
if (!mask.dom) {
clearInterval(maskInter);
maskInter = null;
return;
}
if (timeout > 0) {
mask.text(newMsg);
} else {
mask.text("
" +
"
o(╥﹏╥)o 出了点小问题,点此处关闭......
" +
"
");
mask.dark();
mask.dom.find(".mask-callback").click(function () {
mask.remove();
mask = null;
});
clearInterval(maskInter);
maskInter = null;
}
}, maskDelay || 1000);
return mask;
}
//jQuery请求公共方法
function sendRequest(url, type, data, success, contentType, async, complete) {
//可能直接传递option
var optionIn = {};
var mask = null;
var maskContainer = null;
var maskDelay = null;
var headers = null;
if ($.isPlainObject(url)) {
optionIn = url;
url = optionIn.url;
type = optionIn.type;
data = optionIn.data;
headers = optionIn.headers;
success = optionIn.success;
contentType = optionIn.contentType;
async = optionIn.async;
complete = optionIn.complete
mask = optionIn.mask;
maskContainer = optionIn.maskContainer;
maskDelay = optionIn.maskDelay;
}
var options = {
url: url,
type: type,
mask: mask,
headers: headers,
maskDelay: maskDelay,
maskContainer: maskContainer,
success: function (result) {
if (success) {
success(result);
}
},
dataType: 'json',//服务器返回数据类型
timeout: optionIn.timeout || 60000,
error: function (xhr) {
if (xhr.status == 401) {
window.mui && mui.toast('登录超时,即将跳转到登录页面...');
setTimeout(function () {
var url = 'login.html';
goPage(url);
}, 1500)
} else {
if (optionIn.error) {
optionIn.error(xhr)
} else {
var title = "温馨提示";
var msg = '获取数据失败,请检查网络';
var btnword = '我知道了';
msgPopup(title, msg, btnword);
}
}
},
complete: function (result) {
if (complete) {
complete(result);//目前主要用于$("#progress").hide();
}
}
};
if (data) {
if ((type.toUpperCase() == 'PUT' || type.toUpperCase() == 'POST') && contentType == "json" && $.isPlainObject(data)) {
options.data = JSON.stringify(data);
options.contentType = 'application/json';//发送给后台的数据类型
} else {
options.data = data;
}
}
if (typeof async != 'undefined') {
options.async = async;
}
myAjax(options);
}
//带版本号的页面调整
function goPage(url, para) {
if (!url || url.indexOf("#") == 0 || url.indexOf("javascript:") > -1 || url.indexOf("tel:") > -1) {
return;
}
url = getVersionUrl(url, para);
location.href = url;
}
//获得APP版本号
function getAppVersion() {
var today = new Date();
var v = "" + today.getFullYear() + (today.getMonth() + 1) + today.getDay();//默认天为版本号
if (window.APP_VERSION) {
v = window.APP_VERSION;
}
return v;
}
//获取带版本号的url
function getVersionUrl(url, para) {
function addParam(_url, _para) {
for (var key in _para) {
var con = "?";
if (_url.indexOf("?") > 0) {
con = "&";
}
var value = _para[key];
_url = _url + con + key + "=" + encodeURIComponent(value);
}
return _url
}
// 如果含有vue的跳转页面,版本号需要加到html后
var maodian = url.indexOf('#')
var mainUrl = url
var maoUrl = ''
var version = ''
//判断参数是否有自定义的v字段,有的话不加版本
if (para && para.v != null) {
//nothing
} else {
//判断url中是否有v字段,没有v字段则加上版本号
if (url && url.indexOf("?v=") == -1 && url.indexOf("&v=") == -1) {
version = getAppVersion();
}
}
// 如果是vue页面
if (maodian > -1) {
// 拆分路径,一个是html主路径,一个是路由路径
mainUrl = url.substring(0, maodian);
maoUrl = url.substring(maodian);
//增加一个版本号
var urlHead = addParam(mainUrl, {v: version})
//增加路由参数
var urlSub = addParam(maoUrl, para)
return urlHead + urlSub
} else {
return addParam(mainUrl, $.extend({v: version}, para))
}
}
//不产生历史记录的方式跳转,改善返回操作的体验,某些二级页面中包含子模块不需要产生历史记录
function replacePage(url, para) {
history.replaceState(null, null, window.getVersionUrl(url, para));
location.reload();
}
//a标签的html跳转加版本号
$(function () {
//不用mui绑定tap和click事件,mui绑定后各种BUG
$('body').on('tap', 'a[href*=".html"]', function (event) {
console.log("%c jquery tap a", "color:#1ad618;font-weight:bold;");
var href = this.getAttribute("href");
//如果不为空、不是锚点、不是tel和javascript,阻止浏览器的默认跳转,进行自定义跳转
if (href != "") {
event.preventDefault();
goPage(href);
} else {
return true;
}
});
});
function uplog(data) {
return
}
window.onerror = function (errorMessage, scriptURI, lineNumber, columnNumber, errorObj) {
var info = "【错误信息】:" + errorMessage +
" 【出错文件】:" + scriptURI +
" 【出错行号】:" + lineNumber +
" 【出错列号】:" + columnNumber +
" 【错误详情】:" + (errorObj ? errorObj.toString() : "");
uplog && uplog({level: "error", short_message: "js错误", full_message: info});
}
//loading
function showLoading(text) {
var mask = new Mask(text);
mask.show();
}
//隐藏“加载中”
function hideLoading() {
$(".load-mask").remove();
}
//文本过长用...代替
function wordlimit(str, wordlength) {
if (!str) {
return "";
}
var nowLength = str.length;
var wordStr = "";
if (nowLength > wordlength) {
wordStr = str.substr(0, wordlength) + '...';
} else {
wordStr = str;
}
return wordStr;
}
//动画遮盖层
function Mask(text) {
//可能直接传递option
var optionIn = {};
var performance = false;
var container = null;
if ($.isPlainObject(text)) {
optionIn = text;
performance = optionIn.performance;//某些场景不要有动画,否则性能问题
text = optionIn.text;
container = optionIn.container;
}
var dom = $('