3124 lines
91 KiB
Vue
3124 lines
91 KiB
Vue
<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.option3.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;
|
||
.icon
|
||
{
|
||
width: 23rpx;
|
||
height: auto;
|
||
}
|
||
.arrow
|
||
{
|
||
width: 11rpx;
|
||
height: auto;
|
||
}
|
||
}
|
||
.option.select
|
||
{
|
||
border: solid 1rpx #F2C369;
|
||
color: #F2C369;
|
||
}
|
||
}
|
||
</style> |