1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<div ng-show="(!funnelList || funnelList.length==0) && !addFirst">
<div class="nodata">
<h5>还没有漏斗</h5>
</div>
<div class="btn3" style="float:none;width:150px;margin:0 auto;text-align: center;" ng-click="addFirstFunnel()" ng-if="hasEditPower()">创建第一个漏斗</div>
<dl class="tipsList statustip">
<dt>1. 什么是“漏斗”?</dt>
<dd>
漏斗是一种分析产品中一个多步骤的行为过程中每一步的转化情况的模型,它可以分析整体的转化情况,以及每一步具体的转化率。</br/>
举例来说,用户首次进入游戏的过程可能包含:打开app,激活账号,loading页面加载完进入游戏。
</dd>
<dt>2. 怎么使用漏斗分析?</dt>
<dd>
通过TrackingIO强大的数据分析,漏斗分析可以帮助解决以下问题:<br/>
游戏用户在进入游戏时,流失在哪个步骤。不同渠道的游戏用户在做某个任务时,为什么放弃了。
</dd>
</dl>
</div>
<div ng-show="funnelList.length>0 || addFirst" class="p">
<div class="conditionBox clearfix p pb20">
<div class="left">
<div class="selList" ng-class="{'active':selme,'noright':hasEditPower()}" ng-click="selme=!selme;" ng-mouseleave="selme=false;">
<span ng-if="currentFunnel.id || currentFunnel.id==0 || !showEventWin">{{funnelInfo.name}}</span>
<span class="ckhand dark" ng-if="!currentFunnel.id && currentFunnel.id!=0 && showEventWin">新建漏斗</span>
<div class="arrowIcon"></div>
<div class="optionList even" ng-show="selme" style="width:320px;">
<dl class="dlOperTitle bbb" ng-if="hasEditPower() && (funnelList.length<limitInfo.dataConversionFunnelNum || limitInfo.dataConversionFunnelNum==-1)">
<dd ng-click="addFunnel()">新建漏斗</dd>
</dl>
<div ng-show="funnelList.length>5" class="searchWrap ml10 searchSpec clearfix" style="float:none;width:300px;" stop-event>
<input type="text" class="searchIpt selectIpt" style="width:300px;" ng-model="seatxt" placeholder="关键字搜索">
</div>
<ul>
<li ng-repeat="m in funnelList | filter:{'name':seatxt} track by $index" ng-click="clickFunnel(m)" ng-class="{'active':m.id == funnelInfo.id}" title="{{m.name}}" class="p">
{{m.name}}<span class="delIcon s1" ng-click="deleteFunnel(m)" stop-event ng-if="hasEditPower()"></span>
</li>
</ul>
</div>
</div>
<div class="btn8 dark btnblock btnNo" ng-class="{'active':isEditInfo==3 && showEventWin,'dis':!funnelInfo.id || isEditInfo==2}" ng-click="addFunnel(1)" ng-show="hasEditPower()">编辑</div>
</div>
<div class="right">
<!-- <select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname" meau-typekey="['whole','usergroup','population','source']" meau-typename="['','用户分群','人口维度','来源维度']" meau-data="dimenInit" meau-refresh="dimenRmd" operation-sel="funnelInfo.id>0"></select-t-list> -->
<select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname" meau-typekey="['whole','usergroup','eventlist',null]" meau-typename="['','用户分群','事件属性','用户属性']" meau-data="dimenInit" meau-id2="dimenEventType" meau-refresh="dimenRmd" operation-sel="funnelInfo.id>0"></select-t-list>
<my-datepicker class="dateRange rightDate" init-day="date" range-days2="rangday" operation-sel="funnelInfo.id>0"><span>{{datestr}}</span></my-datepicker>
</div>
<div class="conditionWin eventBox" ng-show="showEventWin" ng-class="{'edit':isEditInfo==3}">
<div class="sanicon"></div>
<div class="funnelWrap" ng-class="{'max400':getEventNum()>=5}">
<div ng-repeat="event in eventInfo track by $index" ng-show="event.show!=false">
<div class="eventItem clearfix p" ng-style="event.style">
<div class="label txtLabel">第{{event.steps}}步:</div>
<select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list>
<div class="profileItemWrap p">
<div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1">
<div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div>
</div>
<div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false">
<profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item>
<span class="removeSpan" ng-click="removeEventParams(event,item)">取消</span>
</div>
<span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}">
<span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span>
</span>
</div>
<span class="delItemIcon right" ng-click="removeEvent(event)"></span>
</div>
<div class="relLine"></div>
</div>
<div class="addItemIcon" ng-click="addEvent()" ng-class="{'dis':getEventNum()>=maxStep}" style="margin-left: 15px;"></div>
</div>
<div class="formDetailItem ml15 mt20">
<div class="iptlabel" style="width:120px;">转化有效期<help-tip class="help" style="margin-left: 2px;" name="转化有效期"></help-tip>:</div>
<select-list meau-info="dayList" meau-id="windows" meau-data="windowsinit" style="width:100px;" class="upSList" nosearch="true"></select-list>
<span class="desc">完成转化的时间超过此有效期的,为无效转化,即转化失败(流失)。</span>
</div>
<div class="conditionBoxBottom">
<div class="right mt20">
<span class="ckhand mr10" ng-class="{'dis':!canSave()}" ng-click="initCondition()">重置条件</span>
<span ng-show="!currentFunnel.id">
<div class="btn btnblock mybtn h30" ng-click="nameWin()" ng-class="{'disable':!canSave()}">保存</div>
<!-- <div class="btn3 btnblock mybtn h30" ng-click="lookReport()" ng-class="{'disable':!canSave()}">查看</div> -->
</span>
<div class="btnMoreGroup" ng-show="currentFunnel.id" ng-mouseenter="bgroup=true" ng-mouseleave="bgroup=false;">
<div class="primaryBtn" ng-click="save()" ng-class="{'dis':!canSave()}">保存</div>
<div class="primarySelBtn" ng-class="{'dis':!canSave()}"></div>
<ul class="btnMenu" ng-show="bgroup && canSave()">
<li ng-click="save()">保存</li>
<li ng-click="nameWin(1)">另存为</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="conditionAlpha" ng-show="showEventWin && funnelList.length>0" ng-click="closeAddWin()"></div>
<div class="chartWrap chart300 one clearfix" style="margin-top: 0px;" ng-show="funnelList.length>0">
<div class="chartWrapItem titleChart">
<div class="chartModule">
<span>{{funnelInfo.name}}的漏斗分析</span>
<!-- <div class="right rigthM">
<select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" class="whitebg" style="width:100px;"></select-list>
</div> -->
</div>
<div class="chartItem p">
<div ng-class="{'lengedChart':dimenId && dimenId!='-all'}">
<min-chart chart-data="chartData" chart-type="funnel" chart-config="chartConfig" chart-loading="chartLoading"></min-chart>
</div>
<div class="lengedWrap" ng-show="dimenId && dimenId!='-all'">
<div class="searchWrap searchSpec clearfix" style="float:none;">
<input type="text" class="searchIpt selectIpt" ng-model="swtxt" placeholder="关键字搜索">
</div>
<ul class="hm-scroll">
<li ng-repeat="name in lengedNames | filter:swtxt track by $index" ng-click="setFunnelData(name,1)">
<span class="sign" ng-style="getChartStyle(name)"></span>{{name}}
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="chartWrap clearfix" ng-show="funnelList.length>0">
<div class="chartWrapItem nothborder">
<div class="chartModule">
<span>{{funnelInfo.name}}的漏斗分析详情</span>
<export-button export-condition="listInfoDataCondition" ng-if="listInfoData.val && listInfoData.val.length>0"></export-button>
</div>
<is-loading ng-if="listInfoLoading"></is-loading>
<div class="tableList" ng-show="!listInfoLoading">
<table ng-show="listInfoData.val.length>0">
<tr>
<th ng-repeat="title in listInfoData.name track by $index">{{title}}</th>
</tr>
<tr ng-repeat="info in listInfoData.val track by $index">
<td>{{info[listInfoData.columnkey[0]]}}</td>
<td ng-repeat="col in listInfoData.columnkey track by $index" ng-if="$index>0" ng-class="{'lostinfo':col.indexOf('lost')==-1,'m':listInfoData.columnkey.length>7}">
<div ng-if="col.indexOf('lost')==-1">
<span class="tabBar">
<div class="active" style="height:{{info['rate_'+col]}}%"></div>
</span>
<span style="display: inline-block;">
{{info[col]}}
<p class="n">{{info['rate_'+col]}}%</p>
</span>
</div>
<div ng-if="col.indexOf('lost')>-1" class="lost">
{{info[col]}}
<p>{{info['rate_' + col]}}%</p>
</div>
</td>
</tr>
</table>
<no-data ng-if="!listInfoData.val || listInfoData.val.length==0"></no-data>
</div>
</div>
</div>
</div>
<div class="openTipWin" ng-show="wantDelete">
<div class="closeGray" ng-click="closeWin()"></div>
<div class="tipCont">
<span ng-show="custommenus.length>0">
报表“{{delDefine.name}}”正在被
<span ng-repeat="custommenu in custommenus" ng-click="gotoCustonMenu(custommenu.id)">
<span class="customname">{{custommenu.name}}</span>
<span ng-show="!$last">、</span></span>
{{custommenus.length}}个看单使用<br/>
删除后对应看单将不会再显示该报表,是否确认删除?
</span>
<span ng-show="!custommenus">
您正在删除报表“{{delDefine.name}}”,是否确认删除?
</span>
</div>
<div class="openBtnGroup clearfix">
<div class="btn8 mr20" ng-click="closeWin()">取消</div>
<div class="btn8" ng-click="doDelete()">确定</div>
</div>
</div>
<div class="openTipWin" ng-show="wantSave">
<div class="closeGray" ng-click="closeWin(2)"></div>
<div class="tipCont" style="text-align: left;">
<p class="mb10">请输入漏斗名称:</p>
<div>
<input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="文字限定在20个汉字以内">
<div class="btn5 ml10 btnblock conwidth" ng-click="save(1)">保存</div>
</div>
</div>
</div>