fix: simplify player ticket list - hide type/priority/tab filters

This commit is contained in:
2026-07-16 23:47:24 +08:00
parent 09f0d8f2aa
commit e9ef425545

View File

@@ -18,16 +18,14 @@ const TicketsPage = {
const ct = document.getElementById('page-content');
const isStaff = Auth.isAdmin();
ct.innerHTML = `
<div class="tab-nav" id="ticket-tabs">
${isStaff ? `<div class="tab-nav" id="ticket-tabs">
<button data-tab="all" class="active">全部</button>
<button data-tab="pending">待认领</button>
<button data-tab="pending">待处理</button>
<button data-tab="claimed">已接单</button>
${Auth.user().role === 'player' ? '<button data-tab="mine">我的工单</button>' : ''}
</div>
</div>` : ''}
<div class="filter-bar">
<select id="ft-type" onchange="TicketsPage.applyFilters()"><option value="">全部类型</option>${Object.entries(U.TYPE).map(([k,v])=>`<option value="${k}">${v}</option>`).join('')}</select>
${isStaff ? `<select id="ft-type" onchange="TicketsPage.applyFilters()"><option value="">全部类型</option>${Object.entries(U.TYPE).map(([k,v])=>`<option value="${k}">${v}</option>`).join('')}</select>` : ''}
<select id="ft-status" onchange="TicketsPage.applyFilters()"><option value="">全部状态</option>${Object.entries(U.STATUS).map(([k,v])=>`<option value="${k}">${v}</option>`).join('')}</select>
<select id="ft-priority" onchange="TicketsPage.applyFilters()"><option value="">全部优先级</option>${Object.entries(U.PRIORITY).map(([k,v])=>`<option value="${k}">${v}</option>`).join('')}</select>
<input id="ft-search" placeholder="搜索..." onkeyup="if(event.key==='Enter')TicketsPage.applyFilters()">
<button class="btn btn-o btn-sm" onclick="TicketsPage.applyFilters()"><i class="fas fa-search"></i></button>
<button class="btn btn-o btn-sm" onclick="TicketsPage.resetFilters()"><i class="fas fa-undo"></i></button>
@@ -35,14 +33,16 @@ const TicketsPage = {
<div id="ticket-list"></div>
`;
document.querySelectorAll('#ticket-tabs button').forEach(btn => {
btn.onclick = () => {
document.querySelectorAll('#ticket-tabs button').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
this.tab = btn.dataset.tab;
this.loadTab(this.tab);
};
});
if (document.getElementById('ticket-tabs')) {
document.querySelectorAll('#ticket-tabs button').forEach(btn => {
btn.onclick = () => {
document.querySelectorAll('#ticket-tabs button').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
this.tab = btn.dataset.tab;
this.loadTab(this.tab);
};
});
}
},
async loadTab(tab) {
@@ -52,20 +52,11 @@ const TicketsPage = {
const params = new URLSearchParams();
if (this.filters.type) params.set('type', this.filters.type);
if (this.filters.status) params.set('status', this.filters.status);
if (this.filters.priority) params.set('priority', this.filters.priority);
if (this.filters.search) params.set('search', this.filters.search);
if (tab === 'pending') params.set('claimed', '0');
else if (tab === 'claimed') params.set('claimed', '1');
else if (tab === 'mine') params.set('status', '');
if (this.filters.search) params.set('search', this.filters.search);
const qs = params.toString();
const tickets = await API.get('/tickets' + (qs ? '?' + qs : ''));
if (tab === 'mine') {
this.renderList(list, tickets);
return;
}
this.renderList(list, tickets);
} catch (e) { list.innerHTML = `<div class="alert alert-e">${e.message}</div>`; }
},
@@ -92,9 +83,8 @@ const TicketsPage = {
applyFilters() {
this.filters = {
type: document.getElementById('ft-type').value,
type: document.getElementById('ft-type')?.value,
status: document.getElementById('ft-status').value,
priority: document.getElementById('ft-priority').value,
search: document.getElementById('ft-search').value,
};
this.loadTab(this.tab);