From 5b9f54f5acdc08164a3e98a344b4ae63a12c9bed Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 16 Aug 2026 20:52:15 +0800 Subject: [PATCH] fix: improve promotion tabs and referral layout --- assets/css/routes/user-center/promotion.css | 10 ++++++++-- assets/js/credits.js | 8 +++++++- assets/js/routes/user-center.js | 2 +- inc/helpers/user-center-renderers/profile-revenue.php | 2 +- src/User/Center.php | 6 +++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/assets/css/routes/user-center/promotion.css b/assets/css/routes/user-center/promotion.css index d80b804d..d35723a4 100644 --- a/assets/css/routes/user-center/promotion.css +++ b/assets/css/routes/user-center/promotion.css @@ -184,11 +184,16 @@ .uc-content .uc-reward-tabs a.is-active { color: var(--color-primary); font-weight: 700; } .uc-content .uc-reward-tabs a.is-active::after { position: absolute; right: 0; bottom: -1px; left: 0; height: 2px; border-radius: 99px; background: var(--color-primary); content: ""; } .uc-content .uc-promotion-summary-list { display: grid; gap: 0; max-width: 920px; } +.uc-content .uc-reward-pane--detail { grid-template-columns: minmax(0, 1fr); width: 100%; } +.uc-content .uc-reward-pane--detail .uc-promotion-summary-list { width: 100%; max-width: none; } .uc-content .uc-promotion-summary-row { display: grid; grid-template-columns: 112px minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 54px; padding: 8px 0; border-bottom: 1px solid var(--color-line-soft, rgba(15, 23, 42, .07)); } .uc-content .uc-promotion-summary-row > span { color: var(--color-ink-3); font-size: 14px; } .uc-content .uc-promotion-summary-row > strong { color: var(--color-ink); font-size: 16px; } .uc-content .uc-promotion-summary-row > em { color: var(--color-ink-4); font-style: normal; } -.uc-content .uc-promotion-summary-row--link input { width: 100%; min-width: 0; height: 38px; padding: 0 10px; border: 1px solid var(--color-line-soft, rgba(15, 23, 42, .12)); border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); } +.uc-content .uc-promotion-count { display: flex; align-items: baseline; gap: 2px; } +.uc-content .uc-promotion-count strong { color: var(--color-ink); font-size: 16px; } +.uc-content .uc-promotion-count em { color: var(--color-ink-4); font-style: normal; } +.uc-content .uc-promotion-summary-row--link input { width: auto; max-width: 100%; min-width: 28ch; height: 38px; padding: 0 10px; border: 1px solid var(--color-line-soft, rgba(15, 23, 42, .12)); border-radius: 7px; color: var(--color-primary); background: var(--surface-2, #f8fafc); } .uc-content .uc-promotion-summary-row--link button { min-width: 64px; height: 38px; padding: 0 12px; border-radius: 7px; } .uc-content .uc-promotion-summary-row--link small { grid-column: 2 / -1; min-height: 16px; color: var(--color-success, #16a34a); font-size: 12px; } .uc-content .uc-promotion-summary-row--link small.is-error { color: var(--color-error, #dc2626); } @@ -356,7 +361,8 @@ .uc-content .uc-reward-area__heading { display: grid; gap: 4px; } .uc-content .uc-reward-tabs { gap: 16px; overflow-x: auto; } .uc-content .uc-promotion-summary-row { grid-template-columns: 92px minmax(0, 1fr) auto; gap: 8px; } - .uc-content .uc-promotion-summary-row--link { grid-template-columns: 1fr auto; } + .uc-content .uc-promotion-summary-row--link { grid-template-columns: minmax(0, 1fr) auto; } + .uc-content .uc-promotion-summary-row--link input { width: 100% !important; min-width: 0; } .uc-content .uc-promotion-summary-row--link > span { grid-column: 1 / -1; } .uc-content .uc-promotion-summary-row--link small { grid-column: 1 / -1; } .uc-content .uc-promotion-summary-row--explain { grid-template-columns: 1fr; } diff --git a/assets/js/credits.js b/assets/js/credits.js index ecb6a019..9131b06a 100644 --- a/assets/js/credits.js +++ b/assets/js/credits.js @@ -395,7 +395,13 @@ api('/promotion/me').then(function (r) { if (!r.ok) { setFeedback((r.json && r.json.message) || '推广数据加载失败。', true); return; } var j = r.json || {}, stats = j.stats || {}; - if (input) input.value = j.url || ''; + if (input) { + input.value = j.url || ''; + /* Keep the complete ref URL readable on desktop; mobile CSS still caps it. */ + var linkLength = String(j.url || '').length; + input.setAttribute('size', String(Math.max(28, Math.min(96, linkLength || 28)))); + input.style.width = Math.max(28, Math.min(96, linkLength || 28)) + 'ch'; + } if (copy) copy.disabled = !j.url; var ratio = root.querySelector('[data-affiliate-ratio]'); if (ratio) ratio.textContent = String(j.ratio || 0) + '%'; var promoters = root.querySelector('[data-affiliate-promoters]'); if (promoters) promoters.textContent = String(stats.promoters || 0); diff --git a/assets/js/routes/user-center.js b/assets/js/routes/user-center.js index d192e4a6..cabf5d67 100644 --- a/assets/js/routes/user-center.js +++ b/assets/js/routes/user-center.js @@ -85,7 +85,7 @@ if (name === 'creator' || name === 'promotion' || name === 'posts' || name === 'follow') { var params = queryParams || new URLSearchParams(window.location.search); var allowedParams = name === 'creator' ? ['income_page'] : - (name === 'promotion' ? ['reward_tab', 'commission_page', 'invite_page'] : + (name === 'promotion' ? ['reward_tab', 'commission_page', 'user_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)); diff --git a/inc/helpers/user-center-renderers/profile-revenue.php b/inc/helpers/user-center-renderers/profile-revenue.php index 223c436c..95db5815 100644 --- a/inc/helpers/user-center-renderers/profile-revenue.php +++ b/inc/helpers/user-center-renderers/profile-revenue.php @@ -134,7 +134,7 @@ $status_labels = [
%
-
—
+
—
累计元已提现元
diff --git a/src/User/Center.php b/src/User/Center.php index 39ca8c3e..169a544c 100644 --- a/src/User/Center.php +++ b/src/User/Center.php @@ -81,13 +81,13 @@ class Center { $revenue_request = []; if ($tab === 'promotion') { $reward_tab = sanitize_key((string) $request->get_param('reward_tab')); - if (!in_array($reward_tab, ['detail', 'orders'], true)) { + if (!in_array($reward_tab, ['detail', 'orders', 'users'], true)) { $reward_tab = 'detail'; } $revenue_request = [ 'reward_tab' => $reward_tab, 'commission_page' => max(1, min(100, (int) $request->get_param('commission_page'))), - 'invite_page' => max(1, min(100, (int) $request->get_param('invite_page'))), + 'user_page' => max(1, min(100, (int) $request->get_param('user_page'))), ]; $context['revenue_request'] = $revenue_request; } @@ -107,7 +107,7 @@ class Center { 'reward_tab' => $revenue_request['reward_tab'] ?? '', 'creator_income' => $income_request, 'commission_page' => $revenue_request['commission_page'] ?? 1, - 'invite_page' => $revenue_request['invite_page'] ?? 1, + 'user_page' => $revenue_request['user_page'] ?? 1, ], ]); }