//基础通用方法 var X = window.X || { event : new EventEmitter(), pageLogic : {}, DATA : { 'echartscolor': [ '#3ea7fd', '#cdddfd', '#5ad8a6', '#cdf3e4', '#5d7092', '#ced4de', '#f6bd16','#fcebb9','#e86452','#f8d0cb','#6dc8ec', '#d3eef9', '#9270ca', '#d3c6ea', '#ff9d4d', '#ffd8b8', '#269a99','#aad8d8','#ff99c3','#ffd6e7' ], 'createsidebar':[ { title: '新建看板',id: 0,url:'newkanban'}, // {title: '新建文件夹',id: 1,url:'newwenjian'}, {title: '创建空间',id: 2,url:'kongjianshezhi'} ], 'taboperationdata':{ kanban:[ {'title':'重命名','img':'xiugai.png','click':'modifyname'}, {'title':'移动至','img':'yidong.png','click':'yidong-pop'}, // {'title':'复制看板','img':'fuzhi.png','click':'copykanban'}, {'title':'删除看板','img':'del.png','click':'del'}, ], wenjian:[ {'title':'重新命名','img':'xiugai.png','click':'modifyname'}, {'title':'删除文件夹','img':'del.png','click':'del'}, ], baobiao:[ {'title':'复制看板','img':'fuzhi.png','click':'copy'} ] }, 'gengduolist':[ {'title':'报表设置','id':'shezhi'}, {'title':'数据导出','id':'export'}, {'title':'报表移除','id':'del'}, ], 'gengduolist2':[ {'title':'数据导出','id':'export'}, ], //用户搜索条件 'search':{ category:[ ], condition:[ {'title':'等于','id':'0','default':false}, {'title':'不等于','id':'1','default':false}, {'title':'包括','id':'2','default':true}, {'title':'不包括','id':'3','default':false}, {'title':'有值','id':'4','default':false}, {'title':'无值','id':'5','default':false}, {'title':'正则匹配','id':'6','default':false}, {'title':'正则不匹配','id':'7','default':false}, ], condition2:[ {'title':'等于','id':'0','default':false}, {'title':'不等于','id':'1','default':false}, {'title':'小于','id':'2','default':true}, {'title':'大于','id':'3','default':false}, {'title':'有值','id':'4','default':false}, {'title':'无值','id':'5','default':false}, {'title':'区间','id':'6','default':false} ], condition2:[ {'title':'等于','id':'=='}, {'title':'不等于','id':'!='}, {'title':'小于','id':'<'}, {'title':'大于','id':'>'}, {'title':'小于等于','id':'<='}, {'title':'大于等于','id':'>='}, {'title':'区间','id':'range'} ], }, //日期控件参数 'locale': { "format": 'YYYY-MM-DD', "separator": " - ", "applyLabel": "应用", "cancelLabel": "取消", "fromLabel": "起始时间", "toLabel": "结束时间'", "customRangeLabel": "自定义", "weekLabel": "W", "daysOfWeek": ["日", "一", "二", "三", "四", "五", "六"], "monthNames": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "firstDay": 1 }, 'timezone':[ {'title': "UTC+08:00 默认",id:8}, {'title': "当前时区",id:8}, {'title': "UTC-12:00",id:12}, {'title': "UTC-11:00",id:11}, {'title': "UTC-10:00",id:10}, {'title': "UTC-09:00",id:9}, {'title': "UTC-08:00",id:8}, {'title': "UTC-07:00",id:7}, {'title': "UTC±00:00",id:0} ], 'analysis':{}, 'screenlist':{ 'event':[ {'title':'按天','id':'P1D'}, {'title':'按分钟','id':'PT1M'}, {'title':'每五分钟','id':'PT5M'}, {'title':'每十分钟','id':'PT10M'}, {'title':'每十五分钟','id':'PT15M'}, {'title':'按小时','id':'PT1H'}, // {'title':'按小时段','id':'HOUR'}, {'title':'按周','id':'P1W'}, {'title':'按月','id':'P1M'}, {'title':'合计','id':'total'}, ], 'retention':[ {'title':'当日','id':1}, {'title':'次日','id':2}, {'title':'7日','id':7}, {'title':'14日','id':14}, {'title':'30日','id':30} ], 'distribution':[ {'title':'按天','id':'P1D'}, {'title':'按周','id':'P1W'}, {'title':'按月','id':'P1M'}, {'title':'合计','id':'total'} ] }, 'retentionlist' : [ {'title':'留存','id':0}, {'title':'流失','id':1}, ] }, }; (function(){ //本地 var ipurl = "http://10.0.0.77:7889/api/v1/"; // 线上 // var ipurl = "http://139.159.159.3:9865/api/v1/"; //线上测试 // var ipurl = "http://139.159.159.3:7889/api/v1/"; //设置或读取登录缓存,需要保存到localStorage,防止刷新时候登录数据丢失 X.loginCache = function(data){ if(data == null){ var _cache = localStorage.loginData; if(_cache){ return JSON.parse(_cache); }else{ return null; } }else{ localStorage.loginData = JSON.stringify(data); } }; //统一API接口调用 X.api = function(url,type,parms,callback){ var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; var contentType; if(url.indexOf("login") != -1){ var data = parms; var url = ipurl+url; }else { var data = {}; contentType = 'application/json'; if(parms != 1){ var data = JSON.stringify(parms); } if(url == 'data_mana/list'){ var url = ipurl+url+"?game="+ X.DATA.game+"&"+parms || ""; }else { var url = ipurl+url+"?game="+ X.DATA.game || ""; } } var index; $.ajax({ headers: { Authorization:token//此处放置请求到的用户token }, url: url, type:type, data:data, async:true, contentType: contentType, beforeSend: function () { // loading 显示 index = layer.load(1); }, success:function(d){ layer.close(index); if(d.code == 0){ if( JSON.stringify(d.data) != "{}" && JSON.stringify(d.data) != "[]"){ callback && callback(d.data); }else { layer.msg('查无数据'); callback && callback(d); } }else { if(d.code == -5){ layer.msg("登录过期请重新登录!!!"); window.localStorage.removeItem('loginData'); X.gourl("login"); location.reload(); }else if(d.code == -9){ callback && callback("查无数据"); }else { layer.msg(d.msg); } } }, error:function(error){ layer.msg('数据正在加载中...'); layer.close(index); } }); }; // 看板单独调用api方法,去除loading效果 X.modelapi = function(url,type,parms,callback){ var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; var contentType; if(url.indexOf("login") != -1){ var data = parms; var url = ipurl+url; }else { var data = {}; contentType = 'application/json'; if(parms != 1){ var data = JSON.stringify(parms); } if(url == 'data_mana/list'){ var url = ipurl+url+"?game="+ X.DATA.game+"&"+parms || ""; }else { var url = ipurl+url+"?game="+ X.DATA.game || ""; } } $.ajax({ headers: { Authorization:token//此处放置请求到的用户token }, url: url, type:type, data:data, async:true, contentType: contentType, beforeSend: function () { }, success:function(d){ if(d.code == 0){ if( JSON.stringify(d.data) != "{}" && JSON.stringify(d.data) != "[]"){ callback && callback(d.data); }else { // layer.msg('查无数据'); callback && callback(d.data); } }else { if(d.code == -5){ layer.msg("登录过期请重新登录!!!"); window.localStorage.removeItem('loginData'); X.gourl("login"); location.reload(); }else if(d.code == -9){ callback && callback("查无数据"); }else { layer.msg(d.msg); } } }, error:function(error){ layer.msg('数据正在加载中...'); } }); }; X.uploadfile=function(url,id,callback){ var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; layui.upload.render({ elem: id , url: ipurl+url+"?game="+ X.DATA.game || "" ,headers: { Authorization:token//此处放置请求到的用户token } , auto: false ,accept: 'file' //普通文件 ,exts: 'xls|xlsx' //只允许上传excel文件 ,bindAction: '#test9' , choose: function (obj) { // console.log(obj); } , done: function (res) { if(res.code == 0 ){ layer.msg("提交成功"); callback && callback(res); }else { layer.msg(res.msg); } } }); } //下载报表 X.download=function(url, params,name){ // console.log(url); postDownload(url, params,name); }; async function postDownload(url, params,name) { var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; var url = ipurl+url+"?game="+ X.DATA.game; const request = { async: true, body: JSON.stringify(params), method: 'POST', headers: { Authorization:token,//此处放置请求到的用户token 'Content-Type':'application/json', }, } console.log(url); console.log(request); const response = await fetch(url, request); // const filename = response.headers.get('content-disposition').split('=')[1]; const filename = name+'.xlsx'; const blob = await response.blob(); const link = document.createElement('a') link.download = decodeURIComponent(filename) link.style.display = 'none' link.href = URL.createObjectURL(blob) document.body.appendChild(link) link.click() URL.revokeObjectURL(link.href) document.body.removeChild(link) }; X.template = function(url,id,data,callback){ $.get('pages/'+ url + '.html',function(content){ $('#'+id).html(content); X.pageLogic[url] && X.pageLogic[url].init && X.pageLogic[url].init(data); callback && callback(); // X.pageLogic[parms.url] && X.pageLogic[parms.url].init && X.pageLogic[parms.url].init( parms ); }); }; //弹窗 X.open = function(parms){ if(parms.url){ var url = 'pages/'+ parms.url + '.html'; $.get(url,function(html){ parms.content = html; // openindes是弹出层的标记,方便后面多个弹框对应关闭 parms.success = function(layero, index){ parms.layIndex = index; X.pageLogic[parms.url] && X.pageLogic[parms.url].init && X.pageLogic[parms.url].init( parms ); }; layer.open(parms); }) }else{ layer.open(parms); } }; //渲染表格无分页无操作 X.tabledata = function(id,url,data){ var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; layui.table.render({ headers: { Authorization: token } ,elem: id ,url: ipurl+url+"?game="+X.DATA.game ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增 ,cols: data }); }; //渲染表格有分页有操作 X.laytabledata = function(id,url,data,arr,height,callback,method){ var loginCache = X.loginCache(); var token = (loginCache? loginCache.token:""); token = "Bearer "+token; var url if(arr){ url = ipurl+url+"?game="+X.DATA.game+arr; }else { url = ipurl+url+"?game="+X.DATA.game; } if(!height){ var height = 'full-20' } method = method ? method : "get"; // if(method){ // method = method; // }else{ // method = 'get'; // } layui.table.render({ method: method, headers: { Authorization: token } ,elem: id ,url: url ,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增 ,cols: data ,height: height ,done: function (res, curr, count) { callback && callback(res, curr, count); } }); }; //渲染模板,模板id,数据,位置id X.laytpldata = function (mbid ,data,wzid,callback){ var getTpl = $(mbid).html() layui.laytpl(getTpl).render(data, function(html){ wzid && $(wzid).html(html); layui.element.init(); //重新渲染 callback && callback(html); }); }; //渲染下拉框 X.laydropdown = function(id,data,callback){ layui.dropdown.render({ elem: id ,data: data ,click: callback }); }; //查询条件弹框 id:位置,data:数据,deviationleft:左偏移量,deviationtop:上偏移量 X.querycriteriapop = function(data,url,deviationleft, deviationtop, callback){ var innerHeight = window.innerHeight; if(innerHeight - deviationtop < 420){ deviationtop = deviationtop - 450 } X.open({ type: 1, title: false, closeBtn: 0, // shade:, shadeClose: true, offset: [deviationtop,deviationleft], url: url, extData : data, callback : callback }); }; X.parametersopen = function(data,url,offset,callback){ // var innerHeight = window.innerHeight; // if( innerHeight - offset[0] < height){ // offset[0] = offset[0] - (height + 30); // } // console.log(offset); X.open({ type: 1, title: false, closeBtn: 0, shadeClose: true, skin: 'yourclass', offset:offset, url: url, extData : data, callback : callback }); }; // 渲染树形菜单 X.treemenu = function(elem,data,id){ layui.tree.render({ elem: elem ,data: data ,showCheckbox: true //是否显示复选框 ,id: id ,isJump: false //是否允许点击节点时弹出新窗口跳转 }); }; //渲染穿梭框 X.laytransfer = function(elem,data,title,id){ layui.transfer.render({ elem: elem ,data: data ,title: title ,showSearch: true ,id: id }) }; //获取时间粒度中文名 X.granularity=function(timeParticleSize,callback){ if(timeParticleSize == 'P1D'){ granularity = '按天' }else if(timeParticleSize == 'PT1M'){ granularity = '按分钟' }else if(timeParticleSize == 'PT5M'){ granularity = '每五分钟' }else if(timeParticleSize == 'PT10M'){ granularity = '每十分钟' }else if(timeParticleSize == 'PT15M'){ granularity = '每十五分钟' }else if(timeParticleSize == 'PT1H'){ granularity = '按小时' }else if(timeParticleSize == 'P1W'){ granularity = '按周' }else if(timeParticleSize == 'P1M'){ granularity = '按月' }else if(timeParticleSize == 'total'){ granularity = '合计' }else if(timeParticleSize == '1'){ granularity = '当日' }else if(timeParticleSize == '2'){ granularity = '次日' }else if(timeParticleSize == '7'){ granularity = '7日' }else if(timeParticleSize == '14'){ granularity = '14日' }else if(timeParticleSize == '30'){ granularity = '30日' } callback && callback(granularity); }; //根据中文名获取时间粒度id X.granularityid=function(timeParticleSize,callback){ if(timeParticleSize == '按天'){ granularity = 'P1D' }else if(timeParticleSize == '按分钟'){ granularity = 'PT1M' }else if(timeParticleSize == '每五分钟'){ granularity = 'PT5M' }else if(timeParticleSize == '每十分钟'){ granularity = 'PT10M' }else if(timeParticleSize == '每十五分钟'){ granularity = 'PT15M' }else if(timeParticleSize == '按小时'){ granularity = 'PT1H' }else if(timeParticleSize == '按周'){ granularity = 'P1W' }else if(timeParticleSize == '按月'){ granularity = 'P1M' }else if(timeParticleSize == '合计'){ granularity = 'total' }else if(timeParticleSize == '当日'){ granularity = '1' }else if(timeParticleSize == '次日'){ granularity = '2' }else if(timeParticleSize == '7日'){ granularity = '7' }else if(timeParticleSize == '14日'){ granularity = '14' }else if(timeParticleSize == '30日'){ granularity = '30' } callback && callback(granularity); }; // 分组项取交集 X.groupintersection=function(c , a , callback){ var dataArr=[]; var arr=[]; for(let i in c){ for(let j in a){ if(c[i]['id'] == a[j]['id']){ for(let z in c[i]['category']){ for(let q in a[j]['category']){ if(c[i]['category'][z]['title'] == a[j]['category'][q]['title']){ arr.push(c[i]['category'][z]); } } } if(arr.length > 0){ var data = { title: c[i]['title'], id:c[i]['id'], category:arr }; dataArr.push(data); } } } } callback && callback(dataArr); }; // 日期选择器 X.daterender = function(id,callback){ // console.log(moment().subtract(1, 'week').startOf('week')) $(id).daterangepicker({ 'locale': X.DATA.locale, ranges: { '今日': [moment(), moment()], '昨日': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], '最近7日': [moment().subtract(7, 'days'), moment().subtract(0, 'days')], '最近30日': [moment().subtract(30, 'days'), moment().subtract(0, 'days')], '上周': [moment().subtract(1, 'week').startOf('week')+86400000, moment().subtract(1, 'week').endOf('week')+86400000], '本周': [moment().startOf('week')+86400000, moment()+86400000], '本月': [moment().startOf('month'), moment()], '上月': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')], '全部时间': [moment().subtract( parseInt((new Date).getTime()/86400000) , 'days'), moment()] }, "alwaysShowCalendars": true, "startDate": moment().subtract(7, 'days'), "endDate": new Date(), "opens": "right", }, function (start, end, label) { callback && callback(start,end,label); // console.log(start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD')) ; }); }; X.updatatime = function(id){ var myDate = new Date; var year = myDate.getFullYear(); //获取当前年 var mon = myDate.getMonth() + 1; //获取当前月 var date = myDate.getDate(); //获取当前日 var h = myDate.getHours();//获取当前小时数(0-23) var m = myDate.getMinutes();//获取当前分钟数(0-59) var s = myDate.getSeconds();//获取当前秒 var week = myDate.getDay(); var weeks = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]; var time = year + "-" + mon + "-" + date + " " + h+":"+m+":"+s // console.log(year + "-" + mon + "-" + date + " " + h+":"+m+":"+s); $(id).attr('title',"最新更新时间:"+time); }; //多选下拉框 // X.select = function(){ // }; //多选标签-基本配置 X.selectM = function(id,data,width,callback){ layui.selectM({ //元素容器【必填】 elem: id //候选数据【必填】 ,data: data ,width: width ,max: 100 //添加验证 ,verify:'required', callback:callback }); }; X.layuidate=function(id){ layui.laydate.render({ elem: id ,type: 'datetime' ,range: true }); }; //定义一个比较器--升序排列 X.compare=function(propertyName) { return function(object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value2 < value1) { return 1; } else if(value2 > value1) { return -1; } else { return 0; } } }; // table X.fixedTable=function(id,type,classname,headdata,dataarr,cat){ var fixedTable = new FixedTable({ wrap: document.getElementById(id),//生成的表格需要放到哪里 type: type,//表格类型,有:head-fixed、col-fixed、row-col-fixed extraClass: classname,//需要添加到表格中的额外class maxHeight: true, fields: headdata, // [//表格的列 // { // width: "150px", // field: "日期", // fixed: true // }, // { // width: "120px", // field: "姓名", // fixed: true // }, // { // width: "120px", // field: "省份", // //fixed: true, // }, // { // width: "120px", // field: "市区" // }, // { // width: "300px", // field: "地址", // // fixed: true, // }, // { // width: "120px", // field: "邮编", // }, // { // width: "100px", // field: "操作", // fixed: true, // fixedDirection: "right" // } // ], tableDefaultContent: "