mirror of
https://github.com/ArvinLovegood/go-stock.git
synced 2025-07-19 00:00:09 +08:00
feat(frontend):添加指标选股功能
- 在 App.vue 中添加指标选股相关路由和菜单项 - 新增 SelectStock 组件实现选股功能 - 在 backend 中调整搜索股票接口的分页参数
This commit is contained in:
parent
bdc3689ac8
commit
482472af4e
@ -55,6 +55,7 @@
|
|||||||
| 不再强制依赖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 更新内置股票基础数据,软件内实时市场资讯信息提醒,添加行业研究功能
|
||||||
|
@ -29,7 +29,7 @@ func (s SearchStockApi) SearchStock() map[string]any {
|
|||||||
SetHeader("Content-Type", "application/json").
|
SetHeader("Content-Type", "application/json").
|
||||||
SetBody(fmt.Sprintf(`{
|
SetBody(fmt.Sprintf(`{
|
||||||
"keyWord": "%s",
|
"keyWord": "%s",
|
||||||
"pageSize": 50,
|
"pageSize": 50000,
|
||||||
"pageNo": 1,
|
"pageNo": 1,
|
||||||
"fingerprint": "e38b5faabf9378c8238e57219f0ebc9b",
|
"fingerprint": "e38b5faabf9378c8238e57219f0ebc9b",
|
||||||
"gids": [],
|
"gids": [],
|
||||||
|
@ -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 {CommentNote20Filled} from "@vicons/fluent";
|
import {BoxSearch20Regular, CommentNote20Filled} from "@vicons/fluent";
|
||||||
import {FireFilled, FireOutlined, NotificationFilled, StockOutlined} from "@vicons/antd";
|
import {FireFilled, FireOutlined, NotificationFilled, StockOutlined} from "@vicons/antd";
|
||||||
|
|
||||||
|
|
||||||
@ -332,6 +332,27 @@ 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),
|
||||||
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
126
frontend/src/components/SelectStock.vue
Normal file
126
frontend/src/components/SelectStock.vue
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
<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,6 +31,7 @@ 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');
|
||||||
@ -594,6 +595,9 @@ 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,6 +93,8 @@ 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,6 +182,10 @@ 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