feat: edit ban entries with modal form

This commit is contained in:
2026-07-18 01:53:24 +08:00
parent 12721d09ee
commit 19615cfa56

View File

@@ -30,7 +30,7 @@ const BansPage = {
<td>${b.duration||'永久'}</td> <td>${b.duration||'永久'}</td>
<td>${b.status==='active'?'<span class="badge bg-rejected">生效中</span>':'<span class="badge bg-closed">已解除</span>'}</td> <td>${b.status==='active'?'<span class="badge bg-rejected">生效中</span>':'<span class="badge bg-closed">已解除</span>'}</td>
<td class="ts">${U.date(b.created_at)}</td> <td class="ts">${U.date(b.created_at)}</td>
${Auth.isOwner()?`<td><button class="btn btn-o btn-sm" onclick="BansPage.lift(${b.id})"><i class="fas fa-check"></i> 解除</button></td>`:''} ${Auth.isOwner()?`<td><button class="btn btn-o btn-sm" onclick="BansPage.edit(${b.id},'${U.escJs(b.player_name)}','${U.escJs(b.player_uid||'')}','${b.source||''}','${b.type}','${U.escJs(b.reason||'')}','${b.duration||''}','${b.status}')"><i class="fas fa-edit"></i></button> <button class="btn btn-d btn-sm" onclick="BansPage.lift(${b.id})"><i class="fas fa-check"></i> 解除</button></td>`:''}
</tr>`).join('')}</tbody></table></div>`; </tr>`).join('')}</tbody></table></div>`;
} catch(e) { ct.innerHTML = `<div class="alert alert-e">${e.message}</div>`; } } catch(e) { ct.innerHTML = `<div class="alert alert-e">${e.message}</div>`; }
}, },
@@ -74,6 +74,25 @@ const BansPage = {
async lift(id) { async lift(id) {
if (!await U.confirm('确认解除该封禁?')) return; if (!await U.confirm('确认解除该封禁?')) return;
try { await API.put('/bans/'+id, { status: 'lifted' }); this.load(); } catch(ex){alert(ex.message);} try { await API.put('/bans/'+id, { status: 'lifted' }); this.load(); } catch(ex){alert(ex.message);}
},
edit(id, name, uid, source, type, reason, duration, status) {
U.modal('编辑封禁', `
<form id="be-form">
<div class="grid-2"><div class="form-group"><label>玩家名</label><input id="be-name" value="${name}"></div><div class="form-group"><label>UID</label><input id="be-uid" value="${uid}"></div></div>
<div class="grid-2"><div class="form-group"><label>来源</label><select id="be-source"><option value="">未知</option><option value="netease" ${source==='netease'?'selected':''}>网易端</option><option value="skin" ${source==='skin'?'selected':''}>皮肤站</option></select></div><div class="form-group"><label>状态</label><select id="be-status"><option value="active" ${status==='active'?'selected':''}>生效中</option><option value="lifted" ${status==='lifted'?'selected':''}>已解除</option><option value="expired" ${status==='expired'?'selected':''}>已过期</option></select></div></div>
<div class="grid-2"><div class="form-group"><label>时长</label><input id="be-dur" value="${duration}"></div></div>
<div class="form-group"><label>原因</label><textarea id="be-reason" rows="2">${reason}</textarea></div>
<div class="modal-f"><button type="button" class="btn btn-o" data-action="App:closeModal">取消</button><button type="submit" class="btn btn-p">保存</button></div>
</form>
`);
document.getElementById('be-form').onsubmit = async e => {
e.preventDefault();
try {
await API.put('/bans/'+id, { status: document.getElementById('be-status').value, reason: document.getElementById('be-reason').value, duration: document.getElementById('be-dur').value });
App.closeModal(); this.load();
} catch(ex) { alert(ex.message); }
};
} }
}; };