完善下单表单与 CTP 持仓,requirements 加入 vnpy 并更新部署文档

以损定仓/固定张数分栏下单、限价市价、持仓仅读柜台;DEPLOY 补充 SimNow 与 vnpy 安装说明。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 10:52:25 +08:00
parent 709801305f
commit 62cd868f79
9 changed files with 394 additions and 308 deletions
+17 -12
View File
@@ -3,30 +3,35 @@
.trade-dashboard{display:flex;flex-direction:column;gap:1.25rem}
.trade-row-split{display:grid;grid-template-columns:1fr 1fr;gap:1.25rem;align-items:stretch}
.trade-card{margin-bottom:0;height:100%;display:flex;flex-direction:column}
.trade-card h2{margin-bottom:.65rem;flex-shrink:0}
.trade-card h2{margin-bottom:.35rem;flex-shrink:0}
.trade-card .card-body{flex:1;min-height:0}
.trade-card-full{margin-bottom:0}
.pos-hint{font-size:.75rem;margin:-.15rem 0 .5rem .25rem;color:var(--text-muted)}
.trade-order-status{display:grid;gap:.55rem;margin:.5rem 0 .75rem;padding:.65rem .85rem;background:var(--card-inner);border:1px solid var(--card-border);border-radius:8px;font-size:.82rem}
.trade-order-status-compact{margin-top:0}
.trade-order-status .status-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .65rem}
.trade-input-row,.trade-risk-row{display:grid;grid-template-columns:2fr 1fr 1fr;gap:.65rem;margin-bottom:.75rem}
.trade-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:.65rem;margin-bottom:.75rem}
.trade-form-grid .span-2{grid-column:span 2}
.trade-field label{display:block;font-size:.72rem;margin-bottom:.25rem;color:var(--text-label)}
.trade-btn-row{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem;margin:.75rem 0}
.trade-btn{border:none;border-radius:8px;padding:.65rem .3rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:.12rem;color:#fff;font-weight:600}
.trade-btn .btn-price{font-size:1rem}
.trade-btn .btn-label{font-size:.82rem}
.trade-btn .btn-sub{font-size:.66rem;opacity:.85;font-weight:400}
.trade-btn.long{background:linear-gradient(180deg,#e74c3c,#c0392b)}
.trade-btn.lock{background:linear-gradient(180deg,#27ae60,#1e8449)}
.trade-btn.close{background:linear-gradient(180deg,#3498db,#2980b9)}
.trade-field select,.trade-field input{width:100%}
.price-type-tabs{display:flex;gap:.35rem;margin-bottom:.35rem}
.price-tab{border:1px solid var(--card-border);background:var(--card-inner);color:var(--text-muted);padding:.25rem .65rem;border-radius:6px;font-size:.75rem;cursor:pointer}
.price-tab.active{border-color:var(--accent);color:var(--accent);font-weight:600}
.market-hint{font-size:.7rem;margin-top:.25rem}
.calc-lots-row{display:flex;gap:.4rem}
.calc-lots-row input{flex:1}
.calc-lots-row .btn-secondary{padding:.35rem .6rem;font-size:.75rem;white-space:nowrap}
.trade-action-row{display:flex;gap:.65rem;margin:.75rem 0 .5rem}
.trade-action-row .btn-open{flex:1;padding:.65rem}
.trade-footer{background:var(--card-inner);border-radius:8px;padding:.65rem .85rem;font-size:.78rem;line-height:1.5;border:1px solid var(--card-border);margin-top:.5rem}
.trade-footer strong{color:var(--accent)}
.rec-blocked td{opacity:.55}
.rec-ok td:first-child{font-weight:600}
#positions .card-body{max-height:480px;overflow-y:auto}
#positions .card-body{max-height:460px;overflow-y:auto}
@media (max-width:900px){
.trade-row-split{grid-template-columns:1fr}
#positions .card-body{max-height:360px}
.trade-btn-row{grid-template-columns:repeat(2,1fr)}
.trade-form-grid{grid-template-columns:1fr}
.trade-form-grid .span-2{grid-column:span 1}
}