fix(ui): float VIP duplicates, hover cards, UC menu and light-theme contrast

This commit is contained in:
2026-07-21 18:54:16 +08:00
parent f9b495eb14
commit 56434a9255
8 changed files with 388 additions and 108 deletions
+36 -13
View File
@@ -55,28 +55,51 @@ trait VipServiceModal {
$name = (string) ($levels[$level]['name'] ?? ('VIP' . $level));
$desc = (string) ($levels[$level]['desc'] ?? '');
$equity = (string) ($levels[$level]['equity'] ?? '');
$cls = $user_id > 0 ? 'pay-vip' : 'signin-loader';
$html = '<div class="vip-card pointer level-' . $level . ' vip-theme' . $level . ' ' . esc_attr($cls) . '" vip-level="' . $level . '">';
$html .= '<div class="abs-center vip-baicon"><i class="fas fa-gem" aria-hidden="true"></i></div>';
$cls = $user_id > 0 ? ' pay-vip' : ' signin-loader';
$equity_html = '';
$equity_raw = trim(wp_kses_post($equity));
if ($equity_raw !== '') {
if (preg_match('/<li[\s>]/i', $equity_raw)) {
$inner = preg_replace('#</?(ul|ol)[^>]*>#i', '', $equity_raw) ?? $equity_raw;
$equity_html = '<ul class="mb10 relative v-equity">' . $inner . '</ul>';
} else {
$parts = preg_split('/[\r\n]+|[;;,,||]+/u', wp_strip_all_tags($equity_raw)) ?: [];
$parts = array_values(array_filter(array_map('trim', $parts)));
if (count($parts) === 1 && mb_strlen($parts[0]) > 16) {
$chunks = preg_split('/(?=(?:免费|会员|更高|专属|付费|下载|身份|权益|折扣|无限))/u', $parts[0], -1, PREG_SPLIT_NO_EMPTY) ?: [];
$chunks = array_values(array_filter(array_map('trim', $chunks)));
if (count($chunks) > 1) {
$parts = $chunks;
}
}
if ($parts) {
$equity_html = '<ul class="mb10 relative v-equity">';
foreach ($parts as $p) {
$equity_html .= '<li>' . esc_html($p) . '</li>';
}
$equity_html .= '</ul>';
}
}
}
$icon = '<i class="fas fa-gem" aria-hidden="true"></i>';
$html = '<div class="vip-card pointer level-' . $level . ' vip-theme' . $level . $cls . '" vip-level="' . $level . '">';
$html .= '<div class="abs-center vip-baicon">' . $icon . '</div>';
$html .= '<div class="vip-img abs-right">' . $icon . '</div>';
$html .= '<div class="relative">';
$html .= '<div class="vip-name font-bold">' . esc_html($name) . '</div>';
$html .= '<div class="vip-name mb10"><span class="mr6">' . $icon . '</span>' . esc_html($name) . '</div>';
if ($desc !== '') {
$html .= '<div class="muted-2-color em09 mb6">' . esc_html($desc) . '</div>';
}
if ($equity !== '') {
$html .= '<ul class="mb10 relative em09 v-equity">' . $equity . '</ul>';
$html .= '<div class="mb6 font-bold em09">' . esc_html($desc) . '</div>';
}
$html .= $equity_html;
$html .= '<a class="but jb-blue radius payvip-button" href="javascript:;">'
. esc_html(sprintf(__('开通%s', 'aksrt'), $name))
. '</a>';
. '<span class="ml6"><i class="fas fa-chevron-circle-right" aria-hidden="true"></i></span></a>';
$html .= '</div></div>';
return $html;
}
/**
* @param array<string,mixed> $catalog
* @param array<string,mixed> $vip
*/
private function render_modal_pay(int $user_id, array $catalog, array $vip, int $prefer_level): string {
$user = get_userdata($user_id);
$name = $user ? $user->display_name : '';