fix(product-family): auto-merge SKUs after manual tag edits; fix session cookie path
问题2(SKU 无法自动合并,GBIU017 案例)四处叠加根因修复: - 人工标签旧词「热转印」被封闭词表静默踢出合并矩阵 → CRAFT_TAG_ALIASES 别名归一为「烫画」(矩阵归因与 CUSTOM 标签同路径生效) - updateTags 缺任一定价维度组即整链掉出矩阵且人工接管后永不恢复 → 缺啥补啥(按链接名派生补齐,人工勾选值不动,响应带 filledDimensionTags) - autoGroup 只建新族从不并入已有族(产生 USIU005-2 类碎片)→ 并入已有 autoManaged 同款族优先,无匹配才新建;同款仅人工锁定族则跳过并报告 - 名称回退分组键含物流备注,包邮/不包邮永不同组 → 新增族语义键 familyNameKey(国家+品名+SKU),api/admin 两侧同构,合并默认勾选随之修复 附加: - updateTags 后未归族链接自动并入匹配族(attachToMatchingFamily,响应带 attachedFamilyId) - 整理新增碎片族合并 consolidateFragments:纯碎片族并入带商品族并删除 (保公开 goodId=族ID 稳定),带商品/覆盖价/人工锁定进人工复审报告 - admin:保存标签提示补齐明细,整理完成消息含并入/碎片合并/待人工数 问题1(后台频繁 Unauthorized 掉线): - refresh cookie path '/auth' 与代理前缀(/api、/v2-api)不匹配导致浏览器 永远带不上 refresh cookie → 两 cookie path 统一为 '/' - v2 构建基址带尾斜杠 + 手工拼接产生 /v2-api//auth/refresh 双斜杠 404 → request.ts 规范拼接 测试:api jest 187/187、admin vitest 22/22、双侧 tsc 0 错误; public.service 夹具改为自包含(不依赖共享库既有数据)。
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
import { Prisma } from '@prisma/client';
|
||||
import { PrismaService } from '../prisma/prisma.service';
|
||||
import { isAutoTagGroupName } from './auto-tag-rules';
|
||||
import { isAutoTagGroupName, normalizeCraftTag } from './auto-tag-rules';
|
||||
|
||||
/**
|
||||
* 产品族重算:并集尺码表/包装规则 + 五维价格矩阵物化。
|
||||
@@ -88,14 +88,16 @@ export function memberMatrixCombos(input: {
|
||||
tagNames: string[];
|
||||
customLabels?: { craft?: string | null; logistics?: string | null };
|
||||
}): MatrixCombo[] {
|
||||
// 旧词别名归一(热转印→烫画):只影响矩阵归因,封闭词表本身不变
|
||||
const tagNames = input.tagNames.map(normalizeCraftTag);
|
||||
const values = (dim: DimKey): string[] =>
|
||||
DIM_VALUES[dim].filter((v) => input.tagNames.includes(v));
|
||||
DIM_VALUES[dim].filter((v) => tagNames.includes(v));
|
||||
|
||||
let printCounts = values('printCount');
|
||||
let crafts = values('craft');
|
||||
let logistics = values('logistics');
|
||||
// CUSTOM 成员:管理员显式标签是唯一来源(craftLabel/logisticsLabel,自由文本)
|
||||
const craftLabel = input.customLabels?.craft ?? '';
|
||||
const craftLabel = normalizeCraftTag(input.customLabels?.craft ?? '');
|
||||
const logisticsLabel = input.customLabels?.logistics ?? '';
|
||||
if (!crafts.length && craftLabel) crafts = [craftLabel];
|
||||
if (!logistics.length && logisticsLabel) logistics = [logisticsLabel];
|
||||
|
||||
Reference in New Issue
Block a user