40 lines
2.9 KiB
PHP
40 lines
2.9 KiB
PHP
<div class="p-6">
|
|
<h2 class="text-2xl font-bold mb-4">👻 虚拟账户</h2>
|
|
<button onclick="document.getElementById('addModal').classList.remove('hidden')" class="mb-4 px-4 py-2 bg-blue-500 text-white rounded text-sm">+ 创建虚拟账户</button>
|
|
<div class="bg-white rounded-xl shadow overflow-hidden">
|
|
<table class="w-full text-sm">
|
|
<thead class="bg-gray-50"><tr><th class="px-4 py-3 text-left">用户名</th><th class="px-4 py-3">余额</th><th class="px-4 py-3">创建时间</th><th class="px-4 py-3">操作</th></tr></thead>
|
|
<tbody>
|
|
<?php foreach($virtuals??[] as $v): ?>
|
|
<tr class="border-t hover:bg-gray-50">
|
|
<td class="px-4 py-2"><?=htmlspecialchars($v['username'])?> <span class="text-xs text-purple-500">虚拟</span></td>
|
|
<td class="px-4 py-2 text-center font-mono"><?=number_format($v['balance'],2)?></td>
|
|
<td class="px-4 py-2 text-xs text-gray-400"><?=$v['created_at']??''?></td>
|
|
<td class="px-4 py-2 text-center">
|
|
<button onclick="adjustBal(<?=$v['id']?>,'<?=htmlspecialchars($v['username'])?>')" class="text-blue-500 text-xs">±余额</button>
|
|
<button onclick="delVirt(<?=$v['id']?>)" class="text-red-500 text-xs ml-1">删除</button>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</tbody></table></div>
|
|
|
|
<div id="addModal" class="fixed inset-0 bg-black/50 z-50 hidden flex items-center justify-center">
|
|
<div class="bg-white rounded-xl p-6 w-full max-w-sm">
|
|
<h3 class="font-bold mb-4">创建虚拟账户</h3>
|
|
<div class="space-y-3">
|
|
<input id="vUser" placeholder="用户名" class="w-full border rounded px-3 py-2">
|
|
<input id="vPass" placeholder="密码 (默认: 123456)" class="w-full border rounded px-3 py-2">
|
|
<input id="vBal" type="number" placeholder="初始余额" value="100000" class="w-full border rounded px-3 py-2">
|
|
</div>
|
|
<div class="flex gap-2 mt-4">
|
|
<button onclick="createVirt()" class="flex-1 py-2 bg-blue-500 text-white rounded">创建</button>
|
|
<button onclick="document.getElementById('addModal').classList.add('hidden')" class="flex-1 py-2 bg-gray-200 rounded">取消</button>
|
|
</div>
|
|
</div></div>
|
|
</div>
|
|
<script>
|
|
async function createVirt(){const r=await fetch('/admin/virtual/create',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({username:document.getElementById('vUser').value,password:document.getElementById('vPass').value||'123456',balance:parseFloat(document.getElementById('vBal').value)})});const d=await r.json();if(d.status==='success')location.reload();else alert(d.message);}
|
|
async function adjustBal(id,name){const a=prompt('调整 '+name+' 的余额(正数=增加,负数=减少):');if(!a)return;const r=await fetch('/admin/virtual/balance',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({id,amount:parseFloat(a)})});const d=await r.json();if(d.status==='success')location.reload();else alert(d.message);}
|
|
async function delVirt(id){if(!confirm('确定删除?'))return;await fetch('/admin/virtual/delete/'+id,{method:'POST'});location.reload();}
|
|
</script>
|