Files
2026-04-18 06:18:58 +09:00

78 lines
4.3 KiB
HTML

<!DOCTYPE html><html lang="ko"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>QR 생성</title><link rel="stylesheet" href="/css/style.css"></head>
<body>
<nav class="nav"><span class="nav-brand">⚡ EV AS 관리 — 관리자</span><div id="navUser"></div></nav>
<div class="layout">
<div class="sidebar">
<div class="sidebar-section">AS 관리</div>
<a href="/pages/admin/dashboard.html">📊 대시보드</a>
<a href="/pages/admin/reports.html">📋 신고 목록</a>
<a href="/pages/admin/costs.html">💰 출장비 관리</a>
<div class="sidebar-section">시스템</div>
<a href="/pages/admin/improvements.html">🔧 개선항목</a>
<a href="/pages/admin/chargers.html">⚡ 충전기 관리</a>
<a href="/pages/admin/charger-types.html">🏷 충전기 종류</a>
<a href="/pages/admin/qr.html" class="active">📷 QR 생성</a>
<a href="/pages/admin/accounts.html">👥 계정 관리</a>
<a href="/pages/admin/settings.html">⚙️ 설정</a>
</div>
<div class="main">
<h2 style="font-size:18px;font-weight:700;color:var(--navy);margin-bottom:18px">QR 코드 생성</h2>
<div style="display:grid;grid-template-columns:1fr 1fr;gap:20px;max-width:800px">
<div class="card">
<div class="card-title">충전기 선택</div>
<div class="form-group"><label>등록된 충전기 선택</label>
<select id="chargerSel" onchange="onSelect()"><option value="">직접 입력</option></select>
</div>
<div class="form-group"><label>충전기 ID</label><input type="text" id="cId" placeholder="CG-003"></div>
<button class="btn btn-primary" onclick="genQR()">📷 QR 생성</button>
<div id="err" class="alert alert-danger" style="display:none;margin-top:10px"></div>
</div>
<div class="card" id="qrResult" style="display:none">
<div class="card-title">생성된 QR 코드</div>
<div style="text-align:center">
<img id="qrImg" style="width:200px;height:200px;border:1px solid var(--gray3);border-radius:8px">
<div id="qrInfo" style="margin-top:10px;font-size:13px;color:var(--text2)"></div>
<button class="btn btn-success" style="margin-top:12px" onclick="printQR()">🖨 인쇄</button>
<a id="qrDownload" class="btn btn-outline" style="margin-top:8px;display:block">⬇ 이미지 저장</a>
</div>
</div>
</div>
</div>
</div>
<script src="/js/api.js"></script><script src="/js/auth.js"></script>
<script>
Auth.require(['admin']); Auth.renderNav(document.getElementById('navUser'));
let chargerMap = {};
async function load() {
const chargers = await API.get('/chargers');
chargers.forEach(c => chargerMap[c.id] = c);
document.getElementById('chargerSel').innerHTML = '<option value="">직접 입력</option>' +
chargers.map(c=>`<option value="${c.id}">${c.id}${c.name} (${c.station_name})</option>`).join('');
const urlId = new URLSearchParams(location.search).get('id');
if (urlId) { document.getElementById('chargerSel').value = urlId; onSelect(); genQR(); }
}
function onSelect() {
const id = document.getElementById('chargerSel').value;
document.getElementById('cId').value = id;
}
async function genQR() {
const id = document.getElementById('cId').value.trim();
if (!id) { const el=document.getElementById('err'); el.textContent='충전기 ID를 입력하세요.'; el.style.display='block'; return; }
document.getElementById('err').style.display='none';
try {
const res = await API.post('/chargers/'+id+'/qr');
const c = chargerMap[id] || {};
document.getElementById('qrResult').style.display='block';
document.getElementById('qrImg').src = res.qr_path + '?t=' + Date.now();
document.getElementById('qrInfo').innerHTML = `<strong>${id}</strong><br>${c.name||''} / ${c.station_name||''}`;
const dl = document.getElementById('qrDownload');
dl.href = res.qr_path; dl.download = id + '_QR.png';
} catch(e) { const el=document.getElementById('err'); el.textContent=e.message; el.style.display='block'; }
}
function printQR() {
const img = document.getElementById('qrImg').src;
const w = window.open(''); w.document.write(`<html><body style="text-align:center"><img src="${img}" style="width:300px"><br><script>window.print()<\/script></body></html>`); w.document.close();
}
load();
</script></body></html>