feat(task): task detail

This commit is contained in:
2026-02-09 18:20:33 +08:00
parent f0298b91e3
commit 3f284d057c
19 changed files with 435 additions and 279 deletions

View File

@@ -14,12 +14,13 @@ import { notifications } from "@mantine/notifications"
import { IconRefresh } from "@tabler/icons-react"
import { DataTable, DataTableColumn } from "mantine-datatable"
import { useRouter, useSearchParams } from "next/navigation"
import { useCallback, useEffect, useMemo, useState } from "react"
import { JSX, useCallback, useEffect, useMemo, useState } from "react"
import TaskStatusTag from "./components/TaskStatusTag"
import { runCommand } from "./util"
export default function OwnTaskTableContainer(props: {
info: ProjectDetail.DataProps | undefined
menuAction?: () => JSX.Element
userEnums: {
allEnum: Map<any, any>
labelEnum: Map<any, any>
@@ -27,7 +28,7 @@ export default function OwnTaskTableContainer(props: {
review2Enum: Map<any, any>
}
}) {
const { info, userEnums } = props
const { info, menuAction, userEnums } = props
const urlParams = useSearchParams()
const id = urlParams.get("id")
const type = urlParams.get("type")
@@ -40,7 +41,7 @@ export default function OwnTaskTableContainer(props: {
const user_name = usePermissionStore((s) => s.user_name)
const user_password = usePermissionStore((s) => s.user_password)
const { params, total, setParams, resetParams, setPagination, setTotal } =
const { params, total, resetParams, setPagination, setTotal } =
useOwnTaskStore()
const [form, setForm] = useState<{
@@ -89,6 +90,7 @@ export default function OwnTaskTableContainer(props: {
}, [form.search_id, form.search_status, params, projectId, user_id])
const load = useCallback(async () => {
if (!queryTrigger) return
if (projectId === -1) return
setLoading(true)
try {
@@ -235,85 +237,90 @@ export default function OwnTaskTableContainer(props: {
p="sm"
radius="md"
style={{ borderColor: "rgba(0,0,0,0.06)" }}>
<Group justify="space-between" wrap="wrap" gap="sm">
<Group gap="sm" wrap="wrap">
<TextInput
size="xs"
label="任务ID"
value={form.search_id}
onChange={(e) =>
setForm((s) => ({ ...s, search_id: e.currentTarget.value }))
}
style={{ width: 160 }}
/>
<Select
size="xs"
label="状态"
data={Object.entries(OwnTaskStatusOpts).map(([value, label]) => ({
value,
label,
}))}
value={form.search_status}
onChange={(v) =>
setForm((s) => ({ ...s, search_status: v ?? "0" }))
}
allowDeselect={false}
style={{ width: 160 }}
/>
<Button
size="xs"
leftSection={<IconRefresh size={16} />}
loading={loading}
onClick={() => {
setPagination(1, params.page_size ?? 20)
setQueryTrigger((v) => v + 1)
}}>
</Button>
</Group>
<Stack gap="sm">
{menuAction ? <div>{menuAction()}</div> : null}
<Group justify="space-between" wrap="wrap" gap="sm">
<Group gap="sm" wrap="wrap">
<TextInput
size="xs"
label="任务ID"
value={form.search_id}
onChange={(e) =>
setForm((s) => ({ ...s, search_id: e.currentTarget.value }))
}
style={{ width: 160 }}
/>
<Select
size="xs"
label="状态"
data={Object.entries(OwnTaskStatusOpts).map(
([value, label]) => ({
value,
label,
})
)}
value={form.search_status}
onChange={(v) =>
setForm((s) => ({ ...s, search_status: v ?? "0" }))
}
allowDeselect={false}
style={{ width: 160 }}
/>
<Button
size="xs"
leftSection={<IconRefresh size={16} />}
loading={loading}
onClick={() => {
setPagination(1, params.page_size ?? 20)
setQueryTrigger((v) => v + 1)
}}>
</Button>
</Group>
<Group gap="xs" wrap="wrap">
<Button
size="xs"
variant="default"
disabled={!isLabel}
onClick={() => handleAcquireTask(1)}>
</Button>
<Button
size="xs"
variant="default"
disabled={!isReview1}
onClick={() => handleAcquireTask(2)}>
</Button>
<Button
size="xs"
variant="default"
disabled={!isReview2}
onClick={() => handleAcquireTask(3)}>
</Button>
<Button
size="xs"
variant="default"
onClick={() => {
resetParams()
setForm({ search_id: "", search_status: "0" })
setQueryTrigger((v) => v + 1)
}}>
</Button>
<Button
size="xs"
onClick={() => {
setPagination(1, params.page_size ?? 20)
setQueryTrigger((v) => v + 1)
}}>
</Button>
<Group gap="xs" wrap="wrap">
<Button
size="xs"
variant="default"
disabled={!isLabel}
onClick={() => handleAcquireTask(1)}>
</Button>
<Button
size="xs"
variant="default"
disabled={!isReview1}
onClick={() => handleAcquireTask(2)}>
</Button>
<Button
size="xs"
variant="default"
disabled={!isReview2}
onClick={() => handleAcquireTask(3)}>
</Button>
<Button
size="xs"
variant="default"
onClick={() => {
resetParams()
setForm({ search_id: "", search_status: "0" })
setQueryTrigger((v) => v + 1)
}}>
</Button>
<Button
size="xs"
onClick={() => {
setPagination(1, params.page_size ?? 20)
setQueryTrigger((v) => v + 1)
}}>
</Button>
</Group>
</Group>
</Group>
</Stack>
</Paper>
<Group gap={0} align="stretch" style={{ flex: 1, minHeight: 0 }}>