1.31 财务分析,财务数据模块完善,产业链桑基图展示

This commit is contained in:
尚政杰
2026-01-31 17:19:16 +08:00
parent 1c13386dfc
commit 0a2dab4936
527 changed files with 3390 additions and 604 deletions

View File

@@ -48,57 +48,62 @@
</view>
</view>
</view>
<view class="section">关键指标</view>
<view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1">
<view class="title">市盈率 (PE)</view>
<view class="content flex1 important marginR">{{quoteDetailsInfo.pe?quoteDetailsInfo.pe:'-'}}</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">流通股本</view>
<view v-if="quoteDetailsInfo.float_shares" class="content flex1">{{quoteDetailsInfo.float_shares}}亿股</view>
<view v-else class="content flex1">-</view>
</view>
</view>
<view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1">
<view class="title">流通市值</view>
<view class="content flex1 important marginR">{{quoteDetailsInfo.market_cap}}</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">换手率</view>
<view class="content flex1">{{quoteDetailsInfo.turnover_rate}}%</view>
</view>
</view>
<view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1">
<view class="title">发行总股本</view>
<view v-if="quoteDetailsInfo.total_shares" class="content flex1 marginR">{{quoteDetailsInfo.total_shares}}亿股</view>
<view v-else class="content flex1 marginR">-</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">52周波动</view>
<view class="content flex1">{{quoteDetailsInfo.week52_low}}-{{quoteDetailsInfo.week52_high}}</view>
</view>
</view>
<view class="section">主力动态</view>
<view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1">
<view class="title">主力净流入</view>
<view :class="'content flex1 marginR '+(getRateUpOrDown(quoteDetailsInfo.net_inflow)?'down':'up')">{{getRateUpOrDown(quoteDetailsInfo.net_inflow)?'':'+'}}{{getNumStr(quoteDetailsInfo.net_inflow)}}</view>
</view>
<view class="rightInfoC flex flex1">
<!-- <view class="title">机构持仓</view>
<view class="content flex1 important">23.83%</view> -->
</view>
</view>
<view class="progressC relative">
<view class="buy absolute"></view>
</view>
<view class="buySaleC flex">
<view class="buy">买入 42%</view>
<view class="sale flex1">卖出 58%</view>
</view>
<view class="section">关键指标</view>
<block v-if="quoteDetailsInfo">
<view class="infoC flex">
<view class="flex flex1">
<view class="title">市盈率 (PE)</view>
<view class="content flex1 important marginR">{{quoteDetailsInfo.pe?quoteDetailsInfo.pe:'-'}}</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">流通股本</view>
<view v-if="quoteDetailsInfo.float_shares" class="content flex1">{{quoteDetailsInfo.float_shares}}亿股</view>
<view v-else class="content flex1">-</view>
</view>
</view>
<view class="infoC flex">
<view class="flex flex1">
<view class="title">流通市值</view>
<view class="content flex1 important marginR">{{quoteDetailsInfo.market_cap}}</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">换手率</view>
<view class="content flex1">{{quoteDetailsInfo.turnover_rate}}%</view>
</view>
</view>
<view class="infoC flex">
<view class="flex flex1">
<view class="title">发行总股本</view>
<view v-if="quoteDetailsInfo.total_shares" class="content flex1 marginR">{{quoteDetailsInfo.total_shares}}亿股</view>
<view v-else class="content flex1 marginR">-</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">52周波动</view>
<view class="content flex1">{{quoteDetailsInfo.week52_low}}-{{quoteDetailsInfo.week52_high}}</view>
</view>
</view>
</block>
<view class="section">主力动态</view>
<block v-if="quoteDetailsInfo">
<view class="infoC flex">
<view class="flex flex1">
<view class="title">主力净流入</view>
<view :class="'content flex1 marginR '+(getRateUpOrDown(quoteDetailsInfo.net_inflow)?'down':'up')">{{getRateUpOrDown(quoteDetailsInfo.net_inflow)?'':'+'}}{{getNumStr(quoteDetailsInfo.net_inflow)}}</view>
</view>
<view class="rightInfoC flex flex1">
<view class="title">机构持仓</view>
<view class="content flex1 important">暂无</view>
</view>
</view>
<view class="progressC relative">
<view class="buy absolute" :style="'width:'+(getBuyPercent())+'%'"></view>
</view>
<view class="buySaleC flex">
<view class="buy">买入 {{getBuyPercent()}}%</view>
<view class="sale flex1">卖出 {{getSellPercent()}}%</view>
</view>
</block>
<view class="infoC flex">
<view class="flex flex1">
<image class="icon" src="/pagesStock/static/icon/establishedTime.png" mode="widthFix"></image>
@@ -117,10 +122,10 @@
<view class="title">所在地</view>
<view class="content flex1 marginR">{{stockBasicInfo.province}} {{stockBasicInfo.city}}</view>
</view>
<view class="rightInfoC flex flex1">
<image class="icon" src="/pagesStock/static/icon/visitWebsite.png" mode="widthFix"></image>
<view class="title important">访问</view>
<view class="flex1"></view>
<view class="rightInfoC flex flex1" @click="clickOfficialWebsite()">
<!-- <image class="icon" src="/pagesStock/static/icon/visitWebsite.png" mode="widthFix"></image>
<view class="title important">访问</view>
<view class="flex1"></view> -->
</view>
</view>
<view class="companyInfo">
@@ -172,7 +177,7 @@
<ywjg-view :businessStructureList="businessStructureList" :businessSegmentList="businessSegmentList"></ywjg-view>
</template>
<template v-if="selectInDepthAnalysis==2">
<cyl-view :valueChainAnalysisInfo="valueChainAnalysisInfo" :totalNodes="totalNodes" :upstreamList="upstreamList" :coreEnterpriseList="coreEnterpriseList" :downstreamList="downstreamList" @detail="clickValueChainDetail"></cyl-view>
<cyl-view :valueChainAnalysisInfo="valueChainAnalysisInfo" :totalNodes="totalNodes" :upstreamList="upstreamList" :coreEnterpriseList="coreEnterpriseList" :downstreamList="downstreamList" :valueChainFlowsList="valueChainFlowsList" @detail="clickValueChainDetail"></cyl-view>
</template>
<template v-if="selectInDepthAnalysis==3">
<fzlc-view :keyFactorsInfo="keyFactorsInfo" :keyFactorsList="keyFactorsList" :timelineInfo="timelineInfo" :timelineList="timelineList" @detail="clickDevelopmentTimelineDetail"></fzlc-view>
@@ -436,7 +441,7 @@
<script>
import { inject } from 'vue'
import { actualControl, branchesList, cashflowSheet, companyAnnouncementsList, comprehensiveAnalysis, eventList, financialBalanceSheet, financialComparison, financialMainBusiness, financialMetrics, financialStockInfo, incomeStatementSheet, industryRankList, keyFactorsTimeline, managementTeam, ownershipConcentration, quoteDetailsInfo, searchStockInfo, stockBasicInfo, topCirculatingShareholdersList, topShareholdersList, valueChainAnalysis, valueChainRelatedCompany } from '@/request/api'
import { getLastNameStr, getLocalDate, getNumStr, getRateUpOrDown, getAgeByBirthYear } from '@/utils/util'
import { getLastNameStr, getLocalDate, getNumStr, getRateUpOrDown, getAgeByBirthYear, accAdd, accSub,accDiv } from '@/utils/util'
export default {
data() {
@@ -570,6 +575,7 @@
downstreamList:[], //下游客户
selectValueChainInfo:null, //点击查看的产业链信息
relatedCompanyList:[], //产业链相关公司
valueChainFlowsList:[], //流向图数据
keyFactorsInfo:null, //关键因素统计信息
keyFactorsList:[], //关键因素
timelineInfo:null, //发展时间线统计信息
@@ -651,12 +657,40 @@
this.getStockBasicInfoData()
this.getQuoteDetailsData()
},
/**
* 获取买入百分比
*/
getBuyPercent() {
let ratio = this.quoteDetailsInfo.net_active_buy_ratio
return Math.round(accAdd(50,accDiv(ratio,2)))
},
/**
* 获取卖出百分比
*/
getSellPercent() {
let ratio = this.quoteDetailsInfo.net_active_buy_ratio
return Math.round(accSub(50,accDiv(ratio,2)))
},
/**
* 点击查看官网
*/
clickOfficialWebsite()
{
// let code = this.stockCode
// if (this.selectSearchStockInfo) {
// code = this.selectSearchStockInfo.stock_code
// }
// uni.navigateTo({
// url:'/pagesStock/stockCenterDetails/webView/webView?url=https://api.valuefrontier.cn/api/stock/'+code+'/basic-info'
// })
},
/**
* 点击展开收起公司简介
*/
clickExpandOrRetractCompanyIntro() {
this.isExpandIntro = !this.isExpandIntro
},
},
/**
* @param {Object} index
*/
@@ -722,6 +756,8 @@
this.selectCaiwu = index
if(index==0) {
//主营数据
this.getFinancialStockInfoData()
this.getFinancialComparisonData()
this.getFinancialMetricsData()
}else if(index==1) {
//财务分析
@@ -1030,6 +1066,7 @@
this.upstreamList = nodesByLevel['level_-2'].concat(nodesByLevel['level_-1'])
this.coreEnterpriseList = nodesByLevel.level_0
this.downstreamList = nodesByLevel.level_1.concat(nodesByLevel.level_2)
this.valueChainFlowsList = res.data.value_chain_flows
}).catch(error=>{
})
@@ -1412,7 +1449,6 @@
.buy {
background-color: #EC3440;
width: 42%;
height: 100%;
border-radius: 5rpx;
}

View File

@@ -0,0 +1,28 @@
<template>
<view>
<web-view :src="url"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
url:''
}
},
onLoad(e) {
if(e.url)
{
this.url = e.url
}
},
methods: {
}
}
</script>
<style>
</style>