diff --git a/src/Admin/Native/PayOrders.php b/src/Admin/Native/PayOrders.php
index 23aa987d..438acfd3 100644
--- a/src/Admin/Native/PayOrders.php
+++ b/src/Admin/Native/PayOrders.php
@@ -11,6 +11,7 @@ class PayOrders {
public const CAPABILITY = 'manage_options';
public const PAGE_SLUG = 'aksrt_orders';
+ public const PAGE_AFTER_SALES_SLUG = 'aksrt_after_sales';
private static $instance = null;
@@ -42,20 +43,6 @@ class PayOrders {
return;
}
- $tab = isset($_GET['tab']) ? sanitize_key((string) wp_unslash($_GET['tab'])) : 'orders';
- if (!in_array($tab, ['stats', 'orders', 'after-sales'], true)) $tab = 'orders';
- $this->render_workbench_tabs($tab);
- if ($tab === 'stats') {
- $this->render_statistics_page();
- $this->render_footer();
- return;
- }
- if ($tab === 'after-sales') {
- $this->render_after_sales_page();
- $this->render_footer();
- return;
- }
-
$detail_order = isset($_GET['order']) ? sanitize_text_field((string) wp_unslash($_GET['order'])) : '';
if ($detail_order !== '') {
$this->render_order_detail_page($detail_order);
@@ -298,6 +285,23 @@ class PayOrders {
$this->render_footer();
}
+ /**
+ * 售后服务子菜单(aksrt_after_sales):原订单明细页「售后」Tab 独立成页。
+ */
+ public function render_after_sales_admin_page(): void {
+ $this->ensure_cap();
+ $this->render_header(__('售后服务', 'aksrt'));
+
+ if (!class_exists('\\AKSRT\\Payment\\AfterSaleService')) {
+ echo '
' . esc_html__('售后服务不可用。', 'aksrt') . '
';
+ $this->render_footer();
+ return;
+ }
+
+ $this->render_after_sales_page();
+ $this->render_footer();
+ }
+
private function render_order_detail_page(string $order_number): void {
$repo = \AKSRT\Payment\OrderRepository::get_instance();
$order = $repo->get($order_number);
@@ -372,33 +376,6 @@ class PayOrders {
echo '';
}
- private function render_workbench_tabs(string $active): void {
- echo '';
- }
-
- private function render_statistics_page(): void {
- $stats = \AKSRT\Payment\OrderRepository::get_instance()->get_admin_order_stats([
- 'date_from' => isset($_GET['date_from']) ? sanitize_text_field((string) wp_unslash($_GET['date_from'])) : '',
- 'date_to' => isset($_GET['date_to']) ? sanitize_text_field((string) wp_unslash($_GET['date_to'])) : '',
- ]);
- echo '';
- foreach (['total' => __('订单总数', 'aksrt'), 'pending' => __('待支付', 'aksrt'), 'paid' => __('已支付', 'aksrt'), 'refunded' => __('已退款', 'aksrt'), 'closed' => __('已关闭', 'aksrt'), 'revenue' => __('实收金额', 'aksrt'), 'after_sale_pending' => __('售后待审核', 'aksrt')] as $key => $label) {
- $this->stat_card($label, (string) ($stats[$key] ?? 0), $this->page_url(self::PAGE_SLUG, ['tab' => 'orders']));
- }
- echo '
' . esc_html__('按商品类型统计', 'aksrt') . '
';
- foreach ((array) ($stats['by_type'] ?? []) as $type => $count) echo '| ' . esc_html(\AKSRT\Core\DomainModel::order_product_type_labels()[$type] ?? $type) . ' | ' . esc_html((string) $count) . ' |
';
- echo '
';
- }
-
private function render_after_sales_page(): void {
$service = \AKSRT\Payment\AfterSaleService::get_instance();
$status = isset($_GET['after_sale_status']) ? sanitize_key((string) wp_unslash($_GET['after_sale_status'])) : '';
@@ -408,7 +385,7 @@ class PayOrders {
$date_to = preg_match('/^\d{4}-\d{2}-\d{2}$/', $date_to) ? $date_to : '';
$filter_args = ['status' => $status, 'date_from' => $date_from, 'date_to' => $date_to];
$items = $service->admin_list($filter_args + ['limit' => 100]);
- echo '