fix: improve promotion tabs and referral layout
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user