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 ? (