yeuimu
f09a629311
merge: add heat-transfer craft to matrix vocabularies
2026-09-02 16:34:27 +08:00
yeuimu
8903afdc82
feat(product-families): add heat-transfer (热转印) craft to matrix vocabularies
...
Append 热转印 to DIM_VALUES.craft so links manually tagged with the new
tag enter the price matrix (previously the closed vocabulary filtered it
out and the link's prices would silently disappear), and to
OPTION_DISPLAY_ORDER.craft so the button group renders it after 不打印.
No derivation rules changed: existing links are unaffected until an
operator explicitly tags them.
2026-09-02 16:33:41 +08:00
yeuimu
fb85a56444
docs(plan): add heat-transfer craft tag feature plan
2026-09-02 16:31:26 +08:00
yeuimu
5f81b18388
docs(agent): add materialized-array order determinism lesson
2026-09-02 16:08:35 +08:00
yeuimu
f828cc0bd9
merge: fix price-matrix option sort (canonical display order)
2026-09-02 16:05:05 +08:00
yeuimu
a84b3b5daa
fix(product-families): sort price-matrix option arrays by canonical display order
...
printCounts/crafts/logistics were materialized in first-encounter order
(originGoods had no orderBy), so the H5 print/craft/logistics button
groups rendered in an unstable, per-family arbitrary order. Add
OPTION_DISPLAY_ORDER (单面→双面, 烫画→直喷→不打印, 不包邮→包邮) and
stable-sort the aggregated arrays before materializing; out-of-vocabulary
free-text labels (e.g. 海运) sink to the end preserving encounter order.
Fix traversal order with orderBy id asc so recomputes are fully
deterministic. Add recompute:families script for one-off re-materialize.
2026-09-02 16:00:12 +08:00
yeuimu
1ffd73a1af
docs(plan): add price-matrix option sort fix plan
2026-09-02 15:52:41 +08:00
yeuimu
ae880ff346
docs(agent): add representative-row convergence lesson
2026-09-02 14:59:29 +08:00
yeuimu
26a5b08b56
merge: bugfix/public-goodname-representative (列表/首页族代表行对齐详情)
2026-09-02 14:58:59 +08:00
yeuimu
63820a3e6f
fix(public): unify family representative selection with detail endpoint
...
List/home endpoints picked the family representative row via goods[0],
which drifted with the list sort parameter (cheapest under PRICE_ASC,
lowest id under DEFAULT ties), causing goodName and other
representative-derived fields to differ from the detail endpoint.
Extract pickFamilyRepresentative (goodPriority desc -> createdAt desc
-> id asc, same as getGoodByFamilyId) and use it in getGoods and
getHomeGoods grouping. Group ordering and API contracts unchanged.
2026-09-02 14:58:42 +08:00
yeuimu
b32a5575df
deploy(nginx): route /assets/product-center/ to v2 api for shared icons
...
沙特国旗等新增图标只需放入 v2 仓库 public 目录;nginx 按最长前缀把
product-center 静态资源转发给 v2 api,其余 /assets/、/uploads/ 仍走 v1。
同步沉淀 AGENTS.md:入口 nginx 真实挂载源在 v1 仓库、文件型 bind mount 的
inode 陷阱。
2026-09-02 11:19:49 +08:00
yeuimu
a0ad6da9c7
chore(api): add Saudi Arabia flag icon
2026-09-02 11:01:11 +08:00
yeuimu
2bec7822f0
merge: feature/category-tree-sort (public goods style-order sorting)
2026-09-02 10:34:12 +08:00
yeuimu
76eb849b49
docs: record style-order semantics, container-run pitfalls and lessons
2026-09-02 10:33:54 +08:00
yeuimu
bea0bf14d8
feat(api): order public goods by country > mid-category > style > priority
2026-09-02 10:27:23 +08:00
yeuimu
3ccddc5982
feat(api): backfill category/country sort order from reference table
2026-09-02 10:22:49 +08:00
yeuimu
dc90712c4f
feat(api): add sort_order column to categories
2026-09-02 10:16:29 +08:00
yeuimu
d01c1e1b97
docs(plan): keep legacy tree as nav, treat sds leaves as style-order metadata, drop tree-switch tasks
2026-09-02 10:00:29 +08:00
yeuimu
3d431f8375
docs(plan): add backup/rollback section, fix backfill run channel and sink semantics
2026-09-02 09:36:17 +08:00
yeuimu
6973f863b5
chore: ignore local db snapshots (backups/)
2026-09-02 09:27:08 +08:00
yeuimu
88f60ba2e2
docs: add category-sort implementation plan (single categoryId, dual-path filter)
2026-09-01 19:26:50 +08:00
yeuimu
01fe444f93
docs: add category sort reference table (country > level2 > level3 order)
2026-09-01 19:00:24 +08:00
yeuimu
318f5c2a64
deploy(v2): update h5 build artifacts (new entry & products chunks)
2026-09-01 17:15:19 +08:00
yeuimu
007ad2c831
deploy(v2): h5 build with base /v2/h5, admin dockerfile & nginx route, shared compose
2026-09-01 16:26:22 +08:00
yeuimu
60992cb3d9
deploy: new h5 build, /v2/h5 route, restore /v2-api & /public proxy
...
- replace deploy/h5 with latest h5 build (base /h5/)
- nginx: add /v2/h5/ passthrough to v2-admin
- nginx: restore lost /v2-api/ and /public/ proxy locations
- compose: join inkreach-shared network so v1 admin can resolve v2-admin
2026-09-01 16:21:45 +08:00
yeuimu
62f968c1c1
chore(api): add miniprogram static assets to /app/public (served at /assets/miniprogram)
2026-08-31 19:02:23 +08:00
yeuimu
f55e7ba4bb
merge: develop (fixture junk cleanup + badge text) into refactor/v2
2026-08-30 03:15:23 +08:00
yeuimu
a5884c638c
merge: fix/test-fixture-junk-badge into develop
2026-08-30 03:15:23 +08:00
yeuimu
674d38a9a7
fix(api,admin): stop test fixture junk leaking to shared dev DB; badge text x个配置
...
清理标签筛选里的「Upd {ts}-v2」空分组与原产品库树里的
「Tree Cat {ts}」垃圾分类——两者均为集成测试夹具残留:
- tag-groups spec「改名」用例把分组改成 -v2 后缀,afterAll 按原名
删除永远漏掉它(累积 31 个空分组);修复:改名前把 v2 名一并登记
- origin-goods spec getTree 用例的 finally 先删 good,被
goodOriginGood 外键限制挡住且错误被 .catch 吞掉,分类/商品/国家/
链接全部残留;修复:先删引用行再删 good
- 已清库:31 个 Upd 空分组、Tree Cat 分类 + Tree Good 商品 +
Tree Country 国家 + 2 条 tree-a/b 链接;复跑两 spec 复核零残留
左树一族一行徽标文案按用户反馈去掉「N 条链接」,仅显示「M 个配置」
(memberCount 字段保留在 DTO,悬浮弹层行为不变)
验证:tag-groups + origin-goods spec 13/13 绿且零残留;admin
vue-tsc 干净 + vitest 22/22
2026-08-30 03:15:18 +08:00
yeuimu
102d61c181
merge: develop (family composition badge) into refactor/v2
2026-08-30 03:07:21 +08:00
yeuimu
12882e7d5a
merge: fix/family-composition-badge into develop
2026-08-30 03:07:20 +08:00
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