feat: 全屏个股详情预览 + Tailwind 改版 + 账号鉴权

This commit is contained in:
2026-08-14 22:37:18 +08:00
parent 0f8b9a7255
commit 4c2ea5521d
47 changed files with 2937 additions and 893 deletions

View File

@@ -131,11 +131,15 @@ pnpm dev # http://localhost:5173
后端配置通过 `backend/.env`(复制 `.env.example`)或环境变量:
```bash
# 数据库(MVP 默认 SQLite零配置
DATABASE_URL=sqlite+aiosqlite:///./stock.db
# 数据库(开发、测试、生产统一使用 PostgreSQL
DATABASE_URL=postgresql+asyncpg://user:password@host:5432/stock
# 切到你自己的 PostgreSQL / TimescaleDB
# DATABASE_URL=postgresql+asyncpg://user:password@localhost:5432/stock
# 鉴权:本地 HTTP 为 false线上 HTTPS 必须为 true
AUTH_COOKIE_SECURE=false
AUTH_SESSION_HOURS=12
CORS_ORIGINS=http://localhost:5173
# 生产建议关闭接口文档
EXPOSE_API_DOCS=true
# 真实数据源Tushare Pro免费版即可。留空则仅 DEMO 合成数据可用)
TUSHARE_TOKEN=你的token
@@ -149,6 +153,31 @@ DATA_DEFAULT_START=20200101
# COMMISSION_MIN=5.0 # 最低 5 元
```
### 初始化登录系统
数据库结构由 Alembic 管理。首次部署或更新代码后执行:
```bash
cd backend
uv run alembic upgrade head
```
系统不提供注册接口。使用服务器交互式命令创建唯一用户;再次执行会重置密码并吊销该用户的所有旧会话:
```bash
uv run python -m app.cli.create_user --username admin
```
密码使用 Argon2id 保存。浏览器只接收 `HttpOnly` 会话 Cookie数据库只保存随机会话 Token 的 SHA-256 摘要。默认会话有效期 12 小时,连续 5 次登录失败后锁定 15 分钟。
生产环境必须启用 HTTPS并设置
```bash
AUTH_COOKIE_SECURE=true
CORS_ORIGINS=https://你的域名
EXPOSE_API_DOCS=false
```
### 切到 PostgreSQL + TimescaleDB
1. 目标库执行 `CREATE EXTENSION IF NOT EXISTS timescaledb;`
@@ -202,6 +231,7 @@ pnpm preview # 本地预览构建产物
### 后端生产运行
```bash
cd backend
uv run alembic upgrade head
uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
# 或 gunicornLinuxuv run gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker
```