define(['utils', 'api'], function (utils, api) { var modVars = { "chart": null }; function init() { //setUserName(); initCharts(); // 初始化图表实例 } function setUserName() { var option = { type: 'post', url: api.user.getSystemUser, success: function (ret) { if (ret.code === 200) { console.log(ret.obj); }else { layer.msg('code:' + ret.code + ' 信息: ' + ret.msg, {icon: 2}); } } }; utils.ajax(option); } /** * 初始化图表实例 * @author [刘耀填] * @date 2018/10/08 */ function initCharts() { modVars.chart = { "barChart": echarts.init($('#barChart')[0], 'shine'), "stackedLineChart": echarts.init($('#lineChart')[0], 'shine'), "pieChart": echarts.init($('#pieChart')[0], 'shine') }; // ECharts图表在div尺寸变化时的自适应 window.onresize = function(){ modVars.chart.barChart.resize(); modVars.chart.stackedLineChart.resize(); modVars.chart.pieChart.resize(); }; getChartsData(); // 获取所有图表的数据 } /** * 获取所有图表的数据 * @author [刘耀填] * @date 2018/10/08 */ function getChartsData() { function successFun(ret) { if (ret.code === 200) { var obj = ret.obj; renderCharts(obj); } else { layer.msg("首页数据获取失败!"); } } /*var option = { url: api.home.getHomePageStatistics, success: successFun }; utils.ajax(option);*/ $.getJSON("../../js/model/home/content.json", "", successFun); } /** * 渲染图表 * @author [刘耀填] * @date 2018/10/08 */ function renderCharts(data) { $('#userCount').html(data.userCount); // 总用户数 $('#monthloginCount').html(data.monthloginCount); // 本月登录用户数 $('#dayloginCount').html(data.dayloginCount); // 今日登录用户数 $('#loginTotalCount').html(data.loginTotalCount); // 总登录次数 // 数字从低到高动态累加 $('.counter').counterUp({ delay: 100, time: 1200 }); $('#appTotalCount').html(data.appTotalCount); // 总应用数量 renderBar(data.activiUserRanking); // 渲染柱状图(活跃用户排行榜) renderStackedLine(data.appRateRanking); // 渲染堆叠折线图(系统使用频率分析) renderPie(data.appRateStatistic); // 渲染圆饼图(每个应用登录次数) } /** * 渲染柱状图(活跃用户排行榜) * @author [刘耀填] * @date 2018/10/08 */ function renderBar(barData) { var one = barData[0].loginCount, two = barData[1].userCount, ranking = barData[2].ranking; // 排行榜数据 var xAxisData = [], // x轴上的类别 oneData = [], twoData = []; // 获取状元,榜眼,探花每个月的登录次数 for (monthName in one) { if (one.hasOwnProperty(monthName)) { xAxisData.push(monthName); var oneItem = (one[monthName] === 0) ? 0 : one[monthName]; oneData.push(oneItem); var twoItem = (two[monthName] === 0) ? 0 : two[monthName]; twoData.push(twoItem); } } // 获取当前月的状元,榜眼,探花 (短路&&) ranking.one && $('#first').html(ranking.one.username); ranking.two && $('#second').html(ranking.two.username); ranking.three && $('#third').html(ranking.three.username); // 配置项:用于控制条形柱顶部显示数量,或文字等 var itemStyle = { normal: { label: { show: false, // 不显示(暂时) position: 'top', // 在上方显示 textStyle: { // 数值样式 color: 'black', fontSize: 14 }, formatter: function (param) { if (param.value === 0) { return ''; } else { return param.data.username; } } } } }; var option = { tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, // 自定义tooltip显示 // formatter: function (params) { // var res = params[0].name; // res += ''; // if (params[0].data) { // res += ''; // } // if (params[1].data) { // res += ''; // } // if (params[2].data) { // res += ''; // } // res += '
' + params[0].marker + '状元:' + params[0].data.username + '
' + params[1].marker + '榜眼:' + params[1].data.username + '
' + params[2].marker + '探花:' + params[2].data.username + '
'; // return res; // }, xAxis: { type: 'category', data: xAxisData }, yAxis: { type: 'value', min: 0, minInterval: 1, name: '', axisLabel: { formatter: ' {value}' }, "axisLine": { //y轴 "show": false }, "axisTick": { //y轴刻度线 "show": false }, "splitLine": { //网格线 "show": true }, }, series: [{ name: '使用次数', type: 'bar', data: oneData, // 暂时不用,需要时,将对象里的show变为true itemStyle: itemStyle }, { name: '用户数', type: 'bar', data: twoData, // 暂时不用,需要时,将对象里的show变为true itemStyle: itemStyle }] }; // 使用刚指定的配置项和数据显示图表。 modVars.chart.barChart.setOption(option); } /** * 渲染堆叠折线图(系统使用频率分析) * @author [刘耀填] * @date 2018/10/08 */ function renderStackedLine(lineData) { var xAxisData = [], // x轴上的类别 legendArr = [], // 图例 seriesData = []; for (var i = 0; i <= lineData.length; i++) { var appObj = {}; // 保存每个应用的数据 var appItem = lineData[i]; // 每个应用对象,只有一个属性 for (appName in appItem) { if (appItem.hasOwnProperty(appName)) { var appItemMonthData = appItem[appName]; // 每个应用对应的月份数据 appObj = { "name": appName, // 应用名 "type": "line", "stack": appName, "data": [] // 该应用每个月的使用频率 }; for (monthName in appItemMonthData) { if (appItemMonthData.hasOwnProperty(monthName)) { if (i === 0) { xAxisData.push(monthName); // 获取x轴上的类别 } appObj.data.push(appItemMonthData[monthName]); } } legendArr.push(appName); seriesData.push(appObj); } } } var option = { title: { // text: '折线图堆叠' }, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'line' // 默认为直线,可选为:'line' | 'shadow' } }, legend: { data: legendArr }, xAxis: { type: 'category', boundaryGap: false, data: xAxisData }, yAxis: { // minInterval: 10, min: 0, minInterval: 1, type: 'value', axisLabel: { formatter: ' {value}' }, "axisLine": { //y轴 "show": false }, "axisTick": { //y轴刻度线 "show": false }, "splitLine": { //网格线 "show": true } }, series: seriesData }; // 使用刚指定的配置项和数据显示图表。 modVars.chart.stackedLineChart.setOption(option); } /** * 渲染圆饼图(每个应用登录次数) * @author [刘耀填] * @date 2018/10/08 */ function renderPie(pieData) { var option = { tooltip: { trigger: 'item', formatter: "{a}
{b} : {c} ({d}%)" }, color: ['rgb(59,192,195)', 'rgb(241,60,110)', 'rgb(249,205,173)', 'rgb(26,41,66)', 'rgb(131,175,155)'], series: [ { name: '使用次数', type: 'pie', radius: '55%', center: ['50%', '60%'], data: pieData, itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' }, normal: { label: { show: false //隐藏标示文字 }, labelLine: { show: false //隐藏标示线 } } } } ] }; // 使用刚指定的配置项和数据显示图表。 modVars.chart.pieChart.setOption(option); } return { 'init': init } });