fix: admin.php modal重复叠加导致ugNewMember获取失败 + 异步验证pending处理

- admin.php showModal: 新增[data-modal-overlay]清理逻辑防止多次打开modal导致元素复用
- doAddGroupMember: 固定player名正则3-16位, 改善错误提示文案, 处理pending响应
- admin.php modal: 移除旧的querySelectorByStyle选择器改为data属性
This commit is contained in:
ypsdf1
2026-06-28 17:12:08 +08:00
parent c0afb47535
commit 02c2e91531
+14 -4
View File
@@ -1745,7 +1745,10 @@ async function doLogout() {
// ===== 模态框输入(替代prompt)=====
function showModal(title, message, defaultValue, customHtml) {
return new Promise((resolve) => {
// ★ 移除所有旧的modal overlay,防止重复id导致输入框读取失败
document.querySelectorAll('[data-modal-overlay]').forEach(el => el.remove());
const overlay = document.createElement('div');
overlay.dataset.modalOverlay = '1';
overlay.style.cssText = 'position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);display:flex;justify-content:center;align-items:center;z-index:1000';
if (customHtml) {
overlay.innerHTML = `
@@ -2776,16 +2779,23 @@ async function showGroupMembers(groupName) {
}
async function doAddGroupMember(groupName) {
const player = document.getElementById('ugNewMember')?.value?.trim();
const inputEl = document.getElementById('ugNewMember');
const player = inputEl ? inputEl.value.trim() : '';
if (!player) { glassAlert('请输入玩家名'); return; }
if (!/^[a-zA-Z0-9_]{2,16}$/.test(player)) { glassAlert('玩家名格式无效'); return; }
if (!/^[a-zA-Z0-9_]{3,16}$/.test(player)) { glassAlert('玩家名格式不正确,仅支持英文字母、数字和下划线(3-16位)'); return; }
try {
const res = await apiCall('add_group_member', {group: groupName, player}, 'POST');
if (res.success) {
showGroupMembers(groupName); // 刷新
// pending=true 是异步验证响应,需要特殊处理
if (res.pending) {
glassAlert(res.message || '验证请求已提交,系统将在1-2分钟内自动完成验证');
showGroupMembers(groupName); // 刷新
} else {
showGroupMembers(groupName); // 刷新
}
} else {
glassAlert('添加失败: ' + (res.error || ''));
glassAlert(res.error || '添加失败');
}
} catch(e) {
glassAlert('添加失败: ' + e.message);