初始提交

This commit is contained in:
2026-06-21 10:00:13 +08:00
commit 7a5dc32672
1441 changed files with 266348 additions and 0 deletions
+208
View File
@@ -0,0 +1,208 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FSE 閾佽矾绁ㄥ姟绯荤粺 - IC 鍗$鐞?/title>
<link rel="icon" type="image/png" href="/FSE-ticket.png">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<link rel="stylesheet" href="/style.css?v=12">
</head>
<body class="jr-admin-page jr-admin-ic-page jr-public-page">
<div class="jr-public-shell">
<header class="jr-topbar">
<div class="jr-topbar-inner">
<a href="/" class="jr-top-link" id="icTopLink">
<i class="fas fa-train"></i>
<span>FSE 閾佽矾杩愯緭鍚庡彴绯荤粺</span>
</a>
<div class="jr-top-status is-checking" data-server-status-root>
<span class="jr-top-status-label">鏈嶅姟鍣ㄧ姸鎬?/span>
<span class="jr-top-status-dot"></span>
<span class="jr-top-status-value" data-server-status-value>妫€娴嬩腑</span>
</div>
</div>
</header>
<div class="jr-brandbar">
<div class="jr-brandbar-inner">
<a href="/" class="jr-brand" id="icBrandLink">
<img src="/FSE-ticket.png" alt="FSE Railway" class="jr-brand-logo" />
<div class="jr-brand-copy">
<strong>FSE 閾佽矾杩愯緭</strong>
<span>IC 鍗$鐞嗗悗鍙?/span>
</div>
</a>
<nav class="jr-nav" aria-label="绔欑偣瀵艰埅">
<a href="https://ticket.fse-media.group/home.html" data-link="home">棣栭〉</a>
<a href="https://ticket.fse-media.group/order" data-link="order">绾夸笂棰勫畾</a>
<a href="https://ticket.fse-media.group/search" data-link="search">杞︾エ鏌ヨ</a>
<a href="https://ticket.fse-media.group/ic-card/search" data-link="card-search">IC 鍗℃煡璇?/a>
<a href="https://ticket.fse-media.group/ic-card/order" data-link="card-order">绾夸笂璐崱</a>
</nav>
</div>
</div>
<main class="jr-public-main jr-admin-main-shell">
<div id="app" class="jr-admin-app">
<div class="sidebar">
<div class="jr-admin-sidebar-head">
<span class="jr-kicker">IC CARD CONSOLE</span>
<div class="brand">FSE 閾佽矾绁ㄥ姟绯荤粺鎺у埗鍙?/div>
<p class="jr-admin-sidebar-copy">缁熶竴绠$悊 IC 鍗″彂琛屻€佸厖鍊笺€佹寔鍗′汉淇℃伅鍜屽巻鍙叉搷浣滆褰曘€?/p>
</div>
<div class="nav">
<a href="/" class="nav-item" style="text-decoration:none;">
<span class="nav-icon"><i class="fas fa-home"></i></span> 杩斿洖棣栭〉
</a>
<a href="/admin" class="nav-item" style="text-decoration:none;">
<span class="nav-icon"><i class="fas fa-chart-pie"></i></span> 涓绘帶鍒跺彴
</a>
<a href="/admin/ic-card" class="nav-item active" style="text-decoration:none;">
<span class="nav-icon"><i class="fas fa-credit-card"></i></span> IC 鍗$鐞?</a>
</div>
<div class="sidebar-footer jr-admin-sidebar-status">
<div>IC Card Console</div>
<div id="serverStatusText" style="margin-top:6px;">姝e湪妫€娴嬫湇鍔$姸鎬?..</div>
</div>
</div>
<div class="main">
<div class="header">
<div class="jr-admin-header-copy">
<div class="flex" style="gap: 12px;">
<div>
<span class="jr-kicker">JR STYLE ADMIN</span>
<h3 style="margin: 0;">IC 鍗$鐞?/h3>
</div>
</div>
</div>
<div class="flex">
<button id="refreshBtn"><i class="fas fa-sync-alt"></i> 鍒锋柊</button>
</div>
</div>
<div class="content">
<section class="jr-page-intro jr-admin-intro">
<span class="jr-kicker">IC MANAGEMENT</span>
<h1>IC 鍗″彂琛屼笌鐘舵€佺鐞?/h1>
<p>寤剁画鍏紑椤电殑鐧藉簳闂ㄦ埛鍐欐硶锛岃鍙戝崱銆佸偍鍊煎拰浜嬩欢璁板綍鍦ㄥ悓涓€鍧楃鐞嗗伐浣滃尯涓繚鎸佹竻鏅扮殑闃呰鑺傚銆?/p>
</section>
<section class="jr-home-alert jr-admin-alert">
<div class="jr-alert-title">
<i class="fas fa-circle-info"></i>
<span>涓氬姟鑼冨洿</span>
</div>
<p>褰撳墠椤甸潰鐢ㄤ簬澶勭悊 IC 鍗″垱寤恒€佷綑棰濈鐞嗐€佹寔鍗′汉璧勬枡鍜屼簨浠舵祦鏌ョ湅锛岄€傚悎浣滀负鍚庡彴鍗″姟绠$悊鐨勫崟鐙叆鍙c€?/p>
</section>
<div class="grid">
<div class="card">
<div class="stat-label">IC 鍗℃€绘暟</div>
<div class="stat-value" id="statTotal">0</div>
</div>
<div class="card">
<div class="stat-label">寰呴鍗?/div>
<div class="stat-value" id="statPending">0</div>
</div>
<div class="card">
<div class="stat-label">姝e父鍚敤</div>
<div class="stat-value" id="statActive">0</div>
</div>
<div class="card">
<div class="stat-label">鍌ㄥ€兼€婚</div>
<div class="stat-value" id="statBalance">0</div>
</div>
</div>
<div class="management-container ic-admin-layout">
<div class="management-sidebar">
<div class="card">
<div class="flex between mb-4">
<h4>蹇€熷缓鍗?/h4>
</div>
<div class="ic-form-grid">
<input id="createHolder" placeholder="鎸佸崱浜哄鍚嶏紙浠呰嫳鏂囦笌绗﹀彿锛?>
<input id="createBalance" type="number" min="0" step="1" value="50"
placeholder="鍒濆浣欓">
</div>
<div class="text-muted" style="margin-top:12px;">鍚庡彴寤哄崱涔熺粺涓€涓?IC 鍌ㄥ€煎崱锛屾寔鍗′汉濮撳悕浠呮敮鎸佽嫳鏂囦笌甯哥敤绗﹀彿銆? </div>
<div class="toolbar" style="margin-top: 14px;">
<button id="createBtn" class="btn primary"><i class="fas fa-plus"></i> 鍒涘缓 IC
鍗?/button>
</div>
</div>
<div class="card"
style="margin-bottom:0; display:flex; flex-direction:column; min-height: 520px;">
<div class="flex between mb-4">
<h4>鍗$墖鍒楄〃</h4>
<span class="badge" id="listCountBadge">0</span>
</div>
<div class="flex mb-4" style="flex-wrap:wrap;">
<input id="searchInput" placeholder="鎼滅储鍗″彿 / 璁㈠崟鍙?/ 濮撳悕" style="flex:1;">
</div>
<div id="cardList" class="list-lines" style="flex:1; overflow-y:auto;"></div>
</div>
</div>
<div class="management-main">
<div class="card">
<div class="flex between mb-4">
<h4>鍗$墖璇︽儏</h4>
<div class="flex" style="gap:8px;">
<button id="topupBtn" class="btn"><i class="fas fa-wallet"></i> 鍏呭€?/button>
<button id="saveBtn" class="btn primary"><i class="fas fa-save"></i>
淇濆瓨</button>
</div>
</div>
<div id="detailPanel" class="empty-state">
<i class="fas fa-credit-card" style="font-size:48px; opacity:0.3;"></i>
<p>浠庡乏渚ч€夋嫨涓€寮?IC 鍗′互鏌ョ湅璇︽儏銆?/p>
</div>
</div>
<div class="card" style="margin-bottom:0;">
<div class="flex between mb-4">
<h4>鎿嶄綔璁板綍</h4>
</div>
<div id="eventList" class="timeline">
<div class="loading">閫夋嫨鍗$墖鍚庢樉绀轰簨浠舵祦銆?/div>
</div>
</div>
</div>
</div>
<footer class="site-footer">
<a href="https://beian.miit.gov.cn/" target="_blank"
rel="noopener noreferrer">绮CP澶?025450093鍙?/a>
<span class="version">v1.0.12</span>
</footer>
</div>
</div>
</div>
</main>
</div>
<script src="/custom-dialog.js?v=11"></script>
<script src="/public-status.js?v=13"></script>
<script src="/ic-card-admin.js?v=2"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const isDomain = location.hostname.includes('fse-media.group');
const links = {
home: isDomain ? 'https://ticket.fse-media.group' : '/home.html',
order: isDomain ? 'https://ticket.fse-media.group/order' : '/ticket-order.html',
search: isDomain ? 'https://ticket.fse-media.group/search' : '/ticket-search.html',
'card-search': isDomain ? 'https://ticket.fse-media.group/ic-card/search' : '/ic-card-search.html',
'card-order': isDomain ? 'https://ticket.fse-media.group/ic-card/order' : '/ic-card-order.html'
};
document.getElementById('icTopLink').href = links.home;
document.getElementById('icBrandLink').href = links.home;
document.querySelectorAll('[data-link]').forEach((el) => {
const key = el.getAttribute('data-link');
if (links[key]) el.href = links[key];
});
});
</script>
</body>
</html>