import React from 'react'; import { ContentTemplate } from '@/components/templates'; import { Button, Icon } from '@/components/atoms'; import { isAuthed } from '@/services/auth'; import { getTask, grabTask } from '@/services/tasks'; import '@/styles/tasks.css'; const MODE = { grab: '抢单', bid: '投标', assign: '指派', recommend: '推荐' }; const money = (a, b) => (a || b) ? (a && b && a !== b ? `¥${a}–${b}` : `¥${a || b}`) : '面议'; const getId = () => new URLSearchParams((window.location.hash.split('?')[1] || '')).get('id'); export default function TaskDetail() { const [task, setTask] = React.useState(null); const [err, setErr] = React.useState(''); const [loaded, setLoaded] = React.useState(false); const [busy, setBusy] = React.useState(false); React.useEffect(() => { getId() && getTask(getId()).then((t) => { setTask(t || null); setLoaded(true); }); }, []); const reasons = Array.isArray(task && task.accept_reasons) ? task.accept_reasons : []; const can = task && task.can_accept; // true/false/undefined const onGrab = async () => { if (!isAuthed()) { setErr('抢单需先登录(OPC 端身份)。'); return; } setBusy(true); setErr(''); const r = await grabTask(task.id); setBusy(false); if (r.ok) setErr('抢单成功,可在「我的接单」查看。'); else setErr(r.error || '抢单失败'); }; if (!loaded) return

加载中…

; if (!task) return

任务不存在或已下线。

; return (
返回任务广场
{task.category || '综合'} {MODE[task.mode] || '抢单'} {task.exclusive && 独占} {task.status === 'published' ? '待接单' : task.status} {can === true && ✓ 你可抢} {can === false && 条件不符}

{task.title}

{task.task_code && 短码 {task.task_code}}

任务说明

{task.description}

{task.tags &&
{String(task.tags).split(',').filter(Boolean).map((x) => {x})}
}
); }