feat(P15B-1,P15B-6): 完成请假V1闭环

这个提交包含在:
2026-03-07 08:11:24 +08:00
父节点 03c5a78485
当前提交 4ba311199d
共修改 23 个文件,包含 3202 行新增和 308 行删除
+23 -8
查看文件
@@ -13,6 +13,16 @@ import { Tabs, TabsList, TabsTrigger } from "../components/ui/tabs";
const PAGE_SIZE = 20;
function entityLabel(entityType: string | undefined) {
if (entityType === "leave") {
return "请假";
}
if (entityType === "reimbursement") {
return "报销";
}
return entityType || "-";
}
export function WorkflowTasksPage() {
const [searchParams, setSearchParams] = useSearchParams();
@@ -35,7 +45,7 @@ export function WorkflowTasksPage() {
return (
<div className="space-y-6">
<PageHeader title="待我处理" subtitle="审批待办列表(支持筛选与详情动作联动)。" />
<PageHeader title="待我处理" subtitle="审批待办列表,覆盖报销与请假流程。" />
<div className="card-std p-6 space-y-4">
<Tabs
@@ -68,10 +78,10 @@ export function WorkflowTasksPage() {
<p className="rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-600">
{isApiError(query.error)
? `${query.error.code}: ${mapApiErrorMessage(
query.error.code,
query.error.details,
query.error.message,
)}`
query.error.code,
query.error.details,
query.error.message,
)}`
: "加载待办失败,请稍后重试"}
</p>
) : null}
@@ -82,7 +92,7 @@ export function WorkflowTasksPage() {
<TableHeader>
<tr>
<TableHead>任务</TableHead>
<TableHead>报销ID</TableHead>
<TableHead>业务对象</TableHead>
<TableHead>状态</TableHead>
<TableHead>创建时间</TableHead>
<TableHead className="w-24">操作</TableHead>
@@ -96,8 +106,13 @@ export function WorkflowTasksPage() {
<div className="font-medium text-zinc-900">{task.stepName}</div>
<div className="text-xs text-zinc-500">{task.id}</div>
</TableCell>
<TableCell className="font-mono text-xs">
{task.workflowInstance?.entityId}
<TableCell>
<div className="font-medium text-zinc-900">
{entityLabel(task.workflowInstance?.entityType)}
</div>
<div className="font-mono text-xs text-zinc-500">
{task.workflowInstance?.entityId ?? "-"}
</div>
</TableCell>
<TableCell><StatusBadge status={task.status} /></TableCell>
<TableCell>{new Date(task.createdAt).toLocaleString()}</TableCell>