feat(admin): 优化换乘设置与坐标绑定逻辑,自动识别同名换乘站

This commit is contained in:
2026-07-11 21:46:12 +08:00
parent aede84f164
commit 116b2af4ef
5 changed files with 117 additions and 23 deletions
+24 -9
View File
@@ -361,16 +361,27 @@
<label class="switch-label">
<input type="checkbox" v-model="stationForm.transfer_enabled">
<span class="slider"></span>
<span class="label-text">可换乘</span>
<span class="label-text">设置跨名/强制换乘</span>
</label>
<p class="text-muted" style="font-size: 0.85em; margin-top: 6px;">
<i class="fas fa-magic text-primary"></i> 提示:系统会自动将中文名或英文名相同的站点连接为换乘站,无需手动设置。
</p>
</div>
<div class="mb-4">
<div class="mb-4" v-if="stationForm.transfer_enabled">
<label>可换乘到的站点</label>
<select v-model="stationForm.transfer_to" multiple class="w-100" :disabled="!stationForm.transfer_enabled" style="height: 180px;">
<option v-for="t in transferTargets" :key="t.code" :value="t.code">
{{ t.name }} ({{ t.en_name }}) - {{ t.code }}
</option>
<select v-model="stationForm.transfer_to" multiple class="w-100" style="height: 180px;">
<optgroup label="同名站点 (已自动换乘)" v-if="transferTargets.sameName.length > 0">
<option v-for="t in transferTargets.sameName" :key="t.code" :value="t.code">
{{ t.name }} ({{ t.en_name }}) - {{ t.code }}
</option>
</optgroup>
<optgroup label="其他站点">
<option v-for="t in transferTargets.others" :key="t.code" :value="t.code">
{{ t.name }} ({{ t.en_name }}) - {{ t.code }}
</option>
</optgroup>
</select>
<p class="text-muted" style="font-size: 0.8em; margin-top: 4px;">按住 Ctrl / Cmd 键多选</p>
</div>
<div class="modal-actions">
<button class="danger" @click="deleteStation(stationFormOriginalCode)">删除</button>
@@ -814,10 +825,14 @@
</label>
<select v-if="mapBindingMode" v-model="mapBindingStation" style="width: 240px;">
<option value="">-- 选择要绑定的站点 --</option>
<option v-for="s in stations" :key="s.code" :value="s.code">{{ s.name }} ({{ s.code }})</option>
<optgroup v-for="g in unboundStationsGrouped" :key="g.name" :label="g.name + (g.isTransfer ? ' (换乘站)' : '') + (g.isBound ? ' - 已绑定' : '')">
<option v-for="s in g.stations" :key="s.code" :value="s.code">
{{ s.name }} ({{ s.code }})
</option>
</optgroup>
</select>
<div v-if="mapBindingMode" class="text-muted" style="font-size: 0.9em;">
在左侧选择站点后,点击下方图片中的位置即可绑定。绑定的坐标将用于网页订票展示。
在左侧选择站点后,点击下方图片中的位置即可绑定。同名换乘站会自动同步坐标绑定。
</div>
</div>
@@ -963,7 +978,7 @@
</main>
</div>
<script src="/custom-dialog.js?v=11"></script>
<script src="index.js?v=3"></script>
<script src="index.js?v=4"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const isDomain = location.hostname.includes('fse-media.group');