fix: transfer invaild txid

This commit is contained in:
hashbro
2026-09-04 04:09:32 +08:00
parent 4c49a61149
commit f67da8a102
16 changed files with 730 additions and 24 deletions
@@ -80,6 +80,7 @@
<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-danger layui-btn-xs" lay-event="sweep">归集</a>
<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>
@@ -103,6 +104,93 @@ layui.use(['table', 'form', 'layer'], function () {
return '<span class="' + cls + '">' + raw + '</span>';
}
function assetsForRow(d) {
var type = String(d.chain_type || '').toUpperCase();
var addr = String(d.address || '');
if (type.indexOf('TRON') >= 0 || type === 'TRX' || /^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(addr)) {
return ['USDT', 'TRX'];
}
if (type.indexOf('ETH') >= 0 || type.indexOf('EVM') >= 0 || /^0x[0-9a-fA-F]{40}$/.test(addr)) {
return ['ETH', 'USDT'];
}
if (type.indexOf('BTC') >= 0 || type.indexOf('BITCOIN') >= 0) {
return ['BTC'];
}
return [];
}
function balanceHint(d, asset) {
var key = String(asset || '').toLowerCase();
var val = d[key];
if (val === undefined || val === null || val === '') return '—';
return String(val);
}
function openSweep(d) {
var assets = assetsForRow(d);
if (!assets.length) {
return layer.msg('该地址链类型不支持归集');
}
var options = assets.map(function (a, i) {
return '<option value="' + a + '"' + (i === 0 ? ' selected' : '') + '>' + a + '</option>';
}).join('');
var defaultAsset = assets[0];
layer.open({
type: 1,
title: '归集 — #' + d.id,
area: ['460px', '360px'],
content:
'<form class="layui-form" style="padding:16px 20px 0;" id="LAY-addr-sweep-form" lay-filter="LAY-addr-sweep-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%;padding:0!important;">' + (d.address || '') + '</div></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">链</label>' +
'<div class="layui-input-block"><div class="layui-form-mid" style="padding:0!important;">' + chainTag(d.chain_type) + '</div></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">币种</label>' +
'<div class="layui-input-block"><select name="asset" lay-filter="LAY-addr-sweep-asset">' + options + '</select></div></div>' +
'<div class="layui-form-item"><label class="layui-form-label">金额</label>' +
'<div class="layui-input-block">' +
'<input type="text" name="amount" class="layui-input" placeholder="全部(留空即转出全部余额)" autocomplete="off">' +
'<div class="layui-form-mid layui-word-aux" id="LAY-addr-sweep-balance" style="padding:4px 0 0!important;">当前余额:' + balanceHint(d, defaultAsset) + ' ' + defaultAsset + '</div>' +
'</div></div>' +
'</form>',
success: function () {
form.render('select');
form.on('select(LAY-addr-sweep-asset)', function (data) {
var asset = data.value;
$('#LAY-addr-sweep-balance').text('当前余额:' + balanceHint(d, asset) + ' ' + asset);
});
},
btn: ['确认归集', '取消'],
yes: function (index) {
var asset = $('#LAY-addr-sweep-form select[name=asset]').val();
var amount = $.trim($('#LAY-addr-sweep-form input[name=amount]').val() || '');
var label = amount ? (amount + ' ' + asset) : ('全部 ' + asset);
layer.confirm('确认归集 ' + label + ' ?', { icon: 3, title: '确认' }, function (confirmIndex) {
layer.close(confirmIndex);
var loading = layer.load(2);
$.ajax({
url: updateBase + '/' + d.id + '/sweep',
method: 'POST',
data: { asset: asset, amount: amount, _token: token },
success: function (res) {
layer.close(loading);
if (res.code !== 0) return layer.msg(res.msg || '归集失败');
layer.close(index);
var txid = (res.data && res.data.txid) ? res.data.txid : '';
layer.msg(txid ? ('归集成功:' + txid) : '归集成功', { time: 4000 });
table.reload('LAY-addr-list');
},
error: function (xhr) {
layer.close(loading);
layer.msg((xhr.responseJSON && (xhr.responseJSON.msg || xhr.responseJSON.message)) || '归集失败');
}
});
});
}
});
}
table.render({
elem: '#LAY-addr-list',
id: 'LAY-addr-list',
@@ -132,7 +220,7 @@ layui.use(['table', 'form', 'layer'], function () {
? '<span class="addr-monitor-on">开</span>'
: '<span class="addr-monitor-off">关</span>';
}},
{ title: '操作', width: 160, align: 'center', fixed: 'right', toolbar: '#LAY-addr-ops' }
{ title: '操作', width: 220, align: 'center', fixed: 'right', toolbar: '#LAY-addr-ops' }
]],
page: true, limit: 20, limits: [10, 20, 30, 50],
request: { pageName: 'page', limitName: 'limit' },
@@ -160,6 +248,10 @@ layui.use(['table', 'form', 'layer'], function () {
openDeviceTab(d.detail_url, '设备 ' + (d.device_key || ('#' + d.id)));
return;
}
if (obj.event === 'sweep') {
openSweep(d);
return;
}
if (obj.event !== 'edit') return;
layer.open({