|
|
|
<extend name="Public/promote_base"/>
|
|
|
|
<block name="css">
|
|
|
|
<link href="__CSS__/20180207/account.css" rel="stylesheet" >
|
|
|
|
<link href="__STATIC__/icons_alibaba/iconfont.css?v=1.3" rel="stylesheet">
|
|
|
|
<style>
|
|
|
|
.form-group {
|
|
|
|
float: left;
|
|
|
|
margin-bottom: 10px;
|
|
|
|
}
|
|
|
|
.form-group label {
|
|
|
|
line-height: 34px;
|
|
|
|
height: 34px;
|
|
|
|
}
|
|
|
|
.iconsort {
|
|
|
|
font-size: 1rem;
|
|
|
|
}
|
|
|
|
.normal_table tr .sort {
|
|
|
|
color: #145ccd;
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
.trunk-search .select-time .txt {
|
|
|
|
width: 100px;
|
|
|
|
}
|
|
|
|
.title-cursor-pointer {
|
|
|
|
cursor: pointer;
|
|
|
|
}
|
|
|
|
</style>
|
|
|
|
</block>
|
|
|
|
<block name="body">
|
|
|
|
<div class="page-list normal_list promote-mychlid-list">
|
|
|
|
<div class="trunk-title">
|
|
|
|
<div class="location">
|
|
|
|
<div class="location-container">当前位置:<span>数据管理></span><span>用户留存率</span></div>
|
|
|
|
</div>
|
|
|
|
<img src="__IMG__/20180207/icon_normal_game.png">
|
|
|
|
<span class="title_main">用户留存率</span>
|
|
|
|
</div>
|
|
|
|
<div class="trunk-content article">
|
|
|
|
<div class="trunk-search clearfix jssearch">
|
|
|
|
<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="baseGames" id="game">
|
|
|
|
<option value="{$game.id}" <if condition="I('game_id') eq $game['id']">selected</if>>{$game.name}</option>
|
|
|
|
</volist>
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<div class="form-group normal_space">
|
|
|
|
<select id="sdk_version" name="device_type" class="reselect select_gallery" style="width: 220px;" >
|
|
|
|
<option value="">请选择设备类型</option>
|
|
|
|
<option value="android" <if condition="I('device_type') === 'android'">selected</if>>Andriod</option>
|
|
|
|
<option value="ios" <if condition="I('device_type') === 'ios'">selected</if>>IOS</option>
|
|
|
|
</select>
|
|
|
|
</div>
|
|
|
|
<include file="Public/promote_select" />
|
|
|
|
<div class="form-group normal_space fr">
|
|
|
|
<label>起止时间:</label>
|
|
|
|
<input type="text" class="txt range-date" name="time_range" placeholder="创建时间" value="{$start} 至 {$end}" >
|
|
|
|
</div>
|
|
|
|
<div class="form-group normal_space">
|
|
|
|
<input type="hidden" name="last_sort_name" id="last_sort_name" value="{:I('sort_name', '')}">
|
|
|
|
<input type="hidden" name="sort_name" id="sort_name" value="{:I('sort_name', '')}">
|
|
|
|
<input type="hidden" name="sort" id="sort" value="{$sort}">
|
|
|
|
<input type="submit" class="submit" id='submit' url="{:U('Query/userretention','model='.$model['name'],false)}"
|
|
|
|
value="查询">
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="trunk-list list_normal">
|
|
|
|
<table class="table normal_table">
|
|
|
|
<tr class="odd">
|
|
|
|
<th class="sort" sort-name="date" class="title-cursor-pointer">日期
|
|
|
|
<if condition="'date' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th>游戏名称</th>
|
|
|
|
<th>渠道名称</th>
|
|
|
|
<th class="sort" sort-name="register_count" class="title-cursor-pointer">新增玩家
|
|
|
|
<if condition="'register_count' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day1" class="title-cursor-pointer">1日留存
|
|
|
|
<if condition="'retention_day1' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day2" class="title-cursor-pointer">2日留存
|
|
|
|
<if condition="'retention_day2' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day3" class="title-cursor-pointer">3日留存
|
|
|
|
<if condition="'retention_day3' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day4" class="title-cursor-pointer">4日留存
|
|
|
|
<if condition="'retention_day4' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day5" class="title-cursor-pointer">5日留存
|
|
|
|
<if condition="'retention_day5' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day6" class="title-cursor-pointer">6日留存
|
|
|
|
<if condition="'retention_day6' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day7" class="title-cursor-pointer">7日留存
|
|
|
|
<if condition="'retention_day7' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day15" class="title-cursor-pointer">15日留存
|
|
|
|
<if condition="'retention_day15' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
<th class="sort" sort-name="retention_day30" class="title-cursor-pointer">30日留存
|
|
|
|
<if condition="'retention_day30' == I('sort_name', '')">
|
|
|
|
<if condition="1 == $sort">
|
|
|
|
<i class="iconfont iconsort-down"></i>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort-up"></i>
|
|
|
|
</if>
|
|
|
|
<else/>
|
|
|
|
<i class="iconfont iconsort"></i>
|
|
|
|
</if>
|
|
|
|
</th>
|
|
|
|
</tr>
|
|
|
|
<empty name="data">
|
|
|
|
<tr><td colspan="13" class="text-align: center;height: 45vh;"">
|
|
|
|
<?= $error ? '<span style="color: #ff0000;">' . $error . '</span>': '<img src="__IMG__/20180207/icon_wushujv2.png"/><p style="line-height: 40px;color: #A5A5A5;">暂无数据</p>' ?></td>
|
|
|
|
</tr>
|
|
|
|
<else />
|
|
|
|
<volist name="data" id="vo">
|
|
|
|
<tr>
|
|
|
|
<td>{$vo.date}</td>
|
|
|
|
<td>{$vo.game_name}</td>
|
|
|
|
<td>{$vo.promote_name}</td>
|
|
|
|
<td>{$vo.register_count}</td>
|
|
|
|
<?php if ($vo['register_count']>0):?>
|
|
|
|
<td>{$vo['retention_day1']}%</td>
|
|
|
|
<td>{$vo['retention_day2']}%</td>
|
|
|
|
<td>{$vo['retention_day3']}%</td>
|
|
|
|
<td>{$vo['retention_day4']}%</td>
|
|
|
|
<td>{$vo['retention_day5']}%</td>
|
|
|
|
<td>{$vo['retention_day6']}%</td>
|
|
|
|
<td>{$vo['retention_day7']}%</td>
|
|
|
|
<td>{$vo['retention_day15']}%</td>
|
|
|
|
<td>{$vo['retention_day30']}%</td>
|
|
|
|
<?php else:?>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<td>--</td>
|
|
|
|
<?php endif;?>
|
|
|
|
</tr>
|
|
|
|
</volist>
|
|
|
|
</empty>
|
|
|
|
</table>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
<div class="pagenation clearfix">
|
|
|
|
<?php if ($loginer['level'] !== 4) :?>
|
|
|
|
<a id="sch-btn" data-href="{:U('download/userretention_data_export',array_merge(['xlsname'=>'ceshi'],I('get.')))}" class="ajax-get">导出</a>
|
|
|
|
<?php endif ;?>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="page-explain promote-mychlid-explain">
|
|
|
|
<div class="trunk-content article border_normal">
|
|
|
|
</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__/common.js"></script>
|
|
|
|
<script type="text/javascript">
|
|
|
|
$(function() {
|
|
|
|
setValue('row', '{:I("get.row",10)}');
|
|
|
|
|
|
|
|
var defaultDate = $('.range-date').val()
|
|
|
|
defaultDate = defaultDate == '' ? [] : defaultDate.split(' 至 ')
|
|
|
|
$('.range-date').flatpickr({
|
|
|
|
mode: 'range',
|
|
|
|
locale: 'zh',
|
|
|
|
dateFormat: "Y-m-d",
|
|
|
|
defaultDate: defaultDate,
|
|
|
|
})
|
|
|
|
$('.select_gallery').select2()
|
|
|
|
var promoteUrl = "{:U('Query/getSubPromotes')}"
|
|
|
|
initPromoteSelect(promoteUrl)
|
|
|
|
|
|
|
|
$('.sort').click(function () {
|
|
|
|
var element = $(this);
|
|
|
|
var sortName = element.attr('sort-name');
|
|
|
|
var sort = parseInt($('#sort').val());
|
|
|
|
|
|
|
|
sort = (sort === 1) ? 2 : 1;
|
|
|
|
$('#sort').val(sort);
|
|
|
|
$('#sort_name').val(sortName);
|
|
|
|
$('#submit').trigger('click');
|
|
|
|
});
|
|
|
|
|
|
|
|
$('#submit').click(function () {
|
|
|
|
var url = $(this).attr('url');
|
|
|
|
console.log(url);
|
|
|
|
var query = $('.jssearch').find('input').serialize();
|
|
|
|
query += "&" + $('.jssearch').find('select').serialize();
|
|
|
|
query = query.replace(/(&|^)(\w*?\d*?\-*?_*?)*?=?((?=&)|(?=$))/g, '');
|
|
|
|
query = query.replace(/^&/g, '');
|
|
|
|
if (url.indexOf('?') > 0) {
|
|
|
|
url += '&' + query;
|
|
|
|
} else {
|
|
|
|
url += '?' + query;
|
|
|
|
}
|
|
|
|
window.location.href = url;
|
|
|
|
|
|
|
|
});
|
|
|
|
})
|
|
|
|
</script>
|
|
|
|
</block>
|