fix: recognize plus-joined product codes as SKU

This commit is contained in:
WuYongJie 2026-09-07 17:07:21 +08:00
parent 00ad0783a3
commit 56210b988e
2 changed files with 13 additions and 2 deletions

View File

@ -30,6 +30,9 @@ describe('detectSkuOrBarcodeName(SKU 图文件名判别)', () => {
['ZH-SZT018001-AD033501'],
['ZH-SZT018001-AD033501-BJ017603N1241V01'],
['zh-szt018001-ad033501n1256v01'],
['MKHDNZ0409260601010+GBGJ-SJ038016N1410V01'],
['mkhdnz0409260601010+gbgj-sj038016n1410v01'],
['DNZ038521+AD033601+BJ017603N1241V01'],
])('%s → 组合 SKU 整串保留', (input) => {
expect(detectSkuOrBarcodeName(input)).toEqual({ type: 'skuCode', value: input })
})
@ -45,6 +48,10 @@ describe('detectSkuOrBarcodeName(SKU 图文件名判别)', () => {
['ZH--SZT018001-AD033501'],
['ZH-SZT018001-AD033501-'],
['ZH-SZT018001-组合'],
['MKHDNZ0409260601010+'],
['+GBGJ-SJ038016N1410V01'],
['MKHDNZ0409260601010++GBGJ-SJ038016N1410V01'],
['MKHDNZ0409260601010+随便起的名字'],
['随便起的名字'],
[''],
])('%s → 不填(null)', (input) => {

View File

@ -3,7 +3,7 @@
*
* 依据生产数据的稳定结构(配合 lib/spu-parser.ts 的品类字典):
* - SKU 编号: [前缀-?]品类码 + 纯数字,如 DNZ038521、AD033601、GBSFY-AD0360、MKHDNZ0409260600987
* - 组合 SKU: ZH- 开头,后接至少两个“字母码 + 数字”的产品段;整串都属于 SKU 编号
* - 组合 SKU: ZH- 开头,或以 + 连接多个有效产品编码;整串都属于 SKU 编号
* - 产品条码: SKU 编号 + N数字(V数字)? 段,如 DNZ038521N1280V01、CY001306N35V01
* - 其余(纯序号、02-1、复合串、含中文等)判别不出,交给人工填写
*
@ -56,7 +56,11 @@ export function detectSkuOrBarcodeName(name: string): SkuOrBarcodeDetection | nu
if (!trimmed) return null
// 组合 SKU 的业务语义优先于普通 N/V 条码规则。
if (COMBINATION_SKU_PATTERN.test(trimmed)) {
const parts = trimmed.split('+')
const isJoinedSku = parts.length > 1 && parts.every(part =>
SKU_CODE_PATTERN.test(part) || BARCODE_PATTERN.test(part)
)
if (COMBINATION_SKU_PATTERN.test(trimmed) || isJoinedSku) {
return { type: 'skuCode', value: trimmed }
}