fix: improve promotion tabs and referral layout

This commit is contained in:
2026-08-16 20:52:15 +08:00
parent ff730ab593
commit 5b9f54f5ac
5 changed files with 20 additions and 8 deletions
+8 -2
View File
@@ -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 { 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-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-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 { 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 > 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 > 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 > 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 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 { 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); } .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-area__heading { display: grid; gap: 4px; }
.uc-content .uc-reward-tabs { gap: 16px; overflow-x: auto; } .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 { 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 > span { grid-column: 1 / -1; }
.uc-content .uc-promotion-summary-row--link small { 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; } .uc-content .uc-promotion-summary-row--explain { grid-template-columns: 1fr; }
+7 -1
View File
@@ -395,7 +395,13 @@
api('/promotion/me').then(function (r) { api('/promotion/me').then(function (r) {
if (!r.ok) { setFeedback((r.json && r.json.message) || '推广数据加载失败。', true); return; } if (!r.ok) { setFeedback((r.json && r.json.message) || '推广数据加载失败。', true); return; }
var j = r.json || {}, stats = j.stats || {}; 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; if (copy) copy.disabled = !j.url;
var ratio = root.querySelector('[data-affiliate-ratio]'); if (ratio) ratio.textContent = String(j.ratio || 0) + '%'; 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); var promoters = root.querySelector('[data-affiliate-promoters]'); if (promoters) promoters.textContent = String(stats.promoters || 0);
+1 -1
View File
@@ -85,7 +85,7 @@
if (name === 'creator' || name === 'promotion' || name === 'posts' || name === 'follow') { if (name === 'creator' || name === 'promotion' || name === 'posts' || name === 'follow') {
var params = queryParams || new URLSearchParams(window.location.search); var params = queryParams || new URLSearchParams(window.location.search);
var allowedParams = name === 'creator' ? ['income_page'] : 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'])); (name === 'posts' ? ['post_status', 'posts_page'] : ['follow_list', 'follow_page']));
allowedParams.forEach(function(key) { allowedParams.forEach(function(key) {
if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key)); if (params.get(key)) url += (url.indexOf('?') === -1 ? '?' : '&') + key + '=' + encodeURIComponent(params.get(key));
@@ -134,7 +134,7 @@ $status_labels = [
<small data-affiliate-feedback role="status" aria-live="polite"></small> <small data-affiliate-feedback role="status" aria-live="polite"></small>
</div> </div>
<div class="uc-promotion-summary-row"><span><?php esc_html_e('佣金比例', 'aksrt'); ?></span><strong data-affiliate-ratio><?php echo esc_html((string) $commission_ratio); ?>%</strong></div> <div class="uc-promotion-summary-row"><span><?php esc_html_e('佣金比例', 'aksrt'); ?></span><strong data-affiliate-ratio><?php echo esc_html((string) $commission_ratio); ?>%</strong></div>
<div class="uc-promotion-summary-row"><span><?php esc_html_e('推广人数', 'aksrt'); ?></span><strong data-affiliate-promoters>—</strong><em><?php esc_html_e('人', 'aksrt'); ?></em></div> <div class="uc-promotion-summary-row"><span><?php esc_html_e('推广人数', 'aksrt'); ?></span><div class="uc-promotion-count"><strong data-affiliate-promoters>—</strong><em><?php esc_html_e('人', 'aksrt'); ?></em></div></div>
<div class="uc-promotion-summary-row uc-promotion-summary-row--total"><span><?php esc_html_e('累计佣金', 'aksrt'); ?></span><div><strong>累计<?php echo esc_html($format_amount($commission_stats['total'] ?? 0)); ?>元</strong><strong>已提现<?php echo esc_html($format_amount($commission_stats['withdrawn'] ?? 0)); ?>元</strong></div></div> <div class="uc-promotion-summary-row uc-promotion-summary-row--total"><span><?php esc_html_e('累计佣金', 'aksrt'); ?></span><div><strong>累计<?php echo esc_html($format_amount($commission_stats['total'] ?? 0)); ?>元</strong><strong>已提现<?php echo esc_html($format_amount($commission_stats['withdrawn'] ?? 0)); ?>元</strong></div></div>
<div class="uc-promotion-summary-row uc-promotion-summary-row--explain"><span><?php esc_html_e('返佣详解', 'aksrt'); ?></span><div class="uc-reward-richtext"><?php echo wp_kses_post(wpautop($details_text)); ?></div></div> <div class="uc-promotion-summary-row uc-promotion-summary-row--explain"><span><?php esc_html_e('返佣详解', 'aksrt'); ?></span><div class="uc-reward-richtext"><?php echo wp_kses_post(wpautop($details_text)); ?></div></div>
</div> </div>
+3 -3
View File
@@ -81,13 +81,13 @@ class Center {
$revenue_request = []; $revenue_request = [];
if ($tab === 'promotion') { if ($tab === 'promotion') {
$reward_tab = sanitize_key((string) $request->get_param('reward_tab')); $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'; $reward_tab = 'detail';
} }
$revenue_request = [ $revenue_request = [
'reward_tab' => $reward_tab, 'reward_tab' => $reward_tab,
'commission_page' => max(1, min(100, (int) $request->get_param('commission_page'))), '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; $context['revenue_request'] = $revenue_request;
} }
@@ -107,7 +107,7 @@ class Center {
'reward_tab' => $revenue_request['reward_tab'] ?? '', 'reward_tab' => $revenue_request['reward_tab'] ?? '',
'creator_income' => $income_request, 'creator_income' => $income_request,
'commission_page' => $revenue_request['commission_page'] ?? 1, 'commission_page' => $revenue_request['commission_page'] ?? 1,
'invite_page' => $revenue_request['invite_page'] ?? 1, 'user_page' => $revenue_request['user_page'] ?? 1,
], ],
]); ]);
} }