This commit is contained in:
罗松柏 2021-10-21 18:51:52 +08:00
parent cb97a10532
commit d5842dafbf
33 changed files with 6158 additions and 52 deletions

449
web/pages/3rmodel.html Normal file
View File

@ -0,0 +1,449 @@
<!-- 分析 -->
<div class="analysis-zhanwei">
</div>
<div class="analysis-navigation-bar-box">
<div class="analysis-navigation-bar">
<div class="analysis-navigation-bar-left">
<span>3R模型</span><img src="./static/img/capytishi.png" title="分析某段时间内,某个事件或事件属性的整体趋势情况"/>
<div class="analysis-navigation-bar-datetime">当前时区</div>
</div>
<div class="analysis-navigation-bar-right">
<div class="analysis-navigation-bar-right-jisuan">
<span>近似计算</span>
<div class="layui-form" title="开启后,将近似计算触发用户数,人均次数,人均值和去重数,极大优化性能减少计算时间,结果偏差控制在千分之四内">
<div class="layui-form-item modify-layui-form-item" style="margin-bottom: 0px !important;">
<input type="checkbox" name="close" lay-skin="switch" lay-text="" class="sqsz">
</div>
</div>
</div>
<div class="analysis-navigation-bar-right-img" title="最后更新时间2021-04-29 14:44:39">
<img src="./static/img/gengxin.png">
</div>
<div class="analysis-navigation-bar-right-img sqlquery" title="查看条件代码">
<i class="iconfont" style="font-size: 18px; color: #67729d;">&#xe727;</i>
</div>
<div class="analysis-navigation-bar-right-img download-table" title="以页面格式下载全量数据">
<img src="./static/img/xiazai.png">
</div>
<div class="analysis-navigation-bar-right-img analysis-navigation-bar-right-img-baobiao" title="报表">
<img src="./static/img/baobiao2.png">
</div>
<div class="analysis-navigation-bar-right-img analysis-fanhui" title="返回">
<img src="./static/img/fanhui.png">
<span>返回</span>
</div>
</div>
</div>
<div class="analysis-bg">
<!-- 左侧条件筛选区域 -->
<div class="analysis-con-left">
<!-- 伸缩按钮 -->
<div class="analysis-con-left-shrink"></div>
<div class="root___2a4tb">
<div class="block___2n0We">
<div class="analysis-con-left-title">3R</div>
<div class="analysis-con-left-screen-box">
<div class="analysis-zhibiao-list">
<div class="analysis-zhibiao-list-type1 analysis-background" style="border: 0;">小r小于</div>
<div class="analysis-overall-situation-input3">
<input type="text" data-index="0">
</div>
</div>
<div class="analysis-zhibiao-list" style="margin-top: 16px;">
<div class="analysis-zhibiao-list-type1 analysis-background" style="border: 0;">中r小于</div>
<div class="analysis-overall-situation-input3">
<input type="text" data-index="1">
</div>
</div>
</div>
</div>
<div class="block___2n0We">
<div class="analysis-con-left-title">分析指标</div>
<div class="analysis-con-left-screen-box">
<div class="analysis-con-left-screen-list-box">
</div>
<div class="analysis-bottom-box">
<div class="analysis-bottom-jia1">
<span>+</span> 添加指标
</div>
<!-- <div class="analysis-bottom-jiagongshi">
<span>
<img src="./static/img/gongshi.png"/>
</span> 添加公式
</div> -->
</div>
</div>
</div>
<div class="block___2n0We analysis-overall">
<div class="analysis-con-left-title">全局筛选</div>
<div class="analysis-con-left-screen-box">
<div class="analysis-overall-situation-box">
<div class="analysis-overall-situation-left-box">
<div class="analysis-overall-situation-left-xian"></div>
<div class="analysis-overall-situation-left-guanxi"></div>
</div>
<div class="analysis-overall-situation-list-box">
<!-- <div class="analysis-overall-situation-list">
<div class="analysis-overall-situation-attr">最后登录时间</div>
<div class="analysis-overall-situation-fuhao">相对事件发生时刻</div>
<div class="analysis-overall-situation-input"> <input type="text" placeholder="多个用,隔开"/> </div> -->
<!-- <span class="analysis-overall-situation-section-box">
<div> 区间 </div> <div> <input type="text" value="-1" /> </div> <span></span> <div> <input type="text" value="-1" /> </div>
<div>天(相对)</div>
<span></span>
</span> -->
<!-- <span class="analysis-overall-situation-time-box">
<span class="layui-form">
<input type="text" id="analysis-overall-situation-time1" placeholder=" - ">
</span>
</span> -->
<!-- <p class="analysis-overall-situation-del"> <img src="./static/img/cha1.png"> </p>
</div> -->
</div>
</div>
<div class="analysis-foot___P797w">
<span class="analysis-overall-situation-add">
<img src="./static/img/fenzu.png">
添加条件
</span>
</div>
</div>
</div>
<div class="block___2n0We">
<div class="analysis-con-left-title">
<div>分组项</div>
<!-- <div class="analysis-event-splitting"><img src="./static/img/chaifen.png"> 事件拆分</div> -->
</div>
<div class="analysis-con-left-screen-box">
<div class="analysis-gpmain___3YGfw">
<!-- <div class="analysis-action-row">
<div class="analysis-action-left">
<div class="analysis-num bgcolor">1</div>
<div class="analysis-ant-dropdown-trigger">
<img src="./static/img/shaix2.png"/>
<span>SDK类型</span>
</div>
</div>
<div class="analysis-ta-property-range analysis-granularity"> <img src="./static/img/shezhi2.png"> </div>
<div class="analysis-ta-property-range analysis-section"> <img src="./static/img/shezhi2.png"> </div>
<div class="analysis-action-right"> <img src="./static/img/cha1.png"/> </div>
</div> -->
</div>
<div class="analysis-foot___P797w">
<span class="analysis-footadd___2D4YB">
<img src="./static/img/fenzu.png">
添加分组项
</span>
</div>
</div>
</div>
</div>
<div class="analysis-but-box">
<div class="analysis-savereport">保存报表</div>
<div class="analysis-calculation">计 算</div>
</div>
</div>
<!-- 右边图表显示区域 -->
<div class="analysis-con-right">
<div class="analtsis-con-box">
<div class="analtsis-con-right-box">
<div class="analtsis-con-right-top-title">
<!-- 玩法参与情况 -->
</div>
<div class="analtsis-condition-box">
<div class="analtsis-time-box">
<div class="analtsis-condition" > <input id="analtsis-condition-date" readonly="readonly"></input> </div>
<div class="analtsis-condition analtsis-timeParticleSize">按天</div>
</div>
<div class="analtsis-condition-right-box">
<div class="analtsis-condition">指标</div>
<div class="analtsis-condition">分组</div>
<div class="analtsis-chart-switch-box">
<div class="analtsis-chart-switch" title="趋势图"> <i class="iconfont" style="font-size: 18px; ">&#xe600;</i> </div>
<div class="analtsis-chart-switch select-chart" title="堆积图"> <i class="iconfont" style="font-size: 18px; ">&#xe61f;</i> </div>
<!-- <div class="analtsis-chart-switch" title="累计图"> <i class="iconfont" style="font-size: 18px; ">&#xe711;</i> </div> -->
<div class="analtsis-chart-switch" title="分布图"> <i class="iconfont" style="font-size: 18px; ">&#xe60b;</i> </div>
<!-- <div class="analtsis-chart-switch" title="饼状分布"> <i class="iconfont" style="font-size: 18px;">&#xe684;</i> </div> -->
</div>
</div>
</div>
<!-- 统计图 -->
<div class="analysis-echarts" id="analysis-echarts"></div>
<div class="table-div-box">
<table class="table-fenxi-box">
<thead>
<tr class="table-fenxi-th">
</tr>
</thead>
<tbody class="table-fenxi-td">
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<script id="table-fenxi-th-dot" type="text/html">
{{# layui.each(d, function(index, item){ }}
<th>{{item}}</th>
{{# }); }}
</script>
<script id="table-fenxi-td-dot" type="text/html">
{{# layui.each(d, function(index, item){ }}
<tr>
{{# layui.each(d[index], function(indexs, items){ }}
<td>{{items}}</td>
{{# }); }}
</tr>
{{# }); }}
</script>
<script id="analysis-con-left-screen-list-dot" type="text/html">
{{# layui.each(d, function(index, item){ }}
<div class="analysis-con-left-screen-list">
<!-- 指标选择 -->
{{# if(item.customEvent != "" && item.customEvent != undefined){ }}
<div class="analysis-con-left-screen-list-left-box" id="analysis-con-left-screen-list-left-box-{{index}}" style="display: none;">
{{# } else { }}
<div class="analysis-con-left-screen-list-left-box" id="analysis-con-left-screen-list-left-box-{{index}}">
{{# } }}
{{# if(item.eventNameDisplay != "" && item.eventNameDisplay != undefined){ }}
<div class="analysis-con-left-screen-list-left-zhibiaoname" id="analysis-con-left-screen-list-left-zhibiaoname-{{index}}" style="display: block;">
<input type="text" placeholder="请输入指标名" value="{{item.eventNameDisplay}}" class="analysis-con-left-screen-list-left-zhibiaoname-txt" data-index="{{index}}"/>
</div>
{{# } else { }}
<div class="analysis-con-left-screen-list-left-zhibiaoname" id="analysis-con-left-screen-list-left-zhibiaoname-{{index}}">
<input type="text" placeholder="请输入指标名" class="analysis-con-left-screen-list-left-zhibiaoname-txt" data-index="{{index}}"/>
</div>
{{# } }}
<div class="analysis-con-left-screen-list-left">
<div class="analysis-num">{{index}}</div>
<div class="analysis-zhibiao-list">
<div class="ant-dropdown-trigger analysis-zhibiao-list-type1 analysis-background" data-index="{{index}}"> {{item.event_desc}} </div>
<span style="margin-left: 6px;"></span>
<div id="analysis-zhibiao-list-type2-{{index}}" class="analysis-zhibiao-list-type2 analysis-background" data-index="{{index}}">{{item.event_attr}}</div>
{{# if(item.event_attr_id != "*"){ }}
<div id="analysis-zhibiao-list-type3-{{index}}" class="analysis-zhibiao-list-type3 analysis-background analysis-zhibiao-condition" data-index="{{index}}" data-type="{{item.event_attr_type}}">{{item.analysisname}}</div>
{{# } else { }}
<!-- <div id="analysis-zhibiao-list-type3-{{index}}" class="analysis-zhibiao-list-type3 analysis-background analysis-zhibiao-condition" data-index="{{index}}"></div> -->
{{# } }}
</div>
</div>
{{# if(item.filts.length > 0){ }}
<div class="analysis-con-left-screen-list-right-screen-bg" id="analysis-con-left-screen-list-right-screen-bg-{{index}}">
<div class="analysis-con-left-screen-list-right-screen-box">
<div class="analysis-con-left-screen-list-right-screen-qh">
<div class="analysis-con-left-screen-list-right-screen-qh-xian"></div>
{{# if(item.filts.length > 1){ }}
{{# if(item.condrelation === "and"){ }}
<div class="analysis-con-left-screen-list-right-screen-qh-tit" data-index="{{index}}"></div>
{{# } else { }}
<div class="analysis-con-left-screen-list-right-screen-qh-tit" data-index="{{index}}"></div>
{{# } }}
{{# } }}
</div>
<div style="padding-bottom: 10px;" class="analysis-zhibiao-list2-box">
{{# layui.each(item.filts, function(indexs, items){ }}
<div class="analysis-zhibiao-list analysis-zhibiao-list-mar" id="analysis-zhibiao-list-mar-{{index}}-{{indexs}}">
<div id="ta-property-select-{{index}}-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="{{index}}" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="{{index}}" data-indexs="{{indexs}}" data-type="{{items.data_type}}">{{items.comparator_name}}</div>
<!-- {{# if(item.comparator_id != "is null" && item.comparator_id != "is not null" && item.comparator_id !="not null" && item.comparator_id != "range"){ }} -->
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{index}}-{{indexs}}"> <input type="text" data-index="{{index}}" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}"> </div>
<!-- {{# } }} -->
<div class="analysis-zhibiao-list-del" data-index="{{index}}" data-twonum="{{indexs}}"></div>
</div>
{{# }); }}
</div>
</div>
<div class="analysis-zhibiao-updata-list-box">
<span class="analysis-zhibiao-updata" data-index={{index}}> <img src="./static/img/shaix.png" /> 添加条件 </span>
</div>
</div>
{{# } }}
</div>
<!-- 公式 -->
{{# if(item.customEvent != "" && item.customEvent != undefined){ }}
<div class="analysis-custom-box" id="analysis-custom-box-{{index}}" style="display: block;">
{{# } else { }}
<div class="analysis-custom-box" id="analysis-custom-box-{{index}}">
{{# } }}
<div class="analysis-custom-top">
<div class="analysis-num">{{index}}</div>
<div class="analysis-con-left-screen-list-left-zhibiaoname2"> <input data-index="{{index}}" type="text" value="{{item.eventNameDisplay}}" placeholder="请出入指标名"/></div>
</div>
<div class="analysis-custom-event-box">
<input class="analysis-custom-event-txt" data-index="{{index}}" type="text" value="{{item.customEvent}}" placeholder="直接输入运算符或点击选择事件"/>
</div>
<div class="analysis-custom-event-dis-box" id="analysis-custom-event-dis-box-{{index}}">
<div class="analysis-custom-event-box analysis-custom-event-box-display">
<div class="analysis-custom-event-type">用户登录</div>
<div class="analysis-custom-event-img"></div>
<div class="">.</div>
<div class="analysis-custom-event-type">触发用户数</div>
</div>
</div>
{{# if(item.filts.length > 0){ }}
<div class="analysis-con-left-screen-list-right-screen-bg">
<div class="analysis-con-left-screen-list-right-screen-box">
<div class="analysis-con-left-screen-list-right-screen-qh">
<div class="analysis-con-left-screen-list-right-screen-qh-xian"></div>
{{# if(item.filts.length > 1){ }}
{{# if(item.condrelation === "and"){ }}
<div class="analysis-con-left-screen-list-right-screen-qh-tit" data-index="{{index}}"></div>
{{# } else { }}
<div class="analysis-con-left-screen-list-right-screen-qh-tit" data-index="{{index}}"></div>
{{# } }}
{{# } }}
</div>
<div style="padding-bottom: 10px;" class="analysis-zhibiao-list2-box">
{{# layui.each(item.filts, function(indexs, items){ }}
<div class="analysis-zhibiao-list analysis-zhibiao-list-mar" id="analysis-zhibiao-list-mar-{{index}}-{{indexs}}">
<div id="ta-property-select-{{index}}-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="{{index}}" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="{{index}}" data-indexs="{{indexs}}">{{items.comparator_name}}</div>
<!-- {{# if(item.comparator_id != "is null" && item.comparator_id != "is not null" && item.comparator_id !="not null" && item.comparator_id != "range"){ }} -->
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{index}}-{{indexs}}"> <input type="text" data-index="{{index}}" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}"> </div>
<!-- {{# } }} -->
<div class="analysis-zhibiao-list-del" data-index="{{index}}" data-twonum="{{indexs}}"></div>
</div>
{{# }); }}
</div>
</div>
<!-- <div class="analysis-zhibiao-updata-list-box">
<span class="analysis-zhibiao-updata" data-index={{index}}> <img src="./static/img/shaix.png" /> 添加条件 </span>
</div> -->
</div>
{{# } }}
{{# if(item.formatname == undefined){ }}
<div class="ant-select-selector" data-index="{{index}}">两位小数</div>
{{# } else { }}
<div class="ant-select-selector" data-index="{{index}}">{{item.formatname}}</div>
{{# } }}
</div>
<!-- 操作按钮 -->
<div class="analysis-con-left-screen-list-right-box">
<div class="analysis-con-left-screen-list-right" id="analysis-con-left-screen-list-right-{{index}}">
<div class="analysis-chongmingming" data-index="{{index}}" title="重命名指标"></div>
<div class="analysis-chongmingming-del" data-index="{{index}}" title="取消重命名"></div>
<div class="analysis-shaix analysis-shaix-jinting" data-index="{{index}}" title="指标筛选"></div>
<div class="analysis-gongshi analysis-zuhe" data-index="{{index}}" data-type="combination" title="组合"></div>
<div class="analysis-gongshi" data-index="{{index}}" data-type="formula" title="切换为指标公式"></div>
<div class="analysis-zhibiao" data-index="{{index}}" title="切换为指标选择"></div>
<div class="analysis-jia1" data-index="{{index}}" title="添加指标"></div>
<div class="analysis-fuzhi" title="复制指标" data-index="{{index}}"></div>
<div class="analysis-del" data-index="{{index}}" title="删除指标"></div>
</div>
</div>
</div>
{{# }); }}
</script>
<script id="analysis-gpmain___3YGfw-dot" type="text/html">
{{# layui.each(d, function(index, item){ }}
<div class="analysis-action-row">
<div class="analysis-action-left">
<div class="analysis-num bgcolor">{{index}}</div>
<div class="analysis-ant-dropdown-trigger" data-index="{{index}}">
<!-- <img src="./static/img/shaix2.png"/> -->
<span>{{item.columnDesc}}</span>
</div>
</div>
<!-- <div class="analysis-ta-property-range analysis-granularity" data-index="{{index}}" data-type="{{item.data_type}}"> <img src="./static/img/shezhi2.png"> </div> -->
<!-- {{# if(item.data_type === "int"){ }}
<div class="analysis-ta-property-range analysis-section"> <img src="./static/img/shezhi2.png"> </div>
{{# } }} -->
{{# if(item.data_type === "datetime"){ }}
<div class="analysis-ta-property-range analysis-granularity" data-index="{{index}}" data-type="{{item.data_type}}"> <img src="./static/img/shezhi2.png"> </div>
{{# } }}
{{# if(item.data_type === "array"){ }}
<div class="analysis-ta-property-range analysis-granularity" data-index="{{index}}" data-type="{{item.data_type}}"> <img src="./static/img/shezhi2.png"> </div>
{{# } }}
<div class="analysis-action-right" data-index="{{index}}"> <img src="./static/img/cha1.png"/> </div>
</div>
{{# }); }}
</script>
<script id="analysis-overall-situation-list-box-dot" type="text/html">
{{# layui.each(d, function(index, item){ }}
<div class="analysis-overall-situation-list">
<div class="analysis-overall-situation-attr" data-index="{{index}}">{{item.columnDesc}}</div>
<div class="analysis-overall-situation-fuhao" id="analysis-overall-situation-fuhao-{{index}}" data-index="{{index}}" data-type="{{item.data_type}}" >{{item.comparator_name}}</div>
{{# if(item.comparator_id != "is null" && item.comparator_id != "is not null" && item.comparator_id !="not null" && item.comparator_id != "range"){ }}
<!-- <div class="analysis-overall-situation-input" > <input type="text" data-index="{{index}}" placeholder="多个用,隔开" value="{{item.strftv}}" /> </div> -->
{{# if(item.data_type != "datetime"){ }}
<div class="analysis-overall-situation-input" data-type="{{item.data_type}}">
<input type="text" data-index="{{index}}" placeholder="多个用,隔开" value="{{item.strftv}}" data-type="{{item.data_type}}"/>
</div>
{{# } else { }}
<div class="analysis-overall-situation-date" id="analysis-overall-situation-date{{index}}" data-type="{{item.data_type}}" data-index="{{index}}">
{{item.ftv}}
</div>
{{# } }}
{{# } }}
{{# if(item.comparator_id === "range"){ }}
<div class="analysis-overall-situation-input2" > <input data-index="{{index}}" type="text" value="{{item.section[0]}}" name="start"/> <span></span> <input data-index="{{index}}" name="end" type="text" value="{{item.section[1]}}"/> <span>之间</span> </div>
{{# } }}
<p class="analysis-overall-situation-del" data-index="{{index}}"> <img src="./static/img/cha1.png"> </p>
</div>
{{# }); }}
</script>

View File

@ -277,7 +277,11 @@
<div id="ta-property-select-{{index}}-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="{{index}}" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="{{index}}" data-indexs="{{indexs}}" data-type="{{items.data_type}}">{{items.comparator_name}}</div>
<!-- {{# if(item.comparator_id != "is null" && item.comparator_id != "is not null" && item.comparator_id !="not null" && item.comparator_id != "range"){ }} -->
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{index}}-{{indexs}}"> <input type="text" data-index="{{index}}" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}"> </div>
{{# if(items.tableType != "user_label"){ }}
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{index}}-{{indexs}}">
<input type="text" data-index="{{index}}" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}">
</div>
{{# } }}
<!-- {{# } }} -->
<div class="analysis-zhibiao-list-del" data-index="{{index}}" data-twonum="{{indexs}}"></div>
</div>
@ -404,10 +408,12 @@
<div class="analysis-overall-situation-fuhao" id="analysis-overall-situation-fuhao-{{index}}" data-index="{{index}}" data-type="{{item.data_type}}" >{{item.comparator_name}}</div>
{{# if(item.comparator_id != "is null" && item.comparator_id != "is not null" && item.comparator_id !="not null" && item.comparator_id != "range"){ }}
<!-- <div class="analysis-overall-situation-input" > <input type="text" data-index="{{index}}" placeholder="多个用,隔开" value="{{item.strftv}}" /> </div> -->
{{# if(item.data_type != "datetime"){ }}
{{# if(item.data_type != "datetime" && item.data_type != "user_label"){ }}
<div class="analysis-overall-situation-input" data-type="{{item.data_type}}">
<input type="text" data-index="{{index}}" placeholder="多个用,隔开" value="{{item.strftv}}" data-type="{{item.data_type}}"/>
</div>
{{# } else if(item.data_type == "user_label"){ }}
{{# } else { }}
<div class="analysis-overall-situation-date" id="analysis-overall-situation-date{{index}}" data-type="{{item.data_type}}" data-index="{{index}}">
{{item.ftv}}

View File

@ -30,6 +30,7 @@
<dd><a class="ajax-content" href="analysis" data-id="conetnt">事件分析</a></dd>
<dd><a class="ajax-content" href="retained" data-id="conetnt">留存分析</a></dd>
<dd><a class="ajax-content" href="ltvmodel" data-id="conetnt">LTV模型</a></dd>
<!-- <dd><a class="ajax-content" href="3rmodel" data-id="conetnt">3R模型</a></dd> -->
<dd><a class="ajax-content" href="funnelanalysis" data-id="conetnt">漏斗分析</a></dd>
<dd><a class="ajax-content" href="distribution" data-id="conetnt">分布分析</a></dd>
<dd><a class="ajax-content" href="routeanalysis" data-id="conetnt">路径分析</a></dd>
@ -41,7 +42,7 @@
<dl class="layui-nav-child">
<dd><a class="ajax-content" href="attribute" data-id="conetnt">属性分析</a></dd>
<dd><a class="ajax-content" href="usergroup" data-id="conetnt">用户分群</a></dd>
<dd><a href="javascript:void(0);">用户标签</a></dd>
<dd><a class="ajax-content" href="userlabel" data-id="conetnt">用户标签</a></dd>
</dl>
</li>
<li class="layui-nav-item">

View File

@ -32,8 +32,8 @@
<div class="analysis-zhibiao-list analysis-zhibiao-list-mar" id="analysis-zhibiao-list-mar-{{indexs}}">
<div id="ta-property-select-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="0" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="0" data-indexs="{{indexs}}">{{items.comparatorName}}</div>
{{# if(items.comparator != "is null" && items.comparator != "is not null" && items.comparator !="not null" && items.comparator != "range"){ }}
<div class="analysis-zhibiao-list-type4" >
{{# if(items.comparator != "is null" && items.comparator != "is not null" && items.comparator !="not null" && items.comparator != "range" && items.data_type != "user_label"){ }}
<div class="analysis-zhibiao-list-type4" data-type="{{items.data_type}}" >
<input type="text" id="analysis-zhibiao-list-type4-{{indexs}}" data-index="0" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}">
</div>
{{# } }}

View File

@ -5,10 +5,12 @@
<div class="analysis-overall-situation-attr" data-index="{{index}}">{{item.columnDesc}}</div>
<div class="analysis-overall-situation-fuhao" data-index="{{index}}" data-type="{{item.data_type}}" >{{item.comparator_name}}</div>
{{# if(item.comparator != "is null" && item.comparator != "is not null" && item.comparator !="not null" && item.comparator != "range"){ }}
{{# if(item.data_type != "datetime"){ }}
{{# if(item.data_type != "datetime" && item.data_type != "user_label"){ }}
<div class="analysis-overall-situation-input" data-type="{{item.data_type}}">
<input type="text" data-index="{{index}}" placeholder="多个用,隔开" value="{{item.strftv}}" data-type="{{item.data_type}}"/>
</div>
{{# } else if(item.data_type == "user_label"){ }}
{{# } else { }}
<div class="analysis-overall-situation-date" id="analysis-overall-situation-date{{index}}" data-type="{{item.data_type}}" data-index="{{index}}">
{{item.ftv}}

View File

@ -13,17 +13,17 @@
<div class="small-proportion">
{{# if(d.wowtype != ''){ }}
{{# if(d.wowtype == '-'){ }}
<div class="proportion-data">较环比 <div class="sanjiao"></div><span>{{d.wow}}%</span></div>
{{# if(d.wowtype == '+'){ }}
<div class="proportion-data" title="对比前一天">较环比 <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>
<div class="proportion-data" title="对比前一天">较环比 <div class="sanjiao fu"></div><span class="funum">{{d.wow}}%</span></div>
{{# } }}
{{# } }}
{{# if(d.chain_ratiotype != ''){ }}
{{# if(d.chain_ratiotype == "+"){ }}
<div class="proportion-data">较同比 <div class="sanjiao"></div><span>{{d.chain_ratio}}%</span></div>
<div class="proportion-data" title="对比前七天">较同比 <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 class="proportion-data" title="对比前七天">较同比 <div class="sanjiao fu"></div><span class="funum">{{d.chain_ratio}}%</span></div>
{{# } }}
{{# } }}
</div>
@ -107,7 +107,7 @@
{{# } }}
<div class="proportion">
{{# if(d.wowtype != ''){ }}
{{# if(d.wowtype == '-'){ }}
{{# if(d.wowtype == '+'){ }}
<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>

View File

@ -30,7 +30,9 @@
<div class="analysis-zhibiao-list analysis-zhibiao-list-mar" id="analysis-zhibiao-list-mar-{{indexs}}">
<div id="ta-property-select-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="1" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="1" data-indexs="{{indexs}}">{{items.comparatorName}}</div>
{{# if(items.comparator != "is null" && items.comparator != "is not null" && items.comparator !="not null" && items.comparator != "range" && items.data_type != "user_label"){ }}
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{indexs}}"> <input type="text" data-index="1" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}"> </div>
{{# } }}
<div class="analysis-zhibiao-list-del analysis-zhibiao-list-del-return-event" data-twonum="{{indexs}}"></div>
</div>
{{# }); }}

97
web/pages/userlabel.html Normal file
View File

@ -0,0 +1,97 @@
<div class="userlabel-box">
<div class="userlabel-left-box">
<div class="eventattradmin-top-box">
<div class="eventattradmin-left___y490Q">用户标签 <i class="layui-icon" title="将有相似特征的用户组成用户标签,并按不同特征值汇总用户。方便在各种模型中使用用户标签进行细分分析">&#xe60b;</i> </div>
<div class="eventattradmin-right___1TIt8">
<div class="eventattradmin-search___23TMG">
<i class="layui-icon">&#xe615;</i>
<input type="text" placeholder="请输入搜索" />
<img src="./static/img/cha1.png">
</div>
<div class="eventattradmin-actions___141YT addlabeldata">
<i class="layui-icon">&#xe624;</i>
<span>新建标签</span>
</div>
</div>
</div>
<div class="eventattradmin-table-box">
<table class="layui-hide" id="userlabel-table" lay-filter="userlabeltest" ></table>
</div>
</div>
<div class="userlabel-right-box">
</div>
</div>
<script id="userlabel-right-box-dot" type="text/html">
<div class="userlabel-right">
<div class="label-title-box">
<div class="label-box-title">用户标签</div>
<div class="lable-title-name">{{d.display_name}}</div>
</div>
<div class="label-info-box" style="border-bottom: 1px solid #e6e6e6;">
<span> <i class="iconfont" style="font-size: 14px; position: relative; top: 2px;">&#xe607;</i> 标签详情</span>
<span><i class="iconfont" style="font-size: 14px; ">&#xe61d;</i></span>
</div>
<!-- <div class="label-info-box" style="border-bottom: 1px solid #e6e6e6;">
<span> <i class="iconfont" style="font-size: 18px; ">;</i> 历史版本</span>
<span><i class="iconfont" style="font-size: 18px; ">&#xe61d;</i></span>
</div> -->
<div class="label-info-box-ov">
<div class="label-info-box-ov-title">自定义条件 <i class="layui-icon" title="筛选特定行为条件或用户属性的用户,并赋予标签值">&#xe60b;</i></div>
<div class="label-info-box-ov-del">
{{d.remarks}}
</div>
<div class="label-info-box-con" style="padding-top: 8px;">
<span>标签名</span>
<span class="label-info-box-con-right">{{d.cluster_name}}</span>
</div>
<div style="border-bottom: 1px solid #e6e6e6;">
<div class="label-info-box-con">
<span>创建人</span>
<span class="label-info-box-con-right">{{d.act_name}}</span>
</div>
<!-- <div class="label-info-box-con">
<span>用户数</span>
<span class="label-info-box-con-right">1526</span>
</div> -->
<!-- <div class="label-info-box-con" style="padding-bottom: 8px;">
<span>数据更新时间</span>
<span class="label-info-box-con-right">shafsdf</span>
</div> -->
</div>
<!-- <div class="labelval-box">
<div class="labelval-title-box">标签值</div>
<div class="labelval-list-box">
<div class="labelval-list">
<div class="labelval-list-top">
<span>小R</span>
<span>1537</span>
</div>
<div class="labelval-list-slide-box">
<div class="labelval-list-slide"></div>
</div>
</div>
</div>
</div> -->
</div>
<div class="label-but-box">
<div class="lable-dingyi" style="border-right: 1px solid #e6e6e6;"> <i class="iconfont" style="font-size: 14px; margin-right: 4px;">&#xe60d;</i> 定义</div>
<div class="lable-gengxin" style="border-right: 1px solid #e6e6e6;"> <i class="iconfont" style="font-size: 14px; margin-right: 4px;">&#xe628;</i> 更新</div>
<div class="lable-del"> <i class="iconfont" style="font-size: 14px; margin-right: 4px;">&#xe611;</i> 删除</div>
</div>
</div>
</script>

221
web/pages/userlabel_dy.html Normal file
View File

@ -0,0 +1,221 @@
<div class="userlabel-dy-box">
<div class="userlabel-dy-head-box">
<p> <span class="userlabel-dy-head-userlabel" style="">用户标签</span> / <span>编辑用户标签</span></p>
</div>
<div class="userlabel-dy-content-box">
<div class="userlabel-dy-content-box2">
<div class="userlabel-dy-left-box">
<div class="userlabel-dy-left-title">
标签信息
</div>
<div class="userlabel-dy-left-item">
<p>标签名</p>
<input type="text" class="lablename"/>
</div>
<div class="userlabel-dy-left-item">
<p>显示名</p>
<input type="text" class="labledesc"/>
</div>
<div class="userlabel-dy-left-item">
<p>备注(选填)</p>
<textarea class="labeldes" >
</textarea>
</div>
</div>
<div class="userlabel-dy-right-box">
<div class="userlabel-dy-right-box-top">
<div class="userlabel-dy-right-head-box">
<div>自定义条件配置</div>
<p>筛选特定行为条件或用户属性的用户,并赋予标签值;用户优先匹配至满足条件且顺序靠前的标签值中</p>
</div>
<!-- <div class="userlabel-dy-right-title-box">
<div class="userlabel-dy-right-title-box2">
<div class="userlabel-dy-right-title">xxxxx</div>
</div>
</div> -->
<!-- <div class="userlabel-dy-right-labelname-box">
<div class="userlabel-dy-right-labelname-root">
<div class="userlabel-dy-right-labelname-root-item">
<div class="userlabel-dy-right-labelname-root-item-title">标签值名称</div>
<div class="userlabel-dy-right-labelname-root-item-input">
<input type="text">
</div>
</div>
<div class="userlabel-dy-right-labelname-root-item" style="border-bottom: 1px dashed #f0f0f0;">
<div class="userlabel-dy-right-labelname-root-item-title">标签值备注</div>
<div class="userlabel-dy-right-labelname-root-item-input">
<textarea ></textarea>
</div>
</div>
</div>
</div> -->
<div class="userlabel-dy-right-head-box">
<div>标签值定义 <span class="choicelabel"> <i class="iconfont" style="font-size: 14px; margin-right: 4px;">&#xe607;</i> 添加标签值条件</span></div>
</div>
<div class="userlabel-json-box">
</div>
</div>
<div class="userlabel-json-but-box">
<div class="userlabel-dy-baocun">保存</div>
</div>
</div>
</div>
</div>
</div>
<script id="userlabel-json-box-dot" type="text/html">
<div class="userlabel-json-relation-editor ">
{{# if(d.filts.length != 0 && d.events.length != 0){ }}
<div class="userlabel-json-relation-relation">
<em class="userlabel-json-relation-relation-line"></em>
<div class="userlabel-json-relation-relation-value"></div>
</div>
{{# } }}
<div class="userlabel-json-relation-main">
<div class="userlabel-json-relation-row">
<div class="userlabel-json-relation-editor">
{{# if(d.events.length > 1){ }}
<div class="userlabel-json-relation-relation">
<em class="userlabel-json-relation-relation-line"></em>
<div class="userlabel-json-relation-relation-value"></div>
</div>
{{# } }}
<div class="userlabel-json-relation-main">
{{# layui.each(d.events, function(index, item) { }}
{{# if(item.is_touch == false){ }}
<div class="userlabel-json-relation-row userlabel-json-eventRow">
<div class="userlabel-json-action-row userlabel-json-event">
<div class="userlabel-json-action-left">
<div class="ta-editor-done-condition">
<span class="ta-isDone" data-index="{{index}}">没做过</span>
<div class="ant-dropdown-trigger ta-event-select my-event-data" data-index="{{index}}">
<span class="ta-event-select-label">{{item.eventDesc}}</span>
</div>
<span class="ta-bold">,在</span>
<span class="ant-dropdown-trigger ta-range-picker-label time-days-box" data-index="{{index}}">
过去{{item.s_days}}天
</span>
</div>
</div>
<div class="userlabel-json-action-right">
<div class="action-icon action-normal action-md action-action action-icon-shax">
<i class="iconfont" style="font-size: 22px; margin-right: 4px;">&#xe683;</i>
</div>
<div class="action-icon action-normal action-md action-action action-icon-del action-icon-events-del" data-index="{{index}}">
<i class="iconfont" style="font-size: 18px; margin-right: 4px;">&#xe611;</i>
</div>
</div>
</div>
</div>
{{# } else { }}
<div class="userlabel-json-relation-row userlabel-json-eventRow">
<div class="userlabel-json-action-row userlabel-json-event">
<div class="userlabel-json-action-left">
<div class="ta-editor-done-condition">
<span class="ta-isDone" data-index="{{index}}">做过</span>
<div class="ant-dropdown-trigger ta-event-select my-event-data" data-index="{{index}}">
<span class="ta-event-select-label">{{item.eventDesc}}</span>
</div>
<span class="ta-bold">.</span>
<div class="ant-dropdown-trigger ta-event-select load_prop_quotas_data" data-index="{{index}}">
<span class="ta-event-select-label">{{item.prop_quota.quotaDesc}}</span>
</div>
{{# if(item.prop_quota.quota_type != null){ }}
<div class="ant-dropdown-trigger ta-event-select analysis-data-box" data-index="{{index}}" data-type="{{item.prop_quota.quota_type}}">
<span class="ta-event-select-label">{{item.prop_quota.analysisDesc}}</span>
</div>
{{# } }}
<div class="ant-dropdown-trigger ta-event-select uce_calcu_symbol_box" data-index="{{index}}">
<span class="ta-event-select-label">{{item.uce_calcu_symbolDesc}}</span>
</div>
<div class="ant-input-number tant-input-number lable-input-box">
<input type="text" placeholder="多个用,隔开" data-index="{{index}}" value="{{item.num}}"/>
</div>
<span class="ta-bold">,在</span>
<span class="ant-dropdown-trigger ta-range-picker-label time-days-box" data-index="{{index}}">
过去{{item.s_days}}天
</span>
</div>
</div>
<div class="userlabel-json-action-right">
<div class="action-icon action-normal action-md action-action action-icon-shax action-icon-events-shax" data-index="{{index}}">
<i class="iconfont" style="font-size: 22px; margin-right: 4px;">&#xe683;</i>
</div>
<div class="action-icon action-normal action-md action-action action-icon-del action-icon-events-del" data-index="{{index}}">
<i class="iconfont" style="font-size: 18px; margin-right: 4px;">&#xe611;</i>
</div>
</div>
</div>
</div>
{{# } }}
{{# }); }}
</div>
</div>
</div>
<div class="userlabel-json-relation-row" style="margin-top: 8px;">
<div class="userlabel-json-relation-editor">
{{# if(d.filts.length > 1){ }}
<div class="userlabel-json-relation-relation">
<em class="userlabel-json-relation-relation-line"></em>
<div class="userlabel-json-relation-relation-value"></div>
</div>
{{# } }}
<div class="userlabel-json-relation-main">
<div class="userlabel-json-relation-row">
<div class="ta-multa-filter-condition">
{{# layui.each(d.filts, function(index, item) { }}
<div class="userlabel-json-action-row">
<div class="userlabel-json-action-left">
<div class="ta-filter-condition">
<span class="ta-property">用户属性</span>
<div class="ant-dropdown-trigger ta-property-select">
<span class="ta-property-select-label">账户ID</span>
</div>
<div class="ant-dropdown-trigger ta-property-select">
<span class="ta-property-select-label">等于</span>
</div>
<div class="ta-equal-search taDragDisable">
<input type="text"/>
</div>
</div>
</div>
<div class="userlabel-json-action-right">
<div class="action-icon action-normal action-md action-action action-icon-shax">
<i class="iconfont" style="font-size: 22px; margin-right: 4px;">&#xe683;</i>
</div>
<div class="action-icon action-normal action-md action-action action-icon-del">
<i class="iconfont" style="font-size: 18px; margin-right: 4px;">&#xe611;</i>
</div>
</div>
</div>
{{# }); }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</script>

View File

@ -35,7 +35,7 @@
<div class="analysis-zhibiao-list analysis-zhibiao-list-mar" id="analysis-zhibiao-list-mar-{{indexs}}">
<div id="ta-property-select-{{indexs}}" class="ta-property-select analysis-zhibiao-list-type1 analysis-background" data-index="0" data-indexs="{{indexs}}"> {{items.columnDesc}}</div>
<div class="analysis-zhibiao-list-type3 analysis-background analysis-choicetypename" data-index="0" data-indexs="{{indexs}}" data-type="{{items.data_type}}">{{items.comparator_name}}</div>
{{# if(items.comparator != "is null" && items.comparator != "is not null" && items.comparator !="not null" && items.comparator != "range"){ }}
{{# if(items.comparator != "is null" && items.comparator != "is not null" && items.comparator !="not null" && items.comparator != "range" && items.data_type != "user_label"){ }}
<div class="analysis-zhibiao-list-type4" id="analysis-zhibiao-list-type4-{{indexs}}"> <input type="text" data-index="0" data-indexs="{{indexs}}" placeholder="多个条件用,隔开" value="{{items.strftv}}"> </div>
{{# } }}
<div class="analysis-zhibiao-list-del analysis-zhibiao-list-del-initial-event" data-twonum="{{indexs}}"></div>

1373
web/src/mmGrid.js Normal file

File diff suppressed because it is too large Load Diff

231
web/src/mmPaginator.js Normal file
View File

@ -0,0 +1,231 @@
!function($){
var MMPaginator = function(element, options){
this.$el = $(element);
this.opts = options;
};
MMPaginator.prototype = {
_initLayout: function(){
var that = this;
var $el = this.$el;
var opts = this.opts;
$el.addClass("mmPaginator");
var pgHtmls = [
'<div class="totalCountLabel"></div>',
'<ul class="pageList"></ul>',
'<div class="limit"><select></select></div>'
];
$el.append($(pgHtmls.join('')));
this.$totalCountLabel = $el.find('.totalCountLabel');
this.$pageList = $el.find('.pageList');
this.$limitList = $el.find('.limit select');
var $limitList = this.$limitList
$.each(opts.limitList, function(){
var $option = $('<option></option>')
.prop('value',this)
.text(that.formatString(opts.limitLabel,[this]));
$limitList.append($option);
});
$limitList.on('change', function(){
$el.data('page', 1);
that.$mmGrid.load();
});
}
, _plain: function(page, totalCount, limit){
var that = this;
var $el = this.$el;
var $pageList = this.$pageList;
var totalPage = totalCount % limit === 0 ? parseInt(totalCount/limit) : parseInt(totalCount/limit) + 1;
totalPage = totalPage ? totalPage : 0;
if(totalPage === 0){
page = 1;
}else if(page > totalPage){
page = totalPage;
}else if(page < 1 && totalPage != 0){
page = 1;
}
//
var $prev = $('<li class="prev"><a>«</a></li>');
if(page<=1){
$prev.addClass('disable');
}else{
$prev.find('a').on('click', function(){
$el.data('page', page-1);
that.$mmGrid.load();
});
}
$pageList.append($prev);
/////
var list = [1];
if(page > 4 ){
list.push('...');
}
for(var i= 0; i < 5; i++){
var no = page - 2 + i;
if(no > 1 && no <= totalPage-1){
list.push(no);
}
}
if(page+1 < totalPage-1){
list.push('...');
}
if(totalPage>1){
list.push(totalPage);
}
$.each(list, function(index, item){
var $li = $('<li><a></a></li>');
if(item === '...'){
$li.addClass('').html('...');
}else if(item === page){
$li.addClass('active').find('a').text(item);
}else{
$li.find('a').text(item).prop('title','第'+item+'页').on('click', function(e){
$el.data('page', item);
that.$mmGrid.load();
});
}
$pageList.append($li);
});
//
var $next = $('<li class="next"><a title="下一页">»</a></li>');
if(page>=totalPage){
$next.addClass('disable');
}else{
$next.find('a').on('click', function(){
$el.data('page', page+1);
that.$mmGrid.load();
});
}
$pageList.append($next);
}
, _search: function(page, totalCount, limit){
}
, load: function(params){
var $el = this.$el;
var $limitList = this.$limitList;
var opts = this.opts;
if(!params){
params = {};
}
var page = params[opts.pageParamName];
if(page === undefined || page === null){
page = $el.data('page');
}
$el.data('page', page);
var totalCount = params[opts.totalCountName];
if(totalCount === undefined){
totalCount = 0;
}
$el.data('totalCount', totalCount);
var limit = params[opts.limitParamName];
if(!limit){
limit = $limitList.val();
}
this.$limitList.val(limit);
this.$totalCountLabel.html(this.formatString(opts.totalCountLabel,[totalCount]));
this.$pageList.empty();
this._plain(page, totalCount, this.$limitList.val());
}
, formatString: function(text, args){
return text.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
}
, params: function(){
var opts = this.opts;
var $el = this.$el;
var $limitList = this.$limitList;
var params = {};
params[opts.pageParamName] = $el.data('page');
params[opts.limitParamName] = $limitList.val();
return params;
}
, init: function($grid){
var that = this;
var opts = that.opts;
this.$mmGrid = $grid;
this._initLayout();
this.$mmGrid.on('loadSuccess', function(e, data){
that.load(data);
});
var params = {};
params[opts.totalCountName] = 0;
params[opts.pageParamName] = opts.page;
params[opts.limitParamName] = opts.limit;
this.load(params);
if($grid.opts.indexCol){
var indexCol = $grid.opts.cols[0];
indexCol.renderer = function(val,item,rowIndex){
var params = that.params();
return '<label class="mmg-index">' +
(rowIndex + 1 + ((params[opts.pageParamName]-1) * params[opts.limitParamName])) +
'</label>';
};
}
}
};
$.fn.mmPaginator = function(){
if(arguments.length === 0 || typeof arguments[0] === 'object'){
var option = arguments[0]
, data = this.data('mmPaginator')
, options = $.extend(true, {}, $.fn.mmPaginator.defaults, option);
if (!data) {
data = new MMPaginator(this[0], options);
this.data('mmPaginator', data);
}
return $.extend(true, this, data);
}
if(typeof arguments[0] === 'string'){
var data = this.data('mmPaginator');
var fn = data[arguments[0]];
if(fn){
var args = Array.prototype.slice.call(arguments);
return fn.apply(data,args.slice(1));
}
}
};
$.fn.mmPaginator.defaults = {
style: 'plain'
, totalCountName: 'totalCount'
, page: 1
, pageParamName: 'page'
, limitParamName: 'limit'
, limitLabel: '每页{0}条'
, totalCountLabel: '共<span>{0}</span>条记录'
, limit: undefined
, limitList: [20, 30, 40, 50]
};
$.fn.mmPaginator.Constructor = MMPaginator;
}(window.jQuery);

1549
web/src/x.min.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -56,7 +56,14 @@ var X = window.X || {
{'title':'有值','id':'4','default':false},
{'title':'无值','id':'5','default':false},
{'title':'区间','id':'6','default':false}
]
],
condition2:[
{'title':'等于','id':'==','default':false},
{'title':'不等于','id':'!=','default':false},
{'title':'小于','id':'<','default':true},
{'title':'大于','id':'>','default':false},
{'title':'区间','id':'range','default':false}
],
},
//日期控件参数
'locale': {
@ -338,7 +345,7 @@ var X = window.X || {
};
//渲染表格有分页有操作
X.laytabledata = function(id,url,data,arr,height){
X.laytabledata = function(id,url,data,arr,height,callback){
var loginCache = X.loginCache();
var token = (loginCache? loginCache.token:"");
token = "Bearer "+token;
@ -360,6 +367,9 @@ var X = window.X || {
,cellMinWidth: 80 //全局定义常规单元格的最小宽度layui 2.2.1 新增
,cols: data
,height: height
,done: function (res, curr, count) {
callback && callback(res, curr, count);
}
});
};
@ -558,14 +568,14 @@ var X = window.X || {
'locale': X.DATA.locale,
ranges: {
'今日': [moment(), moment()],
'昨日': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'昨日': [moment, 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(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'),

1153
web/srczip/logic/3rmodel.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -295,6 +295,7 @@
var index = obj.attr("data-index");
var indexs = obj.attr("data-indexs");
X.querycriteriapop(defaultgroupdata,'category',offset.left,offset.top+obj.height(),function(val){
console.log(val);
var htmlstring = val.title;
obj.html(htmlstring);
// filtersymbols[index][indexs] = val.category;
@ -302,6 +303,11 @@
data['events'][index]['filts'][indexs]['columnName'] = val.id;
data['events'][index]['filts'][indexs]['data_type'] = val.type;
data['events'][index]['filts'][indexs]['tableType'] = val.table_type;
if(val.type == 'user_label'){
data['events'][index]['filts'][indexs]['comparator_name'] = "是";
data['events'][index]['filts'][indexs]['comparator'] = 'in';
}
X.laytpldata("#analysis-con-left-screen-list-dot",data.events,".analysis-con-left-screen-list-box");
})
});
@ -715,6 +721,12 @@
data['eventView']['filts'][index]['comparator'] = '==';
data['eventView']['filts'][index]['tableType'] = val.table_type;
filtsftvdata[index]=val.category;
if(val.type == 'user_label'){
data['eventView']['filts'][index]['comparator_name'] = "是";
data['eventView']['filts'][index]['comparator'] = 'in';
}
X.laytpldata("#analysis-overall-situation-list-box-dot",data['eventView']['filts'],".analysis-overall-situation-list-box",function(){
renderdate();
});
@ -1056,12 +1068,12 @@
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]);
arr.unshift(d[i]['event_name'],d[i]['groups'][j],d[i]['sum'][j]);
condata.push(arr);
}
for(let j in condata){
condata[j].splice(1,0,d[i]['groups'][j]);
}
// for(let j in condata){
// condata[j].splice(1,0,d[i]['groups'][j]);
// }
}else {
titledata.unshift('指标','阶段总和');

View File

@ -833,6 +833,8 @@
}
//数据根据时间降序排列
if(d['ascending']){
// console.log()
console.log(eventdata);
var condatalength = eventdata[0]['condata'].length;
var condataascend=[];
for(var i = condatalength - 1; i >= 0; i--){

View File

@ -258,6 +258,10 @@
data['events'][index]['filts'][indexs]['columnName'] = val.id;
data['events'][index]['filts'][indexs]['data_type'] = val.type;
data['events'][index]['filts'][indexs]['tableType'] = val.table_type;
if(val.type == 'user_label'){
data['events'][index]['filts'][indexs]['comparator_name'] = "是";
data['events'][index]['filts'][indexs]['comparator'] = 'in';
}
X.template("userpar","userpar-event",data['events']);
})
});

View File

@ -135,6 +135,10 @@
data['eventView']['filts'][index]['comparator_name'] = '等于';
data['eventView']['filts'][index]['comparator'] = '==';
data['eventView']['filts'][index]['table_type'] = val.table_type;
if(val.type == 'user_label'){
data['eventView']['filts'][index]['comparator_name'] = "是";
data['eventView']['filts'][index]['comparator'] = 'in';
}
X.template("globalfilter","xinwei-whole",data['eventView']['filts'],function(){
renderdate();
});

View File

@ -12,14 +12,19 @@
// var oldcondata = data.condata;
// var newcondata = [];
// for(let i in oldcondata){
// var condataArr = {};
// for(let j in oldcondata[i]){
// condataArr['name'+j] = oldcondata[i][j];
// if(data.cat == 'event' || data.cat == "ltv"){
// for(let i in oldcondata){
// var condataArr = {};
// for(let j in oldcondata[i]){
// condataArr['name'+j] = oldcondata[i][j];
// }
// newcondata.push(condataArr);
// }
// newcondata.push(condataArr);
// }
// }else if(data.cat == "retention" || data.cat == "scatter"){
// console.log(oldcondata);
// }else if(data.cat == "user_property"){
// }
// var headdata = [];
// for(let i in data.titledata){
// var arr = {

View File

@ -244,7 +244,15 @@
data['events'][index]['filts'][indexs]['columnName'] = val.id;
data['events'][index]['filts'][indexs]['data_type'] = val.type;
data['events'][index]['filts'][indexs]['tableType'] = val.table_type;
if(val.type == 'user_label'){
data['events'][index]['filts'][indexs]['comparatorName'] = "是";
data['events'][index]['filts'][indexs]['comparator'] = 'in';
}
if(index == 0){
X.template("event","initial-event",data['events'][0]);
}else {
X.template("returnvisitevent","returnvisit-event",data['events'][1]);
}
})
});
@ -331,6 +339,12 @@
data['eventView']['filts'][index]['comparator'] = '==';
data['eventView']['filts'][index]['tableType'] = val.table_type;
filtsftvdata[index]=val.category;
if(val.type == 'user_label'){
data['eventView']['filts'][index]['comparator_name'] = "是";
data['eventView']['filts'][index]['comparator'] = 'in';
}
X.template("globalfilter","xinwei-whole",data['eventView']['filts'],function(){
renderdate();
});

View File

@ -0,0 +1,68 @@
(function(){
X.pageLogic['userlabel'] = {
init : function(parms){
var me = this;
me.userlabellist();
$(document).off('click','.lable-dingyi').on('click','.lable-dingyi',function(){
X.gourl('userlabel_dy','conetnt');
});
$(document).off('click','.addlabeldata').on('click','.addlabeldata',function(){
X.DATA.userlabelid = "";
X.gourl('userlabel_dy','conetnt');
});
$(document).off('click','.lable-del').on('click','.lable-del',function(){
var _id = X.DATA.userlabelid;
layer.confirm('确认删除选中的标签吗?该操作不可恢复', {
btn: ['取消','删除 '] //按钮
}, function(){
//取消
layer.close(layer.index);
}, function(){
//删除
X.api("user_label/del",'post',{label_id: _id},function(d){
layer.msg('删除成功');
layer.close(layer.index);
me.userlabellist();
})
});
});
// X.api('user_label/read','post',{project_id: X.DATA.projectid},function(d){
// console.log(d);
// })
// 监听单行事件
layui.table.on('row(userlabeltest)',function(obj){
var data = obj.data
console.log(data);
X.DATA.userlabelid = data._id;
X.laytpldata('#userlabel-right-box-dot',data,'.userlabel-right-box');
});
},
userlabellist : function(){
X.laytabledata("#userlabel-table","user_label/list",[[
{field:'cluster_name', title: '标签名', sort: true}
,{field:'display_name', title: '显示名'}
,{field:'act_name', title: '最后操作人'}
,{field:'cluster_type', title: '创建方式',templet:function(d){
if(d.cluster_type == "user_custom"){
return '自定义条件'
}else{
return '其他条件'
}
}}
// ,{fixed: 'right', title:'操作', toolbar: '#eventattradminbarDemo', width:80}
]],"&project_id="+X.DATA.projectid,'auto',function(res, curr, count){
// console.log(res);
if(res.data.length > 0){
X.DATA.userlabelid = res.data[0]._id;
X.laytpldata('#userlabel-right-box-dot',res.data[0],'.userlabel-right-box');
}
});
}
};
})();

View File

@ -0,0 +1,240 @@
(function(){
X.pageLogic['userlabel_dy'] = {
init : function(parms){
var me = this;
var _id = X.DATA.userlabelid;
var data;
if(_id && _id != ""){
X.api("user_label/detail","post",{label_id: _id},function(d){
data = d;
$(".lablename").val(d.cluster_name);
$(".labledesc").val(d.display_name);
$(".labeldes").val(d.remarks);
updatalable();
})
}else {
data = {
"project_id": X.DATA.projectid,
"cluster_name": "",
"display_name": "",
"cluster_type":'user_custom',
"qp": {
"tagRemark": "",
"tagValue": "",
"user_cluster_def": {
'event_relation':'and',
"event_user_relation":"and",
"events": [
],
"filts": [],
"relation": "and"
},
},
"remarks": ""
};
}
// 标签值定义
var choicelabellist=[
{'title':'做过(没做过事件)',id:'0'},
{'title':'用户属性满足',id:'1'}
];
X.laydropdown('.choicelabel',choicelabellist,function(e){
console.log(e);
var arr = {};
if(e.id == 0){
arr= {
endTime: "",
eventDesc: dataArr[0]['category'][0].event_desc,
event_name: dataArr[0]['category'][0].event_name,
eventType: "event",
filts: [],
num: "",
e_days:0,
s_days:7,
relation: "and",
startTime: "",
uce_calcu_symbol: "==",
uce_calcu_symbolDesc: "等于",
prop_quota: {analysis: '', analysisDesc: '', quota: retdata[0]['id'], quotaDesc: retdata[0]["title"],quota_type: null},
is_touch: true,
}
data['qp']['user_cluster_def']['events'].push(arr);
}else {
arr = {
calcuSymbol: "C01",
columnDesc: "",
columnName: "lv",
columnType: "double",
filterType: "SIMPLE",
ftv: ["10"],
selectType: "number",
tableType: "1",
timeRelative: "",
timeUnit: ""
}
data['qp']['user_cluster_def']['filts'].push(arr);
}
updatalable();
});
$(document).off('click','.userlabel-dy-head-userlabel').on('click','.userlabel-dy-head-userlabel',function(){
X.gourl('userlabel','conetnt');
});
$(document).off("click",'.ta-isDone').on("click",'.ta-isDone',function(){
var index = $(this).attr("data-index");
data['qp']['user_cluster_def']['events'][index]['is_touch'] = !data['qp']['user_cluster_def']['events'][index]['is_touch'];
updatalable();
});
var dataArr = [],retdata = [],props=[],defaultgroupdata=[],filter_map=[],quotas_map=[];
X.api("data_auth/my_event","get",{},function(d){
dataArr = d;
X.api("data_auth/load_prop_quotas","post",{event_name:dataArr[0]['category'][0]['event_name']},function(d){
retdata = d.staid_quots.concat(d.props);
props = d.props;
X.api("data_auth/load_filter_props","post",{event_name:dataArr[0]['category'][0]['event_name']},function(val){
defaultgroupdata = val;
X.api("data_auth/filter_map","get",{},function(d){
filter_map = d;
X.api('data_auth/quotas_map',"get",{},function(d){
quotas_map = d;
})
})
})
})
});
$(document).off("click",'.my-event-data').on('click','.my-event-data',function(){
var obj = $(this);
var offset = obj.offset();
var index = obj.attr('data-index');
X.querycriteriapop(dataArr,'setgrouping',offset.left,offset.top+obj.height(),function(val){
console.log(val);
data['qp']['user_cluster_def']['events'][index]['eventDesc'] = val.id;
data['qp']['user_cluster_def']['events'][index]['event_name'] = val.name;
updatalable();
})
});
var label_time_index; //点击修改日期的index;
$(document).off('click','.time-days-box').on("click",'.time-days-box',function(){
var index = $(this).attr("data-index");
label_time_index = index;
});
function updatalable(){
X.laytpldata('#userlabel-json-box-dot',data['qp']['user_cluster_def'],'.userlabel-json-box');
X.daterender(".time-days-box",function(start, end, label){
var startTime = start.format('YYYY-MM-DD')+ " "+ "00:00:00";
var endTime = end.format('YYYY-MM-DD')+ " "+ "23:59:59";
data['qp']['user_cluster_def']['events'][label_time_index]['startTime'] = startTime;
data['qp']['user_cluster_def']['events'][label_time_index]['endTime'] = 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;
data['qp']['user_cluster_def']['events'][label_time_index]['e_days'] = parseInt((sameday - endmonth)/86400);
data['qp']['user_cluster_def']['events'][label_time_index]['s_days'] = parseInt((sameday - startmonth)/86400);
updatalable();
})
};
$(document).off("click",'.load_prop_quotas_data').on('click','.load_prop_quotas_data',function(){
var obj = $(this);
var offset = obj.offset();
var index = obj.attr('data-index')
X.parametersopen(retdata,'dropdownlist',[offset.top+obj.height(),offset.left],function(val){
console.log(val);
data['qp']['user_cluster_def']['events'][index]['prop_quota']['quotaDesc'] = val.title;
data['qp']['user_cluster_def']['events'][index]['prop_quota']['quota_type'] = val.data_type;
if(val.data_type == null){
data['qp']['user_cluster_def']['events'][index]['prop_quota']['quota'] = val.analysis;
}else {
data['qp']['user_cluster_def']['events'][index]['prop_quota']['quota'] = val.id;
}
updatalable();
});
});
$(document).off("click",'.analysis-data-box').on('click','.analysis-data-box',function(){
var obj = $(this);
var offset = obj.offset();
var index = obj.attr('data-index');
var type = obj.attr('data-type');
X.parametersopen(quotas_map[type],'dropdownlist',[offset.top+obj.height(),offset.left],function(val){
console.log(val);
data['qp']['user_cluster_def']['events'][index]['prop_quota']['analysisDesc'] = val.title;
data['qp']['user_cluster_def']['events'][index]['prop_quota']['analysis'] = val.id;
updatalable();
})
});
$(document).off('click','.uce_calcu_symbol_box').on('click','.uce_calcu_symbol_box',function(){
var obj = $(this);
var index = obj.attr("data-index");
var offset = obj.offset();
X.parametersopen(X['DATA']['search']['condition2'],'dropdownlist',[offset.top+obj.height(),offset.left],function(val){
console.log(val);
data['qp']['user_cluster_def']['events'][index]['uce_calcu_symbolDesc'] = val.title;
data['qp']['user_cluster_def']['events'][index]['uce_calcu_symbol'] = val.id;
updatalable();
})
});
$(document).off("change",'.lable-input-box input').on('change','.lable-input-box input',function(){
var obj = $(this);
var index = obj.attr("data-index");
console.log(index);
var text = obj.val();
data['qp']['user_cluster_def']['events'][index]['num'] = text;
});
$(document).off('click','.action-icon-events-del').on('click','.action-icon-events-del',function(){
var obj = $(this);
var index = obj.attr("data-index");
data['qp']['user_cluster_def']['events'].splice(index,1);
updatalable();
});
$(document).off("click",'.userlabel-dy-baocun').on("click",".userlabel-dy-baocun",function(){
var lablename = $(".lablename").val();
var labledesc = $(".labledesc").val();
var labeldes = $(".labeldes").val();
if(lablename == ""){
layer.msg("请填写标签名");
return;
}
if(labledesc == ""){
layer.msg("请填写显示名");
return;
}
data['cluster_name'] = lablename;
data['display_name'] = labledesc;
data['remarks'] = labeldes;
X.api('user_label/save','post',data,function(d){
console.log(d);
layer.msg("添加成功");
})
});
}
};
})();

View File

@ -236,6 +236,9 @@
.analysis-overall-situation-box { display: flex; }
.analysis-overall-situation-list { padding: 8px 0; display: flex; align-items: center; margin-top: 8px; flex-wrap: wrap; }
.analysis-overall-situation-list div { text-align: center; margin-left: 8px; border:1px solid #f0f2f5; background-color: #fff; color: #67729d; padding: 0 6px; display: inline-block; min-width: 40px; height: 28px; font-size: 13px; line-height: 29px; border-radius: 2; cursor: pointer; }
.analysis-overall-situation-input { text-align: center; margin-left: 8px; border:1px solid #f0f2f5; background-color: #fff; color: #67729d; padding: 0 6px; display: inline-block; min-width: 40px; height: 28px; font-size: 13px; line-height: 29px; border-radius: 2; cursor: pointer; }
.analysis-overall-situation-input3 { text-align: center; margin-left: 8px; border:1px solid #f0f2f5; background-color: #fff; color: #67729d; padding: 0 6px; display: inline-block; min-width: 40px; height: 28px; font-size: 13px; line-height: 29px; border-radius: 2; cursor: pointer; }
.analysis-overall-situation-input3 input { border: 0px; height: 27px; }
.analysis-overall-situation-input input { border: 0px; height: 27px; }
.analysis-overall-situation-input2 input{ border: 0px; height: 27px; width: 50px; padding: 0 6px; color: #67729d; }
.analysis-overall-situation-left-box { width: 24px; position: relative; margin-left: 4px;}

353
web/static/css/mmGrid.css Normal file
View File

@ -0,0 +1,353 @@
.mmGrid{
position: relative;
overflow: hidden;
background: #fff;
border: 1px solid #ccc;
text-align: left;
}
.mmGrid table{
border-collapse: separate;
border-spacing: 0;
text-align: left;
}
.mmGrid input[type="radio"],
.mmGrid input[type="checkbox"]{
margin: 0;
}
/* 遮罩 */
.mmGrid .mmg-mask{
position: absolute;
left: 0;
top: 0;
display: none;
width: 100%;
height: 100%;
background: #ddd;
}
/* 半透明 */
.mmGrid .mmg-transparent{
/* IE 8 */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
/* IE 5-7 */
filter: alpha(opacity=50);
/* Netscape */
-moz-opacity: 0.5;
/* Safari 1.x */
-khtml-opacity: 0.5;
/* Good browsers */
opacity: 0.5;
}
/* loading */
.mmGrid .mmg-loading{
position: absolute;
display: none;
text-align: center;
}
.mmGrid .mmg-loading .mmg-loadingImg{
margin: 5px auto;
width: 32px;
height: 32px;
background: url(img/loading.gif) no-repeat center center;
}
.mmGrid .mmg-loading .mmg-loadingText{
}
/* 标题包装 */
.mmGrid .mmg-headWrapper{
position: relative;
overflow: hidden;
width: 9999px;
background: #eee; /* Old browsers */
background: -moz-linear-gradient(top, #f9f9f9 0%, #eaeaea 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#eaeaea)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #f9f9f9 0%,#eaeaea 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #f9f9f9 0%,#eaeaea 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #f9f9f9 0%,#eaeaea 100%); /* IE10+ */
background: linear-gradient(to bottom, #f9f9f9 0%,#eaeaea 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f9f9f9', endColorstr='#eaeaea',GradientType=0 ); /* IE6-8 */
-moz-box-shadow: 0 0px 2px #bbb;
-webkit-box-shadow: 0 0px 2px #bbb;
box-shadow: 0 0px 2px #bbb;
/* border-top: 2px solid #b00; */
z-index: 1;
}
/* 标题 */
.mmGrid .mmg-headWrapper .mmg-head{
position: relative;
}
.mmGrid .mmg-headWrapper .mmg-head th{
position: relative;
padding: 0 5px;
border-right: 1px solid #ddd;
/* border-bottom: 1px solid #d2d2d2; */
overflow: hidden;
background-color: #f0f2f5;
}
.mmGrid .mmg-headWrapper .mmg-head th.mmg-groupCol{
/* 分组列 */
}
.mmGrid .mmg-headWrapper .mmg-head th input{
height: 2em;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper{
position: relative;
height: 2em;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-colResize{
position: absolute;
top: 0;
right: -6px;
_right: -4px;
width: 4px;
height: 100%;
cursor: col-resize;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-title{
display: inline-block;
*display: inline;
*zoom: 1;
height: 2em;
font-weight: initial;
line-height: 2;
vertical-align: top;
color: #202d3f !important;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-canSort{
cursor: pointer;
text-decoration: underline;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-sort{
overflow: hidden;
display: none;
width: 7px;
height: 2em;
margin-left: 2px;
vertical-align: top;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-asc{
display: inline-block;
*display: inline;
*zoom: 1;
background: url(img/sort-asc.png) no-repeat center center;
}
.mmGrid .mmg-headWrapper .mmg-head th .mmg-titleWrapper .mmg-desc{
display: inline-block;
*display: inline;
*zoom: 1;
background: url(img/sort-desc.png) no-repeat center center;
}
.mmGrid .mmg-colResizePointer{
position: absolute;
top: 0;
left: 0;
display: none;
width: 1px;
height: 100%;
background: #999;
cursor: col-resize;
z-index: 1;
}
.mmGrid .mmg-colResizePointer-before{
position: absolute;
top: 0;
left: 0;
display: none;
width: 1px;
height: 100%;
background: #999;
cursor: col-resize;
z-index: 1;
}
/* 背板 */
.mmGrid .mmg-backboard{
position: relative;
display: none;
background-image: url(img/furley_bg.png);
background-image: -webkit-image-set(
url(img/furley_bg.png) 1x,
url(img/furley_bg_@2X.png) 2x
);
-webkit-box-shadow: inset 0 0 2px 1px #d9d9d9;
-moz-box-shadow: inset 0 0 2px 1px #d9d9d9;
-o-box-shadow: inset 0 0 2px 1px #d9d9d9;
-ms-box-shadow: inset 0 0 2px 1px #d9d9d9;
box-shadow: inset 0 0 2px 1px #d9d9d9;
text-align: left;
}
.mmGrid .mmg-backboard h1{
margin: 0 10px 5px 10px;
padding: 10px 0 5px 0;
font-size: 1em;
font-weight: bold;
line-height: 1.8;
border-bottom: 1px solid #ccc;
}
.mmGrid .mmg-backboard label{
display: inline-block;
*display: inline;
*zoom: 1;
width: 95px;
font-size: 1em;
line-height: 2.2;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.mmGrid .mmg-backboard label input{
margin: 0 5px 0 10px;
padding: 0px;
border: 0px;
}
/* 内容包装器 */
.mmGrid .mmg-bodyWrapper{
position: relative;
overflow: auto;
width: 9999px;
min-height: 0%; /* fix IE9 hover bug see: http://jsfiddle.net/pjkix/86Lfv/ */
}
/* 内容 */
.mmGrid .mmg-bodyWrapper .mmg-body{
table-layout: fixed;
}
.mmGrid .mmg-bodyWrapper .mmg-body tr{
}
.mmGrid .mmg-bodyWrapper .mmg-body tr.even{
background: #f9f9f9;
}
.mmGrid .mmg-bodyWrapper .mmg-body td{
padding: 0 5px;
border-right: 1px solid #e4e4e4;
border-bottom: 1px solid #e4e4e4;
line-height: 2;
}
.mmGrid .mmg-bodyWrapper .mmg-body td.colSelected{
background: #f7f7f7;
}
.mmGrid .mmg-bodyWrapper .mmg-body td.colSelectedEven{
background: #f5f5f5;
}
.mmGrid .mmg-bodyWrapper .mmg-body tr.hover td{
background: #e1eff8;
}
.mmGrid .mmg-bodyWrapper .mmg-body tr:hover td{
background: #e1eff8;
}
.mmGrid .mmg-bodyWrapper .mmg-body tr.selected td{
background: #fff5cc;
}
.mmGrid .mmg-bodyWrapper .mmg-body td .mmg-index{
color: #555;
}
.mmGrid .nowrap{
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
}
/* 消息 */
.mmGrid .mmg-message{
position: absolute;
display: none;
text-align: center;
}
.mmGrid .mmg-btnBackboardDn{
position: absolute;
top: 0;
right: 20px;
display: block;
width: 50px;
height: 20px;
background: #fff url(img/arrow_down.png) no-repeat center center;
border: 1px solid #ccc;
border-top: 0;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: 1px 1px 3px #ccc;
-moz-box-shadow: 1px 1px 3px #ccc;
-o-box-shadow: 1px 1px 3px #ccc;
-ms-box-shadow: 1px 1px 3px #ccc;
box-shadow:1px 1px 3px #ccc;
cursor: pointer;
}
.mmGrid .mmg-backboard .mmg-btnBackboardUp{
position: absolute;
right: 20px;
bottom: 0;
display: block;
width: 50px;
height: 20px;
background: #fff url(img/arrow_up.png) no-repeat center center;
border: 1px solid #ccc;
border-bottom: 0;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: 1px 1px 3px #ccc;
-moz-box-shadow: 1px 1px 3px #ccc;
-o-box-shadow: 1px 1px 3px #ccc;
-ms-box-shadow: 1px 1px 3px #ccc;
box-shadow:1px 1px 3px #ccc;
cursor: pointer;
}

View File

@ -686,5 +686,106 @@ label:not(.form-check-label):not(.custom-file-label) { font-weight: 400; }
.save-list-but-box div{ cursor: pointer; background-color: #FF5722; color: #fff;width: 100%;height: 45px;line-height: 45px;text-align: center;margin: 0 8px;padding: 0 16px;font-weight: 400;font-size: 14px;text-shadow: none;border-radius: 2px; }
.datacheck-table-box { margin: 40px 60px 40px 106px; overflow-x:auto; }
/* 用户标签 */
.userlabel-box { width: 100%; background-color: #f0f2f5; height: calc(100% - 60px); position: fixed; top: 60px; left: 0; display: flex; }
.userlabel-left-box { margin: 24px; width: calc(100% - 312px - 48px); height: calc(100% - 48px); background-color: #fff; border-radius: 2px; }
.userlabel-right-box { width: 312px; background-color: #fff; height: calc(100% - 48px); margin-top: 24px; margin-right: 24px; border-radius: 2px; }
.userlabel-right { margin-top: 20px; height: calc(100% - 20px); overflow: hidden; }
.label-title-box { padding: 0 24px 24px 24px; border-bottom: 1px solid #e6e6e6; }
.label-box-title {font-size: 14px; color: #607595; font-weight: 500; }
.lable-title-name { font-size: 16px; color: #202d3f; font-weight: 500; margin-top: 4px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis }
.label-info-box { padding: 0px 24px; height: 56px; line-height: 56px; font-size: 14px; color: #42546d; font-weight: 500; cursor: pointer; display: flex; align-items: center; justify-content: space-between; }
.label-info-box:hover { color: #4fa1ff; }
.label-info-box-ov { width: 100%; overflow-y: auto; height:633px; background-color: #fff; }
.label-but-box { height: 48px; display: flex; justify-content: center; align-items: center; border-top: 1px solid #e6e6e6; color: #607595; }
.label-but-box div { display: flex;align-items: center;justify-content: center;width: 86px;height: 32px;cursor: pointer; }
.lable-dingyi:hover { color: #4fa1ff; }
.lable-gengxin:hover { color: #4fa1ff; }
.lable-del:hover { color: #ff5d5d; }
.label-info-box-ov-title { margin-top: 20px; padding: 0 24px; color: #42546d; font-weight: 500; font-size: 14px; }
.label-info-box-ov-del { display: -webkit-box;height: 65px;margin: 16px 24px 8px 24px;padding: 8px;overflow: hidden;color: #67729d;font-size: 12px;word-break: break-all;background-color: #fbfbfb;border-radius: 2px;-webkit-box-orient: vertical;-webkit-line-clamp: 2; }
.label-info-box-con { margin: 0 24px; display: flex; justify-content: space-between; align-items: center; height: 36px; color: #607595; }
.label-info-box-con-right { color: #42546d; font-size: 14px; text-align: right; }
.labelval-box { margin-top: 24px; padding: 0 24px 24px 24px; }
.labelval-title-box { color: var(--text-color); font-weight: 500; font-size: 16px; }
.labelval-list-box { }
.labelval-list-top { display: flex; align-items: center; justify-content: space-between; height: 20px; font-size: 12px; margin-top: 18px; color: #42546d;}
.labelval-list-slide-box { width: 100%; height: 4px; border-radius: 4px; background-color: #f6f7f9; margin-top: 10px;}
.labelval-list-slide { width: 80%; height: 4px; border-radius: 4px; background-color: #219af2; }
/* 用户标签定义 */
.userlabel-dy-box { width: 100%; height: 100%; background-color: #f0f2f5; position: fixed; }
.userlabel-dy-head-box { height: 50px; padding: 0 36px; line-height: 50px; background-color: #fff; margin-top: 60px; font-size: 16px; font-weight: 500; color: #42546d;}
.userlabel-dy-head-box span{ color: #888; }
.userlabel-dy-content-box { max-width: 1650px; margin: 0 auto; padding: 25px 23px 50px;}
.userlabel-dy-content-box2 { display: flex; justify-content: center; align-items: flex-start; font-size: 14px; }
.userlabel-dy-left-box { width: 321px; background-color: #fff; height: 346px; padding: 20px 0; margin-right: 24px;}
.userlabel-dy-left-title { padding: 0 24px 17px 24px; color: #202d3f; font-weight: 500; font-size: 14px; border-bottom: 1px solid #f0f2f5; }
.userlabel-dy-left-item { margin-top: 32px; padding: 0 24px; }
.userlabel-dy-left-item p { font-weight: 400; font-size: 14px; color: #607595; }
.userlabel-dy-left-item input { color: rgba(0, 0, 0, 0.25); background-color: #f5f5f5; width: 258px; padding: 0 8px; margin-top: 10px; font-size: 14px; height: 32px; line-height: 30px; border: 1px solid var(--light-split-color); border-radius: 2px; transition: all 0.3s;}
.userlabel-dy-left-item textarea{ width: 258px; margin-top: 10px; font-size: 14px; background-color: #fff; line-height: 24px; min-height: 32px; padding: 0 8px; border: 1px solid #f0f0f0; border-radius: 2px; resize: none; }
.userlabel-dy-right-box { width: 1268px; padding-bottom: 20px;}
.userlabel-dy-right-head-box div{ padding: 20px 24px 0 24px; color: #202d3f; font-weight: 500; font-size: 14px; }
.userlabel-dy-right-head-box p{ margin-top: 8px; padding: 0 24px 17px 24px; color: #67729d; font-size: 12px; border-bottom: 1px solid #f0f2f5; }
.userlabel-dy-right-title-box { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; padding: 0 24px; }
.userlabel-dy-right-title-box2 { display: flex; flex-wrap: wrap; width: 100%; margin-top: 24px; }
.userlabel-dy-right-title { width: 24%; height: 40px; line-height: 40px; text-indent: 14px; cursor: pointer; font-size: 14px; color: #67729d; margin-top: 8px; margin-right: 8px; color: #67729d; font-size: 14px; background-color: #fff; border: 1px solid #f0f0f0; border-radius: 2px; }
.userlabel-dy-right-title:hover { border: 1px solid #3d90ff; color: #3d90ff; }
.userlabel-dy-right-labelname-box { padding: 0 24px; }
.userlabel-dy-right-labelname-root { width: 100%; margin-top: 16px; padding: 8px 0; background-color: #fff; border-radius: 2px; }
.userlabel-dy-right-labelname-root-item { display: flex; align-items: flex-start; justify-content: flex-start; padding: 16px 0; }
.userlabel-dy-right-labelname-root-item-input { width: 100%; font-weight: 400; font-size: 14px; background-color: #fff; padding: 0 8px; color: #42546d; line-height: 30px; border-radius: 2px; }
.userlabel-dy-right-labelname-root-item-input input { width: 100%; height: 32px; border: 1px solid #f0f0f0; padding: 8px; }
.userlabel-dy-right-labelname-root-item-input textarea { width: 100%; height: 64px; border: 1px solid #f0f0f0; resize: none; padding: 8px;}
.userlabel-dy-right-labelname-root-item-title { display: inline-block; margin-top: 5px; white-space:nowrap; padding-right: 24px; color: #42546d; font-weight: 500; font-size: 14px; }
.choicelabel { margin-left: 24px; color: #42546d; font-size: 14px; cursor: pointer;}
.userlabel-json-box { padding: 0 0 0 80px; margin-top: 22px; }
.userlabel-json-relation-editor { position: relative; display: flex; width: 100%; }
.userlabel-json-relation-relation { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: flex-start; width: 24px; margin-right: 4px; }
.userlabel-json-relation-relation-line { position: absolute; top: 0; left: 12px; height: 100%; width: 1px; background-color: #d9dfe6; }
.userlabel-json-relation-relation-value { position: absolute;top: 50%;left: 0;width: 24px;height: 24px;margin-top: -12px;color: #3d90ff;font-size: 12px;line-height: 22px;text-align: center;background-color: #fff;border: 1px solid #d9dfe6;border-radius: 2px;cursor: pointer; }
.serlabel-json-relation-row { margin-bottom: 12px; }
.userlabel-json-eventRow { min-height: 40px; padding: 0 4px 0 8px; }
.userlabel-json-action-row { position: relative;display: flex;align-items: center;justify-content: space-between;width: 100%;min-height: 24px;line-height: 24px; align-items: center; justify-content: flex-start; min-height: 40px;}
.ta-editor-done-condition { display: flex; align-items: center; font-size: 14px; white-space: nowrap; color: #67729d;}
.ta-isDone { margin-right: 6px; font-weight: 500; text-decoration: underline; cursor: pointer; color: #42546d; }
.ta-editor-done-condition .ta-event-select { margin-left: 4px; }
.ta-event-select { display: inline-block;min-width: 40px;height: 28px;padding: 0 6px;font-size: 14px;line-height: 26px;white-space: nowrap;vertical-align: top;background-color: #fff;border: 1px solid #f0f2f5;border-radius: 2px;cursor: pointer; }
.ta-event-select-label { display: inline-block;max-width: 300px;overflow: hidden;color: #67729d;white-space: nowrap;text-overflow: ellipsis;vertical-align: top; }
.ta-bold { margin-left: 4px; font-weight: 500; }
.ta-editor-done-condition .ta-range-picker-label { margin-left: 4px; background-color: #fff; border-color: #f0f2f5; border: 1px solid #f0f2f5; }
.ta-range-picker-label { display: inline-block;min-width: 80px;height: 28px;padding: 0 8px;color: var(--widget-color);font-size: 14px;line-height: 26px;white-space: nowrap;background-color: #fff;border: 1px solid var(--light-split-color);border-radius: 2px;cursor: pointer; }
.ta-range-picker-span{ display: inline-block; }
.userlabel-json-action-right { margin-left: 16px; display: flex; align-items: center; opacity: 0; color: #67729d; }
.action-row .action-right .action-action { margin-left: 4px; }
.action-icon { display: inline-block;min-width: 24px;height: 24px;padding: 0 4px;line-height: 22px;text-align: center;background-color: transparent;border-radius: 2px;cursor: pointer; }
.userlabel-json-eventRow:hover { background-color: #f6f8fa; }
.userlabel-json-action-row:hover > .userlabel-json-action-right{opacity: 1;}
.userlabel-json-action-row:hover{ background-color: #f6f8fa; }
.action-icon-shax:hover { color: #3d90ff; background-color: #f0f2f5; }
.action-icon-del:hover { color: #ff5d5d; background-color: #f0f2f5; }
.ta-editor-done-condition .ta-analysis-select { margin-left: 4px; }
.ta-analysis-select { display: inline-block; height: 28px; vertical-align: top;}
.ta-editor-done-condition .done-condition-select { margin-left: 4px; color: var(--widget-color); font-size: 14px;}
.ant-select {box-sizing: border-box;margin: 0;padding: 0;color: rgba(0, 0, 0, 0.85);font-size: 14px;font-variant: tabular-nums;line-height: 1.5715;list-style: none;font-feature-settings: 'tnum', "tnum";position: relative;display: inline-block;cursor: pointer;}
.userlabel-json-but-box { display: flex; justify-content: flex-end; margin-top: 20px;}
.userlabel-json-but-box div { cursor: pointer; color: #fff; background-color: #3d90ff; border-color: #3d90ff; height: 20px; padding: 6px 12px; font-weight: 400; font-size: 14px; line-height: 20px; text-shadow: none; border-radius: 2px; box-shadow: none; }
.userlabel-dy-right-box-top { background-color: #fff; padding-bottom: 20px; }
.ta-multa-filter-condition { padding: 4px 0 0; }
.ta-property { margin-right: 6px; font: 14px; padding-top: 5px; }
.ta-property-select { margin: 2px 4px 0 0; min-width: 40px; height: 28px; padding: 0 6px; font-size: 14px; line-height: 26px; white-space: nowrap; vertical-align: top; border: 1px solid #f0f2f5; border-radius: 2px; cursor: pointer; }
.ta-property-select-label { display: inline-block;max-width: 180px;overflow: hidden;color: #67729d;white-space: nowrap;text-overflow: ellipsis;vertical-align: top; }
.ta-operator-select { margin: 2px 4px 0 0 ; vertical-align: top; }
.ta-operator-select .tant-select .ant-select-selector { height: 28px; padding: 0 6px; color: #67729d; border: 1px solid #f0f2f5;}
.ta-filter-condition .ta-equal-search { margin: 2px 0 0 0; vertical-align: top; }
.ta-filter-condition { display: flex; min-height: 32px; padding-bottom: 2px; white-space: normal; }
.userlabel-json-action-left { margin-left:8px; }
.ta-equal-search input{ width: 100px; padding: 0 10px; height: 28px; line-height: 28px; border: 1px solid #f0f2f5; }
.userlabel-json-relation-row { padding: 0 4px 0 8px; }
.ant-input-number input{ height: 28px; margin-left: 4px; padding: 0 8px; border: 1px solid #f0f2f5; width: 44px; color: #42546d; border-radius: 2px; }
.userlabel-dy-head-userlabel { color: #42546d !important; cursor: pointer; }

View File

@ -54,6 +54,48 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe683;</span>
<div class="name">过滤</div>
<div class="code-name">&amp;#xe683;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe611;</span>
<div class="name">删除</div>
<div class="code-name">&amp;#xe611;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe628;</span>
<div class="name">检查更新</div>
<div class="code-name">&amp;#xe628;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe60d;</span>
<div class="name">zidingyiheng</div>
<div class="code-name">&amp;#xe60d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe607;</span>
<div class="name">标签详情</div>
<div class="code-name">&amp;#xe607;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61c;</span>
<div class="name">箭头-左</div>
<div class="code-name">&amp;#xe61c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61d;</span>
<div class="name">箭头-右</div>
<div class="code-name">&amp;#xe61d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe759;</span>
<div class="name"></div>
@ -126,9 +168,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1629862645788') format('woff2'),
url('iconfont.woff?t=1629862645788') format('woff'),
url('iconfont.ttf?t=1629862645788') format('truetype');
src: url('iconfont.woff2?t=1634286267600') format('woff2'),
url('iconfont.woff?t=1634286267600') format('woff'),
url('iconfont.ttf?t=1634286267600') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -154,6 +196,69 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-guolv"></span>
<div class="name">
过滤
</div>
<div class="code-name">.icon-guolv
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shanchu1"></span>
<div class="name">
删除
</div>
<div class="code-name">.icon-shanchu1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jianchagengxin"></span>
<div class="name">
检查更新
</div>
<div class="code-name">.icon-jianchagengxin
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-peizhiguanli1"></span>
<div class="name">
zidingyiheng
</div>
<div class="code-name">.icon-peizhiguanli1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-biaoqianxiangqing"></span>
<div class="name">
标签详情
</div>
<div class="code-name">.icon-biaoqianxiangqing
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-back"></span>
<div class="name">
箭头-左
</div>
<div class="code-name">.icon-back
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-backbeifen"></span>
<div class="name">
箭头-右
</div>
<div class="code-name">.icon-backbeifen
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-ic_normal_dot"></span>
<div class="name">
@ -262,6 +367,62 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-guolv"></use>
</svg>
<div class="name">过滤</div>
<div class="code-name">#icon-guolv</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shanchu1"></use>
</svg>
<div class="name">删除</div>
<div class="code-name">#icon-shanchu1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jianchagengxin"></use>
</svg>
<div class="name">检查更新</div>
<div class="code-name">#icon-jianchagengxin</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-peizhiguanli1"></use>
</svg>
<div class="name">zidingyiheng</div>
<div class="code-name">#icon-peizhiguanli1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biaoqianxiangqing"></use>
</svg>
<div class="name">标签详情</div>
<div class="code-name">#icon-biaoqianxiangqing</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-back"></use>
</svg>
<div class="name">箭头-左</div>
<div class="code-name">#icon-back</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-backbeifen"></use>
</svg>
<div class="name">箭头-右</div>
<div class="code-name">#icon-backbeifen</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-ic_normal_dot"></use>

View File

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 2570810 */
src: url('iconfont.woff2?t=1629862645788') format('woff2'),
url('iconfont.woff?t=1629862645788') format('woff'),
url('iconfont.ttf?t=1629862645788') format('truetype');
src: url('iconfont.woff2?t=1634286267600') format('woff2'),
url('iconfont.woff?t=1634286267600') format('woff'),
url('iconfont.ttf?t=1634286267600') format('truetype');
}
.iconfont {
@ -13,6 +13,34 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-guolv:before {
content: "\e683";
}
.icon-shanchu1:before {
content: "\e611";
}
.icon-jianchagengxin:before {
content: "\e628";
}
.icon-peizhiguanli1:before {
content: "\e60d";
}
.icon-biaoqianxiangqing:before {
content: "\e607";
}
.icon-back:before {
content: "\e61c";
}
.icon-backbeifen:before {
content: "\e61d";
}
.icon-ic_normal_dot:before {
content: "\e759";
}

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,55 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "3369493",
"name": "过滤",
"font_class": "guolv",
"unicode": "e683",
"unicode_decimal": 59011
},
{
"icon_id": "5485648",
"name": "删除",
"font_class": "shanchu1",
"unicode": "e611",
"unicode_decimal": 58897
},
{
"icon_id": "5532888",
"name": "检查更新",
"font_class": "jianchagengxin",
"unicode": "e628",
"unicode_decimal": 58920
},
{
"icon_id": "14583370",
"name": "zidingyiheng",
"font_class": "peizhiguanli1",
"unicode": "e60d",
"unicode_decimal": 58893
},
{
"icon_id": "11336565",
"name": "标签详情",
"font_class": "biaoqianxiangqing",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "19487774",
"name": "箭头-左",
"font_class": "back",
"unicode": "e61c",
"unicode_decimal": 58908
},
{
"icon_id": "19487797",
"name": "箭头-右",
"font_class": "backbeifen",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "16373588",
"name": "点",

Binary file not shown.