ensure_cap(); $this->render_header(__('推广返佣', 'aksrt')); if (!class_exists('AKSRT_Rebate')) { echo '

' . esc_html__('返佣模块未初始化。', 'aksrt') . '

'; $this->render_footer(); return; } $status = isset($_GET['status']) ? sanitize_key((string) wp_unslash($_GET['status'])) : ''; $user_id = isset($_GET['user_id']) ? max(0, (int) $_GET['user_id']) : (isset($_GET['referrer_id']) ? max(0, (int) $_GET['referrer_id']) : 0); $page_num = max(1, (int) ($_GET['paged'] ?? 1)); $per_page = 20; $svc = AKSRT_Rebate::get_instance(); $stats = $svc->get_stats(); echo '

' . esc_html(sprintf( /* translators: 1: total 2: pending 3: settled amount */ __('记录 %1$d · 待结算 %2$d · 已结算金额 %3$s', 'aksrt'), (int) ($stats['total'] ?? 0), (int) ($stats['pending'] ?? 0), number_format((float) ($stats['settled_amount'] ?? 0), 2) )) . '

'; echo '
'; echo ''; echo ' '; echo ' '; submit_button(__('筛选', 'aksrt'), 'secondary', '', false); if ($user_id > 0) { echo ' ' . esc_html__('清除用户过滤', 'aksrt') . ''; } echo '
'; $list_args = [ 'status' => $status, 'limit' => $per_page, 'offset' => ($page_num - 1) * $per_page, ]; if ($user_id > 0) { $list_args['user_id'] = $user_id; } $result = $svc->get_list($list_args); $items = $result['items'] ?? []; $total = (int) ($result['total'] ?? 0); $pages = max(1, (int) ceil(max(1, $total) / $per_page)); echo ''; echo ''; echo ''; if (!$items) { echo ''; } foreach ($items as $row) { $id = (int) ($row['id'] ?? 0); $user_id = (int) ($row['user_id'] ?? 0); $user = $user_id > 0 ? get_userdata($user_id) : null; $st = (string) ($row['status'] ?? ''); echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
ID' . esc_html__('用户', 'aksrt') . '' . esc_html__('订单号', 'aksrt') . '' . esc_html__('金额', 'aksrt') . '' . esc_html__('状态', 'aksrt') . '' . esc_html__('时间', 'aksrt') . '' . esc_html__('操作', 'aksrt') . '
' . esc_html__('暂无返佣记录', 'aksrt') . '
' . esc_html((string) $id) . '' . ($user ? esc_html($user->display_name) : esc_html((string) $user_id)) . '' . esc_html((string) ($row['order_number'] ?? '')) . '' . esc_html(number_format((float) ($row['amount'] ?? 0), 2)) . '' . esc_html($st) . '' . esc_html((string) ($row['created_at'] ?? '')) . ''; if ($st === 'pending') { echo '
'; echo ''; echo ''; wp_nonce_field('aksrt_pay_settle_rebate_' . $id); submit_button(__('结算', 'aksrt'), 'small', '', false); echo '
'; echo '
'; echo ''; echo ''; wp_nonce_field('aksrt_pay_cancel_rebate_' . $id); submit_button(__('取消', 'aksrt'), 'small', '', false); echo '
'; } else { echo '—'; } echo '
'; $this->render_pagination($pages, $page_num); $this->render_footer(); } public function handle_settle_rebate(): void { if (!current_user_can(self::CAPABILITY)) { wp_die(esc_html__('权限不足', 'aksrt')); } $id = isset($_POST['rebate_id']) ? (int) $_POST['rebate_id'] : 0; check_admin_referer('aksrt_pay_settle_rebate_' . $id); $ok = $id > 0 && class_exists('AKSRT_Rebate') && AKSRT_Rebate::get_instance()->settle($id); wp_safe_redirect($this->page_url('aksrt_rebate', ['aksrt_pay_msg' => $ok ? 'rebate_settled' : 'rebate_failed'])); exit; } public function handle_cancel_rebate(): void { if (!current_user_can(self::CAPABILITY)) { wp_die(esc_html__('权限不足', 'aksrt')); } $id = isset($_POST['rebate_id']) ? (int) $_POST['rebate_id'] : 0; check_admin_referer('aksrt_pay_cancel_rebate_' . $id); $ok = $id > 0 && class_exists('AKSRT_Rebate') && AKSRT_Rebate::get_instance()->cancel($id); wp_safe_redirect($this->page_url('aksrt_rebate', ['aksrt_pay_msg' => $ok ? 'rebate_cancelled' : 'rebate_failed'])); exit; } private function ensure_cap(): void { if (!current_user_can(self::CAPABILITY)) { wp_die(esc_html__('您没有权限访问此页面。', 'aksrt')); } } private function render_header(string $title): void { echo '
'; echo '

' . esc_html($title) . '

'; $this->render_flash(); } private function render_footer(): void { echo '
'; } private function render_flash(): void { if (empty($_GET['aksrt_pay_msg'])) { return; } $code = sanitize_key((string) wp_unslash($_GET['aksrt_pay_msg'])); $map = [ 'rebate_settled' => __('返佣已结算。', 'aksrt'), 'rebate_cancelled' => __('返佣已取消。', 'aksrt'), 'rebate_failed' => __('返佣操作失败。', 'aksrt'), ]; if (!isset($map[$code])) { return; } $class = str_contains($code, 'failed') ? 'notice-error' : 'notice-success'; echo '

' . esc_html($map[$code]) . '

'; } private function page_url(string $slug, array $args = []): string { return add_query_arg(array_merge(['page' => $slug], $args), admin_url('admin.php')); } private function render_pagination(int $pages, int $page_num): void { if ($pages <= 1) { return; } echo '
'; echo paginate_links([ 'base' => add_query_arg('paged', '%#%'), 'format' => '', 'prev_text' => '«', 'next_text' => '»', 'total' => $pages, 'current' => $page_num, ]); echo '
'; } }