2.4 组件结构调整,调整会员权限判断
This commit is contained in:
487
pagesStock/components/cwfx-view/cwfx-view.vue
Normal file
487
pagesStock/components/cwfx-view/cwfx-view.vue
Normal file
@@ -0,0 +1,487 @@
|
||||
<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>
|
||||
2818
pagesStock/components/cwsj-view/cwsj-view.vue
Normal file
2818
pagesStock/components/cwsj-view/cwsj-view.vue
Normal file
File diff suppressed because it is too large
Load Diff
447
pagesStock/components/cyl-view/cyl-view.vue
Normal file
447
pagesStock/components/cyl-view/cyl-view.vue
Normal file
@@ -0,0 +1,447 @@
|
||||
<template>
|
||||
<view class="cyl_view">
|
||||
<view class="top flex">
|
||||
<view class="child_1">产业链分析</view>
|
||||
<view class="child_2">目标公司供应链图谱</view>
|
||||
<view class="child_3">节点 {{totalNodes}}</view>
|
||||
</view>
|
||||
<view class="center">
|
||||
<view class="child" :class="{action: center_index == 0}" @click="changeCenterIndex(0)">
|
||||
层级视图
|
||||
</view>
|
||||
<view class="child" :class="{action: center_index == 1}" @click="changeCenterIndex(1)">
|
||||
流向关系
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="center_index==0" class="bottom">
|
||||
<view class="type flex">
|
||||
<view v-for="(item,index) in types" :key="index" class="item flex flex1">
|
||||
<view :class="'contentC flexColumnCenter flex1 '+(typeIndex==index?item.type:'')" @click="typeIndex = index">
|
||||
<view class="titleNumC">
|
||||
{{item.title}}
|
||||
<text :class="'num '+(typeIndex==index?item.type:'')">{{item.count}}</text>
|
||||
</view>
|
||||
<view class="des">{{item.desc}}</view>
|
||||
</view>
|
||||
<image v-if="index!=types.length-1" class="arrow" src="/pagesStock/static/icon/rightArrow.png"
|
||||
mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list">
|
||||
<block v-if="typeIndex==0">
|
||||
<!-- 上游供应链 -->
|
||||
<view class="item" v-for="(item,index) in upstreamList" :key="index" @click="clickAction(item)">
|
||||
<view class="title">{{item.node_name}}</view>
|
||||
<view class="des">{{item.node_description}}</view>
|
||||
<view class="labelC flex">
|
||||
<view class="label upstream type">{{item.node_type}}</view>
|
||||
<view class="label upstream market">份额:{{item.market_share}}%</view>
|
||||
</view>
|
||||
<view class="importanceC flex">
|
||||
<view class="title">影响度</view>
|
||||
<view class="progressBgC flex1">
|
||||
<view class="progress upstream" :style="{width: `${item.importance_score}%`}">
|
||||
</view>
|
||||
</view>
|
||||
<view class="value">{{item.importance_score}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-if="typeIndex==1">
|
||||
<!-- 核心企业 -->
|
||||
<view class="item" v-for="(item,index) in coreEnterpriseList" :key="index" @click="clickAction(item)">
|
||||
<view class="title">{{item.node_name}}</view>
|
||||
<view class="des">{{item.node_description}}</view>
|
||||
<view class="labelC flex">
|
||||
<view class="label core type">{{item.node_type}}</view>
|
||||
<view class="label core market">份额:{{item.market_share}}%</view>
|
||||
</view>
|
||||
<view class="importanceC flex">
|
||||
<view class="title">影响度</view>
|
||||
<view class="progressBgC flex1">
|
||||
<view class="progress core" :style="{width: `${item.importance_score}%`}"></view>
|
||||
</view>
|
||||
<view class="value">{{item.importance_score}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-if="typeIndex==2">
|
||||
<!-- 下游客户 -->
|
||||
<view class="item" v-for="(item,index) in downstreamList" :key="index" @click="clickAction(item)">
|
||||
<view class="title">{{item.node_name}}</view>
|
||||
<view class="des">{{item.node_description}}</view>
|
||||
<view class="labelC flex">
|
||||
<view class="label downstream type">{{item.node_type}}</view>
|
||||
<view class="label downstream market">份额:{{item.market_share}}%</view>
|
||||
</view>
|
||||
<view class="importanceC flex">
|
||||
<view class="title">影响度</view>
|
||||
<view class="progressBgC flex1">
|
||||
<view class="progress downstream" :style="{width: `${item.importance_score}%`}"></view>
|
||||
</view>
|
||||
<view class="value">{{item.importance_score}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="center_index==1" style="height: 500rpx;">
|
||||
<l-echart ref="chartRef"></l-echart>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const echarts = require('../../../uni_modules/lime-echart/static/echarts.min.js');
|
||||
|
||||
export default {
|
||||
name: "cyl-view",
|
||||
data() {
|
||||
return {
|
||||
isShow: false,
|
||||
center_index: 0,
|
||||
types: [{
|
||||
title: '上游供应链',
|
||||
count: 0,
|
||||
desc: '原材料与供应商',
|
||||
type:'upstream'
|
||||
},
|
||||
{
|
||||
title: '核心企业',
|
||||
count: 0,
|
||||
desc: '公司主体与产品',
|
||||
type:'core'
|
||||
},
|
||||
{
|
||||
title: '下游客户',
|
||||
count: 0,
|
||||
desc: '客户与终端市场',
|
||||
type:'downstream'
|
||||
}
|
||||
],
|
||||
typeIndex: 0,
|
||||
option:{
|
||||
legend:{
|
||||
show:false,
|
||||
},
|
||||
grid:{
|
||||
left:'2%',
|
||||
right:'2%',
|
||||
top:'5%',
|
||||
bottom:'30%'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'sankey',
|
||||
name:'经营现金流',
|
||||
data: [],
|
||||
links:[],
|
||||
}
|
||||
]
|
||||
},
|
||||
};
|
||||
},
|
||||
props:{
|
||||
valueChainAnalysisInfo:Object,
|
||||
upstreamList:Array, //上游供应链
|
||||
coreEnterpriseList:Array, //核心企业
|
||||
downstreamList:Array, //下游客户
|
||||
totalNodes:Number, //总节点数
|
||||
valueChainFlowsList:Array //产业链流向数据
|
||||
},
|
||||
watch:{
|
||||
valueChainAnalysisInfo(newValue)
|
||||
{
|
||||
this.types[0].count = newValue.upstream_nodes
|
||||
this.types[1].count = newValue.company_nodes
|
||||
this.types[2].count = newValue.downstream_nodes
|
||||
},
|
||||
valueChainFlowsList(newValue)
|
||||
{
|
||||
let data = []
|
||||
let links = []
|
||||
let name = []
|
||||
for (let item of newValue) {
|
||||
if(name.indexOf(item.source.node_name)==-1)
|
||||
{
|
||||
name.push(item.source.node_name)
|
||||
data.push({name:item.source.node_name})
|
||||
}
|
||||
links.push({source: item.source.node_name, target: item.target.node_name, value: item.flow_metrics.flow_ratio})
|
||||
}
|
||||
this.option.series[0].data = data
|
||||
this.option.series[0].links = links
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async init() {
|
||||
// chart 图表实例不能存在data里
|
||||
const chart = await this.$refs.chartRef.init(echarts);
|
||||
// chart.on('click',function (params) {
|
||||
// console.log(params)
|
||||
// })
|
||||
console.log(chart)
|
||||
console.log(this.option)
|
||||
chart.setOption(this.option)
|
||||
|
||||
},
|
||||
changeCenterIndex(index) {
|
||||
if(this.center_index!=index) {
|
||||
this.center_index = index
|
||||
if(index==1) {
|
||||
let that = this
|
||||
setTimeout(function() {
|
||||
that.init()
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
},
|
||||
clickAction(item) {
|
||||
this.$emit('detail',item)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.cyl_view {
|
||||
padding: 20rpx;
|
||||
|
||||
.top {
|
||||
font-weight: 500;
|
||||
.child_1 {
|
||||
color: #2B2B2B;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.child_2 {
|
||||
color: #71675D;
|
||||
font-size: 24rpx;
|
||||
margin: 0 10rpx;
|
||||
}
|
||||
|
||||
.child_3 {
|
||||
border: 1rpx solid #F3C368;
|
||||
border-radius: 5rpx;
|
||||
padding: 0 5rpx;
|
||||
color: #F2C369;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.center {
|
||||
margin: 20rpx 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-evenly;
|
||||
font-weight: 500;
|
||||
|
||||
.child {
|
||||
background-color: #F5F5F5;
|
||||
border-radius: 10rpx 10rpx 0 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 26rpx;
|
||||
color: #939393;
|
||||
padding: 10rpx 40rpx;
|
||||
|
||||
&.action {
|
||||
background-color: #F2C369;
|
||||
color: #070707;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.bottom {
|
||||
.type {
|
||||
.item {
|
||||
border-radius: 10rpx;
|
||||
width: 100%;
|
||||
padding: 26rpx 0;
|
||||
.contentC
|
||||
{
|
||||
background-color: #FAFAFC;
|
||||
justify-content: center;
|
||||
height: 120rpx;
|
||||
border-radius: 10rpx;
|
||||
.titleNumC
|
||||
{
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #2B2B2B;
|
||||
.num
|
||||
{
|
||||
background-color: #F2C369;
|
||||
margin-left: 6rpx;
|
||||
padding: 0 5rpx;
|
||||
min-width: 24rpx;
|
||||
border-radius: 5rpx;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
}
|
||||
.num.upstream
|
||||
{
|
||||
background-color: #FF5501;
|
||||
color: white;
|
||||
}
|
||||
.num.core
|
||||
{
|
||||
background-color: #175CE6;
|
||||
color: white;
|
||||
}
|
||||
.num.downstream
|
||||
{
|
||||
background-color: #1DB26F;
|
||||
color: white;
|
||||
}
|
||||
}
|
||||
.des
|
||||
{
|
||||
margin-top: 10rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #999999;
|
||||
}
|
||||
}
|
||||
.contentC.upstream
|
||||
{
|
||||
background-color: #FFF4EF;
|
||||
border: solid 1rpx #FF5501;
|
||||
}
|
||||
.contentC.core
|
||||
{
|
||||
background-color: #F2F6FD;
|
||||
border: solid 1rpx #175CE6;
|
||||
}
|
||||
.contentC.downstream
|
||||
{
|
||||
background-color: #E7F5F0;
|
||||
border: solid 1rpx #1DB26F;
|
||||
}
|
||||
|
||||
.arrow
|
||||
{
|
||||
margin: 0 6rpx;
|
||||
width: 19rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.list
|
||||
{
|
||||
margin-top: 20rpx;
|
||||
.item
|
||||
{
|
||||
background-color: #FAFAFC;
|
||||
margin-bottom: 20rpx;
|
||||
border-radius: 10rpx;
|
||||
padding: 25rpx 20rpx;
|
||||
.title
|
||||
{
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #2B2B2B;
|
||||
}
|
||||
.des
|
||||
{
|
||||
margin-top: 10rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: #999999;
|
||||
}
|
||||
.labelC
|
||||
{
|
||||
margin-top: 10rpx;
|
||||
.label
|
||||
{
|
||||
margin-right: 10rpx;
|
||||
padding: 0 10rpx;
|
||||
line-height: 30rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
.label.upstream
|
||||
{
|
||||
color: #FF5501;
|
||||
}
|
||||
.label.upstream.type
|
||||
{
|
||||
background-color: #FFF4EF;
|
||||
}
|
||||
.label.upstream.market
|
||||
{
|
||||
border: solid 1rpx #FF5501;
|
||||
}
|
||||
.label.core
|
||||
{
|
||||
color: #175CE6;
|
||||
}
|
||||
.label.core.type
|
||||
{
|
||||
background-color: #EDF2FD;
|
||||
}
|
||||
.label.core.market
|
||||
{
|
||||
border: solid 1rpx #175CE6;
|
||||
}
|
||||
.label.downstream
|
||||
{
|
||||
color: #1DB26F;
|
||||
}
|
||||
.label.downstream.type
|
||||
{
|
||||
background-color: #E7F5F0;
|
||||
}
|
||||
.label.downstream.market
|
||||
{
|
||||
border: solid 1rpx #1DB26F;
|
||||
}
|
||||
}
|
||||
.importanceC
|
||||
{
|
||||
margin-top: 20rpx;
|
||||
.title
|
||||
{
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #71675D;
|
||||
}
|
||||
.progressBgC
|
||||
{
|
||||
background-color: #EFEFEF;
|
||||
height: 10rpx;
|
||||
border-radius: 5rpx;
|
||||
margin: 0 15rpx;
|
||||
.progress
|
||||
{
|
||||
height: 100%;
|
||||
border-radius: 5rpx;
|
||||
}
|
||||
.progress.upstream
|
||||
{
|
||||
background: linear-gradient(90deg, #FF8C53 0%, #FF5501 100%);
|
||||
}
|
||||
.progress.core
|
||||
{
|
||||
background: linear-gradient(90deg, #518BFF 0%, #175CE6 100%);
|
||||
}
|
||||
.progress.downstream
|
||||
{
|
||||
background: linear-gradient(90deg, #48D394 0%, #1DB26F 100%);
|
||||
}
|
||||
}
|
||||
.value
|
||||
{
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: #71675D;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
126
pagesStock/components/fzjg-view/fzjg-view.vue
Normal file
126
pagesStock/components/fzjg-view/fzjg-view.vue
Normal file
@@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<view class="branchList">
|
||||
<view class="item" v-for="(item,index) in branchList" :key="index">
|
||||
<view class="titleStatusC flex">
|
||||
<view class="title flex1">{{item.branch_name}}</view>
|
||||
<view :class="'statusC flex '+(item.business_status=='注销'?'logOff':'exist')">
|
||||
<image v-if="item.business_status=='注销'" class="icon" src="/pagesStock/static/icon/logOffStatus.png" mode="widthFix">
|
||||
</image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"></image>
|
||||
<view>{{item.business_status}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="infoC topInfo flex">
|
||||
<view class="infoItem leftInfo flex flex1">
|
||||
<view class="title">注册资本</view>
|
||||
<view class="content flex1">{{item.register_capital}}</view>
|
||||
</view>
|
||||
<view class="infoItem rightInfo flex flex1">
|
||||
<view class="title">法人代表</view>
|
||||
<view class="content flex1">{{item.legal_person}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="infoC flex">
|
||||
<view class="infoItem leftInfo flex flex1">
|
||||
<view class="title">成立日期</view>
|
||||
<view class="content flex1">{{item.register_date}}</view>
|
||||
</view>
|
||||
<view class="infoItem rightInfo flex flex1">
|
||||
<view class="title">关联企业</view>
|
||||
<view class="content flex1">{{item.related_company_count}}家</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name:"fzjg-view",
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
props:{
|
||||
branchList:Array
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.branchList {
|
||||
margin-top: 38rpx;
|
||||
padding: 0 20rpx;
|
||||
|
||||
.item {
|
||||
background-color: #FAFAFC;
|
||||
margin-bottom: 20rpx;
|
||||
padding: 20rpx;
|
||||
border-radius: 10rpx;
|
||||
|
||||
.titleStatusC {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #2B2B2B;
|
||||
|
||||
.statusC {
|
||||
padding: 0 10rpx;
|
||||
line-height: 28rpx;
|
||||
border-radius: 15rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
.icon {
|
||||
margin-right: 3rpx;
|
||||
width: 16rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.statusC.exist {
|
||||
background-color: #FFF7E9;
|
||||
border: solid 1rpx #F2C369;
|
||||
color: #F2C369;
|
||||
}
|
||||
|
||||
.statusC.logOff {
|
||||
background-color: #FFF1F1;
|
||||
border: solid 1rpx #EF3535;
|
||||
color: #EF3535;
|
||||
}
|
||||
}
|
||||
|
||||
.infoC {
|
||||
height: 50rpx;
|
||||
|
||||
.infoItem {
|
||||
.title {
|
||||
margin-right: 16rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #2A2A2A;
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.infoItem.leftInfo {
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
|
||||
.infoItem.rightInfo {
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.infoC.topInfo {
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
262
pagesStock/components/fzlc-view/fzlc-view.vue
Normal file
262
pagesStock/components/fzlc-view/fzlc-view.vue
Normal file
@@ -0,0 +1,262 @@
|
||||
<template>
|
||||
<view style="padding: 25rpx 20rpx; box-sizing: border-box;">
|
||||
<view v-if="keyFactorsInfo" class="flex" style="font-size: 28rpx;"><text>关键因素</text><text
|
||||
style="font-size: 24rpx; color: #070707; padding: 0rpx 10rpx; border-radius: 3rpx; background-color: #F2C369; margin-left: 10rpx;">{{keyFactorsInfo.total_factors}}</text>
|
||||
</view>
|
||||
<view class="keyFactorsList">
|
||||
<view class="item" v-for="(item, index) in keyFactorsList" :key="index" @click="item.show = !item.show"
|
||||
style="margin: 20rpx 0; background-color: #FAFAFC; border-radius: 10rpx; padding: 25rpx 20rpx; color: #2B2B2B;">
|
||||
<view style="display: flex; align-items: center; justify-content: space-between;">
|
||||
<view style="flex: 1; font-size: 26rpx;"><text>{{item.category_name}}</text><text
|
||||
style="font-size: 24rpx; color: #070707; padding: 0rpx 10rpx; border-radius: 3rpx; background-color: #F2C369; margin-left: 10rpx;">{{item.factors.length}}</text>
|
||||
</view>
|
||||
<image v-if="item.show" style="width: 20rpx; height: 12rpx;"
|
||||
src="/pagesStock/static/icon/shangJiantou.png" mode="widthFix"></image>
|
||||
<image v-else style="width: 20rpx; height: 12rpx;" src="/pagesStock/static/icon/xiaJiantou.png"
|
||||
mode="widthFix"></image>
|
||||
</view>
|
||||
|
||||
<template v-if="item.show">
|
||||
<view class="fitem" v-for="(fitem,findex) in item.factors" :key="findex"
|
||||
style="margin: 20rpx 0; padding: 20rpx; background-color: white; border-radius: 10rpx; border: 1rpx solid #E7E7E7; color: #2B2B2B; font-weight: 500; font-size: 26rpx;">
|
||||
<view class="titleImpactC flex between">
|
||||
<view>{{fitem.factor_name}}</view>
|
||||
<view v-if="fitem.impact_direction=='negative'" class="impact negative">负面</view>
|
||||
<view v-if="fitem.impact_direction=='neutral'" class="impact neutral">中性</view>
|
||||
<view v-if="fitem.impact_direction=='positive'" class="impact positive">正面</view>
|
||||
</view>
|
||||
<view class="valueChgC flex" style="margin-top: 10rpx;">
|
||||
<view :class="'value '+(fitem.impact_direction)">{{fitem.factor_value}}{{fitem.factor_unit}}
|
||||
</view>
|
||||
<view :class="'chgC flex '+(getRateUpOrDown(fitem.year_on_year)?'down':'up')">
|
||||
<image v-if="getRateUpOrDown(fitem.year_on_year)" class="icon" src="/pagesStock/static/icon/downArrow.png" mode="widthFix"></image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/upArrow.png" mode="widthFix"></image>
|
||||
<view>{{fitem.year_on_year?fitem.year_on_year:0}}%</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="margin-top: 10rpx; color: #999999; font-size: 22rpx;">{{fitem.factor_desc}}</view>
|
||||
<view style="margin-top: 10rpx; color: #999999; font-size: 22rpx;">影响权重: {{fitem.impact_weight}}</view>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<view v-if="timelineInfo" class="flex" style="font-size: 28rpx;"><text>发展时间线</text>
|
||||
<text
|
||||
style="font-size: 24rpx; color: white; padding: 0rpx 10rpx; border-radius: 3rpx; background-color: #EC3440; margin-left: 10rpx;">正面
|
||||
{{timelineInfo.positive_events}}</text>
|
||||
<text
|
||||
style="font-size: 24rpx; color: white; padding: 0rpx 10rpx; border-radius: 3rpx; background-color: #345423; margin-left: 10rpx;">负面
|
||||
{{timelineInfo.negative_events}}</text>
|
||||
</view>
|
||||
<view class="timelineList">
|
||||
<view class="item" v-for="(item,index) in timelineList" :key="index" @click="clickAction(item)">
|
||||
<view class="impactC flexColumnCenter">
|
||||
<image v-if="item.impact_metrics.is_positive==1" class="icon" style="margin-top: 20rpx;"
|
||||
src="/pagesStock/static/icon/yuan_shang.png" mode="widthFix"></image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/yuan_jiang.png" mode="widthFix"></image>
|
||||
<view :class="'line flex1 '+(item.impact_metrics.is_positive==1?'up':'down')"></view>
|
||||
</view>
|
||||
<view
|
||||
style="flex: 1; margin-left: 10rpx; background-color: #FAFAFC; padding: 24rpx 15rpx; border-radius: 10rpx; font-weight: 500;">
|
||||
<view class="titleTypeC">
|
||||
<text class="title">{{item.event_title}}</text>
|
||||
<text :class="'eventType '+(item.impact_metrics.is_positive==1?'up':'down')">{{item.event_type}}</text>
|
||||
</view>
|
||||
<view style="color: #999999; font-size: 20rpx; margin: 15rpx 0;">{{item.event_date}}</view>
|
||||
<view style="color: #71675D; font-size: 22rpx;">{{item.event_desc}}</view>
|
||||
<view style="display: flex; align-items: center; margin-top: 30rpx;">
|
||||
<view style="color: #71675D; font-size: 22rpx; font-weight: 500;">影响度</view>
|
||||
<view class="progressBgC">
|
||||
<view :class="'progress '+(item.impact_metrics.is_positive==1?'up':'down')" :style="{width: `${item.impact_metrics.impact_score}%`}">
|
||||
</view>
|
||||
</view>
|
||||
<view style="color: #71675D; font-size: 24rpx; font-weight: 500;">{{item.impact_metrics.impact_score}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getRateUpOrDown } from '@/utils/util';
|
||||
|
||||
export default {
|
||||
name: "fzlc-view",
|
||||
data() {
|
||||
return {
|
||||
getRateUpOrDown:getRateUpOrDown
|
||||
};
|
||||
},
|
||||
props: {
|
||||
keyFactorsInfo:null,
|
||||
keyFactorsList:Array, //关键因素数组
|
||||
timelineInfo:null,
|
||||
timelineList:Array, //发展时间线数组
|
||||
},
|
||||
methods: {
|
||||
clickAction(item) {
|
||||
this.$emit('detail',item)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.keyFactorsList
|
||||
{
|
||||
.item
|
||||
{
|
||||
.fitem
|
||||
{
|
||||
.impact
|
||||
{
|
||||
border-radius: 5rpx;
|
||||
padding: 0 10rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: white;
|
||||
}
|
||||
.impact.negative
|
||||
{
|
||||
background-color: #345423;
|
||||
}
|
||||
.impact.neutral
|
||||
{
|
||||
background-color: #345423;
|
||||
}
|
||||
.impact.positive
|
||||
{
|
||||
background-color: #EC3440;
|
||||
}
|
||||
.valueChgC
|
||||
{
|
||||
.value
|
||||
{
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.value.negative
|
||||
{
|
||||
color: #345423;
|
||||
}
|
||||
.value.neutral
|
||||
{
|
||||
color:#345423;
|
||||
}
|
||||
.value.positive
|
||||
{
|
||||
color: #EC3440;
|
||||
}
|
||||
.chgC
|
||||
{
|
||||
padding: 0 10rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 20rpx;
|
||||
.icon
|
||||
{
|
||||
margin-right: 5rpx;
|
||||
width: 11rpx;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
}
|
||||
.chgC.down
|
||||
{
|
||||
border: 1rpx solid #345423;
|
||||
color: #345423;
|
||||
}
|
||||
.chgC.up
|
||||
{
|
||||
border: 1rpx solid #EC3440;
|
||||
color: #EC3440;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.timelineList
|
||||
{
|
||||
.item
|
||||
{
|
||||
display: flex;
|
||||
margin: 20rpx 0;
|
||||
border-radius: 10rpx;
|
||||
.impactC
|
||||
{
|
||||
.icon
|
||||
{
|
||||
width: 30rpx;
|
||||
height: auto;
|
||||
}
|
||||
.line
|
||||
{
|
||||
margin: 10rpx 0 -30rpx;
|
||||
width: 1rpx;
|
||||
}
|
||||
.line.up
|
||||
{
|
||||
border-left: 1rpx dashed #EC3440;
|
||||
}
|
||||
.line.down
|
||||
{
|
||||
border-left: 1rpx dashed #345423;
|
||||
}
|
||||
}
|
||||
.titleTypeC
|
||||
{
|
||||
.title
|
||||
{
|
||||
margin-right: 10rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #2A2A2A;
|
||||
}
|
||||
.eventType
|
||||
{
|
||||
padding: 5rpx 10rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
.eventType.up
|
||||
{
|
||||
background-color: #FFE7E9;
|
||||
color: #EC3440;
|
||||
}
|
||||
.eventType.down
|
||||
{
|
||||
background-color:#DEEED6;
|
||||
color: #345423;
|
||||
}
|
||||
}
|
||||
.progressBgC
|
||||
{
|
||||
background-color: #EFEFEF;
|
||||
margin: 0 15rpx;
|
||||
width: 200rpx;
|
||||
height: 10rpx;
|
||||
border-radius: 5rpx;
|
||||
overflow: hidden;
|
||||
.progress
|
||||
{
|
||||
height: 100%;
|
||||
border-radius: 5rpx;
|
||||
}
|
||||
.progress.up
|
||||
{
|
||||
background:linear-gradient(to right, #FF525D, #EC3440)
|
||||
}
|
||||
.progress.down
|
||||
{
|
||||
background:linear-gradient(to right, #537D3D, #345423)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
||||
223
pagesStock/components/gltd-view/gltd-view.vue
Normal file
223
pagesStock/components/gltd-view/gltd-view.vue
Normal file
@@ -0,0 +1,223 @@
|
||||
<template>
|
||||
<view class="managementTeamList">
|
||||
<block v-for="(item,index) in managementList" :key="index">
|
||||
<view v-if="item.list.length>0" class="positionNumC flex">
|
||||
<view class="position">{{item.key}}</view>
|
||||
<view class="num director">{{item.list.length}}人</view>
|
||||
</view>
|
||||
<block v-if="item.list.length>4&&!item.isExpand">
|
||||
<view class="item flex" v-for="(pitem,pindex) in item.list.slice(0,4)" :key="index">
|
||||
<view class="avatarC flexCenter relative director">
|
||||
{{getLastNameStr(pitem.name)}}
|
||||
<view :class="'sexC flexCenter absolute '+(pitem.gender=='女'?'female':'male')">
|
||||
<image v-if="pitem.gender=='女'" class="icon" src="/pagesStock/static/icon/female.png" mode="widthFix">
|
||||
</image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/male.png" mode="widthFix">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex1">
|
||||
<view class="flex">
|
||||
<view class="name">{{pitem.name}}</view>
|
||||
<view class="position">{{pitem.position_name}}</view>
|
||||
<view class="date flex1">任职日期:{{pitem.start_date}}</view>
|
||||
</view>
|
||||
<view class="educationAgeC flex">
|
||||
<view class="education label">{{pitem.education}}</view>
|
||||
<view class="age label">{{getAgeByBirthYear(pitem.birth_year)}}岁</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block v-else>
|
||||
<view class="item flex" v-for="(pitem,pindex) in item.list" :key="index">
|
||||
<view class="avatarC flexCenter relative director">
|
||||
{{getLastNameStr(pitem.name)}}
|
||||
<view :class="'sexC flexCenter absolute '+(pitem.gender=='女'?'female':'male')">
|
||||
<image v-if="pitem.gender=='女'" class="icon" src="/pagesStock/static/icon/female.png" mode="widthFix">
|
||||
</image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/male.png" mode="widthFix">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex1">
|
||||
<view class="flex">
|
||||
<view class="name">{{pitem.name}}</view>
|
||||
<view class="position">{{pitem.position_name}}</view>
|
||||
<view class="date flex1">任职日期:{{pitem.start_date}}</view>
|
||||
</view>
|
||||
<view class="educationAgeC flex">
|
||||
<view class="education label">{{pitem.education}}</view>
|
||||
<view class="age label">{{getAgeByBirthYear(pitem.birth_year)}}岁</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<view v-if="item.list.length>4" class="expandMoreC flexCenter" @click="clickExpandOrRetractManagement(index)">
|
||||
<view >{{item.isExpand?'收起':'展开查看'}}</view>
|
||||
<image class="arrow" src="/pagesStock/static/icon/lookMoreArrow.png" mode="widthFix">
|
||||
</image>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getAgeByBirthYear, getLastNameStr } from '@/utils/util';
|
||||
|
||||
export default {
|
||||
name:"gltd-view",
|
||||
data() {
|
||||
return {
|
||||
getLastNameStr:getLastNameStr, //获取姓
|
||||
getAgeByBirthYear:getAgeByBirthYear //获取年龄
|
||||
};
|
||||
},
|
||||
props:{
|
||||
managementList:Array
|
||||
},
|
||||
methods:{
|
||||
/**
|
||||
* 点击展开或收起管理团队人员
|
||||
*/
|
||||
clickExpandOrRetractManagement(index)
|
||||
{
|
||||
this.managementList[index].isExpand = !this.managementList[index].isExpand
|
||||
},
|
||||
},
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.managementTeamList {
|
||||
padding: 0 20rpx;
|
||||
.positionNumC {
|
||||
height: 70rpx;
|
||||
.position {
|
||||
margin-right: 11rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
.num {
|
||||
padding: 0 14rpx;
|
||||
line-height: 30rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.num.director {
|
||||
background-color: #99AFEC;
|
||||
}
|
||||
|
||||
.num.supervisor {
|
||||
background-color: #B499EC;
|
||||
}
|
||||
|
||||
.num.other {
|
||||
background-color: #B5B5C9;
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
background-color: #FAFAFC;
|
||||
margin-bottom: 20rpx;
|
||||
padding: 20rpx 25rpx 20rpx 20rpx;
|
||||
border-radius: 10rpx;
|
||||
|
||||
.avatarC {
|
||||
margin-right: 18rpx;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
border-radius: 50%;
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
|
||||
.sexC {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
border-radius: 50%;
|
||||
border: solid 2rpx white;
|
||||
|
||||
.icon {
|
||||
width: 16rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.sexC.female {
|
||||
background-color: #FA5A93;
|
||||
}
|
||||
|
||||
.sexC.male {
|
||||
background-color: #3E6CFC;
|
||||
}
|
||||
}
|
||||
|
||||
.avatarC.director {
|
||||
background-color: #99AFEC;
|
||||
}
|
||||
|
||||
.avatarC.supervisor {
|
||||
background-color: #B499EC;
|
||||
}
|
||||
|
||||
.avatarC.other {
|
||||
background-color: #B5B5C9;
|
||||
}
|
||||
|
||||
.name {
|
||||
margin-right: 13rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.position {
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.date {
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.educationAgeC {
|
||||
margin-top: 8rpx;
|
||||
|
||||
.label {
|
||||
margin-right: 10rpx;
|
||||
background-color: #F1F1F1;
|
||||
line-height: 30rpx;
|
||||
padding: 0 16rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.expandMoreC {
|
||||
height: 80rpx;
|
||||
border-bottom: solid 1rpx #E7E7E7;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: #C9C9C9;
|
||||
|
||||
.arrow {
|
||||
margin-left: 18rpx;
|
||||
width: 11rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
298
pagesStock/components/gqjg-view/gqjg-view.vue
Normal file
298
pagesStock/components/gqjg-view/gqjg-view.vue
Normal file
@@ -0,0 +1,298 @@
|
||||
<template>
|
||||
<view class="com_list">
|
||||
<view class="item">
|
||||
<view class="flex">
|
||||
<view class="title">实际控制人</view>
|
||||
</view>
|
||||
<view v-if="actualControlInfo" class="com_info">
|
||||
<view class="left">
|
||||
<view class="l_top">{{actualControlInfo.actual_controller_name}}</view>
|
||||
<view class="l_bottom">
|
||||
<view class="l_b_left">{{actualControlInfo.control_type}}</view>
|
||||
<view class="l_b_right">截至 {{actualControlInfo.end_date}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="right">
|
||||
<view class="r_top">控制比例</view>
|
||||
<view v-if="actualControlInfo.holding_ratio" class="r_center">{{actualControlInfo.holding_ratio.toFixed(2)}}%</view>
|
||||
<view class="r_bottom">{{getNumStr(actualControlInfo.holding_shares)}}股</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex">
|
||||
<view class="title">股权集中度</view>
|
||||
</view>
|
||||
<view class="guquan">
|
||||
<view v-if="concentrationList.length>0" class="top">{{concentrationList[0].end_date}}</view>
|
||||
<view class="bottom">
|
||||
<view class="b_item flexWrap">
|
||||
<view v-for="(item, index) in concentrationList" :key="index" class="item_info flex">
|
||||
<view class="left flex1">{{item.stat_item}}</view>
|
||||
<view class="right flex">
|
||||
<view class="bili">{{item.holding_ratio.toFixed(2)}}%</view>
|
||||
<view v-if="item.ratio_change!=0" :class="'shengjiang flex '+(getRateUpOrDown(item.ratio_change)?'down':'up')" >
|
||||
<image v-if="getRateUpOrDown(item.ratio_change)" class="icon" src="/pagesStock/static/icon/downArrow.png"
|
||||
mode="widthFix"></image>
|
||||
<image v-else class="icon" src="/pagesStock/static/icon/upArrow.png" mode="widthFix"></image>
|
||||
<view>{{getRateStr(item.ratio_change)}}%</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex">
|
||||
<view class="title">十大股东</view>
|
||||
</view>
|
||||
<view class="gudong">
|
||||
<view class="back">
|
||||
<view class="top action">
|
||||
<view class="head">股东名称</view>
|
||||
<view class="head">股东类型</view>
|
||||
<view class="head" style="text-align: center;">持股数量</view>
|
||||
<view class="head" style="text-align: center;">持股比例</view>
|
||||
<view class="head" style="text-align: center;">股份性质</view>
|
||||
</view>
|
||||
<view v-for="(item, index) in shareholdersList" :key="index" class="top" :class="{action: index % 2 == 1}">
|
||||
<view class="child">{{item.shareholder_name}}</view>
|
||||
<view class="child">{{item.shareholder_type?item.shareholder_type:'-'}}</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;">{{item.total_share_ratio}}%</view>
|
||||
<view class="nature">{{item.share_nature}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex">
|
||||
<view class="title">十大流通股东 </view>
|
||||
</view>
|
||||
<view class="gudong">
|
||||
<view class="back">
|
||||
<view class="top action">
|
||||
<view class="head">股东名称</view>
|
||||
<view class="head">股东类型</view>
|
||||
<view class="head" style="text-align: center;">持股数量</view>
|
||||
<view class="head" style="text-align: center;">流通股比例</view>
|
||||
<view class="head" style="text-align: center;">股份性质</view>
|
||||
</view>
|
||||
<view v-for="(item, index) in circulatingShareholdersList" :key="index" class="top" :class="{action: index % 2 == 1}">
|
||||
<view class="child">{{item.shareholder_name}}</view>
|
||||
<view class="child">{{item.shareholder_type?item.shareholder_type:'-'}}</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;">{{item.total_share_ratio}}%</view>
|
||||
<view class="nature">{{item.share_nature}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getNumStr, getRateStr, getRateUpOrDown } from '@/utils/util';
|
||||
|
||||
export default {
|
||||
name: "gqjg-view",
|
||||
data() {
|
||||
return {
|
||||
getNumStr:getNumStr,
|
||||
getRateUpOrDown:getRateUpOrDown,
|
||||
getRateStr:getRateStr
|
||||
};
|
||||
},
|
||||
props:{
|
||||
actualControlInfo:Object, //实际控制人信息
|
||||
concentrationList:Array, //股权集中度列表
|
||||
shareholdersList:Array, //十大股东列表
|
||||
circulatingShareholdersList:Array, //十大流通股东列表
|
||||
competitivePositionInfo:Object, //竞争地位信息
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.com_list {
|
||||
margin-top: 38rpx;
|
||||
padding: 0 20rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.title {
|
||||
color: #2B2B2B;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.item {
|
||||
.com_info {
|
||||
margin: 20rpx 0;
|
||||
background-color: #FAFAFC;
|
||||
border-radius: 10rpx;
|
||||
padding: 25rpx 20rpx;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
|
||||
font-weight: 500;
|
||||
|
||||
.left {
|
||||
.l_top {
|
||||
color: #666666;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.l_bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 10rpx;
|
||||
|
||||
.l_b_left {
|
||||
background-color: #99AFEC;
|
||||
border-radius: 10rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: white;
|
||||
font-size: 20rpx;
|
||||
padding: 5rpx;
|
||||
}
|
||||
|
||||
.l_b_right {
|
||||
margin-left: 10rpx;
|
||||
color: #999999;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
color: #71675D;
|
||||
font-size: 20rpx;
|
||||
text-align: right;
|
||||
|
||||
.r_center {
|
||||
color: #BB8520;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
margin: 5rpx 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.guquan {
|
||||
margin: 25rpx 0;
|
||||
font-weight: 500;
|
||||
background-color: #FAFAFC;
|
||||
border-radius: 10rpx;
|
||||
padding: 25rpx 13rpx;
|
||||
box-sizing: border-box;
|
||||
|
||||
.top {
|
||||
color: #999999;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
display: flex;
|
||||
.b_item {
|
||||
.item_info {
|
||||
margin: 15rpx 0;
|
||||
margin-right: 15rpx;
|
||||
width: calc((100% - 15rpx)/2);
|
||||
.left {
|
||||
color: #666666;
|
||||
font-size: 20rpx;
|
||||
}
|
||||
.right {
|
||||
height: 35rpx;
|
||||
font-size: 20rpx;
|
||||
|
||||
.bili {
|
||||
color: #BB8520;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.shengjiang {
|
||||
margin-left: 10rpx;
|
||||
padding: 0 5rpx;
|
||||
height: 30rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 18rpx;
|
||||
.icon {
|
||||
width: 11rpx;
|
||||
height: 25rpx;
|
||||
margin-right: 4rpx;
|
||||
}
|
||||
}
|
||||
.shengjiang.up
|
||||
{
|
||||
background-color: #FFDFE1;
|
||||
color: #EC3440;
|
||||
}
|
||||
.shengjiang.down
|
||||
{
|
||||
background-color: #C6F6D5;
|
||||
color: #345423;
|
||||
}
|
||||
}
|
||||
}
|
||||
.item_info:nth-child(2n)
|
||||
{
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.gudong {
|
||||
margin-top: 25rpx;
|
||||
|
||||
.back {
|
||||
margin: 25rpx 0;
|
||||
font-weight: 500;
|
||||
border-radius: 10rpx;
|
||||
color: #666666;
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
align-items: center;
|
||||
grid-template-columns: 166rpx repeat(4, 1fr);
|
||||
background-color: white;
|
||||
height: 60rpx;
|
||||
&.action {
|
||||
background-color: #FAFAFC;
|
||||
}
|
||||
.head
|
||||
{
|
||||
padding: 0 10rpx;
|
||||
font-size: 22rpx;
|
||||
}
|
||||
.child {
|
||||
padding: 0 10rpx;
|
||||
font-size: 18rpx;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.nature
|
||||
{
|
||||
background-color: #FFF7E9;
|
||||
margin: 10rpx;
|
||||
line-height: 36rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 18rpx;
|
||||
color: #E0AC4A;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
99
pagesStock/components/gsxx-view/gsxx-view.vue
Normal file
99
pagesStock/components/gsxx-view/gsxx-view.vue
Normal file
@@ -0,0 +1,99 @@
|
||||
<template>
|
||||
<view v-if="stockBasicInfo" class="businessInfoList">
|
||||
<view class="section">工商信息</view>
|
||||
<view class="infoC">
|
||||
<view class="infoItem flex">
|
||||
<view class="title">统一信用代码</view>
|
||||
<view class="content code flex1 rightAlign">{{stockBasicInfo.credit_code}}</view>
|
||||
</view>
|
||||
<view class="infoItem flex">
|
||||
<view class="title">公司规模</view>
|
||||
<view class="content flex1 rightAlign">{{stockBasicInfo.company_size}}</view>
|
||||
</view>
|
||||
<view class="infoItem flex">
|
||||
<view class="title">注册地址</view>
|
||||
<view class="content flex1 rightAlign">{{stockBasicInfo.reg_address}}</view>
|
||||
</view>
|
||||
<view class="infoItem flex">
|
||||
<view class="title">办公地址</view>
|
||||
<view class="content flex1 rightAlign">{{stockBasicInfo.office_address}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="section">服务机构</view>
|
||||
<view class="infoC">
|
||||
<view class="title infoItem">会计师事务所</view>
|
||||
<view class="content infoItem">{{stockBasicInfo.accounting_firm}}</view>
|
||||
<view class="title infoItem">律师事务所</view>
|
||||
<view class="content infoItem">{{stockBasicInfo.law_firm}}</view>
|
||||
</view>
|
||||
<view class="section">主营业务</view>
|
||||
<view class="infoC mainBussiness">
|
||||
<text class="title">{{stockBasicInfo.main_business}}</text>
|
||||
</view>
|
||||
<view class="section">经营范围</view>
|
||||
<view class="infoC">
|
||||
<text class="title">{{stockBasicInfo.business_scope}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name:"gsxx-view",
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
props:{
|
||||
stockBasicInfo:Object
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.businessInfoList {
|
||||
padding: 0 20rpx;
|
||||
|
||||
.section {
|
||||
line-height: 72rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #2B2B2B;
|
||||
}
|
||||
|
||||
.infoC {
|
||||
background-color: #FAFAFC;
|
||||
border-radius: 10rpx;
|
||||
padding: 12rpx 20rpx;
|
||||
|
||||
.infoItem {
|
||||
line-height: 46rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: #2A2A2A;
|
||||
}
|
||||
|
||||
.content.code {
|
||||
color: #BB8520;
|
||||
}
|
||||
|
||||
.content.rightAlign {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.infoC.mainBussiness {
|
||||
padding: 20rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
171
pagesStock/components/news-view/news-view.vue
Normal file
171
pagesStock/components/news-view/news-view.vue
Normal file
@@ -0,0 +1,171 @@
|
||||
<template>
|
||||
<view>
|
||||
<template v-if="showType == 0">
|
||||
<view style="padding: 20rpx;">
|
||||
<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;">
|
||||
<image style="width: 25rpx; height: 24rpx;" src="/pagesStock/static/icon/news-search.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<input style="flex: 1; height: 100%; font-size: 22rpx; color: #999; margin-right: 20rpx;" type="text" v-model="keywords" placeholder="搜索相关新闻..." confirm-type="search" @confirm="clickSearch()"/>
|
||||
</view>
|
||||
|
||||
<view class="newsList">
|
||||
<view class="item" style="border: 1rpx solid #E7E7E7; border-radius: 10rpx; padding: 0 27rpx; margin: 20rpx 0;" v-for="(item,index) in newsList" :key="index" @click="clickNewsItem(item)">
|
||||
<view style="color: #2B2B2B; font-size: 26rpx; font-weight: bold; margin-top: 20rpx;">{{item.title}}</view>
|
||||
<view style="display: flex; align-items: center; color: #999999; font-size: 22rpx; font-weight: 400;">
|
||||
<image style="width: 20rpx; height: 20rpx; margin-right: 5rpx;" src="/pagesStock/static/icon/newsTime.png" mode="widthFix"></image>
|
||||
<text>{{getLocalDate(item.created_at)}}</text>
|
||||
<text style="margin: 10rpx;">|</text>
|
||||
<image style="width: 18rpx; height: 13rpx; margin-right: 5rpx;" src="/pagesStock/static/icon/newsEyes.png" mode="widthFix"></image>
|
||||
<text>{{item.view_count}}</text>
|
||||
<text style="margin: 10rpx;">|</text>
|
||||
<image style="width: 16rpx; height: 19rpx; margin-right: 5rpx;" src="/pagesStock/static/icon/newsFire.png" mode="widthFix"></image>
|
||||
<text>{{item.hot_score}}</text>
|
||||
</view>
|
||||
|
||||
<view class="labelList flexWrap">
|
||||
<view class="label eventType">{{item.event_type}}</view>
|
||||
<view class="label investScore">投资分:{{item.invest_score}}</view>
|
||||
<view v-for="(kitem, kindex) in item.keywords" :key="kindex" style="background-color: #FFFAF0; border-radius: 3rpx; padding: 2rpx 10rpx; overflow: hidden; font-size: 18rpx; color: #E9AE3E; font-weight: 400; margin-right: 10rpx;">{{kitem}}</view>
|
||||
</view>
|
||||
|
||||
<view style="margin: 20rpx 0; font-size: 22rpx; color: #71675D; font-weight: 500;">{{item.description}}</view>
|
||||
|
||||
<view v-if="item.related_avg_chg" style="height: 1rpx; background-color: #E7E7E7;"></view>
|
||||
|
||||
<view v-if="item.related_avg_chg" class="relatedChgC flex" >
|
||||
<text style="font-weight: bold; color: #2B2B2B;">相关涨跌:</text>
|
||||
<text>平均 </text>
|
||||
<text :class="'chg '+(getRateUpOrDown(item.related_avg_chg)?'down':'up')">{{getChgRateStr(item.related_avg_chg)}}%</text>
|
||||
<text style="margin: 0 20rpx;">|</text>
|
||||
<text>最大 </text>
|
||||
<text :class="'chg '+(getRateUpOrDown(item.related_max_chg)?'down':'up')">{{getChgRateStr(item.related_max_chg)}}%</text>
|
||||
<text style="margin: 0 20rpx;">|</text>
|
||||
<text>周 </text>
|
||||
<text :class="'chg '+(getRateUpOrDown(item.related_week_chg)?'down':'up')">{{getChgRateStr(item.related_week_chg)}}%</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<template v-if="showType == 1">
|
||||
<view style="padding: 20rpx;" v-for="(item,index) in announcementList" :key="index" @click="clickAnnouncementItem(item)">
|
||||
<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="color: #2B2B2B; font-size: 26rpx; font-weight: bold; margin-top: 20rpx;">{{item.title}}</view>
|
||||
<view style="display: flex; align-items: center; color: #71675D; font-size: 22rpx; font-weight: 500; margin: 20rpx 0;">
|
||||
<text style="color: #E9AE3E; font-size: 18rpx; background-color: #FFFAF0; border-radius: 3rpx; padding: 2rpx 10rpx; margin-right: 14rpx;">公告</text>
|
||||
<text>{{item.announce_date}}</text>
|
||||
<text style="margin: 0 20rpx;">|</text>
|
||||
<text>{{item.format}}</text>
|
||||
<text style="margin: 0 20rpx;">|</text>
|
||||
<text>{{item.file_size}}KB</text>
|
||||
</view>
|
||||
</view>
|
||||
<view style="padding: 4rpx 10rpx; background-color: #F2C369; border-radius: 10rpx; color: #2B2B2B; font-size: 22rpx; margin-left: 10rpx;">查看</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getChgRateStr, getLocalDate, getRateUpOrDown } from '@/utils/util';
|
||||
|
||||
export default {
|
||||
name:"news-view",
|
||||
data() {
|
||||
return {
|
||||
showType: 0,
|
||||
keywords:'', //搜索关键字
|
||||
getChgRateStr:getChgRateStr,
|
||||
getRateUpOrDown:getRateUpOrDown,
|
||||
getLocalDate:getLocalDate
|
||||
};
|
||||
},
|
||||
props: {// 0 新闻动态 1 公司公告
|
||||
type: Number,
|
||||
newsList:Array, //新闻动态数组
|
||||
announcementList:Array, //公司公告数组
|
||||
},
|
||||
watch:{
|
||||
type:{
|
||||
handler(newVal)
|
||||
{
|
||||
this.showType = newVal
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 点击搜索
|
||||
*/
|
||||
clickSearch() {
|
||||
this.$emit('search',this.keywords)
|
||||
},
|
||||
/**
|
||||
* 点击查看新闻动态
|
||||
* @param {Object} item
|
||||
*/
|
||||
clickNewsItem(item) {
|
||||
this.$emit('newsDetails',item)
|
||||
},
|
||||
/**
|
||||
* 点击查看公司公告
|
||||
* @param {Object} item
|
||||
*/
|
||||
clickAnnouncementItem(item) {
|
||||
this.$emit('announcementDetails',item)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.newsList
|
||||
{
|
||||
.item
|
||||
{
|
||||
.labelList
|
||||
{
|
||||
.label
|
||||
{
|
||||
margin-right: 10rpx;
|
||||
padding: 0 7rpx;
|
||||
line-height: 28rpx;
|
||||
border-radius: 3rpx;
|
||||
font-size: 18rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
.eventType
|
||||
{
|
||||
background-color: #EFF6FF;
|
||||
color: #60A5FA;
|
||||
}
|
||||
.investScore
|
||||
{
|
||||
background-color: #F2EEFF;
|
||||
color: #A78BFA;
|
||||
}
|
||||
}
|
||||
.relatedChgC
|
||||
{
|
||||
margin: 20rpx 0;
|
||||
color: #71675D;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
|
||||
.chg.up
|
||||
{
|
||||
color: #EC3440;
|
||||
}
|
||||
.chg.down
|
||||
{
|
||||
color: #1DB26F;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
106
pagesStock/components/ywjg-view/ywjg-view.vue
Normal file
106
pagesStock/components/ywjg-view/ywjg-view.vue
Normal file
@@ -0,0 +1,106 @@
|
||||
<template>
|
||||
<view class="ywjg_list">
|
||||
<view>
|
||||
<view style="margin: 25rpx 20rpx; color: #2B2B2B; font-size: 28rpx; font-weight: bold;">业务结构分析</view>
|
||||
<view v-for="(item, index) in businessStructureList" :key="index" class="ywjg_item_1">
|
||||
<view style="display: flex; align-items: center;">
|
||||
<view style="font-size: 28rpx; font-weight: bold; margin-right: 10rpx;">
|
||||
{{item.business_name}}
|
||||
</view>
|
||||
<view v-if="item.is_hexin"
|
||||
style="background-color: #F2C369; border-radius: 5rpx; font-size: 20rpx; padding: 0 5rpx;">
|
||||
核心业务</view>
|
||||
</view>
|
||||
<view class="flex between" style="font-weight: 500;">
|
||||
<view class="flex" style="color: #F2C369; font-size: 20rpx;">
|
||||
<view style="border: 1rpx solid #F2C369; border-radius: 5rpx; padding: 0 10rpx;">
|
||||
营收占比:{{item.financial_metrics.revenue_ratio}}%</view>
|
||||
<view v-if="item.financial_metrics.gross_margin"
|
||||
style="border: 1rpx solid #F2C369; border-radius: 5rpx; padding: 0 10rpx; margin-left: 10rpx;">
|
||||
毛利率:{{item.financial_metrics.gross_margin}}%</view>
|
||||
<view v-else
|
||||
style="border: 1rpx solid #F2C369; border-radius: 5rpx; padding: 0 10rpx; margin-left: 10rpx;">
|
||||
毛利率:-</view>
|
||||
</view>
|
||||
<view>
|
||||
<view style="color: #999999; font-size: 24rpx;">营业收入</view>
|
||||
<view style="font-weight: bold; font-size: 30rpx; color: #BB8520; margin-top: 10rpx;">{{item.revenue}}{{item.revenue_unit}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="display: flex;">
|
||||
<view v-if="item.growth_metrics.revenue_growth" :class="'growthRate '+(getRateUpOrDown(item.growth_metrics.revenue_growth)?'down':'up')">
|
||||
增长:{{item.growth_metrics.revenue_growth}}%
|
||||
</view>
|
||||
<view v-else class="growthRate down">增长:-</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="margin: 25rpx 20rpx; color: #2B2B2B; font-size: 28rpx; font-weight: bold;">业务板块详情</view>
|
||||
<view style="font-weight: 500;">
|
||||
<view v-for="(item,index) in businessSegmentList" :key="index"
|
||||
style="background-color: #FAFAFC; color: #2B2B2B; font-size: 22rpx; margin: 20rpx; background-color: #FAFAFC; border-radius: 10rpx; padding: 25rpx 20rpx;">
|
||||
<view style="font-size: 24rpx;">{{item.segment_name}}</view>
|
||||
<view style="color: #BB8520; font-weight: bold; margin: 10rpx 0;">业务描述</view>
|
||||
<view style="color: #71675D;">{{item.segment_description}}</view>
|
||||
<view style="color: #BB8520; font-weight: bold; margin: 10rpx 0;">竞争地位</view>
|
||||
<view style="color: #71675D;">{{item.competitive_position}}</view>
|
||||
<view style="color: #BB8520; font-weight: bold; margin: 10rpx 0;">未来潜力</view>
|
||||
<view style="color: #71675D;">{{item.future_potential}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getRateUpOrDown } from '@/utils/util';
|
||||
|
||||
export default {
|
||||
name: "ywjg-view",
|
||||
data() {
|
||||
return {
|
||||
getRateUpOrDown:getRateUpOrDown
|
||||
};
|
||||
|
||||
},
|
||||
props:{
|
||||
businessStructureList:Array, //业务结构分析
|
||||
businessSegmentList:Array ,//业务板块详情
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.ywjg_list {
|
||||
color: #2B2B2B;
|
||||
|
||||
.title {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.ywjg_item_1 {
|
||||
font-weight: 500;
|
||||
margin: 20rpx;
|
||||
background-color: #FAFAFC;
|
||||
border-radius: 10rpx;
|
||||
padding: 25rpx 20rpx;
|
||||
.growthRate
|
||||
{
|
||||
padding: 0 10rpx;
|
||||
line-height: 30rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 20rpx;
|
||||
color: white;
|
||||
}
|
||||
.growthRate.up
|
||||
{
|
||||
background-color: #EC3440;
|
||||
}
|
||||
.growthRate.down
|
||||
{
|
||||
background-color: #345423;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
384
pagesStock/components/zlfx-view/zlfx-view.vue
Normal file
384
pagesStock/components/zlfx-view/zlfx-view.vue
Normal file
@@ -0,0 +1,384 @@
|
||||
<template>
|
||||
<view class="strategicAnalysisList">
|
||||
<view class="section">核心定位</view>
|
||||
<view v-if="qualitativeAnalysisInfo" class="corePositionC">{{qualitativeAnalysisInfo.core_positioning.one_line_intro}}</view>
|
||||
<view class="section">投资亮点</view>
|
||||
<view v-if="qualitativeAnalysisInfo" class="corePositionC">{{qualitativeAnalysisInfo.core_positioning.investment_highlights}}</view>
|
||||
<!-- <view class="highlightsList">
|
||||
<view class="item flex">
|
||||
<image class="icon" src="" mode="widthFix"></image>
|
||||
<view class="flex1">
|
||||
<view class="title">综合金融优势</view>
|
||||
<view class="content">背靠平安集团,客户资源共享和交叉销售带来持续增长动力</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="section">商业模式</view>
|
||||
<view v-if="qualitativeAnalysisInfo" class="corePositionC">{{qualitativeAnalysisInfo.core_positioning.business_model_desc}}</view>
|
||||
<!-- <view class="infoC">
|
||||
<view class="title">零售银行核心驱动</view>
|
||||
<view class="content">以零售银行业务为核心驱动,依托平安集团综合金融平台,构建智能化、移动化、综合化三位一体发展模式。</view>
|
||||
</view>
|
||||
<view class="infoC">
|
||||
<view class="title">科技赋能转型</view>
|
||||
<view class="content">通过科技赋能实现业务流程数字化,降本增效的同时提升客户体验。</view>
|
||||
<view class="labelList flexWrap">
|
||||
<view class="labelC flex">
|
||||
<image class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix">
|
||||
</image>
|
||||
<view>AI应用深化</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="infoC">
|
||||
<view class="title">对公业务聚焦</view>
|
||||
<view class="content">聚焦供应链金融和产业互联网,服务实体经济高质量发展。</view>
|
||||
</view>
|
||||
<view class="section">战略分析</view>
|
||||
<view v-if="qualitativeAnalysisInfo" class="infoC">
|
||||
<view class="title">战略方向</view>
|
||||
<view class="content">{{qualitativeAnalysisInfo.strategy.strategy_description}}</view>
|
||||
</view>
|
||||
<view v-if="qualitativeAnalysisInfo" class="infoC">
|
||||
<view class="title">战略举措</view>
|
||||
<view class="content">{{qualitativeAnalysisInfo.strategy.strategic_initiatives}}</view>
|
||||
</view> -->
|
||||
|
||||
<view class="section flex">
|
||||
<view>竞争地位分析</view>
|
||||
<view class="industryRankC flex" @click="clickIndustryRank()">
|
||||
<image class="icon" src="/pagesStock/static/icon/industryRank.png" mode="widthFix">
|
||||
</image>
|
||||
<view v-if="industryRankInfo">行业排名 {{industryRankInfo.industry_rank}}/{{industryRankInfo.total_companies}}</view>
|
||||
<!-- <image src="/arrow" mode=""></image> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="subSection">主要竞争对手</view>
|
||||
<view class="mainCompetitorList flexWrap">
|
||||
<view class="item flex" v-for="(item,index) in mainCompetitorsList" :key="index">
|
||||
<image class="icon" src="/pagesStock/static/icon/existStatus.png" mode="widthFix"></image>
|
||||
<view>{{item}}</view>
|
||||
</view>
|
||||
</view>
|
||||
<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 style="width:660rpx; height:500rpx">
|
||||
<l-echart ref="chartRef"></l-echart>
|
||||
</view>
|
||||
<view v-if="competitivePositionInfo" class="infoC">
|
||||
<view class="title">竞争优势</view>
|
||||
<view class="content">{{competitivePositionInfo.analysis.competitive_advantages}}</view>
|
||||
</view>
|
||||
<view v-if="competitivePositionInfo" class="infoC">
|
||||
<view class="title">竞争劣势</view>
|
||||
<view class="content">{{competitivePositionInfo.analysis.competitive_disadvantages}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const echarts = require('../../../uni_modules/lime-echart/static/echarts.min.js');
|
||||
|
||||
export default {
|
||||
name:"zlfx-view",
|
||||
data() {
|
||||
return {
|
||||
option:{
|
||||
title: {
|
||||
show:false
|
||||
},
|
||||
legend: {
|
||||
show:false
|
||||
},
|
||||
tooltip:{
|
||||
show:true,
|
||||
triggerOn:'mousemove'
|
||||
},
|
||||
radar: {
|
||||
indicator: [
|
||||
{ name: '市场地位', max: 100 },
|
||||
{ name: '技术实力', max: 100 },
|
||||
{ name: '品牌价值', max: 100 },
|
||||
{ name: '运营效率', max: 100 },
|
||||
{ name: '财务健康', max: 100 },
|
||||
{ name: '创新能力', max: 100 },
|
||||
{ name: '风险控制', max: 100 },
|
||||
{ name: '成长潜力', max: 100 }
|
||||
],
|
||||
shape: 'polygon',
|
||||
splitNumber: 5,
|
||||
axisName: {
|
||||
color: '#54555A'
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: ['#CFD2D7']
|
||||
}
|
||||
},
|
||||
splitArea: {
|
||||
areaStyle:{
|
||||
color:['#F4F6FA','white']
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: '#CFD2D7'
|
||||
}
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: 'Beijing',
|
||||
type: 'radar',
|
||||
lineStyle: {
|
||||
width:1
|
||||
},
|
||||
data: [],
|
||||
symbol: 'circle',
|
||||
symbolSize: 4,
|
||||
label:{
|
||||
show:true
|
||||
},
|
||||
itemStyle: {
|
||||
color: '#5070DD'
|
||||
},
|
||||
areaStyle: {
|
||||
opacity: 0.1
|
||||
}
|
||||
},
|
||||
]
|
||||
},
|
||||
};
|
||||
},
|
||||
props:{
|
||||
qualitativeAnalysisInfo:Object, //定性分析
|
||||
competitivePositionInfo:Object, //竞争地位信息
|
||||
mainCompetitorsList:Array, //主要竞争对手
|
||||
industryRankInfo:Object, //行业排名数据
|
||||
scoreList:Array, //
|
||||
data:Array,
|
||||
},
|
||||
watch:{
|
||||
data(newValue)
|
||||
{
|
||||
this.option.series[0].data = newValue
|
||||
this.init()
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
async init() {
|
||||
// chart 图表实例不能存在data里
|
||||
const chart = await this.$refs.chartRef.init(echarts);
|
||||
// chart.on('click',function (params) {
|
||||
// console.log(params)
|
||||
// })
|
||||
console.log(chart)
|
||||
chart.setOption(this.option)
|
||||
},
|
||||
clickIndustryRank()
|
||||
{
|
||||
this.$emit('rank')
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.strategicAnalysisList {
|
||||
padding: 0 20rpx;
|
||||
.section {
|
||||
line-height: 72rpx;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
color: #2B2B2B;
|
||||
|
||||
.industryRankC {
|
||||
margin-left: 10rpx;
|
||||
padding: 0 12rpx;
|
||||
line-height: 38rpx;
|
||||
border: solid 1rpx #F2C369;
|
||||
border-radius: 19rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #F3C368;
|
||||
|
||||
.icon {
|
||||
margin-right: 5rpx;
|
||||
width: 17rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.corePositionC {
|
||||
background-color: #FAFAFC;
|
||||
padding: 20rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: 500;
|
||||
color: #2A2A2A;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
|
||||
.highlightsList {
|
||||
.item {
|
||||
background-color: #FAFAFC;
|
||||
margin-bottom: 20rpx;
|
||||
padding: 20rpx;
|
||||
border-radius: 10rpx;
|
||||
|
||||
.icon {
|
||||
width: 81rpx;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #2A2A2A;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.infoC {
|
||||
background-color: #FAFAFC;
|
||||
border-radius: 10rpx;
|
||||
padding: 12rpx 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
.infoItem {
|
||||
line-height: 40rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #2A2A2A;
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 10rpx;
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.content.code {
|
||||
color: #BB8520;
|
||||
}
|
||||
|
||||
.content.rightAlign {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.labelList {
|
||||
margin-top: 10rpx;
|
||||
|
||||
.labelC {
|
||||
background-color: #FFF7E9;
|
||||
margin: 0 12rpx 12rpx 0;
|
||||
padding: 0 10rpx;
|
||||
line-height: 38rpx;
|
||||
border: solid 1rpx #F2C369;
|
||||
border-radius: 20rpx;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #F3C368;
|
||||
|
||||
.icon {
|
||||
margin-right: 3rpx;
|
||||
width: 16rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.subSection {
|
||||
line-height: 60rpx;
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
color: #2A2A2A;
|
||||
}
|
||||
|
||||
.mainCompetitorList {
|
||||
.item {
|
||||
background-color: #FFF7E9;
|
||||
margin: 0 20rpx 20rpx 0;
|
||||
padding: 0 16rpx;
|
||||
line-height: 38rpx;
|
||||
border-radius: 20rpx;
|
||||
border: solid 1rpx #F2C369;
|
||||
font-size: 22rpx;
|
||||
font-weight: 500;
|
||||
color: #F3C368;
|
||||
|
||||
.icon {
|
||||
margin-right: 3rpx;
|
||||
width: 16rpx;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
309
pagesStock/components/zysj-view/zysj-view.vue
Normal file
309
pagesStock/components/zysj-view/zysj-view.vue
Normal file
@@ -0,0 +1,309 @@
|
||||
<template>
|
||||
<view>
|
||||
<block v-if="stockInfo">
|
||||
<view class="flex"
|
||||
style="font-size: 22rpx; color: #999999; font-weight: 500; margin: 20rpx; padding: 20rpx; box-sizing: border-box ;border: 1rpx solid #F5F5F5; border-radius: 10rpx;">
|
||||
<view style="width: 195rpx;">
|
||||
<view style="font-weight: bold; color: #1DB26F; font-size: 30rpx;">{{stockInfo.growth_rates.profit_growth?(getChgRateStr(stockInfo.growth_rates.profit_growth)+'%'):'-'}}</view>
|
||||
<view style="margin-top: 10rpx;">利润增长</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="flex">
|
||||
<text
|
||||
style="font-weight: bold; color: #070707; font-size: 26rpx; margin-right: 10rpx;">成长能力</text>
|
||||
<text
|
||||
style="color: #A97F53; font-size: 20rpx; padding: 2rpx 5rpx; background-color: #F8F4ED; border: 1rpx solid #F1E7D8; border-radius: 3rpx;">增长动力</text>
|
||||
</view>
|
||||
<view style="margin-top: 10rpx;">
|
||||
<text>营收增长</text>
|
||||
<text style="color: #1DB26F; margin: 0 10rpx;">{{getChgRateStr(stockInfo.growth_rates.revenue_growth)}}%</text>
|
||||
<text :style="'color:'+getGrowthStatus(stockInfo.growth_rates.profit_growth).color">({{stockInfo.growth_rates.profit_growth?(getGrowthStatus(stockInfo.growth_rates.profit_growth).text):'-'}})</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex" style="font-size: 22rpx; color: #999999; font-weight: 500; margin: 20rpx; padding: 20rpx; border: 1rpx solid #F5F5F5; border-radius: 10rpx;">
|
||||
<view style="width: 195rpx;">
|
||||
<view style="font-weight: bold; color: #F59B38; font-size: 30rpx;">{{getChgRateStr(stockInfo.key_metrics.roe)}}%</view>
|
||||
<view style="margin-top: 10rpx;">ROE</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="flex">
|
||||
<text style="font-weight: bold; color: #070707; font-size: 26rpx; margin-right: 10rpx;">盈利与回报</text>
|
||||
<text style="color: #A97F53; font-size: 20rpx; padding: 2rpx 5rpx; background-color: #F8F4ED; border: 1rpx solid #F1E7D8; border-radius: 3rpx;">赚钱能力</text>
|
||||
</view>
|
||||
<view style="margin-top: 10rpx;">
|
||||
<text :style="'color: '+getROEStatus(stockInfo.key_metrics.roe).color">{{getROEStatus(stockInfo.key_metrics.roe).text}}</text>
|
||||
<text style="margin-left: 10rpx;">净利率 {{stockInfo.key_metrics.net_margin.toFixed(2)}}%|毛利率 {{stockInfo.key_metrics.gross_margin?(getChgRateStr(stockInfo.key_metrics.gross_margin)+'%'):'-'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="financialMetricsInfo" class="flex"
|
||||
style="font-size: 22rpx; color: #999999; font-weight: 500; margin: 20rpx; padding: 20rpx;border: 1rpx solid #F5F5F5; border-radius: 10rpx;">
|
||||
<view style="width: 195rpx;">
|
||||
<view style="font-weight: bold; color: #EC3440; font-size: 30rpx;">{{financialMetricsInfo.solvency.asset_liability_ratio?financialMetricsInfo.solvency.asset_liability_ratio.toFixed(2):'-'}}%</view>
|
||||
<view style="margin-top: 10rpx;">资产负债率</view>
|
||||
</view>
|
||||
<view>
|
||||
<view class="flex">
|
||||
<text style="font-weight: bold; color: #070707; font-size: 26rpx; margin-right: 10rpx;">风险与运营</text>
|
||||
<text style="color: #A97F53; font-size: 20rpx; padding: 2rpx 5rpx; background-color: #F8F4ED; border: 1rpx solid #F1E7D8; border-radius: 3rpx;">安全边际</text>
|
||||
</view>
|
||||
<view style="margin-top: 10rpx;">
|
||||
<text :style="'color: '+(getDebtStatusText(financialMetricsInfo.solvency.asset_liability_ratio).color)">{{getDebtStatusText(financialMetricsInfo.solvency.asset_liability_ratio).text}}</text>
|
||||
<text style="margin-left: 10rpx;">流动比率 {{financialMetricsInfo.solvency.current_ratio?financialMetricsInfo.solvency.current_ratio.toFixed(2):'-'}}|研发费用率 {{financialMetricsInfo.expense_ratios.rd_expense_ratio}}%</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<view style="text-align: center; font-size: 26rpx; color: #2B2B2B; font-weight: bold; margin: 20rpx;">
|
||||
营收与利润趋势</view>
|
||||
<view style="height: 400rpx;">
|
||||
<l-echart ref="chartRef1"></l-echart>
|
||||
</view>
|
||||
<view style="text-align: left; font-size: 26rpx; color: #2B2B2B; font-weight: bold; margin: 20rpx;">主营业务
|
||||
</view>
|
||||
<view style="height: 400rpx;">
|
||||
<l-echart ref="chartRef2"></l-echart>
|
||||
</view>
|
||||
<view style="text-align: left; font-size: 26rpx; color: #2B2B2B; font-weight: bold; margin: 20rpx;">
|
||||
主营业务明细与历史对比</view>
|
||||
<view
|
||||
style="display: grid; grid-template-columns: 130rpx repeat(4, 1fr); color: #666666; font-size: 20rpx; font-weight: 500; background-color: #FAFAFC; margin: 20rpx; margin-bottom: 0; padding: 10rpx; box-sizing: border-box;">
|
||||
<view class="flexColumnCenter" v-for="(item, index) in ['业务', '毛利率', '利润', '营收', '营收']" :key="index"
|
||||
style="justify-content: center;"
|
||||
:style="{'text-align': index == 0 ? 'left' : 'center', 'align-items': index == 0 ? 'flex-start' : 'center'}">
|
||||
<view>{{item}}</view>
|
||||
<view v-if="['', '(2025年中报)', '(2025年中报)', '(2025年中报)', '(2024年年报)'][index].length > 0"
|
||||
style="font-size: 18rpx;" :style="{'text-align': index == 0 ? 'left' : 'center'}">
|
||||
{{['', '(2025年中报)', '(2025年中报)', '(2025年中报)', '(2024年年报)'][index]}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<block v-if="productClassificationList.length>0">
|
||||
<view class="table" v-for="(item, index) in productClassificationList[0].products" :key="index"
|
||||
style="display: grid; grid-template-columns: 130rpx repeat(4, 1fr); margin: 0 20rpx; padding: 10rpx;"
|
||||
:style="{'background-color': (index % 2 == 0 ? '#FFFFFF' : '#FAFAFC')}">
|
||||
<view class="item">{{item.content}}</view>
|
||||
<view class="item flexCenter">{{item.profit_margin.toFixed(2)}}%</view>
|
||||
<view class="item flexCenter">{{getNumStr(item.profit)}}</view>
|
||||
<view class="item flexCenter">{{getNumStr(item.revenue)}}</view>
|
||||
<view class="item flexCenter">{{item.content}}</view>
|
||||
</view>
|
||||
</block>
|
||||
<view style="height: 80rpx;"></view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getChgRateStr, getNumStr } from '@/utils/util.js';
|
||||
const echarts = require('../../../uni_modules/lime-echart/static/echarts.min.js');
|
||||
|
||||
export default {
|
||||
name: "zysj-view",
|
||||
data() {
|
||||
return {
|
||||
option1:{
|
||||
legend:{
|
||||
show:true,
|
||||
data:['营业收入','净利润']
|
||||
},
|
||||
grid:{
|
||||
left:'2%',
|
||||
right:'2%',
|
||||
top:'5%',
|
||||
bottom:'30%'
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: [],
|
||||
axisLabel:{
|
||||
// interval:0
|
||||
}
|
||||
},
|
||||
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
|
||||
}
|
||||
]
|
||||
},
|
||||
option2:{
|
||||
title:{
|
||||
text:'',
|
||||
textStyle:{
|
||||
fontSize:12
|
||||
}
|
||||
},
|
||||
legend:{
|
||||
show:true
|
||||
},
|
||||
grid:{
|
||||
left:0,
|
||||
right:0,
|
||||
top:'5%',
|
||||
bottom:'5%'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
data: [],
|
||||
type: 'pie',
|
||||
center:['50%','50%'],
|
||||
label:{
|
||||
formatter:"{d}%"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
getChgRateStr:getChgRateStr,
|
||||
getNumStr:getNumStr
|
||||
};
|
||||
},
|
||||
props: {
|
||||
stockInfo:Object,
|
||||
financialMetricsInfo:Object,
|
||||
barCategoryList:Array,
|
||||
barList:Array,
|
||||
lineList:Array, //折线图数据
|
||||
productClassificationList:Array
|
||||
},
|
||||
watch:{
|
||||
barCategoryList(newValue){
|
||||
this.option1.xAxis.data = newValue
|
||||
},
|
||||
barList(newValue){
|
||||
this.option1.series[0].data = newValue
|
||||
this.barLineInit()
|
||||
},
|
||||
lineList(newValue){
|
||||
this.option1.series[1].data = newValue
|
||||
this.barLineInit()
|
||||
},
|
||||
productClassificationList(newValue) {
|
||||
|
||||
let data = newValue[0].products
|
||||
this.option2.title.text = '主营业务构成('+newValue[0].report_type+')'
|
||||
let pieList = []
|
||||
for (let item of data) {
|
||||
pieList.push({
|
||||
name:item.content,
|
||||
value:item.revenue_ratio.toFixed(2)
|
||||
})
|
||||
}
|
||||
this.option2.series[0].data = pieList
|
||||
this.pieInit()
|
||||
}
|
||||
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 柱状图,折线图初始化
|
||||
*/
|
||||
async barLineInit() {
|
||||
// chart 图表实例不能存在data里
|
||||
const chart = await this.$refs.chartRef1.init(echarts);
|
||||
// chart.on('click',function (params) {
|
||||
// console.log(params)
|
||||
// })
|
||||
let that = this
|
||||
setTimeout(function() {
|
||||
chart.setOption(that.option1)
|
||||
}, 2000);
|
||||
},
|
||||
/**
|
||||
* 饼状图初始化
|
||||
*/
|
||||
async pieInit() {
|
||||
// chart 图表实例不能存在data里
|
||||
const chart = await this.$refs.chartRef2.init(echarts);
|
||||
// chart.on('click',function (params) {
|
||||
// console.log(params)
|
||||
// })
|
||||
let that = this
|
||||
setTimeout(function() {
|
||||
chart.setOption(that.option2)
|
||||
}, 2000);
|
||||
},
|
||||
/**
|
||||
* 获取资产负债状态
|
||||
*/
|
||||
getDebtStatusText(value) {
|
||||
if (value < 40)
|
||||
return { text: '安全', color: 'green' };
|
||||
if (value < 60) return { text: '适中', color: 'gold' };
|
||||
if (value < 70) return { text: '偏高', color: 'orange' };
|
||||
return { text: '风险', color: 'red' };
|
||||
},
|
||||
/**
|
||||
* 获取营收增长状态
|
||||
*/
|
||||
getGrowthStatus(value) {
|
||||
if(value>30) return {text:'高速增长',color:'green'};
|
||||
if(value>10) return {text:'稳健增长',color:'gold'};
|
||||
if(value>0) return {text:'低速增长',color:'orange'};
|
||||
if(value>-10)return {text:'小幅下滑',color:'orange'};
|
||||
return {text:'大幅下滑',color:'red'};
|
||||
//<=-10%14.
|
||||
},
|
||||
/**
|
||||
* 获取ROE状态
|
||||
*/
|
||||
getROEStatus(value) {
|
||||
if(value>20) return {text:'优秀',color:'green'};
|
||||
if(value>15) return {text:'良好',color:'gold'};
|
||||
if(value>10) return {text:'一般',color:'orange'};
|
||||
return {text:'较低',color:'red'};
|
||||
},
|
||||
itemClick(index) {
|
||||
uni.navigateTo({
|
||||
url: `/pagesStock/stockCenterDetails/cwDetails?index=${index}`
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.table
|
||||
{
|
||||
.item
|
||||
{
|
||||
font-size: 20rpx;
|
||||
font-weight: 500;
|
||||
color: #666666;
|
||||
}
|
||||
.item.center
|
||||
{
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
BIN
pagesStock/static/icon/noData.png
Normal file
BIN
pagesStock/static/icon/noData.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
@@ -18,7 +18,7 @@
|
||||
<view v-if="stockBasicInfo" class="basicInfoC">
|
||||
<view class="categoryLabelC flex">
|
||||
<view class="category">{{stockBasicInfo.industry_l1}}·{{stockBasicInfo.sw_industry_l2}}</view>
|
||||
<view class="">沪深300、上证180</view>
|
||||
<!-- <view class="">沪深300、上证180</view> -->
|
||||
</view>
|
||||
<view v-if="quoteDetailsInfo" class="priceC flex">
|
||||
<view class="currentChgC">
|
||||
@@ -138,9 +138,11 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="otherInfoC">
|
||||
<scroll-view scroll-x class="tabC">
|
||||
<view :class="'item '+(selectTab==index?'select':'')" v-for="(item,index) in tabList" :key="index"
|
||||
@click="clickTabItem(index)">{{item.title}}</view>
|
||||
<scroll-view scroll-x class="tabC">
|
||||
<block v-for="(item,index) in tabList" :key="index">
|
||||
<view v-if="item.show" :class="'item '+(selectTab==index?'select':'')"
|
||||
@click="clickTabItem(index)">{{item.title}}</view>
|
||||
</block>
|
||||
</scroll-view>
|
||||
<block v-if="selectTab==0">
|
||||
<view class="companyFilesList">
|
||||
@@ -154,13 +156,27 @@
|
||||
:circulatingShareholdersList="topCirculatingShareholdersList"></gqjg-view>
|
||||
</template>
|
||||
<template v-if="selectCompanyFiles==1">
|
||||
<gltd-view :managementList="managementList"></gltd-view>
|
||||
<gltd-view :managementList="managementList"></gltd-view>
|
||||
<view v-if="isData&&isManagementEmpty" class="noDataC flexColumnCenter">
|
||||
<image class="icon" src="/pagesStock/static/icon/noData.png" mode="widthFix"></image>
|
||||
<view class="title">当前暂无相关数据</view>
|
||||
</view>
|
||||
</template>
|
||||
<template v-if="selectCompanyFiles==2">
|
||||
<fzjg-view :branchList="branchList"></fzjg-view>
|
||||
<template v-if="selectCompanyFiles==2">
|
||||
<fzjg-view :branchList="branchList"></fzjg-view>
|
||||
<view v-if="isData&&branchList.length==0" class="noDataC flexColumnCenter">
|
||||
<image class="icon" src="/pagesStock/static/icon/noData.png" mode="widthFix"></image>
|
||||
<view class="title">当前暂无相关数据</view>
|
||||
</view>
|
||||
</template>
|
||||
<block v-if="selectCompanyFiles==3">
|
||||
<gsxx-view :stockBasicInfo="stockBasicInfo"></gsxx-view>
|
||||
<block v-if="selectCompanyFiles==3">
|
||||
<block v-if="stockBasicInfo">
|
||||
<gsxx-view :stockBasicInfo="stockBasicInfo"></gsxx-view>
|
||||
</block>
|
||||
<view v-if="isData&&!stockBasicInfo" class="noDataC flexColumnCenter">
|
||||
<image class="icon" src="/pagesStock/static/icon/noData.png" mode="widthFix"></image>
|
||||
<view class="title">当前暂无相关数据</view>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
<block v-if="selectTab==1">
|
||||
@@ -208,11 +224,11 @@
|
||||
{{item.title}}
|
||||
</view>
|
||||
</view>
|
||||
<news-view :type="selectDongtai" :newsList="newsList" :announcementList="companyAnnouncementList"></news-view>
|
||||
<news-view :type="selectDongtai" :newsList="newsList" :announcementList="companyAnnouncementList" @search="clickNewsSearch" @newsDetails="clickNewsDetail" @announcementDetails="clickAnnouncementDetail"></news-view>
|
||||
</block>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view class="bottomC fixed flex">
|
||||
<!-- <view class="bottomC fixed flex">
|
||||
<view class="inputC flex1">
|
||||
<input type="text" v-model="eventComment" placeholder="对比股票..." placeholder-style="color:#666"
|
||||
confirm-type="send" @confirm="sendEventComment()" />
|
||||
@@ -231,7 +247,7 @@
|
||||
<view>分享</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<uni-popup ref="industryRankPop" type="bottom">
|
||||
<view class="industryRankPop relative">
|
||||
<view class="popTitle">行业排名</view>
|
||||
@@ -394,7 +410,7 @@
|
||||
<view style="font-size: 28rpx; font-weight: bold;">产业链关系:</view>
|
||||
<view>
|
||||
<image style="width: 21rpx; height: 14rpx; margin-right: 10rpx;" src="/pagesStock/static/icon/yRightArrow.png" mode="widthFix"></image>
|
||||
<text style="color: #71675D; font-size: 24rpx;">流向 {{item.relationships[0].connected_node}}</text>
|
||||
<text style="color: #71675D; font-size: 24rpx;">流向 {{item.relationships[0].connected_node}}</text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
@@ -459,22 +475,26 @@
|
||||
quoteDetailsInfo:null, //股票事实市场价格信息
|
||||
isExpandIntro:false, //是否展开公司简介
|
||||
tabList: [{
|
||||
title: '公司档案'
|
||||
title: '公司档案',
|
||||
show:true
|
||||
},
|
||||
{
|
||||
title: '深度分析'
|
||||
title: '深度分析',
|
||||
show:true
|
||||
},
|
||||
// {
|
||||
// title:'股票行情'
|
||||
// },
|
||||
{
|
||||
title: '财务全景'
|
||||
title: '财务全景',
|
||||
show:true
|
||||
},
|
||||
// {
|
||||
// title:'盈利预测'
|
||||
// },
|
||||
{
|
||||
title: '动态跟踪'
|
||||
title: '动态跟踪',
|
||||
show:true
|
||||
}
|
||||
],
|
||||
selectTab: 0,
|
||||
@@ -496,6 +516,7 @@
|
||||
topShareholdersList:[], //十大股东列表
|
||||
topCirculatingShareholdersList:[], //十大流通股东列表
|
||||
managementList:[], //管理团队列表
|
||||
isManagementEmpty:false, //管理团队数据是否为空
|
||||
branchList:[], //分支机构列表
|
||||
selectCompanyFiles: 0,
|
||||
inDepthAnalysisList: [{
|
||||
@@ -614,7 +635,8 @@
|
||||
companyAnnouncementList:[], //公司公告数据
|
||||
getLocalDate:getLocalDate,
|
||||
getRateUpOrDown:getRateUpOrDown, //判断涨跌
|
||||
getNumStr:getNumStr, //获取数字展示万或亿
|
||||
getNumStr:getNumStr, //获取数字展示万或亿
|
||||
isData:false, //是否请求完了数据
|
||||
}
|
||||
},
|
||||
onLoad(e) {
|
||||
@@ -656,20 +678,58 @@
|
||||
this.searchShow = false
|
||||
this.getStockBasicInfoData()
|
||||
this.getQuoteDetailsData()
|
||||
if(this.selectTab==0) {
|
||||
//公司档案
|
||||
if (this.selectCompanyFiles==0) {
|
||||
this.getActualControlData()
|
||||
this.getOwnershipConcentration()
|
||||
this.getTopShareholdersData()
|
||||
this.getTopCirculatingShareholdersData()
|
||||
}else if (this.selectCompanyFiles==1) {
|
||||
//获取管理团队数据
|
||||
this.isData = false
|
||||
this.getManagementTeamData()
|
||||
}else if (this.selectCompanyFiles==2) {
|
||||
//获取分支机构数据
|
||||
this.isData = false
|
||||
this.getBranchListData()
|
||||
}
|
||||
}else if(this.selectTab==1) {
|
||||
//获取竞争地位数据
|
||||
if(this.selectInDepthAnalysis==0) {
|
||||
this.getComprehensiveAnalysisData()
|
||||
this.getIndustryRankListData()
|
||||
}
|
||||
}else if(this.selectTab==2) {
|
||||
//获取股票信息数据
|
||||
this.getFinancialStockInfoData()
|
||||
this.getFinancialComparisonData()
|
||||
this.getFinancialMetricsData()
|
||||
this.getFinancialMainBussinessData()
|
||||
}else if(this.selectTab==3) {
|
||||
//获取新闻动态数据
|
||||
this.getNewsListData()
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 获取买入百分比
|
||||
*/
|
||||
getBuyPercent() {
|
||||
let ratio = this.quoteDetailsInfo.net_active_buy_ratio
|
||||
return Math.round(accAdd(50,accDiv(ratio,2)))
|
||||
if (ratio) {
|
||||
return Math.round(accAdd(50,accDiv(ratio,2)))
|
||||
} else
|
||||
return 0
|
||||
},
|
||||
/**
|
||||
* 获取卖出百分比
|
||||
*/
|
||||
getSellPercent() {
|
||||
let ratio = this.quoteDetailsInfo.net_active_buy_ratio
|
||||
return Math.round(accSub(50,accDiv(ratio,2)))
|
||||
if (ratio) {
|
||||
return Math.round(accSub(50,accDiv(ratio,2)))
|
||||
} else
|
||||
return 0
|
||||
},
|
||||
/**
|
||||
* 点击查看官网
|
||||
@@ -830,6 +890,46 @@
|
||||
{
|
||||
this.$refs["valueChainPopup"].close()
|
||||
},
|
||||
/**
|
||||
* 新闻动态搜索
|
||||
* @param {Object} keywords
|
||||
*/
|
||||
clickNewsSearch(keywords)
|
||||
{
|
||||
this.newsKeywords = keywords
|
||||
this.getNewsListData()
|
||||
},
|
||||
/**
|
||||
* 查看新闻动态详情
|
||||
*/
|
||||
clickNewsDetail(item)
|
||||
{
|
||||
uni.navigateTo({
|
||||
url:'/pages/index/eventDetails/eventDetails?id='+item.id
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 查看公司公告详情
|
||||
*/
|
||||
clickAnnouncementDetail(item)
|
||||
{
|
||||
wx.showLoading({
|
||||
title:'下载中'
|
||||
})
|
||||
wx.downloadFile({
|
||||
url:item.url,
|
||||
success(res) {
|
||||
wx.openDocument({
|
||||
filePath:res.tempFilePath,
|
||||
showMenu:true,
|
||||
success(res) {
|
||||
wx.hideLoading()
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 点击自选
|
||||
*/
|
||||
@@ -983,8 +1083,14 @@
|
||||
}
|
||||
return acc;
|
||||
}, list);
|
||||
var count = 0
|
||||
for (let item of this.managementList) {
|
||||
count += item.list.length
|
||||
}
|
||||
this.isManagementEmpty = count==0
|
||||
this.isData = true
|
||||
}).catch(error=>{
|
||||
|
||||
this.isData = true
|
||||
})
|
||||
},
|
||||
/**
|
||||
@@ -997,8 +1103,9 @@
|
||||
}
|
||||
branchesList(code).then(res=>{
|
||||
this.branchList = res.data
|
||||
this.isData = true
|
||||
}).catch(error=>{
|
||||
|
||||
this.isData = true
|
||||
})
|
||||
},
|
||||
/**
|
||||
@@ -1188,10 +1295,9 @@
|
||||
if (this.selectSearchStockInfo) {
|
||||
code = this.selectSearchStockInfo.stock_code
|
||||
}
|
||||
let param = {limit:8}
|
||||
let param = {limit:16}
|
||||
financialBalanceSheet(code,param).then(res=>{
|
||||
this.financialBalanceList = res.data
|
||||
|
||||
}).catch(error=>{
|
||||
|
||||
})
|
||||
@@ -1205,7 +1311,7 @@
|
||||
if (this.selectSearchStockInfo) {
|
||||
code = this.selectSearchStockInfo.stock_code
|
||||
}
|
||||
let param = {limit:8}
|
||||
let param = {limit:16}
|
||||
cashflowSheet(code,param).then(res=>{
|
||||
this.cashFlowList = res.data
|
||||
|
||||
@@ -1222,10 +1328,9 @@
|
||||
if (this.selectSearchStockInfo) {
|
||||
code = this.selectSearchStockInfo.stock_code
|
||||
}
|
||||
let param = {limit:8}
|
||||
let param = {limit:16}
|
||||
incomeStatementSheet(code,param).then(res=>{
|
||||
this.incomeStatementList = res.data
|
||||
|
||||
}).catch(error=>{
|
||||
|
||||
})
|
||||
@@ -1324,7 +1429,8 @@
|
||||
.stockDetailsC {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: calc(20rpx + 70rpx + 20rpx + env(safe-area-inset-bottom));
|
||||
// bottom: calc(20rpx + 70rpx + 20rpx + env(safe-area-inset-bottom));
|
||||
bottom: 0;
|
||||
|
||||
.basicInfoC {
|
||||
background-color: white;
|
||||
@@ -1556,10 +1662,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.ywjg_list {
|
||||
color: #2B2B2B;
|
||||
|
||||
@@ -1576,6 +1678,20 @@
|
||||
padding: 25rpx 20rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
.noDataC
|
||||
{
|
||||
padding: 50rpx 0;
|
||||
.icon
|
||||
{
|
||||
width: 500rpx;
|
||||
height: auto;
|
||||
}
|
||||
.title
|
||||
{
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user