fix: default intake sku sales status to 销售

This commit is contained in:
WuYongJie 2026-07-08 15:45:49 +08:00
parent 30b1c5740d
commit 071021fe54
7 changed files with 26 additions and 11 deletions

View File

@ -24,6 +24,7 @@ import { isSeriesComponentStockLinkedSkuItem } from "./skuDerivationHelpers";
import {
getEditableInstallationMode,
INSTALL_METHOD_OPTIONS,
normalizeSkuSalesStatus,
SKU_BOARD_MATERIAL_TYPE_OPTIONS,
SKU_COLUMN_DEFAULT_WIDTHS,
SKU_SALES_STATUS_OPTIONS,
@ -469,7 +470,7 @@ export function SkuInfoRow({
>
<InlineSelect
ariaLabel={`${item.model || `SKU ${index + 1}`} 销售状态`}
value={item.salesStatus ?? ""}
value={normalizeSkuSalesStatus(item.salesStatus)}
options={SKU_SALES_STATUS_OPTIONS}
placeholder="请选择"
readOnly={skuRowReadOnly}

View File

@ -19,6 +19,7 @@ import {
DEFAULT_ASSET_SKU_SALES_STATUS,
DEFAULT_STEEL_ASSET_SKU_EXECUTE_STANDARD,
NON_BOARD_SKU_BOARD_MATERIAL_TYPE,
normalizeSkuSalesStatus,
normalizeSkuVersionNo,
} from "@/app/intake/non-integrated/workspaces/basic-info/skuFieldConfig";
import {
@ -195,7 +196,7 @@ function createSkuItemFromSeriesDraftSku(
skuFields?.nationalStandardCompliant?.trim() ?? "",
manufacturer: skuFields?.manufacturer?.trim() ?? "",
manufacturerCode: skuFields?.manufacturerCode?.trim().toUpperCase() ?? "",
salesStatus: skuFields?.salesStatus?.trim() ?? "",
salesStatus: normalizeSkuSalesStatus(skuFields?.salesStatus),
tagMaterial: skuFields?.tagMaterial?.trim() ?? "",
model3dFileName: skuFields?.model3dFileName?.trim() ?? "",
model3dPreviewNodes: Array.isArray(option.model3dPreviewNodes)
@ -945,7 +946,7 @@ export function mergeSeriesComponentAssetSkuItems(
nationalStandardCompliant: assetItem.nationalStandardCompliant,
manufacturer: assetItem.manufacturer,
manufacturerCode: assetItem.manufacturerCode,
salesStatus: assetItem.salesStatus,
salesStatus: normalizeSkuSalesStatus(assetItem.salesStatus),
tagMaterial: assetItem.tagMaterial,
image: assetItem.image || matchedCurrent.image,
imageName: assetItem.imageName || matchedCurrent.imageName,

View File

@ -3,6 +3,7 @@ import {
buildNonIntegratedSkuId,
type NonIntegratedSkuItem,
} from "../../nonIntegratedStorage";
import { DEFAULT_ASSET_SKU_SALES_STATUS } from "./skuFieldConfig";
import {
EMPTY_PREVIEW_NODE_OFFSET_MAP,
EMPTY_PREVIEW_NODE_ROTATION_MAP,
@ -35,7 +36,7 @@ export function createEmptySkuItem(): NonIntegratedSkuItem {
manufacturer: "",
manufacturerCode: "",
minimumOrderQuantity: "",
salesStatus: "",
salesStatus: DEFAULT_ASSET_SKU_SALES_STATUS,
tagMaterial: "",
model3dFileName: "",
model3dDataUrl: "",

View File

@ -28,6 +28,7 @@ import {
import { isSeriesComponentAssetSkuItem } from "./seriesComponentAssetSkuHelpers";
import { resolveExecutionStandardOption } from "./detailValueHelpers";
import {
normalizeSkuSalesStatus,
normalizeNationalStandardCompliance,
normalizeSetCountValue,
normalizeSkuVersionNo,
@ -124,7 +125,7 @@ export function deriveSkuItem(
manufacturer: item.manufacturer.trim(),
manufacturerCode: item.manufacturerCode.trim().toUpperCase(),
minimumOrderQuantity: item.minimumOrderQuantity?.trim() ?? "",
salesStatus: item.salesStatus?.trim() ?? "",
salesStatus: normalizeSkuSalesStatus(item.salesStatus),
boardMaterialType: item.boardMaterialType?.trim() ?? "",
tagMaterial: formValues.tagMaterial.trim() || item.tagMaterial.trim(),
};
@ -180,7 +181,7 @@ export function buildSkuItemFromImportedRow(
manufacturer,
manufacturerCode,
minimumOrderQuantity: row.minimumOrderQuantity.trim(),
salesStatus: row.salesStatus.trim(),
salesStatus: normalizeSkuSalesStatus(row.salesStatus),
tagMaterial: formValues.tagMaterial.trim() || baseItem.tagMaterial,
source: SKU_WORKBOOK_SOURCE,
sourceTable: SKU_WORKBOOK_SOURCE,
@ -222,7 +223,7 @@ export function buildSkuWorkbookExportRows({
manufacturerCode: skuItems[index]?.manufacturerCode?.trim() ?? "",
minimumOrderQuantity:
skuItems[index]?.minimumOrderQuantity?.trim() ?? "",
salesStatus: skuItems[index]?.salesStatus?.trim() ?? "",
salesStatus: normalizeSkuSalesStatus(skuItems[index]?.salesStatus),
batchNo: `批次${item.batchNo || 1}`,
batchChangeType: skuBatchChangeTypes[String(item.batchNo || 1)] ?? "",
dingTalkFlowNo: skuBatchFlowNos[String(item.batchNo || 1)] ?? "",

View File

@ -104,6 +104,11 @@ export const DEFAULT_ASSET_SKU_NATIONAL_STANDARD_COMPLIANT = "是";
export const DEFAULT_ASSET_SKU_SALES_STATUS = "销售";
export const SKU_SALES_STATUS_OPTIONS = ["销售", "停产", "退市"] as const;
export function normalizeSkuSalesStatus(value: string | undefined | null) {
const normalizedValue = value?.trim() ?? "";
return normalizedValue || DEFAULT_ASSET_SKU_SALES_STATUS;
}
export const SKU_COLUMN_DEFAULT_WIDTHS: Record<SkuColumnWidthKey, number> = {
model: 96,
skuCode: 96,

View File

@ -1002,6 +1002,7 @@ describe('intakeNonIntegratedProductService', () => {
)
expect(product?.productTag).toBe('模块化部件')
expect(product?.skuItems?.[0]?.salesStatus).toBe('销售')
expect(product?.pricingRows).toEqual([
expect.objectContaining({
skuId: 'sku-1',

View File

@ -2288,7 +2288,7 @@ function buildStructuredSkuItemOverlay(
manufacturerCode: readStructuredText(row.manufacturerCode),
minimumOrderQuantity:
readStructuredText(row.minimumOrderQuantity) || legacy?.minimumOrderQuantity || '',
salesStatus: readStructuredText(row.salesStatus),
salesStatus: normalizeSkuSalesStatusText(readStructuredText(row.salesStatus)),
tagMaterial: readStructuredText(row.tagMaterial),
model3dFileName: legacy?.model3dFileName ?? '',
model3dDataUrl: readStructuredText(row.model3dDataUrl) || legacy?.model3dDataUrl || '',
@ -3665,6 +3665,11 @@ const DEFAULT_STEEL_ASSET_VARIANT_EXECUTE_STANDARD = 'GB/T3325-2024'
const DEFAULT_ASSET_VARIANT_NATIONAL_STANDARD_COMPLIANT = '是'
const DEFAULT_ASSET_VARIANT_SALES_STATUS = '销售'
function normalizeSkuSalesStatusText(value: string | null | undefined) {
const normalizedValue = value?.trim() ?? ''
return normalizedValue || DEFAULT_ASSET_VARIANT_SALES_STATUS
}
function normalizeSeriesDisplayPart(value: unknown) {
return typeof value === 'string' ? value.trim().replace(/\s+/g, ' ') : ''
}
@ -4087,7 +4092,7 @@ function createEmptyAssetSeriesComponentSkuItem(
manufacturer: '',
manufacturerCode: '',
minimumOrderQuantity: '',
salesStatus: '',
salesStatus: DEFAULT_ASSET_VARIANT_SALES_STATUS,
tagMaterial: '',
model3dFileName: '',
model3dDataUrl: '',
@ -4139,7 +4144,7 @@ function createEmptyAssetSeriesComponentSkuGroupItem(
manufacturer: '',
manufacturerCode: '',
minimumOrderQuantity: '',
salesStatus: '',
salesStatus: DEFAULT_ASSET_VARIANT_SALES_STATUS,
tagMaterial: '',
model3dFileName: '',
model3dDataUrl: '',
@ -5011,7 +5016,7 @@ export function buildStructuredSkuItemInputs(
manufacturerCode:
trimSkuText(factoryRow?.supplierCode).toUpperCase() ||
trimSkuText(item.manufacturerCode).toUpperCase(),
salesStatus: trimSkuText(item.salesStatus),
salesStatus: normalizeSkuSalesStatusText(item.salesStatus),
tagMaterial: trimSkuText(item.tagMaterial),
model3dDataUrl: trimSkuText(item.model3dDataUrl) || null,
source: trimSkuText(item.source),