You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

391 lines
9.4 KiB

<template>
<view>
<!-- 第一行白色背景标题和按钮 -->
<view class="market-header">
<text class="section-title">今日市场概览</text>
<text class="more-btn" @click="showMarketSelector">{{ buttonText }}</text>
</view>
<!-- 第二行灰色圆角背景市场数据 -->
<view class="market-content">
<!-- 默认显示图片 -->
<view class="selected-market" v-if="!showForexMarket">
<image class="market-image" src="https://d31zlh4on95l9h.cloudfront.net/images/dee46373b5593d5f315d91675a38fb61.png" mode="widthFix"></image>
</view>
<!-- 外汇市场样式 -->
<view class="selected-market" v-if="showForexMarket">
<view class="forex-market">
<!-- 上部分三个汇率容器 -->
<view class="forex-rates">
<view class="forex-rate-item up">
<text class="forex-pair">美元/日元</text>
<text class="forex-value">151.13</text>
<text class="forex-change">+1.62%</text>
</view>
<view class="forex-rate-item down">
<text class="forex-pair">美元/韩元</text>
<text class="forex-value">1424.900</text>
<text class="forex-change">-2.92%</text>
</view>
<view class="forex-rate-item up">
<text class="forex-pair">美元/英镑</text>
<text class="forex-value">0.730</text>
<text class="forex-change">+2.92%</text>
</view>
</view>
<!-- 中部分智能解读标题 -->
<view class="forex-analysis-title">
<text class="analysis-title">智能解读</text>
</view>
<!-- 下部分智能解读内容 -->
<view class="forex-analysis-content">
<view class="analysis-icon-container">
<image class="analysis-brain-icon" src="https://d31zlh4on95l9h.cloudfront.net/images/8f35e54c52412467101370aa70d8fdb2.png" mode="aspectFit"></image>
</view>
<view class="analysis-items">
<view class="analysis-item">
<text class="analysis-dot orange"></text>
<text class="analysis-text">今日市场情报: 偏乐观</text>
</view>
<view class="analysis-item">
<text class="analysis-dot blue"></text>
<text class="analysis-text">市场风险评级: 需警惕潜在风险</text>
</view>
<view class="analysis-item" @click="goToMorningMarketAnalysis">
<text class="analysis-dot green"></text>
<text class="analysis-text">早盘解析: 今日高开, 芯片稀土公共</text>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 市场选择对话框 -->
<uni-popup ref="marketPopup" type="center" :mask-click="true" @change="popupChange">
<view class="market-dialog">
<view class="dialog-title">
<text>选择市场</text>
</view>
<view class="market-list">
<view class="market-option" v-for="(market, index) in marketOptions" :key="index" @click="selectMarket(market.id)">
<view class="market-flag">
<image :src="market.flag" mode="aspectFit" class="flag-image"></image>
</view>
<view class="market-name-container">
<text class="market-option-name">{{ market.name }}</text>
</view>
<view class="market-checkbox">
<radio :checked="selectedMarket === market.id" color="#4080ff" />
</view>
</view>
</view>
<view class="dialog-buttons">
<button class="confirm-btn" @click="confirmMarketSelection">确认</button>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
export default {
name: 'MarketOverview',
data() {
return {
selectedMarket: 'forex',
tempSelectedMarket: 'forex', // 临时选择,确认后才会应用
previousMarket: null,
buttonText: '切换市场',
showSelector: false,
showForexMarket: false, // 默认不显示外汇市场内容
marketOptions: [
{ id: 'forex', name: '外汇市场', flag: '/static/c2.png', value: '+1.62%', trend: 'up' }
],
marketData: {
'forex': {
name: '外汇市场',
value: '+1.62%',
trend: 'up',
indicators: [
{ name: '美元/日元', value: '151.13 +1.62%', trend: 'up' },
{ name: '美元/韩元', value: '1424.900 -2.92%', trend: 'down' },
{ name: '美元/英镑', value: '0.79 +2.92%', trend: 'up' }
]
}
}
}
},
methods: {
showMarketSelector() {
// 切换显示外汇市场内容
this.showForexMarket = !this.showForexMarket;
// 更新按钮文本
this.buttonText = this.showForexMarket ? '外汇市场' : '切换市场';
},
popupChange(e) {
// 对话框关闭时,如果没有确认,则恢复原来的选择
if (!e.show && this.tempSelectedMarket !== this.selectedMarket) {
this.tempSelectedMarket = this.selectedMarket;
}
},
selectMarket(marketId) {
// 临时选择市场,不立即应用
this.tempSelectedMarket = marketId;
},
confirmMarketSelection() {
// 确认选择,应用市场选择并关闭对话框
this.selectedMarket = this.tempSelectedMarket;
this.showSelector = false;
this.$refs.marketPopup.close();
},
goToMorningMarketAnalysis() {
// 跳转到早盘解析页面
uni.navigateTo({
url: '/pages/morningMarketAnalysis/morningMarketAnalysis'
});
},
getSelectedMarketName() {
if (!this.selectedMarket) return '';
return this.marketData[this.selectedMarket].name;
},
getSelectedMarketValue() {
if (!this.selectedMarket) return '';
return this.marketData[this.selectedMarket].value;
},
getSelectedMarketTrend() {
if (!this.selectedMarket) return '';
return this.marketData[this.selectedMarket].trend;
},
getSelectedMarketIndicators() {
if (!this.selectedMarket) return [];
return this.marketData[this.selectedMarket].indicators;
}
}
}
</script>
<style>
/* 市场概览样式 */
.market-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 15px;
background-color: #ffffff;
}
.section-title {
font-size: 16px;
font-weight: bold;
color: #333;
}
.more-btn {
font-size: 14px;
color: #4080ff;
}
.market-content {
margin: 0 0 15px;
background-color: #f5f7fa;
border-radius: 8px;
overflow: hidden;
}
/* 外汇市场样式 */
.forex-market {
padding: 15px;
}
.forex-rates {
display: flex;
justify-content: space-between;
gap: 10px;
margin-bottom: 15px;
}
.forex-rate-item {
width: 30%;
padding: 10px;
border-radius: 6px;
display: flex;
flex-direction: column;
align-items: center;
}
.forex-rate-item.up {
background-color: rgba(82, 196, 26, 0.1);
border: 1px solid #52c41a;
}
.forex-rate-item.down {
background-color: rgba(245, 34, 45, 0.1);
border: 1px solid #f5222d;
}
.forex-pair {
font-size: 12px;
color: #666;
margin-bottom: 5px;
}
.forex-value {
font-size: 16px;
font-weight: bold;
color: #333;
margin-bottom: 5px;
}
.forex-change {
font-size: 12px;
color: #52c41a;
}
.forex-rate-item.down .forex-change {
color: #f5222d;
}
.forex-analysis-title {
display: flex;
align-items: center;
margin-bottom: 10px;
border-left: 3px solid #f5222d;
padding-left: 8px;
}
.analysis-title {
font-size: 14px;
font-weight: bold;
color: #333;
}
.forex-analysis-content {
display: flex;
background-color: #fff;
border-radius: 6px;
padding: 12px;
}
.analysis-icon-container {
width: 40px;
height: 40px;
margin-right: 10px;
display: flex;
align-items: center;
justify-content: center;
align-self: center;
}
.analysis-brain-icon {
width: 100%;
height: 100%;
}
.analysis-items {
flex: 1;
}
.analysis-item {
display: flex;
align-items: center;
margin-bottom: 8px;
}
.analysis-item:last-child {
margin-bottom: 0;
}
.analysis-dot {
width: 8px;
height: 8px;
border-radius: 50%;
margin-right: 8px;
}
.analysis-dot.orange {
background-color: #fa8c16;
}
.analysis-dot.blue {
background-color: #1890ff;
}
.analysis-dot.green {
background-color: #52c41a;
}
.analysis-text {
font-size: 12px;
color: #333;
line-height: 1.4;
}
/* 市场选择对话框样式 */
.market-dialog {
width: 300px;
background-color: #fff;
border-radius: 10px;
overflow: hidden;
}
.dialog-title {
padding: 15px;
text-align: center;
border-bottom: 1px solid #eee;
}
.market-list {
max-height: 300px;
overflow-y: auto;
}
.market-option {
display: flex;
align-items: center;
padding: 12px 15px;
border-bottom: 1px solid #f5f5f5;
}
.market-flag {
width: 24px;
height: 24px;
margin-right: 10px;
}
.flag-image {
width: 100%;
height: 100%;
border-radius: 50%;
}
.market-name-container {
flex: 1;
}
.market-option-name {
font-size: 14px;
color: #333;
}
.dialog-buttons {
padding: 10px 15px 15px;
display: flex;
justify-content: center;
}
.confirm-btn {
width: 80%;
height: 40px;
line-height: 40px;
text-align: center;
background-color: #4080ff;
color: #fff;
border-radius: 20px;
font-size: 14px;
}
</style>