var userAgent = navigator.userAgent; var BROWSER_TYPE = ""; if (userAgent.match(/MicroMessenger/i)) { BROWSER_TYPE = "wechat"; } else if (userAgent.match(/Alipay/i)) { BROWSER_TYPE = "alipay"; } else { //测试页面暂不做限制 if (isTest()) { } else { alert("已禁止本次访问:您必须使用微信或支付宝访问本页面!"); var opened = window.open("about:blank", "_self"); opened.opener = null; opened.close(); } } var ua = navigator.userAgent.toLowerCase() if (/android/i.test(ua)) { window.OS_TYPE = 'Android' } else if (/(iphone|ipad|ipod|ios)/i.test(ua)) { window.OS_TYPE = 'IOS' } else if (/Windows/i.test(ua)) { window.OS_TYPE = 'WinPhone' } else { window.OS_TYPE = 'Unknown' } function setTheme() { var theme = ""; // 如果是终端用户,则根据浏览器来配置 if (location.pathname.indexOf('/pages') == 0) { if (BROWSER_TYPE == "wechat") { theme = "theme-green"; } else if (BROWSER_TYPE == "alipay") { theme = "theme-alipay"; } } else { // 如果是代理商、经销商、测试系统,则用cookied 皮肤配置 theme = getCookie("theme_name") || "theme-alipay"; } $("html").addClass(theme); } setTheme(); //判断是否为测试环境 function isTest(no5tao) { if (no5tao) { return location.port != '8000' && (location.host.indexOf("127.0.0.1") > -1 || location.host.indexOf("localhost") > -1 || location.host.indexOf("192.168.") > -1); } else { return location.port != '8000' && (location.host.indexOf("127.0.0.1") > -1 || location.host.indexOf("localhost") > -1 || location.host.indexOf("192.168.") > -1 || location.host.indexOf("5tao5ai.com") > -1); } } //rem模式 function remModel() { (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), recalc = function () { var clientWidth = docEl.clientWidth; var clientHeight = docEl.clientHeight; if (!clientWidth) return; if (clientWidth >= 750) { clientWidth = 750 } docEl.style.fontSize = 100 * (clientWidth / 750) + 'px'; docEl.dataset.percent = 100 * (clientWidth / 750) }; recalc(); if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); })(document, window); } if ($("html").hasClass("remModel")) { remModel(); } $(function () { //测试模式菜单,依赖jQuery,没有mui的css也能显示,只是不好看 if (isTest()) { var fadeTimer = null function fadeNode() { fadeTimer = setTimeout(function () { testHomeBtn.addClass('fade'); }, 1500); } function showNode() { clearTimeout(fadeTimer) testHomeBtn.removeClass('fade'); } function setCss(x, y) { if (x !== undefined) { $("#testHomeBtn").css({ 'left': x + 'px', 'top': y + 'px' }); } } function bindCellClick(cell, url) { cell.on('click', function () { if ($('#testHomePort:checked').length === 1 && url.indexOf('#/') > -1) { url = location.origin + ':8080' + url } location.href = url }) } function initPanel() { var list = [ { "name": "经销商-VUE", "menu": [ {name: '经营明细', url: '/dealer/index.html#/dealer/billList'}, {name: '订单查询', url: '/dealer/index.html#/order/list'}, {name: '告警管理', url: '/dealer/index.html#/alarm/list'}, {name: '用户审核', url: '/dealer/index.html#/user/identify'}, {name: '虚拟卡券', url: '/dealer/index.html#/dealer/cardCenter/cardTicketList'}, {name: '子账号管理', url: '/dealer/index.html#/subAccount'}, {name: '我的消息', url: '/dealer/index.html#/news/list'}, {name: '导出报表', url: '/dealer/index.html#/export/exportList'}, {name: '用户管理', url: '/dealer/index.html#/user/list'}, {name: '设备信号', url: '/dealer/index.html#/signal/chart'}, {name: '24小时电价', url: '/dealer/index.html#/device/elcPrice24'}, {name: '设备格子配置', url: '/dealer/index.html#/deviceGrid/gridList'}, {name: '从机配置', url: '/dealer/index.html#/device/slaveList'}, {name: '库存管理', url: '/dealer/index.html#/stock/stockList'}, {name: '商品种类管理', url: '/dealer/index.html#/goods/goodsList'}, {name: '加盟管理', url: '/dealer/index.html#/join/main'}, {name: '电费配置', url: '/dealer/index.html#/elecFee/list'}, ] }, { name: "用户-VUE", menu: [ {name: '用户套餐', url: '/user/index.html#/dev?logicalCode=1'}, {name: '用户个人中心', url: '/user/index.html#/user/me'}, {name: '用户地图', url: '/user/index.html#/user/map'}, ] }, { "name": "经销商", "menu": [ {name: '主页', url: '/app/index.html'}, ] }, { "name": "代理商", "menu": [ {name: '主页', url: '/agents/index.html'}, ] }, { "name": "测试", "menu": [ {name: '主页', url: '/test/index.html'}, ] }, ] var testHomePort = localStorage.getItem('testHomePort') var testHomePanel = $('
页面测试导航
' + '' + '
') 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 = $(`
  • ${name}
  • `); 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 = $('
    '); this.container = container; this.dom = dom; if (text != null) { dom.find(".load-text").html(text); } if (container) { dom.addClass('absolute') } } Mask.prototype.show = function (quickly) { var dom = this.dom; var container = this.container; if (container) { $(container).append(dom) } else { $("body").append(dom); } if (quickly) { dom.addClass("active"); } else { setTimeout(function () { dom.addClass("active"); }, 400); } return this; }; Mask.prototype.hide = function () { this.dom.hide(); return this; }; Mask.prototype.dark = function () { this.dom.addClass("dark"); return this; }; Mask.prototype.text = function (text) { if (text != null) { this.dom.find(".load-text").html(text); } return this; }; Mask.prototype.remove = function () { if (this.dom) { this.dom.remove(); this.dom = null; } }; //输入框2位小数限制 function myNumberic(e, len) { var obj = e.srcElement || e.target; var dot = obj.value.indexOf(".");//alert(e.which); len = (typeof (len) == "undefined") ? 2 : len; var key = e.keyCode || e.which; //不能输入小数点 if (len <= 0 && key == 46) { return false; } if (key == 8 || key == 9 || key == 46 || (key >= 37 && key <= 40))//这里为了兼容Firefox的backspace,tab,del,方向键 return true; if (key <= 57 && key >= 48) { //数字 if (dot == -1)//没有小数点 return true; else if (obj.value.length <= dot + len)//小数位数 return true; } else if ((key == 46) && dot == -1) {//小数点 return true; } return false; } // 输入时光标bug ,导致只有onchange事件好用,正则有待优化,先输小数点不会被过滤掉。。。todo function numberFixed(event, len) { var value = $(event.target).val(); var regStrs = [ ['[^\\d\\.]+$', ''], //禁止录入任何非数字和点 ['\\.(\\d?)\\.+', '.$1'], //禁止录入两个以上的点 ['^(\\d+\\.\\d{' + len + '}).+', '$1'] //禁止录入小数点后len位以上 ]; for (var i = 0; i < regStrs.length; i++) { var reg = new RegExp(regStrs[i][0]); value = value.replace(reg, regStrs[i][1]); } $(event.target).val(value); } //正整数或两位以内的小数(包括一位小数) function isMoney(str) { var g = /^\d+(\.\d{1,2})?$/; return g.test(str); } //电话 function isPhone(str) { var phoneReg = /^[1][3456789]\d{9}$/; return phoneReg.test(str); } //整数 function isPInt(str) { var g = /^[1-9]*[1-9][0-9]*$/; return g.test(str); } //如果某几个关键字是包含关系,短的关键字放后面,因为设备真实名称一般是比较长的,比如:XXX脉冲充电桩.indexOf('汽车充电桩') window.DEV_ICON_MAP = { "空气净化": "kongqijinghuaqi", "吸氧": "xiyangji", "制氧": "yangqi", "微波炉": "weibolu", "洗衣机": "xiyiji", "烘干": "hongganji", "洗鞋": "xiezi", "洗澡": "xizao", "搓澡": "xizaomuyu", "淋浴": "xizaomuyu", "吹风": "chuifengji", "售液": "water", "啤酒": "pijiu", "售水": "yinshuiji", "饮料": "yinshuiji", "喝水": "yinshuiji", "饮水": "yinshuiji", "漱口水": "pingzi", "洗手液": "xishouye", "洗衣液": "xiyiye", "游戏": "game", "射": "sheqiang", "枪": "sheqiang", "摇摇车": "yaoyaoche", "儿童车": "ertongche", "娃娃机": "zhuawawa", "购物车": "gouwuche", "咖啡": "kafei", "格子": "shouhuoji", "售货": "shouhuoji", "储物": "chuwugui", "纸巾": "zhijin", "体重": "tizhong", "洗车": "xicheji", "汽车充电": "qichechongdian", "充电桩": "chongdianzhuang", "充电": "chongdian", "足底按摩": "zuliao", "足疗": "zuliao", "按摩抱枕": "baozhen", "按摩": "anmoyi",//有按摩坐垫、按摩椅、足底按摩机 "水疗": "shuiliaoyi", "床": "chuang", }; function getDevIconName(typeName) { if (typeName) { for (var key in DEV_ICON_MAP) { if (typeName.indexOf(key) > -1) { return "icon-" + DEV_ICON_MAP[key]; } } } return "icon-device"; } // 微信提现支持的银行参考:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4&index=5 var BANK_COLOR_TYPE = { red: {'background-image': 'linear-gradient(120deg, #D2354F 0%, #A22032 100%)'}, green: {'background-image': 'linear-gradient(120deg, #32A680 0%, #1C9F66 100%)'}, blue: {'background-image': 'linear-gradient(120deg, #166DD3 0%, #0D3F86 100%)'}, yellow: {'background-image': 'linear-gradient(120deg, #DE9651 0%, #FF885C 100%)'}, } var BANK_STYLE_MAP = { '中国工商银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#E50112', icon: 'bicon-gongshangyinhang',}, '中国农业银行': {cardStyle: BANK_COLOR_TYPE.green, color: '#008566', icon: 'bicon-nongyeyinhang',}, '中国银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#9E1F31', icon: 'bicon-zhongguoyinhang',}, '中国建设银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#003A90', icon: 'bicon-jiansheyinhang',}, '招商银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#E31E25', icon: 'bicon-zhaoshangyinhang',}, '中国邮政储蓄银行': {cardStyle: BANK_COLOR_TYPE.green, color: '#006F46', icon: 'bicon-youchuyinhang',}, '交通银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#1D1F86', icon: 'bicon-jiaotongyinhang',}, '浦发银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#2D5082', icon: 'bicon-pufayinhang',}, '中国民生银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#1D2087', icon: 'bicon-minshengyinhang',}, '兴业银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#003F8D', icon: 'bicon-xingyeyinhang',}, '平安银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#FF3204', icon: 'bicon-pinganyinhang',}, '中信银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#BB1D20', icon: 'bicon-zhongxinyinhang',}, '华夏银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#E50012', icon: 'bicon-huaxiayinhang',}, '广发银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#E7191B', icon: 'bicon-guangfayinhang',}, '中国光大银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F39C00', icon: 'bicon-guangdayinhang',}, '北京银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#C11E22', icon: 'bicon-beijingyinhang',}, '宁波银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-ningboyinhang',}, '上海银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-shanghaiyinhang',}, '南京银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-nanjingyinhang',}, '长子县融汇村镇银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-yinhang',}, '长沙银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-changsha',}, '浙江泰隆商业银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-zhejiangtailongshangyeyinhang',}, '中原银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-zhongyuanyinhang',}, '企业银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-qiyeyinhanglogo',}, '顺德农商银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-shundenongshangyinhang',}, '衡水市商业银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-hengshuiyinhang',}, '长治市商业银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-changzhiyinhanglogo',}, '大同市商业银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-datongyinhanglogo',}, '河南省农村信用社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-henanshengnongcunxinyongshelianheshe', }, '宁夏黄河农村商业银行': { cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-ningxiahuanghenongcunshangyeyinhang', }, '山西省农村信用社': {cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-shanxishengnongcunxinyongshe',}, '安徽省农村信用社': {cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-anhuishengnongcunxinyongshe',}, '甘肃省农村信用社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-gansushengnongcunxinyongshelianheshe', }, '天津农商银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-tianjinnongshangyinhang',}, '广西壮族自治区农村信用社联合社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-guangxizhuangzuzizhiqunongcunxinyongshelianheshe', }, '陕西省农信社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-shanxishengnongcunxinyongshelianheshe', }, '深圳农村商业银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-shenzhennongcunshangyeyinhang',}, '宁波鄞州农商行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-yinzhouyinhang',}, '浙江省农村信用社联合社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-zhejiangshengnongcunxinyongshelianheshe', }, '江苏省农村信用社联合社': { cardStyle: BANK_COLOR_TYPE.green, color: '#F19339', icon: 'bicon-jiangsushengnongcunxinyongshelianheshe', }, '江苏紫金农村商业银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-jiangsuzijinnongcunshangyeyinhang',}, '北京中关村银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-yinhang',}, '星展银行(中国)': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-xingzhanyinhang',}, '枣庄银行': {cardStyle: BANK_COLOR_TYPE.blue, color: '#F19339', icon: 'bicon-zaozhuangyinhang',}, '海口联合农商银行': {cardStyle: BANK_COLOR_TYPE.yellow, color: '#F19339', icon: 'bicon-haikoulianhenongshangyinhang',}, '南洋商业银行': {cardStyle: BANK_COLOR_TYPE.red, color: '#F19339', icon: 'bicon-nanyangshangyeyinhang',}, }; function findBankStyle(name) { for (var key in BANK_STYLE_MAP) { var bankStyle = BANK_STYLE_MAP[key]; if (name.indexOf(key) > -1) { return bankStyle; } } return {color: '#c55055', icon: 'icon-bank-card',};//没找到返回默认图标 } function msgPopup(title, msg, btnword, callback) { $('body').append('
    '); var popupHtml = ''; $('.backdrop').addClass('active').touchmove(function (e) { e.preventDefault(); }).after(popupHtml); $('.popup').addClass('popup-in'); $('.popup-button').tap(function () { if (callback) { callback(); } $('.backdrop, .popup').remove(); return false; }); } //尝试获取微信权限 function getWxconfig(callback) { if (!window.wx) { if (isTest()) { alert('请引入微信api,否则无法扫码') } return; } var url = "/user/wxconfig"; if (location.pathname.indexOf('/pages') === 0) { url = "/user/wxconfig"; } else if (location.pathname.indexOf('/test') === 0) { url = "/test/wxconfig"; } else if (location.pathname.indexOf('/app') === 0) { url = "/dealer/wxconfig"; } else if (location.pathname.indexOf('/agents') === 0) { url = "/agent/wxconfig"; } var checkUrl = location.href; // 当前页面路径包含问号参数必须一致,否则微信无法通过校验 sendRequest(url, "GET", {"href": checkUrl}, function (response) { if (response.result == 1) { wx.config({ debug: false, appId: response.para.wxconfig.appId, timestamp: response.para.wxconfig.timestamp, nonceStr: response.para.wxconfig.nonceStr, signature: response.para.wxconfig.signature, jsApiList: [ 'scanQRCode', 'getLocation', // 调用的接口太多,反而容易失败 // 'onMenuShareTimeline', // 'hideOptionMenu',//界面操作接口1 // 'showOptionMenu',//界面操作接口2 // 'closeWindow', ////界面操作接口3 // 'hideMenuItems',////界面操作接口4 // 'showMenuItems',////界面操作接口5 // 'hideAllNonBaseMenuItem',////界面操作接口6 // 'showAllNonBaseMenuItem'////界面操作接口7 ], success: function (res) { console.log('wx.config success') }, fail: function (res) { console.log('wx.config fail') }, error: function (res) { console.log('wx.config error') }, }); if (callback) { callback(); } console.log(response) } }); } /******* * 微信扫码必须等待界面加载完,否则微信无法成功调用扫码 * *******/ // 获取扫码结果:支付宝、微信都能用,必须导入支付宝、微信api function ScanResult(success) { getWxconfig(goScan); function goScan() { if (BROWSER_TYPE == "alipay") { if (!window.ap) { alert('请引入支付宝api,否则无法扫码') return; } ap.scan(function (res) { success(res.code); }); } else if (BROWSER_TYPE == "wechat") { if (!window.wx) { if (isTest()) { alert('请引入微信api,否则无法扫码') } return; } var mask = new Mask("正在获取扫码权限..."); mask.show(); wx.ready(function () { wx.scanQRCode({ needResult: 1, scanType: ["qrCode"], success: function (res) { var resultStr = res.resultStr; success(resultStr); }, fail: function (res) { alert(res.errMsg + "权限失效,请重新尝试。"); }, error: function (res) { if (res.errMsg.indexOf('function_not_exist') > 0) { alert('您的微信版本过低,请升级'); } }, cancel: function () { console.log('用户主动取消扫码'); }, complete: function () { console.log("完成扫码"); mask.remove(); } }); }); } } } // 获取当前地理位置,微信或支付宝接口 function getLocation(callback, complete) { var locationType = "gcj02"; if (BROWSER_TYPE == "alipay") { // 默认是GCJ-02坐标系 ap.getLocation(function (res) { var longitude = res.longitude; // 经度 var latitude = res.latitude; // 纬度 if (callback) { callback({lng: longitude, lat: latitude, type: locationType}) } complete && complete() }) } else if (BROWSER_TYPE == "wechat") { getWxconfig(function () { wx.ready(function () { wx.getLocation({ type: locationType, // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' success: function (res) { var longitude = res.longitude; // 经度 var latitude = res.latitude; // 纬度 if (callback) { callback({lng: longitude, lat: latitude, type: locationType}) } complete && complete() }, fail: function (res) { alert('请您打开定位'); complete && complete() }, error: function (res) { if (res.errMsg.indexOf('function_not_exist') > 0) { alert('您的微信版本过低,请升级'); } complete && complete() }, cancel: function (res) { alert('您已取消定位授权'); complete && complete() } }); }); }); } } // 筛选控件公共事件 function FilterComponent(optionIn) { if ($.isArray(optionIn)) { for (var index in optionIn) { var optItem = optionIn[index]; bindEvent(optItem) } } else { bindEvent(optionIn) } function bindEvent(option) { var optionEx = { ok: function () { }, cancel: function () { } }; option = $.extend(optionEx, option); var panelDom; if (option.panel) { panelDom = $(option.panel) } else { panelDom = $('#options'); } var maskDom = $('
    '); panelDom.append(maskDom); var triggerBtn; if (option.trigger) { triggerBtn = $(option.trigger) } else { triggerBtn = $('.filter-btn'); } //展开|收起过滤条件 triggerBtn.tap(function () { var hiddenOptions = !panelDom.is(":hidden"); //无论如何,先隐藏其他模块 $(".filter-panel").hide(); $(".filter-btn,.filter-btn-custom").removeClass("active"); if (hiddenOptions) { panelDom.slideUp(100); maskDom.addClass("mui-hidden"); $(this).removeClass("active"); } else { panelDom.slideDown(100); maskDom.removeClass("mui-hidden"); $(this).addClass("active"); } return false; }); maskDom.tap(function () { panelDom.slideUp(100); $(".filter-list-mask").addClass("mui-hidden"); option.cancel() }); //弹出查询条件,使用默认的ok-btn按钮 panelDom.find('.ok-btn').click(function (e) { if (option.ok) { var flag = option.ok(); if (flag == false) { //如果返回false表示校验不通过,则不收起来 } else { panelDom.slideUp(100); maskDom.addClass("mui-hidden"); } } }); if (option.okTrigger) { $(option.okTrigger).on("tap", function (e) { panelDom.slideUp(100); maskDom.addClass("mui-hidden"); }); } // 弹窗条件取消 panelDom.find('.cancel-btn').click(function (e) { panelDom.slideUp(100); maskDom.addClass("mui-hidden"); option.cancel() }); } } /*** * 套餐附加参数选择组件 */ function PackageSelectComponent(option) { var attachParas = {}; var devTypeInfo = option.devTypeInfo, el = option.el, multiple = option.multiple, data = option.data || {}; if($("#modal100200").length === 0) { $("body").append(PackageSelectComponentTemplate);//载入模板到页面 } var statusConfig = { "idle": {name: "空闲", color: "green"}, "fault": {name: "故障", color: "red"}, "busy": {name: "繁忙", color: "lgreen"}, "ban": {name: "禁用", color: "gray-ccc"}, "finished": {name: '完成',color: 'lgreen'}, "connected": {name: '连接',color: "green"}, "estop": {name: '急停状态',color: 'red'}, "ready": {name: '就绪',color: 'lgreen'} }; function toggleActive(indexDom) { var prevDom = modal.find('.charge-socket.active'); var prevDefaultClass = prevDom.attr("defaultClass"); var prevActiveClass = prevDom.attr("activeClass"); var defaultClass = indexDom.attr("defaultClass"); var activeClass = indexDom.attr("activeClass"); if (multiple) { if (indexDom.hasClass('active')) { indexDom.removeClass('active ' + activeClass).addClass(defaultClass); } else { indexDom.removeClass(defaultClass).addClass("active " + activeClass); } } else { prevDom.removeClass("active " + prevActiveClass).addClass(prevDefaultClass); indexDom.removeClass(defaultClass).addClass("active " + activeClass); } let portList = []; modal.find('.charge-socket.active').each(function () { portList.push($(this).attr("chargeIndex")); }) if (multiple) { return portList; } else { return portList[0]; } } var modal = ""; // 平铺展开充电口 function initChargeIndex() { var chargeIndexDom = modal.find(".chargeIndexGrid"); // 如果设备有充电线路,则渲染 if (devTypeInfo.chargeIndex) { attachParas.needPort = true; var initSelectValue; var initSelectIndex; var index = 0; for (var key in devTypeInfo.chargeIndex) { var statusEnum = devTypeInfo.chargeIndex[key] || "ban"; var color = statusConfig[statusEnum].color; var name = statusConfig[statusEnum].name; var dom = $('
    ').attr({ status: devTypeInfo.chargeIndex[key], chargeIndex: key, defaultClass: 'c-' + color, activeClass: 'btn-' + color + ' border-' + color, }); var tmpText = key + ':' + name; dom.html(tmpText); chargeIndexDom.append(dom); // 匹配初始化端口的信息 if (data.chargeIndex == key) { initSelectValue = devTypeInfo.chargeIndex[key]; initSelectIndex = index; } index++; } // 判断是否有端口,没有则禁用套餐; 目前只支持一个端口选择; if (index > 0) { //如果有初始化的参数,则选中该端口 if (data.chargeIndex != null && data.chargeIndex != "") { attachParas.chargeIndex = data.chargeIndex;//数据选中 var indexDom = chargeIndexDom.find(".charge-socket").eq(initSelectIndex); toggleActive(indexDom); } } else { //如果没有端口,则显示无可用 chargeIndexDom.closest(".device-para-row").addClass("fade-node"); } } // 点击事件绑定 modal.off("tap.chargeSocket").on("tap.chargeSocket", ".charge-socket", function () { attachParas.chargeIndex = toggleActive($(this)); }) } // 初始化电池类型选择器:储存在本地,避免用户每次选电池类型 function initBattery() { var batteryTypeList = [ {"value": "锂电池", "text": "锂电池", "icon": "icon-battery"}, {"value": "铅酸电池", "text": "铅酸电池", "icon": "icon-xudianchi"} ]; // 获取缓存的默认值 var defaultValue = localStorage.getItem("user_para_batteryType") || attachParas.batteryType; if (defaultValue) { attachParas.batteryType = defaultValue; } console.log(defaultValue) var batteryTypeDom = modal.find(".batteryTypeGrid"); function bind(htmlItem, value) { // 点击事件绑定 htmlItem.on("tap", function () { modal.find(".battery-type").removeClass("active2 btn-skin"); $(this).addClass("active2 btn-skin"); attachParas.batteryType = value; //缓存到本地 localStorage.setItem("user_para_batteryType", value) }) } for (var index in batteryTypeList) { var item = batteryTypeList[index]; var htmlItem = $('
    '); htmlItem.attr("value", item.value); htmlItem.find(".text").text(item.text); batteryTypeDom.append(htmlItem); // 渲染默认值 if (defaultValue == item.value) { htmlItem.addClass("active2 btn-skin"); } bind(htmlItem, item.value); } } function initVoltage() { var voltageList = [ {"value": 12, "text": "12V"}, {"value": 24, "text": "24V"}, {"value": 36, "text": "36V"}, {"value": 48, "text": "48V"}, {"value": 60, "text": "60V"}, {"value": 72, "text": "72V"}, ]; // 获取缓存的默认值 var defaultValue = localStorage.getItem("user_para_voltage") || attachParas.voltage; if (defaultValue) { attachParas.voltage = defaultValue; } console.log(defaultValue) var voltageDom = modal.find(".voltageGrid"); function bind(htmlItem, value) { // 点击事件绑定 htmlItem.on("tap", function () { modal.find(".voltage-type").removeClass("active2 btn-skin"); $(this).addClass("active2 btn-skin"); attachParas.voltage = value; //缓存到本地 localStorage.setItem("user_para_voltage", value) }) } for (var index in voltageList) { var item = voltageList[index]; var htmlItem = $('
    '); htmlItem.attr("value", item.value); htmlItem.find(".text").text(item.text); voltageDom.append(htmlItem); // 渲染默认值 if (defaultValue == item.value) { htmlItem.addClass("active2 btn-skin"); } bind(htmlItem, item.value); } } // 凯源新能的充电桩 if (devTypeInfo.code == 100200) { attachParas = {"voltage": 12, "batteryType": "锂电池"};//默认附加参数 modal = $($("#modal100200").html()); initBattery(); initVoltage(); initChargeIndex(); } else if (!$.isEmptyObject(devTypeInfo.chargeIndex)) { attachParas = {};//默认附加参数 modal = $($("#modal100202").html()); initChargeIndex(); } if (modal) { $(el).html(modal).addClass("active"); } // 如果返回引用,似乎会丢失,暂这样写 return {attachParas: attachParas}; } var PackageSelectComponentTemplate = '' + '' function loadVconsole() { if (OS_TYPE !== 'Android' && OS_TYPE !== 'IOS') { // PC 测试无需vconsole return } // 使用缓存获取,避免刷新后重新向服务器请求 $.ajaxSetup({ cache: true }); $.ajax({ url: "/components/lib/vconsole.min.js", async: false, dataType: "script", success: function () { new VConsole(); } }); } if (isTest() || getQueryString('isTest')) { localStorage.setItem('ENV_TEST', '1'); loadVconsole() } else if (localStorage.getItem('ENV_TEST')) { loadVconsole() } $(function () { return // 如果是本地纯前台测试,则引入模拟的扫码、支付 if (isTest(true)) { window.WeixinJSBridge = { invoke: function (str, obj, callback) { callback({err_msg: "get_brand_wcpay_request:ok"}) } } window.AlipayJSBridge = { call: function (str, obj, callback) { callback({resultCode: "9000"}) } } window.wx = { ready: function (c) { c() }, config: function () { }, scanQRCode: function (obj) { obj.success({resultStr: "http://www.washpayer.com/dealer/toAuth?l=1001"}) obj.complete && obj.complete() }, getLocation: function (obj) { if (obj.success) { obj.success({longitude: 114.31, latitude: 30.52}) } obj.complete && obj.complete() } } window.ap = { scan: function (callback) { callback({code: "http://www.washpayer.com/userLogin?l=2910"}) } } } }); (function () { return; //此代码为 经销商和代理商系统设置皮肤代码注入gulp源码,使其在其他script之前即可优先执行。 可以用工具压缩再注入。注意加script标签 // 改代码必须注入到 html标签内部(最好在head结束之前,确保其在其他script之前执行),因为只需要等html加载完即可正常操作html标签,如果注入到html外部,是不能正常修改html标签的!(文档流的html还是空)此段代码写[(function (){})()]其实也没啥用... html文档流严格按从上往下执行! function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) { return unescape(arr[2]); } else { return null; } } var theme = getCookie("theme_name") || "theme-alipay"; document.querySelectorAll('html')[0].classList.add(theme); })();