From 94f7c0a302efa47346b6c0cc3d01ccbab871e478 Mon Sep 17 00:00:00 2001 From: WuYongJie Date: Sat, 9 May 2026 13:57:13 +0800 Subject: [PATCH] fix(intake): streamline workflow node headers --- .../NonIntegratedDetailClient.tsx | 266 ++++++------------ 1 file changed, 90 insertions(+), 176 deletions(-) diff --git a/furniture-3d-system/src/app/intake/non-integrated/NonIntegratedDetailClient.tsx b/furniture-3d-system/src/app/intake/non-integrated/NonIntegratedDetailClient.tsx index 22e549d3..f16d24b7 100644 --- a/furniture-3d-system/src/app/intake/non-integrated/NonIntegratedDetailClient.tsx +++ b/furniture-3d-system/src/app/intake/non-integrated/NonIntegratedDetailClient.tsx @@ -17,7 +17,7 @@ import { useRef, useState, } from "react"; -import { ArrowLeft, Ban, CheckCircle2, Search } from "lucide-react"; +import { ArrowLeft, Ban, Search } from "lucide-react"; import CameraScannerModal from "@/components/mobile/CameraScannerModal"; import { ModelPreviewPanel } from "@/components/platform/ModelPreviewPanel"; import Button from "@/components/ui/Button"; @@ -1182,8 +1182,6 @@ const PROJECT_STATUS_COPY: Record< saveMessage: "立项已通过,已展开产品资料、样品评审、基础信息和后续节点", }, }; -const WORKFLOW_DATE_TIME_ZONE = "Asia/Shanghai"; - function getAutoProductYear(createdAt?: string) { const parsedDate = createdAt ? new Date(createdAt) : null; const sourceDate = @@ -1194,27 +1192,6 @@ function getAutoProductYear(createdAt?: string) { return String(sourceDate.getFullYear()); } -function formatWorkflowDateTime(value: string) { - const parsedDate = new Date(value); - if (Number.isNaN(parsedDate.getTime())) return value; - - const parts = new Intl.DateTimeFormat("zh-CN", { - timeZone: WORKFLOW_DATE_TIME_ZONE, - year: "numeric", - month: "2-digit", - day: "2-digit", - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - hourCycle: "h23", - }).formatToParts(parsedDate); - const partMap = Object.fromEntries( - parts.map((part) => [part.type, part.value]), - ); - - return `${partMap.year}-${partMap.month}-${partMap.day} ${partMap.hour}:${partMap.minute}:${partMap.second}`; -} - const UPLOAD_CATEGORY_OPTIONS: UploadCategoryKey[] = [ "未分类", @@ -8159,21 +8136,6 @@ export default function NonIntegratedDetailClient({ PRODUCT_PRICING_WORKSPACE_CATEGORY, displayedProductPricingRowsComplete, ); - const activeWorkflowNodeCategory: WorkflowNodeCategory = - documentWorkspaceView === "detail" - ? NON_INTEGRATED_BASIC_INFO_WORKSPACE_CATEGORY - : activeDocumentWorkspaceCategory; - const activeWorkflowNodeHasContent = - activeWorkflowNodeCategory === NON_INTEGRATED_BASIC_INFO_WORKSPACE_CATEGORY - ? basicInfoHasContent - : activeDocumentWorkspaceHasContent; - const activeWorkflowNodeApprovedAt = - documentWorkspaceApprovedAt[activeWorkflowNodeCategory] ?? ""; - const activeWorkflowNodeIsApproved = isWorkflowNodeConfirmed( - activeWorkflowNodeCategory, - activeWorkflowNodeHasContent, - ); - const activeWorkflowNodeNeedsApproval = !activeWorkflowNodeIsApproved; const basicInfoIsApproved = isWorkflowNodeConfirmed( NON_INTEGRATED_BASIC_INFO_WORKSPACE_CATEGORY, basicInfoHasContent, @@ -11505,7 +11467,7 @@ export default function NonIntegratedDetailClient({ ); if (!hasSyncedLedgerRecord) { - setSaveMessage("请先点击顶部未确认,确认专利申请后再查看明细"); + setSaveMessage("请先确认专利申请后再查看明细"); setSaveMessageType("error"); return; } @@ -11635,8 +11597,34 @@ export default function NonIntegratedDetailClient({ ); } - async function handleApproveCurrentWorkflowNode() { - await handleConfirmWorkflowNode(activeWorkflowNodeCategory); + function renderBasicInfoConfirmationAction() { + if (mode === "create") return null; + + if (basicInfoIsApproved) { + return ( + + 已确认 + + ); + } + + return ( + + void handleConfirmWorkflowNode( + NON_INTEGRATED_BASIC_INFO_WORKSPACE_CATEGORY, + ) + } + > + 确认基础信息 + + ); } async function handleAbandonCurrentProduct() { @@ -11669,110 +11657,6 @@ export default function NonIntegratedDetailClient({ } } - function handleReturnToProductDetail() { - if (embedded && onReturnToList) { - onReturnToList(); - return; - } - - router.push("/intake"); - } - - function renderWorkflowActionBar() { - if (mode === "create") return null; - - const activeCategoryLabel = getDocumentWorkspaceCategoryLabel( - activeWorkflowNodeCategory, - ); - const approveDisabled = - isReadOnly || - !activeWorkflowNodeNeedsApproval || - !activeWorkflowNodeHasContent; - const approveLabel = activeWorkflowNodeNeedsApproval - ? "未确认" - : "已确认"; - const approvalTimeText = activeWorkflowNodeApprovedAt - ? formatWorkflowDateTime(activeWorkflowNodeApprovedAt) - : activeWorkflowNodeHasContent - ? "未确认" - : "无资料"; - - return ( -
-
-
- 当前节点 - / - {activeCategoryLabel} - / - - {approvalTimeText} - - {isFlowAbandoned ? ( - - 已废弃,只能查看和下载 - - ) : null} -
-
- - {canAbandonProduct ? ( - - ) : null} - {!linkEntryView ? ( - - ) : null} -
-
-
- ); - } - async function handleUploadFilesChange( event: ChangeEvent, forcedCategory?: DocumentWorkspaceCategory, @@ -15545,12 +15429,19 @@ function renderFactoryQualityWorkspace() { className="flex min-h-0 flex-1 flex-col overflow-hidden rounded-apple-xl border border-apple-separator bg-apple-bg-primary" >
-

- 开品参考填写 -

-

- 开品前先记录参考图、品牌方向、类目、竞品、开品理由和设计卖点。立项通过后再补产品资料、样品评审和完整基础信息。 -

+
+
+

+ 开品参考填写 +

+

+ 开品前先记录参考图、品牌方向、类目、竞品、开品理由和设计卖点。立项通过后再补产品资料、样品评审和完整基础信息。 +

+
+
+ {renderDocumentWorkspaceConfirmationAction()} +
+
@@ -15801,7 +15692,7 @@ function renderFactoryQualityWorkspace() { 样品评审后判断是否申请专利;申请后记录申请号、结果和申请缴费。

-
+
是否申请专利 @@ -15840,6 +15731,9 @@ function renderFactoryQualityWorkspace() { ); })}
+
+ {renderDocumentWorkspaceConfirmationAction()} +
@@ -16243,11 +16137,13 @@ function renderFactoryQualityWorkspace() { 先汇总前置资料,再记录会议判断。内容字段后面可以继续按你们真实会议优化。

- - {statusCopy.label} - +
+ + {statusCopy.label} + +
@@ -17540,16 +17436,25 @@ function renderFactoryQualityWorkspace() {

{isReadOnly ? null : ( - - handleDeleteReviewIssue(selectedReviewIssue.id) - } - > - 删除问题 - +
+ + 新增问题 + + + handleDeleteReviewIssue(selectedReviewIssue.id) + } + > + 删除问题 + +
)} @@ -17669,7 +17574,7 @@ function renderFactoryQualityWorkspace() {
)} @@ -17774,7 +17679,6 @@ function renderFactoryQualityWorkspace() { isDocumentWorkspaceMode ? "overflow-hidden p-2" : "overflow-auto p-3" }`} > - {renderWorkflowActionBar()}
+ {canAbandonProduct ? ( + void handleAbandonCurrentProduct()} + disabled={mode !== "edit" || isFlowAbandoned} + className="!border-[#f1c4ca] !text-[#a32135] hover:!bg-[#fff7f8]" + > + + ) : null} + {renderBasicInfoConfirmationAction()} +
+ } >
@@ -20034,12 +19954,6 @@ function renderFactoryQualityWorkspace() { > 新增轮次 - {isCurrentUserAdmin ? (