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
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
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
6054cb556a
docs: family union tabs and searchable merge list
2026-08-28 17:27:53 +08:00
yeuimu
f280b1daf5
docs: reflect simplified member price table
2026-08-28 17:03:12 +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
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
6f22a6fd1f
feat(admin): expandable family members with per-link tag config + SKU pricing dims columns
2026-08-28 16:00:46 +08:00
yeuimu
1128167aef
feat(admin): family-aware goods view - auto tags readonly, clean link names, config badges, locate highlight
2026-08-28 15:33:11 +08:00
yeuimu
eedfbb344e
feat(product-family): auto-derive logistics/craft tags from family members
2026-08-28 14:57:25 +08:00
yeuimu
353e51e871
revert(admin): restore original layout, replace primary/secondary source UI with family members
2026-08-28 14:35:34 +08:00
yeuimu
4eadb67c36
feat(product-family): replace legacy good merge with family mechanism in config view and public detail
2026-08-28 14:14:58 +08:00
yeuimu
6418aa7302
feat(api): public good detail family block behind gray-release flag
2026-08-28 13:40:19 +08:00
yeuimu
d70a03f6fa
docs: admin product family references
2026-08-28 13:30:37 +08:00
yeuimu
502b7eba6e
docs: update references for product families; fix controller import and test isolation
2026-08-28 12:50:42 +08:00
yeuimu
573549eb15
docs(specs): reuse public endpoints and include admin frontend scope
2026-08-28 12:04:35 +08:00
yeuimu
14d77fbab2
docs(specs): allow manual price overrides and custom family members
2026-08-28 12:01:13 +08:00
yeuimu
1186d615e2
docs(specs): add product family merge design
2026-08-28 11:45:18 +08:00
yeuimu
4bebb9e4b2
docs: document merged origin goods feature
2026-08-27 18:49:17 +08:00
yeuimu
6c61a4e871
feat(deploy): production deployment setup and fixes
...
- Debian-based api image (bookworm-slim), docker/debian mirrors, prisma
binaryTargets for openssl 3.0
- nginx: admin SPA under /admin, TLS via acme.sh (ZeroSSL) + auto-renewal
cron, http->https redirect
- prisma: add origin_goods.delisted migration, sync missing schema
(good_image/tag_font_color/good_tags), fix users.createdAt Timestamptz
- api: CORS wildcard reflection, helmet CORP cross-origin, price
backfill in persistProductDetail, categoryIcon ancestor fallback,
mediaByColor per-color gallery in public goods detail
- admin: /admin base path (vite + router)
- import-data.mjs: udt_name casting, serial sequence advance fix
2026-08-26 14:23:09 +08:00
yeuimu
79fabd85f7
feat(product-center): implement Figma-designed UI, upload module, and website tests
...
- Redesign website homepage & product-center per Figma (fonts, logos, hero/footer/customer cases)
- Add API upload module (multer) with static serving for uploads/public assets
- Add OriginGood.delisted flag and SDS request retry logic
- Add admin ImageUpload component and goods import/upload flows
- Add vitest suite for website components and composables (32 tests)
- Add skills, docs, plans and PRODUCT.md
2026-08-20 14:32:03 +08:00
yeuimu
7e04877bb6
chore: migrate to pnpm workspaces monorepo with Turborepo
...
- Restructure directories: apps/api, apps/admin, apps/website
- Add root pnpm-workspace.yaml, turbo.json, .prettierrc, .gitignore
- Rename packages to @inkreach/api, @inkreach/admin, @inkreach/website
- Add shared packages: packages/tsconfig, packages/shared-types
- Add pnpm.onlyBuiltDependencies for native builds
- Update docs: README.md, structs.md
- All three projects build successfully
2026-07-11 16:54:05 +08:00
yeuimu
a903dd4903
feat(admin): redesign GoodsView with dual-tree UX, filter bar, inline CRUD
...
- Two-line good nodes with country + tag chips, hover tooltip
- Resizable dual-tree with fixed-height panels (no node overlap)
- Filter bar: search, country filter, tag filter (multi-select with rename)
- Mode switch (品类/国家) pushed to right via spacer
- Inline create country/tag in edit & config modals via quick-create buttons
- Right tree node height auto-fix for locate highlight
- Filter dropdown styles in global scope for teleported popper
- Backend: multi-tag (GoodTag junction), goodImage column, origin goods tree API
- Admin response interceptor unwraps {data, success} envelope
- Simplified sidebar to single 商品管理 entry with tabs
- SyncView simplified to product sync only
2026-06-22 01:47:20 +08:00
yeuimu
c3472a449b
feat(product-center): implement full product center with NestJS backend, Vue3 admin, and Nuxt4 website page
...
- NestJS backend: Prisma + PostgreSQL, JWT auth, CRUD for goods/categories/countries/tags/positions, SDS sync with cron, public API, Swagger docs
- Vue3 Admin: Element Plus, goods/categories/countries/tags/positions/sync management pages, batch operations, login with JWT
- Nuxt4 Website: product-center page with sidebar navigation, country filter, search, product grid, pagination, skeleton loading
- Nitro proxy routes for backend API
- 54 backend tests passing
- Updated docs and README
2026-06-15 10:09:42 +08:00
yeuimu
72bc89ab03
chore: init monorepo with existing website and plans
2026-06-15 02:31:15 +08:00