define(['jquery'], function ($) { var Controller = { index: 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 '' + num + ''; }; function loadData() { var periods = parseInt($('#dash-periods').val()) || 30; if (periods < 10) periods = 10; if (periods > 100) periods = 100; $('#dash-content').html('

' + __('Loading') + '
'); $.ajax({ url: 'history/dashboard', type: 'GET', data: {periods: periods}, dataType: 'json', success: function (ret) { if (ret.code != 1) { $('#dash-content').html('
' + (ret.msg || '加载失败') + '
'); return; } render(ret.data); }, error: function () { $('#dash-content').html('
请求失败,请重试
'); } }); } function render(data) { var hc = data.hotcold, cw = data.colorwave, zo = data.zodiac; var oe = data.oddeven, bs = data.bigsmall, sp = data.special, tn = data.tailnumbers; var html = ''; html += '

🔥❄️ 冷热号码

'; html += '
热号 Top 5
'; for (var i = 0; i < 5; i++) html += ball(hc.hot[i].num, hc.hot[i].color) + ' '; html += '
'; html += '
冷号 Top 5
'; for (var i = 0; i < 5; i++) html += ball(hc.cold[i].num, hc.cold[i].color) + ' '; html += '
'; html += '

📊 比例分析

'; html += '
🎨 波色
'; html += '
'; html += '
' + cw.red + '
红波 ' + cw.red_pct + '%
'; html += '
' + cw.blue + '
蓝波 ' + cw.blue_pct + '%
'; html += '
' + cw.green + '
绿波 ' + cw.green_pct + '%
'; html += '
'; html += '
⚖️ 奇偶
'; html += '
'; html += '
' + oe.odd + '
奇数 ' + oe.odd_pct + '%
'; html += '
' + oe.even + '
偶数 ' + oe.even_pct + '%
'; html += '
'; html += '
📏 大小
'; html += '
'; html += '
' + bs.big + '
大数 ' + bs.big_pct + '%
'; html += '
' + bs.small + '
小数 ' + bs.small_pct + '%
'; html += '
'; html += '
'; html += '

⭐ 生肖排名

'; html += '

📈 特码走势

'; html += '

🔢 尾数频率

'; $('#dash-content').html(html); // 生肖柱状图 if (typeof echarts !== 'undefined' && zo.list && zo.list.length > 0) { var zDom = document.getElementById('zodiac-chart'); if (zDom) { var zChart = echarts.init(zDom); zChart.setOption({ tooltip: {trigger: 'axis', axisPointer: {type: 'shadow'}}, grid: {left: 50, right: 20, bottom: 30, top: 10}, xAxis: {type: 'category', data: zo.list.map(function(z){return z.animal;})}, yAxis: {type: 'value'}, series: [{type: 'bar', data: zo.list.map(function(z){return z.count;}), itemStyle: {color: '#626c91'}}] }); $(window).on('resize', function(){ zChart.resize(); }); } } // 特码走势 if (typeof echarts !== 'undefined' && sp.expects && sp.expects.length > 0) { var chartDom = document.getElementById('special-chart'); if (chartDom) { var chart = echarts.init(chartDom); var colorMap = {'红': '#e74c3c', '蓝': '#3498db', '绿': '#2ecc71'}; var itemColors = sp.colors.map(function(c) { if (c.indexOf('红') !== -1) return colorMap['红']; if (c.indexOf('蓝') !== -1) return colorMap['蓝']; if (c.indexOf('绿') !== -1) return colorMap['绿']; return '#95a5a6'; }); chart.setOption({ tooltip: {trigger: 'axis', formatter: function(p) { return '期号: ' + p[0].axisValue + '
特码: ' + p[0].data + ''; }}, xAxis: {type: 'category', data: sp.expects, axisLabel: {rotate: 45, fontSize: 10}}, yAxis: {type: 'value', min: 0, max: 50}, series: [{type: 'line', data: sp.specials, smooth: true, symbolSize: 8, itemStyle: {color: function(p) { return itemColors[p.dataIndex]; }}, areaStyle: {color: 'rgba(52,152,219,0.05)'}}], grid: {left: 50, right: 20, bottom: 50, top: 20} }); $(window).on('resize', function () { chart.resize(); }); } } // 尾数柱状图 if (typeof echarts !== 'undefined' && tn.all && tn.all.length > 0) { var tDom = document.getElementById('tail-chart'); if (tDom) { var tChart = echarts.init(tDom); var sorted = tn.all.slice().sort(function(a,b){return a.tail - b.tail;}); tChart.setOption({ tooltip: {trigger: 'axis', axisPointer: {type: 'shadow'}}, grid: {left: 50, right: 20, bottom: 30, top: 10}, xAxis: {type: 'category', data: sorted.map(function(t){return t.tail;})}, yAxis: {type: 'value'}, series: [{type: 'bar', data: sorted.map(function(t){return t.count;}), itemStyle: {color: '#23b7e5'}}] }); $(window).on('resize', function(){ tChart.resize(); }); } } } $('#btn-dash-refresh').on('click', loadData); loadData(); } }; return Controller; });