123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 |
- function sendRequestWithHeaders(url, type, headers, data, success, contentType, async, complete) {
- //可能直接传递option
- var optionIn = {};
- var mask = null;
- var maskContainer = null;
- var maskDelay = null;
- if ($.isPlainObject(url)) {
- optionIn = url;
- url = optionIn.url;
- type = optionIn.type;
- data = optionIn.data;
- success = optionIn.success;
- contentType = optionIn.contentType;
- async = optionIn.async;
- complete = optionIn.complete
- mask = optionIn.mask;
- maskContainer = optionIn.maskContainer;
- maskDelay = optionIn.maskDelay;
- headers = optionIn.headers;
- }
- var options = {
- url: url,
- type: type,
- mask: mask,
- maskDelay: maskDelay,
- maskContainer: maskContainer,
- headers: headers,
- success: function (result) {
- if (success) {
- success(result);
- }
- },
- dataType: 'json',//服务器返回数据类型
- timeout: 60000,
- error: function (xhr) {
- if (xhr.status === 401) {
- window.mui && mui.toast('登录超时,即将跳转到登录页面...');
- setTimeout(function () {
- var url = 'login.html';
- goPage(url);
- }, 1500)
- } 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 scanQRCodeToReg() {
- ScanResult(function (resultStr) {
- // 表示经销商扫描登录
- if (resultStr.indexOf('app/qrcodeLg.html') > -1) {
- sendRequest({
- url: "/dealer/scanLogin?url=" + resultStr,
- type: "GET",
- success: function (response) {
- if (response.result === 1) {
- window.mui && mui.toast('PC端登录成功');
- } else {
- alert(response.description);
- }
- }
- });
- }
- // 扫码,给别人授权。 然后需要在授权人管理列表中 配置权限,别人才有操作权限。
- else if (resultStr.indexOf('dealer/toAuth') > -1) {
- mui.confirm('您确定要把您的账号权限开放给这个用户?', '<span class="c-red">授权提示</span>', ['取消', '<span class="c-red">确认</span>'], function (e) {
- if (e.index == 1) {
- sendRequest({
- url: "/dealer/toOtherDealerAuth?url=" + encodeURIComponent(resultStr),
- type: "GET",
- success: function (response) {
- if (response.result === 1) {
- window.mui && mui.toast('您已成功授权给申请授权人');
- } else {
- alert(response.description);
- }
- }
- });
- }
- });
- } else {
- var url = "/dealer/index.html#/deviceReg?uniqueCode=" +resultStr;
- goPage(url);
- }
- });
- }
- $(function () {
- function tip(that) {
- var tipsDom;
- if ($(that).hasClass("tips")) {
- tipsDom = $(that)
- } else {
- tipsDom = $(that).find(".tips")
- }
- var tipsText = tipsDom.attr("title");
- var tipsTitle = tipsDom.attr("tip-title");
- var tipsBtn = tipsDom.attr("tip-btn");
- if (mui) {
- mui.confirm(tipsText, tipsTitle || '说明', [tipsBtn || '好的'], function (e) {
- });
- } else {
- confirm(tipsText);
- }
- }
- // 提示信息事件绑定
- $("body").on("click", ".tips-event", function (evt) {
- evt.stopPropagation();
- tip(this);
- });
- $("body").on("tap", ".tips-event-tap", function (evt) {
- evt.stopPropagation();
- tip(this);
- });
- });
- // 获取特性列表
- function getFeatureList(role, option, callback) {
- var opt = {
- url: "/" + role + "/getFeatureList",
- type: "POST",
- mask: "加载配置...",
- contentType: "json",
- data: {list: option.list},
- success: function (response) {
- if (response.result === 1) {
- if (callback) {
- var payload = response.payload;
- callback(payload);
- }
- }
- }
- }
- if(role==='test'){
- opt.headers = get_token_headers("Tester")
- }
- sendRequest(opt);
- }
- var defaultPermission = {
- "homepageData": {
- "today_income": true,
- "today_pay_income": true,
- "today_ad_income": false,
- "offline_coins": false
- },
- mainMenu: {
- 'device_reg': true,
- 'device_management': true,
- 'business_stats': true,
- 'stock_management': false,
- 'order_query': true,
- 'remote_upper': true,
- 'payoff_recharge': true,
- 'user_management': true,
- 'marketing': true,
- 'payoff_activity': true,
- 'card_management': true,
- 'sim_card': true,
- 'interconnection': false,
- 'user_feedback': true,
- 'support_alarm': false,
- 'user_identify': false,
- 'zhenguduo': false,
- 'batteryManager': false,
- 'templateManager': false,
- 'apiManager': false,
- 'disableAdManager': false,
- },
- }
- // 获取主菜单
- function getAccountPermission(callback) {
- // 由于 getAccountPermission 这个接口在主页连续调用了两次,还是需要缓存(2秒超时即可)
- var menuData = getSessionStorage("ACCOUNT_MENU")
- if (menuData) {
- if (callback) {
- callback(menuData)
- }
- return
- }
- sendRequest({
- url: "/dealer/getAccountPermission",
- type: "GET",
- data: null,
- mask: "加载菜单...",
- success: function (response) {
- var payload = response.payload;
- let obj = $.extend(true, {}, defaultPermission, payload)
- if (callback) {
- callback(obj)
- }
- setSessionStorage("ACCOUNT_MENU", obj, 1000);//1秒失效
- },
- error: function () {
- callback(defaultPermission)
- }
- });
- }
- //生成二维码
- function getQRCodeImageData(text, label, option) {
- option = $.extend({
- labelHeight: 30,
- size: 200,
- labelFontStyle: "bold 24px Arial",// 使用粗体,稍大的字号,否则打印出来的不清晰
- }, option)
- var logoSize = 40;
- //生成二维码
- var qrDom = $("<div></div>");
- qrDom.qrcode({
- render: "canvas", // 渲染方式有table方式(IE兼容)和canvas方式
- width: option.size, //宽度
- height: option.size, //高度
- text: text, // 二维码的内容
- typeNumber: -1,//计算模式
- correctLevel: 2,//二维码纠错级别
- background: "#ffffff",//背景颜色
- foreground: "#000000" //二维码颜色
- });
- var canvas = qrDom.find("canvas")[0];
- var context = canvas.getContext("2d");
- var imgData = context.getImageData(0, 0, option.size, option.size);//获取到二维码图片数据流
- //生成背景(用来绘制标签、背景图等)
- var backDom = $("<canvas></canvas>");
- var maxW = option.size;
- var maxH = option.size + option.labelHeight;
- var left = 0;
- var top = 0;
- backDom.attr({"width": maxW, "height": maxH});
- var backCanvas = backDom[0];
- var ctx = backCanvas.getContext("2d");
- //填充背景为白色
- ctx.fillStyle = "#fff";
- ctx.fillRect(0, 0, maxW, maxH);
- ctx.putImageData(imgData, left, top);//合并二维码到带背景信息的画布
- //绘制标题
- ctx.font = option.labelFontStyle;
- ctx.textAlign = "center";
- ctx.fillStyle = "#000";
- if (label) {
- ctx.fillText(label, option.size / 2 + left, (option.size + option.labelHeight - 8) + top);
- }
- //绘制logo
- var needLogo = false;//logo有跨域的问题 暂时不要
- if (needLogo) {
- var logoBorder = 4;
- var centerSize = 2 * logoBorder + logoSize;
- //清空中心区域用来绘制logo
- ctx.rect((option.size - centerSize) / 2 + left, (option.size - centerSize) / 2 + top, centerSize, centerSize);
- ctx.fillStyle = "#fff";
- ctx.fill();
- //logo图片
- ctx.drawImage($("#logoPic")[0], (option.size - logoSize) / 2 + left, (option.size - logoSize) / 2 + top, logoSize, logoSize);
- }
- var dataURL = backCanvas.toDataURL("image/png");
- return dataURL;
- }
- // 渲染菜单,并修复多余的底边
- function menuPermission(rowCcount) {
- rowCcount = rowCcount || 2
- $(".index-bd .menu-block").each(function () {
- var cellDom = $(this).find(".row-cell");
- // 偶数则去除倒数1、2的底边
- var len = cellDom.length;
- var lastLen = (len % rowCcount) || rowCcount;// 取模,最后一行的个数,如果为0,则用rowCcount
- for (var i = 0; i < len; i++) {
- if ((i + 1) % rowCcount === 0) {
- //右边菜单
- cellDom.eq(i).addClass('border-bottom ');
- } else {
- cellDom.eq(i).addClass('border-bottom border-right');
- }
- // 最后一行去除底边
- if (len - i <= lastLen) {
- cellDom.eq(i).removeClass("border-bottom");
- }
- }
- });
- }
- function renderNav(opt, nowKey, callback) {
- var html = $('<nav class="mui-bar mui-bar-tab" id="main-nav"></nav>')
- for (var index = 0; index < opt.length; index++) {
- var item = opt[index];
- if (item.show === false) {
- continue
- }
- var itemHtml = $('<a class="mui-tab-item">' +
- '<span class="mui-icon iconfont "></span>' +
- '<span class="mui-tab-label">' + item.name + '</span>' +
- '</a>')
- var icon = ''
- if (nowKey === item.key) {
- itemHtml.addClass('mui-active')
- icon = item.iconFill
- } else {
- icon = item.icon
- itemHtml.attr('nav-href', item.href)
- }
- itemHtml.find('.iconfont').addClass(icon)
- if (item.iconStyle) {
- itemHtml.find('.iconfont').css(item.iconStyle)
- }
- html.append(itemHtml)
- }
- $('body').append(html)
- $('#main-nav').off().on('tap', '.mui-tab-item[nav-href]', function () {
- goPage($(this).attr("nav-href"));// 此处必须使用goPage,如果replacePage,会导致IOS|微信的扫码鉴权失败!
- });
- if (callback) {
- callback()
- }
- }
- function initDealerNav(nowKey, callback) {
- var opt = [
- {
- name: '首页',
- key: "home",
- icon: 'icon-home',
- iconFill: 'icon-homefill',
- href: 'index.html'
- }, {
- name: '经营',
- key: "business_stats",
- icon: 'icon-recharge',
- iconFill: 'icon-rechargefill',
- href: 'income.html'
- }, {
- name: '设备',
- key: "device_management",
- icon: 'icon-deviceo',
- iconFill: 'icon-device',
- iconStyle: {
- // 图标有点大 稍微缩小下
- 'font-size': '22px',
- 'line-height': '24px'
- },
- href: 'device-mgr.html'
- }, {
- name: '我的',
- key: "account",
- icon: 'icon-account',
- iconFill: 'icon-accountfill',
- href: 'account-setting.html'
- }
- ]
- getAccountPermission(function (subPayload) {
- var mainMenu = subPayload.mainMenu
- var role = subPayload.role
- if (role === "subaccount") {
- if (mainMenu.business_stats === false) {
- opt[1].show = false
- }
- if (mainMenu.device_management === false) {
- opt[2].show = false
- }
- }
- renderNav(opt, nowKey, callback)
- })
- }
- function initAgentNav(nowKey, callback) {
- var opt = [
- {
- name: '首页',
- key: "home",
- icon: 'icon-home',
- iconFill: 'icon-homefill',
- href: 'index.html'
- }, {
- name: '收益',
- key: "business_stats",
- icon: 'icon-recharge',
- iconFill: 'icon-rechargefill',
- href: 'agent-income.html'
- }, {
- name: '经销商',
- key: "dealer_management",
- icon: 'icon-group',
- iconFill: 'icon-group_fill',
- href: 'customer-mgr.html'
- }, {
- name: '我的',
- key: "account",
- icon: 'icon-account',
- iconFill: 'icon-accountfill',
- href: 'account-setting.html'
- }
- ]
- renderNav(opt, nowKey, callback)
- }
- function mqtt_push_set_up() {
- }
- var CAPTCHA_CHECK_DATA = null
- /***
- * 初始化验证码组件配置
- * @param checkType 类型
- * @param prevDataCheck 短信验证码发送按钮的前置条件验证
- * @param sendSmsUrl
- */
- function initCheck(checkType, prevDataCheck, sendSmsUrl) {
- var nc_token = ["FFFF0N000000000088F1", (new Date()).getTime(), Math.random()].join(':');
- var nc = NoCaptcha.init({
- //声明滑动验证需要渲染的目标元素ID。
- renderTo: '#captcha',
- //应用类型标识。它和使用场景标识(scene字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。
- appkey: 'FFFF0N000000000088F1',
- //使用场景标识。它和应用类型标识(appkey字段)一起决定了滑动验证的业务场景与后端对应使用的策略模型。您可以在人机验证控制台的配置管理页签找到对应的scene值,请务必正确填写。
- scene: 'nc_message_h5 ',
- //滑动验证码的主键,请勿将该字段定义为固定值。确保每个用户每次打开页面时,其token值都是不同的。系统默认的格式为:”您的appkey”+”时间戳”+”随机数”。
- token: nc_token,
- //业务键字段,可为空。为便于线上问题的排查,建议您按照线上问题定位文档中推荐的方法配置该字段值。
- trans: {"key1": "code0"},
- //语言,默认值为cn(中文)。HTML5应用类型默认支持简体中文、繁体中文、英文语言。
- language: "cn",
- //内部网络请求的超时时间。一般情况建议保持默认值(10000ms)。
- timeout: 10000,
- //允许服务器超时重复次数,默认5次。
- retryTimes: 5,
- //验证通过后,验证码组件是否自动隐藏,默认不隐藏(false)。
- bannerHidden: false,
- //是否默认不渲染,默认值false。当设置为true时,不自动渲染,需要自行调用show方法进行渲染。
- initHidden: false,
- //前端滑动验证通过时会触发该回调参数。您可以在该回调参数中将请求标识(token)、会话ID(sessionid)、签名串(sig)字段记录下来,随业务请求一同发送至您的服务端调用验签。
- callback: function (data) {
- CAPTCHA_CHECK_DATA = {
- nc_token: nc_token,
- csessionid: data.csessionid,
- sig: data.sig,
- }
- },
- error: function (s) {
- }
- });
- NoCaptcha.setEnabled(true);
- //请务必在此处调用一次reset()方法。
- nc.reset();
- //用于配置滑动验证的自定义文案。详细信息,请参见自定义文案与多语言文档。
- NoCaptcha.upLang('cn', {
- //加载状态提示。
- 'LOADING': "加载中...",
- //等待滑动状态提示。
- 'SLIDER_LABEL': "请向右滑动验证",
- //验证通过状态提示。
- 'CHECK_Y': "验证通过",
- //验证失败触发拦截状态提示。
- 'ERROR_TITLE': "非常抱歉,这出错了..."
- });
- bindSendCode(prevDataCheck, sendSmsUrl)
- }
- var sendFlag = false;
- // 绑定发送验证码的按钮事件
- function bindSendCode(prevDataCheck, sendSmsUrl) {
- var sendBtn = document.getElementById('sendBtn');
- $("#sendBtn").on("click", function () {
- if (!CAPTCHA_CHECK_DATA) {
- return alert('请完成人机交互验证');
- }
- var prevData = prevDataCheck();
- if (!prevData) {
- return
- }
- if (!sendFlag) {
- sendFlag = true;
- } else {
- return
- }
- var url = sendSmsUrl;
- var data = $.extend(true, CAPTCHA_CHECK_DATA, prevData)
- var t = 60;
- sendBtn.innerHTML = t + " s";
- sendBtn.disabled = true;
- sendRequest({
- url: url,
- type: "POST",
- data: data,
- contentType: "json",
- success: function (res) {
- sendFlag = false;
- if (res.result == 1) {
- mui.toast("发送成功");
- var interval = setInterval(function () {
- if (t == 0) {
- sendBtn.innerHTML = "重新获取";
- sendBtn.disabled = false;
- clearInterval(interval);
- } else {
- t -= 1;
- sendBtn.innerHTML = t + " s";
- sendBtn.disabled = true;
- }
- }, 1000);
- } else {
- mui.toast(res.description);
- }
- }
- });
- })
- }
|