2026-09-27 16:39:05 +08:00
2026-05-10 21:31:57 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00
2026-09-27 16:39:05 +08:00

ashare-view

同一来源下的个股支持多个产业链产品归属。升级已有数据库前,需依次执行兄弟项目 ashare-data/scripts/migrations/20260925_stock_industry_multiple.sql 和 20260925_stock_industry_active.sql,将唯一键改为 (source, stock_code, industry_code) 并增加有效标记及索引。两个脚本各执行一次;已完成第一个迁移的数据库只执行第二个。启动建表不会修改已有字段或索引。行业树仅读取 active = 1 的归属,每个产品节点显示该股票,共同父节点按股票去重统计数量、成交额及涨停次数;失效归属保留原记录。

ashare-view 是一个面向 A 股市场数据的可视化看板,前端使用 React + Vite + Ant Design,后端使用 Go + Gin + GORM 连接 MySQL。项目将市场概览、指数行情、个股 K 线叠加、阶段新高、连板高度和每日趋势整合到一个单页应用中。

功能概览

  • 市场概览:展示上涨、下跌、平盘数量,总成交额,平均涨跌幅,涨停、跌停和阶段新高列表。
  • 指数行情:查看上证指数、深证成指、沪深 300、中证 500、中证 1000、创业板指等指数 K 线。
  • K 线叠加:输入股票代码后叠加多只个股走势,便于横向比较。
  • 情绪导图:按涨停梯队、焦点股和研报产业链树整理市场情绪。
  • 阶段新高:查看当前交易日创 150 日新高的股票列表。
  • 连板高度:统计当日涨停股的连续涨停天数,并按高度分组。
  • 每日趋势:查看近 7、30、90、180 天的市场宽度、涨跌停和连板趋势。
  • 历史日期查询:概览、阶段新高、连板高度和每日趋势支持选择历史日期;非交易日会自动映射到不晚于该日期的最近交易日。

技术栈

  • 前端:React 19、TypeScript、Vite、Ant Design、ECharts、Axios、React Router。
  • 后端:Go、Gin、GORM、MySQL、YAML 配置。
  • 部署:Docker 多阶段构建,前端静态资源内嵌到 Go 服务镜像。

目录结构

.
├── Dockerfile
├── docker-compose.yml
├── server
│   ├── config          # 配置加载
│   ├── database        # MySQL 连接和索引初始化
│   ├── handler         # HTTP handler
│   ├── model           # 数据模型
│   ├── repository      # SQL 查询
│   ├── router          # API 和静态资源路由
│   ├── service         # 业务逻辑和缓存
│   └── sql             # 示例初始化脚本
└── web
    ├── src
    │   ├── api         # 前端 API 封装和类型
    │   ├── components  # 图表、表格列、通用组件
    │   ├── constants   # 导航和市场常量
    │   ├── hooks       # 通用 React hooks
    │   └── pages       # 页面组件
    └── vite.config.ts

Windows 双击启动

配置好 server/config.yaml 后,双击根目录 start.cmd。脚本使用已安装的 Node.js、npm 和 Go 构建前后端,由系统分配空闲端口,等待服务就绪后自动打开浏览器。前后端共用同一个地址,无需单独启动 Vite。

需要已安装前端依赖、已缓存 Go 依赖且 MySQL 可连接;脚本不会安装缺失的环境。支持查找 fnm 中已安装的兼容 Node.js。重复双击会打开已有服务;修改代码后先双击 stop.cmd,再启动以重新构建。停止脚本只关闭该启动脚本记录的服务。

实际访问地址和进程信息记录在 .runtime/server.json。启动失败时窗口会保留错误信息。命令行验证可运行 powershell -NoProfile -ExecutionPolicy Bypass -File .\start.ps1 -NoBrowser。

本地开发

1. 准备环境

  • Node.js 20.19+ 或 22.12+(Vite 要求)
  • npm
  • Go 1.25+,或开启 Go toolchain 自动下载
  • MySQL 8.x,且已有行情数据表

后端当前依赖以下核心表:

  • stock_daily:个股日线行情,至少包含 code、date、open、close、high、low、volume、turnover、pct_change。
  • stock_info:股票基础信息,至少包含 code、name。
  • index_daily:指数日线行情,至少包含 code、date、open、close、high、low、volume、amount、pct_change。

server/sql/init.sql 是早期示例初始化脚本,可作为演示数据参考;生产或完整开发环境应以当前后端查询所需的表结构为准。

2. 配置后端

服务启动时会读取当前工作目录下的 config.yaml。也可以通过环境变量覆盖配置文件中的值。

mysql:
  host: "127.0.0.1"
  port: "3306"
  user: "root"
  password: "your-password"
  database: "ashare"
  charset: "utf8mb4"

server:
  port: "0"

可覆盖的环境变量:

  • DB_HOST
  • DB_PORT
  • DB_USER
  • DB_PASSWORD
  • DB_NAME
  • SERVER_PORT

3. 启动后端

cd server
go mod download
go run .

默认端口为 0,由系统分配空闲端口。访问启动日志中 Server running on 后的实际地址;每次重启地址可能变化。

4. 启动前端

cd web
npm ci
$env:ASHARE_API_TARGET = '粘贴后端日志中的实际 HTTP 地址'
npm run dev

Vite 使用随机端口,将 /api 代理到 ASHARE_API_TARGET。如果使用根目录启动脚本启动后端,可省略该环境变量,Vite 会读取 .runtime/server.json 中的实际地址。启动后访问 Vite 终端输出的地址;后端端口变化后需重新启动 Vite。

构建与部署

前端构建

cd web
npm run build

构建产物输出到 web/dist。

后端构建

cd server
go build -o ashare-view .

生产镜像通过根目录 Dockerfile 完成前后端一起构建:

docker build -t ashare-view:local .

docker-compose.yml 构建当前源码,挂载 server/config.yaml,通过 host 网络使用系统分配的随机端口。需要 Linux Docker Engine,或 Docker Desktop 4.34+ 并启用 host networking(Linux 容器)。不支持 host 网络的环境请使用本地启动脚本。

docker compose up -d --build
docker compose logs ashare-view

部署后访问日志中 Server running on 后的实际地址。远程部署时将地址中的 127.0.0.1 替换为服务器 IP,并按实际端口配置防火墙。随机端口会在服务重启后变化,不配置固定端口映射。

API 概览

所有接口返回格式均为:

{
  "data": {}
}
方法 路径 参数 说明
GET /api/dashboard/summary date? 市场概览,未传日期时返回最新交易日
GET /api/dashboard/daily days?、end_date? 近 N 天每日统计,days 范围为 1-365
GET /api/dashboard/sentiment-map date? 市场情绪导图,包含涨停梯队、焦点股和研报产业链树
GET /api/dashboard/consecutive date? 指定日期或最新交易日的连板列表
GET /api/dashboard/high100 date? 指定日期或最新交易日的 150 日新高列表
GET /api/dashboard/index-kline code?、days? 指数 K 线,默认 000001
GET /api/dashboard/stock-kline code 个股全历史 K 线

开发注意事项

  • 后端查询层按职责拆分在 server/repository/:市场、分钟行情、概念管理、情绪分类和行业树各自维护,stock_repo.go 保留仓储入口和日期工具。
  • 后端 server/service/cache.go 统一缓存有效期、容量上限和同键并发请求合并,失败结果不缓存;具体查询的缓存键和期限由 service 指定。
  • 启动时会异步为 stock_daily 创建常用索引:date、code/date、date/pct_change。
  • 前端路由由 web/src/App.tsx 管理,菜单项在 web/src/constants/navigation.tsx。
  • 前端 API 类型集中在 web/src/api/types.ts,接口封装在 web/src/api/dashboard.ts。
  • web/src/hooks/useEChart.ts 统一图表初始化、尺寸监听和销毁;useAsyncData.ts 隔离不同参数的请求结果,防止旧响应覆盖新选择。
S
Description
No description provided
Readme
1.3 MiB
Languages
JavaScript 87.5%
Go 8.8%
TypeScript 3.2%
PowerShell 0.2%
CSS 0.2%