From 3ffcaa03745ed3d80a7336dacc08cc200ea85f0a Mon Sep 17 00:00:00 2001 From: ArvinLovegood Date: Fri, 13 Jun 2025 15:37:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=E6=B7=BB=E5=8A=A0=E4=B8=AA?= =?UTF-8?q?=E8=82=A1=E7=A0=94=E6=8A=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在前端新增 StockResearchReportList 组件,用于显示个股研报列表 - 在后端新增 StockResearchReport 接口和实现,获取个股研报数据- 在 App.d.ts 和 App.js 中添加相关函数声明和实现- 在 market.vue 中集成新增的个股研报功能 --- app_common.go | 4 + backend/data/market_news_api.go | 47 ++++++++ backend/data/market_news_api_test.go | 8 ++ .../components/StockResearchReportList.vue | 103 ++++++++++++++++++ frontend/src/components/market.vue | 4 + frontend/wailsjs/go/main/App.d.ts | 2 + frontend/wailsjs/go/main/App.js | 4 + 7 files changed, 172 insertions(+) create mode 100644 frontend/src/components/StockResearchReportList.vue diff --git a/app_common.go b/app_common.go index 0418174..14351ec 100644 --- a/app_common.go +++ b/app_common.go @@ -13,3 +13,7 @@ import ( func (a *App) LongTigerRank(date string) *[]models.LongTigerRankData { return data.NewMarketNewsApi().LongTiger(date) } + +func (a *App) StockResearchReport() []any { + return data.NewMarketNewsApi().StockResearchReport(7) +} diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go index 2ca9ca5..4a47212 100644 --- a/backend/data/market_news_api.go +++ b/backend/data/market_news_api.go @@ -377,3 +377,50 @@ func (m MarketNewsApi) LongTiger(date string) *[]models.LongTigerRankData { } return ranks } + +func (m MarketNewsApi) StockResearchReport(days int) []any { + + type Req struct { + BeginTime string `json:"beginTime"` + EndTime string `json:"endTime"` + IndustryCode string `json:"industryCode"` + RatingChange string `json:"ratingChange"` + Rating string `json:"rating"` + OrgCode interface{} `json:"orgCode"` + Code string `json:"code"` + Rcode string `json:"rcode"` + PageSize int `json:"pageSize"` + PageNo int `json:"pageNo"` + P int `json:"p"` + PageNum int `json:"pageNum"` + PageNumber int `json:"pageNumber"` + } + + url := "https://reportapi.eastmoney.com/report/list2" + beginDate := time.Now().Add(-time.Duration(days) * 24 * time.Hour).Format("2006-01-02") + endDate := time.Now().Format("2006-01-02") + logger.SugaredLogger.Infof("beginDate:%s endDate:%s", beginDate, endDate) + resp, err := resty.New().SetTimeout(time.Duration(15)*time.Second).R(). + SetHeader("Host", "reportapi.eastmoney.com"). + SetHeader("Origin", "https://data.eastmoney.com"). + SetHeader("Referer", "https://data.eastmoney.com/report/stock.jshtml"). + SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0"). + SetHeader("Content-Type", "application/json"). + SetBody(&Req{ + BeginTime: beginDate, + EndTime: endDate, + PageNo: 1, + PageSize: 50, + P: 1, + PageNum: 1, + PageNumber: 1, + }).Post(url) + respMap := map[string]any{} + + if err != nil { + return []any{} + } + json.Unmarshal(resp.Body(), &respMap) + //logger.SugaredLogger.Infof("resp:%+v", respMap["data"]) + return respMap["data"].([]any) +} diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go index dd2eabb..bfa0069 100644 --- a/backend/data/market_news_api_test.go +++ b/backend/data/market_news_api_test.go @@ -64,3 +64,11 @@ func TestLongTiger(t *testing.T) { NewMarketNewsApi().LongTiger("2025-06-08") } + +func TestStockResearchReport(t *testing.T) { + db.Init("../../data/stock.db") + resp := NewMarketNewsApi().StockResearchReport(7) + for _, a := range resp { + logger.SugaredLogger.Debugf("value: %+v", a) + } +} diff --git a/frontend/src/components/StockResearchReportList.vue b/frontend/src/components/StockResearchReportList.vue new file mode 100644 index 0000000..4645ed4 --- /dev/null +++ b/frontend/src/components/StockResearchReportList.vue @@ -0,0 +1,103 @@ + + + + + \ No newline at end of file diff --git a/frontend/src/components/market.vue b/frontend/src/components/market.vue index 565b6bb..f9dd4ad 100644 --- a/frontend/src/components/market.vue +++ b/frontend/src/components/market.vue @@ -24,6 +24,7 @@ import {useRoute} from 'vue-router' import RankTable from "./rankTable.vue"; import IndustryMoneyRank from "./industryMoneyRank.vue"; import MoneyTrend from "./moneyTrend.vue"; +import StockResearchReportList from "./StockResearchReportList.vue"; const route = useRoute() const icon = ref('https://raw.githubusercontent.com/ArvinLovegood/go-stock/master/build/appicon.png'); @@ -703,6 +704,9 @@ function ReFlesh(source) { + + + diff --git a/frontend/wailsjs/go/main/App.d.ts b/frontend/wailsjs/go/main/App.d.ts index 594abac..a71e540 100644 --- a/frontend/wailsjs/go/main/App.d.ts +++ b/frontend/wailsjs/go/main/App.d.ts @@ -89,6 +89,8 @@ export function SetStockSort(arg1:number,arg2:string):Promise; export function ShareAnalysis(arg1:string,arg2:string):Promise; +export function StockResearchReport():Promise>; + export function SummaryStockNews(arg1:string,arg2:any):Promise; export function UnFollow(arg1:string):Promise; diff --git a/frontend/wailsjs/go/main/App.js b/frontend/wailsjs/go/main/App.js index 50d3cf9..dfb00a2 100644 --- a/frontend/wailsjs/go/main/App.js +++ b/frontend/wailsjs/go/main/App.js @@ -174,6 +174,10 @@ export function ShareAnalysis(arg1, arg2) { return window['go']['main']['App']['ShareAnalysis'](arg1, arg2); } +export function StockResearchReport() { + return window['go']['main']['App']['StockResearchReport'](); +} + export function SummaryStockNews(arg1, arg2) { return window['go']['main']['App']['SummaryStockNews'](arg1, arg2); }