fix(user): replicate level center page

This commit is contained in:
kate522 committed 2026-09-13 21:28:10 +08:00
1 parent 6f1860f5d0
commit 632a7d15ba
4 files changed
+642 -188

No files matched your search

+38 -11
View File
@@ -107,12 +107,11 @@
var allowedParams = [];
if (name === 'creator') allowedParams = ['income_page'];
if (name === 'revenue') allowedParams = ['reward_tab', 'commission_page', 'user_page'];
if (name === 'posts') allowedParams = ['post_status', 'posts_page'];
if (name === 'follow') allowedParams = ['follow_list', 'follow_page'];
if (name === 'credits') allowedParams = ['asset', 'page'];
allowedParams.forEach(function(key) {
if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key));
});
if (name === 'posts') allowedParams = ['post_status', 'posts_page'];
if (name === 'follow') allowedParams = ['follow_list', 'follow_page'];
allowedParams.forEach(function(key) {
if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key));
});
}
target._aksrtPanelRequest = fetch(url, {
credentials: 'same-origin',
@@ -135,9 +134,31 @@
return target._aksrtPanelRequest;
}
/* Revenue tabs are injected with the panel HTML. Handle them in the
* capture phase so they never fall through to a browser navigation. */
function loadRevenueTab(queryParams) {
/* Level tabs are nested inside the active panel and must not enter the
* main user-center navigation handler. */
function activateLevelTab(link) {
var page = link.closest('.aksrt-level-page');
var paneId = link.getAttribute('data-aksrt-level-tab') || '';
if (!page || !paneId) return false;
var pane = Array.prototype.find.call(page.querySelectorAll('.aksrt-level-experience .tab-pane'), function(item) {
return item.id === paneId;
});
if (!pane) return false;
page.querySelectorAll('[data-aksrt-level-tab]').forEach(function(tab) {
var active = tab.getAttribute('data-aksrt-level-tab') === paneId;
tab.classList.toggle('is-active', active);
if (tab.getAttribute('role') === 'tab') tab.setAttribute('aria-selected', active ? 'true' : 'false');
});
page.querySelectorAll('.aksrt-level-experience .tab-pane').forEach(function(item) {
var active = item === pane;
item.classList.toggle('active', active);
item.classList.toggle('in', active);
item.hidden = !active;
});
return true;
}
function loadRevenueTab(queryParams) {
var target = document.getElementById('panel-revenue');
var restUrl = (window.aksrtData && (window.aksrtData.restUrl || window.aksrtData.apiUrl)) || cfg.restUrl || '';
if (!target || !restUrl) return Promise.reject(new Error('revenue-panel-unavailable'));
@@ -201,8 +222,14 @@
// 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 withdrawOpen = e.target && e.target.closest ? e.target.closest('[data-aksrt-withdraw-open]') : null;
document.addEventListener('click', function(e) {
var levelTab = e.target && e.target.closest ? e.target.closest('[data-aksrt-level-tab]') : null;
if (levelTab && activateLevelTab(levelTab)) {
e.preventDefault();
e.stopPropagation();
return;
}
var withdrawOpen = e.target && e.target.closest ? e.target.closest('[data-aksrt-withdraw-open]') : null;
if (withdrawOpen) {
var withdrawModal = document.querySelector('[data-aksrt-withdraw-modal]');
if (withdrawModal) {