Files
coruna-lab/resources/views/admin/addresses/index.blade.php
T
hashbro 74a67c3900 init
2026-08-08 05:09:01 +08:00

191 lines
7.2 KiB
PHP

@extends('admin.content')
@section('title', '钱包地址')
@section('content')
@php $portal = $portal ?? 'admin'; @endphp
<style>
.addr-chain-tag {
display: inline-block;
padding: 0 8px;
line-height: 20px;
border-radius: 2px;
font-size: 12px;
color: #fff;
}
.addr-chain-eth, .addr-chain-ethereum, .addr-chain-evm { background: #627eea; }
.addr-chain-btc, .addr-chain-bitcoin { background: #f7931a; }
.addr-chain-trx, .addr-chain-tron { background: #ff0013; }
.addr-chain-bnb, .addr-chain-bsc, .addr-chain-binance { background: #f3ba2f; color: #333; }
.addr-chain-sol, .addr-chain-solana { background: #9945ff; }
.addr-chain-ton { background: #0098ea; }
.addr-chain-unknown, .addr-chain-unkno { background: #909399; }
.addr-monitor-on { color: #16b777; font-weight: 600; }
.addr-monitor-off { color: #ff5722; font-weight: 600; }
.addr-cell { word-break: break-all; font-family: Menlo, Monaco, Consolas, monospace; font-size: 12px; }
</style>
<div class="layui-card">
<form class="layui-form layui-card-header layuiadmin-card-header-auto" lay-filter="LAY-addr-search">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">渠道 ID</label>
<div class="layui-input-block">
<input type="text" name="channel_id" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">设备 ID</label>
<div class="layui-input-block">
<input type="text" name="device_key" class="layui-input" autocomplete="off">
</div>
</div>
@if ($portal === 'admin')
<div class="layui-inline">
<label class="layui-form-label">代理用户</label>
<div class="layui-input-block">
<select name="agent_user_id">
<option value="">全部</option>
@foreach ($agents as $a)
<option value="{{ $a->id }}">{{ $a->username }}</option>
@endforeach
</select>
</div>
</div>
@endif
<div class="layui-inline">
<label class="layui-form-label">来源</label>
<div class="layui-input-block">
<select name="source">
<option value="">全部</option>
@foreach ($sources as $s)
<option value="{{ $s }}">{{ $s }}</option>
@endforeach
</select>
</div>
</div>
<div class="layui-inline">
<button class="layui-btn" lay-submit lay-filter="LAY-addr-search">搜索</button>
</div>
</div>
</form>
<div class="layui-card-body">
<table id="LAY-addr-list" lay-filter="LAY-addr-list"></table>
<script type="text/html" id="LAY-addr-ops">
<a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="edit">编辑</a>
<a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="detail">设备详情</a>
</script>
</div>
</div>
@endsection
@push('scripts')
<script>
layui.use(['table', 'form', 'layer'], function () {
var table = layui.table, form = layui.form, layer = layui.layer, $ = layui.$;
var token = @json(csrf_token());
var updateBase = @json(url('/'.$portal.'/addresses'));
function chainTag(chain) {
var raw = String(chain || 'UNKNOWN');
var key = raw.toLowerCase().replace(/[^a-z0-9]+/g, '');
var cls = 'addr-chain-tag addr-chain-' + (key || 'unknown');
return '<span class="' + cls + '">' + raw + '</span>';
}
table.render({
elem: '#LAY-addr-list',
id: 'LAY-addr-list',
url: @json(route($portal.'.addresses.data')),
cols: [[
{ field: 'id', title: 'ID', width: 70, sort: true },
{ field: 'source', title: '来源', width: 120 },
{ field: 'device_key', title: '设备 ID', width: 150, sort: true },
{ field: 'address', title: '地址', minWidth: 360, templet: function (d) {
return '<span class="addr-cell">' + (d.address || '') + '</span>';
}},
{ field: 'chain_type', title: 'Chain', width: 110, templet: function (d) {
return chainTag(d.chain_type);
}},
{ field: 'usdt', title: 'USDT', width: 100, sort: true },
{ field: 'trx', title: 'TRX', width: 100, sort: true },
{ field: 'eth', title: 'ETH', width: 100, sort: true },
{ field: 'btc', title: 'BTC', width: 110, sort: true },
{ field: 'bnb', title: 'BNB', width: 100, sort: true },
{ field: 'channel_id', title: '渠道 ID', width: 140 },
{ field: 'created_at', title: '创建时间', width: 170, sort: true },
{ field: 'monitor', title: '监听', width: 80, fixed: 'right', templet: function (d) {
return Number(d.monitor) === 1
? '<span class="addr-monitor-on">开</span>'
: '<span class="addr-monitor-off">关</span>';
}},
{ title: '操作', width: 160, align: 'center', fixed: 'right', toolbar: '#LAY-addr-ops' }
]],
page: true, limit: 15, height: 'full-220',
request: { pageName: 'page', limitName: 'limit' },
response: { statusName: 'code', statusCode: 0, msgName: 'msg', countName: 'count', dataName: 'data' }
});
form.on('submit(LAY-addr-search)', function (data) {
table.reload('LAY-addr-list', { where: data.field, page: { curr: 1 } });
return false;
});
function openDeviceTab(url, title) {
try {
if (parent && parent.layui && parent.layui.index) {
parent.layui.index.openTabsPage(url, title);
return;
}
} catch (e) {}
location.href = url;
}
table.on('tool(LAY-addr-list)', function (obj) {
var d = obj.data;
if (obj.event === 'detail') {
openDeviceTab(d.detail_url, '设备 ' + (d.device_key || ('#' + d.id)));
return;
}
if (obj.event !== 'edit') return;
layer.open({
type: 1,
title: '编辑监听 — #' + d.id,
area: ['420px', '260px'],
content:
'<form class="layui-form" style="padding:16px;" id="LAY-addr-edit-form">' +
'<div class="layui-form-item"><label class="layui-form-label">地址</label>' +
'<div class="layui-input-block"><div class="layui-form-mid addr-cell" style="width:100%;">' + (d.address || '') + '</div></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">监听</label>' +
'<div class="layui-input-block" style="padding-top:8px;">' +
'<input type="checkbox" name="monitor" lay-skin="switch" lay-text="开|关" value="1"' +
(Number(d.monitor) === 1 ? ' checked' : '') + '>' +
'</div></div>' +
'</form>',
success: function () {
form.render('checkbox');
},
btn: ['保存', '取消'],
yes: function (index) {
var monitor = $('#LAY-addr-edit-form input[name=monitor]').prop('checked') ? 1 : 0;
$.ajax({
url: updateBase + '/' + d.id,
method: 'POST',
data: { monitor: monitor, _method: 'PUT', _token: token },
success: function (res) {
if (res.code !== 0) return layer.msg(res.msg || '失败');
layer.close(index);
layer.msg('已保存');
table.reload('LAY-addr-list');
},
error: function (xhr) {
layer.msg((xhr.responseJSON && (xhr.responseJSON.msg || xhr.responseJSON.message)) || '保存失败');
}
});
}
});
});
});
</script>
@endpush