$(document).ready(function() {
autoFlashHeight();
postData('/financial/' + spid + '/summary/load', {}, function (result) {
console.log(result);
tenders = result.tenders;
transferList = result.transferList;
transferTenderList = result.transferTenderList;
payList = result.payList;
summaryObj.setTenderSelect(result.tenders);
summaryObj.changeHtmlAndCharts(result.tenders, result.transferList, result.transferTenderList, result.payList);
});
$('#tender-select').on('changed.bs.select', function (e, clickedIndex, isSelected, previousValue) {
const vals = $(this).val();
if (vals.length === 0) {
$('#tender-select').selectpicker('val', '0');
} else if (clickedIndex !== 0 && vals.length > 1 && _.includes(vals, '0')) {
$('#tender-select').selectpicker('val', _.without(vals, '0'));
} else if (clickedIndex === 0 && isSelected) {
$('#tender-select').selectpicker('val', '0');
}
});
$('#search-btn').click(function () {
const tenderSelects = $('#tender-select').val().map(function (item, index) {
return parseInt(item);
});
// 判断是单还是多个标段
const is_single = tenderSelects.length === 1 && tenderSelects[0] !== 0;
const is_all = tenderSelects.length === 1 && tenderSelects[0] === 0;
const startMonth = $('#start-month').val();
const endMonth = $('#end-month').val();
const condition = {};
let newTransferList = _.cloneDeep(transferList);
let newTransferTenderList = _.cloneDeep(transferTenderList);
let newPayList = _.cloneDeep(payList);
if (startMonth !== '' && endMonth !== '') {
// 判断输入合法和endMonth大于startMonth
if (!/^\d{4}-\d{2}$/.test(startMonth) || !/^\d{4}-\d{2}$/.test(endMonth)) {
toastr.warning('请输入正确的日期格式');
return;
}
if (startMonth > endMonth) {
toastr.warning('结束日期不能小于开始日期');
return;
}
newTransferList = _.filter(newTransferList, function (item) {
return item.t_time >= startMonth && item.t_time <= endMonth;
});
newTransferTenderList = _.filter(newTransferTenderList, function (item) {
return _.includes(_.map(newTransferList, 'id'), item.trid);
});
newPayList = _.filter(newPayList, function (item) {
const thisMonth = moment(item.create_time).format('YYYY-MM');
return thisMonth >= startMonth && thisMonth <= endMonth;
});
} else if (startMonth !== '' || endMonth !== '') {
toastr.warning('请选择开始和结束日期查询');
return;
}
newTransferTenderList = !is_all ? _.filter(newTransferTenderList, function (item) { return _.includes(tenderSelects, item.tid); }) : newTransferTenderList;
newPayList = !is_all ? _.filter(newPayList, function (item) { return _.includes(tenderSelects, item.tid); }) : newPayList;
const newTenders = !is_all ? _.filter(tenders, function (item) { return _.includes(tenderSelects, item.id); }) : tenders;
summaryObj.changeHtmlAndCharts(newTenders, newTransferList, newTransferTenderList, newPayList, tenderSelects);
});
const summaryObj = {
setTenderSelect: function (tenders) {
let tenderSelectHtml = '';
for (const tender of tenders) {
tenderSelectHtml += ``;
}
$('#tender-select').html(tenderSelectHtml);
$('#tender-select').selectpicker();
},
changeHtmlAndCharts: function (tenders, transferList, transferTenderList, payList, tenderSelects = [0]) {
const transfer_price = tenderSelects !== [0] ? _.map(transferTenderList, 'hb_tp') : _.map(transferList, 'total_price');
const transfer_sum_price = ZhCalc.sum(transfer_price);
const pay_price = _.map(payList, 'total_price');
const pay_sum_price = ZhCalc.sum(pay_price);
const pend_sum_price = ZhCalc.sub(transfer_sum_price, pay_sum_price);
const small_expenses_tp = _.map(payList, 'small_expenses_tp');
const small_expenses_sum_price = ZhCalc.sum(small_expenses_tp);
// 金额概况
$('#transfer_price').text(transfer_sum_price.format2Str('#,##0.######'));
$('#pay_price').text(pay_sum_price.format2Str('#,##0.######'));
$('#pend_price').text(pend_sum_price.format2Str('#,##0.######'));
// 支付进度
const pay_progress = (ZhCalc.div(pay_sum_price, ZhCalc.add(pay_sum_price, pend_sum_price)) * 100).toFixed(0);
const pend_progress = 100 - pay_progress;
$('#pay_progress').html(`
${pay_progress}%
${pend_progress}%
`);
$('[data-toggle="tooltip"]').tooltip();
// 资金支出明细
let pay_used_html = '';
payUsedOption.series[0].data = [];
for (const used of usedList) {
const usedPays = _.filter(payList, { used: used });
if (usedPays.length > 0) {
const used_price = _.map(usedPays, 'total_price');
const used_sum_price = ZhCalc.sum(used_price)
pay_used_html += `${used} | ${used_sum_price.format2Str('#,##0.######')} | ${(pay_sum_price ? ZhCalc.div(used_sum_price, pay_sum_price) * 100 : 0).toFixed(2)}% |
`;
payUsedOption.series[0].data.push({ value: used_sum_price, name: used });
}
}
pay_used_html += `合计 | ${pay_sum_price.format2Str('#,##0.######')} | |
`;
pay_used_html += `其中:小额支出 | ${small_expenses_sum_price.format2Str('#,##0.######')} | ${(pay_sum_price ? ZhCalc.div(small_expenses_sum_price, pay_sum_price) * 100 : 0).toFixed(2)}% |
`;
$('#pay_used_table').html(pay_used_html);
// 标段支出概况图表
tenderOption.xAxis[0].data = _.map(tenders, 'name');
tenderOption.dataZoom[0].start = 0;
tenderOption.dataZoom[0].end = computedPosition(tenders.length);
tenderOption.series[0].data = [];
tenderOption.series[1].data = [];
for (const t of tenders) {
const transferTenders = _.filter(transferTenderList, { tid: t.id });
const transfer_tender_price = ZhCalc.sum(_.map(transferTenders, 'hb_tp'));
const payTenders = _.filter(payList, { tid: t.id });
const pay_tender_price = ZhCalc.sum(_.map(payTenders, 'total_price'));
tenderOption.series[0].data.push(transfer_tender_price);
tenderOption.series[1].data.push(pay_tender_price);
}
tenderChart.setOption(tenderOption);
// 支出明细占比图表
payUsedChart.setOption(payUsedOption);
// 小额支出占比
paySeOption.series[0].data = [
{ value: small_expenses_sum_price, name: '小额支出' },
{ value: ZhCalc.sub(pay_sum_price, small_expenses_sum_price), name: '其他' },
];
paySeChart.setOption(paySeOption);
},
}
let resizeTimer = null;
$(window).bind('resize', function () {
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(function () {
echartsReset();
}, 500);
})
function echartsReset() {
tenderChart.resize();
payUsedChart.resize();
paySeChart.resize();
}
// 计算显示滚动条长度
function computedPosition(xArrayLength) {
if (xArrayLength >= 8) {
return Math.floor(8 / xArrayLength * 100) > 100 ? 100 : Math.floor(8 / xArrayLength * 100);
// return length <= 10 ? 35 : 100 - Math.floor(35 / length * 100);
} else {
return 100;
}
}
//标段占比
const tenderChart = echarts.init(document.getElementById('jlchart3'));
const tenderOption = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
dataZoom: [
{
// brushSelect:false,
// zoomLock: false,
type: 'slider',
// show: true,
// realtime: true,
showdetail: false,
showDataShadow: false,
// // dataZoomIndex: 10,
start: 0,
end: 10,
height: 10,
bottom: '5%',
},
],
legend: {},
grid: {
left: '3%',
right: '4%',
bottom: '10%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: [],
axisLabel: {
show: true,
interval: 0,
formatter: function(value) {
var res = value;
if(res.length > 8) {
res = res.substring(0, 7) + "..";
}
return res;
}
}
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '累计划拨',
type: 'bar',
emphasis: {
focus: 'series'
},
data: []
},
{
name: '累计支付',
type: 'bar',
stack: 'Ad',
emphasis: {
focus: 'series'
},
data: []
}
]
};
// tenderChart.setOption(tenderOption);
//费用明细占比//
const payUsedChart = echarts.init(document.getElementById('jlchart1'));
const payUsedOption = {
color: ['#9489fa', '#f06464', '#f7af59', '#f0da49', '#71c16f', '#2aaaef', '#5690dd', '#bd88f5', '#009db2', '#0780cf'],
//backgroundColor: '#343a40 ',
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left:'60%',
right:'20%',
top: 'middle'
},
series: [
{
name: '金额',
type: 'pie',
top:'20',
bottom:'20',
right:'40%',
radius: ['80%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'right'
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: [],
}
]
};
// 为echarts对象加载数据
// myChart1.setOption(option1);
//小额支出概况//
var paySeChart = echarts.init(document.getElementById('jlchart2'));
var paySeOption = {
color: [ '#71c16f', '#2aaaef'],
//backgroundColor: '#343a40 ',
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left:'60%',
right: '20%',
top: 'middle'
},
series: [
{
name: '金额',
type: 'pie',
top:'20',
bottom:'20',
right:'40%',
radius: ['80%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'right'
},
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
labelLine: {
show: false
},
data: []
}
]
};
// 为echarts对象加载数据
// myChart2.setOption(option2);
$.subMenu({
menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
key: 'menu.1.0.0',
miniHint: '#sub-mini-hint', hintKey: 'menu.hint.1.0.1',
callback: function (info) {
if (info.mini) {
$('.panel-title').addClass('fluid');
$('#sub-menu').removeClass('panel-sidebar');
} else {
$('.panel-title').removeClass('fluid');
$('#sub-menu').addClass('panel-sidebar');
}
autoFlashHeight();
echartsReset();
}
});
});