diff --git a/app/services/plan_feed.py b/app/services/plan_feed.py index 40a99c8..d4aa486 100644 --- a/app/services/plan_feed.py +++ b/app/services/plan_feed.py @@ -1131,5 +1131,9 @@ def status() -> dict: "theme_cap": plan.get("theme_cap"), "encoding": plan.get("encoding"), "theme_sync": plan.get("theme_sync"), "snapshot": plan.get("snapshot"), "fetched_at": plan.get("fetched_at"), "url": plan.get("url"), + # 来源与赛道闸 (2026-09-14 §5.3): 页面顶栏芯片显示; 现算 (live) 盘中给一条提示。 + "plan_source": plan.get("plan_source"), + "snapshot_generated_at": plan.get("snapshot_generated_at"), + "gate_on": plan.get("gate_on"), "hint": f"计划 {plan['date']} 已就绪 (日龄 {plan.get('age_tdays')} 交易日)"}) return st diff --git a/app/web/static/index.html b/app/web/static/index.html index 2c92823..8cab49e 100644 --- a/app/web/static/index.html +++ b/app/web/static/index.html @@ -348,6 +348,10 @@ body.dock-r:not(.r-fold) .side-r .strip{display:none;} .sigrow2 .cat{color:var(--muted);font-size:11.5px;white-space:nowrap;} .sigrow2 .sp{flex:1;} .sigrow2.old{opacity:.5;} +.sigrow2.clk{cursor:pointer;border-radius:4px;} +.sigrow2.clk:hover{background:rgba(64,120,220,.08);} +.lk{cursor:pointer;text-decoration:underline dotted;} +.lk:hover{color:var(--accent,#3a6ea5);} .pin{font-size:10px;font-weight:700;color:var(--stop);background:var(--stop-weak);border-radius:4px;padding:0 4px;flex:none;} .pin.plan{color:var(--accent);background:var(--accent-weak);} .srcgroup{border:1px solid var(--hair);border-radius:10px;margin-bottom:7px;overflow:hidden;background:var(--surface-2);} @@ -384,6 +388,13 @@ body.dock-r:not(.r-fold) .side-r .strip{display:none;} .cs-sect{margin:0 0 12px;} .cs-sect>.h{font-size:12px;font-weight:660;color:var(--muted);margin:0 0 5px; border-bottom:1px dashed var(--hair);padding-bottom:4px;} +/* 抽屉三段重构 (2026-09-14 §4.4): 顶部吸顶锚点条 + 三个固定段。 */ +.cs-anchors{position:sticky;top:0;z-index:2;display:flex;gap:6px;padding:6px 0;margin:-2px 0 8px; + background:var(--panel,#fff);border-bottom:1px solid var(--hair);} +.cs-anchors a{font-size:12px;color:var(--muted);text-decoration:none;padding:2px 8px;border-radius:12px;cursor:pointer;} +.cs-anchors a:hover{background:rgba(64,120,220,.10);color:var(--fg,#222);} +.cs-part{margin:0 0 16px;scroll-margin-top:44px;} +.cs-part>.h{font-size:13px;font-weight:700;margin:0 0 8px;padding-bottom:5px;border-bottom:1px solid var(--hair);} .cs-row{display:flex;align-items:baseline;gap:7px;padding:4px 0;font-size:12.5px; border-bottom:1px solid rgba(0,0,0,.04);flex-wrap:wrap;} .cs-row .t{font-size:11.5px;color:var(--muted);width:40px;flex:none;} @@ -451,7 +462,7 @@ body.dock-r:not(.r-fold) .side-r .strip{display:none;} 买入 {{ ov.buy_halt ? '已暂停':'正常' }} 执行 {{ ov.exec_halt ? '已暂停':'正常' }} 自主 {{ tx('autonomy', ov.autonomy) }}? - 选股计划 {{ planStatus.ok===false ? '读不到' : (planStatus.date || '-') }} + 选股计划 {{ planStatus.ok===false ? '读不到' : (planStatus.date || '-') }} · {{ planStatus.plan_source==='snapshot'?'快照':(planStatus.plan_source==='live'?'现算':planStatus.plan_source) }} · 赛道闸开 · 赛道闸关? 技术面 {{ techChipText }}?