diff --git a/docs/zibll-gap-matrix.md b/docs/zibll-gap-matrix.md index 472164bf..ff74df8d 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 `s`/type filters + list create + merchant approve/reject/confirm + order links; order admin note (JSON-safe) + complete/refund/close quick actions | -| 5 remaining | coupons/cards UX depth; product/forum runtime field parity; pending-to-ship board; express timeline | +| 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 | ## 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 26d453e7..4d5b1e63 100644 --- a/inc/classes/admin/native/class-aksrt-admin-pay-menus.php +++ b/inc/classes/admin/native/class-aksrt-admin-pay-menus.php @@ -41,7 +41,9 @@ class AKSRT_Admin_Pay_Menus { add_action('admin_post_aksrt_pay_create_after_sale', [$this, 'handle_create_after_sale']); add_action('admin_post_aksrt_pay_after_sale_action', [$this, 'handle_after_sale_action']); add_action('admin_post_aksrt_pay_create_coupon', [$this, 'handle_create_coupon']); + add_action('admin_post_aksrt_pay_batch_coupons', [$this, 'handle_batch_coupons']); add_action('admin_post_aksrt_pay_disable_coupon', [$this, 'handle_disable_coupon']); + add_action('admin_post_aksrt_pay_enable_coupon', [$this, 'handle_enable_coupon']); add_action('admin_post_aksrt_pay_settle_income', [$this, 'handle_settle_income']); add_action('admin_post_aksrt_pay_settle_rebate', [$this, 'handle_settle_rebate']); add_action('admin_post_aksrt_pay_cancel_rebate', [$this, 'handle_cancel_rebate']); @@ -218,8 +220,11 @@ class AKSRT_Admin_Pay_Menus { 'after_sale_create_failed' => __('售后工单创建失败。', 'aksrt'), 'coupon_created' => __('优惠码已创建。', 'aksrt'), 'coupon_create_failed'=> __('优惠码创建失败(可能重复)。', 'aksrt'), + 'coupon_batch_ok' => __('优惠码批量生成完成。', 'aksrt'), + 'coupon_batch_failed' => __('优惠码批量生成失败。', 'aksrt'), 'coupon_disabled' => __('优惠码已禁用。', 'aksrt'), - 'coupon_failed' => __('优惠码禁用失败。', 'aksrt'), + 'coupon_enabled' => __('优惠码已启用。', 'aksrt'), + 'coupon_failed' => __('优惠码操作失败。', 'aksrt'), 'income_settled' => __('分成已结算。', 'aksrt'), 'income_failed' => __('分成结算失败。', 'aksrt'), 'rebate_settled' => __('返佣已结算。', 'aksrt'), @@ -786,10 +791,23 @@ class AKSRT_Admin_Pay_Menus { $status = isset($_GET['status']) ? sanitize_key((string) wp_unslash($_GET['status'])) : ''; $type = isset($_GET['type']) ? sanitize_key((string) wp_unslash($_GET['type'])) : ''; + $search = isset($_GET['s']) ? sanitize_text_field((string) wp_unslash($_GET['s'])) : ''; $page_num = max(1, (int) ($_GET['paged'] ?? 1)); $per_page = 20; $svc = AKSRT_Charge_Card::get_instance(); $stats = $svc->get_stats(); + $type_labels = [ + 'balance' => __('余额', 'aksrt'), + 'vip' => __('VIP', 'aksrt'), + 'credits' => __('积分', 'aksrt'), + 'points' => __('积分', 'aksrt'), + ]; + $status_labels = [ + 'active' => __('可用', 'aksrt'), + 'used' => __('已用', 'aksrt'), + 'disabled' => __('已禁用', 'aksrt'), + 'expired' => __('已过期', 'aksrt'), + ]; echo '
' . esc_html(sprintf( /* translators: 1: total 2: active 3: used */ @@ -814,6 +832,7 @@ class AKSRT_Admin_Pay_Menus { echo '
'; echo ''; echo ''; + echo ''; echo ''; submit_button(__('生成', 'aksrt'), 'primary', '', false); echo ''; @@ -827,6 +846,14 @@ class AKSRT_Admin_Pay_Menus { )) . ''; } + $generated_codes = get_transient('aksrt_pay_card_codes_' . get_current_user_id()); + if (is_array($generated_codes) && $generated_codes) { + delete_transient('aksrt_pay_card_codes_' . get_current_user_id()); + echo '' . esc_html__('本次生成卡密(请及时复制保存):', 'aksrt') . '
'; + echo ''; + echo '' . esc_html((string) ($row['password'] ?? $row['code'] ?? '')) . '' . esc_html(sprintf( + /* translators: %d count */ + __('成功生成 %d 个优惠码。', 'aksrt'), + $generated + )) . '
' . esc_html__('本次生成优惠码(请及时复制保存):', 'aksrt') . '
'; + echo ''; + echo '