mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
Compare commits
No commits in common. "master" and "v2025.6.27.1-release" have entirely different histories.
master
...
v2025.6.27
@ -47,8 +47,6 @@
|
|||||||
## 🧩 重大功能开发计划
|
## 🧩 重大功能开发计划
|
||||||
| 功能说明 | 状态 | 备注 |
|
| 功能说明 | 状态 | 备注 |
|
||||||
|-----------------|----|----------------------------------------------------------------------------------------------------------|
|
|-----------------|----|----------------------------------------------------------------------------------------------------------|
|
||||||
| 股票分析知识库 | 🚧 | 未来计划 |
|
|
||||||
| Ai智能选股 | 🚧 | Ai智能选股功能开发中(下半年重点开发计划) |
|
|
||||||
| ETF支持 | 🚧 | ETF数据支持 (目前可以查看净值和估值) |
|
| ETF支持 | 🚧 | ETF数据支持 (目前可以查看净值和估值) |
|
||||||
| 美股支持 | ✅ | 美股数据支持 |
|
| 美股支持 | ✅ | 美股数据支持 |
|
||||||
| 港股支持 | ✅ | 港股数据支持 |
|
| 港股支持 | ✅ | 港股数据支持 |
|
||||||
@ -57,7 +55,6 @@
|
|||||||
| 不再强制依赖Chrome浏览器 | ✅ | 默认使用edge浏览器抓取新闻资讯 |
|
| 不再强制依赖Chrome浏览器 | ✅ | 默认使用edge浏览器抓取新闻资讯 |
|
||||||
|
|
||||||
## 👀 更新日志
|
## 👀 更新日志
|
||||||
### 2025.06.30 添加指标选股功能
|
|
||||||
### 2025.06.27 添加财经日历和重大事件时间轴功能
|
### 2025.06.27 添加财经日历和重大事件时间轴功能
|
||||||
### 2025.06.25 添加热门股票、事件和话题功能
|
### 2025.06.25 添加热门股票、事件和话题功能
|
||||||
### 2025.06.18 更新内置股票基础数据,软件内实时市场资讯信息提醒,添加行业研究功能
|
### 2025.06.18 更新内置股票基础数据,软件内实时市场资讯信息提醒,添加行业研究功能
|
||||||
|
@ -55,7 +55,3 @@ func (a App) InvestCalendarTimeLine(yearMonth string) []any {
|
|||||||
func (a App) ClsCalendar() []any {
|
func (a App) ClsCalendar() []any {
|
||||||
return data.NewMarketNewsApi().ClsCalendar()
|
return data.NewMarketNewsApi().ClsCalendar()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a App) SearchStock(words string) map[string]any {
|
|
||||||
return data.NewSearchStockApi(words).SearchStock()
|
|
||||||
}
|
|
||||||
|
@ -576,30 +576,21 @@ func (m MarketNewsApi) TradingViewNews() *[]models.TVNews {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m MarketNewsApi) XUEQIUHotStock(size int, marketType string) *[]models.HotItem {
|
func (m MarketNewsApi) XUEQIUHotStock(size int, marketType string) *[]models.HotItem {
|
||||||
request := resty.New().SetTimeout(time.Duration(30) * time.Second).R()
|
|
||||||
_, err := request.
|
|
||||||
SetHeader("Host", "xueqiu.com").
|
|
||||||
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0").
|
|
||||||
Get("https://xueqiu.com/hq#hot")
|
|
||||||
|
|
||||||
//cookies := resp.Header().Get("Set-Cookie")
|
|
||||||
//logger.SugaredLogger.Infof("cookies:%s", cookies)
|
|
||||||
|
|
||||||
url := fmt.Sprintf("https://stock.xueqiu.com/v5/stock/hot_stock/list.json?page=1&size=%d&_type=%s&type=%s", size, marketType, marketType)
|
url := fmt.Sprintf("https://stock.xueqiu.com/v5/stock/hot_stock/list.json?page=1&size=%d&_type=%s&type=%s", size, marketType, marketType)
|
||||||
res := &models.XUEQIUHot{}
|
res := &models.XUEQIUHot{}
|
||||||
_, err = request.
|
_, err := resty.New().SetTimeout(time.Duration(30)*time.Second).R().
|
||||||
SetHeader("Host", "stock.xueqiu.com").
|
SetHeader("Host", "stock.xueqiu.com").
|
||||||
SetHeader("Origin", "https://xueqiu.com").
|
SetHeader("Origin", "https://xueqiu.com").
|
||||||
SetHeader("Referer", "https://xueqiu.com/").
|
SetHeader("Referer", "https://xueqiu.com/").
|
||||||
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0").
|
SetHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0").
|
||||||
//SetHeader("Cookie", "cookiesu=871730774144180; device_id=ee75cebba8a35005c9e7baf7b7dead59; s=ch12b12pfi; Hm_lvt_1db88642e346389874251b5a1eded6e3=1746247619; xq_a_token=361dcfccb1d32a1d9b5b65f1a188b9c9ed1e687d; xqat=361dcfccb1d32a1d9b5b65f1a188b9c9ed1e687d; xq_r_token=450d1db0db9659a6af7cc9297bfa4fccf1776fae; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTc1MzgzODAwNiwiY3RtIjoxNzUxMjUxMzc2MDY3LCJjaWQiOiJkOWQwbjRBWnVwIn0.TjEtQ5WEN4ajnVjVnY3J-Qq9LjL-F0eat9Cefv_tLJLqsPhzD2y8Lc1CeIu0Ceqhlad7O_yW1tR9nb2dIjDpyOPzWKxvwSOKXLm8XMoz4LMgE2pysBCH4TsetzHsEOhBsY467q-JX3WoFuqo-dqv1FfLSondZCspjEMFdgPFt2V-2iXJY05YUwcBVUvL74mT9ZjNq0KaDeRBJk_il6UR8yibG7RMbe9xWYz5dSO_wJwWuxvnZ8u9EXC2m-TV7-QHVxFHR_5e8Fodrzg0yIcLU4wBTSoIIQDUKqngajX2W-nUAdo6fr78NNDmoswFVH7T7XMuQciMAqj9MpMCVW3Sog; u=871730774144180; ssxmod_itna=iq+h7KAImDORKYQ4Y5G=nxBKDtD7D3qCD0dGMDxeq7tDRDFqApKDHtA68oon7ziBA0+PbZ9xGN4oYxiNDAPq0iDC+Wjxs9Orw5KQb9iqP4MAn0TbNsbtU22eqbCe=S3vTv6xoDHxY=DU1GzeieDx=PD5xDTDWeDGDD3DmnsDi5YD0KDjBYpH+omDYPDEBYDaxDbDimwY4GCrDDCtc5Dw6bmzDDzznL5WWAPzWffZg3YcFgxf8GwD7y3Dla4rMhw23=cz0Efdk0A5hYDXotDvhoY1/H6neEvOt3o=Q0ruT+5RuxoRhDxCmh5tGP32xBD5G0xS2xcb4quDK0Dy2ZmY/DDWM0qmEeSEDeOCIq1fw1misCY=WAzoOtMwDzGdUjpRk5Z0xQBDI2IMw4H7qNiNBLxWiDD; ssxmod_itna2=iq+h7KAImDORKYQ4Y5G=nxBKDtD7D3qCD0dGMDxeq7tDRDFqApKDHtA68oon7ziBA0+PbZYxD3boBmiEPtDFOEPAeFmDDsuGSxf46oGKwGHd8wtUjFe+oV1lxUzutkGly=nCyCjq=UTHxMxFCr1DsFiKPuEpPVO7GrOyk5Aymnc0+11AFND7v16PvwrFQH4I72=3O1OpK7rGw+poWNCxjj=Ka5QDFWAvEzrDFQcIH=GpKpS90FAyIzGcTyck+yhQKaojn96dRqeIh=HkaFrlGnKwzO+a49=F7/c/MejoR3QM20K9IIOymrMN2bsk2TRdKFiaf4O0ut2MauiOER=iQNW2WVgDrkKzD=57r577wEx2hwkqhf8T8BDvkHZRDirC0bNK4O=G3TSkd3wYwq8bst0t9qF/e3M87NYtU2IWYWzqd=BqEfdqGq0R8wxmqLzpeGeuwSTq1OAiB87gDrozjnGkwDKRdrLz8uDjQKVlGhWk8Wd/rXQjx4pG=BNqpW/6TS1wpfxzGf5CrUhtt0j0wC5AUFo2GbX+QXPzD2guxKXrx8lZUQlwWIHyEUz+OLh0eWUkfHfM0YWXlgOejnuUa06rW9y5maDPipGms751hxKcqLq62pQty4iX3QDF6SRQd3tfEBf3CH7r2xe2qq0qdOI5Ge=GezD/Us5Z0xQBwVAZ2N/XvD0HDD").
|
SetHeader("Cookie", "cookiesu=2617378771242871; s=c2121pp1u71; device_id=237a58584ec58d8e4d4e1040700a644f1; Hm_lvt_1db88642e346389874251b5a1eded6e3=1744100219,1744599115; xq_a_token=b7259d09435458cc3f1a963479abb270a1a016ce; xqat=b7259d09435458cc3f1a963479abb270a1a016ce; xq_r_token=28108bfa1d92ac8a46bbb57722633746218621a3; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTc1MjU0MTk4OCwiY3RtIjoxNzUwMjMwNjA2NzI0LCJjaWQiOiJkOWQwbjRBWnVwIn0.kU_fz0luJoE7nr-K4UrNUi5-mAG-vMdXtuC4mUKIppILId4UpF70LB70yunxGiNSw6tPFR3-hyLvztKAHtekCUTm3XjUl5b3tEDP-ZUVqHnWXO_5hoeMI8h-Cfx6ZGlIr5x3icvTPkT0OV5CD5A33-ZDTKhKPf-DhJ_-m7CG5GbX4MseOBeMXuLUQUiYHPKhX1QUc0GTGrCzi8Mki0z49D0LVqCSgbsx3UGfowOOyx85_cXb4OAFvIjwbs2p0o_h-ibIT0ngVkkAyEDetVvlcZ_bkardhseCB7k9BEMgH2z8ihgkVxyy3P0degLmDUruhmqn5uZOCi1pVBDvCv9lBg; u=261737877124287; ssxmod_itna=QuG=D5AKiKDIqCqGKi7G7DgmmPlSDWFqKGHDyx4YK0CDmxjKiddDUQivnb8xpnQcGyGYoYhoqEeDBubrDSxD67DK4GTm+ogiw1o3B=xedQHDgBtN=7/i1K53N+rOjquLMU=kbqYxB3DExGkqj0tPi4DxaPD5xDTDWeDGDD3DnnsDQKDRx0kL0oDIxD1D0bmHUEvh38mDYePLmOmDYPYx94Y8KoDeEgsD7HUl/vIGGEAqjLPFegXLD0HolCqr4DCid1qDm+ECfkjDn9sD0KP8fn+CRoDv=tYr4ibx+o=W+8vstf9mjGe3cXseWdBmoFrmf4DA3bFAxnAxD7vYxADaDoerDGHPoxHF+PKGPtDKmiqQGeB5qbi4eg4KDHKDe3DeG0qeEP9xVUoHDDWMYYM0ICr4FBimBDM7D0x4QOECmhul5QCN/m5/74lGm=7x9Wp7A+i7xQ7wlMD4D; ssxmod_itna2=QuG=D5AKiKDIqCqGKi7G7DgmmPlSDWFqKGHDyx4YK0CDmxjKiddDUQivnb8xpnQcGyGYoYhoqoDirSDhPmGD24GajjDuGE3m7or4DlxOSGewHl6iaus2Q62SRX5CFjCds6ltF9xy6iaUuB262UkhRA8UXST=4/b+y3kGKzlGE8T29FA008ljy9jXXC7f7m7QsK667mlUooWrofk=qGZjxtcUrN1NtuAnne1hj+rQP5UnlFkxf+o7VjmatH7u7bCDlbTt3cz6CH9Fl4vye16W/ellc8I3Q37W7ZwiLGD/zPpZcnd2nsqqo/+zRbKAmz4plzwaDqGUe7f9E+P0IFRKqpRv+buQFHBSpcbwND7Q+9XWmnjI2UwKd98jIS3gPXwxvbx4OuiyH8gZ+OEt7DgE/AY/9W4VxDZrlFWyWnC4y4/I0IpAfaGKpbPmauKbkqawqv93vSf+9HamGe0Dt2PNgT3yiEB4vQP2/DdVpcGBOjFujWoHP32OshLPYI20LRCKddwEGkKqPzPwKPc3X5zuB=w2fUdtwKsAW5kQtsl8clNwjC5uDYrxR0h9xaj0xmD+YuI3GPT7xYTalRImPj2wL2=+91a304xa4bTWtP=dLGARhb/efRi0uktaz8i8C04G0x/ZWUzqRza8GGU=FfRfvb4GZM/q2rVsl0nLvRjGeAKgocLouyXs/uwZu3YxbAx30qCbjG1A533zAxIeIgD=0VAc3ixD").
|
||||||
SetResult(res).
|
SetResult(res).
|
||||||
Get(url)
|
Get(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.SugaredLogger.Errorf("XUEQIUHotStock err:%s", err.Error())
|
logger.SugaredLogger.Errorf("XUEQIUHotStock err:%s", err.Error())
|
||||||
return &[]models.HotItem{}
|
return &[]models.HotItem{}
|
||||||
}
|
}
|
||||||
logger.SugaredLogger.Infof("XUEQIUHotStock:%+v", res)
|
// logger.SugaredLogger.Infof("XUEQIUHotStock:%+v", res)
|
||||||
return &res.Data.Items
|
return &res.Data.Items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
package data
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"github.com/go-resty/resty/v2"
|
|
||||||
"go-stock/backend/logger"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
// @Author spark
|
|
||||||
// @Date 2025/6/28 21:02
|
|
||||||
// @Desc
|
|
||||||
// -----------------------------------------------------------------------------------
|
|
||||||
type SearchStockApi struct {
|
|
||||||
words string
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewSearchStockApi(words string) *SearchStockApi {
|
|
||||||
return &SearchStockApi{words: words}
|
|
||||||
}
|
|
||||||
func (s SearchStockApi) SearchStock() map[string]any {
|
|
||||||
url := "https://np-tjxg-g.eastmoney.com/api/smart-tag/stock/v3/pw/search-code"
|
|
||||||
resp, err := resty.New().SetTimeout(time.Duration(30)*time.Second).R().
|
|
||||||
SetHeader("Host", "np-tjxg-g.eastmoney.com").
|
|
||||||
SetHeader("Origin", "https://xuangu.eastmoney.com").
|
|
||||||
SetHeader("Referer", "https://xuangu.eastmoney.com/").
|
|
||||||
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(fmt.Sprintf(`{
|
|
||||||
"keyWord": "%s",
|
|
||||||
"pageSize": 50000,
|
|
||||||
"pageNo": 1,
|
|
||||||
"fingerprint": "e38b5faabf9378c8238e57219f0ebc9b",
|
|
||||||
"gids": [],
|
|
||||||
"matchWord": "",
|
|
||||||
"timestamp": "1751113883290349",
|
|
||||||
"shareToGuba": false,
|
|
||||||
"requestId": "8xTWgCDAjvQ5lmvz5mDA3Ydk2AE4yoiJ1751113883290",
|
|
||||||
"needCorrect": true,
|
|
||||||
"removedConditionIdList": [],
|
|
||||||
"xcId": "xc0af28549ab330013ed",
|
|
||||||
"ownSelectAll": false,
|
|
||||||
"dxInfo": [],
|
|
||||||
"extraCondition": ""
|
|
||||||
}`, s.words)).Post(url)
|
|
||||||
if err != nil {
|
|
||||||
logger.SugaredLogger.Errorf("SearchStock-err:%+v", err)
|
|
||||||
return map[string]any{}
|
|
||||||
}
|
|
||||||
respMap := map[string]any{}
|
|
||||||
json.Unmarshal(resp.Body(), &respMap)
|
|
||||||
//logger.SugaredLogger.Infof("resp:%+v", respMap["data"])
|
|
||||||
return respMap
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
package data
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go-stock/backend/db"
|
|
||||||
"go-stock/backend/logger"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestSearchStock(t *testing.T) {
|
|
||||||
db.Init("../../data/stock.db")
|
|
||||||
|
|
||||||
res := NewSearchStockApi("算力股;净利润连续3年增长").SearchStock()
|
|
||||||
data := res["data"].(map[string]any)
|
|
||||||
result := data["result"].(map[string]any)
|
|
||||||
dataList := result["dataList"].([]any)
|
|
||||||
for _, v := range dataList {
|
|
||||||
d := v.(map[string]any)
|
|
||||||
logger.SugaredLogger.Infof("%s:%s", d["INDUSTRY"], d["SECURITY_SHORT_NAME"])
|
|
||||||
}
|
|
||||||
//columns := result["columns"].([]any)
|
|
||||||
//for _, v := range columns {
|
|
||||||
// logger.SugaredLogger.Infof("v:%+v", v)
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
|
@ -31,7 +31,7 @@ import {AnalyzeSentiment, GetConfig, GetGroupList} from "../wailsjs/go/main/App"
|
|||||||
import {Dragon, Fire, Gripfire} from "@vicons/fa";
|
import {Dragon, Fire, Gripfire} from "@vicons/fa";
|
||||||
import {ReportSearch} from "@vicons/tabler";
|
import {ReportSearch} from "@vicons/tabler";
|
||||||
import {LocalFireDepartmentRound} from "@vicons/material";
|
import {LocalFireDepartmentRound} from "@vicons/material";
|
||||||
import {BoxSearch20Regular, CommentNote20Filled} from "@vicons/fluent";
|
import {CommentNote20Filled} from "@vicons/fluent";
|
||||||
import {FireFilled, FireOutlined, NotificationFilled, StockOutlined} from "@vicons/antd";
|
import {FireFilled, FireOutlined, NotificationFilled, StockOutlined} from "@vicons/antd";
|
||||||
|
|
||||||
|
|
||||||
@ -332,27 +332,6 @@ const menuOptions = ref([
|
|||||||
key: 'market10',
|
key: 'market10',
|
||||||
icon: renderIcon(Gripfire),
|
icon: renderIcon(Gripfire),
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: () =>
|
|
||||||
h(
|
|
||||||
RouterLink,
|
|
||||||
{
|
|
||||||
href: '#',
|
|
||||||
to: {
|
|
||||||
name: 'market',
|
|
||||||
query: {
|
|
||||||
name: "指标选股",
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onClick: () => {
|
|
||||||
EventsEmit("changeMarketTab", {ID: 0, name: '指标选股'})
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{default: () => '指标选股',}
|
|
||||||
),
|
|
||||||
key: 'market11',
|
|
||||||
icon: renderIcon(BoxSearch20Regular),
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1,126 +0,0 @@
|
|||||||
<script setup lang="ts">
|
|
||||||
import {h, onBeforeMount, onMounted, onUnmounted, ref} from 'vue'
|
|
||||||
import {SearchStock} from "../../wailsjs/go/main/App";
|
|
||||||
import {useMessage, NText, NTag} from 'naive-ui'
|
|
||||||
const message = useMessage()
|
|
||||||
const search = ref('科技股;换手率连续3日大于2')
|
|
||||||
const columns = ref([])
|
|
||||||
const dataList = ref([])
|
|
||||||
|
|
||||||
function Search() {
|
|
||||||
const loading = message.loading("正在获取选股数据...", {duration: 0});
|
|
||||||
SearchStock(search.value).then(res => {
|
|
||||||
loading.destroy()
|
|
||||||
//console.log(res)
|
|
||||||
if(res.code==100){
|
|
||||||
message.success(res.msg)
|
|
||||||
columns.value=res.data.result.columns.filter(item=>!item.hiddenNeed&&(item.title!="市场码"&&item.title!="市场简称")).map(item=>{
|
|
||||||
|
|
||||||
if(item.children){
|
|
||||||
return {
|
|
||||||
title:item.title+(item.unit?'['+item.unit+']':''),
|
|
||||||
key:item.key,
|
|
||||||
resizable: true,
|
|
||||||
minWidth:200,
|
|
||||||
ellipsis: {
|
|
||||||
tooltip: true
|
|
||||||
},
|
|
||||||
children:item.children.filter(item=>!item.hiddenNeed).map(item=>{
|
|
||||||
return {
|
|
||||||
title:item.dateMsg,
|
|
||||||
key:item.key,
|
|
||||||
minWidth:100,
|
|
||||||
resizable: true,
|
|
||||||
ellipsis: {
|
|
||||||
tooltip: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
return {
|
|
||||||
title:item.title+(item.unit?'['+item.unit+']':''),
|
|
||||||
key:item.key,
|
|
||||||
resizable: true,
|
|
||||||
minWidth:100,
|
|
||||||
ellipsis: {
|
|
||||||
tooltip: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
dataList.value=res.data.result.dataList
|
|
||||||
}else {
|
|
||||||
message.error(res.msg)
|
|
||||||
}
|
|
||||||
}).catch(err => {
|
|
||||||
message.error(err)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function isNumeric(value) {
|
|
||||||
return !isNaN(parseFloat(value)) && isFinite(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
onBeforeMount(() => {
|
|
||||||
Search()
|
|
||||||
})
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<n-flex>
|
|
||||||
<n-input-group>
|
|
||||||
<n-input v-model:value="search" placeholder="请输入选股指标或者要求" />
|
|
||||||
<n-button type="success" @click="Search">搜索A股</n-button>
|
|
||||||
</n-input-group>
|
|
||||||
</n-flex>
|
|
||||||
<!-- <n-table striped size="small">-->
|
|
||||||
<!-- <n-thead>-->
|
|
||||||
<!-- <n-tr>-->
|
|
||||||
<!-- <n-th v-for="item in columns">{{item.title}}</n-th>-->
|
|
||||||
<!-- </n-tr>-->
|
|
||||||
<!-- </n-thead>-->
|
|
||||||
<!-- <n-tbody>-->
|
|
||||||
<!-- <n-tr v-for="(item,index) in dataList">-->
|
|
||||||
<!-- <n-td v-for="d in columns">{{item[d.key]}}</n-td>-->
|
|
||||||
<!-- </n-tr>-->
|
|
||||||
<!-- </n-tbody>-->
|
|
||||||
<!-- </n-table>-->
|
|
||||||
<n-data-table
|
|
||||||
:max-height="'calc(100vh - 285px)'"
|
|
||||||
size="small"
|
|
||||||
:columns="columns"
|
|
||||||
:data="dataList"
|
|
||||||
:pagination="false"
|
|
||||||
:scroll-x="1800"
|
|
||||||
:render-cell="(value, rowData, column) => {
|
|
||||||
|
|
||||||
if(column.key=='SECURITY_CODE'||column.key=='SERIAL'){
|
|
||||||
return h(NText, { type: 'info',border: false }, { default: () => `${value}` })
|
|
||||||
}
|
|
||||||
if (isNumeric(value)) {
|
|
||||||
let type='info';
|
|
||||||
if (Number(value)<0){
|
|
||||||
type='success';
|
|
||||||
}
|
|
||||||
if(Number(value)>=0&&Number(value)<=5){
|
|
||||||
type='warning';
|
|
||||||
}
|
|
||||||
if (Number(value)>5){
|
|
||||||
type='error';
|
|
||||||
}
|
|
||||||
return h(NText, { type: type }, { default: () => `${value}` })
|
|
||||||
}else{
|
|
||||||
if(column.key=='SECURITY_SHORT_NAME'){
|
|
||||||
return h(NTag, { type: 'info',bordered: false }, { default: () => `${value}` })
|
|
||||||
}else{
|
|
||||||
return h(NText, { type: 'info' }, { default: () => `${value}` })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
@ -31,7 +31,6 @@ import HotEvents from "./HotEvents.vue";
|
|||||||
import HotTopics from "./HotTopics.vue";
|
import HotTopics from "./HotTopics.vue";
|
||||||
import InvestCalendarTimeLine from "./InvestCalendarTimeLine.vue";
|
import InvestCalendarTimeLine from "./InvestCalendarTimeLine.vue";
|
||||||
import ClsCalendarTimeLine from "./ClsCalendarTimeLine.vue";
|
import ClsCalendarTimeLine from "./ClsCalendarTimeLine.vue";
|
||||||
import SelectStock from "./SelectStock.vue";
|
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const icon = ref('https://raw.githubusercontent.com/ArvinLovegood/go-stock/master/build/appicon.png');
|
const icon = ref('https://raw.githubusercontent.com/ArvinLovegood/go-stock/master/build/appicon.png');
|
||||||
@ -595,9 +594,6 @@ function ReFlesh(source) {
|
|||||||
</n-tab-pane>
|
</n-tab-pane>
|
||||||
</n-tabs>
|
</n-tabs>
|
||||||
</n-tab-pane>
|
</n-tab-pane>
|
||||||
<n-tab-pane name="指标选股" tab="指标选股">
|
|
||||||
<select-stock />
|
|
||||||
</n-tab-pane>
|
|
||||||
</n-tabs>
|
</n-tabs>
|
||||||
</n-card>
|
</n-card>
|
||||||
<n-modal transform-origin="center" v-model:show="summaryModal" preset="card" style="width: 800px;"
|
<n-modal transform-origin="center" v-model:show="summaryModal" preset="card" style="width: 800px;"
|
||||||
|
2
frontend/wailsjs/go/main/App.d.ts
vendored
2
frontend/wailsjs/go/main/App.d.ts
vendored
@ -93,8 +93,6 @@ export function SaveAIResponseResult(arg1:string,arg2:string,arg3:string,arg4:st
|
|||||||
|
|
||||||
export function SaveAsMarkdown(arg1:string,arg2:string):Promise<string>;
|
export function SaveAsMarkdown(arg1:string,arg2:string):Promise<string>;
|
||||||
|
|
||||||
export function SearchStock(arg1:string):Promise<Record<string, any>>;
|
|
||||||
|
|
||||||
export function SendDingDingMessage(arg1:string,arg2:string):Promise<string>;
|
export function SendDingDingMessage(arg1:string,arg2:string):Promise<string>;
|
||||||
|
|
||||||
export function SendDingDingMessageByType(arg1:string,arg2:string,arg3:number):Promise<string>;
|
export function SendDingDingMessageByType(arg1:string,arg2:string,arg3:number):Promise<string>;
|
||||||
|
@ -182,10 +182,6 @@ export function SaveAsMarkdown(arg1, arg2) {
|
|||||||
return window['go']['main']['App']['SaveAsMarkdown'](arg1, arg2);
|
return window['go']['main']['App']['SaveAsMarkdown'](arg1, arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SearchStock(arg1) {
|
|
||||||
return window['go']['main']['App']['SearchStock'](arg1);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function SendDingDingMessage(arg1, arg2) {
|
export function SendDingDingMessage(arg1, arg2) {
|
||||||
return window['go']['main']['App']['SendDingDingMessage'](arg1, arg2);
|
return window['go']['main']['App']['SendDingDingMessage'](arg1, arg2);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user