diff --git a/docs/zibll-gap-matrix.md b/docs/zibll-gap-matrix.md
index ff74df8d..ae2394c3 100644
--- a/docs/zibll-gap-matrix.md
+++ b/docs/zibll-gap-matrix.md
@@ -99,8 +99,8 @@ Note: zibll「商品管理」`zibpay_product_page` is **paid article sales**, no
| 2b Shipping/after-sale/coupons/income/rebate | done |
| 3 users.php submenus | done |
| 4 SPA strip | done (ops routes redirect to native) |
-| 5+ behavior parity | in progress — shipping list create + order links; after-sale filters/actions; order note/quick actions; coupons field parity + batch/enable; charge-cards expires + code dump + search/labels |
-| 5 remaining | product/forum runtime field parity; pending-to-ship board; express timeline; coupon product_scope UI |
+| 5+ behavior parity | in progress — shipping list create + pending-to-ship board; after-sale filters/actions; order note/quick actions; coupons field parity + batch/enable; charge-cards expires + code dump + search/labels |
+| 5 remaining | product/forum runtime field parity; express timeline; coupon product_scope UI |
## Dual-UI rule
diff --git a/inc/classes/admin/native/class-aksrt-admin-pay-menus.php b/inc/classes/admin/native/class-aksrt-admin-pay-menus.php
index 4d5b1e63..88068105 100644
--- a/inc/classes/admin/native/class-aksrt-admin-pay-menus.php
+++ b/inc/classes/admin/native/class-aksrt-admin-pay-menus.php
@@ -259,9 +259,14 @@ class AKSRT_Admin_Pay_Menus {
echo '
' . esc_html__('运营数据入口(对齐 zibll 商城中心)。配置项仍在 AKSRT 主题设置 SPA。', 'aksrt') . '
';
echo '';
+ $pending_ship = 0;
+ if (class_exists('AKSRT_Order_Repository')) {
+ $pending_ship = (int) (AKSRT_Order_Repository::get_instance()->get_pending_shipment_orders(['limit' => 1])['total'] ?? 0);
+ }
$this->stat_card(__('订单总数', 'aksrt'), (string) (int) ($order_stats['total'] ?? 0), $this->page_url('aksrt_orders'));
$this->stat_card(__('待支付', 'aksrt'), (string) (int) ($order_stats['pending'] ?? 0), $this->page_url('aksrt_orders', ['status' => 'pending']));
$this->stat_card(__('已支付', 'aksrt'), (string) (int) ($order_stats['paid'] ?? 0), $this->page_url('aksrt_orders', ['status' => 'paid']));
+ $this->stat_card(__('待发货', 'aksrt'), (string) $pending_ship, $this->page_url('aksrt_shipping', ['view' => 'pending']));
$this->stat_card(__('营收', 'aksrt'), number_format((float) ($order_stats['revenue'] ?? 0), 2), $this->page_url('aksrt_orders'));
$this->stat_card(__('待审提现', 'aksrt'), (string) (int) ($withdraw_stats['pending'] ?? 0), $this->page_url('aksrt_withdraw', ['status' => 'pending']));
$this->stat_card(__('可用卡密', 'aksrt'), (string) (int) ($card_stats['active'] ?? 0), $this->page_url('aksrt_charge_cards', ['status' => 'active']));
@@ -1055,6 +1060,10 @@ class AKSRT_Admin_Pay_Menus {
return;
}
+ $view = isset($_GET['view']) ? sanitize_key((string) wp_unslash($_GET['view'])) : 'records';
+ if (!in_array($view, ['records', 'pending'], true)) {
+ $view = 'records';
+ }
$status = isset($_GET['status']) ? sanitize_key((string) wp_unslash($_GET['status'])) : '';
$search = isset($_GET['s']) ? sanitize_text_field((string) wp_unslash($_GET['s'])) : '';
$page_num = max(1, (int) ($_GET['paged'] ?? 1));
@@ -1063,12 +1072,39 @@ class AKSRT_Admin_Pay_Menus {
$stats = $svc->get_stats();
$status_options = $this->shipping_status_options(true);
+ $pending_total = 0;
+ if (class_exists('AKSRT_Order_Repository')) {
+ $pending_total = (int) (AKSRT_Order_Repository::get_instance()->get_pending_shipment_orders(['limit' => 1, 'search' => ''])['total'] ?? 0);
+ }
+
echo '
' . esc_html(sprintf(
- /* translators: 1: total */
- __('物流记录共 %d 条', 'aksrt'),
- (int) ($stats['total'] ?? 0)
+ /* translators: 1: shipping records 2: pending shipment orders */
+ __('物流记录 %1$d 条 · 待发货订单 %2$d', 'aksrt'),
+ (int) ($stats['total'] ?? 0),
+ $pending_total
)) . '
';
+ echo '
';
+ printf(
+ '%s',
+ esc_url($this->page_url('aksrt_shipping', ['view' => 'pending'])),
+ $view === 'pending' ? ' nav-tab-active' : '',
+ esc_html(sprintf(__('待发货 (%d)', 'aksrt'), $pending_total))
+ );
+ printf(
+ '%s',
+ esc_url($this->page_url('aksrt_shipping', ['view' => 'records'])),
+ $view === 'records' ? ' nav-tab-active' : '',
+ esc_html__('物流记录', 'aksrt')
+ );
+ echo '
';
+
+ if ($view === 'pending') {
+ $this->render_pending_shipment_board($search, $page_num, $per_page);
+ $this->render_footer();
+ return;
+ }
+
echo '
' . esc_html__('新建发货', 'aksrt') . '
';
echo '