From 1277c1fdf393e2ea59a59bb766c35d8548a4521d Mon Sep 17 00:00:00 2001 From: ypsdf1 Date: Fri, 3 Jul 2026 19:37:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20php=E7=AE=A1=E7=90=86=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E7=BB=84=E6=88=90=E5=91=98?= =?UTF-8?q?=E6=97=B6=E5=A2=9E=E5=8A=A0=E5=88=B0=E6=9C=9F=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E6=A1=86=20-=20=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E5=8F=AF=E6=89=8B=E5=8A=A8=E8=AE=BE=E7=BD=AEexpiry=5Ftime=20-?= =?UTF-8?q?=20=E6=88=90=E5=91=98=E8=A1=A8=E6=A0=BC=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=88=B0=E6=9C=9F=E6=97=B6=E9=97=B4=E5=88=97=20-=20=E5=88=B0?= =?UTF-8?q?=E6=9C=9F=E4=B8=BA0=E8=A1=A8=E7=A4=BA=E6=8C=89=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BB=84duration=5Fminutes=E8=87=AA=E5=8A=A8=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin.php | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/admin.php b/admin.php index 5b1da40..ba3f7f6 100644 --- a/admin.php +++ b/admin.php @@ -2886,19 +2886,29 @@ async function showGroupMembers(groupName) { html += ``; // 添加成员 - html += `
- + html += `
+ + -
`; +
+
到期留0则按用户组设置的duration_minutes自动计算
`; // 成员列表 if (members.length === 0) { html += '
暂无成员
'; } else { - html += '
'; + html += '
玩家名添加者操作
'; for (const m of members) { + const expiry = m.expiry_time ? parseInt(m.expiry_time) : 0; + let expiryStr = '-'; + if (expiry > 0) { + expiryStr = new Date(expiry * 1000).toLocaleString('zh-CN'); + } else { + expiryStr = '按组期限'; + } html += ` + `; @@ -2915,12 +2925,15 @@ async function showGroupMembers(groupName) { async function doAddGroupMember(groupName) { const inputEl = document.getElementById('ugNewMember'); + const expiryEl = document.getElementById('ugNewMemberExpiry'); const player = inputEl ? inputEl.value.trim() : ''; if (!player) { glassAlert('请输入玩家名'); return; } if (!/^[a-zA-Z0-9_]{3,16}$/.test(player)) { glassAlert('玩家名格式不正确,仅支持英文字母、数字和下划线(3-16位)'); return; } + const expiryTime = expiryEl ? (parseInt(expiryEl.value) || 0) : 0; + try { - const res = await apiCall('add_group_member', {group: groupName, player}, 'POST'); + const res = await apiCall('add_group_member', {group: groupName, player, expiry_time: expiryTime}, 'POST'); if (res.success) { // pending=true 是异步验证响应,需要特殊处理 if (res.pending) {
玩家名到期时间添加者操作
${escAdmHtml(m.player_name)}${expiryStr} ${escAdmHtml(m.added_by || '-')}