()
| 2600 | } |
| 2601 | |
| 2602 | const runner = async () => { |
| 2603 | isLoadingBindTaskList = true; |
| 2604 | if (!silent) { |
| 2605 | setButtonLoading("refresh-bind-task-btn", "刷新中...", true); |
| 2606 | } |
| 2607 | try { |
| 2608 | const params = new URLSearchParams({ |
| 2609 | page: String(bindTaskState.page), |
| 2610 | page_size: String(bindTaskState.pageSize), |
| 2611 | }); |
| 2612 | if (bindTaskState.status) params.set("status", bindTaskState.status); |
| 2613 | if (bindTaskState.search) params.set("search", bindTaskState.search); |
| 2614 | |
| 2615 | const data = await api.get(`/payment/bind-card/tasks?${params.toString()}`, { |
| 2616 | timeoutMs: 45000, |
| 2617 | retry: silent ? 0 : 1, |
| 2618 | requestKey: "payment:bind-task-list", |
| 2619 | cancelPrevious: true, |
| 2620 | silentNetworkError: silent, |
| 2621 | silentTimeoutError: silent, |
| 2622 | priority: silent ? "low" : "normal", |
| 2623 | }); |
| 2624 | const tasks = data?.tasks || []; |
| 2625 | |
| 2626 | if (!tasks.length) { |
| 2627 | tbody.innerHTML = ` |
| 2628 | <tr> |
| 2629 | <td colspan="8"><div class="empty-state">暂无绑卡任务</div></td> |
| 2630 | </tr> |
| 2631 | `; |
| 2632 | return; |
| 2633 | } |
| 2634 | |
| 2635 | tbody.innerHTML = tasks.map((task) => ` |
| 2636 | <tr> |
| 2637 | <td>${task.id}</td> |
| 2638 | <td>${escapeHtml(task.account_email || "-")}</td> |
| 2639 | <td>${String(task.plan_type || "-").toUpperCase()}</td> |
| 2640 | <td><span class="bind-task-badge ${escapeHtml(task.status || "")}">${escapeHtml(getTaskStatusText(task.status))}</span></td> |
| 2641 | <td> |
| 2642 | <a class="bind-task-url" href="${escapeHtml(task.checkout_url || "#")}" target="_blank" rel="noopener noreferrer" title="${escapeHtml(task.checkout_url || "")}"> |
| 2643 | ${escapeHtml(task.checkout_url || "-")} |
| 2644 | </a> |
| 2645 | </td> |
| 2646 | <td>${escapeHtml(task.checkout_source || "-")}</td> |
| 2647 | <td>${formatBeijingDateTime(task.created_at)}</td> |
| 2648 | <td> |
| 2649 | <div class="bind-task-actions"> |
| 2650 | <button class="btn btn-primary bind-task-action-btn" onclick="openBindCardTask(${task.id})">打开</button> |
| 2651 | <button class="btn btn-primary bind-task-action-btn" onclick="markBindCardTaskUserAction(${task.id})">我已完成支付</button> |
| 2652 | <button class="btn btn-secondary bind-task-action-btn" onclick="syncBindCardTask(${task.id})">同步订阅</button> |
| 2653 | <button class="btn btn-danger bind-task-action-btn" onclick="deleteBindCardTask(${task.id})">删除</button> |
| 2654 | </div> |
| 2655 | ${task.last_error ? `<div class="hint" style="margin-top:6px;color:var(--danger-color);" title="${escapeHtml(task.last_error)}">${escapeHtml(task.last_error)}</div>` : ""} |
| 2656 | </td> |
| 2657 | </tr> |
| 2658 | `).join(""); |
| 2659 | } catch (e) { |
no test coverage detected