",
auto_close=True,
)
def _route_card(index: int, route: dict[str, Any], quote: dict[str, Any] | None = None) -> str:
"""一张线路:航线、各段路段+TMS 费目、合计。"""
line = html.escape(route_line(route))
blocks = land_leg_fee_blocks_for_route(quote, route)
etas = {i: d for i, (_, d) in enumerate(option_eta_bits(route), 1)}
fee_bits: list[str] = []
items = ""
if blocks:
for i, (title, fees, eta) in enumerate(blocks, 1):
items += (
f"
{html.escape(title)}"
"
"
)
for fee in fees:
amount = _money(fee.get("amount"), str(fee.get("currency") or "").strip())
name = str(fee.get("name") or "").strip()
if not name or not amount:
continue
items += (
f"
{html.escape(name)}"
f"{html.escape(amount)}
"
)
days = eta or etas.get(i) or ""
if days:
items += (
f"
时效 {html.escape(days)}"
"
"
)
if items:
fee_bits.append(f"
{items}
")
else:
fee_bits.append("
本线路未返回分段成本
")
total = html.escape(option_total(route))
legs = list(route.get("legs") or [])
tag = "中转" if len(legs) > 1 else "直达"
tag_cls = "pill via" if len(legs) > 1 else "pill"
return (
""
)