fix(admin): block re-config for family-configured links

按用户反馈:族已配置后不允许再配置(撤回上一轮的「再配置」入口):
- 「配置」按钮仅在本链接及其同款族均未配置时显示(configuredCount
  与 familyConfiguredCount 均为 0),族已配置的链接只显示「同款已配置」徽标
- openConfigModal 增加统一拦截(按钮与右树拖拽两条路径都覆盖):
  已配置/族已配置的链接弹出警告并阻止打开配置弹窗,避免产生官网
  不可见的冗余商品
- 文档同步:撤回「再配置」语义,恢复拦截说明

已核实 PLTF004(族 786)实际仅 1 个官网商品,「四个配置」是右树
族聚合徽标造成的观感误解;149 个族无一跨分类,左树一族一行计数无误。

验证:admin vue-tsc 干净 + vitest 22/22 绿
This commit is contained in:
yeuimu
2026-08-30 02:55:28 +08:00
parent 7ff12fc69b
commit 49d28c8d4f
2 changed files with 15 additions and 11 deletions
+9 -4
View File
@@ -449,6 +449,11 @@ function collectSiblings(ogNode: any): any[] {
function openConfigModal(og: any, dropTarget: any) { function openConfigModal(og: any, dropTarget: any) {
const ogNode = findOgNodeById(og.rawId) const ogNode = findOgNodeById(og.rawId)
// 族已配置 → 不允许再配置(按钮隐藏 + 拖拽拦截):公开契约一族一款,重复配置只产生官网不可见的冗余商品
if (ogNode && (ogNode.configuredCount > 0 || ogNode.familyConfiguredCount > 0)) {
ElMessage.warning('同款已配置为官网商品,不允许重复配置;如需调整请在左侧编辑对应商品')
return
}
configOG.value = { ...og, familyId: og.familyId ?? ogNode?.familyId ?? null } configOG.value = { ...og, familyId: og.familyId ?? ogNode?.familyId ?? null }
configDropTarget.value = dropTarget configDropTarget.value = dropTarget
configSiblings.value = ogNode ? collectSiblings(ogNode) : [] configSiblings.value = ogNode ? collectSiblings(ogNode) : []
@@ -1246,7 +1251,7 @@ onMounted(() => loadAll())
<span <span
v-else-if="data.familyConfiguredCount > 0" v-else-if="data.familyConfiguredCount > 0"
class="og-badge og-badge--ok" class="og-badge og-badge--ok"
:title="`同款族 ${data.familyCode || ''} 已配置为官网商品,本链接自身未单独配置`" :title="`同款族 ${data.familyCode || ''} 已配置为官网商品,本链接无需再配置`"
>同款已配置</span> >同款已配置</span>
<span <span
v-else-if="data.familyId" v-else-if="data.familyId"
@@ -1279,11 +1284,11 @@ onMounted(() => loadAll())
@click.stop="locateInLeftTree(data.rawId)" @click.stop="locateInLeftTree(data.rawId)"
/> />
<el-button <el-button
v-if="!data.configuredCount" v-if="!data.configuredCount && !data.familyConfiguredCount"
size="small" type="primary" link class="og-config-btn" size="small" type="primary" link class="og-config-btn"
:title="data.familyConfiguredCount > 0 ? '同款已配置为官网商品,点此可将本款再配置到其他国家/分类' : '配置为官网商品(可勾选同款链接归入同一族)'" title="配置为官网商品(可勾选同款链接归入同一族)"
@click.stop="openConfigFromRightTree(data)" @click.stop="openConfigFromRightTree(data)"
>{{ data.familyConfiguredCount > 0 ? '再配置' : '配置' }}</el-button> >配置</el-button>
</div> </div>
<div v-else class="og-cat-node"> <div v-else class="og-cat-node">
<span>{{ data.label }}</span> <span>{{ data.label }}</span>
+6 -7
View File
@@ -168,10 +168,10 @@ curl -X POST /product-families/organize -H "$AUTH" # 后台「整理
如 BRTF004)或族归属跨分类匹配,同款不同工艺/物流/仓库均在列(含已配置链接), 如 BRTF004)或族归属跨分类匹配,同款不同工艺/物流/仓库均在列(含已配置链接),
支持搜索过滤;无候选时显示空态提示。 支持搜索过滤;无候选时显示空态提示。
- 右树徽标语义(**族感知**,公开契约一族一款):**已配置 N**(绿,本链接已配置为官网商品, - 右树徽标语义(**族感知**,公开契约一族一款):**已配置 N**(绿,本链接已配置为官网商品,
N=国数)/ **同款已配置**(绿,本链接未单独建商品但所属族已配置)/ **成族**(蓝,已归族且全族 N=国数)/ **同款已配置**(绿,本链接未单独建商品但所属族已配置,无需再配/ **成族**(蓝,
未配置)/ **未配置**(橙);「定位到官网商品」在自身或同族已配置时出现(按 主链接 → 同族 → 已归族且全族未配置)/ **未配置**(橙);「定位到官网商品」在自身或同族已配置时出现(按
旧副源顺序定位并高亮)「配置」在本链接未单独建商品时可用;族已配置时按钮文案为 主链接 → 同族 → 旧副源顺序定位并高亮)「配置」按钮仅在本链接及其同款族均未配置时出现,
「再配置」(供调整归族/再配置到其他国家分类,注意会产生官网不可见的冗余商品); 拖拽到左侧分类/国家的路径同样被拦截(提示同款已配置、不允许重复配置);
- 族分组头部计数与「仅未配置」筛选同样按族语义(族已配置 → 计入已配置)。 - 族分组头部计数与「仅未配置」筛选同样按族语义(族已配置 → 计入已配置)。
- **左树一族一行**(国家/品类模式):同款多条配置只显示排序最前的一条,名称旁 - **左树一族一行**(国家/品类模式):同款多条配置只显示排序最前的一条,名称旁
「N 个配置」徽标悬浮列出其余配置(可打开编辑),分组头部计数仍按全部商品统计。 「N 个配置」徽标悬浮列出其余配置(可打开编辑),分组头部计数仍按全部商品统计。
@@ -179,9 +179,8 @@ curl -X POST /product-families/organize -H "$AUTH" # 后台「整理
- 页面组件化:`GoodsView.vue` 拆出 `components/` 下的 GoodsEditDialog(编辑弹窗)、 - 页面组件化:`GoodsView.vue` 拆出 `components/` 下的 GoodsEditDialog(编辑弹窗)、
GoodsConfigDialog(配置弹窗)、CustomGoodDialog(自定义商品)、TagFilterPopover(标签筛选弹层)。 GoodsConfigDialog(配置弹窗)、CustomGoodDialog(自定义商品)、TagFilterPopover(标签筛选弹层)。
> 注意:历史上每族多点「配置」会产生多个同名的官网商品(重复项可手动删除)。曾按"族已配置 > 注意:公开契约一族一款,同款(同族)已配置后**不允许再配置**——配置按钮隐藏、拖拽路径拦截,
> 拦截配置入口"处理过,现已撤回:族已配置的链接徽标显示「同款已配置」、按钮为「再配置」, > 避免产生官网不可见的冗余商品;历史重复商品(如早期 DG120/AUTM003 测试期间产生的)仍建议清理。
> 入口保留供调整归族/加配国家,重复产生的冗余商品建议清理。
**链接级标签(自动派生 + 人工修正,2026-08 规则改版)** **链接级标签(自动派生 + 人工修正,2026-08 规则改版)**