管理后台用户组页新增全局传送点上限(maxhome)配置入口(#726)

- loadUserGroups拉取get_config展示全局home上限卡片
- 新增showHomeConfig/saveHomeConfig弹窗,POST update_config(key=max_home_per_player)
- 复用现有area_config通路,与Java端max_home_per_player配置项对应
This commit is contained in:
ypsdf1
2026-07-06 18:10:36 +08:00
parent 8de2cffe82
commit 0e1f26508b
+41 -1
View File
@@ -2635,8 +2635,13 @@ async function apiCall(action, params = {}, method = 'GET') {
async function loadUserGroups(el) {
el.innerHTML = '<div style="text-align:center;padding:40px;color:var(--dim)">加载中...</div>';
try {
const res = await apiCall('list_user_groups');
const [res, configRes] = await Promise.all([
apiCall('list_user_groups'),
fetch('api/land_api.php?action=get_config&secret=sdf1_web_comm_2026_ypshidifu').then(r => r.json()).catch(() => ({config:{}}))
]);
const groups = res.groups || [];
const homeCfg = (configRes.config && configRes.config.max_home_per_player) || '5';
window._homeCfgData = homeCfg;
let html = '<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:8px">';
html += '<h2 style="margin:0;color:var(--fg)">👥 用户组管理</h2>';
@@ -2651,6 +2656,12 @@ async function loadUserGroups(el) {
<div style="font-size:24px;font-weight:bold;color:var(--accent)">${groups.length}</div>
<div style="font-size:12px;color:var(--dim);margin-top:4px">用户组总数</div>
</div>`;
// 全局传送点(home)上限卡片
html += `<div style="background:var(--card);border:1px solid var(--border);border-radius:8px;padding:12px;text-align:center">
<div style="font-size:24px;font-weight:bold;color:#7e57c2">${escAdmHtml(String(homeCfg))}</div>
<div style="font-size:12px;color:var(--dim);margin-top:4px">全局传送点上限(home)</div>
<button onclick="showHomeConfig()" style="margin-top:8px;padding:3px 10px;background:var(--accent);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:11px">⚙️ 修改</button>
</div>`;
html += '</div>';
// 用户组列表
@@ -2701,6 +2712,35 @@ async function loadUserGroups(el) {
}
}
function showHomeConfig() {
const homeCfg = window._homeCfgData || '5';
const html = `<div style="padding:16px">
<h3 style="margin:0 0 12px;color:var(--fg)">⚙️ 全局传送点上限配置</h3>
<div style="margin-bottom:12px">
<label style="display:block;font-size:12px;color:var(--dim);margin-bottom:4px">每名玩家最大传送点(home)数量</label>
<input id="cfgMaxHome" type="number" value="${escAdmHtml(String(homeCfg))}" min="1" style="width:100%;padding:8px;background:var(--bg);border:1px solid var(--border);border-radius:4px;color:var(--fg)">
</div>
<p style="font-size:11px;color:var(--dim);margin:0 0 12px;line-height:1.6">说明:该值为全局默认上限。若用户组配置了独立的Home上限(&gt;0),则用户组上限覆盖此值;若用户组Home上限=0,则跟随此全局值;若用户组Home上限=-1,则该组玩家无限制。</p>
<button onclick="saveHomeConfig()" style="width:100%;padding:8px;background:var(--accent);color:#fff;border:none;border-radius:4px;cursor:pointer">保存</button>
</div>`;
showModal('全局传送点上限', '', null, html);
}
async function saveHomeConfig() {
const maxHome = document.getElementById('cfgMaxHome')?.value || '5';
try {
await fetch('api/land_api.php?action=update_config', {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'key=max_home_per_player&value=' + encodeURIComponent(maxHome) + '&secret=sdf1_web_comm_2026_ypshidifu'
});
document.querySelector('.modal-close')?.click();
loadUserGroups(document.getElementById('C'));
} catch(e) {
glassAlert('保存失败: ' + e.message);
}
}
function showAddUserGroup() {
const html = `<div style="padding:16px">
<h3 style="margin:0 0 12px;color:var(--fg)">+ 新建用户组</h3>