您的位置:首页 > 其它

echarts下工资收入、五险一金、个人所得税走势图表

2017-06-14 13:41 260 查看
燕飞南北知暑热,人走东西只为钱。

echarts下的line实现的北京地区(2016年基准)工资收入、五险一金、个人所得税计算图表。

直接访问:http://gallery.echartsjs.com/preview.html?c=xHJlPbUPRzb



附代码:

(注:可直接在http://echarts.baidu.com/demo.html#area-simple内清空代码区后,粘贴以下代码实现)

//-----------------------------dn:可进行参数设置------------------------------
var bFixedIn = false; // 固定社保基数标志:false不固定,true固定
var bFixedHouse = false; // 固定公积金基数标志:false不固定,true固定

var fFixedInBase = 13768; // 固定的社保基数
var fFixedHouseBase = 12000; // 固定的公积金基数

var fExemptionPoint = 3500; // 免税起点

// 五险一金个人比例
var fRateInEnd = 0.08; // 养老 8%
var fRateInMed = 0.02; // 医疗 2%
var fRateInUnEmp = 0.002; // 失业 0.2%
var fRateInInjuery = 0; // 工伤
var fRateInMate = 0; // 生育
var fRateInHouse = 0.12; // 公积金

// 北京2016年上、下限

var fInEndMin = 2834; // 养老保险下限
var fInEndMax = 21258; // 养老保险上限

var fInMedMin = 4252; // 医疗保险下限
var fInMedMax = fInEndMax; // 医疗保险上限

var fInHouseMin = 412.8 / 2; // 公积金下限
var fInHouseMax = 5101.92 / 2; // 公积金上限

//-----------------------------up:可进行参数设置------------------------------

// 计算人个交五险一金
function funcCalc5In(fIncome) {
var fSum = 0;

// 养老
var fInEndTmp = fIncome < fInEndMin ? fInEndMin
: (fIncome > fInEndMax ? fInEndMax : fIncome);
fSum += fInEndTmp * fRateInEnd;

// 医疗
var fInMedTmp = fIncome < fInMedMin ? fInMedMin
: (fIncome > fInMedMax ? fInMedMax : fIncome);
fSum += fInMedTmp * fRateInMed;

// 失业
var fInUnEmpTmp = fIncome < fInEndMin ? fInEndMin
: (fIncome > fInEndMax ? fInEndMax : fIncome);
fSum += fInUnEmpTmp * fRateInUnEmp;

// 工伤
var fInInjueryTmp = fIncome < fInMedMin ? fInMedMin
: (fIncome > fInMedMax ? fInMedMax : fIncome);
fSum += fInInjueryTmp * fRateInInjuery;

// 生育
var fInMateTmp = fIncome < fInMedMin ? fInMedMin
: (fIncome > fInMedMax ? fInMedMax : fIncome);
fSum += fInMateTmp * fRateInMate;

return fSum;
}

// 计算公积金
function funcCalcHouse(fIncome) {
// 公积金
var fInHouseTmp = fIncome * fRateInHouse;
fInHouseTmp = fInHouseTmp < fInHouseMin ? fInHouseMin
: (fInHouseTmp > fInHouseMax ? fInHouseMax : fInHouseTmp);

return fInHouseTmp;
}

// 计算税
function funcCalcTax(fIncome, f5In, fExemptionPoint) {
var iRet = 0;
var strRank = '';

var fVal = fIncome - f5In - fExemptionPoint;
if (fVal <= 0) {
iRet = 0;
strRank = '不用交税';
}
else if (fVal <= 1500){
iRet = fVal * 0.03;
strRank = '(0, 1500]';
}
else if (fVal <= 4500) {
iRet = fVal * 0.1 - 105;
strRank = '(1500, 4500]';
}
else if (fVal <= 9000) {
iRet = fVal * 0.2 - 555;
strRank = '(4500, 9000]';
}
else if (fVal <= 35000) {
iRet = fVal * 0.25 - 1005;
strRank = '(9000, 35000]';
}
else if (fVal <= 55000) {
iRet = fVal * 0.3 - 2755;
strRank = '(35000, 55000]';
}
else if (fVal <= 80000) {
iRet = fVal * 0.35 - 5505;
strRank = '(55000, 80000]';
}
else {
iRet = fVal * 0.45 - 13505;
strRank = '土豪';
}
var objTmp = {};
objTmp.val = iRet;
objTmp.rank = strRank;
return objTmp;
}

var aryIncomeX = [];
var aryIncomeYTax = [];
var aryIncomeY = [];
var aryIncomeYRankDesc = [];
var aryIncomeY5In = [];
var aryIncomeYHouse = [];
var fIncomeLeft = 3500;
var fIncomeRight = 90000;
for (var i = fIncomeLeft; i <= fIncomeRight; i += 100) {
aryIncomeX.push(i);
var f5In = funcCalc5In(bFixedIn ? fFixedInBase : i); //.toFixed(2);
var fHousePerson = funcCalcHouse(bFixedHouse ? fFixedHouseBase : i); //.toFixed(2);
var f5In_House = f5In + fHousePerson;
var objVal_Rank = funcCalcTax(i, f5In_House, fExemptionPoint);
var fTax = Math.ceil(objVal_Rank.val);

aryIncomeYTax.push(fTax);
aryIncomeY.push(i - fTax - f5In_House);
aryIncomeY5In.push(f5In);
aryIncomeYHouse.push(fHousePerson);
aryIncomeYRankDesc.push(objVal_Rank.rank);
}

option = {
title: {
text: 'tax in beijing : exemption pt : ' + fExemptionPoint
},
tooltip: {
trigger: 'axis',
formatter: function(params) {
var iIndex = params[0].dataIndex;
var aryHtml = [];

// 收入
aryHtml.push('收入:' + aryIncomeX[iIndex] + '<br />');

// 五险
aryHtml.push('五险:' + aryIncomeY5In[iIndex].toFixed(2) + '<br />');

// 公积金
aryHtml.push('公积金:' + aryIncomeYHouse[iIndex].toFixed(2) + '<br />');

// 五险+公积金
aryHtml.push('五险+公积金:' + (aryIncomeY5In[iIndex] + aryIncomeYHouse[iIndex]).toFixed(2) + '<br />');

// 个税
aryHtml.push('个税:' + aryIncomeYTax[iIndex].toFixed(2) + '<br />');

// 个税等级
aryHtml.push('个税等级:' + aryIncomeYRankDesc[iIndex] + '<br />');

// 五险+公积金+个税
aryHtml.push('五险+公积金+个税:' + (aryIncomeY5In[iIndex] + aryIncomeYHouse[iIndex] + aryIncomeYTax[iIndex]).toFixed(2) + '<br />');

// 税后收入
aryHtml.push('税后收入:' + aryIncomeY[iIndex].toFixed(2) + '<br />');

// +公积金税后收入
aryHtml.push('+公积金税后收入:' + (aryIncomeY[iIndex] + aryIncomeYHouse[iIndex] * 2).toFixed(2) + '<br />');

// 年收入
aryHtml.push('年收入:' + (aryIncomeX[iIndex] * 12).toFixed(2) + '<br />');

// 税后年收入
aryHtml.push('税后年收入:' + (aryIncomeY[iIndex] * 12).toFixed(2) + '<br />');

// +公积金税后年收入
aryHtml.push('+公积金税后年收入:' + ((aryIncomeY[iIndex] + aryIncomeYHouse[iIndex] * 2) * 12).toFixed(2) + '<br />');

// 年缴税
aryHtml.push('年缴税:' + (aryIncomeYTax[iIndex] * 12).toFixed(2) + '<br />');

return aryHtml.join('');
}
},
xAxis: {
data: aryIncomeX
},
yAxis: [
{
type: 'value',
scale: true,
name: 'tax',
//max: 20000,
min: 0
},
{
type: 'value',
scale: true,
name: 'income',
max: fIncomeRight,
min: 0,
splitLine: {
show: false
}
}
],
legend: {
right: 20,
data: ['tax', 'income']
},
dataZoom: [{
start: 0,
end: 100
}, {
type: 'inside'
}],

series: [{
name: 'tax',
type: 'line',
yAxisIndex: 0,
data: aryIncomeYTax
}
,
{
name: 'income',
type: 'line',
yAxisIndex: 1,
data: aryIncomeY
}
]
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: