From 9eb8aba371f0970a393b550ae6ac5b195bac7b29 Mon Sep 17 00:00:00 2001 From: canglan Date: Fri, 17 Jul 2026 13:21:30 +0800 Subject: [PATCH] fix: home page tabs in top bar, single nav layer --- public/js/app.js | 4 +- public/js/pages/home.js | 105 +++++++++++++++------------------------- 2 files changed, 41 insertions(+), 68 deletions(-) diff --git a/public/js/app.js b/public/js/app.js index f8d316d..da8bffa 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -67,7 +67,7 @@ const App = { } if (page === 'install') { this.showPublic('install'); return; } - if (page === 'home') { this.showPublic('home', param); document.getElementById('top-auth').classList.add('hidden'); return; } + if (page === 'home') { this.showPublic('home', param); return; } if (page === 'login' || page === 'register' || page === 'forgot' || page === 'reset') { this.showPublic(page); return; } if (!Auth.logged()) { location.hash = '#/login'; return; } @@ -107,7 +107,7 @@ const App = { document.getElementById('main-layout').classList.add('hidden'); const pub = document.getElementById('public-page'); pub.classList.remove('hidden'); - this.updateTopAuth(); + if (page !== 'home') this.updateTopAuth(); const comp = page === 'login' ? LoginPage : page === 'register' ? RegisterPage : page === 'install' ? InstallPage : HomePage; comp.render(param).then(html => { pub.innerHTML = html; if (comp.mount) comp.mount(param); }).catch(() => { pub.innerHTML = '
'; diff --git a/public/js/pages/home.js b/public/js/pages/home.js index ddb62fc..df1563c 100644 --- a/public/js/pages/home.js +++ b/public/js/pages/home.js @@ -1,81 +1,54 @@ const HomePage = { - async render(tab) { - const t = tab || 'report'; - return `
-
- - - - -
-
-
`; + async render() { + return `
`; }, mount(tab) { const t = tab || 'report'; - const tabBtns = document.querySelectorAll('.tab-nav button'); - const tabContent = document.getElementById('home-tab'); + const topAuth = document.getElementById('top-auth'); + topAuth.innerHTML = ` 登录 + 注册 + | + + + + `; + topAuth.style.display = 'flex'; - function switchContent(type) { - if (type === 'tracking') renderTracking(tabContent); - else TicketCreate.render(tabContent, { type, prefill: {}, backLink: null }); - } + topAuth.querySelectorAll('[data-tab]').forEach(b => { b.onclick = () => App.navigate('home', b.dataset.tab); }); - function renderTracking(ct) { - const token = document.cookie.split('; ').find(r => r.startsWith('tracking_token='))?.split('=')[1]; - ct.innerHTML = ` -
-
- -
- -
-
`; - } + const ct = document.getElementById('home-tab'); + if (t === 'tracking') this.renderTracking(ct); + else TicketCreate.render(ct, { type: t, prefill: {}, backLink: null }); + }, - tabBtns.forEach(b => b.onclick = () => App.navigate('home', b.dataset.tab)); - switchContent(t); + renderTracking(ct) { + const token = document.cookie.split('; ').find(r => r.startsWith('tracking_token='))?.split('=')[1]; + ct.innerHTML = `
+
+ +
+
`; + document.getElementById('track-search-btn').onclick = () => this.doSearchTracking(); + }, - this.searchTracking = async () => { - const token = document.getElementById('track-token').value.trim(); - if (!token) return alert('请输入追踪标识'); - const ct = document.getElementById('track-result'); - ct.innerHTML = '
'; - try { - const tickets = await API.get(`/tickets/tracking?token=${token}`); - ct.innerHTML = tickets.length ? ` -
- - ${tickets.map(tick => ` - - - - `).join('')}
#类型标题状态时间操作
${tick.id}${U.badge(tick.type,'type')}${U.esc(tick.title)}${U.badge(tick.status,'status')}${U.date(tick.created_at)}
` : '

未找到工单

'; - } catch (ex) { ct.innerHTML = `
${ex.message}
`; } - }; + async doSearchTracking() { + const token = document.getElementById('track-token').value.trim(); + if (!token) return alert('请输入追踪标识'); + const r = document.getElementById('track-result'); + r.innerHTML = '
'; + try { + const tickets = await API.get(`/tickets/tracking?token=${token}`); + r.innerHTML = tickets.length ? `
${tickets.map(tk=>``).join('')}
#类型标题状态时间
${tk.id}${U.badge(tk.type,'type')}${U.esc(tk.title)}${U.badge(tk.status,'status')}${U.date(tk.created_at)}
` : '

未找到工单

'; + } catch (e) { r.innerHTML = `
${e.message}
`; } }, showTrackDetail(id, token) { - U.modal(`工单 #${id}`, `
`, '700px'); - const ct = document.getElementById('track-detail-content'); - U.loading(ct); + U.modal(`工单 #${id}`, `
`, '700px'); API.get(`/tickets/tracking?token=${token}`).then(tickets => { - const t = tickets.find(x => x.id === id); - if (!t) { ct.innerHTML = '

未找到

'; return; } - ct.innerHTML = ` -

基本信息

-
标题${U.esc(t.title)}
-
类型${U.badge(t.type,'type')}
-
状态${U.badge(t.status,'status')}
-
提交者${U.esc(t.reporter_game_name)} (UID: ${U.esc(t.reporter_game_uid)})
- ${t.type==='report'?` -
被举报人${U.esc(t.target_game_name||'?')} (UID: ${U.esc(t.target_game_uid||'?')})
-
原因${U.esc(t.reason)}
`:''} - ${t.description?`
详情${U.esc(t.description)}
`:''} -
时间${U.date(t.created_at)}
-
-

如需回复,请注册账号后关联此工单。

`; - }).catch(e => { ct.innerHTML = `
${e.message}
`; }); + const t = tickets.find(x=>x.id===id); + if(!t) return; + document.getElementById('tkd').innerHTML = `

基本信息

标题${U.esc(t.title)}
类型${U.badge(t.type,'type')}
状态${U.badge(t.status,'status')}
提交者${U.esc(t.reporter_game_name)} (UID: ${U.esc(t.reporter_game_uid)})

如需回复请注册账号

`; + }).catch(()=>{}); } };