feat(shop): 交易中心壳层 1:1 统一购物车/订单/收益
抽出 commerce header 与二级导航,购物车/订单/收益共用主站交易中心壳层;收益 stats 轻量化,降低独立电商后台观感。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,94 @@
|
|||||||
|
/**
|
||||||
|
* Commerce center shared shell (cart / orders / revenue).
|
||||||
|
*
|
||||||
|
* @package AKSRT
|
||||||
|
*/
|
||||||
|
|
||||||
|
.aksrt-commerce-header {
|
||||||
|
margin: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__title {
|
||||||
|
margin: 0 0 6px;
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1.25;
|
||||||
|
color: var(--color-ink, #1f2937);
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__subtitle {
|
||||||
|
margin: 0 0 14px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--color-ink-3, #6b7280);
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__nav {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__nav-item {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 999px;
|
||||||
|
border: 1px solid var(--color-line, rgba(0, 0, 0, 0.08));
|
||||||
|
background: var(--surface-1, #fff);
|
||||||
|
color: var(--color-ink-2, #4b5563);
|
||||||
|
font-size: 13px;
|
||||||
|
text-decoration: none;
|
||||||
|
transition: color .15s, border-color .15s, background .15s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__nav-item:hover {
|
||||||
|
color: var(--color-primary, #f04494);
|
||||||
|
border-color: color-mix(in srgb, var(--color-primary, #f04494) 35%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-commerce-header__nav-item.is-active {
|
||||||
|
color: var(--color-on-primary, #fff);
|
||||||
|
background: var(--color-primary, #f04494);
|
||||||
|
border-color: var(--color-primary, #f04494);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Soften revenue dashboard cards — task-first, not ops console */
|
||||||
|
.aksrt-revenue-page__stats {
|
||||||
|
gap: 12px !important;
|
||||||
|
margin-bottom: 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-revenue-page__stat-card {
|
||||||
|
padding: 14px 16px !important;
|
||||||
|
border-radius: 12px !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
border: 1px solid var(--color-line-soft, rgba(0, 0, 0, 0.06)) !important;
|
||||||
|
background: var(--surface-1, #fff) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-revenue-page__stat-icon {
|
||||||
|
width: 36px !important;
|
||||||
|
height: 36px !important;
|
||||||
|
font-size: 15px !important;
|
||||||
|
background: var(--body-bg-color, #f5f6f7) !important;
|
||||||
|
color: var(--color-ink-2, #4b5563) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-revenue-page__stat-value {
|
||||||
|
font-size: 18px !important;
|
||||||
|
font-weight: 600 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-revenue-page__stat-label {
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Orders / cart title rhythm when using shared header */
|
||||||
|
.aksrt-orders-page__header,
|
||||||
|
.aksrt-cart-page__header > div:first-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aksrt-orders-page__tabs {
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
@@ -43,6 +43,7 @@ require_once AKSRT_DIR . '/inc/helpers/aksrt-credits.php';
|
|||||||
require_once AKSRT_DIR . '/inc/helpers/menu-decoration.php';
|
require_once AKSRT_DIR . '/inc/helpers/menu-decoration.php';
|
||||||
require_once AKSRT_DIR . '/inc/helpers/class-aksrt-nav-walker.php';
|
require_once AKSRT_DIR . '/inc/helpers/class-aksrt-nav-walker.php';
|
||||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-transactions.php';
|
require_once AKSRT_DIR . '/inc/helpers/aksrt-transactions.php';
|
||||||
|
require_once AKSRT_DIR . '/inc/helpers/aksrt-commerce.php';
|
||||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-dashboard.php';
|
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-dashboard.php';
|
||||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-center.php';
|
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-center.php';
|
||||||
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-home.php';
|
require_once AKSRT_DIR . '/inc/helpers/aksrt-user-home.php';
|
||||||
|
|||||||
@@ -301,6 +301,22 @@ trait AKSRT_Scripts_Part_1b {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 交易中心共享壳层(购物车 / 订单 / 收益)
|
||||||
|
$is_commerce_center = is_page_template('templates/pages/page-orders.php')
|
||||||
|
|| is_page_template('templates/pages/page-cart.php')
|
||||||
|
|| is_page_template('templates/pages/page-revenue.php');
|
||||||
|
if ($is_commerce_center) {
|
||||||
|
$commerce_css = get_template_directory() . '/assets/css/routes/commerce.css';
|
||||||
|
if (file_exists($commerce_css)) {
|
||||||
|
wp_enqueue_style(
|
||||||
|
'aksrt-commerce-shell',
|
||||||
|
$base_uri . '/assets/css/routes/commerce.css',
|
||||||
|
['aksrt-tokens'],
|
||||||
|
(string) filemtime($commerce_css)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 订单中心页
|
// 订单中心页
|
||||||
if (is_page_template('templates/pages/page-orders.php')) {
|
if (is_page_template('templates/pages/page-orders.php')) {
|
||||||
wp_enqueue_style(
|
wp_enqueue_style(
|
||||||
|
|||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Commerce center (cart / orders / revenue) presentation helpers.
|
||||||
|
*
|
||||||
|
* @package AKSRT
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('ABSPATH') || exit;
|
||||||
|
|
||||||
|
if (!function_exists('aksrt_get_commerce_nav_items')) {
|
||||||
|
/**
|
||||||
|
* Secondary nav for commerce center pages.
|
||||||
|
*
|
||||||
|
* @return array<int, array{key:string,label:string,url:string}>
|
||||||
|
*/
|
||||||
|
function aksrt_get_commerce_nav_items(): array {
|
||||||
|
$items = [];
|
||||||
|
|
||||||
|
$cart = function_exists('aksrt_get_cart_page_url') ? aksrt_get_cart_page_url() : '';
|
||||||
|
if ($cart !== '') {
|
||||||
|
$items[] = [
|
||||||
|
'key' => 'cart',
|
||||||
|
'label' => __('购物车', 'aksrt'),
|
||||||
|
'url' => $cart,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$orders = function_exists('aksrt_get_orders_page_url') ? aksrt_get_orders_page_url() : '';
|
||||||
|
if ($orders !== '') {
|
||||||
|
$items[] = [
|
||||||
|
'key' => 'orders',
|
||||||
|
'label' => __('我的订单', 'aksrt'),
|
||||||
|
'url' => $orders,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$revenue = function_exists('aksrt_get_revenue_page_url') ? aksrt_get_revenue_page_url() : '';
|
||||||
|
if ($revenue !== '') {
|
||||||
|
$items[] = [
|
||||||
|
'key' => 'revenue',
|
||||||
|
'label' => __('创作收益', 'aksrt'),
|
||||||
|
'url' => $revenue,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$center = function_exists('aksrt_get_user_center_url') ? aksrt_get_user_center_url() : '';
|
||||||
|
if ($center !== '') {
|
||||||
|
$items[] = [
|
||||||
|
'key' => 'center',
|
||||||
|
'label' => __('个人中心', 'aksrt'),
|
||||||
|
'url' => $center,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!function_exists('aksrt_render_commerce_page_header')) {
|
||||||
|
/**
|
||||||
|
* Shared commerce page header: title / intro / secondary nav.
|
||||||
|
*
|
||||||
|
* @param array{title?:string,subtitle?:string,active?:string} $args
|
||||||
|
*/
|
||||||
|
function aksrt_render_commerce_page_header(array $args = []): void {
|
||||||
|
$title = (string) ($args['title'] ?? '');
|
||||||
|
$subtitle = (string) ($args['subtitle'] ?? '');
|
||||||
|
$active = sanitize_key((string) ($args['active'] ?? ''));
|
||||||
|
$nav = aksrt_get_commerce_nav_items();
|
||||||
|
?>
|
||||||
|
<header class="aksrt-commerce-header">
|
||||||
|
<?php if ($title !== '') : ?>
|
||||||
|
<h1 class="aksrt-commerce-header__title"><?php echo esc_html($title); ?></h1>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($subtitle !== '') : ?>
|
||||||
|
<p class="aksrt-commerce-header__subtitle"><?php echo esc_html($subtitle); ?></p>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if (!empty($nav)) : ?>
|
||||||
|
<nav class="aksrt-commerce-header__nav" aria-label="<?php esc_attr_e('交易中心导航', 'aksrt'); ?>">
|
||||||
|
<?php foreach ($nav as $item) :
|
||||||
|
$is_active = $active !== '' && $active === ($item['key'] ?? '');
|
||||||
|
?>
|
||||||
|
<a
|
||||||
|
class="aksrt-commerce-header__nav-item<?php echo $is_active ? ' is-active' : ''; ?>"
|
||||||
|
href="<?php echo esc_url((string) ($item['url'] ?? '#')); ?>"
|
||||||
|
<?php echo $is_active ? ' aria-current="page"' : ''; ?>
|
||||||
|
>
|
||||||
|
<?php echo esc_html((string) ($item['label'] ?? '')); ?>
|
||||||
|
</a>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</nav>
|
||||||
|
<?php endif; ?>
|
||||||
|
</header>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,11 +42,16 @@ $address_book = is_array($cart_view['address_book'] ?? null) ? $cart_view['addre
|
|||||||
data-currency-symbol="<?php echo esc_attr((string) ($cart_view['currency_symbol'] ?? '¥')); ?>"
|
data-currency-symbol="<?php echo esc_attr((string) ($cart_view['currency_symbol'] ?? '¥')); ?>"
|
||||||
data-coupon-enabled="<?php echo !empty($cart_view['coupon_enabled']) ? '1' : '0'; ?>"
|
data-coupon-enabled="<?php echo !empty($cart_view['coupon_enabled']) ? '1' : '0'; ?>"
|
||||||
>
|
>
|
||||||
|
<?php
|
||||||
|
if (function_exists('aksrt_render_commerce_page_header')) {
|
||||||
|
aksrt_render_commerce_page_header([
|
||||||
|
'title' => __('购物车', 'aksrt'),
|
||||||
|
'subtitle' => __('在下单前确认地址、运费、优惠券和支付方式。', 'aksrt'),
|
||||||
|
'active' => 'cart',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
?>
|
||||||
<div class="aksrt-cart-page__header">
|
<div class="aksrt-cart-page__header">
|
||||||
<div>
|
|
||||||
<h1 class="aksrt-cart-page__title"><?php esc_html_e('购物车', 'aksrt'); ?></h1>
|
|
||||||
<p class="aksrt-cart-page__subtitle"><?php esc_html_e('在下单前确认地址、运费、优惠券和支付方式。', 'aksrt'); ?></p>
|
|
||||||
</div>
|
|
||||||
<?php if (!empty($pending_orders)) : ?>
|
<?php if (!empty($pending_orders)) : ?>
|
||||||
<div class="aksrt-cart-page__pending">
|
<div class="aksrt-cart-page__pending">
|
||||||
<span class="aksrt-cart-page__pending-label"><?php esc_html_e('待支付订单', 'aksrt'); ?></span>
|
<span class="aksrt-cart-page__pending-label"><?php esc_html_e('待支付订单', 'aksrt'); ?></span>
|
||||||
|
|||||||
@@ -56,10 +56,19 @@ $tabs = [
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
<main id="main-content" class="site-main content-shell" tabindex="-1">
|
<main id="main-content" class="site-main content-shell" tabindex="-1">
|
||||||
|
<?php if (function_exists('aksrt_breadcrumbs')) { aksrt_breadcrumbs(); } ?>
|
||||||
<div class="container aksrt-orders-page" data-aksrt-order-center>
|
<div class="container aksrt-orders-page" data-aksrt-order-center>
|
||||||
<div class="aksrt-orders-page__header">
|
<?php
|
||||||
<h1><?php esc_html_e('我的订单', 'aksrt'); ?></h1>
|
if (function_exists('aksrt_render_commerce_page_header')) {
|
||||||
</div>
|
aksrt_render_commerce_page_header([
|
||||||
|
'title' => __('我的订单', 'aksrt'),
|
||||||
|
'subtitle' => __('查看订单状态、物流进度与售后处理。', 'aksrt'),
|
||||||
|
'active' => 'orders',
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
echo '<div class="aksrt-orders-page__header"><h1>' . esc_html__('我的订单', 'aksrt') . '</h1></div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
<!-- 5-tab navigation -->
|
<!-- 5-tab navigation -->
|
||||||
<div class="aksrt-orders-page__tabs">
|
<div class="aksrt-orders-page__tabs">
|
||||||
|
|||||||
@@ -54,12 +54,20 @@ $paged_records = array_slice($records, ($paged - 1) * $per_page, $per_page);
|
|||||||
<div class="container aksrt-revenue-page" data-aksrt-revenue-page
|
<div class="container aksrt-revenue-page" data-aksrt-revenue-page
|
||||||
data-min-amount="<?php echo esc_attr((string) $min_amount); ?>"
|
data-min-amount="<?php echo esc_attr((string) $min_amount); ?>"
|
||||||
data-fee-rate="<?php echo esc_attr((string) $fee_rate); ?>">
|
data-fee-rate="<?php echo esc_attr((string) $fee_rate); ?>">
|
||||||
<div class="aksrt-revenue-page__header">
|
<?php
|
||||||
<h1><?php esc_html_e('创作收益', 'aksrt'); ?></h1>
|
if (function_exists('aksrt_render_commerce_page_header')) {
|
||||||
<p class="aksrt-revenue-page__subtitle"><?php esc_html_e('查看分成明细并发起提现。', 'aksrt'); ?></p>
|
aksrt_render_commerce_page_header([
|
||||||
</div>
|
'title' => __('创作收益', 'aksrt'),
|
||||||
|
'subtitle' => __('查看分成明细并发起提现。', 'aksrt'),
|
||||||
|
'active' => 'revenue',
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
echo '<div class="aksrt-revenue-page__header"><h1>' . esc_html__('创作收益', 'aksrt') . '</h1>';
|
||||||
|
echo '<p class="aksrt-revenue-page__subtitle">' . esc_html__('查看分成明细并发起提现。', 'aksrt') . '</p></div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
<div class="aksrt-revenue-page__stats">
|
<div class="aksrt-revenue-page__stats" aria-label="<?php esc_attr_e('收益概览', 'aksrt'); ?>">
|
||||||
<div class="aksrt-revenue-page__stat-card">
|
<div class="aksrt-revenue-page__stat-card">
|
||||||
<div class="aksrt-revenue-page__stat-icon"><i class="fas fa-wallet"></i></div>
|
<div class="aksrt-revenue-page__stat-icon"><i class="fas fa-wallet"></i></div>
|
||||||
<div class="aksrt-revenue-page__stat-info">
|
<div class="aksrt-revenue-page__stat-info">
|
||||||
|
|||||||
Reference in New Issue
Block a user