fix(intake): 确认节点先保存再打勾,SKU未入库提示修正
This commit is contained in:
parent
bfcc1bdc39
commit
975ecee94a
@ -189,6 +189,22 @@ export function useNonIntegratedWorkflowConfirmActionController({
|
||||
}
|
||||
}
|
||||
|
||||
const saved = await persistEditedProduct({
|
||||
successMessage: `${getDocumentWorkspaceCategoryLabel(category)}已确认`,
|
||||
errorFallbackMessage: `${getDocumentWorkspaceCategoryLabel(category)}确认保存失败,请稍后再试`,
|
||||
overrides: {
|
||||
documentWorkspaceConfirmations: nextConfirmations,
|
||||
documentWorkspaceApprovedAt: nextApprovedAt,
|
||||
...(nextReviewRounds ? { reviewRounds: nextReviewRounds } : {}),
|
||||
...(nextFinishedSampleShipmentRows
|
||||
? { finishedSampleShipmentRows: nextFinishedSampleShipmentRows }
|
||||
: {}),
|
||||
},
|
||||
});
|
||||
if (!saved) {
|
||||
return;
|
||||
}
|
||||
// 保存成功后才更新页面状态(先保存再打勾,避免失败时页面显示已确认)
|
||||
setDocumentWorkspaceConfirmations(nextConfirmations);
|
||||
setDocumentWorkspaceApprovedAt(nextApprovedAt);
|
||||
if (nextReviewRounds) {
|
||||
@ -216,19 +232,6 @@ export function useNonIntegratedWorkflowConfirmActionController({
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
await persistEditedProduct({
|
||||
successMessage: `${getDocumentWorkspaceCategoryLabel(category)}已确认`,
|
||||
errorFallbackMessage: `${getDocumentWorkspaceCategoryLabel(category)}确认保存失败,请稍后再试`,
|
||||
overrides: {
|
||||
documentWorkspaceConfirmations: nextConfirmations,
|
||||
documentWorkspaceApprovedAt: nextApprovedAt,
|
||||
...(nextReviewRounds ? { reviewRounds: nextReviewRounds } : {}),
|
||||
...(nextFinishedSampleShipmentRows
|
||||
? { finishedSampleShipmentRows: nextFinishedSampleShipmentRows }
|
||||
: {}),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function handleConfirmDocumentWorkspaceCategory(
|
||||
|
||||
@ -292,16 +292,7 @@ export function useProductFactoryRowController({
|
||||
delete nextApprovedAt[PRODUCT_FACTORY_WORKSPACE_CATEGORY];
|
||||
}
|
||||
|
||||
setFactoryRows(nextRows);
|
||||
setDocumentWorkspaceConfirmations(nextConfirmations);
|
||||
setDocumentWorkspaceApprovedAt(nextApprovedAt);
|
||||
if (documentWorkspaceRevisionSignatureRef.current) {
|
||||
documentWorkspaceRevisionSignatureRef.current = {
|
||||
...documentWorkspaceRevisionSignatureRef.current,
|
||||
[PRODUCT_FACTORY_WORKSPACE_CATEGORY]: JSON.stringify(nextRows),
|
||||
};
|
||||
}
|
||||
await persistEditedProduct({
|
||||
const saved = await persistEditedProduct({
|
||||
successMessage: allRowsConfirmed
|
||||
? "产品定厂已确认"
|
||||
: "当前批次产品定厂已确认",
|
||||
@ -314,6 +305,19 @@ export function useProductFactoryRowController({
|
||||
targetSkuIds: Array.from(targetSkuIds),
|
||||
},
|
||||
});
|
||||
if (!saved) {
|
||||
return;
|
||||
}
|
||||
// 保存成功后才更新页面状态(先保存再打勾,避免失败时页面显示已确认)
|
||||
setFactoryRows(nextRows);
|
||||
setDocumentWorkspaceConfirmations(nextConfirmations);
|
||||
setDocumentWorkspaceApprovedAt(nextApprovedAt);
|
||||
if (documentWorkspaceRevisionSignatureRef.current) {
|
||||
documentWorkspaceRevisionSignatureRef.current = {
|
||||
...documentWorkspaceRevisionSignatureRef.current,
|
||||
[PRODUCT_FACTORY_WORKSPACE_CATEGORY]: JSON.stringify(nextRows),
|
||||
};
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@ -56,6 +56,21 @@ function readText(value: unknown) {
|
||||
return typeof value === 'string' ? value.trim() : ''
|
||||
}
|
||||
|
||||
function findMissingTargetSkuItemIds(
|
||||
record: IntakeNonIntegratedPermissionTarget,
|
||||
targetSkuItemIds?: readonly string[],
|
||||
) {
|
||||
const targetIds = Array.from(
|
||||
new Set((targetSkuItemIds ?? []).map(readText).filter(Boolean)),
|
||||
)
|
||||
if (targetIds.length === 0) return []
|
||||
|
||||
const savedSkuItemIds = new Set(
|
||||
(record.skuItems ?? []).map((item) => readText(item.skuItemId)).filter(Boolean),
|
||||
)
|
||||
return targetIds.filter((skuItemId) => !savedSkuItemIds.has(skuItemId))
|
||||
}
|
||||
|
||||
function readPayloadField(payload: unknown, key: string) {
|
||||
return isRecord(payload) ? readText(payload[key]) : ''
|
||||
}
|
||||
@ -476,6 +491,18 @@ class IntakeNonIntegratedScopeService {
|
||||
category?: string | null,
|
||||
targetSkuItemIds?: readonly string[],
|
||||
): Promise<void> {
|
||||
// 先检查 SKU 是否已入库,不存在直接提示"SKU 尚未保存",不要报"没有权限"
|
||||
const missingTargetSkuItemIds =
|
||||
category === PRODUCT_FACTORY_WORKSPACE_CATEGORY
|
||||
? findMissingTargetSkuItemIds(record, targetSkuItemIds)
|
||||
: []
|
||||
if (missingTargetSkuItemIds.length > 0) {
|
||||
throw new AppError(
|
||||
ErrorCode.VALIDATION_FAILED,
|
||||
'SKU 尚未保存,请先保存基础信息后再确认产品定厂',
|
||||
)
|
||||
}
|
||||
|
||||
if (
|
||||
await this.canWriteWorkspaceRecordWithSettings(
|
||||
record,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user