feat(ticket): 新增单程票购票与检票功能,优化日志与接口

- 前端新增单程票购票界面,支持票种切换与区间选择、价格预览
- 完善后端检票接口,添加单程票的校验与处理逻辑
- 优化售票机脚本的车票类型映射,新增单程车票支持
- 简化前端售票日志输出,移除冗余站点信息字段
- 新增服务层付费区间计算字段,优化公共接口返回数据
This commit is contained in:
2026-07-10 00:08:31 +08:00
parent 6098590692
commit fc4fe5101c
9 changed files with 246 additions and 54 deletions
+64 -23
View File
@@ -47,32 +47,73 @@
<section class="jr-content-grid">
<div class="jr-column-main">
<article class="jr-section-card" id="reservationPanel">
<div class="jr-section-head">
<div>
<p class="jr-section-label">Reservation</p>
<h2>选择乘车区间</h2>
<div class="jr-form-block" style="margin-bottom: 24px;">
<div class="jr-field-head">
<span class="jr-field-label">票种</span>
<span class="jr-field-note">请选择购买的车票类型</span>
</div>
<p class="jr-section-note">点击下方线路图中的站点,依次选择起点与终点。</p>
</div>
<div id="stationMap" class="station-map-container jr-station-map">
<div class="loading">加载线路图中...</div>
</div>
<div class="jr-selection-summary">
<div class="jr-selection-card jr-selection-start">
<span class="jr-selection-tag">出发站</span>
<strong id="fromDisplay">请在上方地图选择</strong>
<input id="from" type="hidden" />
</div>
<div class="jr-selection-arrow">
<i class="fas fa-arrow-right"></i>
</div>
<div class="jr-selection-card jr-selection-end">
<span class="jr-selection-tag">到达站</span>
<strong id="toDisplay">请在上方地图选择</strong>
<input id="to" type="hidden" />
<div class="train-type-group jr-train-type-group">
<label>
<input type="radio" name="ticketClass" value="normal" checked>
<div class="type-card jr-type-card">
<div class="type-title">普通票</div>
<div class="type-desc">按起终点购票</div>
</div>
</label>
<label>
<input type="radio" name="ticketClass" value="single">
<div class="type-card jr-type-card">
<div class="type-title">单程票</div>
<div class="type-desc">限乘一个区间</div>
</div>
</label>
</div>
</div>
<div class="jr-form-grid">
<div id="normalTicketView">
<div class="jr-section-head">
<div>
<p class="jr-section-label">Reservation</p>
<h2>选择乘车区间</h2>
</div>
<p class="jr-section-note">点击下方线路图中的站点,依次选择起点与终点。</p>
</div>
<div id="stationMap" class="station-map-container jr-station-map">
<div class="loading">加载线路图中...</div>
</div>
<div class="jr-selection-summary">
<div class="jr-selection-card jr-selection-start">
<span class="jr-selection-tag">出发站</span>
<strong id="fromDisplay">请在上方地图选择</strong>
<input id="from" type="hidden" />
</div>
<div class="jr-selection-arrow">
<i class="fas fa-arrow-right"></i>
</div>
<div class="jr-selection-card jr-selection-end">
<span class="jr-selection-tag">到达站</span>
<strong id="toDisplay">请在上方地图选择</strong>
<input id="to" type="hidden" />
</div>
</div>
</div>
<div id="singleTicketView" style="display: none;">
<div class="jr-section-head">
<div>
<p class="jr-section-label">Single Trip</p>
<h2>选择单程区间</h2>
</div>
<p class="jr-section-note">根据线路和票价分类,购买后可乘坐该线路任意单一区间。</p>
</div>
<div id="singleSegmentList" class="list jr-price-list" style="max-height: 400px; overflow-y: auto;">
<div class="loading">加载区间数据...</div>
</div>
<input type="hidden" id="singleSegmentSelection" value="" />
<input type="hidden" id="singleSegmentPrice" value="" />
</div>
<div class="jr-form-grid" style="margin-top: 24px;">
<div class="jr-form-block">
<div class="jr-field-head">
<span class="jr-field-label">车型</span>