-

购物车详情

+
+

购物车详情

+
+
请从左侧选择一个授权码查看
@@ -91,6 +143,8 @@ const loaderEl = document.getElementById('loader'); const downloadBtn = document.getElementById('download-btn'); const searchInput = document.getElementById('search-input'); + const codeCountEl = document.getElementById('code-count'); + const cartItemCountEl = document.getElementById('cart-item-count'); let activeCode = null; let allCodes = []; @@ -108,17 +162,26 @@ function renderCodeList() { const searchTerm = searchInput.value.toLowerCase(); const filteredCodes = allCodes.filter(code => - (code.order_id && code.order_id.toLowerCase().includes(searchTerm)) || - code.code.toLowerCase().includes(searchTerm) + (code.order_no && code.order_no.toLowerCase().includes(searchTerm)) || + code.code.toLowerCase().includes(searchTerm) ); + codeCountEl.innerText = `待处理: ${allCodes.length}`; codeListEl.innerHTML = ''; filteredCodes.forEach(code => { const item = document.createElement('div'); item.className = 'code-list-item'; item.dataset.code = code.code; - item.innerHTML = `${code.order_id || code.code}登录/上限:${code.login_count}/${code.login_limit} | 失效: ${new Date(code.expires_at).toLocaleString()}`; - item.onclick = () => loadCartForCode(code.code); + item.innerHTML = ` +
+ ${code.order_no || code.code} + 登录/上限:${code.login_count}/${code.login_limit} | 失效: ${new Date(code.expires_at).toLocaleString()} +
+
+ + +
+ `; codeListEl.appendChild(item); }); @@ -130,11 +193,38 @@ } } + async function deliverCodeAction(code, event) { + event.stopPropagation(); + if (!confirm(`确定要将授权码 ${code} 标记为已交付吗?`)) return; + + try { + const response = await fetch(`/api/admin/deliver/${code}`, { method: 'POST' }); + if (!response.ok) throw new Error('操作失败'); + fetchAuthCodes(); // Refresh the list + } catch (e) { + alert(e.message); + } + } + + async function cancelCodeAction(code, event) { + event.stopPropagation(); + if (!confirm(`确定要取消授权码 ${code} 吗?此操作不可逆!`)) return; + + try { + const response = await fetch(`/api/admin/cancel/${code}`, { method: 'POST' }); + if (!response.ok) throw new Error('操作失败'); + fetchAuthCodes(); // Refresh the list + } catch (e) { + alert(e.message); + } + } + async function loadCartForCode(code) { activeCode = code; renderCodeList(); // Re-render to highlight the active item cartGridEl.innerHTML = ''; + cartItemCountEl.innerText = ''; loaderEl.innerText = '正在加载...'; loaderEl.style.display = 'block'; downloadBtn.style.display = 'none'; @@ -144,6 +234,8 @@ if (!response.ok) throw new Error('Failed to load cart'); const items = await response.json(); + cartItemCountEl.innerText = `总数: ${items.length}`; + if (items.length === 0) { loaderEl.innerText = '这个购物车是空的'; return; @@ -177,9 +269,8 @@ const a = document.createElement('a'); a.style.display = 'none'; a.href = url; - // Use order_id for filename if available const activeItem = document.querySelector(`[data-code="${activeCode}"] strong`); - const filename = `${activeItem.innerText.replace(/\\s+/g, '_')}_templates.zip`; + const filename = `${activeItem.innerText.replace(/\s+/g, '_')}_templates.zip`; a.download = filename; document.body.appendChild(a); a.click();