2042 Commits

Author SHA1 Message Date
WuYongJie
22cede9ed0 merge(main): publish finance store password reveal 2026-09-08 06:22:23 +08:00
c1dd4e666e Merge pull request 'feat(store-accounts): 财务专用按需密码读取、审计与安全状态' (#17) from codex/wuyongjie-store-accounts-finance-reveal into codex/xuxiake-mainline 2026-09-08 06:21:56 +08:00
WuYongJie
494a1cf60f feat(store-accounts): add audited finance password reveal 2026-09-08 05:59:19 +08:00
WuYongJie
f5a8ec1c05 feat(intake): add product factory workbook export and import by sku code
the product factory workspace gains export/import template buttons (purchase/merchandiser already hold node download grants): the export brings out the sku code, set count and every factory fillable field, splitting set count 2 rows into their A/B package codes; the import matches rows by sku code, enforces a header layout identical to the exported template, validates supplier names against the supplier directory, warehouses against the warehouse directory, enum fields against system options and number/date formats, collapses or splits A/B packages when the imported set count changes, and rejects confirmed rows - any row error aborts the whole import with per-row line numbers and reasons. Size, color and material columns are reference only.
2026-09-07 17:14:07 +08:00
WuYongJie
e9f83b16ee feat(intake): add product factory workbook export and import by sku code
the product factory workspace gains export/import template buttons (purchase/merchandiser already hold node download grants): the export brings out the sku code, set count and every factory fillable field, splitting set count 2 rows into their A/B package codes; the import matches rows by sku code, enforces a header layout identical to the exported template, validates supplier names against the supplier directory, warehouses against the warehouse directory, enum fields against system options and number/date formats, collapses or splits A/B packages when the imported set count changes, and rejects confirmed rows - any row error aborts the whole import with per-row line numbers and reasons. Size, color and material columns are reference only.
2026-09-07 17:12:59 +08:00
WuYongJie
416e22754a 供应商新品推荐:新增采购数据看板与PK榜
看板双视图(明细数据/采购看板,仅采购与管理可见看板);按月聚合采购推荐SKU/涉及工厂/被选款/被选率;路径行明细支持工厂勾选后跳转明细数据;被选款数量卡片跳转已选明细;PK榜爬山形态铺满全屏,管理员可配置主题/总金额/层级门槛与金额/规则说明(存 SystemConfig,无迁移)。
2026-09-07 16:40:49 +08:00
WuYongJie
d4d26c43bf 供应商新品推荐:新增采购数据看板与PK榜
看板双视图(明细数据/采购看板,仅采购与管理可见看板);按月聚合采购推荐SKU/涉及工厂/被选款/被选率;路径行明细支持工厂勾选后跳转明细数据;被选款数量卡片跳转已选明细;PK榜爬山形态铺满全屏,管理员可配置主题/总金额/层级门槛与金额/规则说明(存 SystemConfig,无迁移)。
2026-09-07 16:39:38 +08:00
WuYongJie
8fb872a3f9 feat(intake): open sample measurement and pricing template access with spec name column
measurement and pricing nodes now default downloads for pricing/purchase/merchandiser subjects so non-admin owners see the export/import template buttons; both workbook exports add a spec name reference column after the barcode (imports stay barcode-keyed and ignore it); the pricing node also grants merchandiser download parity with purchase owners.
2026-09-07 11:48:18 +08:00
WuYongJie
f8ba4f1e25 feat(intake): open sample measurement and pricing template access with spec name column
measurement and pricing nodes now default downloads for pricing/purchase/merchandiser subjects so non-admin owners see the export/import template buttons; both workbook exports add a spec name reference column after the barcode (imports stay barcode-keyed and ignore it); the pricing node also grants merchandiser download parity with purchase owners.
2026-09-07 11:47:40 +08:00
WuYongJie
39d7fc02f6 feat(finished-product-progress): auto-import factory-confirmed SKUs on sample completion 2026-09-07 11:17:21 +08:00
WuYongJie
8ea6a54eaa feat(finished-product-progress): auto-import factory-confirmed SKUs on sample completion 2026-09-07 11:15:01 +08:00
WuYongJie
667438447a fix(intake): move import rowNumber off the shared sku export row type
the optional numeric rowNumber on NonIntegratedSkuExportRow broke the dynamic template column writes (string vs never) in the production build type check; import rows now use a dedicated NonIntegratedSkuImportRow type that extends the export row with a required rowNumber.
2026-09-05 12:26:25 +08:00
WuYongJie
092036786c fix(barcode-print): restore Sofia certificate row pitch 2026-09-05 11:55:52 +08:00
WuYongJie
4a574041a9 fix(barcode-print): restore Sofia certificate row pitch 2026-09-05 11:53:55 +08:00
WuYongJie
2dbb214006 fix(intake): move import rowNumber off the shared sku export row type
the optional numeric rowNumber on NonIntegratedSkuExportRow broke the dynamic template column writes (string vs never) in the production build type check; import rows now use a dedicated NonIntegratedSkuImportRow type that extends the export row with a required rowNumber.
2026-09-04 17:59:40 +08:00
WuYongJie
e926a5a990 fix(intake): replace unsafe cast in sku export empty row builder
adding the optional rowNumber field to NonIntegratedSkuExportRow made the Object.fromEntries cast insufficient for the production build type check; build the empty import row explicitly instead.
2026-09-04 17:49:57 +08:00
WuYongJie
4f6510271f fix(intake): replace unsafe cast in sku export empty row builder
adding the optional rowNumber field to NonIntegratedSkuExportRow made the Object.fromEntries cast insufficient for the production build type check; build the empty import row explicitly instead.
2026-09-04 17:49:31 +08:00
WuYongJie
fccf9485b7 feat(intake): validate sku import skuCode spu prefix
standard sku workbook import now rejects rows whose skuCode does not start with the product spu in uppercase (lowercase codes are reported as needing uppercase); rows with an empty skuCode still pass and get auto-generated on save; the whole import is rejected with per-row line numbers and reasons. barcodes are skipped since they derive from the sku code.
2026-09-04 17:40:11 +08:00
WuYongJie
f4712cd1a2 feat(intake): validate sku import skuCode spu prefix
standard sku workbook import now rejects rows whose skuCode does not start with the product spu in uppercase (lowercase codes are reported as needing uppercase); rows with an empty skuCode still pass and get auto-generated on save; the whole import is rejected with per-row line numbers and reasons. barcodes are skipped since they derive from the sku code.
2026-09-04 17:39:35 +08:00
WuYongJie
e27e4fe67e feat(sample-progress): add daily due-date reminder notifications 2026-09-04 16:15:44 +08:00
WuYongJie
4843e16124 feat(sample-progress): add daily due-date reminder notifications 2026-09-04 16:14:51 +08:00
WuYongJie
f41e87373b fix(barcode-print): normalize Sofia certificate row spacing 2026-09-04 15:27:09 +08:00
WuYongJie
d32988dde6 fix(barcode-print): normalize Sofia certificate row spacing 2026-09-04 15:26:23 +08:00
WuYongJie
b30e5e5850 fix(barcode-print): tune Sofia certificate field positions 2026-09-04 12:27:39 +08:00
WuYongJie
bbb35a44f3 fix(barcode-print): tune Sofia certificate field positions 2026-09-04 12:25:32 +08:00
WuYongJie
56f3a7fe3f fix(supply-chain): show feedback as timed toast 2026-09-04 11:27:55 +08:00
WuYongJie
d3dee58b2b fix(supply-chain): default batch selection operator 2026-09-04 11:27:55 +08:00
WuYongJie
3df9bf08b1 fix(supply-chain): show feedback as timed toast 2026-09-04 11:25:31 +08:00
WuYongJie
d08a244fcb fix(supply-chain): default batch selection operator 2026-09-04 11:23:54 +08:00
WuYongJie
b488e6084c fix(finished-product-progress): enforce first-due-date protection on import updates
Import rows must not bypass the confirmed-first-due-date protection. Drop the allowDueDateChanges flag from the import update path so first-due-date changes are rejected and weekly due-date changes still require a reason, matching manual edits. Legacy rows without an order-placed date keep their free-correction path.
2026-09-04 10:59:29 +08:00
WuYongJie
99f004a593 fix(finished-product-progress): enforce first-due-date protection on import updates
Import rows must not bypass the confirmed-first-due-date protection. Drop the allowDueDateChanges flag from the import update path so first-due-date changes are rejected and weekly due-date changes still require a reason, matching manual edits. Legacy rows without an order-placed date keep their free-correction path.
2026-09-04 10:55:55 +08:00
WuYongJie
a252c00ac2 fix: align sofia certificate print fields 2026-09-04 10:32:41 +08:00
WuYongJie
13dd73069e fix: align sofia certificate print fields 2026-09-04 10:28:58 +08:00
WuYongJie
592b53f0ac merge(main): 发布可切换抠图配置与异步智能抠图 2026-09-03 18:48:20 +08:00
WuYongJie
16d6069123 merge: 发布可切换抠图配置与异步智能抠图 2026-09-03 18:48:04 +08:00
WuYongJie
a5cca36d69 fix(bom-costing): 接入供应商异步智能抠图模型 2026-09-03 18:44:51 +08:00
WuYongJie
966a8340e4 Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0 2026-09-03 18:27:47 +08:00
WuYongJie
6b3760c6e7 feat(bom-costing): 支持可切换的抠图接口配置 2026-09-03 18:27:22 +08:00
WuYongJie
92bd812a17 feat(supply-chain): add supplier recommendation notice discard pool 2026-09-03 17:55:00 +08:00
WuYongJie
3456d1f465 Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration 2026-09-03 17:53:56 +08:00
WuYongJie
ffcf242738 feat(supply-chain): add supplier recommendation notice discard pool 2026-09-03 17:51:56 +08:00
WuYongJie
24b5d5872f merge(main): 发布 BOM 商品详情图排列修正 2026-09-03 17:46:23 +08:00
WuYongJie
b335ef7719 merge: 修正 BOM 商品详情图排列 2026-09-03 17:46:11 +08:00
WuYongJie
394927d843 Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0 2026-09-03 17:45:59 +08:00
WuYongJie
f4adeb3808 fix(bom-costing): 纵向完整展示商品详情图 2026-09-03 17:45:38 +08:00
WuYongJie
452c41bc4d merge(main): 发布 BOM 商品图片布局修正 2026-09-03 17:24:23 +08:00
WuYongJie
cac0452672 merge: 修正 BOM 商品图片布局 2026-09-03 17:24:09 +08:00
WuYongJie
0c65f7af2b Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0 2026-09-03 17:23:54 +08:00
WuYongJie
4a9e5d99be fix(bom-costing): 按指定位置重排商品图片 2026-09-03 17:23:03 +08:00
WuYongJie
04d6219417 merge(main): 发布 BOM 商品抠图与图片分类 2026-09-03 17:06:12 +08:00