diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 145c990..67ffd8a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -4,9 +4,9 @@ on:
push:
branches:
- master
- tags:
- # Match any new tag
- - '*-release'
+# tags:
+# # Match any new tag
+# - '*-release'
env:
# Necessary for most environments as build failure can occur due to OOM issues
diff --git a/app_common.go b/app_common.go
index c557435..d3a652a 100644
--- a/app_common.go
+++ b/app_common.go
@@ -17,3 +17,6 @@ func (a *App) LongTigerRank(date string) *[]models.LongTigerRankData {
func (a *App) StockResearchReport(stockCode string) []any {
return data.NewMarketNewsApi().StockResearchReport(stockCode, 7)
}
+func (a *App) StockNotice(stockCode string) []any {
+ return data.NewMarketNewsApi().StockNotice(stockCode)
+}
diff --git a/backend/data/market_news_api.go b/backend/data/market_news_api.go
index b90fd6f..f6d3c49 100644
--- a/backend/data/market_news_api.go
+++ b/backend/data/market_news_api.go
@@ -433,3 +433,28 @@ func (m MarketNewsApi) StockResearchReport(stockCode string, days int) []any {
//logger.SugaredLogger.Infof("resp:%+v", respMap["data"])
return respMap["data"].([]any)
}
+
+func (m MarketNewsApi) StockNotice(stock_list string) []any {
+ var stockCodes []string
+ for _, stockCode := range strings.Split(stock_list, ",") {
+ if strutil.ContainsAny(stockCode, []string{"."}) {
+ stockCode = strings.Split(stockCode, ".")[0]
+ stockCodes = append(stockCodes, stockCode)
+ }
+ }
+
+ url := "https://np-anotice-stock.eastmoney.com/api/security/ann?page_size=50&page_index=1&ann_type=SHA%2CCYB%2CSZA%2CBJA%2CINV&client_source=web&f_node=0&stock_list=" + strings.Join(stockCodes, ",")
+ resp, err := resty.New().SetTimeout(time.Duration(15)*time.Second).R().
+ SetHeader("Host", "np-anotice-stock.eastmoney.com").
+ SetHeader("Referer", "https://data.eastmoney.com/notices/hsa/5.html").
+ SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0").
+ Get(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"].(map[string]any))["list"].([]any)
+}
diff --git a/backend/data/market_news_api_test.go b/backend/data/market_news_api_test.go
index 032aa6e..5513961 100644
--- a/backend/data/market_news_api_test.go
+++ b/backend/data/market_news_api_test.go
@@ -72,3 +72,12 @@ func TestStockResearchReport(t *testing.T) {
logger.SugaredLogger.Debugf("value: %+v", a)
}
}
+
+func TestStockNotice(t *testing.T) {
+ db.Init("../../data/stock.db")
+ resp := NewMarketNewsApi().StockNotice("600584,600900")
+ for _, a := range resp {
+ logger.SugaredLogger.Debugf("value: %+v", a)
+ }
+
+}
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 61b501f..760e45c 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -261,6 +261,27 @@ const menuOptions = ref([
key: 'market7',
icon: renderIcon(NewspaperSharp),
},
+ {
+ label: () =>
+ h(
+ RouterLink,
+ {
+ href: '#',
+ to: {
+ name: 'market',
+ query: {
+ name: "公司公告",
+ }
+ },
+ onClick: () => {
+ EventsEmit("changeMarketTab", {ID: 0, name: '公司公告'})
+ },
+ },
+ {default: () => '公司公告',}
+ ),
+ key: 'market8',
+ icon: renderIcon(NewspaperSharp),
+ },
]
},
{
diff --git a/frontend/src/components/KLineChart.vue b/frontend/src/components/KLineChart.vue
index ae2ab30..5791430 100644
--- a/frontend/src/components/KLineChart.vue
+++ b/frontend/src/components/KLineChart.vue
@@ -356,7 +356,7 @@ function handleKLine(code,name){
chart.setOption(option);
chart.on('click',{seriesName:'日K'}, function(params) {
- console.log("click:",params);
+ //console.log("click:",params);
});
})
}
diff --git a/frontend/src/components/StockNoticeList.vue b/frontend/src/components/StockNoticeList.vue
new file mode 100644
index 0000000..f99fc31
--- /dev/null
+++ b/frontend/src/components/StockNoticeList.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+ 股票代码
+ 股票名称
+ 公告标题
+ 公告类型
+ 公告日期
+ 数据更新时间
+
+
+
+
+
+ {{item.codes[0].stock_code }}
+
+
+ {{item.codes[0].short_name }}
+
+
+ {{item.title}}
+
+
+ {{item.columns[0].column_name }}
+
+
+ {{item.notice_date.substring(0,10) }}
+
+
+ {{item.display_time.substring(0,19)}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/StockResearchReportList.vue b/frontend/src/components/StockResearchReportList.vue
index 2365483..fa719b5 100644
--- a/frontend/src/components/StockResearchReportList.vue
+++ b/frontend/src/components/StockResearchReportList.vue
@@ -15,7 +15,7 @@ const options = ref([])
function getStockResearchReport(value) {
StockResearchReport(value).then(result => {
- console.log(result)
+ //console.log(result)
list.value = result
})
}
@@ -97,7 +97,7 @@ function handleSearch(value) {
-
+
{{item.stockName}}
diff --git a/frontend/src/components/about.vue b/frontend/src/components/about.vue
index 3ad0732..399760d 100644
--- a/frontend/src/components/about.vue
+++ b/frontend/src/components/about.vue
@@ -44,8 +44,8 @@ EventsOn("updateVersion",async (msg) => {
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
- console.log("GitHub UTC 时间:", utcDate);
- console.log("转换后的本地时间:", formattedDate);
+ //console.log("GitHub UTC 时间:", utcDate);
+ //console.log("转换后的本地时间:", formattedDate);
notify.info({
avatar: () =>
h(NAvatar, {
diff --git a/frontend/src/components/fund.vue b/frontend/src/components/fund.vue
index 1c0ee53..f45b6fa 100644
--- a/frontend/src/components/fund.vue
+++ b/frontend/src/components/fund.vue
@@ -47,7 +47,7 @@ onBeforeMount(()=>{
})
GetFollowedFund().then(result => {
followList.value = result
- console.log("followList",followList.value)
+ //console.log("followList",followList.value)
})
})
@@ -60,7 +60,7 @@ onMounted(() => {
//ws.value = new WebSocket('ws://localhost:16688/ws'); // 替换为你的 WebSocket 服务器地址
ws.value.onopen = () => {
- console.log('WebSocket 连接已打开');
+ //console.log('WebSocket 连接已打开');
};
ws.value.onmessage = (event) => {
@@ -74,13 +74,13 @@ onMounted(() => {
};
ws.value.onclose = () => {
- console.log('WebSocket 连接已关闭');
+ //console.log('WebSocket 连接已关闭');
};
ticker.value=setInterval(() => {
GetFollowedFund().then(result => {
followList.value = result
- console.log("followList",followList.value)
+ //console.log("followList",followList.value)
})
}, 1000*60)
@@ -103,7 +103,7 @@ function AddFund(){
message.success("关注成功")
GetFollowedFund().then(result => {
followList.value = result
- console.log("followList",followList.value)
+ //console.log("followList",followList.value)
})
}
})
@@ -114,7 +114,7 @@ function unFollow(code){
message.success("取消关注成功")
GetFollowedFund().then(result => {
followList.value = result
- console.log("followList",followList.value)
+ //console.log("followList",followList.value)
})
}
})
diff --git a/frontend/src/components/industryMoneyRank.vue b/frontend/src/components/industryMoneyRank.vue
index 813fbcb..835c8b6 100644
--- a/frontend/src/components/industryMoneyRank.vue
+++ b/frontend/src/components/industryMoneyRank.vue
@@ -42,7 +42,7 @@ function GetRankData(){
GetIndustryMoneyRankSina(fenlei.value,sort.value).then(result => {
if(result.length>0){
dataList.value = result
- console.log(result)
+ //console.log(result)
}
})
}
diff --git a/frontend/src/components/market.vue b/frontend/src/components/market.vue
index f9dd4ad..d41c67d 100644
--- a/frontend/src/components/market.vue
+++ b/frontend/src/components/market.vue
@@ -25,6 +25,7 @@ import RankTable from "./rankTable.vue";
import IndustryMoneyRank from "./industryMoneyRank.vue";
import MoneyTrend from "./moneyTrend.vue";
import StockResearchReportList from "./StockResearchReportList.vue";
+import StockNoticeList from "./StockNoticeList.vue";
const route = useRoute()
const icon = ref('https://raw.githubusercontent.com/ArvinLovegood/go-stock/master/build/appicon.png');
@@ -129,7 +130,7 @@ function handleEXPLANATION(value, option){
}
function sortLongTigerRank(e){
- console.log(e.target.dataset)
+ //console.log(e.target.dataset)
// let field= e.target.dataset.field;
// lhbList.value= _.sortBy(lhbList.value, function(o) { return o[field]; });
}
@@ -224,7 +225,7 @@ function industryRank() {
GetIndustryRank(sort.value, 150).then(result => {
if (result.length > 0) {
- console.log(result)
+ //console.log(result)
industryRanks.value = result
} else {
message.info("暂无数据")
@@ -341,7 +342,7 @@ function share() {
}
function ReFlesh(source) {
- console.log("ReFlesh:", source)
+ //console.log("ReFlesh:", source)
ReFleshTelegraphList(source).then(res => {
if (source === "财联社电报") {
telegraphList.value = res
@@ -612,6 +613,9 @@ function ReFlesh(source) {
+
+ *当天的龙虎榜数据通常在收盘结束后一小时左右更新
+
@@ -707,6 +711,9 @@ function ReFlesh(source) {
+
+
+
diff --git a/frontend/src/components/moneyTrend.vue b/frontend/src/components/moneyTrend.vue
index 149fb02..fa782b0 100644
--- a/frontend/src/components/moneyTrend.vue
+++ b/frontend/src/components/moneyTrend.vue
@@ -68,7 +68,7 @@ const handleLine = (code, days) => {
}
}
- console.log("volume", volume)
+ //console.log("volume", volume)
const upColor = '#ec0000';
const downColor = '#00da3c';
let option = {
diff --git a/frontend/src/components/settings.vue b/frontend/src/components/settings.vue
index 4be5390..69c0160 100644
--- a/frontend/src/components/settings.vue
+++ b/frontend/src/components/settings.vue
@@ -79,12 +79,12 @@ onMounted(()=>{
formValue.value.darkTheme = res.darkTheme
formValue.value.enableFund = res.enableFund
- console.log(res)
+ //console.log(res)
})
//message.info("加载完成")
GetPromptTemplates("","").then(res=>{
- console.log(res)
+ //console.log(res)
promptTemplates.value=res
})
})
@@ -165,7 +165,7 @@ function importConfig(){
let reader = new FileReader();
reader.onload = (e) => {
let config = JSON.parse(e.target.result);
- console.log(config)
+ //console.log(config)
formValue.value.ID = config.ID
formValue.value.tushareToken = config.tushareToken
formValue.value.dingPush = {
@@ -204,7 +204,7 @@ function importConfig(){
window.onerror = function (event, source, lineno, colno, error) {
- console.log(event, source, lineno, colno, error)
+ //console.log(event, source, lineno, colno, error)
// 将错误信息发送给后端
EventsEmit("frontendError", {
page: "settings.vue",
@@ -237,14 +237,14 @@ function savePrompt(){
AddPrompt(formPrompt.value).then(res=>{
message.success(res)
GetPromptTemplates("","").then(res=>{
- console.log(res)
+ //console.log(res)
promptTemplates.value=res
})
showManagePromptsModal.value=false
})
}
function editPrompt(prompt){
- console.log(prompt)
+ //console.log(prompt)
formPrompt.value.ID=prompt.ID
formPrompt.value.Name=prompt.name
formPrompt.value.Content=prompt.content
@@ -255,7 +255,7 @@ function deletePrompt(ID){
DelPrompt(ID).then(res=>{
message.success(res)
GetPromptTemplates("","").then(res=>{
- console.log(res)
+ //console.log(res)
promptTemplates.value=res
})
})
diff --git a/frontend/src/components/stock.vue b/frontend/src/components/stock.vue
index 1b958cd..2d95abb 100644
--- a/frontend/src/components/stock.vue
+++ b/frontend/src/components/stock.vue
@@ -178,7 +178,7 @@ onBeforeMount(()=>{
if(route.query.groupId){
message.success("切换分组:"+route.query.groupName)
currentGroupId.value=Number(route.query.groupId)
- console.log("route.params",route.query)
+ //console.log("route.params",route.query)
}
})
GetStockList("").then(result => {
@@ -531,7 +531,7 @@ function getStockList(value){
function blinkBorder(findId){
// 获取要滚动到的元素
let element = document.getElementById(findId);
- console.log("blinkBorder",findId,element)
+ //console.log("blinkBorder",findId,element)
if (element) {
// 滚动到该元素
element.scrollIntoView({ behavior: 'smooth'});
@@ -652,7 +652,7 @@ function setStock(code,name){
modalShow.value=true
}
function clearFeishi(){
- console.log("clearFeishi")
+ //console.log("clearFeishi")
clearInterval(feishiInterval.value)
}
function showFsChart(code, name) {
@@ -1242,7 +1242,7 @@ function handleKLine(){
};
chart.setOption(option);
chart.on('click',{seriesName:'日K'}, function(params) {
- console.log("click:",params);
+ //console.log("click:",params);
});
})
}
diff --git a/frontend/wailsjs/go/main/App.d.ts b/frontend/wailsjs/go/main/App.d.ts
index 73251c0..d32769d 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 StockNotice(arg1:string):Promise>;
+
export function StockResearchReport(arg1:string):Promise>;
export function SummaryStockNews(arg1:string,arg2:any):Promise;
diff --git a/frontend/wailsjs/go/main/App.js b/frontend/wailsjs/go/main/App.js
index fc55fb7..d2aa7e0 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 StockNotice(arg1) {
+ return window['go']['main']['App']['StockNotice'](arg1);
+}
+
export function StockResearchReport(arg1) {
return window['go']['main']['App']['StockResearchReport'](arg1);
}