fix: data-action delegation + convert onclick to event listeners, sidebar+logout+modals

This commit is contained in:
2026-07-15 02:44:18 +08:00
parent 9e15a319f5
commit f0e891b17c
20 changed files with 147 additions and 133 deletions

View File

@@ -13,7 +13,7 @@ const UsersPage = {
const users = await API.get('/users');
ct.innerHTML = `
<div class="card table-wrap"><table><thead><tr>
<th>#</th><th>用户名</th><th>邮箱</th><th>游戏名</th><th>游戏UID</th><th>角色</th><th>状态</th><th>时间</th><th>操作</th>
<th>#</th><th>用户å<EFBFBD>?/th><th>邮箱</th><th>游æˆ<EFBFBD>å<EFBFBD>?/th><th>游æˆ<EFBFBD>UID</th><th>角色</th><th>状æ€?/th><th>æ—¶é—´</th><th>æ“<EFBFBD>作</th>
</tr></thead><tbody>${users.map(u => `
<tr>
<td>${u.id}</td><td>${U.esc(u.username)}</td><td>${U.esc(u.email)}</td>
@@ -30,10 +30,10 @@ const UsersPage = {
createUser() {
U.modal('添加用户', `
<form id="cu-form">
<div class="grid-2"><div class="form-group"><label>用户名 *</label><input id="cu-u" required></div><div class="form-group"><label>密码 *</label><input type="password" id="cu-p" required minlength="6"></div></div>
<div class="grid-2"><div class="form-group"><label>邮箱 *</label><input type="email" id="cu-e" required></div><div class="form-group"><label>角色 *</label><select id="cu-r"><option value="owner">服主</option><option value="admin">管理员</option><option value="player">玩家</option></select></div></div>
<div class="grid-2"><div class="form-group"><label>游戏名 *</label><input id="cu-gn" required></div><div class="form-group"><label>游戏UID *</label><input id="cu-gu" required></div></div>
<div class="modal-f"><button type="button" class="btn btn-o" onclick="App.closeModal()">取消</button><button type="submit" class="btn btn-p">创建</button></div>
<div class="grid-2"><div class="form-group"><label>用户å<EFBFBD>?*</label><input id="cu-u" required></div><div class="form-group"><label>密ç <EFBFBD> *</label><input type="password" id="cu-p" required minlength="6"></div></div>
<div class="grid-2"><div class="form-group"><label>邮箱 *</label><input type="email" id="cu-e" required></div><div class="form-group"><label>角色 *</label><select id="cu-r"><option value="owner">æœ<EFBFBD>主</option><option value="admin">管ç<EFBFBD>†å?/option><option value="player">玩家</option></select></div></div>
<div class="grid-2"><div class="form-group"><label>游æˆ<EFBFBD>å<EFBFBD>?*</label><input id="cu-gn" required></div><div class="form-group"><label>游æˆ<EFBFBD>UID *</label><input id="cu-gu" required></div></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('cu-form').onsubmit = async e => {
@@ -56,11 +56,11 @@ const UsersPage = {
editUser(id, username, email, gameName, gameUid, role, active) {
U.modal('编辑用户', `
<form id="eu-form">
<div class="form-group"><label>用户名</label><input value="${username}" disabled style="background:var(--g100)"></div>
<div class="form-group"><label>用户å<EFBFBD>?/label><input value="${username}" disabled style="background:var(--g100)"></div>
<div class="grid-2"><div class="form-group"><label>邮箱</label><input type="email" id="eu-e" value="${email}"></div><div class="form-group"><label>角色</label><select id="eu-r">${['owner','admin','player'].map(r=>`<option value="${r}" ${r===role?'selected':''}>${U.ROLE[r]}</option>`).join('')}</select></div></div>
<div class="grid-2"><div class="form-group"><label>游戏名</label><input id="eu-gn" value="${gameName}"></div><div class="form-group"><label>游戏UID</label><input id="eu-gu" value="${gameUid}"></div></div>
<div class="grid-2"><div class="form-group"><label>新密码(留空不变)</label><input type="password" id="eu-p"></div><div class="form-group"><label>状态</label><select id="eu-a"><option value="1" ${active?'selected':''}>启用</option><option value="0" ${!active?'selected':''}>禁用</option></select></div></div>
<div class="modal-f"><button type="button" class="btn btn-o" onclick="App.closeModal()">取消</button><button type="submit" class="btn btn-p">保存</button></div>
<div class="grid-2"><div class="form-group"><label>游æˆ<EFBFBD>å<EFBFBD>?/label><input id="eu-gn" value="${gameName}"></div><div class="form-group"><label>游æˆ<EFBFBD>UID</label><input id="eu-gu" value="${gameUid}"></div></div>
<div class="grid-2"><div class="form-group"><label>新密ç ?留空ä¸<C3A4>å<EFBFBD>˜)</label><input type="password" id="eu-p"></div><div class="form-group"><label>状æ€?/label><select id="eu-a"><option value="1" ${active?'selected':''}>å<EFBFBD>¯ç”¨</option><option value="0" ${!active?'selected':''}>ç¦<EFBFBD>用</option></select></div></div>
<div class="modal-f"><button type="button" class="btn btn-o" data-action="App:closeModal">å<>消</button><button type="submit" class="btn btn-p">ä¿<EFBFBD>å­˜</button></div>
</form>
`);
document.getElementById('eu-form').onsubmit = async e => {