fix: improve promotion tabs and referral layout

This commit is contained in:
2026-08-16 21:47:41 +08:00
parent 59cef1892a
commit d4876bb125
+46 -1
View File
@@ -113,6 +113,39 @@
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) {
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'));
var params = queryParams || new URLSearchParams();
var url = restUrl.replace(/\/$/, '') + '/user-center/panel/revenue';
params.forEach(function(value, key) {
if (key === 'reward_tab' || key === 'commission_page' || key === 'user_page') {
url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(value);
}
});
target.classList.add('is-loading');
return fetch(url, {
credentials: 'same-origin',
headers: { 'X-WP-Nonce': (window.aksrtData && (window.aksrtData.restNonce || window.aksrtData.nonce)) || '' }
}).then(function(response) {
return response.json().then(function(payload) {
if (!response.ok || !payload || !payload.success || !payload.data || typeof payload.data.html !== 'string') {
throw new Error('revenue-tab-load-failed');
}
target.innerHTML = payload.data.html;
target.dataset.panelLoaded = 'true';
if (window.AksrtFrontend && typeof window.AksrtFrontend.rehydrate === 'function') {
window.AksrtFrontend.rehydrate(target, 'ajax');
}
});
}).finally(function() {
target.classList.remove('is-loading');
});
}
function activate(name, updateHistory, forceLoad, queryParams) {
if (!panels[name]) name = defaultTab;
// VIP membership may change outside this page, so never reuse stale HTML.
@@ -155,6 +188,18 @@
var url;
try { url = new URL(link.href, window.location.href); } catch (_) { return; }
if (url.origin !== window.location.origin) return;
if (link.closest('.uc-reward-tabs, .uc-reward-pagination')) {
e.preventDefault();
e.stopPropagation();
loadRevenueTab(url.searchParams).then(function() {
if (window.history.replaceState) window.history.replaceState({}, '', '/user/revenue/');
if (typeof window.AKSRTAffiliateRevenueInit === 'function') window.AKSRTAffiliateRevenueInit();
if (typeof window.AKSRTWithdrawInit === 'function') window.AKSRTWithdrawInit();
}).catch(function() {
if (typeof showToast === 'function') showToast(i18n.networkError || '加载失败,请重试');
});
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;
@@ -164,7 +209,7 @@
e.preventDefault();
var hasQuery = url.search !== '';
activate(name, false, hasQuery, url.searchParams).then(function() { updateUrl(name, url.href); });
});
}, true);
var creatorPanel = panels.creator ? panels.creator.panel : null;
if (creatorPanel) {
creatorPanel.addEventListener('click', function(e) {