fix: simplify player ticket list - hide type/priority/tab filters
This commit is contained in:
@@ -18,16 +18,14 @@ const TicketsPage = {
|
|||||||
const ct = document.getElementById('page-content');
|
const ct = document.getElementById('page-content');
|
||||||
const isStaff = Auth.isAdmin();
|
const isStaff = Auth.isAdmin();
|
||||||
ct.innerHTML = `
|
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="all" class="active">全部</button>
|
||||||
<button data-tab="pending">待认领</button>
|
<button data-tab="pending">待处理</button>
|
||||||
<button data-tab="claimed">已接单</button>
|
<button data-tab="claimed">已接单</button>
|
||||||
${Auth.user().role === 'player' ? '<button data-tab="mine">我的工单</button>' : ''}
|
</div>` : ''}
|
||||||
</div>
|
|
||||||
<div class="filter-bar">
|
<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-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()">
|
<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.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>
|
<button class="btn btn-o btn-sm" onclick="TicketsPage.resetFilters()"><i class="fas fa-undo"></i></button>
|
||||||
@@ -35,6 +33,7 @@ const TicketsPage = {
|
|||||||
<div id="ticket-list"></div>
|
<div id="ticket-list"></div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
if (document.getElementById('ticket-tabs')) {
|
||||||
document.querySelectorAll('#ticket-tabs button').forEach(btn => {
|
document.querySelectorAll('#ticket-tabs button').forEach(btn => {
|
||||||
btn.onclick = () => {
|
btn.onclick = () => {
|
||||||
document.querySelectorAll('#ticket-tabs button').forEach(b => b.classList.remove('active'));
|
document.querySelectorAll('#ticket-tabs button').forEach(b => b.classList.remove('active'));
|
||||||
@@ -43,6 +42,7 @@ const TicketsPage = {
|
|||||||
this.loadTab(this.tab);
|
this.loadTab(this.tab);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async loadTab(tab) {
|
async loadTab(tab) {
|
||||||
@@ -52,20 +52,11 @@ const TicketsPage = {
|
|||||||
const params = new URLSearchParams();
|
const params = new URLSearchParams();
|
||||||
if (this.filters.type) params.set('type', this.filters.type);
|
if (this.filters.type) params.set('type', this.filters.type);
|
||||||
if (this.filters.status) params.set('status', this.filters.status);
|
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');
|
if (tab === 'pending') params.set('claimed', '0');
|
||||||
else if (tab === 'claimed') params.set('claimed', '1');
|
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 qs = params.toString();
|
||||||
const tickets = await API.get('/tickets' + (qs ? '?' + qs : ''));
|
const tickets = await API.get('/tickets' + (qs ? '?' + qs : ''));
|
||||||
|
|
||||||
if (tab === 'mine') {
|
|
||||||
this.renderList(list, tickets);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.renderList(list, tickets);
|
this.renderList(list, tickets);
|
||||||
} catch (e) { list.innerHTML = `<div class="alert alert-e">${e.message}</div>`; }
|
} catch (e) { list.innerHTML = `<div class="alert alert-e">${e.message}</div>`; }
|
||||||
},
|
},
|
||||||
@@ -92,9 +83,8 @@ const TicketsPage = {
|
|||||||
|
|
||||||
applyFilters() {
|
applyFilters() {
|
||||||
this.filters = {
|
this.filters = {
|
||||||
type: document.getElementById('ft-type').value,
|
type: document.getElementById('ft-type')?.value,
|
||||||
status: document.getElementById('ft-status').value,
|
status: document.getElementById('ft-status').value,
|
||||||
priority: document.getElementById('ft-priority').value,
|
|
||||||
search: document.getElementById('ft-search').value,
|
search: document.getElementById('ft-search').value,
|
||||||
};
|
};
|
||||||
this.loadTab(this.tab);
|
this.loadTab(this.tab);
|
||||||
|
|||||||
Reference in New Issue
Block a user