9b5eb3fbbf
- 新增 services/base.js 统一 API_BASE(VITE_API_BASE 可覆盖),9 个 service 去硬编码 - 登录页去账密(手机号/微信/小程序);二维码倒计时+失效模糊蒙版+手动刷新(绝不自动刷新、失效即停轮询) - AuthGate/Login logo 换标准 /logo.png;Profile 挂载即刷新绑定状态;Header refreshMe 同步头像
59 lines
1.8 KiB
JavaScript
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: '网络异常' };
|
|
}
|
|
}
|