1
This commit is contained in:
parent
8eda14c3db
commit
5ca1930de7
@ -29,6 +29,9 @@
|
|||||||
|
|
||||||
<script src="./src/jquery.dad.min.js" type="text/javascript"></script>
|
<script src="./src/jquery.dad.min.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
<!-- table -->
|
||||||
|
<script src="./src/FixedTable.js" type="text/javascript"></script>
|
||||||
|
|
||||||
|
|
||||||
<!-- <script src="./src/doT.js"></script> -->
|
<!-- <script src="./src/doT.js"></script> -->
|
||||||
<!-- <script src="./src/puble.js"></script> -->
|
<!-- <script src="./src/puble.js"></script> -->
|
||||||
|
@ -179,9 +179,9 @@
|
|||||||
<div class="row-top controlhover">
|
<div class="row-top controlhover">
|
||||||
<div class="row-tit">
|
<div class="row-tit">
|
||||||
<p><a href="javascript:;" class="gobaobiaoinfo" data-cat="{{d.cat}}" data-id="{{d.id}}">{{d.name}}</a></p>
|
<p><a href="javascript:;" class="gobaobiaoinfo" data-cat="{{d.cat}}" data-id="{{d.id}}">{{d.name}}</a></p>
|
||||||
<div class="tishi" title="活跃用户可以通过“登录.触发用户数”来进行计算,即有登录行为的用户的去重数.">
|
<!-- <div class="tishi" title="活跃用户可以通过“登录.触发用户数”来进行计算,即有登录行为的用户的去重数.">
|
||||||
<img src="./static/img/tishi.png" />
|
<img src="./static/img/tishi.png" />
|
||||||
</div>
|
</div> -->
|
||||||
</div>
|
</div>
|
||||||
<div class="control">
|
<div class="control">
|
||||||
<div class="action-box" >
|
<div class="action-box" >
|
||||||
|
@ -112,6 +112,7 @@
|
|||||||
<div class="analtsis-time-box">
|
<div class="analtsis-time-box">
|
||||||
<div class="analtsis-condition" > <input id="retained-condition-date" readonly="readonly"></input> </div>
|
<div class="analtsis-condition" > <input id="retained-condition-date" readonly="readonly"></input> </div>
|
||||||
<div class="analtsis-condition analtsis-timeParticleSize">7天</div>
|
<div class="analtsis-condition analtsis-timeParticleSize">7天</div>
|
||||||
|
<div class="analtsis-condition retention-loss">留存</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="analtsis-condition-right-box">
|
<div class="analtsis-condition-right-box">
|
||||||
|
621
web/src/FixedTable.js
Normal file
621
web/src/FixedTable.js
Normal file
@ -0,0 +1,621 @@
|
|||||||
|
/*
|
||||||
|
* @Author: 李燕南
|
||||||
|
* @Date: 2017-08-30 16:52:50
|
||||||
|
* @Last Modified by: 李燕南
|
||||||
|
* @Last Modified time: 2017-09-20 19:58:19
|
||||||
|
*/
|
||||||
|
;(function (factory){
|
||||||
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
define( ["jquery"], factory );
|
||||||
|
} else if (typeof module === "object" && module.exports) {
|
||||||
|
module.exports = factory( require( "jquery" ) );
|
||||||
|
} else {
|
||||||
|
window.FixedTable = factory( jQuery );
|
||||||
|
try{
|
||||||
|
if(typeof define === "function"){
|
||||||
|
define(function (require){
|
||||||
|
return factory(require("jquery"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}catch(e){}
|
||||||
|
}
|
||||||
|
})(function ($){
|
||||||
|
function FixedTable(options){
|
||||||
|
this._init(options);
|
||||||
|
}
|
||||||
|
FixedTable._sequence = 0;
|
||||||
|
|
||||||
|
$.extend(FixedTable.prototype, {
|
||||||
|
_init: function (options){
|
||||||
|
if(!options || !$.isPlainObject(options)){
|
||||||
|
throw "缺少init所需的对象!";
|
||||||
|
}
|
||||||
|
this.options = {
|
||||||
|
wrap: null,//生成的表格需要放到哪里,可以是选择器、dom对象、jQuery对象
|
||||||
|
type: "row-col-fixed",//表格类型,有:head-fixed、col-fixed、row-col-fixed
|
||||||
|
extraClass: "",//需要添加到表格中的额外class
|
||||||
|
/*表格的列的每一项配置为:
|
||||||
|
{
|
||||||
|
class: "",
|
||||||
|
width: "150px",
|
||||||
|
field: "日期",//可传递字段名称。也可以传递HTML代码,如果是HTML代码则,htmlDom必须为true
|
||||||
|
htmlDom: false,
|
||||||
|
fieldId: ,//
|
||||||
|
fixed: false,//当前了列是否固定
|
||||||
|
fixedDirection: ""//如果是固定列,则该列的方向是在左边还是在右边
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
fields: [],//表格的列
|
||||||
|
/*设置表格内容的最大高度,设置最大高度后可以上下滚动,它的值必须为number,如果不传递该参数则会自动计算*/
|
||||||
|
maxHeight: undefined,
|
||||||
|
onHover: function (){},
|
||||||
|
hoverClass: "rowHover",//鼠标移动到每一行上时需要添加的class
|
||||||
|
tableDefaultContent: "",//表格数据还未添加进来时显示的默认内容,可以是html字符串、dom对象、jQuery对象
|
||||||
|
init: function (){}//FixedTable对象初始化后所执行的函数
|
||||||
|
}
|
||||||
|
$.extend(this.options, options);
|
||||||
|
if(!this.options.fields || !$.isArray(this.options.fields) || this.options.fields.length == 0){
|
||||||
|
throw "必须传递表格的列数组!";
|
||||||
|
}
|
||||||
|
this.wrap = $(this.options.wrap);
|
||||||
|
this.fixedTableClass = {
|
||||||
|
left: "fixed-table_fixed-left",
|
||||||
|
right: "fixed-table_fixed-right"
|
||||||
|
}
|
||||||
|
/*固定列的下标,数组的内容必须是一个对象,且对象格式为
|
||||||
|
{
|
||||||
|
index: 0,//下标
|
||||||
|
direction: "left"//固定列方向
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
this.fixedIndex = {};
|
||||||
|
if(this.options.type != "head-fixed"){
|
||||||
|
|
||||||
|
var fields = this.options.fields,
|
||||||
|
that = this;
|
||||||
|
$.each(fields, function (index, item){
|
||||||
|
if(item.fixed){
|
||||||
|
if(!that.fixedIndex.left){//存储左边固定栏索引
|
||||||
|
that.fixedIndex.left = [];
|
||||||
|
}
|
||||||
|
if(!that.fixedIndex.right){//存储右边固定栏索引
|
||||||
|
that.fixedIndex.right = [];
|
||||||
|
}
|
||||||
|
var direction = (!item.fixedDirection ? "left" : item.fixedDirection).toLowerCase();
|
||||||
|
|
||||||
|
that.fixedIndex[direction].push({
|
||||||
|
index: index,
|
||||||
|
direction: direction
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.isIE = FixedTable.isIE();
|
||||||
|
|
||||||
|
this._renderFixedTable();
|
||||||
|
|
||||||
|
if(({}).toString.call(this.options["init"]) == "[object Function]"){
|
||||||
|
this.options["init"].call(this);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_renderFixedTable: function (){
|
||||||
|
/*渲染fixed-table-box*/
|
||||||
|
var that = this,
|
||||||
|
id = "Lyn_FixedTable_" + (FixedTable._sequence ++),
|
||||||
|
fixedTableBox = this.fixedTableBox = this.build.buildFixedTableBox(),
|
||||||
|
fixedTableHeader = this.fixedTableHeader = this.build.buildFixedTableHeader(),
|
||||||
|
fixedTableBody = this.fixedTableBody = this.build.buildFixedTableBody();
|
||||||
|
this._id = id;
|
||||||
|
//设置显示类型及需额外添加的class
|
||||||
|
fixedTableBox.attr("id", id).addClass(this.options.type).addClass(this.options.extraClass);
|
||||||
|
fixedTableHeader.attr("data-parentid", id);
|
||||||
|
fixedTableBody.attr("data-parentid", id);
|
||||||
|
|
||||||
|
//添加表格数据还未添加进来时显示的默认内容
|
||||||
|
if(this.options.tableDefaultContent){
|
||||||
|
this.tableDefaultContent = $(this.options.tableDefaultContent);
|
||||||
|
fixedTableBody.append(this.tableDefaultContent);
|
||||||
|
}
|
||||||
|
fixedTableHeader.children(".fixed-table_header").children("thead").append(this.build.buildTableTitle(this.options.fields));
|
||||||
|
fixedTableBox.append(fixedTableHeader).append(fixedTableBody);
|
||||||
|
|
||||||
|
this.wrap.append(fixedTableBox);
|
||||||
|
|
||||||
|
//计算table的宽度,否则table的宽度为auto,fixedTableBody就不会出现滚动条了
|
||||||
|
if(this.options.type != "head-fixed"){
|
||||||
|
var tableW = FixedTable.calTableWidth(fixedTableHeader);
|
||||||
|
fixedTableHeader.find("table").data("data-width", tableW).width(tableW);
|
||||||
|
fixedTableBody.find("table").data("data-width", tableW).width(tableW);
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
_sequence: 0,
|
||||||
|
build: {
|
||||||
|
buildFixedTableBox: function (type, sequence){
|
||||||
|
/*创建包裹table的父盒子*/
|
||||||
|
return $('<div class="fixed-table-box"></div>');
|
||||||
|
},
|
||||||
|
buildFixedTableHeader: function (){
|
||||||
|
/*创建表头*/
|
||||||
|
var html = '';
|
||||||
|
html += '<div class="fixed-table_header-wraper">';
|
||||||
|
html += ' <table class="fixed-table_header" cellspacing="0" cellpadding="0" border="0">';
|
||||||
|
html += ' <thead>';
|
||||||
|
html += ' </thead>';
|
||||||
|
html += ' </table>';
|
||||||
|
html += '</div>';
|
||||||
|
return $(html);
|
||||||
|
},
|
||||||
|
buildFixedTableBody: function (){
|
||||||
|
/*创建表格的主体内容*/
|
||||||
|
var html ='';
|
||||||
|
html += '<div class="fixed-table_body-wraper">';
|
||||||
|
html += ' <table class="fixed-table_body" cellspacing="0" cellpadding="0" border="0">';
|
||||||
|
html += ' <tbody></tbody>';
|
||||||
|
html += ' </table>';
|
||||||
|
html += '</div>';
|
||||||
|
return $(html);
|
||||||
|
},
|
||||||
|
buildFixedTable: function (){
|
||||||
|
/*创建固定的列盒子*/
|
||||||
|
return $('<div class="fixed-table_fixed"></div>');
|
||||||
|
},
|
||||||
|
buildTableTitle: function (data){
|
||||||
|
/*创建表格标题*/
|
||||||
|
if(!data || !$.isArray(data) || data.length == 0){return;}
|
||||||
|
var html = ['<tr>'];
|
||||||
|
$.each(data, function (index, item){
|
||||||
|
var attr = [],
|
||||||
|
th = '';
|
||||||
|
if(item["class"]){
|
||||||
|
attr.push('class="' + item["class"] + '"');
|
||||||
|
}
|
||||||
|
if(item.width){
|
||||||
|
attr.push('style="width: ' + item.width + ';"');
|
||||||
|
}
|
||||||
|
if(item.fieldId){
|
||||||
|
attr.push('data-fieldid="' + item.fieldId + '"');
|
||||||
|
}
|
||||||
|
if(item.fixed){
|
||||||
|
attr.push('data-fixed="' + item.fixed + '"');
|
||||||
|
if(item.fixedDirection){
|
||||||
|
attr.push('data-fixeddirection="' + item.fixedDirection + '"');
|
||||||
|
}else{
|
||||||
|
attr.push('data-fixeddirection=left');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//如果传递的field已经是html字符串则直接使用即可
|
||||||
|
if(item.htmlDom){
|
||||||
|
html.push(item.field);
|
||||||
|
}else{
|
||||||
|
html.push('<th ' + (attr.join(" ")) + '><div class="table-cell">' + item.field + '</div></th>');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
html.push('</tr>');
|
||||||
|
|
||||||
|
return $(html.join(""));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getRow: function (row){
|
||||||
|
/*根据指定任意地方的行的索引、dom对象、jquery对象获取表格中表格主体、两侧固定列对应的行*/
|
||||||
|
var rowDom = null,
|
||||||
|
rowIndex = undefined,
|
||||||
|
returnVal = {
|
||||||
|
bodyRow: undefined,
|
||||||
|
leftFixedRow: undefined,
|
||||||
|
rightFixedRow: undefined
|
||||||
|
};
|
||||||
|
if(typeof row != "number"){
|
||||||
|
rowDom = $(row);
|
||||||
|
if(rowDom.length == 0){return;}
|
||||||
|
rowIndex = rowDom.index();
|
||||||
|
}else if(typeof row == "number"){
|
||||||
|
rowIndex = row;
|
||||||
|
}
|
||||||
|
if(rowIndex == undefined){return this;}
|
||||||
|
|
||||||
|
returnVal.index = rowIndex;
|
||||||
|
returnVal.bodyRow = this.fixedTableBody.find("tbody tr").eq(rowIndex);
|
||||||
|
if(this.fixedIndex.left){
|
||||||
|
returnVal.leftFixedRow = this.fixedTableBox.find(".fixed-table_fixed-left tbody tr").eq(rowIndex);
|
||||||
|
}
|
||||||
|
if(this.fixedIndex.right){
|
||||||
|
returnVal.rightFixedRow = this.fixedTableBox.find(".fixed-table_fixed-right tbody tr").eq(rowIndex);
|
||||||
|
}
|
||||||
|
return returnVal;
|
||||||
|
},
|
||||||
|
deleteRow: function (row, cb){
|
||||||
|
/*删除行,参数row可以是行的索引、dom对象、jquery对象*/
|
||||||
|
var rows = this.getRow(row);
|
||||||
|
|
||||||
|
if(!rows || !rows.bodyRow){return this;}
|
||||||
|
rows.bodyRow.remove();
|
||||||
|
if(this.fixedIndex.left && rows.leftFixedRow){
|
||||||
|
rows.leftFixedRow.remove();
|
||||||
|
}
|
||||||
|
if(this.fixedIndex.right && rows.rightFixedRow){
|
||||||
|
rows.rightFixedRow.remove();
|
||||||
|
}
|
||||||
|
this._calFixedColHeight();
|
||||||
|
if(cb && ({}).toString.call(cb) == "[obejct Function]"){
|
||||||
|
cb.call(this);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
addRow: function (htmlDom, cb){
|
||||||
|
/*添加行,fn必须返回HTML字符串或jQuery对象*/
|
||||||
|
var returnVal = undefined,
|
||||||
|
rowDoms = undefined,
|
||||||
|
that = this;
|
||||||
|
if(!htmlDom){return this;}
|
||||||
|
if(({}).toString.call(htmlDom) == "[object Function]"){
|
||||||
|
returnVal = htmlDom();
|
||||||
|
}else{
|
||||||
|
returnVal = htmlDom;
|
||||||
|
}
|
||||||
|
if(!returnVal){return this;}
|
||||||
|
rowDoms = $(returnVal);
|
||||||
|
|
||||||
|
if(rowDoms.length == 0){return this;}
|
||||||
|
if(this.tableDefaultContent){
|
||||||
|
this.tableDefaultContent.remove();
|
||||||
|
}
|
||||||
|
this.fixedTableBody.find("tbody").append(rowDoms);
|
||||||
|
if(this.options.type == "head-fixed"){return this;}
|
||||||
|
if(this.fixedIndex.left || this.fixedIndex.right){
|
||||||
|
//设置固定的列
|
||||||
|
this._setFixedCol(rowDoms);
|
||||||
|
//计算固定列的高度
|
||||||
|
if (this.isIE) {
|
||||||
|
//在IE浏览器中连续多次计算固定列的时候会计算出负值的情况,为了避免这个情况需加个定时器
|
||||||
|
setTimeout(function (){
|
||||||
|
that._calFixedColHeight();
|
||||||
|
}, 50);
|
||||||
|
}else{
|
||||||
|
that._calFixedColHeight();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.rowHover(this.options.onHover);
|
||||||
|
if(cb && ({}).toString.call(cb) == "[obejct Function]"){
|
||||||
|
cb.call(this);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
empty: function (cb){
|
||||||
|
/*清空表格里的所有内容*/
|
||||||
|
this.fixedTableBody.find('tbody').html("");
|
||||||
|
if(this.fixedIndex.left || this.fixedIndex.left){
|
||||||
|
this.fixedTableBox.find(".fixed-table_fixed").height(0).find('tbody').html("");
|
||||||
|
}
|
||||||
|
if(cb && ({}).toString.call(cb) == "[obejct Function]"){
|
||||||
|
cb.call(this);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
rowHover: function (cb){
|
||||||
|
/*鼠标hover在每一行后所处理业务*/
|
||||||
|
var that = this,
|
||||||
|
rowHover = this.options.hoverClass,
|
||||||
|
bodyTrs = this.fixedTableBody.find("tr");
|
||||||
|
bodyTrs.off("mouseenter.rowHover").off("mouseleave.rowHover");
|
||||||
|
bodyTrs.on("mouseenter.rowHover", _process).on("mouseleave.rowHover", _process);
|
||||||
|
if(this.fixedIndex.left){
|
||||||
|
var leftTrs = this.fixedTableBox.find(".fixed-table_fixed-left .fixed-table_body-wraper tr");
|
||||||
|
leftTrs.off("mouseenter.rowHover").off("mouseleave.rowHover");
|
||||||
|
leftTrs.on("mouseenter.rowHover", _process).on("mouseleave.rowHover", _process);
|
||||||
|
}
|
||||||
|
if(this.fixedIndex.right){
|
||||||
|
var rihtTrs = this.fixedTableBox.find(".fixed-table_fixed-right .fixed-table_body-wraper tr");
|
||||||
|
rihtTrs.off("mouseenter.rowHover").off("mouseleave.rowHover");
|
||||||
|
rihtTrs.on("mouseenter.rowHover", _process).on("mouseleave.rowHover", _process);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _process(){
|
||||||
|
var $this = $(this),
|
||||||
|
rows = that.getRow($this.index());
|
||||||
|
if(!rows.bodyRow){return;}
|
||||||
|
rows.bodyRow.toggleClass(rowHover);
|
||||||
|
rows.leftFixedRow.toggleClass(rowHover);
|
||||||
|
rows.rightFixedRow.toggleClass(rowHover);
|
||||||
|
|
||||||
|
if(cb && ({}).toString.call(cb) == "[obejct Function]"){
|
||||||
|
cb.call(that.fixedTableBox[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
_syncScroll: function (){
|
||||||
|
/*同步滚动*/
|
||||||
|
if(!this.fixedIndex.left || !this.fixedIndex.right){return;}
|
||||||
|
var that = this,
|
||||||
|
fixedTableHeader = this.fixedTableHeader,
|
||||||
|
fixedCols = this.fixedTableBox.find(".fixed-table_fixed .fixed-table_body-wraper");
|
||||||
|
this.fixedTableBody.on("scroll", function (){
|
||||||
|
var $this = $(this);
|
||||||
|
fixedTableHeader.scrollLeft($this.scrollLeft());
|
||||||
|
fixedCols.scrollTop($this.scrollTop());
|
||||||
|
});
|
||||||
|
},
|
||||||
|
_calFixedColHeight: function (){
|
||||||
|
if(!this.fixedIndex.left || !this.fixedIndex.right){return;}
|
||||||
|
/*计算固定列的高度*/
|
||||||
|
var maxHeight = this.options.maxHeight,
|
||||||
|
hasCrosswiseScroll = true,//用于判断固定列的高度是否要减去滚动条的宽度,这样才不会遮住水平滚动条
|
||||||
|
hasVerticalScroll = false,//用于判断右侧的固定列的right值是否需要加上滚动条的宽度,这样才能显示出垂直滚动条
|
||||||
|
$fixedTableBody = this.fixedTableBody,
|
||||||
|
fixedTableBody = $fixedTableBody[0],
|
||||||
|
scrollWidth = 0,
|
||||||
|
scrollWidth2 = 0,
|
||||||
|
fixedTableBodyTable = $fixedTableBody.children('table');
|
||||||
|
|
||||||
|
if(typeof maxHeight != "number"){
|
||||||
|
|
||||||
|
if(this.isIE){//IE浏览器
|
||||||
|
/*在IE浏览器中this.fixedTableBox.height()、this.fixedTableBox[0].offsetHeight获取的高度
|
||||||
|
都为0,不知道为什么,但this.fixedTableBox[0].clientHeight和this.fixedTableBox[0].scrollHeight都有值,
|
||||||
|
为了保证两边的固定列能出来,所以就使用了这种解决方案*/
|
||||||
|
maxHeight = this.fixedTableBox.height() || this.fixedTableBox[0].clientHeight || this.fixedTableBox[0].scrollHeight;
|
||||||
|
}else{
|
||||||
|
maxHeight = this.fixedTableBox.height();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(fixedTableBody.scrollWidth > fixedTableBody.clientWidth || fixedTableBody.offsetWidth > fixedTableBody.clientWidth){
|
||||||
|
hasCrosswiseScroll = true;
|
||||||
|
}else{
|
||||||
|
hasCrosswiseScroll = false;
|
||||||
|
}
|
||||||
|
/*如果有水平滚动条fixedTableBody.offsetHeight会把水平滚动条的高度也计算进去,因此这里需要减去水平滚动条的高度*/
|
||||||
|
if(fixedTableBody.scrollHeight > fixedTableBody.clientHeight || (fixedTableBody.offsetHeight - FixedTable.getScrollWidth()) > fixedTableBody.clientHeight){
|
||||||
|
hasVerticalScroll = true;
|
||||||
|
}else{
|
||||||
|
hasVerticalScroll = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasCrosswiseScroll){
|
||||||
|
scrollWidth = FixedTable.getScrollWidth();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(hasVerticalScroll){
|
||||||
|
scrollWidth2 = FixedTable.getScrollWidth();
|
||||||
|
|
||||||
|
if(this.fixedTableBox.find(".fixed-table-box_fixed-right-patch").length == 0){
|
||||||
|
var rightPatch = $('<div class="fixed-table-box_fixed-right-patch"></div>'),
|
||||||
|
height = this.fixedTableHeader.height();
|
||||||
|
rightPatch.css({
|
||||||
|
width: scrollWidth2,
|
||||||
|
height: height-2
|
||||||
|
});
|
||||||
|
this.fixedTableBox.append(rightPatch);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(this.fixedTableBox.find(".fixed-table-box_fixed-right-patch").length == 0){
|
||||||
|
this.fixedTableBox.find(".fixed-table-box_fixed-right-patch").remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var height = maxHeight - scrollWidth,
|
||||||
|
fixedTable = this.fixedTableBox.find(".fixed-table_fixed");
|
||||||
|
if(fixedTable.height() != Math.abs(height)){
|
||||||
|
fixedTable.height(maxHeight - scrollWidth);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.fixedTableBox.find(".fixed-table_fixed.fixed-table_fixed-right").css("right", (scrollWidth2-1) < 0 ? 1 : (scrollWidth2 - 1));
|
||||||
|
},
|
||||||
|
_setFixedCol: function (rowDoms){
|
||||||
|
/*设置需要固定的列*/
|
||||||
|
var that = this,
|
||||||
|
fixedIndex = this.fixedIndex,
|
||||||
|
first = true,//用来判断是否生成tr
|
||||||
|
leftFixedTableWrap = undefined,//左边固定栏
|
||||||
|
leftFixedTableHeader = undefined,
|
||||||
|
leftFixedTableBody = undefined,
|
||||||
|
rightFixedTableWrap = undefined,//右边固定栏
|
||||||
|
rightFixedTableHeader = undefined,
|
||||||
|
rightFixedTableBody = undefined;
|
||||||
|
|
||||||
|
if(fixedIndex.left || fixedIndex.right){//有固定列
|
||||||
|
if(fixedIndex.left && !this.fixedColCreated){//有左边固定列,并且是第一次添加数据
|
||||||
|
leftFixedTableWrap = that.build.buildFixedTable().addClass(this.fixedTableClass["left"]);
|
||||||
|
leftFixedTableHeader = that.build.buildFixedTableHeader();
|
||||||
|
leftFixedTableBody = that.build.buildFixedTableBody();
|
||||||
|
}else if(fixedIndex.left && this.fixedColCreated){//有左边固定列,并且不是第一次添加数据
|
||||||
|
leftFixedTableWrap = that.fixedTableBox.find(".fixed-table_fixed-left");
|
||||||
|
leftFixedTableHeader = leftFixedTableWrap.find(".fixed-table_header-wraper");
|
||||||
|
leftFixedTableBody = leftFixedTableWrap.find(".fixed-table_body-wraper");
|
||||||
|
}
|
||||||
|
if(fixedIndex.right && !this.fixedColCreated){//有右边固定列
|
||||||
|
rightFixedTableWrap = that.build.buildFixedTable().addClass(this.fixedTableClass["right"]);//右边固定栏
|
||||||
|
rightFixedTableHeader = that.build.buildFixedTableHeader();
|
||||||
|
rightFixedTableBody = that.build.buildFixedTableBody();
|
||||||
|
}else if(fixedIndex.right && this.fixedColCreated){
|
||||||
|
rightFixedTableWrap = that.fixedTableBox.find(".fixed-table_fixed-right");
|
||||||
|
rightFixedTableHeader = rightFixedTableWrap.find(".fixed-table_header-wraper");
|
||||||
|
rightFixedTableBody = rightFixedTableWrap.find(".fixed-table_body-wraper");
|
||||||
|
}
|
||||||
|
}else{//无固定列
|
||||||
|
leftFixedTableWrap = that.fixedTableBox.find(".fixed-table_fixed-left");
|
||||||
|
leftFixedTableHeader = leftFixedTableWrap.find(".fixed-table_header-wraper");
|
||||||
|
leftFixedTableBody = leftFixedTableWrap.find(".fixed-table_body-wraper");
|
||||||
|
|
||||||
|
rightFixedTableWrap = that.fixedTableBox.find(".fixed-table_fixed-right");
|
||||||
|
rightFixedTableHeader = rightFixedTableWrap.find(".fixed-table_header-wraper");
|
||||||
|
rightFixedTableBody = rightFixedTableWrap.find(".fixed-table_body-wraper");
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算固定列的表头,表头只计算一遍
|
||||||
|
if(!this.titleFixeded){
|
||||||
|
var outerFixedTableCols = this.fixedTableHeader.find('.fixed-table_header th'),
|
||||||
|
leftCloneThead = [],
|
||||||
|
rightCloneThead = [],
|
||||||
|
leftCount = 0,
|
||||||
|
rightCount = 0,
|
||||||
|
leftTr = $("<tr></tr>"),
|
||||||
|
rightTr = $("<tr></tr>");
|
||||||
|
|
||||||
|
outerFixedTableCols.each(function(index, ele) {
|
||||||
|
if(fixedIndex.left){
|
||||||
|
$.each(fixedIndex.left, function(index2, item) {
|
||||||
|
if(index == item.index){
|
||||||
|
leftCloneThead.push($(ele).clone(true));
|
||||||
|
if(leftCount != 0){
|
||||||
|
//移动原来的表头列到对应位置
|
||||||
|
if(index2 != 0){
|
||||||
|
var ths = that.fixedTableHeader.find('.fixed-table_header th')
|
||||||
|
//每次替换位置后需重新获取一下,否则位置会出错
|
||||||
|
ths.eq(item.index).insertAfter(ths.eq(index2-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
leftCount++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(fixedIndex.right){
|
||||||
|
$.each(fixedIndex.right, function(index2, item) {
|
||||||
|
if(index == item.index){
|
||||||
|
rightCloneThead.push($(ele).clone(true));
|
||||||
|
|
||||||
|
var ths = that.fixedTableHeader.find('.fixed-table_header th');
|
||||||
|
if(index2 != ths.length - 1){
|
||||||
|
/*每次替换位置后需重新获取一下,否则位置会出错*/
|
||||||
|
outerFixedTableCols.eq(item.index).insertAfter(that.fixedTableHeader.find('.fixed-table_header th').eq(outerFixedTableCols.length - 1));
|
||||||
|
rightCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
leftFixedTableHeader && leftFixedTableHeader.find(".fixed-table_header thead").append(leftTr.append(leftCloneThead));
|
||||||
|
rightFixedTableHeader && rightFixedTableHeader.find(".fixed-table_header thead").append(rightTr.append(rightCloneThead));
|
||||||
|
|
||||||
|
this.titleFixeded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var leftCloneBody = [],
|
||||||
|
rightCloneBody = [],
|
||||||
|
rowDomsClone = rowDoms.clone(true),
|
||||||
|
leftCount = 0,
|
||||||
|
rightCount = 0;
|
||||||
|
|
||||||
|
//计算固定列的内容
|
||||||
|
rowDomsClone.each(function(index, ele) {
|
||||||
|
var $this = $(this),
|
||||||
|
leftTr = $(ele).clone(true).html(""),
|
||||||
|
rightTr = $(ele).clone(true).html("");
|
||||||
|
$this.children('td').each(function (index2, td){
|
||||||
|
if(fixedIndex.left){
|
||||||
|
$.each(fixedIndex.left, function (index3, item){
|
||||||
|
if(index2 == item.index){
|
||||||
|
leftTr.append($(td).clone(true));
|
||||||
|
leftCloneBody.push(leftTr);
|
||||||
|
leftCount++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(fixedIndex.right){
|
||||||
|
$.each(fixedIndex.right, function(index3, item) {
|
||||||
|
if(index2 == item.index){
|
||||||
|
rightTr.append($(td).clone(true));
|
||||||
|
rightCloneBody.push(rightTr);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
//移动表格数据中的列,以让其与固定列对应
|
||||||
|
rowDoms.each(function(index, el) {
|
||||||
|
var $this = $(this),
|
||||||
|
curTd = $this.children('td');
|
||||||
|
curTd.each(function(index2, td) {
|
||||||
|
var $td = $(td);
|
||||||
|
if(fixedIndex.left){
|
||||||
|
$.each(fixedIndex.left, function (index3, item){
|
||||||
|
if(index2 == item.index){
|
||||||
|
if(index3 != 0){
|
||||||
|
$td.insertAfter($this.children('td').eq(index3 -1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(fixedIndex.right){
|
||||||
|
$.each(fixedIndex.right, function(index3, item) {
|
||||||
|
if(index2 == item.index){
|
||||||
|
if(index3 != curTd.length - 1){
|
||||||
|
$td.insertAfter($this.children('td').eq(curTd.length - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if(leftFixedTableWrap){
|
||||||
|
leftFixedTableBody.find("tbody").append(leftCloneBody);
|
||||||
|
if(!this.fixedColCreated){
|
||||||
|
leftFixedTableWrap.append(leftFixedTableHeader).append(leftFixedTableBody);
|
||||||
|
this.fixedTableBox.append(leftFixedTableWrap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(rightFixedTableWrap){
|
||||||
|
rightFixedTableBody.find("tbody").append(rightCloneBody);
|
||||||
|
if(!this.fixedColCreated){
|
||||||
|
rightFixedTableWrap.append(rightFixedTableHeader).append(rightFixedTableBody);
|
||||||
|
this.fixedTableBox.append(rightFixedTableWrap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!this.fixedColCreated){
|
||||||
|
this._syncScroll();
|
||||||
|
}
|
||||||
|
this.fixedColCreated = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*获取元素滚动条的宽度*/
|
||||||
|
FixedTable.getScrollWidth = function (){
|
||||||
|
var div = document.createElement("div"),
|
||||||
|
w1 = 0,
|
||||||
|
w2 = 0;
|
||||||
|
document.body.appendChild(div);
|
||||||
|
|
||||||
|
div.style.position = "fixed";
|
||||||
|
div.style.left = "-2000px";
|
||||||
|
div.style.width = "200px";
|
||||||
|
div.style.height = "200px";
|
||||||
|
w1 = div.clientWidth;
|
||||||
|
div.style.overflow = "scroll";
|
||||||
|
w2 = div.clientWidth;
|
||||||
|
document.body.removeChild(div);
|
||||||
|
|
||||||
|
return w1-w2;
|
||||||
|
}
|
||||||
|
/*计算表格的真实宽度*/
|
||||||
|
FixedTable.calTableWidth = function (fixedTableHeader){
|
||||||
|
var cloneTable = $(fixedTableHeader).clone(true),
|
||||||
|
width = 0;
|
||||||
|
cloneTable.css({
|
||||||
|
position: "fixed",
|
||||||
|
left: "-2000px",
|
||||||
|
width: "auto"
|
||||||
|
});
|
||||||
|
$("body").append(cloneTable);
|
||||||
|
width = cloneTable.width();
|
||||||
|
cloneTable.remove();
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
/*判断浏览器是否为IE浏览器*/
|
||||||
|
FixedTable.isIE = function (){
|
||||||
|
var ua = navigator.userAgent.toLowerCase();
|
||||||
|
if(/msie \d/g.test(ua) || ((/trident\/\d/g.test(ua)) && /like gecko/g.test(ua))){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FixedTable;
|
||||||
|
});
|
193
web/src/x.min.js
vendored
193
web/src/x.min.js
vendored
@ -442,6 +442,57 @@ var X = window.X || {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// table
|
||||||
|
X.fixedTable=function(id,type,classname,headdata){
|
||||||
|
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: "<div>我是一个默认的div</div>"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
X.eventtable=function(data,callback){
|
X.eventtable=function(data,callback){
|
||||||
var titledata,condata = [];
|
var titledata,condata = [];
|
||||||
for(let i in data){
|
for(let i in data){
|
||||||
@ -688,7 +739,26 @@ var X = window.X || {
|
|||||||
};
|
};
|
||||||
|
|
||||||
X.userpropertychart=function(data,callback){
|
X.userpropertychart=function(data,callback){
|
||||||
|
var xAxisData = [];
|
||||||
|
var seriesdata =[];
|
||||||
|
var legenddata = [];
|
||||||
|
var date,sum,mean,sameday;
|
||||||
|
for(let i in data.value){
|
||||||
|
xAxisData.push(i);
|
||||||
|
seriesdata.push(data.value[i]);
|
||||||
|
}
|
||||||
|
var dataArr = {
|
||||||
|
xAxisData:xAxisData,
|
||||||
|
legenddata:legenddata,
|
||||||
|
seriesData:seriesdata,
|
||||||
|
date:0,
|
||||||
|
sum:0,
|
||||||
|
mean:0,
|
||||||
|
sameday: 0
|
||||||
|
}
|
||||||
|
// console.log(xAxisData);
|
||||||
|
// console.log(seriesdata);
|
||||||
|
callback && callback(dataArr);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -2367,6 +2437,7 @@ var X = window.X || {
|
|||||||
|
|
||||||
var querydata;//查询数据
|
var querydata;//查询数据
|
||||||
$(document).on('click','.analtsis-chart-switch-box .analtsis-chart-switch',function(){
|
$(document).on('click','.analtsis-chart-switch-box .analtsis-chart-switch',function(){
|
||||||
|
console.log(querydata);
|
||||||
if(querydata){
|
if(querydata){
|
||||||
$('.analtsis-chart-switch-box .analtsis-chart-switch').removeClass('select-chart');
|
$('.analtsis-chart-switch-box .analtsis-chart-switch').removeClass('select-chart');
|
||||||
$(this).addClass('select-chart');
|
$(this).addClass('select-chart');
|
||||||
@ -2557,7 +2628,7 @@ var X = window.X || {
|
|||||||
for(let j in d[i]['groups']){
|
for(let j in d[i]['groups']){
|
||||||
var num =0;
|
var num =0;
|
||||||
for(let z in d[i]['values'][j]){
|
for(let z in d[i]['values'][j]){
|
||||||
num = num + d[i]['values'][j][z]
|
num = parseFloat(num) + parseFloat(d[i]['values'][j][z])
|
||||||
}
|
}
|
||||||
if(i > 0){
|
if(i > 0){
|
||||||
for(let q in seriesData){
|
for(let q in seriesData){
|
||||||
@ -2652,16 +2723,25 @@ var X = window.X || {
|
|||||||
function tabledata(d){
|
function tabledata(d){
|
||||||
var titledata,condata=[];
|
var titledata,condata=[];
|
||||||
for(let i in d){
|
for(let i in d){
|
||||||
if(d[i]['groups']['length'] == 0){
|
|
||||||
titledata= $.extend(true,[],d[0]['date_range']) ;
|
titledata= $.extend(true,[],d[0]['date_range']) ;
|
||||||
titledata.unshift('指标','阶段总和');
|
titledata.unshift('指标','阶段总和');
|
||||||
condata.push(d[i].values[0]);
|
if(d[i]['groups']['length'] != 0){
|
||||||
condata[i].unshift(d[i]['event_name'],d[i]['sum']);
|
for(let j in d[i]['values']){
|
||||||
|
var arr;
|
||||||
|
arr = $.extend(true,[],d[i].values[j])
|
||||||
|
arr.unshift(d[i]['event_name'],d[i]['sum'][j]);
|
||||||
|
condata.push(arr);
|
||||||
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
|
var arr;
|
||||||
|
arr = $.extend(true,[],d[i].values[0])
|
||||||
|
arr.unshift(d[i]['event_name'],d[i]['sum'][0]);
|
||||||
|
condata.push(arr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// console.log(titledata);
|
||||||
|
console.log(condata);
|
||||||
X.laytpldata("#table-fenxi-th-dot",titledata,".table-fenxi-th");
|
X.laytpldata("#table-fenxi-th-dot",titledata,".table-fenxi-th");
|
||||||
X.laytpldata("#table-fenxi-td-dot",condata ,".table-fenxi-td");
|
X.laytpldata("#table-fenxi-td-dot",condata ,".table-fenxi-td");
|
||||||
};
|
};
|
||||||
@ -2916,9 +2996,9 @@ var X = window.X || {
|
|||||||
})
|
})
|
||||||
|
|
||||||
//从数据看板点击进来触发事件
|
//从数据看板点击进来触发事件
|
||||||
if(X.DATA.user_property && X.DATA.user_property != ''){
|
if(X.DATA.user_propertyid && X.DATA.user_propertyid != ''){
|
||||||
var report_idarr = [];
|
var report_idarr = [];
|
||||||
report_idarr.push(X.DATA.user_property);
|
report_idarr.push(X.DATA.user_propertyid);
|
||||||
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_idarr},function(d){
|
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_idarr},function(d){
|
||||||
backfilldata(d[0]);
|
backfilldata(d[0]);
|
||||||
})
|
})
|
||||||
@ -3309,7 +3389,7 @@ var X = window.X || {
|
|||||||
this.parms = parms;
|
this.parms = parms;
|
||||||
this.callback = parms.callback; //选择后执行的回调
|
this.callback = parms.callback; //选择后执行的回调
|
||||||
var data = parms.extData;//获取到上层弹窗传的数据
|
var data = parms.extData;//获取到上层弹窗传的数据
|
||||||
console.log(data);
|
|
||||||
// 给条件框赋值
|
// 给条件框赋值
|
||||||
X.laytpldata("#zhuang-tab-dot",data,'.zhuang_tab ');
|
X.laytpldata("#zhuang-tab-dot",data,'.zhuang_tab ');
|
||||||
|
|
||||||
@ -3338,8 +3418,6 @@ var X = window.X || {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// $("#zhuang-conetnt-dot").html("");
|
// $("#zhuang-conetnt-dot").html("");
|
||||||
console.log(data);
|
|
||||||
console.log(arrData)
|
|
||||||
X.laytpldata("#zhuang-conetnt-dot",arrData,'.zhuang_conetnt ');
|
X.laytpldata("#zhuang-conetnt-dot",arrData,'.zhuang_conetnt ');
|
||||||
}else {
|
}else {
|
||||||
$('.zhuanghu_ss .qingkomg').hide();
|
$('.zhuanghu_ss .qingkomg').hide();
|
||||||
@ -3823,6 +3901,8 @@ var X = window.X || {
|
|||||||
gourl = 'ltvmodel';
|
gourl = 'ltvmodel';
|
||||||
// layer.msg('暂未处理当前逻辑');
|
// layer.msg('暂未处理当前逻辑');
|
||||||
// return;
|
// return;
|
||||||
|
}else if(cat == 'user_property'){
|
||||||
|
gourl = 'attribute';
|
||||||
}
|
}
|
||||||
X.gourl(gourl,'conetnt');//跳到对应的分析页面
|
X.gourl(gourl,'conetnt');//跳到对应的分析页面
|
||||||
X.DATA[cat+'id'] = id;
|
X.DATA[cat+'id'] = id;
|
||||||
@ -4065,9 +4145,50 @@ var X = window.X || {
|
|||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
console.log(eventdata);
|
||||||
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
|
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
|
||||||
var myChart = echarts.init(document.getElementById(eventdata['id']));
|
var myChart = echarts.init(document.getElementById(eventdata['id']));
|
||||||
|
if(eventdata['cat'] == 'user_property'){
|
||||||
|
var option = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
type: 'cross',
|
||||||
|
label: {
|
||||||
|
backgroundColor: '#6a7985'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
color: X.DATA.echartscolor,
|
||||||
|
// legend: {
|
||||||
|
// data: legendData
|
||||||
|
// },
|
||||||
|
grid: {
|
||||||
|
left: '2%',
|
||||||
|
right: '2%',
|
||||||
|
bottom: '2%',
|
||||||
|
top: '10%',
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
axisTick: {show: false},
|
||||||
|
data: eventdata['xAxisData']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: 'value'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
series: [{
|
||||||
|
data: eventdata['seriesData'],
|
||||||
|
type: 'bar',
|
||||||
|
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
}else{
|
||||||
var option = {
|
var option = {
|
||||||
title: {
|
title: {
|
||||||
text: ''
|
text: ''
|
||||||
@ -4107,6 +4228,8 @@ var X = window.X || {
|
|||||||
],
|
],
|
||||||
series: eventdata['seriesData']
|
series: eventdata['seriesData']
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
myChart.setOption(option,true);
|
myChart.setOption(option,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8082,6 +8205,20 @@ var X = window.X || {
|
|||||||
retaineddata();
|
retaineddata();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//留存流失
|
||||||
|
var retentionloss = [
|
||||||
|
{'title':'留存','id':0},
|
||||||
|
{'title':'流失','id':1}
|
||||||
|
]
|
||||||
|
var retentiontype = 0;//判断是显示流失数据还是留存
|
||||||
|
X.laydropdown('.retention-loss',retentionloss,function(d){
|
||||||
|
$('.retention-loss').html(d.title);
|
||||||
|
if(querydata['summary_values']){
|
||||||
|
retentiontype = d.id;
|
||||||
|
updata(querydata);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// 计算按钮
|
// 计算按钮
|
||||||
$(document).off('click','.analysis-calculation').on('click','.analysis-calculation',function(){
|
$(document).off('click','.analysis-calculation').on('click','.analysis-calculation',function(){
|
||||||
// console.log(data);
|
// console.log(data);
|
||||||
@ -8151,6 +8288,14 @@ var X = window.X || {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function retainedtable(d){
|
function retainedtable(d){
|
||||||
|
var nname,pname
|
||||||
|
if(retentiontype == 0) {
|
||||||
|
nname = 'n';
|
||||||
|
pname = 'p';
|
||||||
|
}else {
|
||||||
|
nname = 'n_outflow';
|
||||||
|
pname = 'p_outflow';
|
||||||
|
}
|
||||||
var tabledata=[];
|
var tabledata=[];
|
||||||
for(let i in d['summary_values']){
|
for(let i in d['summary_values']){
|
||||||
var arr = {
|
var arr = {
|
||||||
@ -8163,8 +8308,8 @@ var X = window.X || {
|
|||||||
n:0,
|
n:0,
|
||||||
p:0
|
p:0
|
||||||
}
|
}
|
||||||
nrr["n"] = d['summary_values'][i]["n"][j];
|
nrr["n"] = d['summary_values'][i][nname][j];
|
||||||
nrr["p"] = d['summary_values'][i]["p"][j]
|
nrr["p"] = d['summary_values'][i][pname][j]
|
||||||
arr['data'].push(nrr);
|
arr['data'].push(nrr);
|
||||||
}
|
}
|
||||||
tabledata.push(arr)
|
tabledata.push(arr)
|
||||||
@ -8286,14 +8431,22 @@ var X = window.X || {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function retainednRetained(d){
|
function retainednRetained(d){
|
||||||
|
var nname,pname
|
||||||
|
if(retentiontype == 0) {
|
||||||
|
nname = 'n';
|
||||||
|
pname = 'p';
|
||||||
|
}else {
|
||||||
|
nname = 'n_outflow';
|
||||||
|
pname = 'p_outflow';
|
||||||
|
}
|
||||||
var arr = {};
|
var arr = {};
|
||||||
var legenddata = [];
|
var legenddata = [];
|
||||||
var seriesData = [];
|
var seriesData = [];
|
||||||
if(jQuery.isEmptyObject(d.values)){
|
if(jQuery.isEmptyObject(d.values)){
|
||||||
var arr = []
|
var arr = []
|
||||||
for(let i in d['summary_values']){
|
for(let i in d['summary_values']){
|
||||||
var index = d['summary_values'][i]['p'].length - 1;
|
var index = d['summary_values'][i][pname].length - 1;
|
||||||
arr.push(d['summary_values'][i]['p'][index]);
|
arr.push(d['summary_values'][i][pname][index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
seriesData = {
|
seriesData = {
|
||||||
@ -8306,10 +8459,10 @@ var X = window.X || {
|
|||||||
timearr.push(i);
|
timearr.push(i);
|
||||||
for(let j in d.values[i]){
|
for(let j in d.values[i]){
|
||||||
if(arr[j]){
|
if(arr[j]){
|
||||||
arr[j][i] = d.values[i][j]['p'];
|
arr[j][i] = d.values[i][j][pname];
|
||||||
}else {
|
}else {
|
||||||
arr[j]=[];
|
arr[j]=[];
|
||||||
arr[j][i] = d.values[i][j]['p'];
|
arr[j][i] = d.values[i][j][pname];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8340,8 +8493,6 @@ var X = window.X || {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(seriesData);
|
|
||||||
|
|
||||||
var myChart = echarts.init(document.getElementById('analysis-echarts'));
|
var myChart = echarts.init(document.getElementById('analysis-echarts'));
|
||||||
var option = {
|
var option = {
|
||||||
title: {
|
title: {
|
||||||
|
@ -441,6 +441,57 @@ var X = window.X || {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// table
|
||||||
|
X.fixedTable=function(id,type,classname,headdata){
|
||||||
|
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: "<div>我是一个默认的div</div>"
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
X.eventtable=function(data,callback){
|
X.eventtable=function(data,callback){
|
||||||
var titledata,condata = [];
|
var titledata,condata = [];
|
||||||
for(let i in data){
|
for(let i in data){
|
||||||
@ -687,7 +738,26 @@ var X = window.X || {
|
|||||||
};
|
};
|
||||||
|
|
||||||
X.userpropertychart=function(data,callback){
|
X.userpropertychart=function(data,callback){
|
||||||
|
var xAxisData = [];
|
||||||
|
var seriesdata =[];
|
||||||
|
var legenddata = [];
|
||||||
|
var date,sum,mean,sameday;
|
||||||
|
for(let i in data.value){
|
||||||
|
xAxisData.push(i);
|
||||||
|
seriesdata.push(data.value[i]);
|
||||||
|
}
|
||||||
|
var dataArr = {
|
||||||
|
xAxisData:xAxisData,
|
||||||
|
legenddata:legenddata,
|
||||||
|
seriesData:seriesdata,
|
||||||
|
date:0,
|
||||||
|
sum:0,
|
||||||
|
mean:0,
|
||||||
|
sameday: 0
|
||||||
|
}
|
||||||
|
// console.log(xAxisData);
|
||||||
|
// console.log(seriesdata);
|
||||||
|
callback && callback(dataArr);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -761,6 +761,7 @@
|
|||||||
|
|
||||||
var querydata;//查询数据
|
var querydata;//查询数据
|
||||||
$(document).on('click','.analtsis-chart-switch-box .analtsis-chart-switch',function(){
|
$(document).on('click','.analtsis-chart-switch-box .analtsis-chart-switch',function(){
|
||||||
|
console.log(querydata);
|
||||||
if(querydata){
|
if(querydata){
|
||||||
$('.analtsis-chart-switch-box .analtsis-chart-switch').removeClass('select-chart');
|
$('.analtsis-chart-switch-box .analtsis-chart-switch').removeClass('select-chart');
|
||||||
$(this).addClass('select-chart');
|
$(this).addClass('select-chart');
|
||||||
@ -951,7 +952,7 @@
|
|||||||
for(let j in d[i]['groups']){
|
for(let j in d[i]['groups']){
|
||||||
var num =0;
|
var num =0;
|
||||||
for(let z in d[i]['values'][j]){
|
for(let z in d[i]['values'][j]){
|
||||||
num = num + d[i]['values'][j][z]
|
num = parseFloat(num) + parseFloat(d[i]['values'][j][z])
|
||||||
}
|
}
|
||||||
if(i > 0){
|
if(i > 0){
|
||||||
for(let q in seriesData){
|
for(let q in seriesData){
|
||||||
@ -1046,16 +1047,25 @@
|
|||||||
function tabledata(d){
|
function tabledata(d){
|
||||||
var titledata,condata=[];
|
var titledata,condata=[];
|
||||||
for(let i in d){
|
for(let i in d){
|
||||||
if(d[i]['groups']['length'] == 0){
|
|
||||||
titledata= $.extend(true,[],d[0]['date_range']) ;
|
titledata= $.extend(true,[],d[0]['date_range']) ;
|
||||||
titledata.unshift('指标','阶段总和');
|
titledata.unshift('指标','阶段总和');
|
||||||
condata.push(d[i].values[0]);
|
if(d[i]['groups']['length'] != 0){
|
||||||
condata[i].unshift(d[i]['event_name'],d[i]['sum']);
|
for(let j in d[i]['values']){
|
||||||
|
var arr;
|
||||||
|
arr = $.extend(true,[],d[i].values[j])
|
||||||
|
arr.unshift(d[i]['event_name'],d[i]['sum'][j]);
|
||||||
|
condata.push(arr);
|
||||||
|
}
|
||||||
|
|
||||||
}else {
|
}else {
|
||||||
|
var arr;
|
||||||
|
arr = $.extend(true,[],d[i].values[0])
|
||||||
|
arr.unshift(d[i]['event_name'],d[i]['sum'][0]);
|
||||||
|
condata.push(arr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// console.log(titledata);
|
||||||
|
console.log(condata);
|
||||||
X.laytpldata("#table-fenxi-th-dot",titledata,".table-fenxi-th");
|
X.laytpldata("#table-fenxi-th-dot",titledata,".table-fenxi-th");
|
||||||
X.laytpldata("#table-fenxi-td-dot",condata ,".table-fenxi-td");
|
X.laytpldata("#table-fenxi-td-dot",condata ,".table-fenxi-td");
|
||||||
};
|
};
|
||||||
|
@ -85,9 +85,9 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
//从数据看板点击进来触发事件
|
//从数据看板点击进来触发事件
|
||||||
if(X.DATA.user_property && X.DATA.user_property != ''){
|
if(X.DATA.user_propertyid && X.DATA.user_propertyid != ''){
|
||||||
var report_idarr = [];
|
var report_idarr = [];
|
||||||
report_idarr.push(X.DATA.user_property);
|
report_idarr.push(X.DATA.user_propertyid);
|
||||||
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_idarr},function(d){
|
X.api('report/read_report','post',{project_id:X.DATA.projectid,report_id:report_idarr},function(d){
|
||||||
backfilldata(d[0]);
|
backfilldata(d[0]);
|
||||||
})
|
})
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
this.parms = parms;
|
this.parms = parms;
|
||||||
this.callback = parms.callback; //选择后执行的回调
|
this.callback = parms.callback; //选择后执行的回调
|
||||||
var data = parms.extData;//获取到上层弹窗传的数据
|
var data = parms.extData;//获取到上层弹窗传的数据
|
||||||
console.log(data);
|
|
||||||
// 给条件框赋值
|
// 给条件框赋值
|
||||||
X.laytpldata("#zhuang-tab-dot",data,'.zhuang_tab ');
|
X.laytpldata("#zhuang-tab-dot",data,'.zhuang_tab ');
|
||||||
|
|
||||||
@ -35,8 +35,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// $("#zhuang-conetnt-dot").html("");
|
// $("#zhuang-conetnt-dot").html("");
|
||||||
console.log(data);
|
|
||||||
console.log(arrData)
|
|
||||||
X.laytpldata("#zhuang-conetnt-dot",arrData,'.zhuang_conetnt ');
|
X.laytpldata("#zhuang-conetnt-dot",arrData,'.zhuang_conetnt ');
|
||||||
}else {
|
}else {
|
||||||
$('.zhuanghu_ss .qingkomg').hide();
|
$('.zhuanghu_ss .qingkomg').hide();
|
||||||
|
@ -267,6 +267,8 @@
|
|||||||
gourl = 'ltvmodel';
|
gourl = 'ltvmodel';
|
||||||
// layer.msg('暂未处理当前逻辑');
|
// layer.msg('暂未处理当前逻辑');
|
||||||
// return;
|
// return;
|
||||||
|
}else if(cat == 'user_property'){
|
||||||
|
gourl = 'attribute';
|
||||||
}
|
}
|
||||||
X.gourl(gourl,'conetnt');//跳到对应的分析页面
|
X.gourl(gourl,'conetnt');//跳到对应的分析页面
|
||||||
X.DATA[cat+'id'] = id;
|
X.DATA[cat+'id'] = id;
|
||||||
@ -509,9 +511,50 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
console.log(eventdata);
|
||||||
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
|
if(eventdata['modeltype'] == 'echarts' && eventdata['modelsize'] != 'small' ){
|
||||||
var myChart = echarts.init(document.getElementById(eventdata['id']));
|
var myChart = echarts.init(document.getElementById(eventdata['id']));
|
||||||
|
if(eventdata['cat'] == 'user_property'){
|
||||||
|
var option = {
|
||||||
|
tooltip: {
|
||||||
|
trigger: 'axis',
|
||||||
|
axisPointer: {
|
||||||
|
type: 'cross',
|
||||||
|
label: {
|
||||||
|
backgroundColor: '#6a7985'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
color: X.DATA.echartscolor,
|
||||||
|
// legend: {
|
||||||
|
// data: legendData
|
||||||
|
// },
|
||||||
|
grid: {
|
||||||
|
left: '2%',
|
||||||
|
right: '2%',
|
||||||
|
bottom: '2%',
|
||||||
|
top: '10%',
|
||||||
|
containLabel: true
|
||||||
|
},
|
||||||
|
xAxis: [
|
||||||
|
{
|
||||||
|
type: 'category',
|
||||||
|
axisTick: {show: false},
|
||||||
|
data: eventdata['xAxisData']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
yAxis: [
|
||||||
|
{
|
||||||
|
type: 'value'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
series: [{
|
||||||
|
data: eventdata['seriesData'],
|
||||||
|
type: 'bar',
|
||||||
|
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
}else{
|
||||||
var option = {
|
var option = {
|
||||||
title: {
|
title: {
|
||||||
text: ''
|
text: ''
|
||||||
@ -551,6 +594,8 @@
|
|||||||
],
|
],
|
||||||
series: eventdata['seriesData']
|
series: eventdata['seriesData']
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
myChart.setOption(option,true);
|
myChart.setOption(option,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,6 +474,20 @@
|
|||||||
retaineddata();
|
retaineddata();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//留存流失
|
||||||
|
var retentionloss = [
|
||||||
|
{'title':'留存','id':0},
|
||||||
|
{'title':'流失','id':1}
|
||||||
|
]
|
||||||
|
var retentiontype = 0;//判断是显示流失数据还是留存
|
||||||
|
X.laydropdown('.retention-loss',retentionloss,function(d){
|
||||||
|
$('.retention-loss').html(d.title);
|
||||||
|
if(querydata['summary_values']){
|
||||||
|
retentiontype = d.id;
|
||||||
|
updata(querydata);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// 计算按钮
|
// 计算按钮
|
||||||
$(document).off('click','.analysis-calculation').on('click','.analysis-calculation',function(){
|
$(document).off('click','.analysis-calculation').on('click','.analysis-calculation',function(){
|
||||||
// console.log(data);
|
// console.log(data);
|
||||||
@ -543,6 +557,14 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
function retainedtable(d){
|
function retainedtable(d){
|
||||||
|
var nname,pname
|
||||||
|
if(retentiontype == 0) {
|
||||||
|
nname = 'n';
|
||||||
|
pname = 'p';
|
||||||
|
}else {
|
||||||
|
nname = 'n_outflow';
|
||||||
|
pname = 'p_outflow';
|
||||||
|
}
|
||||||
var tabledata=[];
|
var tabledata=[];
|
||||||
for(let i in d['summary_values']){
|
for(let i in d['summary_values']){
|
||||||
var arr = {
|
var arr = {
|
||||||
@ -555,8 +577,8 @@
|
|||||||
n:0,
|
n:0,
|
||||||
p:0
|
p:0
|
||||||
}
|
}
|
||||||
nrr["n"] = d['summary_values'][i]["n"][j];
|
nrr["n"] = d['summary_values'][i][nname][j];
|
||||||
nrr["p"] = d['summary_values'][i]["p"][j]
|
nrr["p"] = d['summary_values'][i][pname][j]
|
||||||
arr['data'].push(nrr);
|
arr['data'].push(nrr);
|
||||||
}
|
}
|
||||||
tabledata.push(arr)
|
tabledata.push(arr)
|
||||||
@ -678,14 +700,22 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
function retainednRetained(d){
|
function retainednRetained(d){
|
||||||
|
var nname,pname
|
||||||
|
if(retentiontype == 0) {
|
||||||
|
nname = 'n';
|
||||||
|
pname = 'p';
|
||||||
|
}else {
|
||||||
|
nname = 'n_outflow';
|
||||||
|
pname = 'p_outflow';
|
||||||
|
}
|
||||||
var arr = {};
|
var arr = {};
|
||||||
var legenddata = [];
|
var legenddata = [];
|
||||||
var seriesData = [];
|
var seriesData = [];
|
||||||
if(jQuery.isEmptyObject(d.values)){
|
if(jQuery.isEmptyObject(d.values)){
|
||||||
var arr = []
|
var arr = []
|
||||||
for(let i in d['summary_values']){
|
for(let i in d['summary_values']){
|
||||||
var index = d['summary_values'][i]['p'].length - 1;
|
var index = d['summary_values'][i][pname].length - 1;
|
||||||
arr.push(d['summary_values'][i]['p'][index]);
|
arr.push(d['summary_values'][i][pname][index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
seriesData = {
|
seriesData = {
|
||||||
@ -698,10 +728,10 @@
|
|||||||
timearr.push(i);
|
timearr.push(i);
|
||||||
for(let j in d.values[i]){
|
for(let j in d.values[i]){
|
||||||
if(arr[j]){
|
if(arr[j]){
|
||||||
arr[j][i] = d.values[i][j]['p'];
|
arr[j][i] = d.values[i][j][pname];
|
||||||
}else {
|
}else {
|
||||||
arr[j]=[];
|
arr[j]=[];
|
||||||
arr[j][i] = d.values[i][j]['p'];
|
arr[j][i] = d.values[i][j][pname];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -732,8 +762,6 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(seriesData);
|
|
||||||
|
|
||||||
var myChart = echarts.init(document.getElementById('analysis-echarts'));
|
var myChart = echarts.init(document.getElementById('analysis-echarts'));
|
||||||
var option = {
|
var option = {
|
||||||
title: {
|
title: {
|
||||||
|
Loading…
Reference in New Issue
Block a user