|
|
<extend name="Public/promote_base"/>
|
|
|
<block name="css">
|
|
|
<link href="__CSS__/20180207/data.css" rel="stylesheet">
|
|
|
<link href="__CSS__/20180207/finance.css" rel="stylesheet">
|
|
|
<style type="text/css">
|
|
|
.keywords_information {margin-left:15px;cursor:pointer;}
|
|
|
.keywords_information .keywords_mark {height:35px;line-height:35px;color:#4A90F0;}
|
|
|
.keywords_information .keywords_mark span{border-bottom:1px solid transparent;}
|
|
|
.keywords_information .keywords_mark:hover span {border-bottom-color:#4A90F0;}
|
|
|
.keywords_information .keywords_content {transition:opacity 1.2s,visibility 1.5s;}
|
|
|
.keywords_information .keywords_content:before {margin-left:41px;}
|
|
|
.keywords_information .keywords_content .keywords_close {position:absolute;right:0;top:0;width:25px;height:40px;line-height:35px;color:#515974;}
|
|
|
.keywords_information .keywords_list span:first-child {width:160px;}
|
|
|
.keywords_information .keywords_list span:last-child {width:228px;}
|
|
|
.keywords_information {position:relative;display:inline-block;}
|
|
|
.keywords_information .keywords_mark {display:block;font-size:12px;font-style:normal;font-weight:normal; }
|
|
|
.keywords_information .keywords_content.active {visibility:visible;opacity:1;transition:visibility 1.5s,opacity 1s;}
|
|
|
.keywords_information .keywords_content {visibility:hidden;opacity:0;
|
|
|
position:absolute;width:435px;z-index:10;background:#fff;border-radius:5px;
|
|
|
border: 1px solid #E7ECEF;
|
|
|
box-shadow: 1px 1px 15px rgba(0,0,0,.1);
|
|
|
top:10px;left:72px;
|
|
|
}
|
|
|
|
|
|
.keywords_information .keywords_title {
|
|
|
height:40px;line-height:40px;background-color:#FAFAFA;
|
|
|
border-top-left-radius:5px;border-top-right-radius:5px;color:#515974;
|
|
|
padding-left:10px;font-size:12px;
|
|
|
}
|
|
|
.keywords_information .keywords_list {overflow:hidden;clear:both;padding:5px;margin:0 8px;font-size:10px;border-bottom:1px solid #EBEEF5;}
|
|
|
.keywords_information .keywords_list:last-child {border-bottom:none;}
|
|
|
.keywords_information .keywords_list span {display:inline-block;display: block;font-weight: normal;color: #515974;
|
|
|
float: left;
|
|
|
line-height: 30px;
|
|
|
width: 420px;}
|
|
|
.keywords_information .keywords_list span:last-child{color: #a5a6bb;}
|
|
|
.keywords_information .keywords_list span:first-child {width:160px;margin-right:20px;}
|
|
|
.chakan{
|
|
|
font-size: 14px;
|
|
|
font-weight: normal;
|
|
|
color: #26C7DB;
|
|
|
cursor: pointer;
|
|
|
display: inline-block;
|
|
|
text-align: center;
|
|
|
}
|
|
|
.chakan:hover{color: #2bd8ed;}
|
|
|
.trunk-list{position: relative;min-height: 66vh;}
|
|
|
|
|
|
.form-group {
|
|
|
float: left;
|
|
|
margin-bottom: 10px;
|
|
|
}
|
|
|
.form-group label {
|
|
|
line-height: 34px;
|
|
|
height: 34px;
|
|
|
}
|
|
|
.form-group .txt {
|
|
|
width: 180px;
|
|
|
height: 34px;
|
|
|
}
|
|
|
</style>
|
|
|
</block>
|
|
|
|
|
|
<block name="body">
|
|
|
<div class="page-search normal_list query-recharge-search">
|
|
|
<div class="trunk-title">
|
|
|
<div class="location">
|
|
|
<div class="location-container">当前位置:<span>数据管理></span><span>ARPU统计</span></div>
|
|
|
</div>
|
|
|
<img src="__IMG__/20180207/icon_normal_ARPU.png">
|
|
|
<span class="title_main">ARPU统计</span>
|
|
|
<span class="details">根据日期,游戏,推广员分析ARPU等相关数据信息(排除绑币)</span>
|
|
|
<div class="keywords_information" style="clear: both;">
|
|
|
<i class="keywords_mark"><span>关键词说明</span></i>
|
|
|
<ul class="keywords_content">
|
|
|
<li class="keywords_title">关键词说明<a href="javascript:;" class="keywords_close"><img src="__IMG__/20180207/btn_normal_close.png"/></a></li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">活跃用户</span>
|
|
|
<span class="">当天登录的用户总数</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">付费用户</span>
|
|
|
<span class="">当天付费的用户数量</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">新增付费用户</span>
|
|
|
<span class="">当天付费用户中第一次付费的用户数</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">新增付费额</span>
|
|
|
<span class="">第一次付费的玩家当天充值总额</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">付费率</span>
|
|
|
<span class="">付费用户/活跃用户</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">ARPU(每用户平均付费)</span>
|
|
|
<span class="">当日总充值/活跃用户数</span>
|
|
|
</li>
|
|
|
<li class="keywords_list">
|
|
|
<span class="">ARPPU(付费用户的平均付费)</span>
|
|
|
<span class="">当日总充值/付费用户数</span>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="trunk-content article">
|
|
|
<div class="trunk-search clearfix">
|
|
|
<form action="{:U('Query/arpu',array('row'=>I('get.row')))}" method="post" enctype="multipart/form-data">
|
|
|
<div class="form-group normal_space">
|
|
|
<select id="game-select" name="game_id" class="reselect select_gallery" style="width: 220px;" >
|
|
|
<option value="0">请选择游戏</option>
|
|
|
<volist name="games" id="game">
|
|
|
<option value="{$game.game_id}" <if condition="I('game_id') eq $game['game_id']">selected</if>>{$game.game_name}</option>
|
|
|
</volist>
|
|
|
</select>
|
|
|
</div>
|
|
|
<div class="form-group normal_space">
|
|
|
<select id="server-select" name="server_id" class="reselect select_gallery" style="width: 220px;" data-server="{:I('server_id', 0)}">
|
|
|
<option value="0">请选择区服</option>
|
|
|
</select>
|
|
|
</div>
|
|
|
<div class="form-group normal_space">
|
|
|
<select name="sdk_version" class="reselect select_gallery" style="width: 220px;" >
|
|
|
<option value="0">请选择设备类型</option>
|
|
|
<option value="1" <if condition="I('sdk_version') === '1'">selected</if>>Andriod</option>
|
|
|
<option value="2" <if condition="I('sdk_version') === '2'">selected</if>>IOS</option>
|
|
|
</select>
|
|
|
</div>
|
|
|
<div class="form-group normal_space">
|
|
|
<select name="status" class="reselect select_gallery" style="width: 220px;" >
|
|
|
<option value="0">帐号状态</option>
|
|
|
<option value="1" <if condition="I('status') === '1'">selected</if>>正常</option>
|
|
|
<option value="2" <if condition="I('status') === '2'">selected</if>>冻结</option>
|
|
|
</select>
|
|
|
</div>
|
|
|
<if condition="$parent_id eq 0">
|
|
|
<div class="form-group normal_space">
|
|
|
<select id="group-select" name="promote_id" class="reselect select_gallery" style="width: 220px;" >
|
|
|
<option value="0">请选择组长</option>
|
|
|
<volist name="subPromotes" id="promote">
|
|
|
<option ba-id="{$promote.id}" value="{$promote.id}" <if condition="I('promote_id') == $promote['id']">selected</if>>{$promote.account}</option>
|
|
|
</volist>
|
|
|
</select>
|
|
|
</div>
|
|
|
</if>
|
|
|
<if condition="$grand_id eq 0">
|
|
|
<div class="form-group normal_space">
|
|
|
<select id="promote-select" name="promote_id" class="reselect select_gallery" style="width: 220px;" data-promote="{:I('promote_id', 0)}">
|
|
|
<option value="0">请选择推广员</option>
|
|
|
<volist name="subPromotes" id="promote">
|
|
|
<option ba-id="{$promote.id}" value="{$promote.id}" <if condition="I('promote_id') == $promote['id']">selected</if>>{$promote.account}</option>
|
|
|
</volist>
|
|
|
</select>
|
|
|
</div>
|
|
|
</if>
|
|
|
<div class="form-group normal_space">
|
|
|
<label>起止时间:</label>
|
|
|
<input type="text" class="txt range-date" name="time" placeholder="起止时间" value="{:I('time')}" >
|
|
|
</div>
|
|
|
<div class="form-group">
|
|
|
<input type="submit" class="submit normal_space" value="查询">
|
|
|
</div>
|
|
|
</form>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="page-list query-recharge-list">
|
|
|
|
|
|
<div class="trunk-content article">
|
|
|
<div class="trunk-list">
|
|
|
<table class="table normal_table" id="datacontent">
|
|
|
<table class="table normal_table" id="datatable" style="<notempty name='list_data'>display:none;</notempty>"><thead>
|
|
|
<tr class="odd">
|
|
|
<th>日期</th>
|
|
|
<if condition='empty(I("game_id")) != true'>
|
|
|
<th>游戏名称</th>
|
|
|
<else/>
|
|
|
<th>付费游戏数</th>
|
|
|
</if>
|
|
|
<if condition='empty(I("promote_id")) != true'>
|
|
|
<th>所属渠道</th>
|
|
|
</if>
|
|
|
<th>活跃用户</th>
|
|
|
<th>新增用户</th>
|
|
|
<th>付费用户</th>
|
|
|
<th>新增付费用户</th>
|
|
|
<th>付费总额</th>
|
|
|
<th>付费率</th>
|
|
|
<th>新增付费额</th>
|
|
|
<th>累计付费用户</th>
|
|
|
<!-- <th>1日留存</th> -->
|
|
|
<th>ARPU</th>
|
|
|
<th>ARPPU</th>
|
|
|
<if condition='empty(I("game_id")) == true'>
|
|
|
<th>详情</th>
|
|
|
</if>
|
|
|
</tr></thead><tbody>
|
|
|
<empty name="records">
|
|
|
<tr><td colspan="12" style="text-align: center;height: 45vh;"><img src="__IMG__/20180207/icon_wushujv2.png"/><p style="line-height: 40px;color: #A5A5A5;">暂无数据</p></td></tr>
|
|
|
<else />
|
|
|
<volist name="records" id="vo" mod="2">
|
|
|
<tr name="rows" class="<eq name='mod' value='1'>odd</eq>">
|
|
|
<td>{$vo.day}</td>
|
|
|
<if condition='empty(I("game_id")) != true'>
|
|
|
<th>{$searchGameName}</th>
|
|
|
<else/>
|
|
|
<td>{$vo.payGameCount}</th>
|
|
|
</if>
|
|
|
<if condition='empty(I("promote_id")) != true'>
|
|
|
<th>{:I("promote_account")}</th>
|
|
|
</if>
|
|
|
<td>{$vo.loginCount}</td>
|
|
|
<td>{$vo.registerCount}</td>
|
|
|
<td>{$vo.payUserCount}</td>
|
|
|
<td>{$vo.newPayUserCount}</td>
|
|
|
<td>{$vo.payAmount}</td>
|
|
|
<td>{$vo.payRate}</td>
|
|
|
<td>{$vo.newPayAmount}</td>
|
|
|
<td>{$vo.historyPayCount}</td>
|
|
|
<!-- <td>{$vo.ratentionOneDay}</td> -->
|
|
|
<td>{$vo.arpu}</td>
|
|
|
<td>{$vo.arppu}</td>
|
|
|
<if condition='empty(I("game_id")) == true'>
|
|
|
<td>
|
|
|
<a onclick="chakan('{$key}')" style="cursor: pointer" class="chakan">查看</a>
|
|
|
</td>
|
|
|
</if>
|
|
|
</tr>
|
|
|
</volist>
|
|
|
</empty></tbody>
|
|
|
</table>
|
|
|
</table>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</block>
|
|
|
<block name="script">
|
|
|
<link rel="stylesheet" href="__STATIC__/flatpickr/flatpickr.min.css">
|
|
|
<script src="__STATIC__/flatpickr/flatpickr.min.js"></script>
|
|
|
<script src="__STATIC__/flatpickr/l10n/zh.js"></script>
|
|
|
<script type="text/javascript" src="__JS__/20170831/select2.min.js"></script>
|
|
|
<script type="text/javascript" src="__JS__/20170831/pagination.js"></script>
|
|
|
<script type="text/javascript" src="__JS__/20170831/string.js"></script>
|
|
|
<script type="text/javascript" src="__JS__/20170831/tabpage.js"></script>
|
|
|
<eq name='timeout' value='1'>
|
|
|
<script>
|
|
|
layer.msg('时间间隔不能超过90天');
|
|
|
</script>
|
|
|
</eq>
|
|
|
<script>
|
|
|
var defaultDate = $('.range-date').val()
|
|
|
defaultDate = defaultDate == '' ? [] : defaultDate.split(' 至 ')
|
|
|
$('.range-date').flatpickr({
|
|
|
mode: 'range',
|
|
|
locale: 'zh',
|
|
|
dateFormat: "Y-m-d",
|
|
|
defaultDate: defaultDate,
|
|
|
})
|
|
|
var gameId = $('#game-select').val();
|
|
|
var defaultServerId = $('#server-select').attr('data-server');
|
|
|
getGameServers(gameId, defaultServerId)
|
|
|
$('#game-select').on({
|
|
|
change: function name() {
|
|
|
gameId = $('#game-select').val()
|
|
|
getGameServers(gameId, 0)
|
|
|
}
|
|
|
})
|
|
|
function getGameServers(gameId, defaultServerId) {
|
|
|
$.ajax({
|
|
|
url: "{:U('Query/getGameServers')}",
|
|
|
dataType: 'json',
|
|
|
data: {game_id: gameId},
|
|
|
success: function(response) {
|
|
|
var options = '<option value="0">请选择区服</option>'
|
|
|
for (var i in response.data.servers) {
|
|
|
var server = response.data.servers[i]
|
|
|
var selected = ''
|
|
|
if (defaultServerId > 0 && server.id==defaultServerId) {
|
|
|
selected = 'selected'
|
|
|
}
|
|
|
options += '<option value="' + server.id + '"' + selected + '>' + server.server_name + '</option>'
|
|
|
}
|
|
|
$('#server-select').html(options)
|
|
|
$("#server-select").val(defaultServerId).trigger("change")
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
var parentId = $('#group-select').val();
|
|
|
var defaultPromoteId = $('#promote-select').attr('data-promote');
|
|
|
getSubPromotes(parentId, defaultPromoteId)
|
|
|
$('#group-select').on({
|
|
|
change: function name() {
|
|
|
parentId = $('#group-select').val()
|
|
|
getSubPromotes(parentId, 0)
|
|
|
}
|
|
|
})
|
|
|
|
|
|
function getSubPromotes(parentId, defaultPromoteId) {
|
|
|
$.ajax({
|
|
|
url: "{:U('Query/getSubPromotes')}",
|
|
|
dataType: 'json',
|
|
|
data: {promote_id: parentId},
|
|
|
success: function(response) {
|
|
|
var options = '<option value="0">请选择推广员</option>'
|
|
|
for (var i in response.data.promotes) {
|
|
|
var promote = response.data.promotes[i]
|
|
|
var selected = ''
|
|
|
if (defaultPromoteId > 0 && promote.id==defaultPromoteId) {
|
|
|
selected = 'selected'
|
|
|
}
|
|
|
options += '<option value="' + promote.id + '"' + selected + '>' + promote.account + '</option>'
|
|
|
}
|
|
|
$('#promote-select').html(options)
|
|
|
$("#promote-select").val(defaultPromoteId).trigger("change")
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
layer.config({
|
|
|
extend: 'skin/myskin/style.css', //同样需要加载新皮肤
|
|
|
});
|
|
|
function chakan(key) {
|
|
|
var bangbi = $('#bangbi').val();
|
|
|
var promote_id = $('#promote_arpu').val();
|
|
|
url = "/index.php?s=/Home/Query/cha_userarpu/time/"+key+"/bangbi/"+bangbi+"/promote_id/"+promote_id;
|
|
|
timetitle = key;
|
|
|
console.log(url);
|
|
|
layer.open({
|
|
|
type: 2,
|
|
|
title: false,
|
|
|
closeBtn: 0, //不显示关闭按钮
|
|
|
shade: [0],
|
|
|
area: ['1px', '1px'],
|
|
|
offset: 'rb', //右下角弹出
|
|
|
time: 1, // 秒后自动关闭 这里设置成1ms 不显示过度页面
|
|
|
anim: 2,
|
|
|
content: ['', 'no'], //iframe的url,no代表不显示滚动条
|
|
|
end: function () { //
|
|
|
layer.open({
|
|
|
type: 2,
|
|
|
title: timetitle + '游戏数据',
|
|
|
skin: 'myskin', //只对该层采用myskin皮肤
|
|
|
shadeClose: true,
|
|
|
shade: [0.3,'#273142'],
|
|
|
scrollbar :false,
|
|
|
maxmin: true, //开启最大化最小化按钮
|
|
|
area: ['70%', '50%'],
|
|
|
content: url//iframe的url
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
<script type="text/javascript">
|
|
|
setValue('promote_id',{$Think.request.promote_id|default=0});
|
|
|
setValue('game_id','{$Think.request.game_id|default=0}');
|
|
|
|
|
|
function pagechange(that){
|
|
|
tablePage('datatable', 'datacontent', 'pagenation', [1, 2, 4, 5, 6, 10], false,that.value);
|
|
|
var export_data = $('#export_data');
|
|
|
var url = export_data.attr('href');
|
|
|
|
|
|
url = url.replace('.html','').replace(/(&|\/)row(=|\/)\d*/gi,'').replace(/\/p\/\d*/gi,'');
|
|
|
|
|
|
export_data.attr('href',url+'/row/'+that.value);
|
|
|
|
|
|
}
|
|
|
|
|
|
function pagenation_click() {
|
|
|
|
|
|
$('#pagenation a').click(function() {
|
|
|
var that = $(this),p = that.text();console.log(p);
|
|
|
var export_data = $('#export_data');
|
|
|
var url = export_data.attr('href');
|
|
|
|
|
|
url = url.replace('.html','').replace(/(&|\/)row(=|\/)\d*/gi,'').replace(/\/p\/\d*/gi,'');
|
|
|
|
|
|
export_data.attr('href',url+'/p/'+p+'/row/'+that.value);
|
|
|
|
|
|
return false;
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
$().ready(function(){
|
|
|
$("#pagehtml a").on("click",function(event){
|
|
|
event.preventDefault();//使a自带的方法失效,即无法调整到href中的URL(http://www.baidu.com)
|
|
|
var geturl = $(this).attr('href');
|
|
|
$('#data_form').attr('action',geturl);
|
|
|
$('#data_form').submit();
|
|
|
});
|
|
|
|
|
|
pagenation_click();
|
|
|
|
|
|
$(".submit").click(function(){
|
|
|
var sdate =$('#sdate').val();
|
|
|
var edate =$('#edate').val();
|
|
|
if(Date.parse(sdate) > Date.parse(edate)){
|
|
|
layer.msg('开始时间必须小于等于结束时间');
|
|
|
return false;
|
|
|
}
|
|
|
})
|
|
|
|
|
|
$(".select_gallery").select2();
|
|
|
|
|
|
|
|
|
|
|
|
tablePage('datatable', 'datacontent', 'pagenation', [1, 2, 4, 5, 6, 10], false);
|
|
|
|
|
|
$('.keywords_information .keywords_mark').click(function() {
|
|
|
var that = $(this).siblings().addClass('active');
|
|
|
console.log(that);
|
|
|
$(document).click(function(event) {
|
|
|
var e = event || window.event;
|
|
|
var target= $(e.target);
|
|
|
if (!target.hasClass('keywords_information') && target.closest('.keywords_information').length<1) {
|
|
|
that.removeClass('active');
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
that.find('.keywords_close').click(function() {
|
|
|
that.removeClass('active');
|
|
|
|
|
|
return false;
|
|
|
});
|
|
|
|
|
|
return false;
|
|
|
});
|
|
|
|
|
|
$("#game_id").change(function(){
|
|
|
var game_name = $('#game_id option:selected').text();
|
|
|
$("#game_name").val(game_name);
|
|
|
});
|
|
|
|
|
|
$("#promote_id").change(function(){
|
|
|
var account = $('#promote_id option:selected').text();
|
|
|
$("#promote_account").val(account);
|
|
|
})
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
</block>
|