1.14 概念中心模块调整,战略分析模块界面完善

This commit is contained in:
尚政杰
2026-01-14 18:48:02 +08:00
parent 27dc03940b
commit 6ee8ce42ed
888 changed files with 96307 additions and 247 deletions

View File

@@ -14,7 +14,7 @@
<view class="flex1">最新数据: {{newestPriceDate}}</view>
<view class="sortTypeC flex" @click="clickSortType()">
<image class="icon" src="/static/icon/home/conceptCenter/sortType.png" mode="widthFix"></image>
<view>涨跌幅</view>
<view>{{sortTypeStr}}</view>
<image class="arrow" src="/static/icon/home/conceptCenter/conceptScreenArrow.png" mode="widthFix"></image>
</view>
<view class="line"></view>
@@ -29,21 +29,21 @@
<view class="list">
<view class="item" v-for="(item,index) in conceptList" :key="index">
<view class="titleChgStockNumC flex">
<view class="title">{{item.concept}}</view>
<view class="title" @click.stop="clickConceptItem(item.concept)">{{item.concept}}</view>
<view v-if="item.price_info" :class="'chg '+(getRateUpOrDown(item.price_info.avg_change_pct)?'down':'up')">{{getChgRateStr(item.price_info.avg_change_pct)}}%</view>
<view v-if="item.price_info" :class="'stockNum '+(getRateUpOrDown(item.price_info.avg_change_pct)?'down':'up')">{{item.stock_count}} 只股票</view>
</view>
<view class="content">{{item.description}}</view>
<view class="content" @click.stop="clickConceptItem(item.concept)">{{item.description}}</view>
<view class="hotStockC flex">
<view class="title">热门个股</view>
<view v-if="memberInfo&&memberInfo.is_member&&memberInfo.subscription_type=='pro'" class="stockList flex">
<view class="stockItem" v-for="(sitem,sindex) in item.stocks.slice(0,3)" :key="sindex">{{sitem.stock_name}}</view>
<view class="stockList flex">
<view class="stockItem" v-for="(sitem,sindex) in item.stocks.slice(0,3)" :key="sindex">{{sitem.name}}</view>
<view class="more" @click.stop="clickStockMore(item)">+{{item.stock_count-3}}更多</view>
</view>
<view v-else class="notVipC flex" @click.stop="clickNotVip()">
<!-- <view v-else class="notVipC flex" @click.stop="clickNotVip()">
<image class="icon" src="/static/icon/home/conceptCenter/lock.png" mode="widthFix"></image>
<view>需升级Pro会员查看{{item.stock_count}}只个股</view>
</view>
</view> -->
</view>
<view class="transactionDateHistoryTimeC flex">
<view class="transactionDate flex1">交易时间{{item.price_info?item.price_info.trade_date:''}}</view>
@@ -98,7 +98,7 @@
<image v-if="index==2" class="rankIcon" src="/static/icon/home/conceptCenter/rank3.png" mode="widthFix"></image>
<view v-if="index>2" class="rankIndex">{{index+1}}</view>
<view class="flex1">
<view class="title">{{item.name}}</view>
<view class="title" @click.stop="clickConceptItem(item.name)">{{item.name}}</view>
<block v-if="selectTab==3||selectTab==4">
<view v-if="selectTab==3" class="calendarBrowseC">均幅 {{item.avg_change}}%</view>
<view v-if="selectTab==4" class="calendarBrowseC">累计 +{{item.total_change}}%</view>
@@ -250,6 +250,7 @@
import { inject } from 'vue';
import { conceptRankList, eventRelatedConcept, newestPriceDate, membershipStatus } from '@/request/api';
import { getChgRateStr, getRateUpOrDown } from '@/utils/util';
import CryptoJS from 'crypto-js'
export default {
data() {
@@ -318,6 +319,7 @@
key:'concept_name'
}],
sortType:'change_pct', //选择的排序方式
sortTypeStr:'涨跌幅', //选择的排序方式
weekList:['一','二','三','四','五','六','日'],
monthDateList:[],
selectMonthIndex:0, //选中月份下标
@@ -578,6 +580,7 @@
clickSortListItem(item)
{
this.sortType = item.key
this.sortTypeStr = item.name
this.clickSearch()
this.$refs["sortTypePopup"].close()
},
@@ -759,6 +762,16 @@
{
this.clickLater()
},
/**
* 点击查看相关概念
*/
clickConceptItem(name)
{
let md5 = CryptoJS.MD5(name).toString()
uni.navigateTo({
url:'/pages/index/conceptDetails/conceptDetails?name='+md5
})
},
/**
* 点击查看更多个股
*/
@@ -1380,7 +1393,7 @@ page
.transactionDatePopup
{
background-color: white;
padding-bottom: env(safe-area-inset-bottom);
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
border-radius: 20rpx 20rpx 0 0;
.btnTitleC
{

View File

@@ -59,24 +59,28 @@
</view>
<view class="newsReportC flex">
<image class="icon" src="/static/icon/home/conceptCenter/newsReport.png" mode="widthFix"></image>
<text class="news">{{newsList.length}} 条新闻 · </text>
<text class="report" decode>&nbsp{{reportList.length}} 份研报</text>
<text :class="'num '+(selectNewsOrReport==0?'select':'')" @click="clickNewsOrReportItem(0)">{{newsList.length}} 条新闻 · </text>
<text :class="'num '+(selectNewsOrReport==1?'select':'')" decode @click="clickNewsOrReportItem(1)">&nbsp{{reportList.length}} 份研报</text>
</view>
<view class="list">
<view class="item" v-for="(item,index) in newsList" :key="index" @click="clickNewsItem(item)">
<view class="flex">
<view class="type news">新闻</view>
<view class="title flex1">{{item.title}}</view>
<block v-if="selectNewsOrReport==0">
<view class="item" v-for="(item,index) in newsList" :key="index" @click="clickNewsItem(item)">
<view class="flex">
<view class="type news">新闻</view>
<view class="title flex1">{{item.title}}</view>
</view>
<view class="content">{{item.detail}}</view>
</view>
<view class="content">{{item.detail}}</view>
</view>
<view class="item" v-for="(item,index) in reportList" :key="index">
<view class="flex">
<view class="type report">研报</view>
<view class="title flex1">{{item.report_title}}</view>
</block>
<block v-else>
<view class="item" v-for="(item,index) in reportList" :key="index" @click="clickReportItem(item)">
<view class="flex">
<view class="type report">研报</view>
<view class="title flex1">{{item.report_title}}</view>
</view>
<view class="content">{{JSON.parse(item.content).content}}</view>
</view>
<view class="content">坚定看好锂电材料建议继续加配坚定六氟添加剂关注隔膜更加坚定的看好六氟下游传导如期</view>
</view>
</block>
</view>
</view>
</view>
@@ -105,6 +109,7 @@
chgStockData:null, //涨跌幅和股票数据
newsList:[], //新闻数据
reportList:[], //研报数据
selectNewsOrReport: 0, //0新闻1研报
getRateUpOrDown:getRateUpOrDown,
getChgRateStr:getChgRateStr,
}
@@ -311,13 +316,32 @@
this.getReportData()
}
},
/**
* 点击切换新闻或研报
* @param {Object} index
*/
clickNewsOrReportItem(index)
{
if(this.selectNewsOrReport!=index) {
this.selectNewsOrReport = index;
}
},
/**
* 点击查看新闻详情
* @param {Object} item
*/
clickNewsItem(item) {
uni.navigateTo({
url:'/pages/concept/conceptNewsDetails/conceptNewsDetails?info='+encodeURIComponent(JSON.stringify(item))
url:'/pages/concept/newsDetails/newsDetails?info='+encodeURIComponent(JSON.stringify(item))
})
},
/**
* 点击查看研报详情
* @param {Object} item
*/
clickReportItem(item) {
uni.navigateTo({
url:'/pages/concept/reportDetails/reportDetails?info='+encodeURIComponent(JSON.stringify(item))
})
},
/**
@@ -369,6 +393,9 @@
{
let param = {query:this.conceptName,start_date:this.selectDateStr,mode:'text',exact_match:1}
conceptReport(param).then(res=>{
for (let item of res.data.results) {
item.content = item.content.replace(/'/g, '"')
}
this.reportList = res.data.results
}).catch(error=>{
@@ -579,14 +606,14 @@ page
width: 24rpx;
height: auto;
}
.news
{
color: #FF7723;
}
.report
.num
{
color: #333;
}
.num.select
{
color: #FF7723;
}
}
.list
{

View File

@@ -9,13 +9,13 @@
<image class="arrow" src="/static/icon/home/conceptCenter/timeScreenArrow.png" mode="widthFix"></image>
</view>
</view>
<scroll-view direction="vertical" class="stockList fixed" :style="'top:'+listTop+'px;'">
<scroll-view scroll-y class="stockList fixed" :style="'top:'+listTop+'px;'">
<view class="list">
<view class="item" v-for="(item,index) in stockList" :key="index">
<view class="stockInfoC flex" @click="clickExpandOrRetract(index)">
<view class="titleCodeC">
<view class="title">{{item.stock_name}}</view>
<view class="code">{{item.stock_code}}</view>
<view class="title">{{item.name}}</view>
<view class="code">{{item.code}}</view>
</view>
<view class="chg flex1">+4.04%</view>
<view class="industry flex1">食品行业</view>
@@ -87,7 +87,7 @@
<script>
import { inject } from 'vue';
import { conceptDetails } from '@/request/api';
export default {
data() {
return {
@@ -498,7 +498,7 @@ page
.datePopup
{
background-color: white;
padding-bottom: env(safe-area-inset-bottom);
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
border-radius: 20rpx 20rpx 0 0;
.btnTitleC
{

View File

@@ -0,0 +1,83 @@
<template>
<view>
<navBar leftText="历史时间轴" :hideNavBg="true"></navBar>
<image class="topBg absolute" src="/static/image/index/conceptTopBg.png" mode="widthFix"></image>
<view v-if="reportInfo" class="contentC fixed" :style="'top: '+navH+'px;'">
<view class="title">{{reportInfo.report_title}}</view>
<view class="labelTimeC ">
<text class="time">{{getLocalTime(reportInfo.declare_date)}}</text>
</view>
<view class="content">
<!-- <ua-markdown :source="content" /> -->
<text>{{content}}</text>
</view>
</view>
</view>
</template>
<script >
import { inject } from 'vue';
import { getLocaleTime } from '@/utils/util';
export default {
data() {
return {
navH:inject('navHeight'),
reportInfo:null,
getLocalTime:getLocaleTime,
content:''
}
},
onLoad(e) {
this.reportInfo = JSON.parse(decodeURIComponent(e.info))
this.reportInfo.content = this.reportInfo.content.replace(/'/g, '"');
console.log(JSON.parse(this.reportInfo.content))
this.content = JSON.parse(this.reportInfo.content).content
}
}
</script>
<style lang="less">
page
{
background-color: #070707;
}
.topBg
{
top: 0;
left: 0;
width: 100%;
height: auto;
}
.contentC
{
background-color: #FFF9F5;
margin: 20rpx 25rpx 0;
padding: 28rpx 30rpx;
left: 0;
right: 0;
bottom: 100rpx;
border-radius: 10rpx;
overflow-y: scroll;
.title
{
margin: 0 10rpx;
font-size: 30rpx;
font-weight: bold;
color: #2B2B2B;
}
.labelTimeC {
margin: 0 10rpx;
.time
{
font-size: 24rpx;
font-weight: 500;
color: #666;
}
}
.content
{
margin-top: 30rpx;
}
}
</style>