+ {children} +
+ ); +} diff --git a/src/components/ui/empty-state.tsx b/src/components/ui/empty-state.tsx new file mode 100644 index 0000000..8da8c55 --- /dev/null +++ b/src/components/ui/empty-state.tsx @@ -0,0 +1,43 @@ +import type { ReactNode } from "react"; + +type EmptyStateProps = { + actions?: ReactNode; + description: string; + eyebrow?: string; + icon?: ReactNode; + title: string; +}; + +function joinClasses(...values: Array+ {eyebrow} +
++ {description} +
+ {actions ? ( ++ {eyebrow} +
++ {eyebrow} +
+ ) : null} +后续接入建议:
+1. 统一由 Next.js BFF 代理会话态。
+2. 把审核动作、设置页和资源库的权限控制收口到服务端。
+3. 再决定是否引入单点登录或更细的角色分层。
+ + 返回后台首页 + ++ {TITLE_MESSAGE} +
+{message}
++ {item.name} +
++ {item.description} +
+
+ {item.previewUri}
+
+ {asset.label}
+{asset.stepLabel}
+
+ {asset.uri}
+
+ 最终结果
++ 以最终图为空态为准,不把后端未产出的内容伪装成失败。 +
+过程资产
++ 按步骤产物聚合展示,便于追查哪一环引入了 mock 或异常结果。 +
++ Order status +
++ Customer level +
++ {formatCustomerLevel(viewModel.customerLevel)} +
++ Service mode +
++ {formatServiceMode(viewModel.serviceMode)} +
++ Current step +
++ 订单 #{submissionSuccess.orderId} 已创建,正在跳转到详情页。 +
++ 工作流 ID {submissionSuccess.workflowId ?? "未返回"} +
++ Workflow ID +
++ {viewModel.workflowId ?? "暂未分配"} +
++ Current step +
++ {selectedItem.name} +
++ {selectedItem.description} +
++ {selectedItem.previewUri} +
++ 选择后会在摘要卡中同步显示资源名称与提交 ID。 +
+ )} ++ {TITLE_MESSAGE} +
++ {message} +
++ 订单 #{order.orderId} +
++ 工作流 {order.workflowId ?? "未关联"} +
++ 第 {Math.min(currentPage, effectiveTotalPages)} / {effectiveTotalPages} 页 +
++ 当前订单 #{order.orderId} +
++ 选中资产:{selectedAsset ? `${selectedAsset.label} (#${selectedAsset.id})` : "未选择"} +
++ {selectedAsset.isMock ? "Mock preview asset" : "Preview asset"} +
++ 当前阶段优先保证审核流程可用,因此预览面板直接展示资产信息卡;真实图片 URI 可在后续 Task 7 的详情页复用。 +
+
+ {selectedAsset.uri}
+
+ + 工作流 {item.workflowId} + {item.workflowType ? ` / ${item.workflowType}` : ""} +
++ 当前基准资产:{selectedAsset.label} (#{selectedAsset.id}) +
++ {pendingManualConfirm + ? "已存在待确认修订稿,可直接确认继续流水线。" + : "登记新的人工修订稿会把当前审核任务切到待确认状态。"} +
++ Current step +
++ Failure count +
++ {workflow.failureCount} +
++ {step.label} +
+{step.errorMessage}
+ ) : null} ++ Order status +
++ Workflow +
++ {orderDetail.workflowId ?? "暂未分配"} +
++ Current step +
++ Workflow status +
+1. Next.js 页面统一请求本站 `/api/*`。
+2. FastAPI 基地址通过环境变量控制。
+3. 登录与权限策略将在后续后端能力准备好后补齐。
++ Workflow type +
++ {viewModel.workflowType} +
++ Current step +
++ Workflow status +
++ Failure focus +
++ 失败步骤 {viewModel.failureCount} 个 +
++ {step.label} +
++ {step.errorMessage} +
+ ) : null} + + {step.mockAssetUris.length ? ( +
+ {uri}
+
+ ))}
+ + 订单 #{item.orderId} +
++ {item.workflowId} / {item.workflowType} +
++ 第 {Math.min(currentPage, effectiveTotalPages)} / {effectiveTotalPages} 页 +
+