This commit is contained in:
罗松柏 2021-08-27 09:33:33 +08:00
parent a6f244fee0
commit a4efd88c7a
11 changed files with 866 additions and 423 deletions

View File

@ -33,15 +33,15 @@
<div class="small-data-box">{{d.num}}</div>
<div class="small-proportion">
{{# if(d.thedaypropsize === "+"){ }}
<div class="proportion-data">较环比 <div class="sanjiao"></div><span>{{d.thedayprop}}%</span></div>
{{# if(d.wowtyle == '-'){ }}
<div class="proportion-data">较环比 <div class="sanjiao"></div><span>{{d.wow}}%</span></div>
{{# } else { }}
<div class="proportion-data">较环比 <div class="sanjiao fu"></div><span class="funum">{{d.thedayprop}}%</span></div>
<div class="proportion-data">较环比 <div class="sanjiao fu"></div><span class="funum">{{d.wow}}%</span></div>
{{# } }}
{{# if(d.weekpropsize === "+"){ }}
<div class="proportion-data">较同比 <div class="sanjiao"></div><span>{{d.weekprop}}%</span></div>
{{# if(d.chain_ratiotype == "+"){ }}
<div class="proportion-data">较同比 <div class="sanjiao"></div><span>{{d.chain_ratio}}%</span></div>
{{# } else { }}
<div class="proportion-data">较同比 <div class="sanjiao fu"></div><span class="funum">{{d.weekprop}}%</span></div>
<div class="proportion-data">较同比 <div class="sanjiao fu"></div><span class="funum">{{d.chain_ratio}}%</span></div>
{{# } }}
</div>
@ -76,9 +76,9 @@
<div class="condition-box controlhover">
<div class="time-cond">
<span>过去7天</span>
<span class="model-times" id="times{{d.id}}">过去7天</span>
<div class="xian"></div>
<span>按天</span>
<span class="model-screenlist">按天</span>
{{# if(d.cat === "retention"){ }}
<div class="xian"></div>
{{# if(d.retentiontype === 0){ }}
@ -206,9 +206,9 @@
<div class="condition-box controlhover">
<div class="time-cond">
<span>过去7天</span>
<span class="model-times" id="times{{d.id}}">过去7天</span>
<div class="xian"></div>
<span>按天</span>
<span class="model-screenlist">按天</span>
{{# if(d.cat === "retention"){ }}
<div class="xian"></div>
{{# if(d.retentiontype === 0){ }}
@ -229,6 +229,16 @@
<div class="proportion">
<!-- <div class="proportion-data">较环比 <div class="sanjiao"></div><span>5.4%</span></div>
<div class="proportion-data">较同比 <div class="sanjiao"></div><span>5.4%</span></div> -->
{{# if(d.wowtyle == '-'){ }}
<div class="proportion-data">较环比 <div class="sanjiao"></div><span>{{d.wow}}%</span></div>
{{# } else { }}
<div class="proportion-data">较环比 <div class="sanjiao fu"></div><span class="funum">{{d.wow}}%</span></div>
{{# } }}
{{# if(d.chain_ratiotype == "+"){ }}
<div class="proportion-data">较同比 <div class="sanjiao"></div><span>{{d.chain_ratio}}%</span></div>
{{# } else { }}
<div class="proportion-data">较同比 <div class="sanjiao fu"></div><span class="funum">{{d.chain_ratio}}%</span></div>
{{# } }}
</div>
</div>

119
web/pages/setupbaobiao.html Normal file
View File

@ -0,0 +1,119 @@
<!-- 报表设置 -->
<div class="setupbaobiao-box">
<div class="setupbaobiao-top-box">
<p>
看板报表设置&nbsp; &nbsp; 该设置对共享成员也生效
</p>
<div class="setupbaobiao-but-box">
<div class="setupbaobiao-xq">取消</div>
<div class="setupbaobiao-yy">应 用</div>
</div>
</div>
<div class="setupbaobiao-content-box">
<div class="setupbaobiao-left-box">
<div class="setupbaobiao-con-top-box">
<i class="iconfont" style="font-size: 12px; color: #67729d; margin-right:10px;">&#xe759;</i>
<span>修改报表设置 &nbsp; &nbsp; 修改后报表同时修改</span>
</div>
<div class="setupbaobiao-left-from">
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">报表名称</span>
<div class="setupbaobiao-left-from-list-input">
<input autocomplete="off" type="text" class="setupbaobiao-title"/>
</div>
</div>
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">分析时间粒度</span>
<div class="setupbaobiao-left-from-list-input">
<select class="setupbaobiao-select">
</select>
</div>
</div>
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">报表备注</span>
<div class="setupbaobiao-left-from-list-input">
<textarea class="setupbaobiao-textarea"></textarea>
</div>
</div>
</div>
</div>
<div class="setupbaobiao-right-box">
<div class="setupbaobiao-con-top-box">
<i class="iconfont" style="font-size: 12px; color: #67729d; margin-right:10px;">&#xe759;</i>
<span>修改图表设置 &nbsp; &nbsp; 修改后只修改展示样式</span>
</div>
<div class="setupbaobiao-right-from">
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">时间选框</span>
<div class="setupbaobiao-left-from-list-input">
<div class="setupbaobiao-rli-box">
<span class="setupbaobiao-rli-box2">
<span style="display: inline-block;"><img src="./static/img/rli.png"/> <span style="position: relative; top: 2px;" class="setupbaobiao-time">过去30天</span></span>
</span>
</div>
</div>
</div>
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">图表类型</span>
<div class="setupbaobiao-left-from-list-input">
<div>
<div class="setupbaobiao-charttype">
<div class="shape___2nUUi" data-type="echarts" id="setupbaobiao-echarts">
<i class="iconfont" style="font-size: 14px;">&#xe600;</i>
</div>
<!-- <div class="shape___2nUUi">
<i class="iconfont" style="font-size: 14px;">&#xe60b;</i>
</div>
<div class="shape___2nUUi">
<i class="iconfont" style="font-size: 14px;">&#xe684;</i>
</div> -->
<div class="shape___2nUUi" data-type="table" id="setupbaobiao-table">
<i class="iconfont" style="font-size: 14px;">&#xe670;</i>
</div>
</div>
</div>
</div>
</div>
<div class="setupbaobiao-left-from-list-box">
<span class="setupbaobiao-left-from-list-title">视窗大小</span>
<div class="setupbaobiao-left-from-list-radio">
<div class="setupbaobiao-left-from-list-radio-box">
<div>
<input type="radio" name="modelsize" value="small" id="setupbaobiao-small">小图
</div>
<div style="margin-left: 20px;">
<input type="radio" name="modelsize" value="in" id="setupbaobiao-in">中图
</div>
<div style="margin-left: 20px;">
<input type="radio" name="modelsize" value="large" id="setupbaobiao-large">大图
</div>
</div>
</div>
</div>
<p class="setupbaobiao-zs">小图:只展示最核心数据,适用于定位核心数据数值</p>
<p class="setupbaobiao-zs">中图:根据图表类型展示,使用于快速浏览图表信息</p>
<p class="setupbaobiao-zs">大图:根据图表类型展示,适用于细致观察图表信息</p>
</div>
</div>
</div>
</div>
<script id="setupbaobiao-select-dot" type="text/html">
{{# layui.each(d, function(index, item) { }}
<option value="{{item.id}}">{{item.title}}</option>
{{# }); }}
</script>

345
web/src/x.min.js vendored
View File

@ -80,8 +80,32 @@ var X = window.X || {
{'title': "UTC-07:00",id:7},
{'title': "UTC±00:00",id:0}
],
'analysis':{
'analysis':{},
'screenlist':{
'event':[
{'title':'按天','id':'P1D'},
{'title':'按分钟','id':'PT1M'},
{'title':'每五分钟','id':'PT5M'},
{'title':'每十分钟','id':'PT10M'},
{'title':'每十五分钟','id':'PT15M'},
{'title':'按小时','id':'PT1H'},
{'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'}
]
}
},
};
@ -156,6 +180,43 @@ var X = window.X || {
});
};
//下载报表
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
}
}
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);
@ -478,12 +539,24 @@ var X = window.X || {
var titledata,condata = [];
for(let i in data){
if(data[i]['values'].length > 0 ){
if(data[i]['groups']['length'] == 0){
titledata= $.extend(true,[],data[0]['date_range']);
titledata.unshift('指标','阶段总和');
condata.push(data[i].values[0]);
condata[i].unshift(data[i]['event_name'],data[i]['sum']);
if(data[i]['groups']['length'] != 0){
for(let j in data[i]['values']){
var arr;
arr = $.extend(true,[],data[i].values[j])
arr.unshift(data[i]['event_name'],data[i]['sum'][j]);
condata.push(arr);
}
// condata.push(data[i].values[0]);
// condata[i].unshift(data[i]['event_name'],data[i]['sum']);
// console.log(condata);
}else {
var arr;
arr = $.extend(true,[],data[i].values[0])
arr.unshift(data[i]['event_name'],data[i]['sum'][0]);
condata.push(arr)
}
}else {
layer.msg('查询数据为空');
@ -493,7 +566,6 @@ var X = window.X || {
titledata:titledata,
condata:condata
}
callback && callback(dataArr);
};
@ -510,6 +582,7 @@ var X = window.X || {
var mean = 0;
var sameday = 0;
var date;
var wowtype,chain_ratiotype;//判断较环比和较同比的正负
var length = data[0]['date_range'].length - 1;
date = data[0]['date_range'][length];
@ -518,8 +591,6 @@ var X = window.X || {
var arr = {
name: '',
type: 'line',
stack: '总量',
data: data[i]['values'][z]
}
seriesData.push(arr);
@ -537,6 +608,18 @@ var X = window.X || {
}
}
if(data[0]['wow'] >= 0){
wowtype = '+'
}else{
wowtype = '-'
}
if(data[0]['chain_ratio'] >= 0){
chain_ratiotype = '+'
}else{
chain_ratiotype = '-'
}
console.log(111,data[0]['date_range']);
var dataArr = {
xAxisData:data[0]['date_range'],
legenddata:legenddata,
@ -544,14 +627,20 @@ var X = window.X || {
date:date,
sum:sum,
mean:mean,
sameday: sameday
sameday: sameday,
wowtype:wowtype,
wow: 0,
chain_ratio: 0,
// wow: Math.abs(data[0]['wow']),//环比
// chain_ratio: Math.abs(data[0]['chain_ratio']),//同比
chain_ratiotype:chain_ratiotype
}
callback && callback(dataArr);
};
X.eventsmall = function(data,callback){
var date,num,thedayprop,weekprop,thedaypropsize,weekpropsize; //时间,当天数量,与前天对比,与上个星期对比,与前天对比正负,与上个星期对比正负
var date,num,wowtype,chain_ratiotype; //时间,当天数量
// console.log(data);
// for(let i in data){
// if(data[i]['groups']['length'] == 0){
@ -562,32 +651,23 @@ var X = window.X || {
var length = data[0]['date_range'].length - 1;
date = data[0]['date_range'][length];
num = data[0]['values'][0][length];
thedayprop = num / data[0]['values'][0][length - 1];
weekprop = num / data[0]['values'][0][length - 8];
var prop1,prop2;
if(thedayprop >= 1){
prop1 = parseFloat((thedayprop - 1)*100);
thedaypropsize = '+';
if(data[0]['wow'] >= 0){
wowtype = '+'
}else{
prop1 = parseFloat((1 - thedayprop)*100);
thedaypropsize = '-';
wowtype = '-'
}
if(weekprop >= 1){
prop2 = parseFloat((weekprop - 1)*100);
weekpropsize = '+';
if(data[0]['chain_ratio'] >= 0){
chain_ratiotype = '+'
}else{
prop2 = parseFloat((1 - weekprop)*100);
weekpropsize = '-';
chain_ratiotype = '-'
}
var dataArr = {
date: date,
num: num,
thedayprop: prop1.toFixed(2),
thedaypropsize:thedaypropsize,
weekprop: weekprop.toFixed(2),
weekpropsize:weekpropsize
wowtype: wowtype,
chain_ratiotype: chain_ratiotype
}
callback && callback(dataArr);
};
@ -2409,19 +2489,7 @@ var X = window.X || {
});
// 时间粒度
var timeParticleSizearr = [
{'title':'按天','id':'P1D'},
{'title':'按分钟','id':'PT1M'},
{'title':'每五分钟','id':'PT5M'},
{'title':'每十分钟','id':'PT10M'},
{'title':'每十五分钟','id':'PT15M'},
{'title':'按小时','id':'PT1H'},
{'title':'按周','id':'P1W'},
{'title':'按月','id':'P1M'},
{'title':'合计','id':'total'},
];
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['event'],function(d){
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['timeParticleSize'] = d.id;
calculationdata();
@ -2551,6 +2619,9 @@ var X = window.X || {
seriesData[i]['name'] = xAxisData[i];
}
}
console.log(xAxisData)
console.log(seriesData)
console.log(d[0]['date_range']);
var myChart = echarts.init(document.getElementById('analysis-echarts'));
var option = {
title: {
@ -2763,8 +2834,6 @@ var X = window.X || {
if(d[0].values.length > 0 ){
updata();
tabledata(d);
// stackingdiagram(d);
// tabledata(d);
}else {
$("#analysis-echarts").empty();
layer.msg("无数据");
@ -3877,7 +3946,6 @@ var X = window.X || {
//更新报表
$(document).off('click','.model-gengx').on('click','.model-gengx',function(){
var id = $(this).attr('data-id');
// console.log(id);
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(d){
// return;
X.pageLogic['dashboard'].fillmodeldata(d[id]);
@ -3929,7 +3997,6 @@ var X = window.X || {
//删除看板
$(document).off('click','.nav-action-bar').on('click','.nav-action-bar',function(e){
e.stopPropagation();
// console.log('更多操作按钮');
var obj = $(this);
var offset = obj.offset();
var offsets = [ offset.top + 10,offset.left];
@ -3978,10 +4045,30 @@ var X = window.X || {
//填充看板数据
//总体逻辑是:根据获取到的看板内容去先渲染放置的框,在根据不同分析模型处理对应的数据进行填充
fillmodeldata:function(d,id,type){//
// console.log(d);
X.api("ck/"+d['model']+"_model","post",{report_id:d['report_id']},function(val){
var eventdata=[];
var eventdata = X.pageLogic['dashboard'].modeldata(d,val,type);
var data;
if(eventdata.length > 0){
for(var z in eventdata){
if(id){
//当有id时更新对应id看板内的内容
X.template("modeltable",id,eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}else {
//渲染模板和数据
X.template("modeltable",'model'+eventdata[z]['id'],eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}
}
}
})
},
modeldata:function(d,val,type){
var eventdata = [];
if(d['model'] == "event"){
// 事件分析
if(d['graph_size'] == 'small'){
@ -3991,6 +4078,8 @@ var X = window.X || {
data['id'] = d['report_id'];
data['modelsize'] = d['graph_size'];
data['cat'] = d['model'];
data['wow'] = Math.abs(val[0]['wow']);
data['chain_ratio'] = Math.abs(val[0]['chain_ratio']);
eventdata.push(data);
})
}else {
@ -4090,34 +4179,8 @@ var X = window.X || {
eventdata.push(data);
})
}
}
if(eventdata.length > 0){
for(var z in eventdata){
if(id){
//当有id时更新对应id看板内的内容
X.template("modeltable",id,eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}else {
//渲染模板和数据
X.template("modeltable",'model'+eventdata[z]['id'],eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}
}
}
// $('.layui-row').dad({
// draggable: '.layui-card'
// });
// $('.layui-row').dad({
// draggable:'table'
// });
})
return eventdata;
},
//画统计图和添加移入移出事件
@ -4142,7 +4205,6 @@ var X = window.X || {
name:name
}
X.api('dashboard/edit_show_report','post',{dashboard_id:X.DATA.dashboard_id,config:data},function(d){
// console.log(d);
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(val){
for(let i in val){
if(val[i]['report_id'] == id){
@ -4161,8 +4223,7 @@ var X = window.X || {
]
if(eventdata.cat == 'retention'){
X.laydropdown("#retention"+eventdata.id,retentionlist,function(d){
console.log(d.id);
console.log(eventdata);
var retentiontype = d.id;
var modelid = "retention"+eventdata.id;
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(val){
@ -4178,7 +4239,6 @@ var X = window.X || {
//更多按钮配置下拉框
X.laydropdown(".model-gengduo",X['DATA']['gengduolist'],function(d){
console.log(eventdata);
if(d.id == 'shezhi'){
var data = {
id : eventdata.id,
@ -4186,10 +4246,10 @@ var X = window.X || {
modeltype : eventdata.modeltype
}
X.parametersopen(data,'setupbaobiao',"auto",function(d){
X.pageLogic['dashboard'].gettabledata();
})
}else if(d.id == 'export'){
layer.msg('暂未开放功能');
X.download('ck/event_model_export',{report_id:eventdata.id},eventdata.name);
}else {
layer.confirm('确认移除['+ eventdata.name + ']', {
@ -4203,11 +4263,46 @@ var X = window.X || {
X.pageLogic['dashboard'].gettabledata();
});
});
}
});
//设置时间
X.daterender(".model-times",function(start, end, label){
// console.log(eventdata);
// console.log('times'+eventdata.id);
var id = 'times'+eventdata.id;
$("#"+id).html('111');
});
X.laydropdown(".model-screenlist",X['DATA']['screenlist'][eventdata.cat],function(d){
var modelid = eventdata['cat']+eventdata.id;
var reportid = [];
reportid.push(eventdata.id);
X.api('report/read_report','post',{project_id:X.DATA['projectid'],report_id:reportid},function(val){
var query = {
eventView:val[0]['query']['eventView'],
events:val[0]['query']['events'],
};
query['eventView']['timeParticleSize'] = d.id;
X.api("ck/"+ eventdata.cat +"_model","post",query,function(val){
var bbsetdata = {
graph_size:eventdata['modelsize'],
graph_type:eventdata['modeltype'],
model:eventdata['cat'],
name:eventdata['name'],
report_id:eventdata['id'],
}
var modeldata = X.pageLogic['dashboard'].modeldata(bbsetdata,val);
// console.log(modeldata);
//渲染模板和数据
X.template("modeltable",'model'+modeldata[0]['id'],modeldata[0],function(){
X.pageLogic['dashboard'].morefeatures(modeldata);
});
})
})
});
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
var myChart = echarts.init(document.getElementById(eventdata['id']));
@ -4253,9 +4348,6 @@ var X = window.X || {
};
}else{
var option = {
title: {
text: ''
},
color: X.DATA.echartscolor,
tooltip: {
trigger: 'axis',
@ -4280,7 +4372,7 @@ var X = window.X || {
xAxis: [
{
type: 'category',
boundaryGap: false,
axisTick: {show: false},
data: eventdata['xAxisData']
}
],
@ -4294,7 +4386,7 @@ var X = window.X || {
}
myChart.setOption(option,true);
}
};
},
@ -4675,7 +4767,7 @@ var X = window.X || {
"comparator_name":d[0]['category'][0]['category'][0]['title'],//选择符号中文显示
"comparator":d[0]['category'][0]['category'][0]['id'],//符号id
"data_type":d[0]['category'][0]['data_type'],
"ftv":'',//条件
"ftv":[],//条件
"strftv":'',//字符串显示条件
"tableType": d[0]['id']
} //筛选数据
@ -4775,13 +4867,7 @@ var X = window.X || {
})
// 时间粒度
var timeParticleSizearr = [
{'title':'按天','id':'P1D'},
{'title':'按周','id':'P1W'},
{'title':'按月','id':'P1M'},
{'title':'合计','id':'total'}
]
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['distribution'],function(d){
console.log(d);
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['timeParticleSize'] = d.id;
@ -7069,7 +7155,7 @@ var X = window.X || {
this.parms = parms;
this.callback = parms.callback;
var data = parms;
console.log(data);
X.laytpldata("#kanban-model-modify-table-dot",data,"model"+data.id,function(html){
$("#model"+data.id).html(html);
@ -8270,14 +8356,7 @@ var X = window.X || {
});
// 时间粒度
var timeParticleSizearr = [
{'title':'当日','id':'1'},
{'title':'次日','id':'2'},
{'title':'7日','id':'7'},
{'title':'14日','id':'14'},
{'title':'30日','id':'30'},
];
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['retention'],function(d){
// console.log(d);
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['unitNum'] = parseInt(d.id);
@ -8365,6 +8444,7 @@ var X = window.X || {
else if(title == '每日留存'){ $(".table-div-box").hide(); $(".analysis-echarts").show(); retaineddayRetained(d) }
};
//数据报表渲染
function retainedtable(d){
var nname,pname
if(retentiontype == 0) {
@ -8507,7 +8587,7 @@ var X = window.X || {
};
myChart.setOption(option,true);
};
// 第N日留存
function retainednRetained(d){
var nname,pname
if(retentiontype == 0) {
@ -9750,14 +9830,15 @@ var X = window.X || {
init : function(parms){
var me = this;
this.parms = parms;
this.callback = parms.callback;
var data = parms.extData;
var report_id = [];
console.log(data);
report_id.push(data.id);
var postdata;//上传数据
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_id},function(d){
console.log(d);
postdata = d;
$('.setupbaobiao-title').val(d[0]['name']);
$('.setupbaobiao-textarea').html(d[0]['desc']);
$('.setupbaobiao-textarea').val(d[0]['desc']);
// 初始化时间
var endTime = d[0]['query']['eventView']['endTime'];
var startTime = d[0]['query']['eventView']['startTime'];
@ -9775,15 +9856,34 @@ var X = window.X || {
}else{//大图
$("#setupbaobiao-large").prop("checked",true);
}
X.laytpldata("#setupbaobiao-select-dot",X['DATA']['screenlist'][d[0]['cat']],".setupbaobiao-select");
});
X.daterender(".setupbaobiao-rli-box2",function(start, end, label){
var startTime = start.format('YYYY-MM-DD')+ " "+ "00:00:00";
var endTime = end.format('YYYY-MM-DD')+ " "+ "23:59:59";
postdata[0]['query']['eventView']['startTime'] = startTime;
postdata[0]['query']['eventView']['endTime'] = endTime;
$(".setupbaobiao-time").html(startTime +' - '+ endTime);
var sameday = Date.parse(new Date()) / 1000; //当天时间戳
var enddate = new Date(end.format('YYYY-MM-DD'));
var endmonth = Date.parse(enddate)/1000;
var startdate = new Date(start.format('YYYY-MM-DD'));
var startmonth = Date.parse(startdate)/1000;
postdata[0]['query']['e_days'] = parseInt((sameday - endmonth)/86400);
postdata[0]['query']['s_days'] = parseInt((sameday - startmonth)/86400);
console.log(startTime);
console.log(endTime);
});
// 分析时间粒度
$(document).off('click','.setupbaobiao-select').on('change','.setupbaobiao-select',function(){
postdata[0]['query']['eventView']['timeParticleSize'] = $(this).val();
});
$(document).off('click','.shape___2nUUi').on('click','.shape___2nUUi',function(){
$('.shape___2nUUi').removeClass('icon___XxbtJ');
@ -9795,6 +9895,35 @@ var X = window.X || {
});
$(document).off('click','.setupbaobiao-yy').on('click','.setupbaobiao-yy',function(){
var title = $('.setupbaobiao-title').val();
var desc = $(".setupbaobiao-textarea").val();
var modeltype = $(".icon___XxbtJ").attr('data-type');
var modelsize = $('input:radio[name="modelsize"]:checked').val()
var arr = {
_id:X.DATA.dashboard_id,
report:{
name: title,
report_id:postdata[0]['_id'],
desc:desc,
model:postdata[0]['cat'],
graph_type:modeltype,
graph_size:modelsize
}
}
console.log(arr);
X.api('dashboard/edit_report','post',arr,function(d){
console.log(d);
var reportedit = {
name: title,
desc:desc,
query:postdata[0]['query'],
report_id:postdata[0]['_id']
}
X.api('report/edit','post',reportedit,function(d){
me.callback && me.callback(d);
layer.closeAll();
})
})
});

View File

@ -79,8 +79,32 @@ var X = window.X || {
{'title': "UTC-07:00",id:7},
{'title': "UTC±00:00",id:0}
],
'analysis':{
'analysis':{},
'screenlist':{
'event':[
{'title':'按天','id':'P1D'},
{'title':'按分钟','id':'PT1M'},
{'title':'每五分钟','id':'PT5M'},
{'title':'每十分钟','id':'PT10M'},
{'title':'每十五分钟','id':'PT15M'},
{'title':'按小时','id':'PT1H'},
{'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'}
]
}
},
};
@ -155,6 +179,43 @@ var X = window.X || {
});
};
//下载报表
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
}
}
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);
@ -477,12 +538,24 @@ var X = window.X || {
var titledata,condata = [];
for(let i in data){
if(data[i]['values'].length > 0 ){
if(data[i]['groups']['length'] == 0){
titledata= $.extend(true,[],data[0]['date_range']);
titledata.unshift('指标','阶段总和');
condata.push(data[i].values[0]);
condata[i].unshift(data[i]['event_name'],data[i]['sum']);
if(data[i]['groups']['length'] != 0){
for(let j in data[i]['values']){
var arr;
arr = $.extend(true,[],data[i].values[j])
arr.unshift(data[i]['event_name'],data[i]['sum'][j]);
condata.push(arr);
}
// condata.push(data[i].values[0]);
// condata[i].unshift(data[i]['event_name'],data[i]['sum']);
// console.log(condata);
}else {
var arr;
arr = $.extend(true,[],data[i].values[0])
arr.unshift(data[i]['event_name'],data[i]['sum'][0]);
condata.push(arr)
}
}else {
layer.msg('查询数据为空');
@ -492,7 +565,6 @@ var X = window.X || {
titledata:titledata,
condata:condata
}
callback && callback(dataArr);
};
@ -509,6 +581,7 @@ var X = window.X || {
var mean = 0;
var sameday = 0;
var date;
var wowtype,chain_ratiotype;//判断较环比和较同比的正负
var length = data[0]['date_range'].length - 1;
date = data[0]['date_range'][length];
@ -517,8 +590,6 @@ var X = window.X || {
var arr = {
name: '',
type: 'line',
stack: '总量',
data: data[i]['values'][z]
}
seriesData.push(arr);
@ -536,6 +607,18 @@ var X = window.X || {
}
}
if(data[0]['wow'] >= 0){
wowtype = '+'
}else{
wowtype = '-'
}
if(data[0]['chain_ratio'] >= 0){
chain_ratiotype = '+'
}else{
chain_ratiotype = '-'
}
console.log(111,data[0]['date_range']);
var dataArr = {
xAxisData:data[0]['date_range'],
legenddata:legenddata,
@ -543,14 +626,20 @@ var X = window.X || {
date:date,
sum:sum,
mean:mean,
sameday: sameday
sameday: sameday,
wowtype:wowtype,
wow: 0,
chain_ratio: 0,
// wow: Math.abs(data[0]['wow']),//环比
// chain_ratio: Math.abs(data[0]['chain_ratio']),//同比
chain_ratiotype:chain_ratiotype
}
callback && callback(dataArr);
};
X.eventsmall = function(data,callback){
var date,num,thedayprop,weekprop,thedaypropsize,weekpropsize; //时间,当天数量,与前天对比,与上个星期对比,与前天对比正负,与上个星期对比正负
var date,num,wowtype,chain_ratiotype; //时间,当天数量
// console.log(data);
// for(let i in data){
// if(data[i]['groups']['length'] == 0){
@ -561,32 +650,23 @@ var X = window.X || {
var length = data[0]['date_range'].length - 1;
date = data[0]['date_range'][length];
num = data[0]['values'][0][length];
thedayprop = num / data[0]['values'][0][length - 1];
weekprop = num / data[0]['values'][0][length - 8];
var prop1,prop2;
if(thedayprop >= 1){
prop1 = parseFloat((thedayprop - 1)*100);
thedaypropsize = '+';
if(data[0]['wow'] >= 0){
wowtype = '+'
}else{
prop1 = parseFloat((1 - thedayprop)*100);
thedaypropsize = '-';
wowtype = '-'
}
if(weekprop >= 1){
prop2 = parseFloat((weekprop - 1)*100);
weekpropsize = '+';
if(data[0]['chain_ratio'] >= 0){
chain_ratiotype = '+'
}else{
prop2 = parseFloat((1 - weekprop)*100);
weekpropsize = '-';
chain_ratiotype = '-'
}
var dataArr = {
date: date,
num: num,
thedayprop: prop1.toFixed(2),
thedaypropsize:thedaypropsize,
weekprop: weekprop.toFixed(2),
weekpropsize:weekpropsize
wowtype: wowtype,
chain_ratiotype: chain_ratiotype
}
callback && callback(dataArr);
};

View File

@ -734,19 +734,7 @@
});
// 时间粒度
var timeParticleSizearr = [
{'title':'按天','id':'P1D'},
{'title':'按分钟','id':'PT1M'},
{'title':'每五分钟','id':'PT5M'},
{'title':'每十分钟','id':'PT10M'},
{'title':'每十五分钟','id':'PT15M'},
{'title':'按小时','id':'PT1H'},
{'title':'按周','id':'P1W'},
{'title':'按月','id':'P1M'},
{'title':'合计','id':'total'},
];
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['event'],function(d){
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['timeParticleSize'] = d.id;
calculationdata();
@ -876,6 +864,9 @@
seriesData[i]['name'] = xAxisData[i];
}
}
console.log(xAxisData)
console.log(seriesData)
console.log(d[0]['date_range']);
var myChart = echarts.init(document.getElementById('analysis-echarts'));
var option = {
title: {
@ -1088,8 +1079,6 @@
if(d[0].values.length > 0 ){
updata();
tabledata(d);
// stackingdiagram(d);
// tabledata(d);
}else {
$("#analysis-echarts").empty();
layer.msg("无数据");

View File

@ -243,7 +243,6 @@
//更新报表
$(document).off('click','.model-gengx').on('click','.model-gengx',function(){
var id = $(this).attr('data-id');
// console.log(id);
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(d){
// return;
X.pageLogic['dashboard'].fillmodeldata(d[id]);
@ -295,7 +294,6 @@
//删除看板
$(document).off('click','.nav-action-bar').on('click','.nav-action-bar',function(e){
e.stopPropagation();
// console.log('更多操作按钮');
var obj = $(this);
var offset = obj.offset();
var offsets = [ offset.top + 10,offset.left];
@ -344,10 +342,30 @@
//填充看板数据
//总体逻辑是:根据获取到的看板内容去先渲染放置的框,在根据不同分析模型处理对应的数据进行填充
fillmodeldata:function(d,id,type){//
// console.log(d);
X.api("ck/"+d['model']+"_model","post",{report_id:d['report_id']},function(val){
var eventdata=[];
var eventdata = X.pageLogic['dashboard'].modeldata(d,val,type);
var data;
if(eventdata.length > 0){
for(var z in eventdata){
if(id){
//当有id时更新对应id看板内的内容
X.template("modeltable",id,eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}else {
//渲染模板和数据
X.template("modeltable",'model'+eventdata[z]['id'],eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}
}
}
})
},
modeldata:function(d,val,type){
var eventdata = [];
if(d['model'] == "event"){
// 事件分析
if(d['graph_size'] == 'small'){
@ -357,6 +375,8 @@
data['id'] = d['report_id'];
data['modelsize'] = d['graph_size'];
data['cat'] = d['model'];
data['wow'] = Math.abs(val[0]['wow']);
data['chain_ratio'] = Math.abs(val[0]['chain_ratio']);
eventdata.push(data);
})
}else {
@ -456,34 +476,8 @@
eventdata.push(data);
})
}
}
if(eventdata.length > 0){
for(var z in eventdata){
if(id){
//当有id时更新对应id看板内的内容
X.template("modeltable",id,eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}else {
//渲染模板和数据
X.template("modeltable",'model'+eventdata[z]['id'],eventdata[z],function(){
X.pageLogic['dashboard'].morefeatures(eventdata[z]);
});
}
}
}
// $('.layui-row').dad({
// draggable: '.layui-card'
// });
// $('.layui-row').dad({
// draggable:'table'
// });
})
return eventdata;
},
//画统计图和添加移入移出事件
@ -508,7 +502,6 @@
name:name
}
X.api('dashboard/edit_show_report','post',{dashboard_id:X.DATA.dashboard_id,config:data},function(d){
// console.log(d);
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(val){
for(let i in val){
if(val[i]['report_id'] == id){
@ -527,8 +520,7 @@
]
if(eventdata.cat == 'retention'){
X.laydropdown("#retention"+eventdata.id,retentionlist,function(d){
console.log(d.id);
console.log(eventdata);
var retentiontype = d.id;
var modelid = "retention"+eventdata.id;
X.api('dashboard/','post',{id:X.DATA['dashboard_id']},function(val){
@ -544,7 +536,6 @@
//更多按钮配置下拉框
X.laydropdown(".model-gengduo",X['DATA']['gengduolist'],function(d){
console.log(eventdata);
if(d.id == 'shezhi'){
var data = {
id : eventdata.id,
@ -552,10 +543,10 @@
modeltype : eventdata.modeltype
}
X.parametersopen(data,'setupbaobiao',"auto",function(d){
X.pageLogic['dashboard'].gettabledata();
})
}else if(d.id == 'export'){
layer.msg('暂未开放功能');
X.download('ck/event_model_export',{report_id:eventdata.id},eventdata.name);
}else {
layer.confirm('确认移除['+ eventdata.name + ']', {
@ -569,11 +560,46 @@
X.pageLogic['dashboard'].gettabledata();
});
});
}
});
//设置时间
X.daterender(".model-times",function(start, end, label){
// console.log(eventdata);
// console.log('times'+eventdata.id);
var id = 'times'+eventdata.id;
$("#"+id).html('111');
});
X.laydropdown(".model-screenlist",X['DATA']['screenlist'][eventdata.cat],function(d){
var modelid = eventdata['cat']+eventdata.id;
var reportid = [];
reportid.push(eventdata.id);
X.api('report/read_report','post',{project_id:X.DATA['projectid'],report_id:reportid},function(val){
var query = {
eventView:val[0]['query']['eventView'],
events:val[0]['query']['events'],
};
query['eventView']['timeParticleSize'] = d.id;
X.api("ck/"+ eventdata.cat +"_model","post",query,function(val){
var bbsetdata = {
graph_size:eventdata['modelsize'],
graph_type:eventdata['modeltype'],
model:eventdata['cat'],
name:eventdata['name'],
report_id:eventdata['id'],
}
var modeldata = X.pageLogic['dashboard'].modeldata(bbsetdata,val);
// console.log(modeldata);
//渲染模板和数据
X.template("modeltable",'model'+modeldata[0]['id'],modeldata[0],function(){
X.pageLogic['dashboard'].morefeatures(modeldata);
});
})
})
});
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
var myChart = echarts.init(document.getElementById(eventdata['id']));
@ -619,9 +645,6 @@
};
}else{
var option = {
title: {
text: ''
},
color: X.DATA.echartscolor,
tooltip: {
trigger: 'axis',
@ -646,7 +669,7 @@
xAxis: [
{
type: 'category',
boundaryGap: false,
axisTick: {show: false},
data: eventdata['xAxisData']
}
],
@ -660,7 +683,7 @@
}
myChart.setOption(option,true);
}
};
},

View File

@ -215,7 +215,7 @@
"comparator_name":d[0]['category'][0]['category'][0]['title'],//选择符号中文显示
"comparator":d[0]['category'][0]['category'][0]['id'],//符号id
"data_type":d[0]['category'][0]['data_type'],
"ftv":'',//条件
"ftv":[],//条件
"strftv":'',//字符串显示条件
"tableType": d[0]['id']
} //筛选数据
@ -315,13 +315,7 @@
})
// 时间粒度
var timeParticleSizearr = [
{'title':'按天','id':'P1D'},
{'title':'按周','id':'P1W'},
{'title':'按月','id':'P1M'},
{'title':'合计','id':'total'}
]
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['distribution'],function(d){
console.log(d);
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['timeParticleSize'] = d.id;

View File

@ -5,7 +5,7 @@
this.parms = parms;
this.callback = parms.callback;
var data = parms;
console.log(data);
X.laytpldata("#kanban-model-modify-table-dot",data,"model"+data.id,function(html){
$("#model"+data.id).html(html);

View File

@ -475,14 +475,7 @@
});
// 时间粒度
var timeParticleSizearr = [
{'title':'当日','id':'1'},
{'title':'次日','id':'2'},
{'title':'7日','id':'7'},
{'title':'14日','id':'14'},
{'title':'30日','id':'30'},
];
X.laydropdown('.analtsis-timeParticleSize',timeParticleSizearr,function(d){
X.laydropdown('.analtsis-timeParticleSize',X['DATA']['screenlist']['retention'],function(d){
// console.log(d);
$(".analtsis-timeParticleSize").html(d.title);
data['eventView']['unitNum'] = parseInt(d.id);
@ -570,6 +563,7 @@
else if(title == '每日留存'){ $(".table-div-box").hide(); $(".analysis-echarts").show(); retaineddayRetained(d) }
};
//数据报表渲染
function retainedtable(d){
var nname,pname
if(retentiontype == 0) {
@ -712,7 +706,7 @@
};
myChart.setOption(option,true);
};
// 第N日留存
function retainednRetained(d){
var nname,pname
if(retentiontype == 0) {

View File

@ -0,0 +1,105 @@
(function(){
X.pageLogic['setupbaobiao'] = {
init : function(parms){
var me = this;
this.parms = parms;
this.callback = parms.callback;
var data = parms.extData;
var report_id = [];
report_id.push(data.id);
var postdata;//上传数据
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_id},function(d){
postdata = d;
$('.setupbaobiao-title').val(d[0]['name']);
$('.setupbaobiao-textarea').val(d[0]['desc']);
// 初始化时间
var endTime = d[0]['query']['eventView']['endTime'];
var startTime = d[0]['query']['eventView']['startTime'];
$(".setupbaobiao-time").html(startTime +' - '+ endTime);
if(data.modeltype == "table"){ //初始化图表类型
$("#setupbaobiao-table").addClass("icon___XxbtJ");
}else {
$("#setupbaobiao-echarts").addClass("icon___XxbtJ");
}
//初始化窗体大小
if(data.modelsize == 'in'){ //中图
$("#setupbaobiao-in").prop("checked",true);
}else if( data.modelsize == 'small' ){//小图
$("#setupbaobiao-small").prop("checked",true);
}else{//大图
$("#setupbaobiao-large").prop("checked",true);
}
X.laytpldata("#setupbaobiao-select-dot",X['DATA']['screenlist'][d[0]['cat']],".setupbaobiao-select");
});
X.daterender(".setupbaobiao-rli-box2",function(start, end, label){
var startTime = start.format('YYYY-MM-DD')+ " "+ "00:00:00";
var endTime = end.format('YYYY-MM-DD')+ " "+ "23:59:59";
postdata[0]['query']['eventView']['startTime'] = startTime;
postdata[0]['query']['eventView']['endTime'] = endTime;
$(".setupbaobiao-time").html(startTime +' - '+ endTime);
var sameday = Date.parse(new Date()) / 1000; //当天时间戳
var enddate = new Date(end.format('YYYY-MM-DD'));
var endmonth = Date.parse(enddate)/1000;
var startdate = new Date(start.format('YYYY-MM-DD'));
var startmonth = Date.parse(startdate)/1000;
postdata[0]['query']['e_days'] = parseInt((sameday - endmonth)/86400);
postdata[0]['query']['s_days'] = parseInt((sameday - startmonth)/86400);
console.log(startTime);
console.log(endTime);
});
// 分析时间粒度
$(document).off('click','.setupbaobiao-select').on('change','.setupbaobiao-select',function(){
postdata[0]['query']['eventView']['timeParticleSize'] = $(this).val();
});
$(document).off('click','.shape___2nUUi').on('click','.shape___2nUUi',function(){
$('.shape___2nUUi').removeClass('icon___XxbtJ');
$(this).addClass('icon___XxbtJ');
});
$(document).off('click','.setupbaobiao-xq').on('click','.setupbaobiao-xq',function(){
layer.closeAll();
});
$(document).off('click','.setupbaobiao-yy').on('click','.setupbaobiao-yy',function(){
var title = $('.setupbaobiao-title').val();
var desc = $(".setupbaobiao-textarea").val();
var modeltype = $(".icon___XxbtJ").attr('data-type');
var modelsize = $('input:radio[name="modelsize"]:checked').val()
var arr = {
_id:X.DATA.dashboard_id,
report:{
name: title,
report_id:postdata[0]['_id'],
desc:desc,
model:postdata[0]['cat'],
graph_type:modeltype,
graph_size:modelsize
}
}
console.log(arr);
X.api('dashboard/edit_report','post',arr,function(d){
console.log(d);
var reportedit = {
name: title,
desc:desc,
query:postdata[0]['query'],
report_id:postdata[0]['_id']
}
X.api('report/edit','post',reportedit,function(d){
me.callback && me.callback(d);
layer.closeAll();
})
})
});
}
};
})();

View File

@ -159,7 +159,7 @@
.echarts-box { padding: 0 24px; margin-top: 10px; height: 204px; }
.layui-card:last-child { padding-bottom: 12px; }
.echarts { width: 100%; height: 204px; }
.control { height: 21px; display: none; }
.control { height: 21px; display: block; }
.tool-show .control { display: block; }
.table-box { margin: 10px 24px 0 24px; height: 283px; overflow-x: auto; overflow-y: hidden; }