Files
EasySoft-ZenTaoPMS/module/report/js/annualdata.js
2019-12-25 09:33:40 +08:00

203 lines
7.1 KiB
JavaScript

/**
* Show or refresh annual data
* @param {Object} data Annual data object
* @return {void}
*/
function showAnnualData(data)
{
// Block 1
var $block1List = $('#block1List').empty();
data.block1.data && $.each(data.block1.data, function(index)
{
var item = data.block1.data[index];
$block1List.append('<li>' + item.title + ' <strong>' + item.value + '</strong></li>');
});
// Block 2
data.block2.dataTotal = 0;
var $block2List = $('#block2List').empty();
var $block2Chart = $('#block2Chart');
var pieChart = $block2Chart.data('pieChart');
var pieChartColors = ['#0068B7', '#1aa1e6', '#81cef2', '#aee3fc', '#b1e6ff', '#ddeaf0'];
while(pieChart.segments.length) pieChart.removeData();
pieChart.options.tooltipTemplate = "<%=label%>: <%=value%>";
data.block2.data && $.each(data.block2.data, function(index)
{
var item = data.block2.data[index];
var color = pieChartColors[Math.min(pieChartColors.length - 1, index)];
data.block2.dataTotal += item.value;
$block2List.append('<li><span class="dot" style="background: ' + color + '"></span> ' + item.title + ' <div><span>' + item.value + '<small>' + data.block2.unit + '</small></span><span>' + (item.percent || '') + '</span></div></li>');
pieChart.addData({color: color, label: item.title, value: item.value});
});
// Block3
var $blcok3TableHeader = $('#block3TableHeader').find('tr').empty();
data.block3.cols && $.each(data.block3.cols, function(index)
{
var col = data.block3.cols[index];
var $th = $('<th></th>').text(col.title);
$th.css({width: col.width, textAlign: col.align});
$blcok3TableHeader.append($th);
});
var $block3TableRows = $('<tbody></tbody>');
data.block3.rows && $.each(data.block3.rows, function(index)
{
var row = data.block3.rows[index];
var $tr = $('<tr></tr>');
$.each(data.block3.cols, function(colIndex)
{
var $td = $('<td></td>').text(row[colIndex]);
var rowCol = data.block3.cols[colIndex];
$td.css({width: rowCol.width, textAlign: rowCol.align});
$tr.append($td);
});
$block3TableRows.append($tr);
});
$('#block3Table').empty().append($block3TableRows);
// Block4
var block4Colors = ['#CAAC32', '#0075A9', '#22AC38', '#2B4D6D', '#0071a4', '#00a0e9', '#7ecef4'];
$.each(['chart1', 'chart2'], function(i, chartName)
{
var $chart = $('#block4' + chartName);
var chart = $chart.data('pieChart');
var chartData = data.block4[chartName];
chartData.total = 0;
while(chart.segments.length) chart.removeData();
var dataLength = chartData.data && chartData.data.length;
if(!dataLength) return;
for(var i = 0; i < dataLength; ++i)
{
var item = chartData.data[i];
chartData.total += item.value;
}
chart.addData({color: 'transparent', value: chartData.total / 5, label: ''});
var $chartInfo = $('#block4' + chartName + 'Info').empty();
for(var i = 0; i < dataLength; ++i)
{
var item = chartData.data[i];
var color = block4Colors[Math.min(block4Colors.length - 1, i)];
chart.addData({color: color, label: item.title, value: item.value, circleBeginEnd: true});
$chartInfo.append('<li><span class="pri" style="background: ' + color + '"></span> ' + (item.legend ? (item.legend + ' - ') :'') + item.value + ' ' + chartData.unit + '</li>');
};
});
// Block5
var $block5Chart = $('#block5Chart');
var block5Chart = $block5Chart.data('block5Chart');
var block5Colors = ['#76FF03', '#2979FF', '#00B0FF', '#FFD740', '#B388FF'];
var block5Datasets = [];
var $block5Legend = $('#block5Legend').empty();
$.each(data.block5.datasets, function(index)
{
var dataset = data.block5.datasets[index];
var color = block5Colors[Math.min(block5Colors.length - 1, index)];
block5Datasets.push({label: dataset.label, data: dataset.data, color: new $.zui.Color(color).fade(50).toCssStr()});
$block5Legend.append('<span class="dot" style="background: ' + color + '"></span> ' + dataset.label);
});
if(!block5Chart)
{
block5Chart = $block5Chart.lineChart(
{
labels: data.block5.labels,
datasets: block5Datasets
}, {
scaleFontColor: '#A0A0A0',
datasetStrokeWidth: 1,
pointDotRadius: 3,
scaleShowVerticalLines: false,
scaleGridLineColor: 'rgba(255,255,255,.3)'
});
$block5Chart.data('block5Chart', block5Chart);
}
else
{
$.each(block5Datasets, function(index)
{
var dataset = block5Datasets[index];
var oldDataset = block5Chart.datasets[index];
for(var i = 0; i < dataset.data.length; ++i)
{
oldDataset.points[i].value = dataset.data[i];
}
});
block5Chart.update();
}
// Common text holders
$('.text-holder').each(function()
{
var $this = $(this);
var id = $this.data('id');
var idPath = id.split('.');
var dataProp = data;
for(var i = 0; i < idPath.length; ++i)
{
dataProp = dataProp[idPath[i]];
}
$this.text(dataProp);
});
}
/**
* Export annual data to image file
* @param {function} sucessCallback
* @param {function} errorCallback
* @return {void}
*/
function exportAnnualImage(sucessCallback, errorCallback)
{
var $main = $('#main');
if($main.hasClass('exporting')) return;
var $loading = $('#loadIndicator');
$loading.addClass('loading');
var $container = $('#container');
$main.addClass('exporting').css('backgroundImage', $container.css('backgroundImage'));
var afterFinish = function(canvas)
{
$main.removeClass('exporting').css('backgroundImage', 'none');
$loading.removeClass('loading');
};
html2canvas($main[0], {logging: false}).then(function(canvas)
{
canvas.onerror = function()
{
afterFinish(canvas);
if(errorCallback) errorCallback('Cannot convert image to blob.');
};
canvas.toBlob(function(blob)
{
var imageUrl = URL.createObjectURL(blob);
$('#imageDownloadBtn').attr({href: imageUrl})[0].click();
if(sucessCallback) sucessCallback(imageUrl);
afterFinish(canvas);
});
});
}
$(function()
{
var $main = $('#main');
var ajustPosition = function()
{
$main.css(
{
posotion: 'absolute',
top: Math.max(0, Math.floor(($(window).height() - $main.outerHeight()) / 2)),
left: Math.max(0, Math.floor(($(window).width() - $main.outerWidth()) / 2)),
});
};
ajustPosition();
$(window).on('resize', ajustPosition);
$('#exportBtn').on('click', function()
{
exportAnnualImage();
});
$('#toolbar #year').change(function()
{
location.href = createLink('report', 'annualData', 'year=' + $(this).val());
});
});