diff --git a/ft-app/app/routers/contracts.py b/ft-app/app/routers/contracts.py index 9d5fc51..05d6e02 100644 --- a/ft-app/app/routers/contracts.py +++ b/ft-app/app/routers/contracts.py @@ -24,11 +24,33 @@ def get_active_contracts(db: Session) -> list[str]: @router.get("/", response_class=HTMLResponse) def contract_index(request: Request, db: Session = Depends(get_db)): - active_contracts = get_active_contracts(db) + from app.models import Product + + # Build product → contracts mapping, ordered by product code + products = ( + db.query(Product) + .order_by(Product.code) + .all() + ) + + product_groups = [] + all_codes = [] + for prod in products: + codes = [ + c.code for c in prod.contracts if c.is_active + ] + if codes: + product_groups.append({ + "code": prod.code, + "name": prod.name, + "exchange": prod.exchange, + "contracts": codes, + }) + all_codes.extend(codes) latest = ( db.query(DailyBar) - .filter(DailyBar.contract.in_(active_contracts)) + .filter(DailyBar.contract.in_(all_codes)) .order_by(DailyBar.date.desc()) .all() ) @@ -42,7 +64,7 @@ def contract_index(request: Request, db: Session = Depends(get_db)): template.render( request=request, active_nav="contracts", - contracts=active_contracts, + product_groups=product_groups, contract_bars=contract_bars, ) ) diff --git a/ft-app/app/templates/index.html b/ft-app/app/templates/index.html index 61db674..f491b92 100644 --- a/ft-app/app/templates/index.html +++ b/ft-app/app/templates/index.html @@ -5,33 +5,57 @@ {% block content %} -
合约列表
- -
- - - {% for c in contracts %} - - - {% if c in contract_bars %} - - - - - - - {% else %} - - {% endif %} - - - {% endfor %} -
合约日期开盘收盘最高最低振幅操作
{{ c }}{{ contract_bars[c].date }}{{ contract_bars[c].open|int }}{{ contract_bars[c].close|int }}{{ contract_bars[c].high|int }}{{ contract_bars[c].low|int }} - {% if contract_bars[c].amp_5d %} - {{ contract_bars[c].amp_5d|int }} - {% else %} - - {% endif %} - 暂无数据详情 →
+{% for pg in product_groups %} +
+
+ + {{ pg.code }} · {{ pg.name }} + {{ pg.exchange }} + {{ pg.contracts|length }} 合约 +
+
+ + + {% for c in pg.contracts %} + + + {% if c in contract_bars %} + + + + + + + {% else %} + + {% endif %} + + + {% endfor %} +
合约日期开盘收盘最高最低振幅操作
{{ c }}{{ contract_bars[c].date }}{{ contract_bars[c].open|int }}{{ contract_bars[c].close|int }}{{ contract_bars[c].high|int }}{{ contract_bars[c].low|int }} + {% if contract_bars[c].amp_5d %} + {{ contract_bars[c].amp_5d|int }} + {% else %} + + {% endif %} + 暂无数据详情 →
+
+{% endfor %} + + {% endblock %}