ensure_cap(); $this->render_header(__('创作分成', 'aksrt')); if (!class_exists('\AKSRT\Payment\Revenue')) { 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']) : 0; $page_num = max(1, (int) ($_GET['paged'] ?? 1)); $per_page = 20; $svc = \AKSRT\Payment\Revenue::get_instance(); $stats = $user_id > 0 ? $svc->get_stats($user_id) : $svc->get_stats(); echo '

' . esc_html(sprintf( /* translators: 1: total 2: pending 3: settled */ __('合计 %1$s · 待结算 %2$s · 已结算 %3$s', 'aksrt'), number_format((float) ($stats['total'] ?? 0), 2), number_format((float) ($stats['pending'] ?? 0), 2), number_format((float) ($stats['settled'] ?? 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) ($result['max_pages'] ?? 1)); 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_income_' . $id); submit_button(__('结算', 'aksrt'), 'small', '', false); echo '
'; } else { echo '—'; } echo '
'; $this->render_pagination($pages, $page_num); $this->render_footer(); } public function handle_settle_income(): void { if (!current_user_can(self::CAPABILITY)) { wp_die(esc_html__('权限不足', 'aksrt')); } $id = isset($_POST['revenue_id']) ? (int) $_POST['revenue_id'] : 0; check_admin_referer('aksrt_pay_settle_income_' . $id); $ok = $id > 0 && class_exists('\AKSRT\Payment\Revenue') && \AKSRT\Payment\Revenue::get_instance()->settle($id); wp_safe_redirect($this->page_url('aksrt_income', ['aksrt_pay_msg' => $ok ? 'income_settled' : 'income_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 = [ 'income_settled' => __('分成已结算。', 'aksrt'), 'income_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 '
'; } }