From ae9f4073dceb8b94a3fb93f3342415f0bd7aa8ea Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Tue, 13 May 2025 23:11:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(market):=E6=B7=BB=E5=8A=A0=E8=A1=8C?= =?UTF-8?q?=E4=B8=9A=E6=8E=92=E5=90=8D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在市场行情模块中增加行业排名标签页 - 实现行业排名数据的获取和展示- 添加行业排名相关的图标和交互 - 优化市场行情模块的结构和样式 --- app.go | 4 ++ backend/data/market_news_api.go | 13 ++++ backend/data/market_news_api_test.go | 8 +++ frontend/src/App.vue | 102 ++++++++++++++++++++++++++- frontend/src/components/about.vue | 3 +- frontend/src/components/market.vue | 77 ++++++++++++++++++-- frontend/src/components/stock.vue | 20 +++++- frontend/wailsjs/go/main/App.d.ts | 2 + frontend/wailsjs/go/main/App.js | 4 ++ 9 files changed, 221 insertions(+), 12 deletions(-) diff --git a/app.go b/app.go index 13e3a59..b9ffbbb 100644 --- a/app.go +++ b/app.go @@ -1103,3 +1103,7 @@ func (a *App) SummaryStockNews(question string, sysPromptId *int) { } runtime.EventsEmit(a.ctx, "summaryStockNews", "DONE") } +func (a *App) GetIndustryRank(sort string, cnt int) []any { + res := data.NewMarketNewsApi().GetIndustryRank(sort, cnt) + return res["data"].([]any) +} diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go index 7189ae3..b606902 100644 --- a/backend/data/market_news_api.go +++ b/backend/data/market_news_api.go @@ -224,3 +224,16 @@ func (m MarketNewsApi) GlobalStockIndexes(crawlTimeOut uint) map[string]any { json.Unmarshal([]byte(js), &res) return res["data"].(map[string]any) } + +func (m MarketNewsApi) GetIndustryRank(sort string, cnt int) map[string]any { + + url := fmt.Sprintf("https://proxy.finance.qq.com/ifzqgtimg/appstock/app/mktHs/rank?l=%d&p=1&t=01/averatio&ordertype=&o=%s", cnt, sort) + response, _ := resty.New().SetTimeout(time.Duration(5)*time.Second).R(). + SetHeader("Referer", "https://stockapp.finance.qq.com/"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.60"). + Get(url) + js := string(response.Body()) + res := make(map[string]any) + json.Unmarshal([]byte(js), &res) + return res +} diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index a2f2bb1..0ece1d7 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -27,3 +27,11 @@ func TestGlobalStockIndexes(t *testing.T) { } logger.SugaredLogger.Debugf("resp: %+v", string(bytes)) } + +func TestGetIndustryRank(t *testing.T) { + res := NewMarketNewsApi().GetIndustryRank("0", 10) + for s, a := range res["data"].([]any) { + logger.SugaredLogger.Debugf("key: %+v, value: %+v", s, a) + + } +} diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 9fd4fb5..52b5cb2 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -15,7 +15,15 @@ import { SettingsOutline, ReorderTwoOutline, ExpandOutline, - PowerOutline, LogoGithub, MoveOutline, WalletOutline, StarOutline, AlarmOutline, SparklesOutline, NewspaperOutline, + PowerOutline, + LogoGithub, + MoveOutline, + WalletOutline, + StarOutline, + AlarmOutline, + SparklesOutline, + NewspaperOutline, + AnalyticsOutline, BarChartSharp, NewspaperSharp, Flame, } from '@vicons/ionicons5' import {GetConfig, GetGroupList} from "../wailsjs/go/main/App"; import { useRouter } from 'vue-router' @@ -90,16 +98,106 @@ const menuOptions = ref([ h( RouterLink, { + href: '#', to: { name: 'market', params: { } - } + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'市场快讯'}) + }, }, { default: () => '市场行情' } ), key: 'market', icon: renderIcon(NewspaperOutline), + children:[ + { + label: () => + h( + RouterLink, + { + href: '#', + to: { + name: 'market', + query: { + name:"市场快讯", + } + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'市场快讯'}) + }, + }, + { default: () => '市场快讯',} + ), + key: 'market1', + icon: renderIcon(NewspaperSharp), + }, + { + label: () => + h( + RouterLink, + { + href: '#', + to: { + name: 'market', + query: { + name:"全球股指", + }, + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'全球股指'}) + }, + }, + { default: () => '全球股指',} + ), + key: 'market2', + icon: renderIcon(BarChartSharp), + }, + { + label: () => + h( + RouterLink, + { + href: '#', + to: { + name: 'market', + query: { + name:"指标行情", + } + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'指标行情'}) + }, + }, + { default: () => '指标行情',} + ), + key: 'market3', + icon: renderIcon(AnalyticsOutline), + }, + { + label: () => + h( + RouterLink, + { + href: '#', + to: { + name: 'market', + query: { + name:"行业排名", + } + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'行业排名'}) + }, + }, + { default: () => '行业排名',} + ), + key: 'market4', + icon: renderIcon(Flame), + } + ] }, { label: () => diff --git a/frontend/src/components/about.vue b/frontend/src/components/about.vue index e4c0f74..3ad0732 100644 --- a/frontend/src/components/about.vue +++ b/frontend/src/components/about.vue @@ -4,7 +4,7 @@ import 'md-editor-v3/lib/preview.css'; import {h, onBeforeUnmount, onMounted, ref} from 'vue'; import {CheckUpdate, GetVersionInfo} from "../../wailsjs/go/main/App"; -import {EventsOn} from "../../wailsjs/runtime"; +import {EventsOff, EventsOn} from "../../wailsjs/runtime"; import {NAvatar, NButton, useNotification} from "naive-ui"; const updateLog = ref(''); const versionInfo = ref(''); @@ -25,6 +25,7 @@ onMounted(() => { }) onBeforeUnmount(() => { notify.destroyAll() + EventsOff("updateVersion") }) EventsOn("updateVersion",async (msg) => { diff --git a/frontend/src/components/market.vue b/frontend/src/components/market.vue index 5139af2..ee7edb9 100644 --- a/frontend/src/components/market.vue +++ b/frontend/src/components/market.vue @@ -1,20 +1,22 @@