From 47dbbb88135a9654b547d3654683969d1c9460f1 Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Wed, 14 May 2025 12:04:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=E6=B7=BB=E5=8A=A0=E4=B8=AA?= =?UTF-8?q?=E8=82=A1=E8=B5=84=E9=87=91=E6=B5=81=E5=90=91=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 App.vue 中添加个股资金流向相关路由和菜单项 - 新增 RankTable 组件用于展示排名数据 - 在 market.vue 中集成 RankTable 组件,实现资金流向排名展示 - 在后端添加 GetIndustryMoneyRankSina 和 GetMoneyRankSina接口 - 更新前端 App.d.ts、App.js 和后端 app.go 以支持新功能 --- app.go | 8 +++ backend/data/market_news_api.go | 38 ++++++++++++ backend/data/market_news_api_test.go | 14 +++++ frontend/src/App.vue | 23 ++++++- frontend/src/components/market.vue | 34 ++++++++++- frontend/src/components/rankTable.vue | 87 +++++++++++++++++++++++++++ frontend/wailsjs/go/main/App.d.ts | 4 ++ frontend/wailsjs/go/main/App.js | 8 +++ 8 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 frontend/src/components/rankTable.vue diff --git a/app.go b/app.go index b9ffbbb..d447eb0 100644 --- a/app.go +++ b/app.go @@ -1107,3 +1107,11 @@ func (a *App) GetIndustryRank(sort string, cnt int) []any { res := data.NewMarketNewsApi().GetIndustryRank(sort, cnt) return res["data"].([]any) } +func (a *App) GetIndustryMoneyRankSina(fenlei string) []map[string]any { + res := data.NewMarketNewsApi().GetIndustryMoneyRankSina(fenlei) + return res +} +func (a *App) GetMoneyRankSina(sort string) []map[string]any { + res := data.NewMarketNewsApi().GetMoneyRankSina(sort) + return res +} diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go index b606902..801ad19 100644 --- a/backend/data/market_news_api.go +++ b/backend/data/market_news_api.go @@ -237,3 +237,41 @@ func (m MarketNewsApi) GetIndustryRank(sort string, cnt int) map[string]any { json.Unmarshal([]byte(js), &res) return res } + +func (m MarketNewsApi) GetIndustryMoneyRankSina(fenlei string) []map[string]any { + url := fmt.Sprintf("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/MoneyFlow.ssl_bkzj_bk?page=1&num=20&sort=netamount&asc=0&fenlei=%s", fenlei) + + response, _ := resty.New().SetTimeout(time.Duration(5)*time.Second).R(). + SetHeader("Host", "vip.stock.finance.sina.com.cn"). + SetHeader("Referer", "https://finance.sina.com.cn"). + 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 := &[]map[string]any{} + err := json.Unmarshal([]byte(js), &res) + if err != nil { + logger.SugaredLogger.Error(err) + return *res + } + return *res +} + +func (m MarketNewsApi) GetMoneyRankSina(sort string) []map[string]any { + if sort == "" { + sort = "netamount" + } + url := fmt.Sprintf("https://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/MoneyFlow.ssl_bkzj_ssggzj?page=1&num=20&sort=%s&asc=0&bankuai=&shichang=", sort) + response, _ := resty.New().SetTimeout(time.Duration(5)*time.Second).R(). + SetHeader("Host", "vip.stock.finance.sina.com.cn"). + SetHeader("Referer", "https://finance.sina.com.cn"). + 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 := &[]map[string]any{} + err := json.Unmarshal([]byte(js), &res) + if err != nil { + logger.SugaredLogger.Error(err) + return *res + } + return *res +} diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index 0ece1d7..31fd7aa 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -35,3 +35,17 @@ func TestGetIndustryRank(t *testing.T) { } } +func TestGetIndustryMoneyRankSina(t *testing.T) { + res := NewMarketNewsApi().GetIndustryMoneyRankSina("2") + for i, re := range res { + logger.SugaredLogger.Debugf("key: %+v, value: %+v", i, re) + + } +} +func TestGetMoneyRankSina(t *testing.T) { + res := NewMarketNewsApi().GetMoneyRankSina("r3_net") + for i, re := range res { + logger.SugaredLogger.Debugf("key: %+v, value: %+v", i, re) + + } +} diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 52b5cb2..4795a4f 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -23,7 +23,7 @@ import { AlarmOutline, SparklesOutline, NewspaperOutline, - AnalyticsOutline, BarChartSharp, NewspaperSharp, Flame, + AnalyticsOutline, BarChartSharp, NewspaperSharp, Flame, BarChartOutline, Wallet, } from '@vicons/ionicons5' import {GetConfig, GetGroupList} from "../wailsjs/go/main/App"; import { useRouter } from 'vue-router' @@ -196,6 +196,27 @@ const menuOptions = ref([ ), key: 'market4', icon: renderIcon(Flame), + }, + { + label: () => + h( + RouterLink, + { + href: '#', + to: { + name: 'market', + query: { + name:"个股资金流向", + } + }, + onClick: ()=>{ + EventsEmit("changeMarketTab", {ID:0,name:'个股资金流向'}) + }, + }, + { default: () => '个股资金流向',} + ), + key: 'market5', + icon: renderIcon(Wallet), } ] }, diff --git a/frontend/src/components/market.vue b/frontend/src/components/market.vue index ee7edb9..403c367 100644 --- a/frontend/src/components/market.vue +++ b/frontend/src/components/market.vue @@ -16,6 +16,7 @@ import {NAvatar, NButton, NFlex, NText, useMessage, useNotification} from "naive import {ExportPDF} from "@vavt/v3-extension"; import {MdEditor, MdPreview} from "md-editor-v3"; import { useRoute } from 'vue-router' +import RankTable from "./rankTable.vue"; const route = useRoute() const icon = ref('https://raw.githubusercontent.com/ArvinLovegood/go-stock/master/build/appicon.png'); @@ -400,13 +401,44 @@ function ReFlesh(source){ {{item.bd_zdf}}% {{item.bd_zdf5}}% {{item.bd_zdf20}}% - {{item.nzg_name}} + {{item.nzg_name}} {{item.nzg_code}} {{item.nzg_zdf}}% {{item.nzg_zxj}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/components/rankTable.vue b/frontend/src/components/rankTable.vue new file mode 100644 index 0000000..90bf5c6 --- /dev/null +++ b/frontend/src/components/rankTable.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/frontend/wailsjs/go/main/App.d.ts b/frontend/wailsjs/go/main/App.d.ts index 93bc89c..67d6ee2 100644 --- a/frontend/wailsjs/go/main/App.d.ts +++ b/frontend/wailsjs/go/main/App.d.ts @@ -33,8 +33,12 @@ export function GetGroupList():Promise>; export function GetGroupStockList(arg1:number):Promise>; +export function GetIndustryMoneyRankSina(arg1:string):Promise>>; + export function GetIndustryRank(arg1:string,arg2:number):Promise>; +export function GetMoneyRankSina(arg1:string):Promise>>; + export function GetPromptTemplates(arg1:string,arg2:string):Promise; export function GetStockCommonKLine(arg1:string,arg2:string,arg3:number):Promise; diff --git a/frontend/wailsjs/go/main/App.js b/frontend/wailsjs/go/main/App.js index 06c801c..933c9d4 100644 --- a/frontend/wailsjs/go/main/App.js +++ b/frontend/wailsjs/go/main/App.js @@ -62,10 +62,18 @@ export function GetGroupStockList(arg1) { return window['go']['main']['App']['GetGroupStockList'](arg1); } +export function GetIndustryMoneyRankSina(arg1) { + return window['go']['main']['App']['GetIndustryMoneyRankSina'](arg1); +} + export function GetIndustryRank(arg1, arg2) { return window['go']['main']['App']['GetIndustryRank'](arg1, arg2); } +export function GetMoneyRankSina(arg1) { + return window['go']['main']['App']['GetMoneyRankSina'](arg1); +} + export function GetPromptTemplates(arg1, arg2) { return window['go']['main']['App']['GetPromptTemplates'](arg1, arg2); }