Compare commits

...

6 Commits

Author SHA1 Message Date
ArvinLovegood
b1a9a8d4d8 refactor(update):优化更新检查逻辑
- 修改 CheckUpdate 函数签名,添加 flag 参数
- 根据 flag 参数控制是否显示"当前版本无更新"的通知
- 调整前端按钮点击事件,传递参数 1 给 CheckUpdate 函数
- 优化后端更新检查流程,减少不必要的通知推送
2025-07-17 17:39:59 +08:00
ArvinLovegood
b98f829286 refactor(update):优化更新检查逻辑
- 修改 CheckUpdate 函数签名,添加 flag 参数
-根据 flag 参数控制是否显示"当前版本无更新"的通知
- 调整前端按钮点击事件,传递参数 1 给 CheckUpdate 函数
- 优化后端更新检查流程,减少不必要的通知推送
2025-07-17 17:31:40 +08:00
ArvinLovegood
dda160069a refactor(app):更新股票数据接口地址
- 将股票数据接口的 HTTPS 地址替换为 HTTP 地址
- 更新接口服务器 IP 和端口
- 此修改影响 A 股、港股和美股的股票数据获取
2025-07-17 14:40:59 +08:00
ArvinLovegood
f80ea181be feat:更新应用标题添加“AI赋能股票分析
- 在 main.go 文件中更新了应用的标题
- 添加了 AI赋能股票分析 和 星星图标,提升应用吸引力
2025-07-16 18:16:04 +08:00
ArvinLovegood
f5c8f5d0ef refactor(mac):显示windows窗体(显示最大最小化按钮)
- 在 Mac 系统中添加编辑菜单
- 注释掉全屏和还原菜单项
- 移除无边框窗口设置
- 调整搜索框和表格样式
- 优化设置页面布局
2025-07-16 18:01:51 +08:00
ArvinLovegood
23d3566f31 feat(app):添加版本更新提示和自定义通知颜色
- 在版本检查无更新时发送通知
- 根据通知来源调整颜色:go-stock 为橙色,其他为蓝色
2025-07-16 12:57:13 +08:00
8 changed files with 45 additions and 35 deletions

23
app.go
View File

@@ -144,7 +144,7 @@ func (a *App) CheckSponsorCode(sponsorCode string) map[string]any {
}
}
func (a *App) CheckUpdate() {
func (a *App) CheckUpdate(flag int) {
sponsorCode := strutil.Trim(a.GetConfig().SponsorCode)
if sponsorCode != "" {
encrypted, err := hex.DecodeString(sponsorCode)
@@ -295,6 +295,16 @@ func (a *App) CheckUpdate() {
"content": "版本更新完成,下次重启软件生效.",
})
}
} else {
if flag == 1 {
go runtime.EventsEmit(a.ctx, "newsPush", map[string]any{
"time": "当前版本:" + Version,
"isRed": false,
"source": "go-stock",
"content": "当前版本无更新",
})
}
}
}
@@ -423,11 +433,11 @@ func (a *App) domReady(ctx context.Context) {
}
//检查新版本
go func() {
a.CheckUpdate()
a.CheckUpdate(0)
a.CheckStockBaseInfo(a.ctx)
a.cron.AddFunc("30 05 8,12,20 * * *", func() {
logger.SugaredLogger.Errorf("Checking for updates...")
a.CheckUpdate()
a.CheckUpdate(0)
})
}()
@@ -468,12 +478,11 @@ func (a *App) CheckStockBaseInfo(ctx context.Context) {
defer func() {
go runtime.EventsEmit(ctx, "loadingMsg", "done")
}()
stockBasics := &[]data.StockBasic{}
resty.New().R().
SetHeader("user", "go-stock").
SetResult(stockBasics).
Get("https://go-stock.sparkmemory.top/stock_basic.json")
Get("http://8.134.249.145:18080/go-stock/stock_basic.json")
for _, stock := range *stockBasics {
stockInfo := &data.StockBasic{
@@ -495,7 +504,7 @@ func (a *App) CheckStockBaseInfo(ctx context.Context) {
resty.New().R().
SetHeader("user", "go-stock").
SetResult(stockHKBasics).
Get("https://go-stock.sparkmemory.top/stock_base_info_hk.json")
Get("http://8.134.249.145:18080/go-stock/stock_base_info_hk.json")
for _, stock := range *stockHKBasics {
stockInfo := &models.StockInfoHK{
Code: stock.Code,
@@ -514,7 +523,7 @@ func (a *App) CheckStockBaseInfo(ctx context.Context) {
resty.New().R().
SetHeader("user", "go-stock").
SetResult(stockUSBasics).
Get("https://go-stock.sparkmemory.top/stock_base_info_us.json")
Get("http://8.134.249.145:18080/go-stock/stock_base_info_us.json")
for _, stock := range *stockUSBasics {
stockInfo := &models.StockInfoUS{
Code: stock.Code,

View File

@@ -654,7 +654,7 @@ onMounted(() => {
content: () => h('div',{type:"info",style:{
"text-align":"left",
"font-size":"14px",
"color":"#F98C24"
"color": data.source==="go-stock"?"#F98C24":"#549EC8"
}}, { default: () => data.content }),
meta: () => h(NText,{type:"warning"}, { default: () => data.source}),
duration:1000*30 ,

View File

@@ -128,7 +128,7 @@ function openCenteredWindow(url, width, height) {
</script>
<template>
<n-grid :cols="24" style="max-height: calc(100vh - 170px)">
<n-grid :cols="24" style="max-height: calc(100vh - 165px)">
<n-gi :span="4">
<n-list bordered style="text-align: left;" hoverable clickable>
<n-scrollbar style="max-height: calc(100vh - 170px);">
@@ -161,13 +161,13 @@ function openCenteredWindow(url, width, height) {
<!-- </n-virtual-list>-->
</n-gi>
<n-gi :span="20">
<n-flex>
<n-flex style="--wails-draggable:no-drag">
<n-input-group style="text-align: left">
<n-input :rows="1" clearable v-model:value="search" placeholder="请输入选股指标或者要求"/>
<n-button type="primary" @click="Search">搜索A股</n-button>
</n-input-group>
</n-flex>
<n-flex justify="start" v-if="traceInfo" style="margin: 5px 0">
<n-flex justify="start" v-if="traceInfo" style="margin: 5px 0;--wails-draggable:no-drag">
<n-ellipsis line-clamp="1" :tooltip="true">
<n-text type="info" :bordered="false">选股条件</n-text>
@@ -183,11 +183,11 @@ function openCenteredWindow(url, width, height) {
</n-flex>
<n-data-table
:striped="true"
:max-height="'calc(100vh - 250px)'"
:max-height="'calc(100vh - 150px)'"
size="medium"
:columns="columns"
:data="dataList"
:pagination="{pageSize: 9}"
:pagination="{pageSize: 10}"
:scroll-x="1800"
:render-cell="(value, rowData, column) => {
@@ -218,10 +218,10 @@ function openCenteredWindow(url, width, height) {
}
}"
/>
<n-text>共找到
<div style="margin-top: -25px">共找到
<n-tag type="info" :bordered="false">{{ dataList.length }}</n-tag>
只股
</n-text>
</div>
</n-gi>
</n-grid>

View File

@@ -119,7 +119,7 @@ EventsOn("updateVersion",async (msg) => {
</n-badge>
</h1>
<n-gradient-text type="warning" v-if="vipLevel" >vip到期时间{{vipEndTime}}</n-gradient-text>
<n-button size="tiny" @click="CheckUpdate" type="info" tertiary >检查更新</n-button>
<n-button size="tiny" @click="CheckUpdate(1)" type="info" tertiary >检查更新</n-button>
<div style="justify-self: center;text-align: left" >
<p>自选股行情实时监控基于Wails和NaiveUI构建的AI赋能股票分析工具</p>
<p>目前已支持A股港股美股未来计划加入基金ETF等支持</p>

View File

@@ -285,7 +285,7 @@ function deletePrompt(ID){
<template>
<n-flex justify="left" style="text-align: left;--wails-draggable:drag" >
<n-form ref="formRef" :label-placement="'left'" :label-align="'left'" >
<n-form ref="formRef" :label-placement="'left'" :label-align="'left'" style="--wails-draggable:no-drag">
<n-card :title="()=> h(NTag, { type: 'primary',bordered:false },()=> '基础设置')" size="small" >
<n-grid :cols="24" :x-gap="24" style="text-align: left" >
<!-- <n-gi :span="24">-->
@@ -379,7 +379,7 @@ function deletePrompt(ID){
<n-form-item-gi :span="5" v-if="formValue.openAI.enable" label="openAI maxTokens" path="openAI.maxTokens" >
<n-input-number placeholder="maxTokens" v-model:value="formValue.openAI.maxTokens"/>
</n-form-item-gi>
<n-form-item-gi :span="5" v-if="formValue.openAI.enable" title="天数越多消耗tokens越多" label="日K线数据(天)" path="openAI.maxTokens" >
<n-form-item-gi :span="5" v-if="formValue.openAI.enable" title="天数越多消耗tokens越多" label="日K线数据(天)" path="openAI.kDays" >
<n-input-number min="30" step="1" max="365" placeholder="日K线数据(天)" title="天数越多消耗tokens越多" v-model:value="formValue.openAI.kDays"/>
</n-form-item-gi>
<n-form-item-gi :span="11" v-if="formValue.openAI.enable" label="模型系统 Prompt" path="openAI.prompt" >
@@ -389,7 +389,7 @@ function deletePrompt(ID){
placeholder="请输入系统prompt"
:autosize="{
minRows: 5,
maxRows: 8
maxRows: 6
}"
/>
</n-form-item-gi>
@@ -400,7 +400,7 @@ function deletePrompt(ID){
placeholder="请输入用户prompt:例如{{stockName}}[{{stockCode}}]分析和总结"
:autosize="{
minRows: 5,
maxRows: 8
maxRows: 6
}"
/>
</n-form-item-gi>

View File

@@ -18,7 +18,7 @@ export function CheckSponsorCode(arg1:string):Promise<Record<string, any>>;
export function CheckStockBaseInfo(arg1:context.Context):Promise<void>;
export function CheckUpdate():Promise<void>;
export function CheckUpdate(arg1:number):Promise<void>;
export function ClsCalendar():Promise<Array<any>>;

View File

@@ -30,8 +30,8 @@ export function CheckStockBaseInfo(arg1) {
return window['go']['main']['App']['CheckStockBaseInfo'](arg1);
}
export function CheckUpdate() {
return window['go']['main']['App']['CheckUpdate']();
export function CheckUpdate(arg1) {
return window['go']['main']['App']['CheckUpdate'](arg1);
}
export function ClsCalendar() {

25
main.go
View File

@@ -9,7 +9,6 @@ import (
"github.com/wailsapp/wails/v2"
"github.com/wailsapp/wails/v2/pkg/logger"
"github.com/wailsapp/wails/v2/pkg/menu"
"github.com/wailsapp/wails/v2/pkg/menu/keys"
"github.com/wailsapp/wails/v2/pkg/options"
"github.com/wailsapp/wails/v2/pkg/options/mac"
"github.com/wailsapp/wails/v2/pkg/options/windows"
@@ -70,14 +69,16 @@ func main() {
// Create an instance of the app structure
app := NewApp()
AppMenu := menu.NewMenu()
AppMenu.Append(menu.EditMenu())
FileMenu := AppMenu.AddSubmenu("设置")
FileMenu.AddText("窗口全屏", keys.CmdOrCtrl("f"), func(callback *menu.CallbackData) {
runtime.WindowFullscreen(app.ctx)
})
FileMenu.AddText("窗口还原", keys.Key("Esc"), func(callback *menu.CallbackData) {
runtime.WindowUnfullscreen(app.ctx)
})
if IsMacOS() {
AppMenu.Append(menu.EditMenu())
}
//FileMenu := AppMenu.AddSubmenu("设置")
//FileMenu.AddText("窗口全屏", keys.CmdOrCtrl("f"), func(callback *menu.CallbackData) {
// runtime.WindowFullscreen(app.ctx)
//})
//FileMenu.AddText("窗口还原", keys.Key("Esc"), func(callback *menu.CallbackData) {
// runtime.WindowUnfullscreen(app.ctx)
//})
//FileMenu.AddText("显示搜索框", keys.CmdOrCtrl("s"), func(callbackData *menu.CallbackData) {
// runtime.EventsEmit(app.ctx, "showSearch", 1)
//})
@@ -118,11 +119,11 @@ func main() {
backgroundColour = &options.RGBA{R: 27, G: 38, B: 54, A: 1}
}
frameless := getFrameless()
//frameless := getFrameless()
// Create application with options
err = wails.Run(&options.App{
Title: "go-stock",
Title: "go-stockAI赋能股票分析✨",
Width: width * 4 / 5,
Height: 900,
MinWidth: minWidth,
@@ -131,7 +132,7 @@ func main() {
//MaxHeight: height,
DisableResize: false,
Fullscreen: false,
Frameless: frameless,
Frameless: false,
StartHidden: false,
HideWindowOnClose: false,
EnableDefaultContextMenu: true,