yeuimu
|
a756c8c3c8
|
fix(admin,api): always show family composition badge N条链接·M个配置
按用户反馈(PLTM006 明明能查到配置数却不显示):左树徽标此前只在
同分类内 ≥2 个配置时才出现,单配置族一行上什么都不显示,而右树同族
链接都挂着绿色已配置徽标,两边数字对不上,反复造成「配置数没显示」
的误解。
- goods API:GOOD_INCLUDE 的 family 带 _count.originGoods,
GoodDto.originGood.family 增加 memberCount(族成员链接数)
- admin:distinctByFamily 记录 linkCount;一族一行的徽标常显
「N 条链接 · M 个配置」(链接数=族成员数,配置数=该族官网商品数),
悬浮仍列出全部配置可打开
- 文档同步徽标语义
效果:PLTM006 行显示「4 条链接 · 1 个配置」(真值:4 条链接仅配了
1 个官网商品);PLTF026 的「4 条链接 · 4 个配置」同屏可对比,其中
4 个配置为历史同国家重复配置,建议另行清理。
验证:admin vue-tsc 干净 + vitest 22/22;api goods spec 18/18;
Prisma _count 查询实测返回 originGoods=4
|
2026-08-30 03:07:16 +08:00 |
|
yeuimu
|
ab42cb49a3
|
merge: develop (block family re-config) into refactor/v2
|
2026-08-30 02:55:33 +08:00 |
|
yeuimu
|
5d089bdb43
|
merge: fix/block-family-reconfig into develop
|
2026-08-30 02:55:32 +08:00 |
|
yeuimu
|
49d28c8d4f
|
fix(admin): block re-config for family-configured links
按用户反馈:族已配置后不允许再配置(撤回上一轮的「再配置」入口):
- 「配置」按钮仅在本链接及其同款族均未配置时显示(configuredCount
与 familyConfiguredCount 均为 0),族已配置的链接只显示「同款已配置」徽标
- openConfigModal 增加统一拦截(按钮与右树拖拽两条路径都覆盖):
已配置/族已配置的链接弹出警告并阻止打开配置弹窗,避免产生官网
不可见的冗余商品
- 文档同步:撤回「再配置」语义,恢复拦截说明
已核实 PLTF004(族 786)实际仅 1 个官网商品,「四个配置」是右树
族聚合徽标造成的观感误解;149 个族无一跨分类,左树一族一行计数无误。
验证:admin vue-tsc 干净 + vitest 22/22 绿
|
2026-08-30 02:55:28 +08:00 |
|
yeuimu
|
ab51052d26
|
merge: develop (family-configured badge fix) into refactor/v2
|
2026-08-30 02:40:44 +08:00 |
|
yeuimu
|
7ff12fc69b
|
merge: fix/family-configured-badge into develop
|
2026-08-30 02:40:43 +08:00 |
|
yeuimu
|
fa4a95af98
|
fix(admin): relabel family-configured badge to 同款已配置; button 再配置
按用户反馈修正右树「已配置徽标 + 配置按钮」并存的矛盾观感:
- 徽标改为链接级真值:本链接未单独建商品但所属族已配置时显示
「同款已配置」(此前沿用拦截时代的「已配置」文案,与恢复出的
配置入口语义打架)
- 该场景下按钮文案改为「再配置」,悬浮说明指向调整归族/加配国家;
本链接自身已配置时按钮照旧隐藏,行为不变
- 文档撤回过时的「族已配置后配置入口会被拦截」说法(6f2d836 已
撤回拦截,徽标文案此番补齐)
验证:admin vue-tsc 干净 + vitest 22/22 绿
|
2026-08-30 02:40:39 +08:00 |
|
yeuimu
|
ff8aad171c
|
merge: develop (organize refactor) into refactor/v2
|
2026-08-30 01:27:28 +08:00 |
|
yeuimu
|
b6c19ae859
|
merge: refactor/organize-script-dev into develop (local only, not pushed)
|
2026-08-30 01:27:26 +08:00 |
|
yeuimu
|
93ac525c55
|
refactor(api): parsing out of runtime — pure-mirror sync, explicit organize, auto aggregate recompute
解析去运行时化(三层架构,plans/refactor/organize-script-refactor.md):
- 同步 = 纯镜像:upsertOriginGood 不再写解析列、不再自动挂族;详情同步仍触发重算
- 整理 = 显式人工动作(OrganizeService):解析列回填 → 派生标签(人工接管永不
覆盖)→ auto-group 建族 → 全量重算;入口 CLI(pnpm --filter @inkreach/api
organize)+ POST /product-families/organize + 后台「整理」按钮
- 重算 = 纯结构化聚合:不再按名称重派生标签(防上游改名倒灌,回归测试覆盖);
矩阵维度只认标签/CUSTOM 显式标签,未整理成员不进矩阵;工艺=不打印时
印花数量以单面占位(纯结构化规则);「恢复自动」走整理的单链接派生
- 派生默认补齐(脚本层假设):名称无单/双面且工艺非不打印 → 印花数量单面印花
- goods 服务建品/更新后仅镜像标签+重算(不派生);含商品名入库规范化
(normalizeGoodName,管理员输入边界质检)
- organize.service.spec 由 tag-sync spec 迁移 + 防倒灌回归;sync/recompute/
public/families spec 全部适配;API 173/173,admin typecheck+22/22
|
2026-08-30 01:27:01 +08:00 |
|
yeuimu
|
976f308e3c
|
Merge remote-tracking branch 'origin/develop' into develop
|
2026-08-29 09:13:11 +08:00 |
|
yeuimu
|
64a6fa7004
|
merge: fix/size-chart-local-size-code-dev into develop (local only, not pushed)
|
2026-08-29 08:55:16 +08:00 |
|
yeuimu
|
b5875d33b2
|
fix(sync): drop local size-code column (P/M/G/GG) from SDS size charts
巴西/西语市场上游尺码表带一个名为「尺码」的列,值是本地尺码码
P/M/G/GG(=S/M/L/XL),与行首尺码重复且非测量值;解析时整列丢弃。
其他非数字参考列(身高/体重/建议体重)保留。存量 2 条详情已修复
并重算受影响族。
|
2026-08-29 08:55:16 +08:00 |
|
yeuimu
|
ce283dff78
|
merge: fix/origin-name-mixed-bracket-dev into develop (local only, not pushed)
|
2026-08-29 02:36:26 +08:00 |
|
yeuimu
|
6498a198ef
|
fix(parser): normalize half/full-width bracket mix in link name segment 1
SDS 上游存在 '美国(不包邮)…' 混用括号:先归一为全角再配对,
否则国家/物流/品名三字段全部解析失败
|
2026-08-29 02:36:26 +08:00 |
|
yeuimu
|
7c46f15967
|
merge: feature/admin-ui-polish-dev into develop (local only, not pushed)
|
2026-08-29 02:32:41 +08:00 |
|
yeuimu
|
d625b40873
|
fix(admin): merge-candidates by SKU/family; config dialog merge block always shown; cfg badge adjacency
- 修正合并同名候选匹配:此前用名称 3 段组键(含工艺段),工艺写法不同的
同款(如 光板不打印 vs 单面印花(前印))全部漏配导致候选为空、合并同名
区块被 v-if 隐藏 —— 用户看到的"checkbox 和搜索框被吞"即此因。
改为 族归属精确匹配 或 款号(名称第 2 段,如 BRTF004)一致,全局跨分类;
区块常显,无候选时空态提示
- 修左树「N 个配置」徽标错位:good-name-col 改 flex 布局,徽标紧贴名称
- 验证:admin typecheck + 22/22 + 构建绿;DB 实测 BRTF004 光板链接候选池
恢复(单面印花(前印),同族 857)
|
2026-08-29 02:16:35 +08:00 |
|
yeuimu
|
6f2d836ef5
|
fix(admin): one row per family on left tree; restore right-tree config entry
按用户反馈调整上一批优化:
- 左树撤回族组展开层(虚线层+重复名称行):改为一族只显示一行(排序最前的
代表商品),行内「N 个配置」徽标悬浮列出该族全部配置(名称/国家·分类/打开
按钮),不再有额外层级与重复名称
- 右树恢复配置入口:撤回「族已配置拦截」,本链接未单独建商品即显示「配置」
按钮(含族已配置情形,供调整归族/重新配置),拖拽路径同步解除拦截
- 国家模式拖拽排序回退为分组内简单排序(族组节点已不存在)
- 文档同步更新徽标/入口语义
验证:admin typecheck + 22/22 + 构建绿;浏览器实测美国分组 25 行一族一行、
「8 个配置」徽标悬浮列表可打开、国内工厂深层成族链接显示「配置」按钮
|
2026-08-29 01:53:09 +08:00 |
|
yeuimu
|
5e8183c220
|
feat(admin): family-folded left tree, toolbar regroup, sync log humanize
视觉走查驱动的后台优化(feature/admin-ui-polish-dev,确认后再合并):
- 左树(国家/品类模式)同款多配置折叠为一行族组节点:代表名 + "N 个配置"
徽标,展开看各行;locateInLeftTree 沿父链展开保证定位有效;国家模式
拖拽排序适配族嵌套(同容器内排序,按折叠后展示顺序保序重分配优先级)
- 工具栏分区重排:模式切换(品类/国家/全局)移至最左,筛选组居中,
新增自定义商品靠右,消除 1680 宽下的折行错乱
- 商品行属性小字/国家徽标颜色加深提升对比度
- 右树原产品行加拖拽提示 title
- 数据同步日志人话化:inserted/updated/total/delisted 等报文渲染为
"新增 0 · 更新 536 · 共计 536",原始报文进 tooltip
- 计划文档 plans/feature/admin-ui-polish-feature.md(含一项误报修正:
右树 29/3 计数为截图裁切误读,实际 29/33 无 bug)
验证:admin typecheck + 22/22 + 构建绿;浏览器实机复拍国家模式折叠、
族组展开、同步页文案均生效
|
2026-08-28 23:22:04 +08:00 |
|
yeuimu
|
4ddbf486bd
|
merge: fix/country-mode-good-reorder-dev into develop (local only, not pushed)
|
2026-08-28 21:37:27 +08:00 |
|
yeuimu
|
0e451d07e6
|
fix(admin): drag-to-reorder goods inside country groups
国家模式左树商品节点支持拖拽排序:行内 before/after 指示线,落点即保存。
优先级采用保序重排(该国家现有优先级集合不变、按新顺序重新分配),
尽量少扰动全局/品类维度的既有排序;跨国家拖动不支持(商品归属固定)。
|
2026-08-28 21:37:27 +08:00 |
|
yeuimu
|
aba90cb011
|
merge: fix/config-dialog-global-siblings-dev into develop (local only, not pushed)
|
2026-08-28 20:04:30 +08:00 |
|
yeuimu
|
fdfe435ecd
|
fix(admin): config dialog merge candidates search globally by name group
合并同名候选不再局限于当前分类节点:collectSiblings 改为按名称 3 段组键
(sameOriginGroup)遍历整棵右树收集同款链接(含已配置,勾选归族幂等),
跨分类的同款链接(如 BRTF004 分布在多个分类组)也能勾选归族
|
2026-08-28 20:04:29 +08:00 |
|
yeuimu
|
a14b8ecf4a
|
merge: feat/country-sort-and-sync-btn-dev into develop (local only, not pushed)
|
2026-08-28 20:01:04 +08:00 |
|
yeuimu
|
1e07c62fc8
|
feat(admin): country drag-sort + always-available member detail sync
- Country 加 sort_order(默认 0 保持 id 序);PATCH /countries/sort 批量保存
顺序(对齐 /tags/sort 模式);findAll 与公开 /public/countries 均按
sortOrder 排序
- CountriesView 表格改为可拖拽行列表:拖动松开即全量保存新顺序,失败回滚
- 商品编辑弹窗成员展开面板:同步详情按钮常驻(已同步显示 重新同步详情),
不再只在未同步态出现
- goods.service.spec 的 FamilyRecomputeService mock 补齐 syncFamilyTags 等
方法(全量并行时其他套件的扫名归族会把本套件夹具收进族,create/update
会调用到,mock 缺方法导致偶发 TypeError)
- api 164/164、admin typecheck+22/22+构建全绿
|
2026-08-28 20:00:56 +08:00 |
|
yeuimu
|
77f9c05346
|
merge: fix/tree-badge-family-aware-dev into develop (local only, not pushed)
|
2026-08-28 19:16:22 +08:00 |
|
yeuimu
|
fe6ab3825d
|
fix(admin): family-aware right-tree badges; flatten union size-chart cells
- 右树徽标/定位/配置按钮改按族语义:族内任一链接已配置 → 全族显示绿色
已配置(本链接未单独建商品时标题注明并入该款),配置入口在全族未配置时
才出现;拖拽已配置族链接配置时拦截提示(公开契约一族一款,重复商品官网
不可见);分组头计数与仅未配置筛选同步族感知(AUTM003/DG120 场景)
- 编辑弹窗族级尺码表把 measurements 数组摊平成列键(与成员级渲染一致),
修复列头在、格子全空的问题
|
2026-08-28 19:16:15 +08:00 |
|
yeuimu
|
8a6db1bdee
|
docs(agents): lessons — stop dev server before full jest; Chinese sort assertions
|
2026-08-28 18:51:22 +08:00 |
|
yeuimu
|
d0102ec4e8
|
merge: feature/public-family-id-dev home-goods test into develop (local only, not pushed)
|
2026-08-28 18:44:25 +08:00 |
|
yeuimu
|
63b436fe41
|
test(public): cover home-goods family dedupe
|
2026-08-28 18:44:24 +08:00 |
|
yeuimu
|
5a7a2841de
|
merge: feature/public-family-id-dev into develop (local only, not pushed)
|
2026-08-28 18:43:33 +08:00 |
|
yeuimu
|
8a052773cd
|
feat(public): family-first contract — goodId=familyId, strict 5-dim price matrix
公开契约族化(前端只需知道款号/族):
- GET /public/goods 一族一条(goodId=族ID,price=族起价,分页作用于分组后);
无族商品(自定义)不进任何公开端点(列表/首页/分类树/标签统计)
- GET /public/goods/:goodId 仅认族 ID;公共字段取代表 Good,变体=全体成员并集,
尺码表/包装规格=族物化并集;旧 SDS 链接 ID 寻址 404
- priceMatrix 严格五维:尺码×颜色×印花数量×工艺×物流;维度来源改为链接级
标签(人工接管按人工标签),弃用原始 craftLabel;CUSTOM 成员尊重显式标签
- 名称派生补裸「单面/双面」写法(直喷双面→双面印花+直喷,18 条存量链接修复)
- family_price_overrides 加 print_count 列(五键唯一),PUT/DELETE/校验五键化
- admin 编辑弹窗矩阵消费适配(SKU 列直读 printCount,成员格子三维匹配,
改价 payload 带 printCount)
- 存量 339 族已全量重算;api 162/162、admin 22/22、双端构建绿
|
2026-08-28 18:43:30 +08:00 |
|
yeuimu
|
e5ec022834
|
merge: fix/swagger-csp-dev into develop (local only, not pushed)
|
2026-08-28 17:50:39 +08:00 |
|
yeuimu
|
e018f16d0b
|
fix(api): drop helmet CSP upgrade-insecure-requests so Swagger UI loads over plain http
|
2026-08-28 17:50:39 +08:00 |
|
yeuimu
|
b055aedd3e
|
merge: fix/swagger-proxy-dev into develop (local only, not pushed)
|
2026-08-28 17:43:41 +08:00 |
|
yeuimu
|
1ef82c4c14
|
fix(admin): proxy /api/docs without prefix strip so Swagger UI works through vite dev server
|
2026-08-28 17:43:41 +08:00 |
|
yeuimu
|
f07e843130
|
fix(admin): move family union tabs to the bottom of edit dialog
|
2026-08-28 17:37:58 +08:00 |
|
yeuimu
|
6054cb556a
|
docs: family union tabs and searchable merge list
|
2026-08-28 17:27:53 +08:00 |
|
yeuimu
|
d4515631b1
|
merge: feat/family-detail-tabs-dev into develop (local only, not pushed)
|
2026-08-28 17:26:41 +08:00 |
|
yeuimu
|
c7e6c35fbf
|
feat(admin): family-level size/package/SKU union tabs in edit dialog; searchable merge-sibling list in config dialog
|
2026-08-28 17:26:41 +08:00 |
|
yeuimu
|
6d9305b878
|
merge: fix/config-dialog-siblings-dev into develop (local only, not pushed)
|
2026-08-28 17:11:36 +08:00 |
|
yeuimu
|
7c85f7fe9f
|
fix(admin): config dialog lists all same-category sibling links (incl. configured); drop merge tip text
|
2026-08-28 17:11:36 +08:00 |
|
yeuimu
|
f280b1daf5
|
docs: reflect simplified member price table
|
2026-08-28 17:03:12 +08:00 |
|
yeuimu
|
d67858c69b
|
merge: fix/session-restore-and-price-table-dev into develop (local only, not pushed)
|
2026-08-28 17:02:26 +08:00 |
|
yeuimu
|
c2d50c9fa3
|
fix(admin): restore session via /auth/me in router guard (refresh no longer logs out); simplify member price table (no title/source/action columns)
|
2026-08-28 17:02:25 +08:00 |
|
yeuimu
|
9863346c6d
|
merge: fix/goods-view-feedback-dev into develop (local only, not pushed)
|
2026-08-28 16:55:08 +08:00 |
|
yeuimu
|
f28f51155f
|
feat(goods): per-member detail tabs in edit dialog; revert right-tree to raw names; split configured/family badges; add GET /origin-goods/:id
|
2026-08-28 16:55:07 +08:00 |
|
yeuimu
|
753b554413
|
merge: feature/goods-dialog-split-dev into develop (local only, not pushed)
|
2026-08-28 16:40:48 +08:00 |
|
yeuimu
|
10197c47a8
|
refactor(admin): split GoodsView into dialog components; fix(GoodsView): raw member names, no primary badges, member price grid; feat(tag): 光板 maps to 不打印
|
2026-08-28 16:40:48 +08:00 |
|
yeuimu
|
34d84a7a7c
|
merge: feature/link-tags-and-sku-dims-dev into develop (local only, not pushed)
|
2026-08-28 16:00:52 +08:00 |
|