feat(task): task detail
This commit is contained in:
@@ -26,7 +26,7 @@ import {
|
||||
} from "@tabler/icons-react"
|
||||
import { DataTable, DataTableColumn } from "mantine-datatable"
|
||||
import { useSearchParams } from "next/navigation"
|
||||
import { useCallback, useEffect, useMemo, useState } from "react"
|
||||
import { JSX, useCallback, useEffect, useMemo, useState } from "react"
|
||||
import DispatchModal from "./components/DispatchModal"
|
||||
import ReleaseModal from "./components/ReleaseModal"
|
||||
import TaskStatusTag from "./components/TaskStatusTag"
|
||||
@@ -34,6 +34,7 @@ import WorkflowModal from "./components/WorkflowModal"
|
||||
|
||||
export default function TaskTableContainer(props: {
|
||||
info: ProjectDetail.DataProps | undefined
|
||||
menuAction?: () => JSX.Element
|
||||
userEnums: {
|
||||
allEnum: Map<any, any>
|
||||
labelEnum: Map<any, any>
|
||||
@@ -41,13 +42,17 @@ export default function TaskTableContainer(props: {
|
||||
review2Enum: Map<any, any>
|
||||
}
|
||||
}) {
|
||||
const { info, userEnums } = props
|
||||
const { info, menuAction, userEnums } = props
|
||||
false && console.log(info)
|
||||
|
||||
const urlParams = useSearchParams()
|
||||
const id = urlParams.get("id")
|
||||
const projectId =
|
||||
typeof id === "string" && !isNaN(Number(id)) ? Number(id) : -1
|
||||
|
||||
const currentUid = usePermissionStore((s) => s.user_id)
|
||||
false && console.log(currentUid)
|
||||
|
||||
const { params, total, setPagination, resetParams, setTotal } =
|
||||
useAllTaskStore()
|
||||
|
||||
@@ -101,6 +106,7 @@ export default function TaskTableContainer(props: {
|
||||
}, [form.search_id, form.search_status, params, projectId])
|
||||
|
||||
const load = useCallback(async () => {
|
||||
if (!queryTrigger) return
|
||||
if (projectId === -1) return
|
||||
setLoading(true)
|
||||
try {
|
||||
@@ -211,61 +217,66 @@ export default function TaskTableContainer(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(TaskStatusOpts).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={() => 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(TaskStatusOpts).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={() => setQueryTrigger((v) => v + 1)}>
|
||||
刷新
|
||||
</Button>
|
||||
</Group>
|
||||
|
||||
<Group gap="xs" wrap="wrap">
|
||||
<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"
|
||||
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 }}>
|
||||
@@ -300,13 +311,13 @@ export default function TaskTableContainer(props: {
|
||||
<WorkflowModal
|
||||
opened={workflowTaskId !== null}
|
||||
taskId={workflowTaskId}
|
||||
onClose={() => setWorkflowTaskId(null)}
|
||||
onCloseAction={() => setWorkflowTaskId(null)}
|
||||
/>
|
||||
<DispatchModal
|
||||
opened={dispatchRecord !== null}
|
||||
record={dispatchRecord}
|
||||
userOptions={userOptions}
|
||||
onClose={(refresh) => {
|
||||
onCloseAction={(refresh) => {
|
||||
setDispatchRecord(null)
|
||||
if (refresh) setQueryTrigger((v) => v + 1)
|
||||
}}
|
||||
@@ -314,7 +325,7 @@ export default function TaskTableContainer(props: {
|
||||
<ReleaseModal
|
||||
opened={releaseRecord !== null}
|
||||
record={releaseRecord}
|
||||
onClose={(refresh) => {
|
||||
onCloseAction={(refresh) => {
|
||||
setReleaseRecord(null)
|
||||
if (refresh) setQueryTrigger((v) => v + 1)
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user