Files
training/website/src/services/tasks.js
T
Pine 9b5eb3fbbf feat(website): API基址统一+扫码登录倒计时/失效蒙版+绑定状态修复
- 新增 services/base.js 统一 API_BASE(VITE_API_BASE 可覆盖),9 个 service 去硬编码
- 登录页去账密(手机号/微信/小程序);二维码倒计时+失效模糊蒙版+手动刷新(绝不自动刷新、失效即停轮询)
- AuthGate/Login logo 换标准 /logo.png;Profile 挂载即刷新绑定状态;Header refreshMe 同步头像
2026-08-28 17:20:31 +08:00

59 lines
1.8 KiB
JavaScript

/** 任务系统(OPC 端):任务广场(待接单) / 我的接单 / 抢单。走平台 /opc 端点,需登录(opc_member)。 */
import { getToken } from '@/services/auth';
import { API_BASE } from './base';
function authHeaders() {
const t = getToken();
return { 'Content-Type': 'application/json', ...(t ? { Authorization: `Bearer ${t}` } : {}) };
}
/** 任务广场(已发布待接单任务,公开可见,无需登录) */
export async function listTasks() {
try {
const res = await fetch(`${API_BASE}/opc/tasks`);
if (!res.ok) return { ok: false, status: res.status };
const d = await res.json().catch(() => ({}));
return { ok: true, items: Array.isArray(d.items) ? d.items : [] };
} catch {
return { ok: false, status: 0 };
}
}
/** 任务详情(公开可见) */
export async function getTask(id) {
try {
const res = await fetch(`${API_BASE}/opc/tasks/${encodeURIComponent(id)}`);
if (!res.ok) return null;
return await res.json().catch(() => null);
} catch {
return null;
}
}
/** 我的任务看板 */
export async function myTasks() {
try {
const res = await fetch(`${API_BASE}/opc/my-tasks`, { headers: authHeaders() });
if (!res.ok) return { ok: false, status: res.status };
const d = await res.json().catch(() => ({}));
return { ok: true, items: Array.isArray(d.items) ? d.items : [] };
} catch {
return { ok: false, status: 0 };
}
}
/** 抢单 */
export async function grabTask(id) {
try {
const res = await fetch(`${API_BASE}/opc/tasks/${encodeURIComponent(id)}/grab`, {
method: 'POST', headers: authHeaders(),
});
const d = await res.json().catch(() => ({}));
if (!res.ok) return { ok: false, error: d.detail || d.message || '抢单失败' };
return { ok: true, task: d };
} catch {
return { ok: false, error: '网络异常' };
}
}