function credUsed(c){ return !!(c && (c.used || c.status==='redeemed')); } function credSource(c){ const s=String((c&&c.use_source)||''); if(!s) return '-'; if(s==='manual') return '手动'; if(s.indexOf(':')>0) return '兑换 '+s; return s; } async function setCredUse(id, used){ const note=await ask(used?'标为已使用':'标为未使用', '修改说明', '', '必填', 'text'); if(note===null) return; const text=String(note||'').trim(); if(!text) return fail('无法修改','请填写修改说明'); const j=await api('/api/admin/credentials/'+id+'/use',{method:'POST',body:JSON.stringify({used:!!used, note:text})}); if(j.error) return fail('无法修改', j.error); notice(used?'已标为已使用':'已标为未使用', text); render(); } function credSku(c){ return (cache.skus||[]).find(s=>s && s.package===c.package && s.sku===c.sku)||{}; } function credAppName(c){ const row=credSku(c); if(row.title && row.title!==row.sku) return row.title; const pkg=c&&c.package||''; const named=(cache.skus||[]).find(s=>s && s.package===pkg && s.sku===c.sku && s.title && s.title!==s.sku); if(named) return named.title; return pkg || '-'; } function viewCreds(){ const em=emails(); const apps=sortApps([...new Set((cache.skus||[]).map(s=>s&&s.package).filter(Boolean))]); const skuRows=(cache.skus||[]).filter(s=>s && s.sku && (!filters.credApp || s.package===filters.credApp)).slice().sort((a,b)=>appRank(a.package)-appRank(b.package)||String(a.title||a.sku).localeCompare(String(b.title||b.sku),'zh')); const all=(cache.creds||[]).filter(c=>{ if(!c) return false; if(filters.credApp && c.package!==filters.credApp) return false; if(filters.credSku && c.sku!==filters.credSku) return false; if(filters.credUse==='used' && !credUsed(c)) return false; if(filters.credUse==='free' && credUsed(c)) return false; return matchQ([em[c.account_id],credAppName(c),c.package,c.sku,String(credSku(c).id||''),c.order_id,c.purchase_token,c.use_source,c.use_note,String(c.id)]); }); const info=paginate(all,'creds'); const rows=info.slice.map(c=>{ const used=credUsed(c); return '
| ID | 账号 | 应用 | SKU | 订单 | 使用 | 来源 | 使用时间 | 购买时间 | |
|---|---|---|---|---|---|---|---|---|---|
| 还没有本系统购买成功的票据。 | |||||||||