fix: restore from regex corruption, JS-bind modal close, data-action delegation

This commit is contained in:
2026-07-15 03:53:16 +08:00
parent 80f8342c0b
commit 021351d898
20 changed files with 140 additions and 152 deletions

View File

@@ -20,14 +20,14 @@ const TicketsPage = {
ct.innerHTML = `
<div class="tab-nav" id="ticket-tabs">
<button data-tab="all" class="active">全部</button>
<button data-tab="pending">待认�/button>
<button data-tab="claimed">已接å<EFBFBD>?/button>
<button data-tab="pending">待认领</button>
<button data-tab="claimed">已接单</button>
${Auth.user().role === 'player' ? '<button data-tab="mine">我的工单</button>' : ''}
</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>
<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>
<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>
@@ -74,7 +74,7 @@ const TicketsPage = {
ct.innerHTML = tickets.length === 0
? `<div class="empty"><i class="fas fa-inbox"></i><p>暂无工单</p></div>`
: `<div class="card table-wrap"><table><thead><tr>
<th>#</th><th>类型</th><th>标题</th><th>æ<EFBFBD><EFBFBD>交è€?/th><th>对象</th><th>状æ€?/th><th>优先çº?/th><th>è´Ÿè´£äº?/th><th>æ—¶é—´</th><th>æ“<EFBFBD>作</th>
<th>#</th><th>类型</th><th>标题</th><th>提交者</th><th>对象</th><th>状态</th><th>优先级</th><th>负责人</th><th>时间</th><th>操作</th>
</tr></thead><tbody>${tickets.map(t => `
<tr>
<td>${t.id}</td>
@@ -84,7 +84,7 @@ const TicketsPage = {
<td>${t.target_game_name?`${U.esc(t.target_game_name)}${t.target_game_uid?`<br><span class="tm ts">UID:${U.esc(t.target_game_uid)}</span>`:''}`:'-'}</td>
<td>${U.badge(t.status,'status')}</td>
<td>${U.badge(t.priority,'priority')}</td>
<td>${t.assignee_name?`<span class="badge bg-admin">${U.esc(t.assignee_name)}</span>`:`<span class="tm">待认�/span>`}</td>
<td>${t.assignee_name?`<span class="badge bg-admin">${U.esc(t.assignee_name)}</span>`:`<span class="tm">待认领</span>`}</td>
<td class="ts">${U.date(t.updated_at)}</td>
<td><button class="btn btn-o btn-sm" onclick="App.navigate('ticket',${t.id})"><i class="fas fa-eye"></i></button></td>
</tr>`).join('')}</tbody></table></div>`;