From 6dbb556d605fffb1cad3d6d300526b73c0acf99a Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Aug 2026 19:54:12 +0800 Subject: [PATCH] feat: merge promotion and earnings center --- assets/js/credits.js | 2 ++ assets/js/revenue-invite.js | 5 +-- assets/js/routes/user-center.js | 7 ++-- inc/helpers/aksrt-user-center.php | 16 ++++------ .../profile-promotion.php | 23 +++---------- .../user-center-renderers/profile-revenue.php | 32 +++++++++++++++++-- .../user-center-renderers/sidebar-creator.php | 12 ++----- .../user-center-renderers/sidebar-nav.php | 20 ------------ inc/modules/user-parts/routing.php | 5 ++- inc/modules/user-parts/urls.php | 2 +- src/User/Center.php | 28 ++++------------ 11 files changed, 65 insertions(+), 87 deletions(-) diff --git a/assets/js/credits.js b/assets/js/credits.js index 1b848a40..0ef6c28b 100644 --- a/assets/js/credits.js +++ b/assets/js/credits.js @@ -416,6 +416,8 @@ }); } + window.AKSRTAffiliatePromotionInit = initAffiliatePromotion; + // ===== VIP 积分兑换 ===== diff --git a/assets/js/revenue-invite.js b/assets/js/revenue-invite.js index daf851ce..4a48f1e0 100644 --- a/assets/js/revenue-invite.js +++ b/assets/js/revenue-invite.js @@ -144,7 +144,7 @@ function reloadRevenuePanel() { var current = document.querySelector('[data-aksrt-revenue-page]'); if (!current) return Promise.resolve(); - var panelUrl = rest + '/user-center/panel/revenue'; + var panelUrl = rest + '/user-center/panel/promotion'; var query = new URL(window.location.href).searchParams; query.delete('tab'); panelUrl += '?' + query.toString(); @@ -171,7 +171,7 @@ link.addEventListener('click', function (event) { event.preventDefault(); var targetUrl = new URL(link.href, window.location.href); - var panelUrl = rest + '/user-center/panel/revenue?' + targetUrl.searchParams.toString(); + var panelUrl = rest + '/user-center/panel/promotion?' + targetUrl.searchParams.toString(); fetch(panelUrl, { credentials: 'same-origin', headers: { 'X-WP-Nonce': data.restNonce || data.nonce || '' } @@ -187,6 +187,7 @@ current.replaceWith(next); window.history.pushState({}, '', targetUrl); window.AKSRTRevenueCenterInit(next); + if (typeof window.AKSRTAffiliatePromotionInit === 'function') window.AKSRTAffiliatePromotionInit(); if (typeof window.AKSRTWithdrawInit === 'function') window.AKSRTWithdrawInit(); }); }).catch(function () { diff --git a/assets/js/routes/user-center.js b/assets/js/routes/user-center.js index 5b97001e..d192e4a6 100644 --- a/assets/js/routes/user-center.js +++ b/assets/js/routes/user-center.js @@ -82,10 +82,10 @@ } target.classList.add('is-loading'); var url = restUrl.replace(/\/$/, '') + '/user-center/panel/' + encodeURIComponent(name); - if (name === 'creator' || name === 'revenue' || name === 'posts' || name === 'follow') { + if (name === 'creator' || name === 'promotion' || name === 'posts' || name === 'follow') { var params = queryParams || new URLSearchParams(window.location.search); var allowedParams = name === 'creator' ? ['income_page'] : - (name === 'revenue' ? ['reward_tab', 'commission_page', 'invite_page'] : + (name === 'promotion' ? ['reward_tab', 'commission_page', 'invite_page'] : (name === 'posts' ? ['post_status', 'posts_page'] : ['follow_list', 'follow_page'])); allowedParams.forEach(function(key) { if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key)); @@ -120,7 +120,8 @@ return loadPanel(name, forceLoad, queryParams).then(function() { switchTo(name); if (updateHistory) updateUrl(name); - if (typeof window.AKSRTRevenueCenterInit === 'function') window.AKSRTRevenueCenterInit(panels[name].panel); + if (name === 'promotion' && typeof window.AKSRTRevenueCenterInit === 'function') window.AKSRTRevenueCenterInit(panels[name].panel); + if (name === 'promotion' && typeof window.AKSRTAffiliatePromotionInit === 'function') window.AKSRTAffiliatePromotionInit(); }).catch(function() { if (typeof showToast === 'function') showToast(i18n.networkError || '加载失败,请重试'); }); diff --git a/inc/helpers/aksrt-user-center.php b/inc/helpers/aksrt-user-center.php index d4379a6f..643a2c21 100644 --- a/inc/helpers/aksrt-user-center.php +++ b/inc/helpers/aksrt-user-center.php @@ -135,6 +135,8 @@ if (!function_exists('aksrt_get_user_center_tab_url')) { $tab = sanitize_key($tab); if ('invite' === $tab) { $tab = 'promotion'; + } elseif ('revenue' === $tab) { + $tab = 'promotion'; } return aksrt_get_user_center_url($tab); } @@ -181,7 +183,6 @@ if (!function_exists('aksrt_capture_user_center_view')) { 'orders' => 'orders', 'auth' => 'auth', 'promotion' => 'promotion', - 'revenue' => 'revenue', 'settings' => 'settings', 'header' => 'header', 'sidebar' => 'sidebar', @@ -206,7 +207,7 @@ if (!function_exists('aksrt_capture_user_center_panel')) { * Capture a built-in or registered user-center panel body. */ function aksrt_capture_user_center_panel(string $tab_key, array $tab, array $context): string { - $built_in_tabs = ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'promotion', 'revenue', 'settings']; + $built_in_tabs = ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'promotion', 'settings']; if (in_array($tab_key, $built_in_tabs, true)) { return aksrt_capture_user_center_view($tab_key, $context); } @@ -317,6 +318,8 @@ if (!function_exists('aksrt_user_center_resolve_tabs')) { $active = 'credits'; } elseif ('invite' === $active) { $active = 'promotion'; + } elseif ('revenue' === $active) { + $active = 'promotion'; } elseif ('vip' === $active) { // Prefer dedicated vip tab when registered; else credits (VIP shop). $active = in_array('vip', $keys, true) ? 'vip' : 'credits'; @@ -356,6 +359,7 @@ if (!function_exists('aksrt_user_center_runtime_config')) { 'tabAliases' => [ 'signin' => 'credits', 'invite' => 'promotion', + 'revenue' => 'promotion', 'assets' => 'credits', // vip → vip when panel exists; SPA may still map missing keys via server resolve. 'vip' => 'vip', @@ -507,11 +511,7 @@ if (!function_exists('aksrt_get_user_center_render_context')) { $wallet_balance = (float) ($dashboard['wallet_balance'] ?? 0.0); $runtime_config = aksrt_user_center_runtime_config($user_id, $tabs['default'], $active_tab, $tabs['urls']); $runtime_config['avatarUpload'] = aksrt_user_center_avatar_upload_config($allow_avatar_upload); - $revenue_settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_payment_revenue_settings() : []; - $show_revenue_section = !empty($revenue_settings['enabled']) || !empty($affiliate_settings['enabled']); - $revenue_url = isset($tabs['tabs']['revenue']) - ? aksrt_get_user_center_tab_url('revenue') - : ''; + $render_context = [ 'user_center_settings' => $user_center_settings, @@ -535,7 +535,6 @@ if (!function_exists('aksrt_get_user_center_render_context')) { 'show_avatar_edit' => $allow_avatar_upload, 'notification_unread_count' => function_exists('aksrt_get_user_unread_notification_count') ? aksrt_get_user_unread_notification_count($user_id) : 0, 'messages_url' => $messages_enabled && function_exists('aksrt_get_messages_page_url') ? aksrt_get_messages_page_url() : '', - 'revenue_url' => $revenue_url, 'per_page' => 10, 'posts_page' => max(1, isset($_GET['posts_page']) ? (int) $_GET['posts_page'] : 1), 'post_status_filter' => $post_status_filter, @@ -550,7 +549,6 @@ if (!function_exists('aksrt_get_user_center_render_context')) { 'show_vip' => !empty($vip_settings['enabled']), 'show_credit_tabs' => $show_credit_tabs, 'affiliate_enabled' => $show_credit_tabs && !empty($affiliate_settings['enabled']), - 'show_revenue_section' => $show_revenue_section, 'currency_name' => $currency_name, 'credit_balance' => (float) ($dashboard['credit_balance'] ?? 0.0), 'credits_enabled' => $show_credit_tabs, diff --git a/inc/helpers/user-center-renderers/profile-promotion.php b/inc/helpers/user-center-renderers/profile-promotion.php index 14342f66..170074f1 100644 --- a/inc/helpers/user-center-renderers/profile-promotion.php +++ b/inc/helpers/user-center-renderers/profile-promotion.php @@ -1,27 +1,14 @@ ' . esc_html__('请先登录', 'aksrt') . ''; - return; -} - -$settings = class_exists('\\AKSRT\\Settings\\Settings') ? \AKSRT\Settings\Settings::get_affiliate_settings() : []; -?> -
-

- -
—
—
—
-

-

-
+require __DIR__ . '/profile-revenue.php'; diff --git a/inc/helpers/user-center-renderers/profile-revenue.php b/inc/helpers/user-center-renderers/profile-revenue.php index 96057d5d..3a614945 100644 --- a/inc/helpers/user-center-renderers/profile-revenue.php +++ b/inc/helpers/user-center-renderers/profile-revenue.php @@ -50,8 +50,8 @@ if (!in_array($active_reward_tab, ['detail', 'orders'], true)) { $active_reward_tab = 'detail'; } $base_url = function_exists('aksrt_get_user_center_tab_url') - ? aksrt_get_user_center_tab_url('revenue') - : home_url('/profile/?tab=revenue'); + ? aksrt_get_user_center_tab_url('promotion') + : home_url('/user/promotion/'); $reward_url = static function (string $tab, array $extra = []) use ($base_url): string { return add_query_arg(array_merge(['reward_tab' => $tab], $extra), $base_url); }; @@ -85,6 +85,34 @@ $status_labels = [ ]; ?>
+
+
+

+

+
+ +
+
—
+
—
+
—
+
+
+ + + +

+
+

+
diff --git a/inc/helpers/user-center-renderers/sidebar-creator.php b/inc/helpers/user-center-renderers/sidebar-creator.php index bc3df004..0b9fe18e 100644 --- a/inc/helpers/user-center-renderers/sidebar-creator.php +++ b/inc/helpers/user-center-renderers/sidebar-creator.php @@ -1,6 +1,6 @@ @@ -22,11 +21,4 @@ if ($creation_url === '' && $revenue_url === '') { - - - - - - -
diff --git a/inc/helpers/user-center-renderers/sidebar-nav.php b/inc/helpers/user-center-renderers/sidebar-nav.php index c40a5959..d36433a6 100644 --- a/inc/helpers/user-center-renderers/sidebar-nav.php +++ b/inc/helpers/user-center-renderers/sidebar-nav.php @@ -10,31 +10,11 @@ defined('ABSPATH') || exit; $level_url = isset($dashboard_tabs['level']) ? aksrt_get_user_center_tab_url('level') : ''; -$promotion_url = isset($dashboard_tabs['promotion']) - ? aksrt_get_user_center_tab_url('promotion') - : ''; -$revenue_url = isset($dashboard_tabs['revenue']) - ? aksrt_get_user_center_tab_url('revenue') - : ''; $auth_url = isset($dashboard_tabs['auth']) ? aksrt_get_user_center_tab_url('auth') : ''; $orders_available = isset($dashboard_tabs['orders']); $orders_url = $orders_available ? (string) ($orders_url ?? '') : ''; $services = array_values(array_filter([ - [ - 'label' => __('推广中心', 'aksrt'), - 'icon' => 'share-alt', - 'tone' => 'promotion', - 'url' => $promotion_url, - 'tab' => 'promotion', - ], - [ - 'label' => __('收益中心', 'aksrt'), - 'icon' => 'chart-line', - 'tone' => 'revenue', - 'url' => $revenue_url, - 'tab' => 'revenue', - ], [ 'label' => __('我的等级', 'aksrt'), 'icon' => 'chart-line', diff --git a/inc/modules/user-parts/routing.php b/inc/modules/user-parts/routing.php index 670f3460..fd43fd22 100644 --- a/inc/modules/user-parts/routing.php +++ b/inc/modules/user-parts/routing.php @@ -53,9 +53,12 @@ add_action('template_redirect', function () { return; } $tab = $tab === 'balance' ? 'credits' : sanitize_key($tab); + if ($tab === 'revenue') { + $tab = 'promotion'; + } $allowed = class_exists('\\AKSRT\\User\\Center') ? array_keys(\AKSRT\User\Center::get_instance()->get_dashboard_tabs()) - : ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'revenue', 'settings']; + : ['profile', 'level', 'creator', 'posts', 'follow', 'comments', 'favorites', 'credits', 'vip', 'orders', 'auth', 'promotion', 'settings']; if (!in_array($tab, $allowed, true)) { global $wp_query; if ($wp_query instanceof WP_Query) { $wp_query->set_404(); } diff --git a/inc/modules/user-parts/urls.php b/inc/modules/user-parts/urls.php index f6b42bc8..35caf841 100644 --- a/inc/modules/user-parts/urls.php +++ b/inc/modules/user-parts/urls.php @@ -20,7 +20,7 @@ if (!function_exists('aksrt_get_user_center_url')) : */ function aksrt_get_user_center_url(string $tab = ''): string { $tab = sanitize_key($tab ?: 'vip'); - $aliases = ['assets' => 'credits', 'signin' => 'credits', 'invite' => 'promotion', 'promotion' => 'promotion']; + $aliases = ['assets' => 'credits', 'signin' => 'credits', 'invite' => 'promotion', 'promotion' => 'promotion', 'revenue' => 'promotion']; $tab = $aliases[$tab] ?? $tab; $path_tab = $tab === 'credits' ? 'balance' : $tab; return get_option('permalink_structure') diff --git a/src/User/Center.php b/src/User/Center.php index 443fc90e..39ca8c3e 100644 --- a/src/User/Center.php +++ b/src/User/Center.php @@ -55,6 +55,9 @@ class Center { */ public function rest_panel(\WP_REST_Request $request) { $tab = sanitize_key((string) $request->get_param('tab')); + if ($tab === 'revenue') { + $tab = 'promotion'; + } $tabs = $this->get_dashboard_tabs(); if (!isset($tabs[$tab])) { return new \WP_Error('aksrt_user_center_panel', __('用户中心面板不存在', 'aksrt'), ['status' => 404]); @@ -76,7 +79,7 @@ class Center { $context['creator_income_request'] = $income_request; } $revenue_request = []; - if ($tab === 'revenue') { + if ($tab === 'promotion') { $reward_tab = sanitize_key((string) $request->get_param('reward_tab')); if (!in_array($reward_tab, ['detail', 'orders'], true)) { $reward_tab = 'detail'; @@ -182,18 +185,12 @@ class Center { 'priority' => 50, 'type' => 'panel', ], - 'revenue' => [ - 'label' => __('收益中心', 'aksrt'), + 'promotion' => [ + 'label' => __('推广收益', 'aksrt'), 'icon' => 'chart-line', 'priority' => 55, 'type' => 'panel', ], - 'promotion' => [ - 'label' => __('推广中心', 'aksrt'), - 'icon' => 'share-alt', - 'priority' => 54, - 'type' => 'panel', - ], 'notif' => [ 'label' => __('消息通知', 'aksrt'), 'icon' => 'bell', @@ -226,8 +223,6 @@ class Center { $balance_on = class_exists('\AKSRT\Credits\Balance') && \AKSRT\Credits\Balance::enabled(); $promotion_tab_on = class_exists('\AKSRT\Settings\Settings') && !empty(\AKSRT\Settings\Settings::get_affiliate_settings()['enabled']); - $revenue_tab_on = $promotion_tab_on || (class_exists('\AKSRT\Settings\Settings') - && !empty(\AKSRT\Settings\Settings::get_payment_revenue_settings()['enabled'])); $creator_tab_on = class_exists('\AKSRT\Settings\Settings') && !empty(\AKSRT\Settings\Settings::get_payment_revenue_settings()['enabled']); $vip_on = class_exists('\AKSRT\Settings\Settings') @@ -295,7 +290,7 @@ class Center { $order[] = 'credits'; } - if ($revenue_tab_on && !in_array('revenue', $order, true)) { + if ($promotion_tab_on && !in_array('promotion', $order, true)) { $insert_at = count($order); foreach (['credits', 'favorites'] as $anchor) { $idx = array_search($anchor, $order, true); @@ -304,12 +299,6 @@ class Center { break; } } - array_splice($order, $insert_at, 0, ['revenue']); - } - if ($promotion_tab_on && !in_array('promotion', $order, true)) { - $insert_at = count($order); - $idx = array_search('revenue', $order, true); - if ($idx !== false) { $insert_at = (int) $idx; } array_splice($order, $insert_at, 0, ['promotion']); } $auth_on = class_exists('\AKSRT\User\AuthApply') @@ -331,9 +320,6 @@ class Center { if ($key === 'credits' && !$credits_on && !$balance_on) { continue; } - if ($key === 'revenue' && !$revenue_tab_on) { - continue; - } if ($key === 'promotion' && !$promotion_tab_on) { continue; }