Files
JiaZhiQianYan/pages/index/eventDetails/eventDetails.vue

1440 lines
32 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<navBar leftText="事件详情"></navBar>
<image class="topBg absolute" src="/static/image/mine/myTopBg.png" mode="widthFix"></image>
<view v-if="eventDetails" class="eventDetailsC fixed" :style="'top:'+navH+'px;'">
<view class="categoryTitleC">
<view class="category">{{eventDetails.event_type}}</view>
<text class="title">{{eventDetails.event_title}}</text>
</view>
<view class="eventTime">{{eventDetails.event_created_at.substr(0,16)}}</view>
<view class="eventContent">{{eventDetails.event_desc}}<text class="ai">AI合成</text></view>
<scroll-view scroll-x class="categoryList">
<view :class="'item relative '+(selectCategory==index?'select':'')" v-for="(item,index) in categoryList" :key="index" @click="clickCategoryItem(index)">
{{item}}
<view v-if="selectCategory==index" class="line absolute"></view>
</view>
</scroll-view>
<view v-if="selectCategory==0" class="headingList flex">
<view class="item flex1" v-for="(item,index) in headingList" :key="index">
{{item}}
</view>
</view>
<view v-if="selectCategory==0" class="targetList">
<view class="item" v-for="(item,index) in targetList" :key="index" @click="clickStockItem(item.stock_code)">
<view class="nameCodePriceC flex">
<view class="flex1">
<view class="name">{{item.stock_name}}</view>
<view class="code">{{item.stock_code}}</view>
</view>
<view class="flex1">
<view style="width:140rpx; height:100rpx">
<l-echart :ref="'chartRef'+index"></l-echart>
</view>
</view>
<view class="price flex1">{{item.trade_data?item.trade_data.open_price:''}}</view>
<view class="price flex1">{{item.trade_data?item.trade_data.latest_price:''}}</view>
<view :class="'chg flex1 '+(getRateUpOrDown(item.trade_data?item.trade_data.change_pct:'')?'down':'up')">{{item.trade_data?item.trade_data.change_pct:''}}%</view>
</view>
<view class="content">{{item.relation_desc}}<text class="ai">AI合成</text></view>
</view>
</view>
<view v-if="selectCategory==1" class="conceptList flexWrap">
<view class="conceptItem" v-for="(item,index) in conceptList" :key="index" @click="clickConceptItem(item.concept)">
<view class="coverC relative">
<image class="cover" src="" mode="aspectFill"></image>
<view :class="'rateC absolute '+(getRateUpOrDown(item.price_info.avg_change_pct)?'down':'up')">
<image v-if="getRateUpOrDown(item.price_info.avg_change_pct)" class="icon" src="/static/icon/home/conceptDownArrow.png" mode="widthFix"></image>
<image v-else class="icon" src="/static/icon/home/conceptUpArrow.png" mode="widthFix"></image>
<text>{{getRateStr(item.price_info.avg_change_pct)}}%</text>
</view>
<view class="totalC absolute">{{item.stock_count}}只股票</view>
</view>
<view class="infoC">
<view class="title">{{item.concept}}</view>
<view class="content">{{item.description}}</view>
<view class="transactionDate">交易日期: {{item.price_info.trade_date}}</view>
<view class="hotStockC">
<view class="titleC flex">
<text class="flex1">热门个股</text>
<image class="arrow" src="/static/icon/home/stockArrow.png" mode="widthFix"></image>
</view>
<view class="stockList flexWrap">
<view class="item" v-for="(item,index) in item.stocks" :key="index">{{item.stock_name}}</view>
</view>
</view>
<view class="dateHistoryTimeC flex">
<view class="date flex1">{{item.happened_times[0]+(item.happened_times.length>1?('(共'+item.happened_times.length+'次)'):'')}}</view>
<view class="historyTimeC">历史时间轴</view>
</view>
</view>
</view>
</view>
<view v-if="selectCategory==2" class="historyEventList">
<view class="expectScoreC flex" @click="clickExpectScore($event)">
<image class="icon" src="/static/icon/home/expectScore.png" mode="widthFix"></image>
<view class="score flex1">超预期得分{{expectScore}}</view>
<image class="tips" src="/static/icon/home/expectScoreTips.png" mode="widthFix"></image>
</view>
<view class="list">
<view class="item flexStretch" v-for="(item,index) in historyEventList" :key="index">
<view class="eventLineC relative">
<view class="line"></view>
<view class="pointC absolute flexCenter">
<view class="point"></view>
</view>
</view>
<view class="eventInfoC flex1">
<view class="titleCorrelationC flex">
<view class="title flex1">{{item.title}}</view>
<view class="correlation">相关度: {{item.relevance*10}}%</view>
</view>
<view class="content">{{item.content}}</view>
<scroll-view scroll-x class="increaseRateList">
<view :class="'rateItem '+(getRateUpOrDown(item.related_avg_chg)?'down':'up')">
平均涨幅:
<image v-if="getRateUpOrDown(item.related_avg_chg)" class="arrow" src="/static/icon/home/downArrow.png" mode="widthFix"></image>
<image v-else class="arrow" src="/static/icon/home/upArrow.png" mode="widthFix"></image>
{{getRateStr(item.related_avg_chg)}}%
</view>
<view :class="'rateItem '+(getRateUpOrDown(item.related_max_chg)?'down':'up')">
最大涨幅:
<image v-if="getRateUpOrDown(item.related_max_chg)" class="arrow" src="/static/icon/home/downArrow.png" mode="widthFix"></image>
<image v-else class="arrow" src="/static/icon/home/upArrow.png" mode="widthFix"></image>
{{getRateStr(item.related_max_chg)}}%
</view>
</scroll-view>
<view class="relatedStockTimeC flex flex1">
<view class="relatedStockC flex" @click.stop="clickLookHistoricalEventRelatedStock(item)">
<image class="icon" src="/static/icon/home/expectScore.png" mode="widthFix"></image>
查看相关股票
</view>
<view class="time flex1">{{getLocaleTime(item.event_date)}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view v-if="eventDetails" class="bottomC fixed flex">
<view class="inputC flex1">
<input type="text" v-model="eventComment" placeholder="我来说两句..." placeholder-style="color:#666" confirm-type="send" @confirm="sendEventComment()"/>
</view>
<view class="commentLikeNumC flex">
<view class="item">
<image class="icon" src="/static/icon/home/browser.png" mode="widthFix"></image>
<view>{{eventDetails.view_count}}</view>
</view>
<view class="item" @click="clickComment()">
<image class="icon" src="/static/icon/home/comment.png" mode="widthFix"></image>
<view>{{eventDetails.post_count}}</view>
</view>
<view class="item" @click="clickFollow()">
<image class="icon" src="/static/icon/home/follow.png" mode="widthFix"></image>
<view>{{eventDetails.follower_count}}</view>
</view>
</view>
</view>
<uni-popup ref="popup" type="bottom">
<view class="popup">
<view class="titleCloseC flex">
<view class="title flex1">全部回复</view>
<view class="closeC" @click="closeCommentPopup()">
<image class="icon" src="/static/icon/home/close.png" mode="widthFix"></image>
</view>
</view>
<view class="list">
<view class="item" v-for="(item,index) in commentList" :key="index">
<view class="originComment">
<image class="avatar" :src="item.user.avatar_url" mode="aspectFill"></image>
<view class="flex1">
<view class="nickname">{{item.user.username}}</view>
<view class="content">{{item.content}}</view>
<view class="timeReplyLikeC flex between">
<view class="timeReplyC flex">
<view class="time">{{getLocaleHourMinute(item.created_at)}}</view>
<view class="reply" @click.stop="clickReplyComment(item.post_id)">回复</view>
</view>
<view class="likeC flex" @click.stop="clickLikeComment(item.post_id,index,-1)">
<image class="icon" src="/static/icon/home/like.png" mode="widthFix"></image>
<view class="num">{{item.likes_count}}</view>
</view>
</view>
<!-- <view class="totalCommentNumC flex">
<view class="line"></view>
全部34条评论
<image class="arrow" src="/static/icon/home/commentArrow.png" mode="widthFix"></image>
</view> -->
</view>
</view>
<!-- <view class="replyList">
<view class="replyItem">
<image class="avatar" src="" mode="aspectFill"></image>
<view class="flex1">
<view class="nickname">逸尘破晓</view>
<view class="content">四部门联合启动的人力资源服务业与制造业融合发展点主要目的是推动人力资源服务向高端制造渗透</view>
<view class="timeReplyLikeC flex between">
<view class="timeReplyC flex">
<view class="time">15:37</view>
<view class="reply">回复</view>
</view>
<view class="likeC flex" @click.stop="clickLikeComment(item.post_id)">
<image class="icon" src="/static/icon/home/like.png" mode="widthFix"></image>
<view class="num">85</view>
</view>
</view>
</view>
</view>
</view> -->
</view>
</view>
<view class="popBottomC">
<view class="inputC">
<input type="text" v-model="replyComment" :focus="isFocus" placeholder="我来说两句..." placeholder-style="color:#666" confirm-type="send" @confirm="sendReplyComment()"/>
</view>
</view>
</view>
</uni-popup>
<uni-popup ref="expectScorePopup" type="top" mask-background-color="transparent">
<view class="expectScorePopup relative" :style="'margin-top:'+scoreTop+'px;'">
<image class="arrow absolute" src="/static/icon/home/sortArrow.png" mode="widthFix"></image>
<view class="tips">
超预期得分:基于历史事件判断当前事件的超预期情况满分100分得分越高越超预期
</view>
</view>
</uni-popup>
<uni-popup ref="stockPopup" type="bottom">
<view class="stockPopup">
<view class="titleCloseC flex">
<view class="title flex1">相关股票</view>
<view class="closeC" @click="closeRelatedStockPopup()">
<image class="icon" src="/static/icon/home/close.png" mode="widthFix"></image>
</view>
</view>
<view class="list">
<view class="item" v-for="(item,index) in historyEventRelatedStockList" :key="index" @click="clickStockItem(item.stock_code)">
<view class="titleCorrelationC flex">
<view class="title flex1">{{item.stock_name+'('+item.stock_code+')'}}</view>
<view class="correlation">相关度: {{item.correlation*100}}%</view>
</view>
<view class="sectorRateC">
<view class="sector">{{item.sector}}</view>
<view :class="'rateC '+(getRateUpOrDown(item.daily_change)?'down':'up')">
当日涨幅:
<image v-if="getRateUpOrDown(item.daily_change)" class="arrow" src="/static/icon/home/downArrow.png" mode="widthFix"></image>
<image v-else class="arrow" src="/static/icon/home/upArrow.png" mode="widthFix"></image>
{{getRateStr(item.daily_change)}}%
</view>
</view>
<view class="content">{{item.relation_desc}}</view>
</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import { inject } from 'vue';
import { eventRelatedConcept, eventHistoryEvent, eventRelatedStock, eventCommentList, commentEvent, likeEventComment, replyComment, followEvent } from '@/request/api';
import { getLocaleHourMinute, getLocaleTime, getRateStr, getRateUpOrDown } from '@/utils/util';
const echarts = require('../../../uni_modules/lime-echart/static/echarts.min.js');
export default {
data() {
return {
navH:inject('navHeight'),
windowWidth:inject('windowWidth'),
eventId:'', //事件id
eventDetails:null, //事件详情
categoryList:['相关标的','相关概念','历史事件'],
targetList:[], //相关标的
conceptList:[], //相关概念
historyEventList:[], //历史事件
historyEventRelatedStockList:[], //历史事件相关股票
selectCategory:0,
headingList:['名称代码','分时图','开盘价','最新价','涨跌幅'],
getLocaleHourMinute:getLocaleHourMinute,
getLocaleTime:getLocaleTime,
getRateUpOrDown:getRateUpOrDown,
getRateStr:getRateStr,
scoreTop:'',
expectScore:0, //预期得分
commentList:[], //评价列表
eventComment:'', //事件评论内容
replyId:'', //回复评论id
replyPid:'', //回复评论父级id
isFocus:false, //是否获取焦点
replyComment:'', //评论回复内容
option:{
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
confine: true
},
grid:{
left: '10%',
right: '6%',
top: '0%',
bottom: '20%',
},
xAxis:{
type: 'category',
scale:true,
data: [],
// axisTick:{ show:false },
axisLine:{ show:false },
axisLabel:{ show:false }
},
yAxis: [
{
type: 'value',
axisTick: { show:false },
scale:true,
axisLabel: { show:false },
splitLine: { show:false }
}
],
series: {
name: '分时图',
type: 'line',
label: {
show:true,
position:'top',
fontSize:12,
},
data: [],
itemStyle:{
color:''
},
markLine:{
symbol:['none','none'],
lineStyle:{
color:'#AAAAAA',
type:'dashed'
},
data:[]
}
}
},
}
},
onLoad(e)
{
if(e.id)
{
this.eventId = e.id
this.getEventRelatedStockData()
this.getEventCommentListData()
}
},
methods: {
async init() {
// chart 图表实例不能存在data里
let that = this
setTimeout(function() {
that.targetList.map(function(item,index) {
const chartDom = that.$refs['chartRef'+index][0]
chartDom.init(echarts).then(res=>{
let option = {...that.option}
let categoryData = []
let valueData = []
for (let item1 of item.minute_chart_data) {
categoryData.push(item1.time)
valueData.push(item1.close)
}
option.series.data = valueData
option.xAxis.data = categoryData
let time = that.eventDetails.event_start_time.split('T')[1]
let firstOpen = item.minute_chart_data[0].open
option.series.markLine.data = [
{
xAxis:time,
lineStyle:
{
type:'solid',
width: 1,
color: '#ffd700'
},
},
{
yAxis:firstOpen,
}]
let lastClose = item.minute_chart_data.slice(-1)[0].close
if(lastClose>=firstOpen)
{
option.series.itemStyle.color = '#EF5350'
}else
option.series.itemStyle.color = '#26A69A'
res.setOption(option)
})
})
}, 300);
},
/**
* 点击切换分类
*/
clickCategoryItem(index)
{
if(this.selectCategory!=index)
{
this.selectCategory = index
if(index==0)
{
//相关标的
this.getEventRelatedStockData()
}else if(index==1)
{
//相关概念
this.getEventRelatedConceptData()
}else if(index==2)
{
//历史事件
this.getEventHistoryEventData()
}
}
},
/**
* 点击查看股票详情
*/
clickStockItem(code)
{
uni.navigateTo({
url:'/pages/index/stockDetails/stockDetails?type=1&code='+code+'&id='+this.eventId
})
},
/**
* 点击查看相关概念
*/
clickConceptItem(name)
{
uni.navigateTo({
url:'/pages/index/conceptDetails/conceptDetails?name='+name
})
},
/**
* 点击查看历史事件的相关股票
*/
clickLookHistoricalEventRelatedStock(item)
{
this.historyEventRelatedStockList = item.related_stocks
this.$refs['stockPopup'].open()
},
/**
* 点击关闭相关股票弹窗
*/
closeRelatedStockPopup()
{
this.$refs['stockPopup'].close()
},
/**
* 点击查看超预期得分
*/
clickExpectScore(e)
{
this.scoreTop = e.currentTarget.offsetTop+this.navH+(70+10+20)/750*this.windowWidth
this.$refs['expectScorePopup'].open()
},
/**
* 点击发送事件评论
*/
sendEventComment()
{
if(!this.eventComment)
{
uni.showToast({
title:'请输入评论内容',
icon:'none'
})
return
}
let eventId = this.eventId
let param = {content:this.eventComment}
commentEvent(eventId,param).then(res=>{
uni.showToast({
title:res.message,
icon:'none'
})
let that = this
setTimeout(function() {
that.getEventCommentListData()
}, 1000);
}).catch(error=>{
})
},
/**
* 点击评论
*/
clickComment()
{
this.$refs['popup'].open()
},
/**
* 点击关闭评论弹窗
*/
closeCommentPopup()
{
this.$refs['popup'].close()
},
/**
* 点击关注
*/
clickFollow()
{
let eventId = this.eventId
followEvent(eventId).then(res=>{
uni.showToast({
title:res.message,
icon:'none'
})
uni.$emit('editSuccess')
this.getEventRelatedStockData()
}).catch(error=>{
})
},
/**
* 点击回复评论
*/
clickReplyComment(id,pid)
{
this.replyId = id
if(pid)
{
this.replyPid = pid
}
this.isFocus = true
},
sendReplyComment()
{
if(!this.replyComment)
{
uni.showToast({
title:'请输入评论内容',
icon:'none'
})
return
}
let param = {content:this.replyComment}
if(this.replyPid)
{
param.parent_id = this.replyPid
}
replyComment(this.replyId,param).then(res=>{
}).catch(error=>{
})
},
/**
* 点赞评论
*/
clickLikeComment(id,index,cindex)
{
likeEventComment(id).then(res=>{
uni.showToast({
title:res.message,
icon:'none'
})
if(cindex==-1)
{
//一级评论回复
this.commentList[index].likes_count = res.likes_count
}else
{
}
}).catch(error=>{
})
},
/**
* 获取事件相关标的数据
*/
getEventRelatedStockData()
{
let eventId = this.eventId
eventRelatedStock(eventId).then(res=>{
if(res.code==200)
{
this.eventDetails = res.data
this.targetList = res.data.related_stocks
this.init()
}else
uni.showToast({
title:res.message,
icon:'none'
})
}).catch(error=>{
})
},
/**
* 获取事件相关概念数据
*/
getEventRelatedConceptData()
{
let eventDetails = this.eventDetails
let param = {query:eventDetails.event_title,size:4,page:1,sort_by:"_score",isJson:1}
eventRelatedConcept(param).then(res=>{
// if(res.code==200)
// {
this.conceptList = res.results
// }else
// uni.showToast({
// title:res.message,
// icon:'none'
// })
}).catch(error=>{
})
},
/**
* 获取事件历史事件数据
*/
getEventHistoryEventData()
{
let eventId = this.eventId
eventHistoryEvent(eventId).then(res=>{
if(res.code==200)
{
this.expectScore = res.data.invest_score
this.historyEventList = res.data.historical_events
}else
uni.showToast({
title:res.message,
icon:'none'
})
}).catch(error=>{
})
},
/**
* 获取事件评论列表
*/
getEventCommentListData()
{
let eventId = this.eventId
eventCommentList(eventId).then(res=>{
this.commentList = res.data.posts
}).catch(error=>{
})
}
}
}
</script>
<style lang="less">
.topBg
{
top: 0;
left: 0;
width: 100%;
height: auto;
}
.eventDetailsC
{
background-color: white;
margin-top: 10rpx;
padding: 20rpx 0 0;
left: 0;
right: 0;
bottom: calc(20rpx + 70rpx + 20rpx + env(safe-area-inset-bottom));
border-radius: 20rpx 20rpx 0 0;
overflow-y: scroll;
.categoryTitleC
{
padding: 0 25rpx;
.category
{
background-color: #FD9A14;
margin-right: 12rpx;
display: inline-block;
padding: 0 11rpx;
line-height: 40rpx;
border-radius: 8rpx;
font-size: 22rpx;
font-weight: bold;
color: white;
}
.title
{
font-size: 30rpx;
font-weight: bold;
color: #222;
}
}
.eventTime
{
margin: 20rpx 25rpx 0;
font-size: 22rpx;
font-weight: 500;
color: #aaa;
}
.eventContent
{
margin: 22rpx 24rpx 0;
font-size: 24rpx;
font-weight: 500;
color: #666;
line-height: 1.2rem;
.ai
{
color: #C00000;
}
}
.categoryList
{
white-space: nowrap;
margin-top: 10rpx;
.item
{
display: inline-block;
line-height: 60rpx;
padding: 0 18rpx;
font-size: 28rpx;
font-weight: 500;
color: #42485B;
}
.item.select
{
font-weight: bold;
color: #F97316;
.line
{
background-color: #F97316;
left: calc((100% - 50rpx)/2);
bottom: 0;
width: 50rpx;
height: 2rpx;
}
}
}
.headingList
{
background-color: #F3F6F9;
margin: 28rpx 25rpx 0;
.item
{
line-height: 55rpx;
font-size: 24rpx;
font-weight: 500;
color: #999;
text-align: center;
}
}
.targetList
{
padding: 0 25rpx;
.item
{
padding-bottom: 20rpx;
border-bottom: solid 1rpx #E4E4E4;
.nameCodePriceC
{
padding: 20rpx 0;
font-size: 28rpx;
font-weight: bold;
color: #222;
.code
{
font-size: 20rpx;
font-weight: 500;
color: #888;
}
.price
{
text-align: center;
}
.chg
{
text-align: center;
}
.chg.up
{
color: #FF2929;
}
.chg.down
{
color: #22C55E;
}
}
.content
{
font-size: 20rpx;
font-weight: 500;
color: #666;
.ai
{
color: #C00000;
}
}
}
}
.conceptList
{
padding: 30rpx 25rpx;
.conceptItem
{
box-shadow: 0px 3px 6px 0px rgba(0,0,0,0.05);
margin: 0 30rpx 30rpx 0;
width: calc((100% - 30rpx)/2);
border-radius: 10rpx;
.coverC
{
.cover
{
display: block;
width: 100%;
height: 220rpx;
}
.rateC
{
top: 12rpx;
left: 12rpx;
padding: 0 10rpx;
line-height: 40rpx;
border-radius: 20rpx;
font-size: 18rpx;
font-weight: 500;
color: white;
.icon
{
width: 11rpx;
height: auto;
}
}
.rateC.up
{
background-color: #E53E3E;
}
.rateC.down
{
background-color: #38A169;
}
.totalC
{
background: linear-gradient(-90deg, #FAC915 0%, #F18D10 100%);
top: 12rpx;
right: 12rpx;
padding: 0 9rpx;
line-height: 40rpx;
border-radius: 20rpx;
font-size: 20rpx;
color: white;
}
}
.infoC
{
padding: 20rpx 23rpx;
.title
{
font-size: 26rpx;
font-weight: bold;
color: #222;
}
.content
{
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
margin-top: 10rpx;
line-height: 1.2rem;
font-size: 20rpx;
font-weight: 500;
color: #666;
}
.transactionDate
{
margin-top: 12rpx;
font-size: 22rpx;
font-weight: 500;
color: #AAA;
}
.hotStockC
{
background-color: #F7FAFC;
margin-top: 16rpx;
padding: 10rpx 13rpx;
border-radius: 5rpx;
.titleC
{
font-size: 20rpx;
font-weight: 500;
color: #666;
.arrow
{
width: 6rpx;
height: auto;
}
}
.stockList
{
margin-top: 10rpx;
height: 35rpx;
overflow: hidden;
.item
{
background-color: #FFEADC;
margin: 0 5rpx 5rpx 0;
padding: 0 9rpx;
line-height: 30rpx;
border-radius: 5rpx;
font-size: 18rpx;
font-weight: 500;
color: #F97316;
}
}
}
.dateHistoryTimeC
{
margin-top: 10rpx;
font-size: 20rpx;
.date
{
color: #666;
}
.historyTimeC
{
background-color: #F97316;
padding: 0 6rpx;
line-height: 38rpx;
border-radius: 5rpx;
color: white;
}
}
}
}
.conceptItem:nth-child(2n)
{
margin-right: 0;
}
}
.historyEventList
{
padding: 34rpx 25rpx;
.expectScoreC
{
background-color: #FBEFE7;
padding: 0 25rpx;
height: 70rpx;
.icon
{
margin-right: 14rpx;
width: 24rpx;
height: auto;
}
.score
{
font-size: 24rpx;
font-weight: 500;
color: #F97316;
}
.tips
{
margin-left: 14rpx;
width: 24rpx;
height: auto;
}
}
.list
{
padding: 23rpx 0;
.item
{
.eventLineC
{
padding: 0 43rpx 0 15rpx;
.line
{
background-color: #F0F0F0;
width: 1px;
height: 100%;
}
.pointC
{
background-color: #F9731680;
top: 0;
left: 5rpx;
width: 20rpx;
height: 20rpx;
border-radius: 50%;
.point
{
background-color: #F97316;
width: 10rpx;
height: 10rpx;
border-radius: 50%;
}
}
}
.eventInfoC
{
box-shadow: 0px 5px 10px 0px rgba(0,0,0,0.07);
margin-bottom: 20rpx;
padding-top: 27rpx;
min-width: 0;
border-radius: 10rpx;
.titleCorrelationC
{
padding: 0 24rpx 0 30rpx;
.title
{
min-width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 30rpx;
font-weight: bold;
color: #222;
}
.correlation
{
background-color: #F973161A;
padding: 0 12rpx;
line-height: 40rpx;
border-radius: 5rpx;
font-size: 24rpx;
font-weight: 500;
color: #F97316;
}
}
.content
{
margin: 16rpx 30rpx 0;
font-size: 24rpx;
font-weight: 500;
color: #666;
.ai
{
color: #C00000;
}
}
.increaseRateList
{
white-space: nowrap;
padding: 0 30rpx;
margin-top: 24rpx;
.rateItem
{
display: inline-block;
margin-right: 15rpx;
line-height: 44rpx;
padding: 0 14rpx;
border-radius: 10rpx;
font-size: 22rpx;
font-weight: bold;
color: white;
.arrow
{
width: 15rpx;
height: auto;
}
}
.rateItem.up
{
background-color: #C00000;
}
.rateItem.down
{
background-color: #355422;
}
}
.relatedStockTimeC
{
padding-right: 28rpx;
.relatedStockC
{
padding: 16rpx 30rpx;
font-size: 24rpx;
font-weight: bold;
color: #F97316;
.icon
{
margin-right: 13rpx;
width: 24rpx;
height: auto;
}
}
.time
{
font-size: 22rpx;
font-weight: 500;
color: #aaa;
text-align: right;
}
}
}
}
}
}
}
.bottomC
{
padding: 20rpx 25rpx calc(20rpx + env(safe-area-inset-bottom));
left: 0;
right: 0;
bottom: 0;
box-shadow: 0px -1rpx 0px 0px #EEEEEE;
.inputC
{
background-color: #F0F0F0;
margin-right: 20rpx;
padding: 0 33rpx;
height: 70rpx;
border-radius: 35rpx;
input
{
height: 100%;
font-size: 26rpx;
font-weight: 500;
}
}
.commentLikeNumC
{
.item
{
font-size: 26rpx;
font-weight: bold;
color: #666;
text-align: center;
.icon
{
margin: 0 20rpx;
width: 35rpx;
height: auto;
}
}
}
}
.popup
{
background-color: white;
.titleCloseC
{
padding-left: 25rpx;
font-size: 32rpx;
font-weight: bold;
color: #222;
.closeC
{
padding: 28rpx;
.icon
{
width: 28rpx;
height: auto;
}
}
}
.list
{
margin: 0 25rpx;
border-top: solid 1rpx #E4E4E4;
max-height: 1200rpx;
.item
{
padding-top: 30rpx;
border-bottom: solid 1rpx #E4E4E4;
.originComment
{
display: flex;
.avatar
{
margin-right: 23rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.nickname
{
font-size: 28rpx;
font-weight: bold;
color: #111;
}
.content
{
margin-top: 10rpx;
line-height: 1.2rem;
font-size: 24rpx;
font-weight: 500;
color: #666;
}
.timeReplyLikeC
{
.time
{
margin-right: 36rpx;
font-size: 26rpx;
font-weight: 500;
color: #aaa;
}
.reply
{
font-size: 26rpx;
font-weight: 500;
color: #F97316;
}
.likeC
{
padding: 14rpx 0;
font-size: 28rpx;
font-weight: bold;
color: #999;
.icon
{
margin-right: 12rpx;
width: 27rpx;
height: auto;
}
}
.likeC.like
{
color: #F97316;
}
}
.totalCommentNumC
{
padding: 14rpx 0 22rpx;
font-size: 26rpx;
font-weight: 500;
color: #999;
.line
{
background-color: #aaa;
margin-right: 18rpx;
width: 30rpx;
height: 2rpx;
}
.arrow
{
margin-left: 14rpx;
width: 13rpx;
height: auto;
}
}
}
.replyList
{
margin-left: 60rpx;
border-top: solid 1rpx #E4E4E4;
.replyItem
{
display: flex;
padding: 22rpx 0;
border-bottom: solid 1rpx #E4E4E4;
.avatar
{
margin-right: 23rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.nickname
{
font-size: 28rpx;
font-weight: bold;
color: #111;
}
.content
{
margin-top: 10rpx;
line-height: 1.2rem;
font-size: 24rpx;
font-weight: 500;
color: #666;
}
.timeReplyLikeC
{
.time
{
margin-right: 36rpx;
font-size: 26rpx;
font-weight: 500;
color: #aaa;
}
.reply
{
font-size: 26rpx;
font-weight: 500;
color: #F97316;
}
.likeC
{
padding: 14rpx 0;
font-size: 28rpx;
font-weight: bold;
color: #999;
.icon
{
margin-right: 12rpx;
width: 27rpx;
height: auto;
}
}
.likeC.like
{
color: #F97316;
}
}
}
.replyItem:last-child
{
border: none;
}
}
}
}
.popBottomC
{
padding: 22rpx 25rpx calc(22rpx + env(safe-area-inset-bottom));
.inputC
{
background-color: #F0F0F0;
padding: 0 33rpx;
height: 70rpx;
border-radius: 35rpx;
input
{
height: 100%;
font-size: 26rpx;
font-weight: 500;
color: #333;
}
}
}
}
.expectScorePopup
{
background-color: white;
margin-left: calc(100% - 320rpx - 24rpx);
width: 320rpx;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 10rpx;
.arrow
{
top: -13rpx;
right: 38rpx;
width: 26rpx;
height: auto;
}
.tips
{
padding: 30rpx 22rpx 20rpx;
font-size: 22rpx;
font-weight: 500;
color: #444;
}
}
.stockPopup
{
background-color: white;
border-radius: 20rpx 20rpx 0 0;
.titleCloseC
{
padding-left: 25rpx;
font-size: 32rpx;
font-weight: bold;
color: #222;
.closeC
{
padding: 28rpx;
.icon
{
width: 28rpx;
height: auto;
}
}
}
.list
{
border-top: solid 1rpx #E4E4E4;
margin: 0 25rpx;
max-height: 800rpx;
overflow-y: scroll;
.item
{
padding: 36rpx 0 28rpx;
border-bottom: solid 1rpx #E4E4E4;
.titleCorrelationC
{
.title
{
min-width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 30rpx;
font-weight: bold;
color: #222;
}
.correlation
{
background-color: #F973161A;
padding: 0 12rpx;
line-height: 40rpx;
border-radius: 5rpx;
font-size: 24rpx;
font-weight: 500;
color: #F97316;
}
}
.sectorRateC
{
.sector
{
display: inline-block;
margin-right: 20rpx;
padding: 0 11rpx;
line-height: 30rpx;
border-radius: 5rpx;
border: solid 0.5px #F6604A;
font-size: 20rpx;
font-weight: 500;
color: #F6604A;
}
.rateC
{
display: inline-block;
padding: 0 10rpx;
height: 30rpx;
border-radius: 5rpx;
font-size: 20rpx;
font-weight: 500;
color: white;
.arrow
{
width: 15rpx;
height: auto;
}
}
.rateC.up
{
background-color: #C00000;
}
.rateC.down
{
background-color: #355422;
}
}
.content
{
margin-top: 16rpx;
font-size: 24rpx;
font-weight: 500;
color: #666;
.ai
{
color: #C00000;
}
}
}
}
}
</style>