import type { OngoingDingWorkflowActiveTask, OngoingDingWorkflowListItem, } from '@/lib/ding-workflow-sync' type WorkflowDetailTableProps = { items: T[] tableLabel: string mobileListLabel?: string tasksForItem?: (item: T) => OngoingDingWorkflowActiveTask[] } function formatDate(value: string | null) { if (!value) return '—' return new Intl.DateTimeFormat('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'Asia/Shanghai', }).format(new Date(value)) } export function workflowNodeNames( project: OngoingDingWorkflowListItem, tasks = project.activeTasks, ) { const names = Array.from(new Set(tasks.map((task) => task.nodeName).filter(Boolean))) if (names.length > 0) return names return project.status.trim().toUpperCase() === 'COMPLETED' ? ['流程已完结'] : ['待进入处理节点'] } export function workflowTaskOwnerNames(tasks: OngoingDingWorkflowActiveTask[]) { const names = Array.from(new Set(tasks.map((task) => task.assigneeName).filter(Boolean))) return names.length > 0 ? names : ['—'] } export function displayWorkflowValue(value: string | null | undefined) { return value?.trim() || '—' } function MilestoneTime({ label, value }: { label: string; value: string | null }) { return (

{formatDate(value)}

{label}

) } export default function WorkflowDetailTable({ items, tableLabel, mobileListLabel = tableLabel, tasksForItem = (item) => item.activeTasks, }: WorkflowDetailTableProps) { return ( <>
{items.map((project) => { const tasks = tasksForItem(project) return ( ) })}
{tableLabel},包含审批表单字段、当前节点与流程里程碑时间
审批单标题 审批编号 需求人 需求部门 平台 品牌 类目 SPU 需求类型 标准出图最长时效限制 分配任务开始时间 当前节点名称 当前节点负责人 审核结束时间

{project.title}

{project.projectType}

{project.businessId || project.id} {displayWorkflowValue(project.initiatorName)} {displayWorkflowValue(project.initiatorDepartment)} {displayWorkflowValue(project.formFields.platform)} {displayWorkflowValue(project.formFields.brand || project.brand)} {displayWorkflowValue(project.formFields.category)} {displayWorkflowValue(project.formFields.spu)} {displayWorkflowValue(project.formFields.demandType)} {displayWorkflowValue(project.formFields.standardOutputDeadline)} {workflowNodeNames(project, tasks).join(' / ')} {workflowTaskOwnerNames(tasks).join(' / ')}
    {items.map((project) => { const tasks = tasksForItem(project) return (
  • {project.title}

    审批编号 {project.businessId || project.id}

    {project.projectType}
    需求人
    {displayWorkflowValue(project.initiatorName)}
    需求部门
    {displayWorkflowValue(project.initiatorDepartment)}
    平台
    {displayWorkflowValue(project.formFields.platform)}
    品牌
    {displayWorkflowValue(project.formFields.brand || project.brand)}
    类目
    {displayWorkflowValue(project.formFields.category)}
    SPU
    {displayWorkflowValue(project.formFields.spu)}
    需求类型
    {displayWorkflowValue(project.formFields.demandType)}
    标准出图最长时效限制
    {displayWorkflowValue(project.formFields.standardOutputDeadline)}
    分配任务开始时间
    当前节点名称
    {workflowNodeNames(project, tasks).join(' / ')}
    当前节点负责人
    {workflowTaskOwnerNames(tasks).join(' / ')}
    审核结束时间
  • ) })}
) }