fix(users): keep center navigation local and restore public home

This commit is contained in:
kate522 committed 2026-08-12 20:02:37 +08:00
1 parent 114321c4b1
commit c3bfd12c69
6 files changed
+45 -25

No files matched your search

+32 -17
View File
@@ -28,7 +28,7 @@
if (!tabContainer) return;
var tabs = tabContainer.querySelectorAll('[data-tab]');
var sidebarBtns = document.querySelectorAll('.uc-sidebar__btn[data-tab], .uc-service-grid__item[data-tab]');
var sidebarBtns = document.querySelectorAll('.uc-sidebar [data-tab]');
var panels = {};
var defaultTab = cfg.defaultTab || 'profile';
var drawerTrigger = document.getElementById('uc-drawer-trigger');
@@ -82,9 +82,12 @@
}
target.classList.add('is-loading');
var url = restUrl.replace(/\/$/, '') + '/user-center/panel/' + encodeURIComponent(name);
if (name === 'creator') {
if (name === 'creator' || name === 'revenue') {
var params = queryParams || new URLSearchParams(window.location.search);
['income_page'].forEach(function(key) {
var allowedParams = name === 'creator'
? ['income_page']
: ['reward_tab', 'commission_page', 'invite_page'];
allowedParams.forEach(function(key) {
if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key));
});
}
@@ -131,24 +134,34 @@
return tabAliases[name] || name;
}
function updateUrl(name) {
function updateUrl(name, sourceUrl) {
if (!window.history.replaceState) return;
var pathTab = name === 'credits' ? 'balance' : name;
var u = new URL('/user/' + pathTab + '/', window.location.origin);
window.history.replaceState({}, '', u);
if (sourceUrl) {
var source = new URL(sourceUrl, window.location.href);
source.searchParams.forEach(function(value, key) { u.searchParams.set(key, value); });
}
window.history.pushState({}, '', u);
}
tabs.forEach(function(tab) {
tab.addEventListener('click', function(e) {
e.preventDefault();
activate(this.getAttribute('data-tab'), true);
});
});
sidebarBtns.forEach(function(btn) {
btn.addEventListener('click', function(e) {
e.preventDefault();
activate(this.getAttribute('data-tab'), true);
});
// Delegate every internal user-center link. This also covers markup injected
// after a REST panel refresh, so panel navigation never falls back to a full load.
document.addEventListener('click', function(e) {
var link = e.target && e.target.closest ? e.target.closest('a[href]') : null;
if (!link || e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || link.target === '_blank') return;
var url;
try { url = new URL(link.href, window.location.href); } catch (_) { return; }
if (url.origin !== window.location.origin) return;
var parts = url.pathname.replace(/\/+$/, '').split('/');
var pathTab = parts.length > 2 && parts[parts.length - 2] === 'user' ? parts[parts.length - 1] : '';
var name = link.getAttribute('data-tab') || pathTab;
if (name === 'balance') name = 'credits';
name = tabAliases[name] || name;
if (!name || !panels[name]) return;
e.preventDefault();
var hasQuery = url.search !== '';
activate(name, false, hasQuery, url.searchParams).then(function() { updateUrl(name, url.href); });
});
var creatorPanel = panels.creator ? panels.creator.panel : null;
if (creatorPanel) {
@@ -166,7 +179,9 @@
});
});
}
window.addEventListener('popstate', function() { activate(tabFromUrl(), false, true); });
window.addEventListener('popstate', function() {
activate(tabFromUrl(), false, window.location.search !== '', new URLSearchParams(window.location.search));
});
if (drawerTrigger) drawerTrigger.addEventListener('click', openDrawer);
if (drawerOverlay) drawerOverlay.addEventListener('click', closeDrawer);
activate(tabFromUrl(), false);