From 70df32bb072dbe8f0230fe63345020475b650c8b Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sun, 26 Jul 2026 20:44:11 +0800 Subject: [PATCH] feat: market login/logout/upload flow with UI state management --- static/js/pages/dashboard.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/static/js/pages/dashboard.js b/static/js/pages/dashboard.js index 10341a0..fd75ac3 100644 --- a/static/js/pages/dashboard.js +++ b/static/js/pages/dashboard.js @@ -162,6 +162,9 @@ const PageDashboard = { }); document.getElementById('btn-market-upload')?.addEventListener('click', () => this._showMarketUpload()); + document.getElementById('btn-market-login')?.addEventListener('click', () => this._showMarketLogin()); + + this._updateMarketUI(); }, async _installFromMarket(id, filename) { @@ -199,15 +202,29 @@ const PageDashboard = { const overlay = document.createElement('div'); overlay.className = 'modal-overlay'; overlay.innerHTML = ``; document.body.appendChild(overlay); + if (this._marketToken) { + overlay.querySelector('#ml-login').style.display = 'none'; + overlay.querySelector('#ml-register').style.display = 'none'; + overlay.querySelector('#ml-logout').style.display = ''; + overlay.querySelector('#ml-logout').addEventListener('click', () => { + this._marketToken = null; + localStorage.removeItem('turbosu-market-token'); + overlay.remove(); + this._updateMarketUI(); + Toast.show('已退出', 'info'); + }); + } + overlay.addEventListener('click', (e) => { if (e.target === overlay) overlay.remove(); }); overlay.querySelector('#ml-login').addEventListener('click', async () => { const email = document.getElementById('ml-email').value; @@ -219,6 +236,7 @@ const PageDashboard = { localStorage.setItem('turbosu-market-token', data.token); Toast.show('登录成功', 'success'); overlay.remove(); + this._updateMarketUI(); } else { Toast.show(data.message || '登录失败', 'error'); } }); overlay.querySelector('#ml-register').addEventListener('click', async () => { @@ -230,6 +248,21 @@ const PageDashboard = { }); }, + _updateMarketUI() { + const loginBtn = document.getElementById('btn-market-login'); + const uploadBtn = document.getElementById('btn-market-upload'); + if (!loginBtn || !uploadBtn) return; + if (this._marketToken) { + loginBtn.textContent = '已登录'; + loginBtn.className = 'btn btn-sm btn-secondary'; + uploadBtn.style.display = ''; + } else { + loginBtn.textContent = '登录'; + loginBtn.className = 'btn btn-sm btn-primary'; + uploadBtn.style.display = 'none'; + } + }, + _openDashboard(themeId) { const gameParam = this._selectedGameId ? `?game=${this._selectedGameId}` : ''; const url = `${location.origin}/dashboard/${themeId}${gameParam}`; @@ -279,6 +312,7 @@ const PageDashboard = {
+