Files
FSE-Ticket.sys/web/token.js
T
2026-06-21 10:00:13 +08:00

101 lines
4.0 KiB
JavaScript

(() => {
const params = new URLSearchParams(location.search);
const code = params.get('code');
const loading = document.getElementById('loading');
const error = document.getElementById('error');
const errorMsg = document.getElementById('errorMsg');
const content = document.getElementById('content');
const setTextAll = (selector, value) => {
document.querySelectorAll(selector).forEach(el => { el.textContent = value ?? ''; });
};
const setTextById = (id, value) => {
const el = document.getElementById(id);
if (el) el.textContent = value ?? '';
};
const applyStatus = (el, text, cls) => {
if (!el) return;
el.textContent = text;
el.className = cls;
};
const formatTrainType = (type) => {
const t = String(type || '').toLowerCase();
if (t === 'express' || t === 'ltd.exp' || t === '特急') return '特急';
return '普通';
};
if (!code) {
loading.style.display = 'none';
error.style.display = 'block';
errorMsg.textContent = '无效的凭证码';
return;
}
fetch(`/api/public/orders/${encodeURIComponent(code)}`)
.then(r => r.json())
.then(res => {
if (res.ok && res.data) {
loading.style.display = 'none';
error.style.display = 'none';
const d = res.data;
content.style.display = 'flex';
document.getElementById('vCode').textContent = d.code;
const codeTop = document.getElementById('vCodeTop');
if (codeTop) codeTop.textContent = d.code;
const statusTag = document.getElementById('vStatusTag');
const statusTop = document.getElementById('vStatusTop');
if (d.consumed) {
applyStatus(statusTag, '已使用', 'jr-status-pill jr-status-expired');
applyStatus(statusTop, '已使用', 'jr-status-pill jr-status-expired');
} else {
applyStatus(statusTag, '可使用', 'jr-status-pill jr-status-valid');
applyStatus(statusTop, '可使用', 'jr-status-pill jr-status-valid');
}
const startName = d.start_name || d.start || '';
const startEn = d.start_en || '';
const terminalName = d.terminal_name || d.terminal || '';
const terminalEn = d.terminal_en || '';
const trips = d.trips ?? '';
const type = formatTrainType(d.train_type);
const rideDate = d.ride_date ?? '';
const price = d.price ?? '';
setTextAll('.vStartName', startName);
setTextAll('.vStartEn', startEn);
setTextAll('.vStartCode', d.start || '');
setTextAll('.vTermName', terminalName);
setTextAll('.vTermEn', terminalEn);
setTextAll('.vTermCode', d.terminal || '');
setTextById('vCode', d.code);
setTextById('vTypeTop', type);
setTextById('vTripsTop', trips);
setTextById('vDateTop', rideDate);
setTextById('vPriceTop', price);
document.getElementById('copyBtn').onclick = () => {
navigator.clipboard.writeText(d.code).then(() => {
alert('已复制凭证码');
});
};
} else {
loading.style.display = 'none';
error.style.display = 'flex';
let msg = res.error || '未找到凭证信息';
if (msg.includes('not found')) msg = '凭证不存在';
errorMsg.textContent = msg;
}
})
.catch(e => {
loading.style.display = 'none';
error.style.display = 'flex';
errorMsg.textContent = '加载失败: ' + e.message;
});
})();