const ServersPage = {
async render() { return '
'; },
async mount() {
document.getElementById('page-title').textContent = '服务器管理';
document.getElementById('page-actions').innerHTML = Auth.isOwner()
? ''
: '';
document.getElementById('btn-add-srv').onclick = () => this.showAdd();
await this.load();
},
async load() {
const ct = document.getElementById('page-content');
try {
const groups = await API.get('/polls/groups');
const grouped = {};
for (const g of groups) {
if (!grouped[g.group_name]) grouped[g.group_name] = [];
grouped[g.group_name].push(g);
}
ct.innerHTML = Object.keys(grouped).length === 0
? ''
: Object.entries(grouped).map(([group, servers]) => `
${U.esc(group)} ${servers.length} 个子服
${servers.map(s => `
${U.esc(s.server_name)}
${s.alias ? `${U.esc(s.alias)}` : ''}
${Auth.isOwner() ? `` : ''}
`).join('')}
`).join('');
} catch (e) { ct.innerHTML = `${e.message}
`; }
},
showAdd() {
U.modal('添加服务器', `
`);
document.getElementById('add-srv-form').onsubmit = async e => {
e.preventDefault();
try {
await API.post('/polls/groups', {
group_name: document.getElementById('as-group').value,
server_name: document.getElementById('as-server').value,
alias: document.getElementById('as-alias').value.trim(),
});
App.closeModal(); this.load();
} catch(ex){alert(ex.message);}
};
},
async showEdit(id) {
try {
const groups = await API.get('/polls/groups');
const s = groups.find(x => x.id === id);
if (!s) return alert('未找到');
U.modal('编辑服务器', `
`);
document.getElementById('edit-srv-form').onsubmit = async e => {
e.preventDefault();
try {
await API.put(`/polls/groups/${id}`, {
group_name: document.getElementById('es-group').value,
server_name: document.getElementById('es-server').value,
alias: document.getElementById('es-alias').value.trim(),
});
App.closeModal(); this.load();
} catch(ex){alert(ex.message);}
};
} catch (ex) { alert(ex.message); }
},
async del(id) { if (!await U.confirm('确认删除?')) return; try { await API.req('DELETE', '/polls/groups/'+id); this.load(); } catch(ex){alert(ex.message);} }
};