1.23 个股详情接口对接

This commit is contained in:
尚政杰
2026-01-23 17:47:11 +08:00
parent 30d2ec5823
commit b1956561cf
13 changed files with 538 additions and 137 deletions

View File

@@ -2,20 +2,20 @@
<view class="com_list"> <view class="com_list">
<view class="item"> <view class="item">
<view class="flex"> <view class="flex">
<view class="title">平安银行股份有限公司北京分行</view> <view class="title">实际控制人</view>
</view> </view>
<view class="com_info"> <view class="com_info">
<view class="left"> <view class="left">
<view class="l_top">中国平安保险(集团股份有限公司</view> <view class="l_top">{{actualControlInfo.actual_controller_name}}</view>
<view class="l_bottom"> <view class="l_bottom">
<view class="l_b_left">企业法人</view> <view class="l_b_left">企业法人</view>
<view class="l_b_right">截至 2024-09-30</view> <view class="l_b_right">截至 {{actualControlInfo.end_date}}</view>
</view> </view>
</view> </view>
<view class="right"> <view class="right">
<view class="r_top">控制比例</view> <view class="r_top">控制比例</view>
<view class="r_center">52.38%</view> <view class="r_center">{{actualControlInfo.holding_ratio.toFixed(2)}}%</view>
<view class="r_bottom">101.69亿</view> <view class="r_bottom">{{getNumStr(actualControlInfo.holding_shares)}}</view>
</view> </view>
</view> </view>
@@ -72,14 +72,14 @@
<view style="text-align: center;">持股比例</view> <view style="text-align: center;">持股比例</view>
<view style="text-align: center;">股份性质</view> <view style="text-align: center;">股份性质</view>
</view> </view>
<view v-for="(item, index) in 10" class="top" :class="{action: index % 2 == 1}"> <view v-for="(item, index) in shareholdersList" :key="index" class="top" :class="{action: index % 2 == 1}">
<view class="child">中国平安保险啊山东科技发啦设计费</view> <view class="child">{{item.shareholder_name}}</view>
<view class="child">保险公司</view> <view class="child">{{item.shareholder_type}}</view>
<view class="child" style="text-align: center;">96.19亿</view> <view class="child" style="text-align: center;">{{getNumStr(item.holding_shares)}}</view>
<view class="child" style="color: #3E87CF; font-weight: bold; text-align: center;">49.57%</view> <view class="child" style="color: #3E87CF; font-weight: bold; text-align: center;">{{item.total_share_ratio}}%</view>
<view class="child" <view class="child"
style="background-color: #FFF7E9; color: #E0AC4A; border-radius: 5rpx; padding: 5rpx 10rpx; text-align: center;"> style="background-color: #FFF7E9; color: #E0AC4A; border-radius: 5rpx; padding: 5rpx 10rpx; text-align: center;">
流通A股</view> {{item.share_nature}}</view>
</view> </view>
</view> </view>
</view> </view>
@@ -94,19 +94,17 @@
<view>股东名称</view> <view>股东名称</view>
<view>股东类型</view> <view>股东类型</view>
<view style="text-align: center;">持股数量</view> <view style="text-align: center;">持股数量</view>
<view <view style="text-align: center;">流通股比例</view>
style="text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">
流通股比例</view>
<view style="text-align: center;">股份性质</view> <view style="text-align: center;">股份性质</view>
</view> </view>
<view v-for="(item, index) in 10" class="top" :class="{action: index % 2 == 1}"> <view v-for="(item, index) in circulatingShareholdersList" :key="index" class="top" :class="{action: index % 2 == 1}">
<view class="child">中国平安保险啊山东科技发啦设计费</view> <view class="child">{{item.shareholder_name}}</view>
<view class="child">保险公司</view> <view class="child">{{item.shareholder_type?item.shareholder_type:'-'}}</view>
<view class="child" style="text-align: center;">96.19亿</view> <view class="child" style="text-align: center;">{{getNumStr(item.holding_shares)}}</view>
<view class="child" style="color: #893ECF; font-weight: bold; text-align: center;">49.57%</view> <view class="child" style="color: #893ECF; font-weight: bold; text-align: center;">{{item.total_share_ratio}}%</view>
<view class="child" <view class="child"
style="background-color: #FFF7E9; color: #E0AC4A; border-radius: 5rpx; padding: 5rpx 10rpx; text-align: center;"> style="background-color: #FFF7E9; color: #E0AC4A; border-radius: 5rpx; padding: 5rpx 10rpx; text-align: center;">
流通A股</view> {{item.share_nature}}</view>
</view> </view>
</view> </view>
</view> </view>
@@ -115,12 +113,21 @@
</template> </template>
<script> <script>
import { getNumStr } from '@/utils/util';
export default { export default {
name: "gqjg-view", name: "gqjg-view",
data() { data() {
return { return {
getNumStr:getNumStr
}; };
},
props:{
actualControlInfo:Object, //实际控制人信息
shareholdersList:Array, //十大股东列表
circulatingShareholdersList:Array, //十大流通股东列表
competitivePositionInfo:Object, //竞争地位信息
} }
} }
</script> </script>
@@ -277,11 +284,9 @@
.top { .top {
width: 100%; width: 100%;
display: grid; display: grid;
gap: 20rpx; grid-template-columns: 166rpx repeat(4, 1fr);
grid-template-columns: 130rpx repeat(4, 1fr);
font-size: 22rpx; font-size: 22rpx;
background-color: white; background-color: white;
&.action { &.action {
background-color: #FAFAFC; background-color: #FAFAFC;
} }
@@ -293,6 +298,9 @@
text-overflow: ellipsis; text-overflow: ellipsis;
margin: 10rpx 0; margin: 10rpx 0;
} }
.child:first-child {
margin-right: 20rpx;
}
} }
} }
} }

View File

@@ -1,7 +1,7 @@
<template> <template>
<view> <view>
<template v-if="showType == 0"> <template v-if="showType == 0">
<view style="padding: 20rpx;"> <view style="padding: 20rpx;" v-for="(item,index) in newsList" :key="index">
<view style="background-color: #F3F3F3; display: flex; align-items: center; height: 70rpx; border-radius: 30rpx; overflow: hidden;"> <view style="background-color: #F3F3F3; display: flex; align-items: center; height: 70rpx; border-radius: 30rpx; overflow: hidden;">
<view style="display: flex; align-items: center; justify-content: center; width: 62rpx;"> <view style="display: flex; align-items: center; justify-content: center; width: 62rpx;">
<image style="width: 25rpx; height: 24rpx;" src="/pagesStock/static/icon/news-search.png" mode="widthFix"></image> <image style="width: 25rpx; height: 24rpx;" src="/pagesStock/static/icon/news-search.png" mode="widthFix"></image>
@@ -46,7 +46,7 @@
</template> </template>
<template v-if="showType == 1"> <template v-if="showType == 1">
<view style="padding: 20rpx;"> <view style="padding: 20rpx;" v-for="(item,index) in announcementList" :key="index">
<view style="border: 1rpx solid #E7E7E7; border-radius: 10rpx; padding: 0 27rpx; margin: 20rpx 0; display: flex; align-items: center;"> <view style="border: 1rpx solid #E7E7E7; border-radius: 10rpx; padding: 0 27rpx; margin: 20rpx 0; display: flex; align-items: center;">
<view style="flex: 1;"> <view style="flex: 1;">
<view style="color: #2B2B2B; font-size: 26rpx; font-weight: bold; margin-top: 20rpx;">中央财办明确2026年继续实施适度宽松货币政策...</view> <view style="color: #2B2B2B; font-size: 26rpx; font-weight: bold; margin-top: 20rpx;">中央财办明确2026年继续实施适度宽松货币政策...</view>
@@ -59,7 +59,6 @@
<text>132 KB</text> <text>132 KB</text>
</view> </view>
</view> </view>
<view style="padding: 4rpx 10rpx; background-color: #F2C369; border-radius: 10rpx; color: #2B2B2B; font-size: 22rpx; margin-left: 10rpx;">查看</view> <view style="padding: 4rpx 10rpx; background-color: #F2C369; border-radius: 10rpx; color: #2B2B2B; font-size: 22rpx; margin-left: 10rpx;">查看</view>
</view> </view>
</view> </view>
@@ -76,7 +75,9 @@
}; };
}, },
props: {// 0 新闻动态 1 公司公告 props: {// 0 新闻动态 1 公司公告
type: Number type: Number,
newsList:Array, //新闻动态数组
announcementList:Array, //公司公告数组
}, },
watch:{ watch:{
type:{ type:{

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -8,75 +8,75 @@
placeholder-style="color:#eeeeee" confirm-type="search" @confirm="clickSearch()" /> placeholder-style="color:#eeeeee" confirm-type="search" @confirm="clickSearch()" />
</view> </view>
<scroll-view scroll-y class="stockDetailsC fixed" :style="'top:'+contentTop+'px;'"> <scroll-view scroll-y class="stockDetailsC fixed" :style="'top:'+contentTop+'px;'">
<view class="basicInfoC"> <view v-if="stockBasicInfo" class="basicInfoC">
<view class="categoryLabelC flex"> <view class="categoryLabelC flex">
<view class="category">金融·银行</view> <view class="category">{{stockBasicInfo.industry_l1}}·{{stockBasicInfo.sw_industry_l2}}</view>
<view class="">沪深300上证180</view> <view class="">沪深300上证180</view>
</view> </view>
<view class="priceC flex"> <view v-if="quoteDetailsInfo" class="priceC flex">
<view class="currentChgC"> <view class="currentChgC">
<view class="current">11.53</view> <view :class="'current '+(getRateUpOrDown(quoteDetailsInfo.change_percent)?'down':'up')">{{quoteDetailsInfo.current_price}}</view>
<view class="chg">+0.44%</view> <view :class="'chg '+(getRateUpOrDown(quoteDetailsInfo.change_percent)?'down':'up')">{{quoteDetailsInfo.change_percent}}%</view>
</view> </view>
<view class="priceIndexC"> <view class="priceIndexC">
<view class="flex"> <view class="flex">
<view class="indexC flex"> <view class="indexC flex">
<view class="title">今开</view> <view class="title">今开</view>
<view class="content">11.47</view> <view class="content">{{quoteDetailsInfo.today_open}}</view>
</view> </view>
<view class="indexC flex marginR"> <view class="indexC flex marginR">
<view class="title">昨收</view> <view class="title">昨收</view>
<view class="content">11.47</view> <view class="content">{{quoteDetailsInfo.yesterday_close}}</view>
</view> </view>
</view> </view>
<view class="flex"> <view class="flex">
<view class="indexC flex"> <view class="indexC flex">
<view class="title">最高</view> <view class="title">最高</view>
<view class="content up">11.58</view> <view class="content up">{{quoteDetailsInfo.today_high}}</view>
</view> </view>
<view class="indexC flex marginR"> <view class="indexC flex marginR">
<view class="title">最低</view> <view class="title">最低</view>
<view class="content down">11.42</view> <view class="content down">{{quoteDetailsInfo.today_low}}</view>
</view> </view>
</view> </view>
</view> </view>
</view> </view>
<view class="section">关键指标</view> <view class="section">关键指标</view>
<view class="infoC flex"> <view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1"> <view class="flex flex1">
<view class="title">市盈率 (PE)</view> <view class="title">市盈率 (PE)</view>
<view class="content flex1 important marginR">5.37</view> <view class="content flex1 important marginR">{{quoteDetailsInfo.pe}}</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<view class="title">流通股本</view> <view class="title">流通股本</view>
<view class="content flex1">194.06亿股</view> <view class="content flex1">{{quoteDetailsInfo.float_shares}}亿股</view>
</view> </view>
</view> </view>
<view class="infoC flex"> <view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1"> <view class="flex flex1">
<view class="title">流通市值</view> <view class="title">流通市值</view>
<view class="content flex1 important marginR">2237.47亿</view> <view class="content flex1 important marginR">{{quoteDetailsInfo.market_cap}}</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<view class="title">换手率</view> <view class="title">换手率</view>
<view class="content flex1">0.36%</view> <view class="content flex1">{{quoteDetailsInfo.turnover_rate}}%</view>
</view> </view>
</view> </view>
<view class="infoC flex"> <view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1"> <view class="flex flex1">
<view class="title">发行总股本</view> <view class="title">发行总股本</view>
<view class="content flex1 marginR">194.06亿股</view> <view class="content flex1 marginR">{{quoteDetailsInfo.total_shares}}亿股</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<view class="title">52周波动</view> <view class="title">52周波动</view>
<view class="content flex1">10.48-13.33</view> <view class="content flex1">{{quoteDetailsInfo.week52_low}}-{{quoteDetailsInfo.week52_high}}</view>
</view> </view>
</view> </view>
<view class="section">主力动态</view> <view class="section">主力动态</view>
<view class="infoC flex"> <view v-if="quoteDetailsInfo" class="infoC flex">
<view class="flex flex1"> <view class="flex flex1">
<view class="title">主力净流入</view> <view class="title">主力净流入</view>
<view class="content flex1 marginR up">+0.10亿</view> <view :class="'content flex1 marginR '+(getRateUpOrDown(quoteDetailsInfo.net_inflow)?'down':'up')">{{getRateUpOrDown(quoteDetailsInfo.net_inflow)?'':'+'}}{{getNumStr(quoteDetailsInfo.net_inflow)}}</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<view class="title">机构持仓</view> <view class="title">机构持仓</view>
@@ -94,19 +94,19 @@
<view class="flex flex1"> <view class="flex flex1">
<image class="icon" src="/pagesStock/static/icon/establishedTime.png" mode="widthFix"></image> <image class="icon" src="/pagesStock/static/icon/establishedTime.png" mode="widthFix"></image>
<view class="title">成立</view> <view class="title">成立</view>
<view class="content flex1 marginR">1987/12/22</view> <view class="content flex1 marginR">{{getLocalDate(stockBasicInfo.establish_date)}}</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<image class="icon" src="/pagesStock/static/icon/registeredCapital.png" mode="widthFix"></image> <image class="icon" src="/pagesStock/static/icon/registeredCapital.png" mode="widthFix"></image>
<view class="title">注册资本</view> <view class="title">注册资本</view>
<view class="content flex1">194.06亿元</view> <view class="content flex1">{{stockBasicInfo.reg_capital}}亿元</view>
</view> </view>
</view> </view>
<view class="infoC flex"> <view class="infoC flex">
<view class="flex flex1"> <view class="flex flex1">
<image class="icon" src="/pagesStock/static/icon/location.png" mode="widthFix"></image> <image class="icon" src="/pagesStock/static/icon/location.png" mode="widthFix"></image>
<view class="title">所在地</view> <view class="title">所在地</view>
<view class="content flex1 marginR">广东 深圳市</view> <view class="content flex1 marginR">{{stockBasicInfo.province}} {{stockBasicInfo.city}}</view>
</view> </view>
<view class="rightInfoC flex flex1"> <view class="rightInfoC flex flex1">
<image class="icon" src="/pagesStock/static/icon/visitWebsite.png" mode="widthFix"></image> <image class="icon" src="/pagesStock/static/icon/visitWebsite.png" mode="widthFix"></image>
@@ -116,8 +116,10 @@
</view> </view>
<view class="companyInfo"> <view class="companyInfo">
<view class="title">公司简介</view> <view class="title">公司简介</view>
<view class="flex1">深圳发展银行股份有限公司系在对中华人民共和国深圳经济特区内原6家农村信用社进行股份制改造的基础上设立的股份制商业银行... <view :class="'info relative flex1 '+(isExpandIntro?'':'retract')">{{stockBasicInfo.company_intro}}
<text class="expand">展开全文</text> <text :class="'expand '+(isExpandIntro?'':'absolute')" @click="clickExpandOrRetractCompanyIntro()">
<text v-if="!isExpandIntro" class="ellipsis">...</text>{{isExpandIntro?'收起':'展开全文'}}
</text>
</view> </view>
</view> </view>
</view> </view>
@@ -134,9 +136,8 @@
</view> </view>
</view> </view>
<template v-if="selectCompanyFiles==0"> <template v-if="selectCompanyFiles==0">
<gqjg-view></gqjg-view> <gqjg-view :actualControlInfo="actualControlInfo" :shareholdersList="topShareholdersList" :circulatingShareholdersList="topCirculatingShareholdersList"></gqjg-view>
</template> </template>
<view v-if="selectCompanyFiles==1" class="managementTeamList"> <view v-if="selectCompanyFiles==1" class="managementTeamList">
<view class="positionNumC flex"> <view class="positionNumC flex">
<view class="position">董事</view> <view class="position">董事</view>
@@ -169,33 +170,34 @@
</view> </view>
</view> </view>
<view v-if="selectCompanyFiles==2" class="branchList"> <view v-if="selectCompanyFiles==2" class="branchList">
<view class="item"> <view class="item" v-for="(item,index) in branchList" :key="index">
<view class="titleStatusC flex"> <view class="titleStatusC flex">
<view class="title flex1">平安银行股份有限公司北京分行</view> <view class="title flex1">{{item.branch_name}}</view>
<view class="statusC exist flex"> <view :class="'statusC flex '+(item.business_status=='注销'?'logOff':'exist')">
<image class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"> <image v-if="item.business_status=='注销'" class="icon" src="/pagesStock/static/icon/logOffStatus.png" mode="widthFix">
</image> </image>
<view>存续</view> <image v-else class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"></image>
<view>{{item.business_status}}</view>
</view> </view>
</view> </view>
<view class="infoC topInfo flex"> <view class="infoC topInfo flex">
<view class="infoItem leftInfo flex flex1"> <view class="infoItem leftInfo flex flex1">
<view class="title">注册资本</view> <view class="title">注册资本</view>
<view class="content flex1">20亿元</view> <view class="content flex1">{{item.register_capital}}</view>
</view> </view>
<view class="infoItem rightInfo flex flex1"> <view class="infoItem rightInfo flex flex1">
<view class="title">法人代表</view> <view class="title">法人代表</view>
<view class="content flex1">张伟</view> <view class="content flex1">{{item.legal_person}}</view>
</view> </view>
</view> </view>
<view class="infoC flex"> <view class="infoC flex">
<view class="infoItem leftInfo flex flex1"> <view class="infoItem leftInfo flex flex1">
<view class="title">成立日期</view> <view class="title">成立日期</view>
<view class="content flex1">2007-03-15</view> <view class="content flex1">{{item.register_date}}</view>
</view> </view>
<view class="infoItem rightInfo flex flex1"> <view class="infoItem rightInfo flex flex1">
<view class="title">关联企业</view> <view class="title">关联企业</view>
<view class="content flex1">156 </view> <view class="content flex1">{{item.related_company_count}}</view>
</view> </view>
</view> </view>
</view> </view>
@@ -205,36 +207,35 @@
<view class="infoC"> <view class="infoC">
<view class="infoItem flex"> <view class="infoItem flex">
<view class="title">统一信用代码</view> <view class="title">统一信用代码</view>
<view class="content code flex1 rightAlign">914403001000010008</view> <view class="content code flex1 rightAlign">{{stockBasicInfo.credit_code}}</view>
</view> </view>
<view class="infoItem flex"> <view class="infoItem flex">
<view class="title">公司规模</view> <view class="title">公司规模</view>
<view class="content flex1 rightAlign">大型企业(员工超3万人)</view> <view class="content flex1 rightAlign">{{stockBasicInfo.company_size}}</view>
</view> </view>
<view class="infoItem flex"> <view class="infoItem flex">
<view class="title">注册地址</view> <view class="title">注册地址</view>
<view class="content flex1 rightAlign">深圳市罗湖区深南东路5047号</view> <view class="content flex1 rightAlign">{{stockBasicInfo.reg_address}}</view>
</view> </view>
<view class="infoItem flex"> <view class="infoItem flex">
<view class="title">办公地址</view> <view class="title">办公地址</view>
<view class="content flex1 rightAlign">深圳市福田区益田路5023号平</view> <view class="content flex1 rightAlign">{{stockBasicInfo.office_address}}</view>
</view> </view>
</view> </view>
<view class="section">服务机构</view> <view class="section">服务机构</view>
<view class="infoC"> <view class="infoC">
<view class="title infoItem">会计师事务所</view> <view class="title infoItem">会计师事务所</view>
<view class="content infoItem">普华永道中天会计师事务所(特殊普通合伙)</view> <view class="content infoItem">{{stockBasicInfo.accounting_firm}}</view>
<view class="title infoItem">会计师事务所</view> <view class="title infoItem">师事务所</view>
<view class="content infoItem">普华永道中天会计师事务所(特殊普通合伙)</view> <view class="content infoItem">{{stockBasicInfo.law_firm}}</view>
</view> </view>
<view class="section">主营业务</view> <view class="section">主营业务</view>
<view class="infoC mainBussiness"> <view class="infoC mainBussiness">
<text class="title">吸收公众存款发放贷款办理结算票据贴现资金拆借银行卡业务代理收付款项外汇业务等商业银行业务</text> <text class="title">{{stockBasicInfo.main_business}}</text>
</view> </view>
<view class="section">经营范围</view> <view class="section">经营范围</view>
<view class="infoC"> <view class="infoC">
<text <text class="title">{{stockBasicInfo.business_scope}}</text>
class="title">吸收公众存款;发放短期中期和长期贷款;办理国内外结算;办理票据兑与贴现;发行金融债券;代理发行代理兑付承销政府债券;买卖政府债买卖外汇;从事银行卡业务提供信用证服务及担保代理收付款项及代理保险业务;提供保管箱服务;经有关监管机构批准的其他业务</text>
</view> </view>
</view> </view>
</block> </block>
@@ -246,7 +247,7 @@
</view> </view>
<view v-if="selectInDepthAnalysis==0" class="strategicAnalysisList"> <view v-if="selectInDepthAnalysis==0" class="strategicAnalysisList">
<view class="section">核心定位</view> <view class="section">核心定位</view>
<view class="corePositionC">中国领先的股份制商业银行平安集团综合金融战略的核心载体</view> <view v-if="qualitativeAnalysisInfo" class="corePositionC">{{qualitativeAnalysisInfo.core_positioning.one_line_intro}}</view>
<view class="section">投资亮点</view> <view class="section">投资亮点</view>
<view class="highlightsList"> <view class="highlightsList">
<view class="item flex"> <view class="item flex">
@@ -278,16 +279,13 @@
<view class="content">聚焦供应链金融和产业互联网服务实体经济高质量发展</view> <view class="content">聚焦供应链金融和产业互联网服务实体经济高质量发展</view>
</view> </view>
<view class="section">战略分析</view> <view class="section">战略分析</view>
<view class="infoC"> <view v-if="qualitativeAnalysisInfo" class="infoC">
<view class="title">战略方向</view> <view class="title">战略方向</view>
<view class="content">"零售做强、对公做精、同业做专"为主线通过压降高风险资产深耕科技绿色普惠强化集团协同实现轻资本弱周期高股息的高质量增长 <view class="content">{{qualitativeAnalysisInfo.strategy.strategy_description}}</view>
</view> </view>
</view> <view v-if="qualitativeAnalysisInfo" class="infoC">
<view class="infoC">
<view class="title">战略举措</view> <view class="title">战略举措</view>
<view class="content"> <view class="content">{{qualitativeAnalysisInfo.strategy.strategic_initiatives}}</view>
2025年A1138个项目落地构建智能风控智能投顾与智能运营目标3年降低单位成本10%以上;发行800亿元资本债用于置换存量高成本次级债并支持科技绿色贷款扩张目合金融优势技绿色贷款占比提升至15%
</view>
</view> </view>
<view class="section flex"> <view class="section flex">
@@ -301,23 +299,28 @@
</view> </view>
<view class="subSection">主要竞争对手</view> <view class="subSection">主要竞争对手</view>
<view class="mainCompetitorList flexWrap"> <view class="mainCompetitorList flexWrap">
<view class="item flex"> <view class="item flex" v-for="(item,index) in mainCompetitorsList" :key="index">
<image class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"> <image class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"></image>
</image> <view>{{item}}</view>
<view>招商银行</view>
</view> </view>
</view> </view>
<view class="infoC"> <view class="scoreList">
<view :class="'item flex '+item.color" v-for="(item,index) in scoreList" :key="index">
<image class="icon" :src="item.icon" mode="widthFix"></image>
<view class="title">{{item.title}}</view>
<view class="progressBgC relative flex1">
<view :class="'progress absolute '+item.color" :style="'width: '+item.score+'%;'"></view>
</view>
<view class="score">{{item.score}}</view>
</view>
</view>
<view v-if="competitivePositionInfo" class="infoC">
<view class="title">竞争优势</view> <view class="title">竞争优势</view>
<view class="content"> <view class="content">{{competitivePositionInfo.analysis.competitive_advantages}}</view>
背靠平安集团综合金融生态零售客户数超1.25亿AUM近4.2万亿元科技投入持续高位数字化经营与风控模型行业领先对公绿色科创普惠贷款增速均超10%非息收入占比提升至36%以上资本充足率高于监管底线且拨备覆盖率250%+资产质量稳健
</view> </view>
</view> <view v-if="competitivePositionInfo" class="infoC">
<view class="infoC">
<view class="title">竞争劣势</view> <view class="title">竞争劣势</view>
<view class="content"> <view class="content">{{competitivePositionInfo.analysis.competitive_disadvantages}}</view>
净息差仅1.87%且同比收窄51bps营收与净利润双降个人贷款规模下滑10.6%规模增速3.3%低于行业平均ROE跌破11%成本收入比27.7%仍高于股份行头部标杆对公与同业业务市场份额仍小存款成本刚性利率下行周期盈利弹性受限
</view>
</view> </view>
</view> </view>
<template v-if="selectInDepthAnalysis==1"> <template v-if="selectInDepthAnalysis==1">
@@ -337,7 +340,6 @@
{{item.title}} {{item.title}}
</view> </view>
</view> </view>
<zysj-view :type="selectCaiwu"></zysj-view> <zysj-view :type="selectCaiwu"></zysj-view>
</block> </block>
<block v-if="selectTab==3"> <block v-if="selectTab==3">
@@ -476,16 +478,20 @@
</template> </template>
<script> <script>
import { import { inject } from 'vue'
inject import { actualControl, branchesList, companyAnnouncementsList, comprehensiveAnalysis, eventList, managementTeam, quoteDetailsInfo, stockBasicInfo, topCirculatingShareholdersList, topShareholdersList } from '@/request/api'
} from 'vue' import { getLocalDate, getNumStr, getRateUpOrDown } from '@/utils/util'
export default { export default {
data() { data() {
return { return {
navH: inject('navHeight'), navH: inject('navHeight'),
keywords: '',
contentTop: '', contentTop: '',
keywords: '', //搜索关键字
stockCode:'000009', //股票代码 600759
stockBasicInfo:null, //股票基本信息
quoteDetailsInfo:null, //股票事实市场价格信息
isExpandIntro:false, //是否展开公司简介
tabList: [{ tabList: [{
title: '公司档案' title: '公司档案'
}, },
@@ -519,6 +525,11 @@
title: '工商信息' title: '工商信息'
} }
], //公司档案分类 ], //公司档案分类
actualControlInfo:null, //实际控制信息
topShareholdersList:[], //十大股东列表
topCirculatingShareholdersList:[], //十大流通股东列表
managementList:[], //管理团队列表
branchList:[], //分支机构列表
selectCompanyFiles: 0, selectCompanyFiles: 0,
inDepthAnalysisList: [{ inDepthAnalysisList: [{
title: '战略分析' title: '战略分析'
@@ -534,6 +545,57 @@
} }
], //深度分析分类 ], //深度分析分类
selectInDepthAnalysis: 0, selectInDepthAnalysis: 0,
qualitativeAnalysisInfo:null, //定性分析
mainCompetitorsList:[], //主要竞争对手
scoreList:[{
icon:'/pagesStock/static/icon/marketPosition.png',
title:'市场地位',
color:'blue',
score:''
},
{
icon:'/pagesStock/static/icon/technicalStrength.png',
title:'技术实力',
color:'purple',
score:''
},
{
icon:'/pagesStock/static/icon/brandValue.png',
title:'品牌价值',
color:'purple',
score:''
},
{
icon:'/pagesStock/static/icon/growthPotential.png',
title:'运营效率',
color:'purple',
score:''
},
{
icon:'/pagesStock/static/icon/financialHealth.png',
title:'财务健康',
color:'blue',
score:''
},
{
icon:'/pagesStock/static/icon/innovationAbility.png',
title:'创新能力',
color:'blue',
score:''
},
{
icon:'/pagesStock/static/icon/riskManagement.png',
title:'风险控制',
color:'purple',
score:''
},
{
icon:'/pagesStock/static/icon/growthPotential.png',
title:'成长潜力',
color:'purple',
score:''
}],
competitivePositionInfo:null, //竞争地位信息
caiWuList: [{ caiWuList: [{
title: '主营数据' title: '主营数据'
}, },
@@ -543,7 +605,7 @@
{ {
title: '财务数据' title: '财务数据'
} }
], //深度分析分类 ], //财务全景分类
selectCaiwu: 0, selectCaiwu: 0,
dongTaiList: [{ dongTaiList: [{
title: '新闻动态' title: '新闻动态'
@@ -551,20 +613,47 @@
{ {
title: '公司公告' title: '公司公告'
} }
], //深度分析分类 ], //动态跟踪分类
selectDongtai: 0 selectDongtai: 0,
newsList:[], //新闻动态数据
companyAnnouncementList:[], //公司公告数据
getLocalDate:getLocalDate,
getRateUpOrDown:getRateUpOrDown,
getNumStr:getNumStr
} }
}, },
onLoad() { onLoad() {
this.contentTop = this.navH + (20 + 70 + 30) / 750 * inject('windowWidth') this.contentTop = this.navH + (20 + 70 + 30) / 750 * inject('windowWidth')
this.getStockBasicInfoData()
this.getQuoteDetailsData()
this.getActualControl()
this.getTopShareholdersData()
this.getTopCirculatingShareholdersData()
}, },
methods: { methods: {
/**
* 点击搜索
*/
clickSearch() {
this.getStockBasicInfoData()
this.getQuoteDetailsData()
},
/**
* 点击展开收起公司简介
*/
clickExpandOrRetractCompanyIntro() {
this.isExpandIntro = !this.isExpandIntro
},
/** /**
* @param {Object} index * @param {Object} index
*/ */
clickTabItem(index) { clickTabItem(index) {
if (this.selectTab != index) { if (this.selectTab != index) {
this.selectTab = index this.selectTab = index
if(index==1) {
//获取竞争地位数据
this.getComprehensiveAnalysisData()
}
} }
}, },
/** /**
@@ -574,24 +663,13 @@
clickCompanyFilesItem(index) { clickCompanyFilesItem(index) {
if (this.selectCompanyFiles != index) { if (this.selectCompanyFiles != index) {
this.selectCompanyFiles = index this.selectCompanyFiles = index
if (index==1) {
//获取管理团队数据
this.getManagementTeamData()
}else if (index==2) {
//获取分支机构数据
this.getBranchListData()
} }
},
/**
* 点击选择动态分类
* @param {Object} index
*/
clickDongTaiItem(index) {
if (this.selectDongtai != index) {
this.selectDongtai = index
}
},
/**
* 点击选择财务分类
* @param {Object} index
*/
clickCaiWuItem(index) {
if (this.selectCaiwu != index) {
this.selectCaiwu = index
} }
}, },
/** /**
@@ -603,6 +681,32 @@
this.selectInDepthAnalysis = index this.selectInDepthAnalysis = index
} }
}, },
/**
* 点击选择动态分类
* @param {Object} index
*/
clickDongTaiItem(index) {
if (this.selectDongtai != index) {
this.selectDongtai = index
if (index==0) {
//新闻动态
this.getNewsListData()
} else if (index==1) {
//公司公告
this.getCompanyAnnouncementsData()
}
}
},
/**
* 点击选择财务分类
* @param {Object} index
*/
clickCaiWuItem(index) {
if (this.selectCaiwu != index) {
this.selectCaiwu = index
}
},
/** /**
* 点击查看行业排名 * 点击查看行业排名
*/ */
@@ -615,6 +719,158 @@
}else { }else {
this.$refs["detailInfoPopup"].open() this.$refs["detailInfoPopup"].open()
} }
},
/**
* 获取股票基本信息
*/
getStockBasicInfoData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
stockBasicInfo(code).then(res=>{
this.stockBasicInfo = res.data
}).catch(error=>{
})
},
/**
* 获取股票当前市场价格信息
*/
getQuoteDetailsData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
quoteDetailsInfo(code).then(res=>{
this.quoteDetailsInfo = res.data
}).catch(error=>{
})
},
/**
* 获取实际控制人数据
*/
getActualControl() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
actualControl(code).then(res=>{
this.actualControlInfo = res.data[0]
}).catch(error=>{
})
},
/**
* 获取十大股东列表
*/
getTopShareholdersData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
topShareholdersList(code,{'limit':10}).then(res=>{
this.topShareholdersList = res.data
}).catch(error=>{
})
},
/**
* 获取十大流通股东列表
*/
getTopCirculatingShareholdersData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
topCirculatingShareholdersList(code,{'limit':10}).then(res=>{
this.topCirculatingShareholdersList = res.data
}).catch(error=>{
})
},
/**
* 获取管理团队数据
*/
getManagementTeamData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
managementTeam(code,{active_only:true}).then(res=>{
let data = res.data
this.managementList = data.reduce((acc, item) => {
if (!acc[item.position_category_code]) {
acc[item.position_category_code] = [];
}
acc[item.position_category_code].push(item);
return acc;
}, {});
}).catch(error=>{
})
},
/**
* 获取分支机构数据
*/
getBranchListData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
branchesList(code).then(res=>{
this.branchList = res.data
}).catch(error=>{
})
},
/**
* 获取综合分析数据
*/
getComprehensiveAnalysisData() {
let code = this.stockCode
if (this.keywords) {
code = this.keywords
}
comprehensiveAnalysis(code).then(res=>{
this.qualitativeAnalysisInfo = res.data.qualitative_analysis
this.competitivePositionInfo = res.data.competitive_position
this.mainCompetitorsList = this.competitivePositionInfo.analysis.main_competitors.split(',')
this.scoreList[0].score = this.competitivePositionInfo.scores.market_position
this.scoreList[1].score = this.competitivePositionInfo.scores.technology
this.scoreList[2].score = this.competitivePositionInfo.scores.brand
this.scoreList[3].score = this.competitivePositionInfo.scores.operation
this.scoreList[4].score = this.competitivePositionInfo.scores.finance
this.scoreList[5].score = this.competitivePositionInfo.scores.innovation
this.scoreList[6].score = this.competitivePositionInfo.scores.risk
this.scoreList[7].score = this.competitivePositionInfo.scores.growth
}).catch(error=>{
})
},
/**
* 获取新闻动态数据
*/
getNewsListData() {
let param = {importance:'all',sort:'new',q:this.stockCode,page:1,per_page:10,mode:'vertical'}
eventList(param).then(res=>{
this.newsList = res.data.events
}).catch(error=>{
})
},
/**
* 获取公司公告数据
*/
getCompanyAnnouncementsData() {
let param = {limit:20}
companyAnnouncementsList(param).then(res=>{
this.companyAnnouncementList = res.data
}).catch(error=>{
})
} }
} }
} }
@@ -659,7 +915,6 @@
left: 0; left: 0;
right: 0; right: 0;
bottom: calc(20rpx + 70rpx + 20rpx + env(safe-area-inset-bottom)); bottom: calc(20rpx + 70rpx + 20rpx + env(safe-area-inset-bottom));
;
.basicInfoC { .basicInfoC {
background-color: white; background-color: white;
@@ -689,12 +944,19 @@
.currentChgC { .currentChgC {
margin-right: 40rpx; margin-right: 40rpx;
color: #EC3440;
.current { .current {
font-size: 48rpx; font-size: 48rpx;
font-weight: 900; font-weight: 900;
} }
.up {
color: #EC3440;
}
.down
{
color: #345423;
}
.chg { .chg {
font-size: 24rpx; font-size: 24rpx;
@@ -764,6 +1026,9 @@
.content.up { .content.up {
color: #EC3440; color: #EC3440;
} }
.content.down {
color: #345423;
}
} }
.progressC { .progressC {
@@ -809,8 +1074,24 @@
font-weight: bold; font-weight: bold;
} }
.info.retract {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
text-overflow: ellipsis;
overflow: hidden;
}
.expand { .expand {
background-color: white;
// padding-left: 10rpx;
color: #BB8520; color: #BB8520;
right: 0;
bottom: 0;
.ellipsis
{
color: #71675D;
}
} }
} }
} }
@@ -1020,18 +1301,23 @@
border-radius: 15rpx; border-radius: 15rpx;
font-size: 20rpx; font-size: 20rpx;
font-weight: 500; font-weight: 500;
.icon {
margin-right: 3rpx;
width: 16rpx;
height: auto;
}
} }
.statusC.exist { .statusC.exist {
background-color: #FFF7E9; background-color: #FFF7E9;
border: solid 1rpx #F2C369; border: solid 1rpx #F2C369;
color: #F2C369; color: #F2C369;
.icon {
margin-right: 3rpx;
width: 16rpx;
height: auto;
} }
.statusC.logOff {
background-color: #FFF1F1;
border: solid 1rpx #EF3535;
color: #EF3535;
} }
} }
@@ -1087,7 +1373,7 @@
padding: 12rpx 20rpx; padding: 12rpx 20rpx;
.infoItem { .infoItem {
line-height: 40rpx; line-height: 46rpx;
} }
.title { .title {
@@ -1258,6 +1544,53 @@
} }
} }
} }
.scoreList
{
.item
{
margin-bottom: 40rpx;
font-size: 24rpx;
.icon
{
margin-right: 10rpx;
width: 24rpx;
height: auto;
}
.title
{
margin-right: 15rpx;
font-weight: 500;
color: #232323;
}
.progressBgC
{
background-color: #EFEFEF;
margin-right: 15rpx;
height: 10rpx;
border-radius: 5rpx;
.progress
{
top: 0;
left: 0;
height: 10rpx;
border-radius: 5rpx;
}
.progress.blue
{
background: linear-gradient(90deg, #4AAFFF 0%, #1F83FD 100%);
}
.progress.purple
{
background: linear-gradient(90deg, #DD96FC 0%, #C061FD 100%);
}
}
.score
{
font-weight: 800;
color: #070707;
}
}
}
} }
.ywjg_list { .ywjg_list {

View File

@@ -143,6 +143,47 @@ export const investEventDetails = (id,param) => get('/api/calendar/detail/'+id,p
*/ */
export const calendarEventCount = param => get('/api/calendar-event-counts',param) export const calendarEventCount = param => get('/api/calendar-event-counts',param)
/**
* 个股基本信息
*/
export const stockBasicInfo = code => get('/api/stock/'+code+'/basic-info',null,true)
/**
* 个股当前价格信息
*/
export const quoteDetailsInfo = code => get('/api/stock/'+code+'/quote-detail',null,true)
/**
* 实际控制人
*/
export const actualControl = code => get('/api/stock/'+code+'/actual-control',null,true)
/**
* 股权集中度
*/
export const ownershipConcentration = code => get('/api/stock/'+code+'/concentration',null,true)
/**
* 股东列表
*/
export const topShareholdersList = (code,param) => get('/api/stock/'+code+'/top-shareholders',param,true)
/**
* 流动股东列表
*/
export const topCirculatingShareholdersList = (code,param) => get('/api/stock/'+code+'/top-circulation-shareholders',param,true)
/**
* 管理团队
*/
export const managementTeam = (code,param) => get('/api/stock/'+code+'/management',param,true)
/**
* 分支机构
*/
export const branchesList = code => get('/api/stock/'+code+'/branches',null,true)
/**
* 综合分析
*/
export const comprehensiveAnalysis = code => get('/api/company/comprehensive-analysis/'+code,null,true)
/**
* 公司公告
*/
export const companyAnnouncementsList = code => get('/api/stock/'+code+'/announcements',null,true)
/** /**
* 用户信息 * 用户信息
*/ */

View File

@@ -20,15 +20,15 @@ export function getBaseURL() {
* @param {String} url [请求的url地址] * @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数] * @param {Object} params [请求时携带的参数]
*/ */
export function get(url, params){ export function get(url, params, isNotPort){
return new Promise((resolve, reject) =>{ return new Promise((resolve, reject) =>{
let token = uni.getStorageSync('token') let token = uni.getStorageSync('token')
uni.showLoading({ uni.showLoading({
title:'加载中' title:'加载中'
}) })
let baseUrl = baseURL let baseUrl = baseURL
if(url.indexOf('concept-api')>-1||url.indexOf('news-api')>-1||url.indexOf('report-api')>-1) if (isNotPort) {
{ //如果不需要端口号
baseUrl = 'https://api.valuefrontier.cn' baseUrl = 'https://api.valuefrontier.cn'
} }
uni.request({ uni.request({
@@ -69,7 +69,7 @@ export function get(url, params){
* @param {String} url [请求的url地址] * @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数] * @param {Object} params [请求时携带的参数]
*/ */
export function post(url, params) { export function post(url, params, isNotPort) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let token = uni.getStorageSync('token') let token = uni.getStorageSync('token')
let isJson = 0 let isJson = 0

View File

@@ -225,6 +225,24 @@ export function getRateUpOrDown(r)
return String(r).indexOf('-')>-1 return String(r).indexOf('-')>-1
} }
/**
* 根据数字大小展示亿或者完
* @param {Object} r
*/
export function getNumStr(r)
{
if (!r) return
let value = r
if (r<0) value = 0-r
value = parseFloat(value)
if (value>100000000) {
return (r/100000000).toFixed(2)+'亿'
}else if (value>10000) {
return (r/10000).toFixed(2)+'万'
}else
return r
}
/** /**
* 获取本地时间 * 获取本地时间
* @param {Object} time * @param {Object} time