diff --git a/admin/agents.php b/admin/agents.php index 465adbb..bc60396 100644 --- a/admin/agents.php +++ b/admin/agents.php @@ -135,24 +135,37 @@ ob_start();
- -
+
+
- - + +
-
- - -
-
- - -
-
- - +
+
+ '用户管理', + 'audit_finance' => '财务管理', + 'manage_kyc' => '实名认证', + 'view_orders' => '订单查看', + 'manage_spot' => '币币交易', + 'manage_contract' => '合约交易', + 'manage_mining' => '矿机管理', + 'manage_exchange' => '兑换管理', + 'manage_binary' => '秒合约', + 'manage_ai' => 'AI控制', + 'manage_chat' => '客服系统', + 'manage_settings' => '系统设置', + 'view_stats' => '数据统计' + ]; + foreach ($available_perms as $val => $label): + ?> +
+ +
+
@@ -184,24 +197,20 @@ ob_start();
- -
+
+
- - + +
-
- - -
-
- - -
-
- - +
+
+ $label): ?> +
+ +
+
@@ -220,20 +229,34 @@ function editAgent(agent) { document.getElementById('edit_username').value = agent.username; // Clear checkboxes - document.querySelectorAll('.p-checkbox').forEach(cb => cb.checked = false); + document.querySelectorAll('.edit-p-checkbox').forEach(cb => cb.checked = false); + document.getElementById('selectAllEdit').checked = false; // Set checkboxes if (agent.permissions) { const perms = JSON.parse(agent.permissions); perms.forEach(p => { - const cb = document.querySelector(`.p-checkbox[value="${p}"]`); + const cb = document.querySelector(`.edit-p-checkbox[value="${p}"]`); if (cb) cb.checked = true; }); + + // Check if all are checked + const allChecked = Array.from(document.querySelectorAll('.edit-p-checkbox')).every(cb => cb.checked); + document.getElementById('selectAllEdit').checked = allChecked; } var modal = new bootstrap.Modal(document.getElementById('editAgentModal')); modal.show(); } + +// Select All logic +document.getElementById('selectAllAdd').addEventListener('change', function() { + document.querySelectorAll('.add-p-checkbox').forEach(cb => cb.checked = this.checked); +}); + +document.getElementById('selectAllEdit').addEventListener('change', function() { + document.querySelectorAll('.edit-p-checkbox').forEach(cb => cb.checked = this.checked); +}); $_POST['email_verification_enabled'] ?? '0', - 'site_logo' => $_POST['site_logo'] ?? '', 'usdt_trc20_address' => $_POST['usdt_trc20_address'] ?? '', 'usdt_erc20_address' => $_POST['usdt_erc20_address'] ?? '', 'usdt_bep20_address' => $_POST['usdt_bep20_address'] ?? '', @@ -42,12 +41,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $stmt->execute([$logo_path, $logo_path]); } } + + // Handle favicon upload if provided + if (isset($_FILES['favicon_file']) && $_FILES['favicon_file']['error'] === 0) { + $ext = pathinfo($_FILES['favicon_file']['name'], PATHINFO_EXTENSION); + $filename = 'favicon_' . time() . '.' . $ext; + $target = __DIR__ . '/../assets/images/' . $filename; + if (!is_dir(__DIR__ . '/../assets/images/')) { + mkdir(__DIR__ . '/../assets/images/', 0777, true); + } + if (move_uploaded_file($_FILES['favicon_file']['tmp_name'], $target)) { + $favicon_path = '/assets/images/' . $filename; + $stmt = db()->prepare("INSERT INTO system_settings (setting_key, setting_value) VALUES ('site_favicon', ?) ON DUPLICATE KEY UPDATE setting_value = ?"); + $stmt->execute([$favicon_path, $favicon_path]); + } + } $success = true; } $email_verify = getLocalSetting('email_verification_enabled', '0'); $site_logo = getLocalSetting('site_logo', ''); +$site_favicon = getLocalSetting('site_favicon', ''); $trc20_addr = getLocalSetting('usdt_trc20_address', ''); $erc20_addr = getLocalSetting('usdt_erc20_address', ''); $bep20_addr = getLocalSetting('usdt_bep20_address', ''); @@ -82,7 +97,7 @@ ob_start();
- +
@@ -91,7 +106,20 @@ ob_start();
-
上传后将同步更新网站 LOGO 和 Favicon 浏览器图标。建议使用透明 PNG。
+
上传后将同步更新网站所有页面的 LOGO。建议使用透明 PNG。
+
+ +
+ +
+ +
+ +
+ + +
+
上传后将同步更新浏览器标签页图标。建议使用 32x32 或 64x64 的正方形图片。

diff --git a/admin/customer_service.php b/admin/customer_service.php index 3d29561..bc6c1d7 100644 --- a/admin/customer_service.php +++ b/admin/customer_service.php @@ -1,6 +1,7 @@ - - - - - Byro Admin | 客服系统 - - - - - - + -