Files
JiaZhiQianYan/pagesStock/components/cwfx-view/cwfx-view.vue
2026-02-04 17:43:41 +08:00

487 lines
12 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(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="flex" style="padding: 20rpx;">
<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 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="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>
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,
perShareIndicatorList:[{
title:'每股收益(EPS)',
},
{
title:'基本每股收益',
},
{
title:'稀释每股收益',
},
{
title:'扣非每股收益',
},
{
title:'每股净资产',
},
{
title:'每股经营现金流',
},
{
title:'每股资本公积',
},
{
title:'每股未分配利润'
}],
perShareIndicatorIndex:0,
option1:{
legend:{
show:true,
data:['ROE','同比(右)']
},
grid:{
left:'2%',
right:'2%',
top:'5%',
bottom:'30%'
},
xAxis: {
type: 'category',
data: [],
axisLabel:{
fontSize:10,
rotate:45
}
},
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
}
]
},
};
},
props: {
dataList:Array,
},
watch:{
dataList(newValue) {
let category = []
let data1 = []
let data2 = []
for (let item of newValue) {
var type = item.report_type
type = type.replace('年三季报','Q3')
type = type.replace('年一季报','Q1')
type = type.replace('年中报','中报')
type = type.replace('年年报','年报')
category.push(type)
if(item.profitability.roe)
{
data1.push(item.profitability.roe.toFixed(2))
}else
data1.push(0)
if(item.per_share_metrics.eps)
{
data2.push(item.per_share_metrics.eps.toFixed(2))
}else
data2.push(0)
}
this.option1.xAxis.data = category
this.option1.series[0].data = data1
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) {
//净资产收益率
for (let item of this.dataList) {
if(item.profitability.roe)
{
data.push(item.profitability.roe.toFixed(2))
}else
data.push(0)
}
}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_deducted)
{
data.push(item.profitability.roe_deducted.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()
}
},
/**
* 切换每股指标
* @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()
}
}
}
}
</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;
}
}
</style>