Files
JiaZhiQianYan/pagesStock/components/cwfx-view/cwfx-view.vue
2026-02-06 18:01:05 +08:00

1153 lines
30 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(4, 1fr); margin: 0 20rpx;">
<view :class="'item flex '+(profitabilityIndicatorIndex==index?'select':'')"
style="justify-content: center; text-align: center;padding: 3rpx 5rpx;"
v-for="(item,index) in profitabilityIndicatorList" :key="index" @click="clickProfitabilityIndicatorItem(index)">
{{item.title}}
</view>
</view>
<view class="detailOptionC flex" style="padding: 20rpx;">
<view class="flex1" style="font-size: 28rpx;">查看详细数据</view>
<view :class="'option '+(profitabilitySingleQuarterAllIndex==0?'select':'')" @click="clickProfitabilitySingleQuarterOrAll(0)">单季度</view>
<view :class="'flex option '+(profitabilitySingleQuarterAllIndex==1?'select':'')" @click="clickProfitabilitySingleQuarterOrAll(1)">
<image v-if="profitabilitySingleQuarterAllIndex==1" class="icon" src="/pagesStock/static/icon/all-icon-ed.png"
mode="widthFix"></image>
<image v-else class="icon" src="/pagesStock/static/icon/all-icon.png"
mode="widthFix"></image>
<view style="margin: 0 10rpx; color: #999999; font-size: 22rpx;">全部</view>
<image v-if="profitabilitySingleQuarterAllIndex==1" class="arrow" src="/pagesStock/static/icon/all-down-ed.png" mode="widthFix"></image>
<image v-else class="arrow" src="/pagesStock/static/icon/all-down.png" mode="widthFix"></image>
</view>
</view>
<view style="height: 500rpx;">
<l-echart ref="chartRef1"></l-echart>
</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-2.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(4, 1fr); margin: 0 20rpx;">
<view :class="'item flexCenter '+(perShareIndicatorIndex==index?'select':'')"
v-for="(item,index) in perShareIndicatorList" :key="index" @click="clickPerShareIndicatorItem(index)">
{{item.title}}
</view>
</view>
<view style="display: flex;align-items: center; padding: 20rpx; box-sizing: border-box;">
<view class="flex1" style="font-size: 28rpx;">查看详细数据</view>
<view
style="color: #F2C369; font-size: 22rpx; padding: 2rpx 10rpx; border-radius: 5rpx; border: 1rpx solid #F2C369; text-align: center; margin: 0 10rpx;">
单季度</view>
<view
style="display: flex; align-items: center; padding: 3rpx 10rpx; box-sizing: border-box; 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="chartRef2"></l-echart>
</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:"cwfx-view",
data() {
return {
profitabilityIndicatorList:[{
title:'净资产收益率(ROE)%',
},
{
title:'净资产收益率(扣非)%',
},
{
title:'净资产收益率(加权)%',
},
{
title:'总资产报酬率(ROA)%',
},
{
title:'毛利率%',
},
{
title:'净利率%',
},
{
title:'营业利润率%',
},
{
title:'成本费用利润率%'
}],
profitabilityIndicatorIndex:0,
profitabilitySingleQuarterAllIndex:0,
perShareIndicatorList:[{
title:'每股收益(EPS)',
},
{
title:'基本每股收益',
},
{
title:'稀释每股收益',
},
{
title:'扣非每股收益',
},
{
title:'每股净资产',
},
{
title:'每股经营现金流',
},
{
title:'每股资本公积',
},
{
title:'每股未分配利润'
}],
perShareIndicatorIndex:0,
perShareSingleQuarterAllIndex:0,
option1:{
legend:{
show:true,
data:['ROE','同比(右)']
},
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:['ROE','同比(右)']
},
grid:{
left:'2%',
right:'2%',
top:'5%',
bottom:'30%'
},
xAxis: {
type: 'category',
data: [],
axisLabel:{
rotate:45,
fontSize:10
}
},
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
}
]
},
accDiv:accDiv,
accSub:accSub,
accMul:accMul
};
},
props: {
dataList:Array,
},
watch:{
dataList(newValue) {
if(this.profitabilitySingleQuarterAllIndex==0) {
//单季度
this.getROESingleQuarterData()
} else
{
//全部
this.getROEAllData()
}
this.profitabilityInit()
// this.option2.xAxis.data = category
// this.option2.series[0].data = data2
// this.perShareInit()
}
},
methods:{
async profitabilityInit() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef1.init(echarts);
// chart.on('click',function (params) {
// console.log(params)
// })
chart.setOption(this.option1)
},
async perShareInit() {
// chart 图表实例不能存在data里
const chart = await this.$refs.chartRef2.init(echarts);
// chart.on('click',function (params) {
// console.log(params)
// })
chart.setOption(this.option2)
},
/**
* 切换盈利能力指标
* @param {Object} item
*/
clickProfitabilityIndicatorItem(index) {
if(this.profitabilityIndicatorIndex!=index) {
this.profitabilityIndicatorIndex = index
let data = []
if(index==0) {
//净资产收益率
if(this.profitabilitySingleQuarterAllIndex==0) {
//单季度
this.getROESingleQuarterData()
} else
{
//全部
this.getROEAllData()
}
}else if(index==1) {
//净资产收益率(扣非)
for (let item of this.dataList) {
if(item.profitability.roe_deducted)
{
data.push(item.profitability.roe_deducted.toFixed(2))
}else
data.push(0)
}
}else if(index==2) {
//净资产收益率(加权)
for (let item of this.dataList) {
if(item.profitability.roe_weighted)
{
data.push(item.profitability.roe_weighted.toFixed(2))
}else
data.push(0)
}
}else if(index==3) {
//总资产报酬率
for (let item of this.dataList) {
if(item.profitability.roa)
{
data.push(item.profitability.roa.toFixed(2))
}else
data.push(0)
}
}else if(index==4) {
//毛利率
for (let item of this.dataList) {
if(item.profitability.gross_margin)
{
data.push(item.profitability.gross_margin.toFixed(2))
}else
data.push(0)
}
}else if(index==5) {
//净利率
for (let item of this.dataList) {
if(item.profitability.net_profit_margin)
{
data.push(item.profitability.net_profit_margin.toFixed(2))
}else
data.push(0)
}
}else if(index==6) {
//营业利润率
for (let item of this.dataList) {
if(item.profitability.operating_profit_margin)
{
data.push(item.profitability.operating_profit_margin.toFixed(2))
}else
data.push(0)
}
}else if(index==7) {
//成本费用利润率
for (let item of this.dataList) {
if(item.profitability.cost_profit_ratio)
{
data.push(item.profitability.cost_profit_ratio.toFixed(2))
}else
data.push(0)
}
}
this.option1.series[0].data = data
this.profitabilityInit()
}
},
/**
* 盈利能力切换单季度还是全部
*/
clickProfitabilitySingleQuarterOrAll(index) {
if(this.profitabilitySingleQuarterAllIndex != index) {
this.profitabilitySingleQuarterAllIndex = index;
if(index==0) {
//单季度
if(this.profitabilityIndicatorIndex==0) {
//净资产收益率
this.getROESingleQuarterData()
}else if(this.profitabilityIndicatorIndex==1)
{
//净资产收益率(扣非)
this.getOwnerEquitySingleQuarterData()
}else if(this.profitabilityIndicatorIndex==2)
{
//净资产收益率(加权)
this.getOwnerEquitySingleQuarterData()
}
} else {
//全部
if(this.profitabilityIndicatorIndex==0) {
//净资产收益率
this.getROEAllData()
}else if(this.profitabilityIndicatorIndex==1)
{
//所有者权益
this.getOwnerEquityAllData()
}
}
this.profitabilityInit()
}
},
/**
* 获取净资产收益率单季度数据
*/
getROESingleQuarterData() {
let category = []
let currentYear = this.dataList[0].period.split('-')[0]
var currentYearCount = 0
for (let item of this.dataList) {
let year = item.period.split('-')[0]
if(year==currentYear) {
currentYearCount ++
}
}
let years = (16 - currentYearCount)/4
let showDataCount = years*4+currentYearCount
let showDataList = this.dataList.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.profitability.roe)
{
data1.unshift(item.profitability.roe.toFixed(2))
}else
data1.unshift(0)
}
if(item1+'年中报'==item.report_type){
if(item.profitability.roe)
{
data2.unshift(accSub(item.profitability.roe,lastItem.profitability.roe))
}else
data2.unshift(0)
}
if(item1+'年三季报'==item.report_type){
if(item.profitability.roe)
{
data3.unshift(accSub(item.profitability.roe,lastItem.profitability.roe))
}else
data3.unshift(0)
}
if(item1+'年年报'==item.report_type){
if(item.profitability.roe)
{
data4.unshift(accSub(item.profitability.roe,lastItem.profitability.roe))
}else
data4.unshift(0)
}
}
}
console.log(data1,data2,data3,data4)
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'
}
}]
},
/**
* 获取净资产收益率全部数据
*/
getROEAllData() {
let showDataList = this.dataList.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.profitability.roe)
{
data4.unshift(0)
data3.unshift(accSub(item.profitability.roe,lastItem1.profitability.roe).toFixed(2))
data2.unshift(accDiv(accSub(lastItem1.profitability.roe,lastItem2.profitability.roe),100000000).toFixed(2))
data1.unshift(accDiv(lastItem2.profitability.roe,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.profitability.roe)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(accDiv(accSub(item.profitability.roe,lastItem1.profitability.roe),100000000).toFixed(2))
data1.unshift(accDiv(lastItem1.profitability.roe,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.profitability.roe)
{
data4.unshift(0)
data3.unshift(0)
data2.unshift(0)
data1.unshift(accDiv(item.profitability.roe,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.profitability.roe)
{
data4.unshift(accDiv(accSub(item.profitability.roe,lastItem1.profitability.roe),100000000).toFixed(2))
data3.unshift(accDiv(accSub(lastItem1.profitability.roe,lastItem2.profitability.roe),100000000).toFixed(2))
data2.unshift(accDiv(accSub(lastItem2.profitability.roe,lastItem3.profitability.roe),100000000).toFixed(2))
data1.unshift(accDiv(lastItem3.profitability.roe,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.xAxis[0].data = category
let ratioList = []
for (let item of showDataList) {
let index = showDataList.indexOf(item)
if(index<showDataList.length-3)
{
let lastItem = this.dataList[index+4]
ratioList.unshift(accMul(accDiv(accSub(item.profitability.roe,lastItem.profitability.roe),Math.abs(lastItem.profitability.roe)),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,
}]
},
/**
* 切换每股指标
* @param {Object} item
*/
clickPerShareIndicatorItem(index) {
if(this.perShareIndicatorIndex!=index) {
this.perShareIndicatorIndex = index
let data = []
if(index==0) {
//每股收益(EPS)
for (let item of this.dataList) {
if(item.per_share_metrics.eps)
{
data.push(item.per_share_metrics.eps.toFixed(2))
}else
data.push(0)
}
}else if(index==1) {
//基本每股收益
for (let item of this.dataList) {
if(item.per_share_metrics.basic_eps)
{
data.push(item.per_share_metrics.basic_eps.toFixed(2))
}else
data.push(0)
}
}else if(index==2) {
//稀释每股收益
for (let item of this.dataList) {
if(item.per_share_metrics.diluted_eps)
{
data.push(item.per_share_metrics.diluted_eps.toFixed(2))
}else
data.push(0)
}
}else if(index==3) {
//扣非每股收益
for (let item of this.dataList) {
if(item.per_share_metrics.deducted_eps)
{
data.push(item.per_share_metrics.deducted_eps.toFixed(2))
}else
data.push(0)
}
}else if(index==4) {
//每股净资产
for (let item of this.dataList) {
if(item.per_share_metrics.bvps)
{
data.push(item.per_share_metrics.bvps.toFixed(2))
}else
data.push(0)
}
}else if(index==5) {
//每股经营现金流
for (let item of this.dataList) {
if(item.per_share_metrics.operating_cash_flow_ps)
{
data.push(item.per_share_metrics.operating_cash_flow_ps.toFixed(2))
}else
data.push(0)
}
}else if(index==6) {
//每股资本公积
for (let item of this.dataList) {
if(item.per_share_metrics.capital_reserve_ps)
{
data.push(item.per_share_metrics.capital_reserve_ps.toFixed(2))
}else
data.push(0)
}
}else if(index==7) {
//每股未分配利润
for (let item of this.dataList) {
if(item.per_share_metrics.undistributed_profit_ps)
{
data.push(item.per_share_metrics.undistributed_profit_ps.toFixed(2))
}else
data.push(0)
}
}
this.option2.series[0].data = data
this.perShareInit()
}
},
/**
* 获取期间费用单季度数据
*/
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,
}]
},
}
}
</script>
<style lang="less">
.indicatorC
{
.item
{
background-color: #FFFFFF;
padding: 3rpx 5rpx;
border: 1rpx solid #D2D2D2;
font-size: 20rpx;
color: #999;
text-align: center;
}
.item.select
{
background-color: #FFFAF1;
border: 1rpx solid #F2C369;
color: #BB8520;
}
}
.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>