mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
feat(frontend):优化热门股票和话题组件
- 更新热门股票列表,增加更多图标和数据字段 - 改进热门话题组件,添加点击事件和额外信息展示 - 调整股票搜索功能,使用居中弹窗打开链接 - 更新 App.vue 中的图标和菜单项 - 修改后端 HotStock 函数,增加返回数据量
This commit is contained in:
parent
3f4cbca4a7
commit
55839d3329
@ -33,7 +33,7 @@ func (a App) AnalyzeSentiment(text string) data.SentimentResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a App) HotStock(marketType string) *[]models.HotItem {
|
func (a App) HotStock(marketType string) *[]models.HotItem {
|
||||||
return data.NewMarketNewsApi().XUEQIUHotStock(50, marketType)
|
return data.NewMarketNewsApi().XUEQIUHotStock(100, marketType)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a App) HotEvent(size int) *[]models.HotEvent {
|
func (a App) HotEvent(size int) *[]models.HotEvent {
|
||||||
|
@ -14,7 +14,7 @@ import {createDiscreteApi,darkTheme,lightTheme , NIcon, NText,dateZhCN,zhCN} fro
|
|||||||
import {
|
import {
|
||||||
AlarmOutline,
|
AlarmOutline,
|
||||||
AnalyticsOutline,
|
AnalyticsOutline,
|
||||||
BarChartSharp, EaselSharp,
|
BarChartSharp, Bonfire, BonfireOutline, EaselSharp,
|
||||||
ExpandOutline, Flag,
|
ExpandOutline, Flag,
|
||||||
Flame, FlameSharp, InformationOutline,
|
Flame, FlameSharp, InformationOutline,
|
||||||
LogoGithub,
|
LogoGithub,
|
||||||
@ -28,6 +28,11 @@ import {
|
|||||||
Wallet, WarningOutline,
|
Wallet, WarningOutline,
|
||||||
} from '@vicons/ionicons5'
|
} from '@vicons/ionicons5'
|
||||||
import {AnalyzeSentiment, GetConfig, GetGroupList} from "../wailsjs/go/main/App";
|
import {AnalyzeSentiment, GetConfig, GetGroupList} from "../wailsjs/go/main/App";
|
||||||
|
import {Dragon, Fire, Gripfire} from "@vicons/fa";
|
||||||
|
import {ReportSearch} from "@vicons/tabler";
|
||||||
|
import {LocalFireDepartmentRound} from "@vicons/material";
|
||||||
|
import {CommentNote20Filled} from "@vicons/fluent";
|
||||||
|
import {FireFilled, FireOutlined, NotificationFilled, StockOutlined} from "@vicons/antd";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -241,7 +246,7 @@ const menuOptions = ref([
|
|||||||
{default: () => '龙虎榜',}
|
{default: () => '龙虎榜',}
|
||||||
),
|
),
|
||||||
key: 'market6',
|
key: 'market6',
|
||||||
icon: renderIcon(Skull),
|
icon: renderIcon(Dragon),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
@ -262,7 +267,7 @@ const menuOptions = ref([
|
|||||||
{default: () => '个股研报',}
|
{default: () => '个股研报',}
|
||||||
),
|
),
|
||||||
key: 'market7',
|
key: 'market7',
|
||||||
icon: renderIcon(NewspaperSharp),
|
icon: renderIcon(StockOutlined),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
@ -283,7 +288,7 @@ const menuOptions = ref([
|
|||||||
{default: () => '公司公告',}
|
{default: () => '公司公告',}
|
||||||
),
|
),
|
||||||
key: 'market8',
|
key: 'market8',
|
||||||
icon: renderIcon(NewspaperSharp),
|
icon: renderIcon(NotificationFilled),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
@ -304,7 +309,28 @@ const menuOptions = ref([
|
|||||||
{default: () => '行业研究',}
|
{default: () => '行业研究',}
|
||||||
),
|
),
|
||||||
key: 'market9',
|
key: 'market9',
|
||||||
icon: renderIcon(NewspaperSharp),
|
icon: renderIcon(ReportSearch),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: () =>
|
||||||
|
h(
|
||||||
|
RouterLink,
|
||||||
|
{
|
||||||
|
href: '#',
|
||||||
|
to: {
|
||||||
|
name: 'market',
|
||||||
|
query: {
|
||||||
|
name: "当前热门",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onClick: () => {
|
||||||
|
EventsEmit("changeMarketTab", {ID: 0, name: '当前热门'})
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{default: () => '当前热门',}
|
||||||
|
),
|
||||||
|
key: 'market10',
|
||||||
|
icon: renderIcon(Gripfire),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
import {onBeforeMount, onUnmounted, ref} from 'vue'
|
import {onBeforeMount, onUnmounted, ref} from 'vue'
|
||||||
import {HotStock} from "../../wailsjs/go/main/App";
|
import {HotStock} from "../../wailsjs/go/main/App";
|
||||||
import KLineChart from "./KLineChart.vue";
|
import KLineChart from "./KLineChart.vue";
|
||||||
|
import {ArrowBack, ArrowDown, ArrowUp} from "@vicons/ionicons5";
|
||||||
|
|
||||||
const {marketType}=defineProps(
|
const {marketType}=defineProps(
|
||||||
{
|
{
|
||||||
@ -64,8 +65,19 @@ function getMarketCode(item) {
|
|||||||
<n-td><n-text :type="item.percent>0?'error':'success'">{{item.percent}}%</n-text></n-td>
|
<n-td><n-text :type="item.percent>0?'error':'success'">{{item.percent}}%</n-text></n-td>
|
||||||
<n-td><n-text type="info">{{item.current}}</n-text></n-td>
|
<n-td><n-text type="info">{{item.current}}</n-text></n-td>
|
||||||
<n-td><n-text type="info">{{item.value}}</n-text></n-td>
|
<n-td><n-text type="info">{{item.value}}</n-text></n-td>
|
||||||
<n-td><n-text type="info">{{item.increment}}</n-text></n-td>
|
<n-td><n-text :type="item.increment>0?'error':'success'">
|
||||||
<n-td><n-text type="info">{{item.rank_change}}</n-text></n-td>
|
{{item.increment}}
|
||||||
|
<n-icon v-if="item.increment>0" :component="ArrowUp"/>
|
||||||
|
<n-icon v-else :component="ArrowDown"/>
|
||||||
|
</n-text></n-td>
|
||||||
|
<n-td>
|
||||||
|
<n-text :type="item.rank_change>0?'error':'success'">
|
||||||
|
{{item.rank_change}}
|
||||||
|
<n-icon v-if="item.rank_change>0" :component="ArrowUp"/>
|
||||||
|
<n-text v-else-if="item.rank_change==0" ></n-text>
|
||||||
|
<n-icon v-else :component="ArrowDown"/>
|
||||||
|
</n-text>
|
||||||
|
</n-td>
|
||||||
</n-tr>
|
</n-tr>
|
||||||
</n-tbody>
|
</n-tbody>
|
||||||
</n-table>
|
</n-table>
|
||||||
|
@ -13,26 +13,56 @@ onBeforeMount(async () => {
|
|||||||
onUnmounted(()=>{
|
onUnmounted(()=>{
|
||||||
clearInterval(task.value)
|
clearInterval(task.value)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function openCenteredWindow(url, width, height) {
|
||||||
|
const left = (window.screen.width - width) / 2;
|
||||||
|
const top = (window.screen.height - height) / 2;
|
||||||
|
|
||||||
|
return window.open(
|
||||||
|
url,
|
||||||
|
'centeredWindow',
|
||||||
|
`width=${width},height=${height},left=${left},top=${top}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
function showPage(htid) {
|
||||||
|
openCenteredWindow(`https://gubatopic.eastmoney.com/topic_v3.html?htid=${htid}`, 1000, 600)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<n-list bordered>
|
<n-list bordered hoverable clickable>
|
||||||
<template #header>
|
<!-- <template #header>-->
|
||||||
股吧热门
|
<!-- 股吧热门-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
<n-list-item v-for="(item, index) in list" :key="index">
|
<n-list-item v-for="(item, index) in list" :key="index">
|
||||||
<n-thing :title="item.nickname" :description="item.desc" >
|
<n-thing :title="item.nickname" :description="item.desc" :description-style="'font-size: 14px;'" @click="showPage(item.htid)">
|
||||||
<template v-if="item.squareImg" #avatar>
|
<template v-if="item.squareImg" #avatar>
|
||||||
<n-avatar :src="item.squareImg" :size="60">
|
<n-avatar :src="item.squareImg" :size="60">
|
||||||
</n-avatar>
|
</n-avatar>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="item.stock_list" #footer>
|
<template v-if="item.stock_list" #footer>
|
||||||
<n-flex>
|
<n-flex>
|
||||||
<n-tag type="info" v-for="(v, i) in item.stock_list" :bordered="false">
|
<n-tag type="info" v-for="(v, i) in item.stock_list" :bordered="false" size="small">
|
||||||
{{v.name}}
|
{{v.name}}
|
||||||
</n-tag>
|
</n-tag>
|
||||||
</n-flex>
|
</n-flex>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-if="item.clickNumber" #header-extra>
|
||||||
|
<n-flex>
|
||||||
|
<n-button secondary type="warning" size="tiny">讨论数:<n-number-animation
|
||||||
|
show-separator
|
||||||
|
:from="0"
|
||||||
|
:to="item.postNumber"
|
||||||
|
/>
|
||||||
|
</n-button >
|
||||||
|
<n-tag :bordered="false" type="warning" size="small">浏览量:<n-number-animation
|
||||||
|
show-separator
|
||||||
|
:from="0"
|
||||||
|
:to="item.clickNumber"
|
||||||
|
/>
|
||||||
|
</n-tag>
|
||||||
|
</n-flex>
|
||||||
|
</template>
|
||||||
</n-thing>
|
</n-thing>
|
||||||
</n-list-item>
|
</n-list-item>
|
||||||
</n-list>
|
</n-list>
|
||||||
|
@ -606,14 +606,28 @@ function onSelect(item) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openCenteredWindow(url, width, height) {
|
||||||
|
const left = (window.screen.width - width) / 2;
|
||||||
|
const top = (window.screen.height - height) / 2;
|
||||||
|
|
||||||
|
return window.open(
|
||||||
|
url,
|
||||||
|
'centeredWindow',
|
||||||
|
`width=${width},height=${height},left=${left},top=${top}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
function search(code, name) {
|
function search(code, name) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
//window.open("https://xueqiu.com/S/"+code)
|
//window.open("https://xueqiu.com/S/"+code)
|
||||||
//window.open("https://www.cls.cn/stock?code="+code)
|
//window.open("https://www.cls.cn/stock?code="+code)
|
||||||
//window.open("https://quote.eastmoney.com/"+code+".html")
|
//window.open("https://quote.eastmoney.com/"+code+".html")
|
||||||
//window.open("https://finance.sina.com.cn/realstock/company/"+code+"/nc.shtml")
|
//window.open("https://finance.sina.com.cn/realstock/company/"+code+"/nc.shtml")
|
||||||
window.open("https://www.iwencai.com/unifiedwap/result?w=" + name)
|
//window.open("https://www.iwencai.com/unifiedwap/result?w=" + name)
|
||||||
//window.open("https://www.iwencai.com/chat/?question="+code)
|
//window.open("https://www.iwencai.com/chat/?question="+code)
|
||||||
|
|
||||||
|
openCenteredWindow("https://www.iwencai.com/unifiedwap/result?w=" + name,1000,800)
|
||||||
|
|
||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user