|
|
|
@@ -50,23 +50,59 @@
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
color: #999;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .layui-form-item { margin-bottom: 0; }
|
|
|
|
|
.dash-filter .layui-inline {
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
margin-bottom: 0;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .layui-form-label {
|
|
|
|
|
width: 72px;
|
|
|
|
|
padding: 9px 10px 9px 0;
|
|
|
|
|
text-align: left;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .layui-input-block {
|
|
|
|
|
margin-left: 72px;
|
|
|
|
|
min-height: 36px;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .dash-date-input {
|
|
|
|
|
width: 210px;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .dash-date-shortcuts {
|
|
|
|
|
margin-left: 0;
|
|
|
|
|
margin-right: 4px;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .dash-date-shortcuts .layui-btn {
|
|
|
|
|
margin: 0 4px 0 0;
|
|
|
|
|
height: 36px;
|
|
|
|
|
line-height: 36px;
|
|
|
|
|
padding: 0 12px;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .dash-channel-block {
|
|
|
|
|
width: 170px;
|
|
|
|
|
min-width: 170px !important;
|
|
|
|
|
}
|
|
|
|
|
.dash-filter .dash-agent-block {
|
|
|
|
|
width: 150px;
|
|
|
|
|
min-width: 150px !important;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
<div class="layui-card">
|
|
|
|
|
<form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="LAY-dash-search">
|
|
|
|
|
<form class="layui-form layui-card-header layuiadmin-card-header-auto dash-filter" lay-filter="LAY-dash-search">
|
|
|
|
|
<div class="layui-form-item">
|
|
|
|
|
<div class="layui-inline">
|
|
|
|
|
<label class="layui-form-label">时间</label>
|
|
|
|
|
<div class="layui-input-block">
|
|
|
|
|
<select name="range">
|
|
|
|
|
<option value="30d" selected>近30天</option>
|
|
|
|
|
<option value="7d">近7天</option>
|
|
|
|
|
<option value="yesterday">昨日</option>
|
|
|
|
|
<option value="today">今日</option>
|
|
|
|
|
</select>
|
|
|
|
|
<div class="layui-input-block dash-date-input">
|
|
|
|
|
<input type="text" name="date_range" id="LAY-dash-date-range" placeholder="开始日期 - 结束日期" autocomplete="off" class="layui-input">
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
@include('admin.partials.filter_channel_select')
|
|
|
|
|
@include('admin.partials.filter_agent_select')
|
|
|
|
|
<div class="layui-inline dash-date-shortcuts">
|
|
|
|
|
<button type="button" class="layui-btn layui-btn-primary" data-range="today">今日</button>
|
|
|
|
|
<button type="button" class="layui-btn layui-btn-primary" data-range="yesterday">昨日</button>
|
|
|
|
|
<button type="button" class="layui-btn layui-btn-primary" data-range="month">本月</button>
|
|
|
|
|
</div>
|
|
|
|
|
@include('admin.partials.filter_channel_select', ['channelBlockClass' => 'dash-channel-block'])
|
|
|
|
|
@include('admin.partials.filter_agent_select', ['agentBlockClass' => 'dash-agent-block'])
|
|
|
|
|
<div class="layui-inline">
|
|
|
|
|
<button class="layui-btn" lay-submit lay-filter="LAY-dash-search">查询</button>
|
|
|
|
|
</div>
|
|
|
|
@@ -79,7 +115,7 @@
|
|
|
|
|
<div class="dash-tile-hd">总设备数</div>
|
|
|
|
|
<div class="dash-tile-bd">
|
|
|
|
|
<div class="dash-metric" id="dash-total">—</div>
|
|
|
|
|
<span class="dash-metric-caption">有钱包设备/总设备</span>
|
|
|
|
|
<span class="dash-metric-caption">有钱包设备/总设备(区间内新增)</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="dash-tile">
|
|
|
|
@@ -108,7 +144,7 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="dash-section-label">总余额</div>
|
|
|
|
|
<div class="dash-section-label">总余额<span style="margin-left:8px;font-size:12px;">区间内新增地址</span></div>
|
|
|
|
|
<div class="dash-grid dash-grid-5">
|
|
|
|
|
<div class="dash-tile">
|
|
|
|
|
<div class="dash-tile-hd">USDT</div>
|
|
|
|
@@ -202,11 +238,68 @@
|
|
|
|
|
|
|
|
|
|
@push('scripts')
|
|
|
|
|
<script>
|
|
|
|
|
layui.use(['form'], function () {
|
|
|
|
|
layui.use(['form', 'laydate', 'layer'], function () {
|
|
|
|
|
var form = layui.form;
|
|
|
|
|
var laydate = layui.laydate;
|
|
|
|
|
var layer = layui.layer;
|
|
|
|
|
var $ = layui.$;
|
|
|
|
|
var dataUrl = @json(route(($portal ?? 'admin').'.dashboard.data'));
|
|
|
|
|
|
|
|
|
|
function pad(n) { return n < 10 ? '0' + n : '' + n; }
|
|
|
|
|
function fmtDate(d) {
|
|
|
|
|
return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate());
|
|
|
|
|
}
|
|
|
|
|
function defaultRange() {
|
|
|
|
|
var to = new Date();
|
|
|
|
|
var from = new Date();
|
|
|
|
|
from.setDate(to.getDate() - 29);
|
|
|
|
|
return fmtDate(from) + ' - ' + fmtDate(to);
|
|
|
|
|
}
|
|
|
|
|
function rangeOf(kind) {
|
|
|
|
|
var today = new Date();
|
|
|
|
|
today.setHours(0, 0, 0, 0);
|
|
|
|
|
if (kind === 'today') {
|
|
|
|
|
return fmtDate(today) + ' - ' + fmtDate(today);
|
|
|
|
|
}
|
|
|
|
|
if (kind === 'yesterday') {
|
|
|
|
|
var y = new Date(today);
|
|
|
|
|
y.setDate(y.getDate() - 1);
|
|
|
|
|
return fmtDate(y) + ' - ' + fmtDate(y);
|
|
|
|
|
}
|
|
|
|
|
if (kind === 'month') {
|
|
|
|
|
var from = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
|
|
|
return fmtDate(from) + ' - ' + fmtDate(today);
|
|
|
|
|
}
|
|
|
|
|
return defaultRange();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var initialRange = defaultRange();
|
|
|
|
|
$('#LAY-dash-date-range').val(initialRange);
|
|
|
|
|
laydate.render({
|
|
|
|
|
elem: '#LAY-dash-date-range',
|
|
|
|
|
type: 'date',
|
|
|
|
|
range: true,
|
|
|
|
|
value: initialRange,
|
|
|
|
|
done: function (value) {
|
|
|
|
|
if (value) $('#LAY-dash-date-range').val(value);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function parseRange(value) {
|
|
|
|
|
var m = String(value || '').match(/^(\d{4}-\d{2}-\d{2})\s*-\s*(\d{4}-\d{2}-\d{2})$/);
|
|
|
|
|
if (!m) return null;
|
|
|
|
|
return { date_from: m[1], date_to: m[2], date_range: m[1] + ' - ' + m[2] };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function currentWhere() {
|
|
|
|
|
var field = form.val('LAY-dash-search') || {};
|
|
|
|
|
var parsed = parseRange(field.date_range || $('#LAY-dash-date-range').val());
|
|
|
|
|
if (!parsed) return null;
|
|
|
|
|
var where = Object.assign({}, field, parsed);
|
|
|
|
|
delete where.range;
|
|
|
|
|
return where;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function fillRows(sel, rows) {
|
|
|
|
|
var html = '';
|
|
|
|
|
(rows || []).forEach(function (r) {
|
|
|
|
@@ -232,7 +325,7 @@ layui.use(['form'], function () {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function load(where) {
|
|
|
|
|
$.getJSON(dataUrl, where || { range: '30d' }, function (res) {
|
|
|
|
|
$.getJSON(dataUrl, where || parseRange(initialRange), function (res) {
|
|
|
|
|
if (!res || res.code !== 0) return;
|
|
|
|
|
$('#dash-total').html(ratioHtml(res.data.wallet_count || 0, res.data.total || 0));
|
|
|
|
|
$('#dash-new').text(res.data.new_count);
|
|
|
|
@@ -252,13 +345,32 @@ layui.use(['form'], function () {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
form.on('submit(LAY-dash-search)', function (data) {
|
|
|
|
|
load(data.field);
|
|
|
|
|
function applyRangeAndQuery(rangeText) {
|
|
|
|
|
$('#LAY-dash-date-range').val(rangeText);
|
|
|
|
|
var where = currentWhere();
|
|
|
|
|
if (!where) {
|
|
|
|
|
layer.msg('请选择有效的时间范围');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
load(where);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$('.dash-date-shortcuts').on('click', '[data-range]', function () {
|
|
|
|
|
applyRangeAndQuery(rangeOf($(this).data('range')));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
form.on('submit(LAY-dash-search)', function () {
|
|
|
|
|
var where = currentWhere();
|
|
|
|
|
if (!where) {
|
|
|
|
|
layer.msg('请选择有效的时间范围');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
load(where);
|
|
|
|
|
return false;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (window.CorunaFilterOptions) CorunaFilterOptions.apply(form);
|
|
|
|
|
load({ range: '30d' });
|
|
|
|
|
load(parseRange(initialRange));
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
@endpush
|
|
|
|
|