新闻和持仓数据弹窗显示

This commit is contained in:
dongzp 2026-07-21 16:54:49 +08:00
parent 4aebee0d4d
commit f2a18522f8
3 changed files with 108 additions and 9 deletions

View File

@ -21,14 +21,35 @@
</div> </div>
</section> </section>
<NewsList <QuickAccessFab @open-news="newsOpen = true" @open-position="positionOpen = true" />
v-if="news"
:items="news" <el-dialog
:loading="newsLoading" v-model="newsOpen"
:error="newsError" title="相关新闻"
@refresh="refreshNews" width="720px"
/> top="8vh"
<PositionPanel v-if="positions" :data="positions" /> class="panel-dialog"
destroy-on-close
>
<NewsList
v-if="news"
:items="news"
:loading="newsLoading"
:error="newsError"
@refresh="refreshNews"
/>
</el-dialog>
<el-dialog
v-model="positionOpen"
title="机构持仓"
width="1100px"
top="5vh"
class="panel-dialog position-dialog"
destroy-on-close
>
<PositionPanel v-if="positions" :data="positions" />
</el-dialog>
<template #ai> <template #ai>
<AiAdviceDrawer <AiAdviceDrawer
@ -42,6 +63,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'
import AppLayout from './layout/AppLayout.vue' import AppLayout from './layout/AppLayout.vue'
import AppHeader from './components/header/AppHeader.vue' import AppHeader from './components/header/AppHeader.vue'
import QuoteStats from './components/quote/QuoteStats.vue' import QuoteStats from './components/quote/QuoteStats.vue'
@ -49,6 +71,7 @@ import ChartPanel from './components/quote/ChartPanel.vue'
import OrderBook from './components/quote/OrderBook.vue' import OrderBook from './components/quote/OrderBook.vue'
import TradeTape from './components/quote/TradeTape.vue' import TradeTape from './components/quote/TradeTape.vue'
import LargeOrderAnalysis from './components/quote/LargeOrderAnalysis.vue' import LargeOrderAnalysis from './components/quote/LargeOrderAnalysis.vue'
import QuickAccessFab from './components/common/QuickAccessFab.vue'
import NewsList from './components/news/NewsList.vue' import NewsList from './components/news/NewsList.vue'
import PositionPanel from './components/position/PositionPanel.vue' import PositionPanel from './components/position/PositionPanel.vue'
import AiAdviceDrawer from './components/ai/AiAdviceDrawer.vue' import AiAdviceDrawer from './components/ai/AiAdviceDrawer.vue'
@ -61,6 +84,9 @@ const { data: quote, klineLoading, loadKline } = useQuote()
const { data: news, loading: newsLoading, error: newsError, refresh: refreshNews } = useNews() const { data: news, loading: newsLoading, error: newsError, refresh: refreshNews } = useNews()
const { data: positions } = usePositions() const { data: positions } = usePositions()
const { data: advice, loading: adviceLoading, refresh: refreshAdvice } = useAiAdvice() const { data: advice, loading: adviceLoading, refresh: refreshAdvice } = useAiAdvice()
const newsOpen = ref(false)
const positionOpen = ref(false)
</script> </script>
<style scoped> <style scoped>
@ -77,3 +103,27 @@ const { data: advice, loading: adviceLoading, refresh: refreshAdvice } = useAiAd
} }
} }
</style> </style>
<style>
.panel-dialog .el-dialog__body {
max-height: min(72vh, 780px);
overflow: auto;
padding-top: 8px;
}
.panel-dialog .news-list,
.panel-dialog .position-panel {
margin-top: 0;
border: none;
box-shadow: none;
padding: 0;
}
.panel-dialog .news-list .head .section-title {
display: none;
}
.position-dialog {
--el-dialog-width: min(1100px, 96vw);
}
</style>

View File

@ -0,0 +1,50 @@
<template>
<div class="fab-stack">
<button type="button" class="fab" @click="emit('open-news')">新闻</button>
<button type="button" class="fab" @click="emit('open-position')">持仓</button>
</div>
</template>
<script setup lang="ts">
const emit = defineEmits<{
'open-news': []
'open-position': []
}>()
</script>
<style scoped>
.fab-stack {
position: fixed;
right: 20px;
bottom: calc(var(--ai-bar-height) + 20px);
z-index: 40;
display: flex;
flex-direction: column;
gap: 10px;
}
.fab {
min-width: 56px;
height: 40px;
padding: 0 14px;
border: none;
border-radius: 20px;
background: var(--accent);
color: #fff;
font-size: 14px;
font-weight: 600;
cursor: pointer;
box-shadow: 0 4px 14px rgba(22, 119, 255, 0.35);
transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}
.fab:hover {
background: #4096ff;
transform: translateY(-1px);
box-shadow: 0 6px 18px rgba(22, 119, 255, 0.4);
}
.fab:active {
transform: translateY(0);
}
</style>

View File

@ -22,7 +22,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="hint">大单阈值 &gt; {{ threshold }} 手</div>
</div> </div>
</template> </template>