Files
amlhc/application/admin/view/dashboard/index.html
T

156 lines
8.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<style type="text/css">
.dash-section { margin-bottom: 20px; }
.dash-section h4 { border-bottom: 1px solid #eee; padding-bottom: 8px; margin-bottom: 12px; font-size: 15px; color: #333; }
.dash-card { background: #f9f9f9; border-radius: 6px; padding: 12px; text-align: center; }
.dash-card .big-num { font-size: 28px; font-weight: bold; color: #333; }
.dash-card .label-text { font-size: 12px; color: #999; margin-top: 4px; }
.num-ball-sm { display: inline-block; width: 32px; height: 32px; line-height: 32px; text-align: center; border-radius: 50%; color: #fff; font-weight: bold; font-size: 13px; }
.mini-card { text-align: center; background: #f5f5f5; padding: 8px 12px; border-radius: 5px; display: inline-block; margin: 3px; min-width: 65px; }
.mini-card .name { font-size: 14px; font-weight: bold; color: #333; }
.mini-card .val { font-size: 11px; color: #666; }
#dash-chart { width: 100%; height: 280px; }
</style>
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null, false)}
<div style="float:right;">
<div class="form-inline">
<label>{:__('Query Periods')}</label>
<input type="number" id="dash-periods" class="form-control input-sm" value="{$periods|htmlentities}" min="10" max="100" style="width:80px;display:inline-block;">
<button class="btn btn-sm btn-primary" id="btn-dash-refresh"><i class="fa fa-refresh"></i> {:__('Refresh')}</button>
</div>
</div>
</div>
<div class="panel-body">
<div id="dash-content">
<div class="text-center" style="padding:60px;"><i class="fa fa-spinner fa-spin fa-2x"></i><br><span class="text-muted">{:__('Loading')}</span></div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>
<script>
$(function () {
var getColor = function (color) {
if (!color || color === '—') return '#95a5a6';
if (color.indexOf('红') !== -1) return '#e74c3c';
if (color.indexOf('蓝') !== -1) return '#3498db';
if (color.indexOf('绿') !== -1) return '#2ecc71';
return '#95a5a6';
};
var ball = function (num, color) {
return '<span class="num-ball-sm" style="background-color:' + getColor(color) + ';">' + num + '</span>';
};
function loadData() {
var periods = parseInt($('#dash-periods').val()) || 30;
if (periods < 10) periods = 10;
if (periods > 100) periods = 100;
$('#dash-content').html('<div class="text-center" style="padding:60px;"><i class="fa fa-spinner fa-spin fa-2x"></i><br><span class="text-muted">{:__("Loading")}</span></div>');
$.ajax({
url: 'history/dashboard',
type: 'GET',
data: {periods: periods},
dataType: 'json',
success: function (ret) {
if (ret.code != 1) {
$('#dash-content').html('<div class="alert alert-danger">' + (ret.msg || '加载失败') + '</div>');
return;
}
render(ret.data);
},
error: function () {
$('#dash-content').html('<div class="alert alert-danger">请求失败,请重试</div>');
}
});
}
function render(data) {
var hc = data.hotcold, cw = data.colorwave, zo = data.zodiac;
var oe = data.oddeven, bs = data.bigsmall, sm = data.sum, tn = data.tailnumbers;
var html = '';
// 冷热号码
html += '<div class="dash-section"><h4>🔥❄️ 冷热号码</h4><div class="row">';
html += '<div class="col-sm-6"><div class="dash-card" style="border-left:3px solid #e74c3c;"><div style="color:#e74c3c;font-weight:bold;margin-bottom:8px;">热号 Top 5</div>';
for (var i = 0; i < 5; i++) html += ball(hc.hot[i].num, hc.hot[i].color) + ' ';
html += '</div></div>';
html += '<div class="col-sm-6"><div class="dash-card" style="border-left:3px solid #3498db;"><div style="color:#3498db;font-weight:bold;margin-bottom:8px;">冷号 Top 5</div>';
for (var i = 0; i < 5; i++) html += ball(hc.cold[i].num, hc.cold[i].color) + ' ';
html += '</div></div></div></div>';
// 波色 & 奇偶 & 大小
html += '<div class="dash-section"><h4>📊 比例分析</h4><div class="row">';
// 波色
html += '<div class="col-sm-4"><div class="dash-card"><div style="font-weight:bold;margin-bottom:8px;">🎨 波色</div>';
html += '<div style="display:flex;justify-content:space-around;">';
html += '<div><div style="font-size:24px;font-weight:bold;color:#e74c3c;">' + cw.red + '</div><div class="label-text">红波 ' + cw.red_pct + '%</div></div>';
html += '<div><div style="font-size:24px;font-weight:bold;color:#3498db;">' + cw.blue + '</div><div class="label-text">蓝波 ' + cw.blue_pct + '%</div></div>';
html += '<div><div style="font-size:24px;font-weight:bold;color:#2ecc71;">' + cw.green + '</div><div class="label-text">绿波 ' + cw.green_pct + '%</div></div>';
html += '</div></div></div>';
// 奇偶
html += '<div class="col-sm-4"><div class="dash-card"><div style="font-weight:bold;margin-bottom:8px;">⚖️ 奇偶</div>';
html += '<div style="display:flex;justify-content:space-around;">';
html += '<div><div style="font-size:24px;font-weight:bold;color:#e74c3c;">' + oe.odd + '</div><div class="label-text">奇数 ' + oe.odd_pct + '%</div></div>';
html += '<div><div style="font-size:24px;font-weight:bold;color:#3498db;">' + oe.even + '</div><div class="label-text">偶数 ' + oe.even_pct + '%</div></div>';
html += '</div></div></div>';
// 大小
html += '<div class="col-sm-4"><div class="dash-card"><div style="font-weight:bold;margin-bottom:8px;">📏 大小</div>';
html += '<div style="display:flex;justify-content:space-around;">';
html += '<div><div style="font-size:24px;font-weight:bold;color:#f39c12;">' + bs.big + '</div><div class="label-text">大数 ' + bs.big_pct + '%</div></div>';
html += '<div><div style="font-size:24px;font-weight:bold;color:#2ecc71;">' + bs.small + '</div><div class="label-text">小数 ' + bs.small_pct + '%</div></div>';
html += '</div></div></div>';
html += '</div></div>';
// 生肖
html += '<div class="dash-section"><h4>⭐ 生肖排名</h4><div style="display:flex;flex-wrap:wrap;">';
for (var i = 0; i < Math.min(zo.list.length, 12); i++) {
var z = zo.list[i];
html += '<div class="mini-card"><div class="name">' + z.animal + '</div><div class="val">' + z.count + ' (' + z.percent + '%)</div></div>';
}
html += '</div></div>';
// 和值
html += '<div class="dash-section"><h4>📈 和值统计</h4><div class="row">';
html += '<div class="col-sm-4"><div class="dash-card"><div class="big-num">' + sm.avg + '</div><div class="label-text">平均和值</div></div></div>';
html += '<div class="col-sm-4"><div class="dash-card"><div class="big-num" style="color:#e74c3c;">' + sm.max + '</div><div class="label-text">最大和值</div></div></div>';
html += '<div class="col-sm-4"><div class="dash-card"><div class="big-num" style="color:#3498db;">' + sm.min + '</div><div class="label-text">最小和值</div></div></div>';
html += '</div><div id="dash-chart" style="margin-top:15px;"></div></div>';
// 尾数
html += '<div class="dash-section"><h4>🔢 尾数频率</h4><div style="display:flex;flex-wrap:wrap;">';
for (var i = 0; i < tn.all.length; i++) {
var t = tn.all[i];
html += '<div class="mini-card"><div class="name">' + t.tail + '</div><div class="val">' + t.count + ' (' + t.percent + '%)</div></div>';
}
html += '</div></div>';
$('#dash-content').html(html);
// 和值折线图
if (typeof echarts !== 'undefined' && sm.expects && sm.expects.length > 0) {
var chart = echarts.init(document.getElementById('dash-chart'));
chart.setOption({
tooltip: {trigger: 'axis'},
xAxis: {type: 'category', data: sm.expects, axisLabel: {rotate: 45, fontSize: 10}},
yAxis: {type: 'value'},
series: [{type: 'line', data: sm.sums, smooth: true, itemStyle: {color: '#3498db'}, areaStyle: {color: 'rgba(52,152,219,0.1)'}}],
grid: {left: 50, right: 20, bottom: 50, top: 20}
});
$(window).on('resize', function () { chart.resize(); });
}
}
$('#btn-dash-refresh').on('click', loadData);
loadData();
});
</script>