Files
JiaZhiQianYan/pagesStock/components/cwsj-view/cwsj-view.vue

3114 lines
91 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<!-- 资产负债表 -->
<view style="color: #2B2B2B; font-weight: 500; font-size: 24rpx;">
<view class="flex" style="padding: 20rpx;">
<image src="/pagesStock/static/icon/cwfx-1.png" mode="widthFix"
style="width: 40rpx; height: 40rpx;"></image>
<view class="flex1" style="margin: 0 10rpx; font-size: 28rpx;">资产负债表</view>
<image src="/static/icon/home/conceptCenter/next.png" mode="widthFix"
style="width: 13rpx; height: 22rpx;"></image>
</view>
<view class="indicatorC" style="display: grid; gap: 20rpx; grid-template-columns: repeat(3, 1fr); margin: 0 20rpx;">
<view :class="'item flexCenter '+(balanceIndicatorIndex==index?'select':'')"
v-for="(item,index) in ['货币资金', '所有者权益', '关键指标']" :key="index" @click="clickBalanceIndicatorItem(index)">
{{item}}
</view>
</view>
<view class="detailOptionC flex" style="padding: 20rpx;">
<view class="flex1" style="font-size: 28rpx;">查看详细数据</view>
<view :class="'option '+(balanceSingleQuarterAllIndex==0?'select':'')" @click="clickBalanceSingleQuarterOrAll(0)">
单季度</view>
<view :class="'flex option '+(balanceSingleQuarterAllIndex==1?'select':'')" @click="clickBalanceSingleQuarterOrAll(1)">
<image v-if="balanceSingleQuarterAllIndex==1" style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon-ed.png"
mode="widthFix"></image>
<image v-else style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon.png"
mode="widthFix"></image>
<view style="margin: 0 10rpx;">全部</view>
<image v-if="balanceSingleQuarterAllIndex==1" style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down-ed.png"
mode="widthFix"></image>
<image v-else style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down.png"
mode="widthFix"></image>
</view>
</view>
<view style="height: 500rpx;">
<l-echart ref="chartRef1"></l-echart>
</view>
<view v-if="financialBalanceList.length>0" style="background-color: #FAFAFC; border-radius: 10rpx; margin: 0 20rpx; padding: 20rpx 0;">
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">资产总计</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].assets.total)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">负债合计</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].liabilities.total)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">所有者权益</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].equity.total)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">货币资金</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].assets.current_assets.cash)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">资本公积金</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].equity.capital_reserve)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">盈余公积金</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].equity.surplus_reserve)}}</view>
</view>
<view class="flex between" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">未分配利润</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(financialBalanceList[0].equity.undistributed_profit)}}</view>
</view>
</view>
</view>
<!-- 现金流量表 -->
<view style="color: #2B2B2B; font-weight: 500; font-size: 24rpx;">
<view class="flex" style="padding: 20rpx;">
<image src="/pagesStock/static/icon/cwfx-1.png" mode="widthFix"
style="width: 40rpx; height: 40rpx;"></image>
<view class="flex1" style="margin: 0 10rpx; font-size: 28rpx;">现金流量表</view>
<image src="/static/icon/home/conceptCenter/next.png" mode="widthFix"
style="width: 13rpx; height: 22rpx;"></image>
</view>
<view class="indicatorC" style="display: grid; gap: 20rpx; grid-template-columns: repeat(3, 1fr); margin: 0 20rpx;">
<view :class="'item flexCenter '+(cashFlowIndicatorIndex==index?'select':'')" v-for="(item,index) in ['经营现金流', '筹资现金流', '投资现金流']" :key="index" @click="clickCashFlowIndicatorItem(index)">
{{item}}
</view>
</view>
<view class="detailOptionC flex" style="padding: 20rpx;">
<view class="flex1" style="font-size: 28rpx;">查看详细数据</view>
<view :class="'option '+(cashFlowSingleQuarterAllIndex==0?'select':'')" @click="clickCashFlowSingleQuarterOrAll(0)">
单季度</view>
<view :class="'flex option '+(cashFlowSingleQuarterAllIndex==1?'select':'')" @click="clickCashFlowSingleQuarterOrAll(1)">
<image v-if="cashFlowSingleQuarterAllIndex==1" style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon-ed.png"
mode="widthFix"></image>
<image v-else style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon.png"
mode="widthFix"></image>
<view style="margin: 0 10rpx;">全部</view>
<image v-if="cashFlowSingleQuarterAllIndex==1" style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down-ed.png"
mode="widthFix"></image>
<image v-else style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down.png"
mode="widthFix"></image>
</view>
</view>
<view style="height: 500rpx;">
<l-echart ref="chartRef2"></l-echart>
</view>
<view v-if="cashFlowList.length>0" style="background-color: #FAFAFC; border-radius: 10rpx; margin: 0 20rpx; padding: 20rpx 0;">
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">经营性现金流</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(cashFlowList[0].operating_activities.net_flow)}}</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">经营性现金流增长率</view>
<view style="text-align: right; color: #2A2A2A;">{{caculateOperatingCashFlowGrowthRate()}}%</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">投资性现金流</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(cashFlowList[0].investment_activities.net_flow)}}</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">筹资性现金流</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(cashFlowList[0].financing_activities.net_flow)}}</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">合计现金流</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(cashFlowList[0].cash_changes.net_increase)}}</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">合计现金流增长率</view>
<view style="text-align: right; color: #2A2A2A;">{{caculateTotalCashFlowGrowthRate()}}%</view>
</view>
</view>
</view>
<!-- 利润表 -->
<view style="color: #2B2B2B; font-weight: 500; font-size: 24rpx;">
<view style="display: flex;align-items: center; padding: 20rpx; box-sizing: border-box;">
<image src="/pagesStock/static/icon/cwfx-1.png" mode="widthFix"
style="width: 40rpx; height: 40rpx;"></image>
<view class="flex1" style="margin: 0 10rpx; font-size: 28rpx;">利润表</view>
<image src="/static/icon/home/conceptCenter/next.png" mode="widthFix"
style="width: 13rpx; height: 22rpx;"></image>
</view>
<view class="indicatorC" style="display: grid; gap: 20rpx; grid-template-columns: repeat(3, 1fr); margin: 0 20rpx;">
<view :class="'item flexCenter '+(profitIndicatorIndex==index?'select':'')"
v-for="(item,index) in ['净利润', '营业收入', '期间费用']" :key="index" @click="clickProfitIndicatorItem(index)">
{{item}}
</view>
</view>
<view class="detailOptionC flex" style="padding: 20rpx;">
<view class="flex1" style="font-size: 28rpx;">查看详细数据</view>
<view :class="'option '+(profitSingleQuarterAllIndex==0?'select':'')" @click="clickProfitSingleQuarterOrAll(0)">单季度</view>
<view :class="'flex option '+(profitSingleQuarterAllIndex==1?'select':'')" @click="clickProfitSingleQuarterOrAll(1)">
<image v-if="profitSingleQuarterAllIndex==1" style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon-ed.png"
mode="widthFix"></image>
<image v-else style="width: 23rpx; height: auto;" src="/pagesStock/static/icon/all-icon.png"
mode="widthFix"></image>
<view style="margin: 0 10rpx;">全部</view>
<image v-if="profitSingleQuarterAllIndex==1" style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down-ed.png"
mode="widthFix"></image>
<image v-else style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down.png"
mode="widthFix"></image>
</view>
<!-- <view class="flex" style="padding: 3rpx 10rpx;border: 1rpx solid #D2D2D2;">
<image style="width: 23rpx; height: 23rpx;" src="/pagesStock/static/icon/all-icon.png"
mode="widthFix"></image>
<view style="margin: 0 10rpx; color: #999999; font-size: 22rpx;">汇总</view>
<image style="width: 11rpx; height: 6rpx;" src="/pagesStock/static/icon/all-down.png"
mode="widthFix"></image>
</view> -->
</view>
<view style="height: 500rpx;">
<l-echart ref="chartRef3"></l-echart>
</view>
<view v-if="incomeStatementList.length>0" style="background-color: #FAFAFC; border-radius: 10rpx; margin: 0 20rpx; padding: 20rpx 0;">
<view style="display: flex; align-items: center; justify-content: space-between; font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex" style="flex: 1; color: #999999; margin-right: 20rpx;">净利润</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(incomeStatementList[0].profit.net_profit)}}</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">净利润增长率</view>
<view style="text-align: right; color: #2A2A2A;">{{caculateNetProfitGrowthRate()}}%</view>
</view>
<view class="flex" style="font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view class="flex1" style="color: #999999; margin-right: 20rpx;">营业总收入</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(incomeStatementList[0].revenue.total_operating_revenue)}}</view>
</view>
<view style="display: flex; align-items: center; justify-content: space-between; font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">营业总收入增长率</view>
<view style="text-align: right; color: #2A2A2A;">{{caculateRevenueGrowthRate()}}%</view>
</view>
<view style="display: flex; align-items: center; justify-content: space-between; font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">营业利润</view>
<view style="text-align: right; color: #2A2A2A;">{{getNumStr(incomeStatementList[0].profit.operating_profit)}}</view>
</view>
<view style="display: flex; align-items: center; justify-content: space-between; font-size: 24rpx; font-weight: 500; margin: 20rpx;">
<view style="flex: 1; color: #999999; margin-right: 20rpx;">营业利润增长率</view>
<view style="text-align: right; color: #2A2A2A;">{{caculateRevenueProfitGrowthRate()}}%</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { accAdd, accDiv, accMul, accSub, getNumStr } from '@/utils/util';
const echarts = require('../../../uni_modules/lime-echart/static/echarts.min.js');
export default {
name:"cwsj-view",
data() {
return {
balanceIndicatorIndex:0,
cashFlowIndicatorIndex:0,
profitIndicatorIndex:0,
balanceSingleQuarterAllIndex:0, //资产负债表单季度还是全部
cashFlowSingleQuarterAllIndex:0, //现金流量表单季度还是全部
profitSingleQuarterAllIndex:0, //利润表单季度还是全部
option1:{
legend:{
show:true,
itemWidth:10,
itemHeight:10,
data:['货币资金','同比(右)']
},
grid:{
left:'2%',
right:'2%',
top:'5%',
bottom:'30%'
},
xAxis: [{
type: 'category',
data: [],
axisLabel:{
fontSize:10
}
},
{
type: 'category',
data: [],
axisLine:{
show:false,
},
axisTick:{
show:false
},
axisLabel:{
show:false,
}
}],
yAxis: [{
type: 'value',
name:'(亿)',
position:'left',
alignTicks:true,
axisLine:{
onZero:false
}
},
{
type: 'value',
name:'(%)',
position:'right',
alignTicks:true,
axisLine:{
onZero:false
}
}],
// dataZoom:[{
// type:'slider'
// }],
series: [
{
type: 'bar',
name:'ROE',
data: [],
yAxisIndex:0
},
{
type: 'line',
name:'同比',
data: [],
yAxisIndex:1
}
]
},
option2:{
legend:{
show:true,
data:['经营现金流','同比(右)']
},
tooltip:{
show:true
},
grid:{
left:'2%',
right:'2%',
top:'5%',
bottom:'30%'
},
xAxis: [{
type: 'category',
data: [],
axisLabel:{
fontSize:10,
}
},
{
type: 'category',
data: [],
axisLine:{
show:false,
},
axisTick:{
show:false
},
axisLabel:{
show:false,
}
}],
yAxis: [{
type: 'value',
name:'(亿)',
position:'left',
alignTicks:true,
axisLine:{
onZero:false
}
},
{
type: 'value',
name:'(%)',
position:'right',
alignTicks:true,
axisLine:{
onZero:false
}
}],
// dataZoom:[{
// type:'slider'
// }],
series: [
{
type: 'bar',
name:'经营现金流',
data: [],
yAxisIndex:0
},
{
type: 'line',
name:'同比',
data: [],
yAxisIndex:1
}
]
},
option3:{
legend:{
show:true,
data:['净利润','同比(右)']
},
grid:{
left:'2%',
right:'2%',
top:'5%',
bottom:'30%'
},
xAxis: [{
type: 'category',
data: [],
axisLabel:{
fontSize:10,
}
},
{
type: 'category',
data: [],
axisLine:{
show:false,
},
axisTick:{
show:false
},
axisLabel:{
show:false,
}
}],
yAxis: [{
type: 'value',
name:'(亿)',
position:'left',
alignTicks:true,
axisLine:{
onZero:false
}
},
{
type: 'value',
name:'(%)',
position:'right',
alignTicks:true,
axisLine:{
onZero:false
}
}],
// dataZoom:[{
// type:'slider'
// }],
series: [
{
type: 'bar',
name:'净利润',
data: [],
yAxisIndex:0
},
{
type: 'line',
name:'同比',
data: [],
yAxisIndex:1
}
]
},
getNumStr:getNumStr,
accDiv:accDiv,
accSub:accSub,
accMul:accMul
};
},
props:{
financialBalanceList:Array, //资产负债表
cashFlowList:Array, //现金流量表
incomeStatementList:Array, //利润表
},
watch:{
financialBalanceList(newValue) {
this.getMoneyFundSingleQuarterData()
this.balanceInit()
},
cashFlowList(newValue) {
this.getOperatingCashFlowSingleQuarterData()
this.cashFlowInit()
},
incomeStatementList(newValue) {
this.getNetProfitSingleQuarterData()
this.incomeStatementInit()
}
},
methods:{
async balanceInit() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef1.init(echarts);
// chart.on('click',function (params) {
// console.log(params)
// })
chart.setOption(this.option1)
},
async cashFlowInit() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef2.init(echarts);
// chart.on('click',function (params) {
// console.log(params)
// })
chart.setOption(this.option2)
},
async incomeStatementInit() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef3.init(echarts);
// chart.on('click',function (params) {
// console.log(params)
// })
chart.setOption(this.option3)
},
/**
* 点击切换资产负债表指标
* @param {Object} index
*/
clickBalanceIndicatorItem(index) {
if(this.balanceIndicatorIndex!=index) {
this.balanceIndicatorIndex = index
if(index==0) {
//货币资金
if(this.balanceSingleQuarterAllIndex==0) {
//单季度
this.getMoneyFundSingleQuarterData()
}else {
//全部
this.getMoneyFundAllData()
}
}else if(index==1) {
//所有者权益
if(this.balanceSingleQuarterAllIndex==0) {
//单季度
this.getOwnerEquitySingleQuarterData()
}else {
//全部
this.getOwnerEquityAllData()
}
}else if(index==2) {
//关键指标
}
this.balanceInit()
}
},
/**
* 资产负债表切换单季度还是全部
*/
clickBalanceSingleQuarterOrAll(index) {
if(this.balanceSingleQuarterAllIndex != index) {
this.balanceSingleQuarterAllIndex = index;
if(index==0) {
//单季度
if(this.balanceIndicatorIndex==0) {
//货币资金
this.getMoneyFundSingleQuarterData()
}else if(this.balanceIndicatorIndex==1)
{
//所有者权益
this.getOwnerEquitySingleQuarterData()
}
} else {
//全部
if(this.balanceIndicatorIndex==0) {
//货币资金
this.getMoneyFundAllData()
}else if(this.balanceIndicatorIndex==1)
{
//所有者权益
this.getOwnerEquityAllData()
}
}
this.balanceInit()
}
},
/**
* 获取货币基金单季度数据
*/
getMoneyFundSingleQuarterData() {
let category = []
let currentYear = this.financialBalanceList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.financialBalanceList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.financialBalanceList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = this.financialBalanceList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.assets.current_assets.cash)
{
data1.unshift(accDiv(item.assets.current_assets.cash,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.assets.current_assets.cash)
{
data2.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem.assets.current_assets.cash),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.assets.current_assets.cash)
{
data3.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem.assets.current_assets.cash),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.assets.current_assets.cash)
{
data4.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem.assets.current_assets.cash),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option1.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option1.xAxis[0].data = category
this.option1.xAxis[1].data = category
this.option1.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0,
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取货币基金全部数据
*/
getMoneyFundAllData() {
let showDataList = this.financialBalanceList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.assets.current_assets.cash)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem1.assets.current_assets.cash),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.assets.current_assets.cash,lastItem2.assets.current_assets.cash),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.assets.current_assets.cash,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.assets.current_assets.cash)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem1.assets.current_assets.cash),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.assets.current_assets.cash,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.assets.current_assets.cash)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.assets.current_assets.cash,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.assets.current_assets.cash)
{
data4.unshift(accDiv(accSub(item.assets.current_assets.cash,lastItem1.assets.current_assets.cash),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.assets.current_assets.cash,lastItem2.assets.current_assets.cash),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.assets.current_assets.cash,lastItem3.assets.current_assets.cash),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.assets.current_assets.cash,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option1.legend.data = ['货币基金','同比(右)']
this.option1.xAxis[0].data = category
this.option1.xAxis[1].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.financialBalanceList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.assets.current_assets.cash,lastItem.assets.current_assets.cash),lastItem.assets.current_assets.cash),100).toFixed(2))
}
}
this.option1.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option1.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 获取所有者权益单季度数据
*/
getOwnerEquitySingleQuarterData() {
let category = []
let currentYear = this.financialBalanceList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.financialBalanceList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.financialBalanceList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.equity.total)
{
data1.unshift(accDiv(item.equity.total,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.equity.total)
{
data2.unshift(accDiv(accSub(item.equity.total,lastItem.equity.total),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.equity.total)
{
data3.unshift(accDiv(accSub(item.equity.total,lastItem.equity.total),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.equity.total)
{
data4.unshift(accDiv(accSub(item.equity.total,lastItem.equity.total),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option1.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option1.xAxis[0].data = category
this.option1.xAxis[1].data = category
this.option1.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取所有者权益全部数据
*/
getOwnerEquityAllData() {
let showDataList = this.financialBalanceList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.equity.total)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.equity.total,lastItem1.equity.total),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.equity.total,lastItem2.equity.total),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.equity.total,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.equity.total)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.equity.total,lastItem1.equity.total),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.equity.total,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.equity.total)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.equity.total,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.equity.total)
{
data4.unshift(accDiv(accSub(item.equity.total,lastItem1.equity.total),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.equity.total,lastItem2.equity.total),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.equity.total,lastItem3.equity.total),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.equity.total,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option1.legend.data = ['所有者权益','同比(右)']
this.option1.xAxis[0].data = category
this.option1.xAxis[1].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.financialBalanceList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.equity.total,lastItem.equity.total),lastItem.equity.total),100).toFixed(2))
}
}
this.option1.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option1.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 计算经营性现金流增长率
*/
caculateOperatingCashFlowGrowthRate() {
let flow1 = this.cashFlowList[0].operating_activities.net_flow
let flow2 = this.cashFlowList[4].operating_activities.net_flow
return accMul(accDiv(accSub(flow1,flow2),flow2),100).toFixed(2)
},
/**
* 计算合计现金流增长率
*/
caculateTotalCashFlowGrowthRate() {
let flow1 = this.cashFlowList[0].cash_changes.net_increase
let flow2 = this.cashFlowList[4].cash_changes.net_increase
return accMul(accDiv(accSub(flow1,flow2),flow2),100).toFixed(2)
},
/**
* 点击切换现金流量表指标
* @param {Object} index
*/
clickCashFlowIndicatorItem(index) {
if(this.cashFlowIndicatorIndex!=index) {
this.cashFlowIndicatorIndex = index
if(index==0) {
//经营现金流
if(this.cashFlowSingleQuarterAllIndex==0) {
//单季度
this.getOperatingCashFlowSingleQuarterData()
} else
//全部
this.getOperatingCashFlowAllData()
}else if(index==1) {
//筹资现金流
if(this.cashFlowSingleQuarterAllIndex==0) {
//单季度
this.getFinancingCashFlowSingleQuarterData()
} else
//全部
this.getFinancingCashFlowAllData()
}else if(index==2) {
//投资现金流
if(this.cashFlowSingleQuarterAllIndex==0) {
//单季度
this.getInvestmentCashFlowSingleQuarterData()
} else
//全部
this.getInvestmentCashFlowAllData()
}
this.cashFlowInit()
}
},
/**
* 现金流量表切换单季度还是全部
*/
clickCashFlowSingleQuarterOrAll(index) {
if(this.cashFlowSingleQuarterAllIndex != index) {
this.cashFlowSingleQuarterAllIndex = index
if(index==0) {
//单季度
if(this.cashFlowIndicatorIndex==0) {
//经营现金流
this.getOperatingCashFlowSingleQuarterData()
} else if(this.cashFlowIndicatorIndex==1) {
//筹资现金流
this.getFinancingCashFlowSingleQuarterData()
} else {
//投资现金流
this.getInvestmentCashFlowSingleQuarterData()
}
} else {
//全部
if(this.cashFlowIndicatorIndex==0) {
//经营现金流
this.getOperatingCashFlowAllData()
} else if(this.cashFlowIndicatorIndex==1) {
//筹资现金流
this.getFinancingCashFlowAllData()
} else {
//投资现金流
this.getInvestmentCashFlowAllData()
}
}
this.cashFlowInit()
}
},
/**
* 获取经营现金流单季度数据
*/
getOperatingCashFlowSingleQuarterData() {
let category = []
let currentYear = this.cashFlowList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.cashFlowList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.cashFlowList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.operating_activities.net_flow)
{
data1.unshift(accDiv(item.operating_activities.net_flow,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.operating_activities.net_flow)
{
data2.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem.operating_activities.net_flow),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.operating_activities.net_flow)
{
data3.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem.operating_activities.net_flow),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.operating_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem.operating_activities.net_flow),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option2.xAxis[0].data = category
this.option2.xAxis[1].data = category
this.option2.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取经营现金流全部数据
*/
getOperatingCashFlowAllData() {
let showDataList = this.cashFlowList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.operating_activities.net_flow)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem1.operating_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.operating_activities.net_flow,lastItem2.operating_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.operating_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.operating_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem1.operating_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.operating_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.operating_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.operating_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.operating_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.operating_activities.net_flow,lastItem1.operating_activities.net_flow),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.operating_activities.net_flow,lastItem2.operating_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.operating_activities.net_flow,lastItem3.operating_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.operating_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['经营现金流','同比(右)']
this.option2.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.cashFlowList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.operating_activities.net_flow,lastItem.operating_activities.net_flow),Math.abs(lastItem.operating_activities.net_flow)),100).toFixed(2))
}
}
this.option2.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option2.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 获取筹资现金流单季度数据
*/
getFinancingCashFlowSingleQuarterData() {
let category = []
let currentYear = this.cashFlowList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.financialBalanceList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.cashFlowList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.financing_activities.net_flow)
{
data1.unshift(accDiv(item.financing_activities.net_flow,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.financing_activities.net_flow)
{
data2.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem.financing_activities.net_flow),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.financing_activities.net_flow)
{
data3.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem.financing_activities.net_flow),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.financing_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem.financing_activities.net_flow),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option2.xAxis[0].data = category
this.option2.xAxis[1].data = category
this.option2.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取筹资现金流全部数据
*/
getFinancingCashFlowAllData() {
let showDataList = this.cashFlowList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.financing_activities.net_flow)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem1.financing_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.financing_activities.net_flow,lastItem2.financing_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.financing_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.financing_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem1.financing_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.financing_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.financing_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.financing_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.financing_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.financing_activities.net_flow,lastItem1.financing_activities.net_flow),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.financing_activities.net_flow,lastItem2.financing_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.financing_activities.net_flow,lastItem3.financing_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.financing_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.cashFlowList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.financing_activities.net_flow,lastItem.financing_activities.net_flow), Math.abs(lastItem.financing_activities.net_flow)),100).toFixed(2))
}
}
this.option2.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option2.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 获取投资现金流单季度数据
*/
getInvestmentCashFlowSingleQuarterData() {
let category = []
let currentYear = this.cashFlowList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.cashFlowList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.cashFlowList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.investment_activities.net_flow)
{
data1.unshift(accDiv(item.investment_activities.net_flow,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.investment_activities.net_flow)
{
data2.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem.investment_activities.net_flow),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.investment_activities.net_flow)
{
data3.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem.investment_activities.net_flow),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.investment_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem.investment_activities.net_flow),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option2.xAxis[0].data = category
this.option2.xAxis[1].data = category
this.option2.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取投资现金流全部数据
*/
getInvestmentCashFlowAllData() {
let showDataList = this.cashFlowList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.investment_activities.net_flow)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem1.investment_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.investment_activities.net_flow,lastItem2.investment_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.investment_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.investment_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem1.investment_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.investment_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.investment_activities.net_flow)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.investment_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.investment_activities.net_flow)
{
data4.unshift(accDiv(accSub(item.investment_activities.net_flow,lastItem1.investment_activities.net_flow),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.investment_activities.net_flow,lastItem2.investment_activities.net_flow),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.investment_activities.net_flow,lastItem3.investment_activities.net_flow),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.investment_activities.net_flow,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.cashFlowList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.investment_activities.net_flow,lastItem.investment_activities.net_flow),Math.abs(lastItem.investment_activities.net_flow)),100).toFixed(2))
}
}
this.option2.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option2.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 点击切换利润表指标
* @param {Object} index
*/
clickProfitIndicatorItem(index) {
if(this.profitIndicatorIndex!=index) {
this.profitIndicatorIndex = index
if(index==0) {
//净利润
if(this.profitSingleQuarterAllIndex==0) {
//单季度
this.getNetProfitSingleQuarterData()
} else
//全部
this.getNetProfitAllData()
}else if(index==1) {
//营业收入
if(this.profitSingleQuarterAllIndex==0) {
//单季度
this.getOperatingRevenueSingleQuarterData()
} else
//全部
this.getOperatingRevenueAllData()
}else if(index==2) {
//期间费用
if(this.profitSingleQuarterAllIndex==0) {
//单季度
this.getPeriodExpensesSingleQuarterData()
} else
//全部
this.getPeriodExpensesAllData()
}
this.incomeStatementInit()
}
},
/**
* 利润表切换单季度还是全部
*/
clickProfitSingleQuarterOrAll(index) {
if(this.profitSingleQuarterAllIndex != index) {
this.profitSingleQuarterAllIndex = index;
if(index==0) {
//单季度
if(this.profitIndicatorIndex==0) {
//净利润
this.getNetProfitSingleQuarterData()
}else if(this.profitIndicatorIndex==1)
{
//营业收入
this.getOperatingRevenueSingleQuarterData()
}else
//期间费用
this.getPeriodExpensesSingleQuarterData()
} else {
//全部
if(this.profitIndicatorIndex==0) {
//净利润
this.getNetProfitAllData()
}else if(this.profitIndicatorIndex==1)
{
//营业收入
this.getOperatingRevenueAllData()
}else
//期间费用
this.getPeriodExpensesAllData()
}
this.incomeStatementInit()
}
},
/**
* 获取净利润单季度数据
*/
getNetProfitSingleQuarterData() {
let category = []
let currentYear = this.incomeStatementList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.incomeStatementList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.incomeStatementList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.profit.net_profit)
{
data1.unshift(accDiv(item.profit.net_profit,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.profit.net_profit)
{
data2.unshift(accDiv(accSub(item.profit.net_profit,lastItem.profit.net_profit),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.profit.net_profit)
{
data3.unshift(accDiv(accSub(item.profit.net_profit,lastItem.profit.net_profit),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.profit.net_profit)
{
data4.unshift(accDiv(accSub(item.profit.net_profit,lastItem.profit.net_profit),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option3.xAxis[0].data = category
this.option3.xAxis[1].data = category
this.option3.series = [{
type: 'bar',
name:'第一季度',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取投资现金流全部数据
*/
getNetProfitAllData() {
let showDataList = this.incomeStatementList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.profit.net_profit)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.profit.net_profit,lastItem1.profit.net_profit),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.profit.net_profit,lastItem2.profit.net_profit),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.profit.net_profit,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.profit.net_profit)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.profit.net_profit,lastItem1.profit.net_profit),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.profit.net_profit,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.profit.net_profit)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.profit.net_profit,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.profit.net_profit)
{
data4.unshift(accDiv(accSub(item.profit.net_profit,lastItem1.profit.net_profit),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.profit.net_profit,lastItem2.profit.net_profit),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.profit.net_profit,lastItem3.profit.net_profit),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.profit.net_profit,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option3.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.incomeStatementList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.profit.net_profit,lastItem.profit.net_profit),Math.abs(lastItem.profit.net_profit)),100).toFixed(2))
}
}
this.option3.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option3.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 获取营业收入单季度数据
*/
getOperatingRevenueSingleQuarterData() {
let category = []
let currentYear = this.incomeStatementList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.incomeStatementList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.incomeStatementList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
if(item1+'年一季报'==item.report_type){
if(item.revenue.total_operating_revenue)
{
data1.unshift(accDiv(item.revenue.total_operating_revenue,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.revenue.total_operating_revenue)
{
data2.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem.revenue.total_operating_revenue),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.revenue.total_operating_revenue)
{
data3.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem.revenue.total_operating_revenue),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.revenue.total_operating_revenue)
{
data4.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem.revenue.total_operating_revenue),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option3.xAxis[0].data = category
this.option3.xAxis[1].data = category
this.option3.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取营业收入全部数据
*/
getOperatingRevenueAllData() {
let showDataList = this.incomeStatementList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
if(item.report_type.indexOf('三季报')>-1)
{
if(item.revenue.total_operating_revenue)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem1.revenue.total_operating_revenue),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.revenue.total_operating_revenue,lastItem2.revenue.total_operating_revenue),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.revenue.total_operating_revenue,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(item.revenue.total_operating_revenue)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem1.revenue.total_operating_revenue),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.revenue.total_operating_revenue,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(item.revenue.total_operating_revenue)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.revenue.total_operating_revenue,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(item.revenue.total_operating_revenue)
{
data4.unshift(accDiv(accSub(item.revenue.total_operating_revenue,lastItem1.revenue.total_operating_revenue),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.revenue.total_operating_revenue,lastItem2.revenue.total_operating_revenue),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.revenue.total_operating_revenue,lastItem3.revenue.total_operating_revenue),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.revenue.total_operating_revenue,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option3.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.incomeStatementList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.revenue.total_operating_revenue,lastItem.revenue.total_operating_revenue),Math.abs(lastItem.revenue.total_operating_revenue)),100).toFixed(2))
}
}
this.option3.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option3.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 获取期间费用单季度数据
*/
getPeriodExpensesSingleQuarterData() {
let category = []
let currentYear = this.incomeStatementList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.incomeStatementList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.incomeStatementList.slice(0,showDataCount)
for (var i = 0; i <= years; i++) {
category.unshift(currentYear-i)
}
//第一季度
let data1 = []
//第二季度
let data2 = []
//第三季度
let data3 = []
//第四季度
let data4 = []
for (let item of showDataList) {
for (let item1 of category) {
let index = showDataList.indexOf(item)
let lastItem = showDataList[index+1]
let total1 = accAdd(accAdd(accAdd(item.costs.selling_expenses,item.costs.admin_expenses), item.costs.rd_expenses), item.costs.financial_expenses)
let total2 = 0
if(lastItem)
{
total2 = accAdd(accAdd(accAdd(lastItem.costs.selling_expenses,lastItem.costs.admin_expenses), lastItem.costs.rd_expenses), lastItem.costs.financial_expenses)
}
if(item1+'年一季报'==item.report_type){
if(total1)
{
data1.unshift(accDiv(total1,100000000).toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(total1&&total2)
{
data2.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(total1&&total2)
{
data3.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(total1&&total2)
{
data4.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
}else
data4.unshift(0)
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i]?data2[i]:0)
sum = accAdd(sum,data3[i]?data3[i]:0)
sum = accAdd(sum,data4[i]?data4[i]:0).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option2.legend.data = ['第一季度','第二季度','第三季度','第四季度']
this.option3.xAxis[0].data = category
this.option3.xAxis[1].data = category
this.option3.series = [{
type: 'bar',
name:'第一季度',
barWidth:'15%',
data: data1,
yAxisIndex:0
},
{
type: 'bar',
name:'第二季度',
barWidth:'15%',
data: data2,
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
barWidth:'15%',
data: data3,
yAxisIndex:0
},
{
type: 'bar',
name:'第四季度',
barWidth:'15%',
data: data4,
yAxisIndex:0,
},
{
type: 'bar',
name:'总值',
data: sumData,
barWidth:'70%',
xAxisIndex:1,
yAxisIndex:0,
itemStyle:{
color:'rgba(0,0,0,0.2)',
},
label:{
show:true,
position:'top'
}
}]
},
/**
* 获取期间费用全部数据
*/
getPeriodExpensesAllData() {
let showDataList = this.incomeStatementList.slice(0,8)
let category = []
let data1 = []
let data2 = []
let data3 = []
let data4 = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let type = item.report_type
type = type.replaceAll('三季报','\n三季报')
type = type.replaceAll('年报','\n年报')
type = type.replaceAll('中报','\n中报')
type = type.replaceAll('一季报','\n一季报')
category.unshift(type)
let lastItem1 = showDataList[index+1]
let lastItem2 = showDataList[index+2]
let lastItem3 = showDataList[index+3]
let total1 = accAdd(accAdd(accAdd(item.costs.selling_expenses,item.costs.admin_expenses), item.costs.rd_expenses), item.costs.financial_expenses)
let total2 = accAdd(accAdd(accAdd(lastItem1.costs.selling_expenses,lastItem1.costs.admin_expenses), lastItem1.costs.rd_expenses), lastItem1.costs.financial_expenses)
let total3 = accAdd(accAdd(accAdd(lastItem2.costs.selling_expenses,lastItem2.costs.admin_expenses), lastItem2.costs.rd_expenses), lastItem2.costs.financial_expenses)
let total4 = accAdd(accAdd(accAdd(lastItem3.costs.selling_expenses,lastItem3.costs.admin_expenses), lastItem3.costs.rd_expenses), lastItem3.costs.financial_expenses)
if(item.report_type.indexOf('三季报')>-1)
{
if(total1&&total2&&total3)
{
data4.unshift(0)
data3.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
data2.unshift(accDiv(accSub(total2,total3),100000000).toFixed(2))
data1.unshift(accDiv(total3,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('中报')>-1)
{
if(total1&&total2)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
data1.unshift(accDiv(total2,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('一季报')>-1)
{
if(total1)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(total1,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}else if(item.report_type.indexOf('年报')>-1)
{
if(total1&&total2&&total3&&total4)
{
data4.unshift(accDiv(accSub(total1,total2),100000000).toFixed(2))
data3.unshift(accDiv(accSub(total2,total3),100000000).toFixed(2))
data2.unshift(accDiv(accSub(total3,total4),100000000).toFixed(2))
data1.unshift(accDiv(total4,100000000).toFixed(2))
}else
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(0)
}
}
}
}
let sumData = []
for (var i = 0; i < data1.length; i++) {
let sum = data1[i]
sum = accAdd(sum,data2[i])
sum = accAdd(sum,data3[i])
sum = accAdd(sum,data4[i]).toFixed(2)
if(sum>10000) {
sumData.push((sum/10000).toFixed(2)+'万')
}else
sumData.push(sum)
}
this.option3.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.incomeStatementList[index+4]
let total1 = accAdd(accAdd(accAdd(item.costs.selling_expenses,item.costs.admin_expenses), item.costs.rd_expenses), item.costs.financial_expenses)
let total2 = accAdd(accAdd(accAdd(lastItem.costs.selling_expenses,lastItem.costs.admin_expenses), lastItem.costs.rd_expenses), lastItem.costs.financial_expenses)
ratioList.unshift(accMul(accDiv(accSub(total1,total2),Math.abs(total2)),100).toFixed(2))
}
}
this.option3.tooltip = {
show:true,
confine:true,
formatter(params) {
let index = params.dataIndex
let str = params.name+':'+sumData[index]
if(data1[index]!=0)
{
str += '\n第一季度'+data1[index]
}
if(data2[index]!=0)
{
str += '\n第二季度'+data2[index]
}
if(data3[index]!=0)
{
str += '\n第三季度'+data3[index]
}
if(data4[index]!=0)
{
str += '\n第四季度'+data4[index]
}
str += '\n同比()'+ratioList[index]
return str
}
}
this.option3.series = [{
type: 'bar',
name:'第一季度',
data: data1,
stack:'quarter',
yAxisIndex:0,
label:{
show:true,
position:'top',
formatter(params) {
return sumData[params.dataIndex]
}
}
},
{
type: 'bar',
name:'第二季度',
data: data2,
stack:'quarter',
yAxisIndex:0
},
{
type: 'bar',
name:'第三季度',
data: data3,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'bar',
name:'第四季度',
data: data4,
yAxisIndex:0,
stack:'quarter',
},
{
type: 'line',
name:'同比()',
data: ratioList,
yAxisIndex:1,
}]
},
/**
* 计算净利润增长率
*/
caculateNetProfitGrowthRate() {
let flow1 = this.incomeStatementList[0].profit.net_profit
let flow2 = this.incomeStatementList[4].profit.net_profit
return accMul(accDiv(accSub(flow1,flow2),Math.abs(flow2)),100).toFixed(2)
},
/**
* 计算营业总收入增长率
*/
caculateRevenueGrowthRate() {
let flow1 = this.incomeStatementList[0].revenue.total_operating_revenue
let flow2 = this.incomeStatementList[4].revenue.total_operating_revenue
return accMul(accDiv(accSub(flow1,flow2),Math.abs(flow2)),100).toFixed(2)
},
/**
* 计算营业利润增长率
*/
caculateRevenueProfitGrowthRate() {
let flow1 = this.incomeStatementList[0].profit.operating_profit
let flow2 = this.incomeStatementList[4].profit.operating_profit
return accMul(accDiv(accSub(flow1,flow2),Math.abs(flow2)),100).toFixed(2)
},
}
}
</script>
<style lang="less">
.indicatorC
{
.item
{
padding: 10rpx;
border: 1rpx solid #D2D2D2;
font-size: 20rpx;
color: #999999;
text-align: center;
}
.item.select
{
background-color: #FFFAF1;
color: #BB8520;
border: 1rpx solid #F2C369;
}
}
.detailOptionC
{
.option
{
margin: 0 10rpx;
line-height: 36rpx;
padding: 0 10rpx;
border-radius: 5rpx;
border: 1rpx solid #D2D2D2;
font-size: 22rpx;
color: #999999;
text-align: center;
}
.option.select
{
border: solid 1rpx #F2C369;
color: #F2C369;
}
}
</style>