Files
easy_tdx_max/web-ui/src/style.css
T
GitHub 33d44ba5d6 feat(webui)!: 行情终端重大升级——市场看板/自选/个股与板块弹窗 + SSE 实时推送
展示层对标专业看盘终端(tick-stock-panel 模式),数据全部来自通达信协议直连:

- 市场看板:五大指数实时条(迷你分时)、涨跌统计、四维情绪雷达、
  全市场涨跌分布直方图(约 5500 只 22 桶、鼠标跟随浮窗)、涨停雷达、
  行业/概念热冷榜(可下钻)、涨幅/跌幅/成交额/换手四联排行榜、异动雷达
- 自选行情:6 位代码即加(symbol-info 自动取名)、SSE 实时全表刷新、
  行内迷你分时;SQLite 持久化(watchlist.db,幂等加删)
- 个股弹窗:五档盘口 + 1/3/5 日分时 + 日K(MA/BOLL/EMA + MACD/KDJ/RSI
  前端本地计算)+ 一键加自选 + 一键全策略寻优
- 板块弹窗:板块分时/日K + 成分股涨跌榜直达个股
- SSE 架构:QuoteStreamer 单循环轮询 fan-out(独立队列 + 背压丢旧、
  无订阅休眠、盘中 8s/盘外 60s 降频);前端 pinia 单连接指数退避重连
- fix(codec): SH 000 系大盘指数与 881/885 板块指数报价按 2 位小数解析
  (曾缩小 10 倍:科创50 1647.53→164.753);880 统计指数保持 3 位
- fix: 前端批量五档路径 /security/quotes→/quotes、SSE 五档白名单
  bid1_vol→bid_vol1、MAC 排行 close 列归一化、日K v-if 撑满、
  寻优查看跳转 /→/backtest、FastAPI 0.141 _IncludedRouter 测试适配

新增 27 个单测(streamer/自选/小数位语义),全套 1078 passed
2026-09-01 17:45:07 +08:00

163 lines
2.8 KiB
CSS

/* 全局深色金融主题。MVP-A 不引 UI 组件库,用 CSS 变量统一设计 token。 */
:root {
--bg: #0f1117;
--bg-elevated: #1a1d26;
--bg-panel: #161922;
--border: #2a2e3a;
--text: #e6e8eb;
--text-muted: #8b919e;
--text-dim: #5c6370;
--accent: #4a9eff;
--up: #ef4146; /* A股惯例:红涨 */
--down: #18a058; /* 绿跌 */
--warn: #f0a020;
--radius: 6px;
--font-mono: 'JetBrains Mono', 'Cascadia Code', Consolas, monospace;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html,
body,
#app {
height: 100%;
background: var(--bg);
color: var(--text);
font-family:
-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei',
Roboto, Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.5;
}
button {
cursor: pointer;
border: 1px solid var(--border);
background: var(--bg-elevated);
color: var(--text);
padding: 6px 14px;
border-radius: var(--radius);
font-size: 13px;
transition: all 0.15s;
}
button:hover:not(:disabled) {
border-color: var(--accent);
}
button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
button.primary {
background: var(--accent);
border-color: var(--accent);
color: #fff;
font-weight: 600;
}
button.primary:disabled {
background: var(--bg-elevated);
color: var(--text-dim);
}
input,
select,
textarea {
background: var(--bg);
border: 1px solid var(--border);
color: var(--text);
padding: 6px 10px;
border-radius: var(--radius);
font-size: 13px;
width: 100%;
}
input:focus,
select:focus,
textarea:focus {
outline: none;
border-color: var(--accent);
}
label {
display: block;
color: var(--text-muted);
font-size: 12px;
margin-bottom: 4px;
}
.field {
margin-bottom: 12px;
}
.row {
display: flex;
gap: 8px;
align-items: flex-end;
}
.row > * {
flex: 1;
}
a {
color: var(--accent);
}
/* 行情涨跌着色(format.dirClass 的落点) */
.up {
color: var(--up);
}
.down {
color: var(--down);
}
.flat {
color: var(--text-muted);
}
.mono {
font-family: var(--font-mono);
}
/* 通用面板卡片(看板/自选页网格单元) */
.card {
background: var(--bg-panel);
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 12px 14px;
overflow: auto;
}
.card h3 {
font-size: 13px;
font-weight: 600;
color: var(--text-muted);
margin-bottom: 8px;
}
/* 行情数据表 */
.qtable {
width: 100%;
border-collapse: collapse;
font-size: 12.5px;
}
.qtable th {
text-align: right;
color: var(--text-dim);
font-weight: 500;
padding: 5px 8px;
border-bottom: 1px solid var(--border);
white-space: nowrap;
}
.qtable td {
text-align: right;
padding: 4px 8px;
border-bottom: 1px solid var(--border);
white-space: nowrap;
font-family: var(--font-mono);
}
.qtable th:first-child,
.qtable td:first-child {
text-align: left;
font-family: inherit;
}