居居
1c1efebf27
fix(supply-chain): 清空停产退市商品限价
...
(cherry picked from commit 42b374801df5926aba8f302af518a538e2baede1)
2026-10-20 17:24:25 +08:00
WuYongJie
0509df6408
fix(installation-demo): synchronize clockwise screw and tool playback
2026-10-20 15:08:37 +08:00
居居
89eb66c6f6
feat(supply-chain): 限价筛选条件支持自定义
2026-10-20 14:51:20 +08:00
居居
7ce4b93706
feat(supply-chain): 限价顶部新增编码筛选
2026-10-20 14:51:20 +08:00
WuYongJie
75ba586ac8
feat(production-stop-demands): 完善档案字段、筛选、视图与通知中心联动
...
- 明细新增图片、产品标签、含大单近30日日销(条码/SKU 数值快照)
- 表头漏斗筛选(模糊/多选/数值比较/日期区间)、批量搜索、筛选设置
- 列设置拖动排序、快捷查询保存与套用
- 视图统计:日/周/月趋势、部门/需求人/原因/状态分布、饼图与明细下钻
- 通知中心:停产确认/待走流程/需求驳回通知、待办快照同步、钉钉全屏链接
- 新增迁移与历史数据回填脚本
2026-10-20 14:32:41 +08:00
居居
c34b72304d
feat(supply-chain): 新增组合限价导出
2026-10-20 13:10:28 +08:00
居居
3cc85ed5d2
feat(supply-chain): 精简破价订单筛选条件
2026-10-20 13:10:28 +08:00
居居
8153f284e5
feat(supply-chain): 品牌页纳入三类国标前缀
2026-10-20 13:10:28 +08:00
WuYongJie
1614bd5e95
feat(diy): add text replacement and template URL import
...
Add image text detection/replacement with original preservation, compact result actions, and stored template imports. Keep image editor and template layout dialogs at consistent viewport sizes with internal scrolling.
2026-10-20 12:12:53 +08:00
WuYongJie
cadb917d90
feat(diy): add image adjustment, resizing and template layout tools
2026-10-20 09:43:40 +08:00
WuYongJie
09f36608de
Use furniture Z-up axes in installation demo editing
...
Map X to width, Y to depth, and Z to height in numeric movement, drag and rotation controls, and feedback. Preserve existing Y-up model poses and saved data, and extract transform-anchor helpers.
2026-10-19 17:55:11 +08:00
WuYongJie
cba68a8cc7
fix(print): allow C-Lodop embedded preview frames
2026-10-19 17:07:48 +08:00
WuYongJie
414b86fd56
fix(home): open saved websites in a new tab
2026-10-19 16:46:53 +08:00
WuYongJie
df253a470d
Optimize installation model preview and repair exploded layouts
...
Parse and cache OBJ geometry off the main thread, reuse the viewport, and adapt interaction rendering. Pull drawers out as complete groups, enforce panel and hardware clearance, and frame the applied layout. Add relative X/Y/Z movement in millimeters with existing persistence.
2026-10-19 16:44:30 +08:00
居居
4e949067d3
fix(supply-chain): 仅在品牌页按GBSFY归类
2026-10-19 16:22:34 +08:00
居居
8aa17b7a34
fix(supply-chain): 按GBSFY前缀纠正索菲亚品牌
2026-10-19 16:22:34 +08:00
居居
d5b5a60141
feat(supply-chain): 限价列表按负责人限价降序
2026-10-19 16:22:33 +08:00
WuYongJie
ef4e4e36ed
feat(supply-chain): 商品库存快照落库并改读快照
...
- 新增 ProductInventorySnapshot / ProductInventorySnapshotRun 模型与正式迁移(条码×实际仓库)
- 同步任务复用现有库存/云仓/档案读取,临时表+事务原子替换,advisory lock 防重叠,失败保留上一份快照
- 新增 15 分钟 systemd timer 安装脚本与同步脚本(身份校验、凭据走环境变量)
- 列表/导出接口改读快照并展示 syncedAt,保留全零行过滤与导出字段选择
2026-10-19 15:40:57 +08:00
WuYongJie
5cf84a19c8
Merge latest main into accepted homepage release
2026-10-19 15:17:01 +08:00
WuYongJie
7210dd2111
fix(home): render homepage without the product sidebar
2026-10-19 15:12:29 +08:00
WuYongJie
071cd23ac9
feat(home): add fan carousel and double-click overview
2026-10-19 15:12:29 +08:00
居居
211aff2578
feat(supply-chain): 查询框直接支持批量筛选
2026-10-19 15:07:49 +08:00
居居
c691669101
feat(supply-chain): 限价筛选支持批量查询
2026-10-19 15:07:49 +08:00
居居
2b4eb17ec7
fix(supply-chain): 排除停产退市组合限价
2026-10-19 15:07:49 +08:00
居居
c62d951228
fix(supply-chain): 限价筛选候选值联动
2026-10-19 15:07:49 +08:00
居居
da4b77e6d6
style(supply-chain): 对齐表头列宽拖拽热区
2026-10-19 15:07:49 +08:00
居居
9360c553a2
fix(supply-chain): 修复组合单行表头遮挡明细
2026-10-19 15:07:49 +08:00
居居
a843b643ed
fix(supply-chain): 放行组合运营负责人筛选
2026-10-19 15:07:49 +08:00
居居
05e1f94e46
fix(supply-chain): 修复组合限价筛选交互
2026-10-19 15:07:49 +08:00
居居
de26559e3e
fix(supply-chain): 完善组合限价筛选与运营负责人
2026-10-19 15:07:49 +08:00
居居
c2f005712b
feat(supply-chain): 新增组合限价页
2026-10-19 15:07:49 +08:00
居居
177d11dd47
style(supply-chain): 列名「非负责人限价(新)」改为「非负责人限价」
...
- 限价明细页与产品全量档案页的限价分组同步改名(导出列头随列定义一起生效)
2026-10-19 15:07:49 +08:00
居居
c104a029c9
fix(supply-chain): 限价明细「负责人限价」筛选补上候选值与筛选逻辑
...
- 负责人限价是 SupplyChainStyleLimitPrice.ownerLimitPrice 的派生列(按货号),此前 option 接口没有对应分支,
下拉框显示「没有可选值」、选了也不生效
- 候选值:无其他筛选时取限价表的全部去重价格(两位小数,与界面一致);有筛选时只取当前结果集里货号的限价;
无流程限价的商品提供「空值」选项
- 筛选:选中的价格先经 ROUND(price,2) 换回货号再按 sku 过滤;选中的价格无对应货号返回空结果;
「空值」= 货号不在限价表里
- 补 3 条单测(价格→货号、无匹配、空值)
2026-10-19 15:07:49 +08:00
WuYongJie
ee983673d5
feat(supply-chain): 产品全量档案新增安装方式列(定厂优先+商品标签推导)
2026-10-19 12:06:41 +08:00
居居
132331733e
feat(supply-chain): 限价流程同步改为服务器端可运行 + systemd 每日定时器
...
- sync-limit-workflows.mjs 路径参数化:新增 --out-dir/--initial-dir/--env-file/--skip-excel,
环境变量 LIMIT_SYNC_OUT_DIR / LIMIT_SYNC_INITIAL_DIR / LIMIT_SYNC_ENV_FILE / LIMIT_SYNC_SKIP_EXCEL / LIMIT_SYNC_HISTORY_KEEP;
默认目录改为应用根目录,不再写死 Mac 桌面
- 期初数据:优先显式目录,其次仓库自带 scripts/data/limit-sync/期初数据(首次部署可直接使用),
服务器上业务更新只需把新的「限价期初数据*.xlsx」放进 shared 目录
- 写库安全:校验 DATABASE_URL、打印目标库(不含密码)、DELETE+INSERT 包在单事务里,
失败自动回滚保留上一版限价/授权;Excel 导出失败不影响已提交的库数据
- 输出治理:输出目录自动创建;历史版本默认保留最近 20 份,避免服务器磁盘每天累积 30MB
- 新增 run-limit-workflow-sync-production.cjs:预检 shared/.env 变量(DATABASE_URL / JST_REPORT_DB_*)、
打印库目标、透传参数、30 分钟硬超时、失败写 job 日志
- 新增 install-limit-workflow-sync-timer.sh:照 marketing-sales 样板安装 systemd service+timer,
EnvironmentFile=$BASE/shared/.env,默认每天北京时间 07:30,输出/期初数据放 $BASE/shared/limit-workflow-sync
- 文档补充「正式站同步」章节;顺带修正 supply-chain-page-permissions 测试的菜单页数(新增限价管理后 27 页)
- 未改动 20261014/20261015 三个迁移目录(正式库已按现名建表)
2026-10-19 10:13:34 +08:00
WuYongJie
1b849b0209
feat(supply-chain): 新增商品库存管理(库存/云仓/筛选/导出/快捷查询)
...
- 页面:成品库存 × 实际仓库,按条码匹配产品档案与仓库配置
- 服务:聚水潭成品库存全量读取与缓存、筛选/排序/分页、小计、Excel 导出
- 云仓:链接服务器 OPENQUERY 汇总 order_able_qty,支持云仓明细下钻
- 接入:菜单、标签页、权限节点 productInventory
2026-10-19 09:54:57 +08:00
WuYongJie
d8b5006e44
feat(diy): add permanent deletion for saved schemes
...
(cherry picked from commit 2d1486b64c5f7dcd3a3a1e247ebe0c6d12e41d21)
2026-10-19 09:50:58 +08:00
居居
7fc43502fd
fix(supply-chain): 修复限价管理合并入 mainline 后的 18 处类型错误(type-check 0 错误)
...
提交自身的错误:
- breach-orders/route.ts:filtersSchema 去掉重复的 platform / shopName 键(保留带长度上限的一份)
- supply-chain-breach-order.service.ts:BreachOrderListFilters 去掉重复声明的 platform / shopName
- BreachOrderTab.tsx:MultiFilterChip 的 field 联合类型补齐店铺款式编码/店铺商品编码/申诉原因/平台/店铺(与 filter-options 接口支持的字段一致)
- breach-orders/[id]/route.ts 与 breach-orders/route.ts:多结果分支的处理器统一声明为 handleRequest<unknown>(…): Promise<NextResponse<unknown>>,
与既有 reference-image-estimate 路由同一写法,解决 ctx.user 可选态与返回形状不匹配
补齐缺失的配套改动:
- errors.ts:新增 ErrorCode.RESOURCE_NOT_FOUND(含 ERROR_MESSAGES 与 HTTP 404 映射)
- ProductArchiveFilters:补 materialLevel / inspectionReport 两个筛选项类型(查询逻辑此前已随功能提交)
- bom-costing-multimodal-gateway.ts:BomCostingMultimodalOperation 增加 IMAGE_EXTRACTION(破价申诉凭证识别用),
breach-evidence.service 对可空的 providerConfig 加空值保护
- supply-chain-product-archive-select.ts:去掉重复的 sabcRating 选择项
- supply-chain-product-archive.repository.ts:storageType 候选值已在专用分支处理,去掉恒为 false 的重复判断
验证:git 干净检出后 npm run type-check(next typegen + tsc --noEmit)0 错误;
breach/supply-chain/permission 相关 230 个测试套件 1650 用例通过,失败 7 个套件均为 mainline 原有问题。
2026-10-19 09:23:04 +08:00
居居
62452b6343
fix(supply-chain): 检测报告按 SPU 文本里的编码匹配(平台 SPU 是自由文本)
...
- 平台 spu 形如「SJ0380书架 / 顾家穿衣镜DS5154 / BJ0056」,与档案 SPU 编码不一致;
解析时从 spu 与报告标题里提取编码(SJ0380、GBGJ-SJZ0021、DS5154…)再匹配,纯编码仍原样收下
- 通用报告(「茶几通用」等)不产出 SPU;无文件记录继续忽略
- 单测补自由文本/标题提取用例
2026-10-19 09:23:04 +08:00
居居
2fde21f5da
feat(supply-chain): 限价明细「是否有检测报告」接入素材平台检测报告接口
...
- 新增检测报告索引服务:GET {素材平台}/api/external/certificate-reports(X-API-Key),只认有报告文件的记录,按 SPU 汇总,进程内缓存 10 分钟
- 列取自 external 接口:限价页数据接口与「导出明细(含图片)」都带上 inspectionReport(有 / 无 / 空)
- 表头筛选接入:候选值「有 / 无」,筛选按报告 SPU 清单(接口未配置时不加条件、候选值为空)
- 配置:MATERIAL_LIBRARY_CERTIFICATE_REPORT_API_BASE_URL/API_KEY,不填复用 MATERIAL_LIBRARY_WHITE_BACKGROUND_API_*;未配置时该列显示为空
- 增补单测(解析/缓存/未配置/接口报错)与文档说明
2026-10-19 09:23:04 +08:00
居居
eca1d63842
feat(supply-chain): 限价管理的查看/导出/申诉权限统一由管理员配置
...
- 查看:页面与数据仍走「限价管理 · 可见」;导出改按「限价管理 · 下载」,申诉/审核/生成/导入改按「限价管理 · 操作」(原来是经营管理 edit)
- 服务端:下载中心 limit-export 任务与产品档案导出接口的 columnSet=limit 都按「限价管理 · 下载」鉴权
- 前端:无下载权限不展示导出入口(限价明细两个导出、破价订单导出当前筛选/乐捐明细);规则配置仍单独走 breachRuleConfig 节点
- 申诉保留兜底:破价单负责人本人即使无「操作」权限也可申诉本人订单,审核必须「操作」
- 测试:CustomTableView 补导出入口权限用例并修正过期的表头断言;文档补充权限章节
2026-10-19 09:23:04 +08:00
居居
f276164532
feat(supply-chain): 限价管理(限价明细 + 破价订单审核 + 规则配置 + 流程同步)
...
- 限价明细:抬头列/筛选/列宽/排序可配置,批量查询(商品编码/订单号/负责人等),筛选条件回显与一键清空
- 列取数口径:入库/代发按仓库名推导(含仓库配置覆盖)、产品标签取商品SABC打标、材质等级从「材质」识别 E0/E1/ENF
- 导出:导出明细 / 导出明细(含图片)改为全局下载中心后台生成,进度/取消/保存都在下载中心;页签名与文件名一致
- 破价订单审核:按天增量生成、链接级与订单级申诉、审核通过/驳回/二次申诉冲销乐捐、豁免(同价/活动)与证据凭证要求
- 规则配置页与权限:管理员开通后可编辑(权限节点 breachRuleConfig),无权限不可见
- 限价流程同步脚本:4 类钉钉限价流程 + 产品限价页面已确认限价 + 限价期初数据;流程/页面/期初优先级与「期初更新日期更新则以期初为准」
- 非负责人限价统一按最新口径派生(×1.05 且不低于 +10 元)
- 迁移:breach order review / breach rule config / limit flow sync
- 与 mainline 合并:保留字段权限(blockedFields)、负责人在职接管、限价目标 limitManagement 等新特性;
规则配置权限并入新的权限节点结构,档案列去掉重复的 opsPriceLimit 列,相关测试断言按当前口径更新
2026-10-19 09:23:03 +08:00
WuYongJie
399fd8182d
refactor(diy): simplify canvas controls and unify capsule styling
...
(cherry picked from commit 1429b870f08b34e37b02c3077053f17385e9738a)
2026-10-16 18:04:54 +08:00
WuYongJie
5c899b4705
revert: 限价管理两个提交(类型检查不通过,待功能线程修复后重新提交)
2026-10-16 17:55:56 +08:00
居居
fbe276d4f6
feat(supply-chain): 限价管理的查看/导出/申诉权限统一由管理员配置
...
- 查看:页面与数据仍走「限价管理 · 可见」;导出改按「限价管理 · 下载」,申诉/审核/生成/导入改按「限价管理 · 操作」(原来是经营管理 edit)
- 服务端:下载中心 limit-export 任务与产品档案导出接口的 columnSet=limit 都按「限价管理 · 下载」鉴权
- 前端:无下载权限不展示导出入口(限价明细两个导出、破价订单导出当前筛选/乐捐明细);规则配置仍单独走 breachRuleConfig 节点
- 申诉保留兜底:破价单负责人本人即使无「操作」权限也可申诉本人订单,审核必须「操作」
- 测试:CustomTableView 补导出入口权限用例并修正过期的表头断言;文档补充权限章节
2026-10-16 17:46:01 +08:00
居居
4be4bd1e09
feat(supply-chain): 限价管理(限价明细 + 破价订单审核 + 规则配置 + 流程同步)
...
- 限价明细:抬头列/筛选/列宽/排序可配置,批量查询(商品编码/订单号/负责人等),筛选条件回显与一键清空
- 列取数口径:入库/代发按仓库名推导(含仓库配置覆盖)、产品标签取商品SABC打标、材质等级从「材质」识别 E0/E1/ENF
- 导出:导出明细 / 导出明细(含图片)改为全局下载中心后台生成,进度/取消/保存都在下载中心;页签名与文件名一致
- 破价订单审核:按天增量生成、链接级与订单级申诉、审核通过/驳回/二次申诉冲销乐捐、豁免(同价/活动)与证据凭证要求
- 规则配置页与权限:管理员开通后可编辑(权限节点 breachRuleConfig),无权限不可见
- 限价流程同步脚本:4 类钉钉限价流程 + 产品限价页面已确认限价 + 限价期初数据;流程/页面/期初优先级与「期初更新日期更新则以期初为准」
- 非负责人限价统一按最新口径派生(×1.05 且不低于 +10 元)
- 迁移:breach order review / breach rule config / limit flow sync
- 与 mainline 合并:保留字段权限(blockedFields)、负责人在职接管、限价目标 limitManagement 等新特性;
规则配置权限并入新的权限节点结构,档案列去掉重复的 opsPriceLimit 列,相关测试断言按当前口径更新
2026-10-16 17:46:01 +08:00
WuYongJie
bc8a4a15e9
feat(intake): notify quality inspectors and keep product photo uploads available
2026-10-16 17:28:45 +08:00
WuYongJie
77c91bd689
fix(supply-chain): 产品全量档案 DF 条码成本价改为统一取 jst_sku.cost_price
...
- enrichment 价格补丁不再区分 DF/非 DF:purchasePrice 与 costPrice 均取 rpt.jst_sku(purchase_price / cost_price)
- 删除 dws_sn_sales_full_info_di.goods_cost 取价链路(dws-sales-goods-cost.repository.ts 整删,DWS_SALES_GOODS_COST 来源常量移除)
- 单测与《供应链产品全量档案字段来源对照表》同步更新
预期效果(部署后下一轮同步):约 1874 条 DF 成本价由空变有值、约 230 条由 dws 金额口径变为 jst 单价口径、约 4516 条数值不变、0 条丢值。
2026-10-16 16:27:31 +08:00
WuYongJie
4bd48d8bc0
fix(diy): keep wood grain continuous and compact inspector
...
(cherry picked from commit 9af20a14b07f6da46691a7356c5fd1d08aa48887)
2026-10-16 14:47:27 +08:00
WuYongJie
d8e43e89ba
fix(supply-chain): 仓库管理列表只取聚水潭仓库档案,档案历史名称不再补充展示
2026-10-16 14:00:51 +08:00
WuYongJie
12f04a2f96
feat(supply-chain): 产品全量档案移除「数据字典」占位入口
...
数据字典属内部开发口径,不对外暴露;「更多」菜单仅保留使用说明,清理占位提示状态;使用说明对应条目同步。
2026-10-16 13:56:48 +08:00
Codex
47eed75bca
feat(supply-chain): 仓库管理模块全量源码(筛选排序/导入导出/属性覆盖/负责人对齐)
...
- 表头:除操作列外全列筛选下拉 + 升/降序排序(服务端排序,空值恒排末尾)
- 导入导出:模板含仓库名称/仓库属性/仓库归属/负责人/入库代发;导出支持字段勾选、跟随筛选与排序;导入弹窗(下载模板+选择文件)与进度面板,导入后可一键「仅查看导入的仓库」
- 仓库属性人工覆盖表(新增迁移 20261016103000)与单元格内联编辑
- 仓库负责人:工厂仓取产品档案采购,档案读取走只读库(回退主库)
- 菜单/页签/页面标题统一为「仓库管理」
2026-10-16 13:32:52 +08:00
WuYongJie
0ca4e4f8f1
fix(supply-chain): 产品全量档案导入入口补挂「操作」权限门控
2026-10-16 13:14:36 +08:00
WuYongJie
a54d32941f
fix(diy): fit transparent basket patterns with five millimeter clearance
2026-10-16 12:31:53 +08:00
WuYongJie
559d025e6d
feat(users): 字段权限集中配置——产品全量档案与店铺账号管理
2026-10-16 11:29:50 +08:00
居居
141ac4654c
fix(supply-chain): 创建天数正好 90 天归入「创建60-90天」
...
- 新品区间分布边界修正:90 天整算 60-90 天,91 天起才是「创建90天以上」
- 读取已生成月份快照时按快照里的创建天数重算该字段,旧月份无需重新核算即可按新口径显示
2026-10-16 11:20:24 +08:00
WuYongJie
9465c98702
feat(product-archive): add batch code filters and compact sales controls
2026-10-15 17:51:10 +08:00
居居
11fd22f356
feat(supply-chain): 产品中心/采购中心不再依赖运营负责人
...
- 有设计师即计入产品中心、有采购即计入采购中心,即使该行没有运营负责人
- 运营中心仍只统计有运营负责人的行;「山东项目组」设计师/采购继续排除
- 快照增加口径版本号:读到旧口径快照时先按实时口径出数,并在后台自动重建该月快照(无需手动点保存配置)
2026-10-15 17:20:10 +08:00
居居
fc862c80fc
feat(supply-chain): 各部门数据分类支持按事业部导出,事业部按一/二/三/四部排序
...
- 运营中心卡片「导出」改为先勾选事业部(默认全选;页面已筛事业部时默认只选它),只导出勾选范围
- 导出接口本已支持 department 过滤,前端补上多选入口(后端无需改动)
- 事业部/品类部名称排序改为按序号解析:事业一部→二部→三部→四部,品类九部→十部→十一部,不再按拼音乱序
- 新增部门名称排序工具与单测
2026-10-15 17:20:10 +08:00
WuYongJie
bcfd191657
fix(diy): add generated image deletion
2026-10-15 16:26:10 +08:00
WuYongJie
a9635163bc
Merge shared mainline for Relay native image generation
...
Preserve the five existing production owner fixes and apply the reviewed AI task migration. Resolve DIY add/add conflicts only after checking that the feature baseline and production versions were identical. Merged AI tests and type-check passed; the retained production write guards were also checked in production mode.
2026-10-15 15:10:10 +08:00
WuYongJie
928a7b37a9
feat(ai): use durable Relay native image tasks
...
Persist image submissions with fixed idempotency keys, leased execution, provider
identity, reference snapshots and staged results. Integrate DIY, assisted assembly
and non-integrated white-background sessions without holding generation in a
browser request. Recover ambiguous submissions through owner-scoped reads and
stop a new eight-view batch when restoring an earlier request.
Add the NativeImageGenerationJob migration and a dedicated worker to both release
entry points. Protect job inputs/results from storage GC. Existing production
configuration and business data are not changed by this commit.
Validation: 256 focused Jest tests, isolated PostgreSQL migration/lease/transaction
checks (8), deployment guard tests (9), type-check, production build and desktop/
mobile browser component scenarios. Live native 2K reference-image request worked;
reusing its idempotency key returned the same task. Build uses local placeholders
for otherwise absent Drawing System configuration. Three unrelated material tests
also fail with the original mainline test file; they remain outside this change.
Architecture/visual/root-cause review: passed with warnings. Independent review
completed for the integration and shared input/storage paths; worker additionally
reviewed by the primary agent. Production merge/deployment requires authorization.
2026-10-15 14:55:46 +08:00
WuYongJie
8e14aa5fb1
feat(diy): add shared assets, uploaded styles and AI rendering
2026-10-15 11:36:32 +08:00
WuYongJie
dc2c86275e
feat(diy): add shared assets, uploaded styles and AI rendering
2026-10-15 11:35:34 +08:00
WuYongJie
e0c324ce06
feat(supply-chain): 全量档案清除筛选移入筛选行并优化筛选交互(设置抽屉/回车确认)
...
- 「清除 N」从工具栏移到筛选行尾部(设置图标旁),收起细条保留清除入口
2026-10-15 11:11:47 +08:00
WuYongJie
67541f9208
feat(supply-chain): 全量档案清除筛选移入筛选行并优化筛选交互(设置抽屉/回车确认)
...
- 「清除 N」从工具栏移到筛选行尾部(设置图标旁),收起细条保留清除入口
2026-10-15 11:10:50 +08:00
WuYongJie
e2a237f43b
fix(product-archive): 结算价公式修正为成本价÷0.9(模块化)
...
- 模块化分支由 ×0.9 改为 ÷0.9:聚水潭里模块化成本价按 9 折记,
结算价需除以 0.9 还原(如成本 34.00 → 结算 37.78)
- 非模块化仍为成本价原样展示;先取整到分再除、四舍五入保留两位
- 同步更新测试期望值(76.20→84.67、123.45→137.17、85→94.44、34.00→37.78)
2026-10-15 09:18:26 +08:00
WuYongJie
d1496b0c11
fix(product-archive): 结算价公式修正为成本价÷0.9(模块化)
...
- 模块化分支由 ×0.9 改为 ÷0.9:聚水潭里模块化成本价按 9 折记,
结算价需除以 0.9 还原(如成本 34.00 → 结算 37.78)
- 非模块化仍为成本价原样展示;先取整到分再除、四舍五入保留两位
- 同步更新测试期望值(76.20→84.67、123.45→137.17、85→94.44、34.00→37.78)
2026-10-15 09:17:57 +08:00
WuYongJie
46ca3bf786
feat(product-archive): 全量档案第二个成本价列改为结算价(模块化 ×0.9)
...
- 列与变更记录标签:成本价(新品)→ 结算价 / 结算价(新品),表头与导出同步生效
- 结算价在查询映射层实时计算:非模块化沿用成本价原样,模块化按 0.9 折
(先取整到分再打折、四舍五入保留两位);模块化以商品标签含「模块化」判断,不落库
- 修复列设置合并时 localStorage 旧 label 覆盖默认列名的问题:内置列名
一律以当前默认定义为准,改名对已保存列设置的用户才能生效
2026-10-15 08:48:16 +08:00
WuYongJie
67834358d2
fix(product-archive): allow trusted HTTPS image host on port 3333
2026-10-14 18:18:50 +08:00
WuYongJie
b6a326d996
fix(product-archive): allow trusted HTTPS image host on port 3333
2026-10-14 18:14:47 +08:00
WuYongJie
ec6067facc
feat(supply-chain): 产品全量档案新增独立图文使用说明页(更多菜单新标签页打开)
...
- 新增 /product-archive-guide 独立路由:模块树目录(产品全量档案 → 1.1~1.10),无系统壳,登录+productArchive 查看权限
2026-10-14 17:45:18 +08:00
WuYongJie
e57f95c489
feat(supply-chain): 产品全量档案新增独立图文使用说明页(更多菜单新标签页打开)
...
- 新增 /product-archive-guide 独立路由:模块树目录(产品全量档案 → 1.1~1.10),无系统壳,登录+productArchive 查看权限
2026-10-14 17:43:53 +08:00
WuYongJie
9ef800001f
feat(product-archive): 全量档案第二个成本价列改为结算价(模块化 ×0.9)
...
- 列与变更记录标签:成本价(新品)→ 结算价 / 结算价(新品),表头与导出同步生效
- 结算价在查询映射层实时计算:非模块化沿用成本价原样,模块化按 0.9 折
(先取整到分再打折、四舍五入保留两位);模块化以商品标签含「模块化」判断,不落库
- 修复列设置合并时 localStorage 旧 label 覆盖默认列名的问题:内置列名
一律以当前默认定义为准,改名对已保存列设置的用户才能生效
2026-10-14 17:09:30 +08:00
WuYongJie
89fbe9231b
feat(supply-chain): 全量档案运营负责人切换 js_sku_info_manage.sku_manager 数据源
2026-10-14 14:28:05 +08:00
WuYongJie
289926294d
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-14 14:27:19 +08:00
WuYongJie
9492eba22d
feat(supply-chain): 全量档案运营负责人切换 js_sku_info_manage.sku_manager 数据源
2026-10-14 14:27:02 +08:00
居居
bfe3073aa1
feat(supply-chain): 人员信息总负责人支持多中心总监并列显示(如 子龙/妙玉)
2026-10-14 13:03:08 +08:00
WuYongJie
49ec0be34f
feat(supply-chain): 日销任务改为每日 08:00 单次执行,未到数即告警并支持手动补跑
2026-10-14 12:28:45 +08:00
WuYongJie
1e0a8decc1
feat(supply-chain): 日销任务改为每日 08:00 单次执行,未到数即告警并支持手动补跑
2026-10-14 12:28:40 +08:00
WuYongJie
2c4128e065
feat(supply-chain): 日销任务改为每日 08:00 单次执行,未到数即告警并支持手动补跑
2026-10-14 12:28:24 +08:00
WuYongJie
d5443e9f77
fix(product-archive): display complete column headers and preserve readable widths
2026-10-14 11:56:12 +08:00
WuYongJie
bcb0636625
fix(product-archive): display complete column headers and preserve readable widths
2026-10-14 11:55:26 +08:00
WuYongJie
822df76e19
fix(product-archive): display complete column headers and preserve readable widths
2026-10-14 11:55:00 +08:00
WuYongJie
fc50035d65
feat(owners): include growth center employees in business owner options
2026-10-14 11:35:12 +08:00
WuYongJie
b0d531e1af
feat(owners): include growth center employees in business owner options
2026-10-14 11:33:58 +08:00
WuYongJie
bf2f114762
feat(owners): include growth center employees in business owner options
2026-10-14 11:33:22 +08:00
WuYongJie
a917949a5e
fix(supply-chain): 基础同步回退视图不存在的 item_type 列引用并修复失败告警原因为空
2026-10-14 10:39:04 +08:00
WuYongJie
cf11c4251e
fix(supply-chain): 基础同步回退视图不存在的 item_type 列引用并修复失败告警原因为空
2026-10-14 10:38:37 +08:00
WuYongJie
7f1358aa68
fix(supply-chain): 基础同步回退视图不存在的 item_type 列引用并修复失败告警原因为空
2026-10-14 10:38:22 +08:00
WuYongJie
83f0fbee86
feat(supply-chain): 产品全量档案负责人治理与聚水潭式表头改造
2026-10-14 10:08:08 +08:00
WuYongJie
f84abed356
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
...
# Conflicts:
# furniture-3d-system/src/server/repositories/__tests__/product-archive-owner-workflow.repository.test.ts
# furniture-3d-system/src/server/repositories/product-archive-owner-workflow.repository.ts
2026-10-14 10:04:53 +08:00
WuYongJie
42d2447481
feat(supply-chain): 产品全量档案负责人治理与聚水潭式表头改造
2026-10-14 10:04:06 +08:00
WuYongJie
fb1c74ae67
fix(diy): retry transient storage failures during catalog import
2026-10-14 09:20:36 +08:00
WuYongJie
20eaf3589c
fix(diy): retry transient storage failures during catalog import
2026-10-14 09:20:00 +08:00
WuYongJie
ce66215764
fix(storage): handle Qiniu CommonJS SDK default export for DIY import
2026-10-14 08:59:22 +08:00
WuYongJie
d76d024d62
fix(storage): handle Qiniu CommonJS SDK default export for DIY import
2026-10-14 08:58:44 +08:00
WuYongJie
56548a731e
Merge production main into shared baseline for SABC release
...
Preserve SABC storage-type and batch-search changes, logistics column resizing, and production-main employee-hours and route export compatibility. Verified 54 focused tests and type-check; no pending production migrations.
2026-10-13 16:24:15 +08:00
居居
252624708d
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-13 10:15:47 +08:00
居居
7ae628f9f1
feat(supply-chain): SABC 明细新增「入库/代发」列,货号/商品编码/款式编码支持空格批量查询
...
- 明细与导出新增「入库/代发」,取值来源产品全量档案 storageType(入仓/代发)
- 已生成月份仍读快照;旧快照缺该字段时按 barcode 从档案补齐,无需重新核算
- 货号/商品编码/款式编码额外支持空格/制表符分隔(可直接粘贴 Excel 多行或多列),服务端最多取 200 个
- 入库/代发取值兼容字典值(INBOUND/DROPSHIP)与中文直填(入仓/入库/代发),产品全量档案列表同步显示
2026-10-13 10:15:34 +08:00
WuYongJie
f8b8959347
feat(diy): persist shared catalog and assets in database and object storage
2026-10-13 09:56:39 +08:00
WuYongJie
409e35e232
feat(diy): persist shared catalog and assets in database and object storage
2026-10-13 09:55:55 +08:00
WuYongJie
462fee6a46
feat(diy): persist shared catalog and assets in database and object storage
2026-10-13 09:48:09 +08:00
WuYongJie
ee033a1e08
feat(diy): add cabinet workbench with saved versions and BOM exports
2026-10-12 18:16:14 +08:00
WuYongJie
12de551328
feat(diy): add cabinet workbench with saved versions and BOM exports
2026-10-12 18:14:15 +08:00
WuYongJie
96f0373e79
feat(diy): add cabinet workbench with saved versions and BOM exports
2026-10-12 18:12:57 +08:00
WuYongJie
ecd11db3af
docs: 删除已废弃的苹果风格视觉标准(验收只按白曜石工坊口径)
2026-10-12 14:05:53 +08:00
WuYongJie
b45b584871
chore(installation-demo): 移除安装演示V2试验链并保留成对迁移历史
2026-10-12 14:05:53 +08:00
WuYongJie
b237bbed7c
feat(supply-chain): 产品全量档案定时任务通知——业绩快照每日简报与四任务失败兜底
2026-10-12 14:05:53 +08:00
WuYongJie
b8093f899e
feat(supply-chain): 产品全量档案定时任务通知——业绩快照每日简报与四任务失败兜底
2026-10-12 14:05:18 +08:00
WuYongJie
f7811468f7
feat(supply-chain): 产品全量档案定时任务通知——业绩快照每日简报与四任务失败兜底
2026-10-12 14:05:06 +08:00
WuYongJie
92cd5f2903
docs: 删除已废弃的苹果风格视觉标准(验收只按白曜石工坊口径)
2026-10-12 11:08:32 +08:00
WuYongJie
e612936125
chore(installation-demo): 移除安装演示V2试验链并保留成对迁移历史
2026-10-12 11:08:32 +08:00
WuYongJie
c9c62f4b22
docs: 删除已废弃的苹果风格视觉标准(验收只按白曜石工坊口径)
2026-10-12 11:08:10 +08:00
WuYongJie
1dbcc0d84c
chore(installation-demo): 移除安装演示V2试验链并保留成对迁移历史
2026-10-12 11:08:10 +08:00
WuYongJie
1de64d05f6
fix(supply-chain): keep daily sales notification fields in separate paragraphs
2026-10-12 10:47:05 +08:00
WuYongJie
553c237268
fix(supply-chain): keep daily sales notification fields in separate paragraphs
2026-10-12 10:47:05 +08:00
WuYongJie
5ca82d1033
fix(supply-chain): keep daily sales notification fields in separate paragraphs
2026-10-12 10:46:24 +08:00
WuYongJie
00dd1b2f89
fix(supply-chain): 日销通知改为纯文字
...
去掉新通知的卡片按钮字段,正文采用普通换行。
保留旧投递的幂等重试载荷,公共通知链路不变。
验证:相关25项测试、ESLint及diff检查通过。
2026-10-12 10:26:40 +08:00
WuYongJie
75dd248046
fix(supply-chain): 日销通知改为纯文字
...
去掉新通知的卡片按钮字段,正文采用普通换行。
保留旧投递的幂等重试载荷,公共通知链路不变。
验证:相关25项测试、ESLint及diff检查通过。
2026-10-12 10:26:40 +08:00
WuYongJie
81cffc020a
fix(supply-chain): 日销通知改为纯文字
...
去掉新通知的卡片按钮字段,正文采用普通换行。
保留旧投递的幂等重试载荷,公共通知链路不变。
验证:相关25项测试、ESLint及diff检查通过。
2026-10-12 10:25:34 +08:00
WuYongJie
34e8426bb6
feat(store-account): display exact source platforms and filter before pagination
2026-10-12 10:24:17 +08:00
WuYongJie
a7554bebad
feat(store-account): display exact source platforms and filter before pagination
2026-10-12 10:23:48 +08:00
WuYongJie
520706df0d
feat(store-account): display exact source platforms and filter before pagination
2026-10-12 10:22:51 +08:00
WuYongJie
6a94f1b215
fix(supply-chain): 日销08点同步、失败补跑及管理员结果通知
...
北京时间08:00开始,未到数或失败按固定10分钟刻度补跑,成功当天停止源查询。
保留重启/PG失败记录和到数时间,正式任务定向徐霞客发送去重结果通知。
验证:31项定向测试、ESLint、全仓TypeScript、脚本语法与本地真实运行通过。
2026-10-12 10:05:44 +08:00
WuYongJie
9ca2f2d382
fix(supply-chain): 日销08点同步、失败补跑及管理员结果通知
...
北京时间08:00开始,未到数或失败按固定10分钟刻度补跑,成功当天停止源查询。
保留重启/PG失败记录和到数时间,正式任务定向徐霞客发送去重结果通知。
验证:31项定向测试、ESLint、全仓TypeScript、脚本语法与本地真实运行通过。
2026-10-12 10:04:42 +08:00
WuYongJie
c4f3063e88
fix(supply-chain): 日销08点同步、失败补跑及管理员结果通知
...
北京时间08:00开始,未到数或失败按固定10分钟刻度补跑,成功当天停止源查询。
保留重启/PG失败记录和到数时间,正式任务定向徐霞客发送去重结果通知。
验证:31项定向测试、ESLint、全仓TypeScript、脚本语法与本地真实运行通过。
2026-10-12 10:03:13 +08:00
WuYongJie
cb91d7a42f
fix(intake): calibrate Gujia 2026 certificate print positions
2026-10-12 09:22:56 +08:00
WuYongJie
6edf13e974
fix(intake): calibrate Gujia 2026 certificate print positions
2026-10-12 09:22:20 +08:00
WuYongJie
4885e8fc75
fix(intake): calibrate Gujia 2026 certificate print positions
2026-10-12 09:21:26 +08:00
WuYongJie
ffa4290c4a
feat(product-archive): 全量档案图片自动增量索引、换图失效与失败重试
2026-10-12 08:51:02 +08:00
WuYongJie
7b9fd60f6e
feat(product-archive): 全量档案图片自动增量索引、换图失效与失败重试
2026-10-12 08:50:39 +08:00
WuYongJie
0ca07f8c5e
feat(product-archive): 全量档案图片自动增量索引、换图失效与失败重试
2026-10-12 08:49:10 +08:00
WuYongJie
393f149c05
feat(product-archive): sync approved owner workflows daily
2026-10-10 16:14:24 +08:00
WuYongJie
50062a4c3d
feat(product-archive): sync approved owner workflows daily
2026-10-10 16:13:53 +08:00
WuYongJie
9c2f5f6085
feat(product-archive): sync approved owner workflows daily
2026-10-10 16:13:25 +08:00
WuYongJie
abcffc424a
fix(supply-chain): isolate permissions for every menu page
2026-10-10 14:31:38 +08:00
WuYongJie
9b7ab9e532
fix(supply-chain): isolate permissions for every menu page
2026-10-10 14:31:21 +08:00
apple
729eaf492d
fix(logistics-arrival): 换货单不再把已换货的 0 数量行算成条码
...
内部单号 9627695(赔偿换货单)看板显示 X00005、SJ0061100N430V01 两个条码,
但聚水潭里 SJ0061100N430V01 是 qty=0 / item_status=Replaced 的"已换货"原始行,
实际发出的是手工换货替换品 X00005,看板应只显示 X00005。
- 条码匹配时跳过 qty<=0 的明细行(已换货/取消的原始行不产生条码);
- 明细查询补上 oi.qty 字段;
- 补单测:换货单只保留实际发出条码、0/负数行不计入,并把原有两条条码用例补上 qty。
实测(10-01~10-09 窗口):jst_OrderItem 2436 行、jst_qmcust_orderlist_item 3007 行
数量为 0 且全部是 Replaced;过滤后没有任何订单会变成无条码。
注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 14:18:40 +08:00
apple
253c803be6
fix(logistics-arrival): 换货单不再把已换货的 0 数量行算成条码
...
内部单号 9627695(赔偿换货单)看板显示 X00005、SJ0061100N430V01 两个条码,
但聚水潭里 SJ0061100N430V01 是 qty=0 / item_status=Replaced 的"已换货"原始行,
实际发出的是手工换货替换品 X00005,看板应只显示 X00005。
- 条码匹配时跳过 qty<=0 的明细行(已换货/取消的原始行不产生条码);
- 明细查询补上 oi.qty 字段;
- 补单测:换货单只保留实际发出条码、0/负数行不计入,并把原有两条条码用例补上 qty。
实测(10-01~10-09 窗口):jst_OrderItem 2436 行、jst_qmcust_orderlist_item 3007 行
数量为 0 且全部是 Replaced;过滤后没有任何订单会变成无条码。
注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 13:48:03 +08:00
apple
91eeb6402a
fix(docs): 恢复生产部署说明中被覆盖的 SABC 章节并重放停产收口章节
...
上一次提交把 deploy 文档替换成旧版本,误删了「商品 SABC 月度核算」等主线内容;本次恢复主线版本并仅追加「停产需求确认超时收口」章节。
2026-10-10 13:21:18 +08:00
apple
f2480700ee
chore(production-stop-demands): 补齐超时自动收口定时器与部署说明
...
- 新增 scripts/install-production-stop-confirmation-finalize-timer.sh:systemd service+timer,每 10 分钟检查一次(Asia/Shanghai),失败 5 分钟后自动重试,日志进 journald
- 生产部署入口说明新增「停产需求确认超时收口」章节(脚本、systemd 名称、调度、日志、启用步骤与授权边界)
2026-10-10 13:21:18 +08:00
apple
158995b71b
fix(docs): 恢复生产部署说明中被覆盖的 SABC 章节并重放停产收口章节
...
上一次提交把 deploy 文档替换成旧版本,误删了「商品 SABC 月度核算」等主线内容;本次恢复主线版本并仅追加「停产需求确认超时收口」章节。
2026-10-10 12:14:38 +08:00
apple
26ebec4c40
chore(production-stop-demands): 补齐超时自动收口定时器与部署说明
...
- 新增 scripts/install-production-stop-confirmation-finalize-timer.sh:systemd service+timer,每 10 分钟检查一次(Asia/Shanghai),失败 5 分钟后自动重试,日志进 journald
- 生产部署入口说明新增「停产需求确认超时收口」章节(脚本、systemd 名称、调度、日志、启用步骤与授权边界)
2026-10-10 12:13:28 +08:00
apple
8270ae9b38
Merge branch 'codex/wuyongjie-production-stop-demands' into codex/xuxiake-mainline
...
feat(production-stop-demands): 停产需求管理全流程(提单→需求确认→走停产流程→流程结果同步)
- 按条码拆单提交;批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分开配置(批量新增/删除/查询)
- 确认截止时间(15:00/16:00 规则)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步(拒绝→需求驳回;商品停产/退市→流程审批通过)与盘停建议配置
(cherry picked from commit 33555c7f6bc0881452a074b06c89b6caf911ca1d)
2026-10-10 11:41:51 +08:00
apple
33555c7f6b
Merge branch 'codex/wuyongjie-production-stop-demands' into codex/xuxiake-mainline
...
feat(production-stop-demands): 停产需求管理全流程(提单→需求确认→走停产流程→流程结果同步)
- 按条码拆单提交;批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分开配置(批量新增/删除/查询)
- 确认截止时间(15:00/16:00 规则)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步(拒绝→需求驳回;商品停产/退市→流程审批通过)与盘停建议配置
2026-10-10 11:28:48 +08:00
apple
737926de7e
feat(production-stop-demands): 停产需求管理全流程(提单/确认/走流程/结果同步)
...
- 按条码拆单提交,支持批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分别配置,支持批量新增/删除/查询
- 确认截止时间规则(当天15:00前当天16:00截止,否则次日16:00)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步:流程拒绝→需求驳回;商品状态变为停产/退市→流程审批通过
- 盘停建议配置:批量导入(模板/文件/三种模式)、表格式维护、提单按条码自动带出
- 列表支持列宽拖拽、表头排序、日期区间/需求人/采购筛选、需求状态流程步骤条与批量操作
2026-10-10 11:17:18 +08:00
WuYongJie
de7518bb16
feat(product-archive): use marketing daily sales with daily sync and arrival monitor
...
Aggregate rpt.op_marketingDailySales by complete SKU and calculate weighted purchase sales.
Persist daily source fingerprints, skip unchanged archive writes and prevent old enrichment from overwriting sales.
Run daily at 09:30 Beijing time and observe source arrival every 10 minutes on 2026-10-11 08:00-09:30.
2026-10-10 11:09:51 +08:00
WuYongJie
cd8d5f2799
feat(product-archive): use marketing daily sales with daily sync and arrival monitor
...
Aggregate rpt.op_marketingDailySales by complete SKU and calculate weighted purchase sales.
Persist daily source fingerprints, skip unchanged archive writes and prevent old enrichment from overwriting sales.
Run daily at 09:30 Beijing time and observe source arrival every 10 minutes on 2026-10-11 08:00-09:30.
2026-10-10 11:08:29 +08:00
WuYongJie
a944d5eecd
feat(product-archive): use marketing daily sales with daily sync and arrival monitor
...
Aggregate rpt.op_marketingDailySales by complete SKU and calculate weighted purchase sales.
Persist daily source fingerprints, skip unchanged archive writes and prevent old enrichment from overwriting sales.
Run daily at 09:30 Beijing time and observe source arrival every 10 minutes on 2026-10-11 08:00-09:30.
2026-10-10 11:07:23 +08:00
apple
ce3658a33d
fix(logistics-arrival): 条码不再并集同一物流单号上的其它订单
...
内部单号 9627695(线上单 351207604012)实际只有 X00005 和 SJ0061100N430V01
两项,看板却显示 4 个条码——多出来的 SJ0061100N430V01-5/-7 属于同一物流单号
75627908174893 上的另一张订单 9593499(合并发货)。
根因:buildBarcodeMap 把"物流单号"键的条码无条件并入,而一个物流单号可能合并
发货多张订单,于是一张单会串上别单的条码;同一张单还会因为分页里恰好有没有
那张邻单而显示不同条码。
- 条码匹配规则抽成纯函数 matchLogisticsArrivalSigningDurationBarcodes:
先用内部单号/线上订单号/物流单号+付款时间匹配本单自己的明细,
物流单号只在精确键一个都匹配不到时兜底;
- 补单测覆盖"合并发货不串单"和"精确键为空才兜底且去重"。
注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 10:52:42 +08:00
apple
3679c247bf
feat(logistics-arrival): 订单明细支持拖动调整各字段列宽
...
20 个字段原来只有统一的 max-width: 260px + 省略号,长文本(备注/留言/地址)
看不全也没法放大。现在每列表头右侧都有拖拽把手:
- 拖动调整列宽(72~640px),键盘 ←/→ 微调,双击把手恢复该列默认宽度;
- 列宽写进 localStorage,刷新/切页后保留;改过列宽后表头出现"恢复默认列宽"按钮;
- colgroup + table-layout: fixed,列宽所见即所得,表格总宽随列宽变化并横向滚动。
任务名:物流到货签收时长-deepseek
2026-10-10 10:12:36 +08:00
apple
7e1ca79dc0
fix(logistics-arrival): 变体条码回退基准条码,商品维度不再是未填写
...
聚水潭同款不同规格会给基准条码加 `-数字`(如 SJ0061100N430V01-5),
产品档案只登记基准条码,于是变体条码查不到档案、供应商/采购为空;
而订单明细行是按整单所有明细聚合的,只要单里有基准条码就有值——
同一张订单因此出现"商品维度未填写、订单明细有值"。
- 档案查询两步走:先精确匹配,未命中再用基准条码(去掉结尾 `-数字`)兜底;
- 基准条码可能与本批一起查询,两轮结果都参与回退;
- 新增 logisticsArrivalSigningDurationArchiveFallbackBarcodes 纯函数 + 单测。
注:快照里的 productItems 是生成时固化的,需重跑当天批次后分析看板才会带上兜底结果。
任务名:物流到货签收时长-deepseek
2026-10-10 10:06:10 +08:00
apple
f665a6d271
fix(logistics-arrival): 快照覆盖判定改用实际数据覆盖,修当天少算/导出缺单
...
看板/导出的快照覆盖判定此前只比对批次"声明窗口"(windowTo = 跑批当天),
但每天 03:00/05:30 跑批时当天还没签收完,数据只到跑批那一刻,于是把
"还没签收完的当天"误判成已覆盖:10-08 生成的批次只会算到 10-07(约 3.8 万),
当天签收的单(用户清单里那 5,820 条)整批缺失。
- 快照批次新增 dataThrough(该批真实最大签收时间),覆盖上限改为
min(windowTo - 1, dataThrough 当天):跑批当天永远不完整,只信任到前一天;
数据源本身滞后时再由 dataThrough 收窄。
- 生成任务逐片记录 dataThrough 并写回批次;旧批次缺值时按 windowTo - 1 兜底。
- 定时器默认 05:30 → 03:00;文档同步更新覆盖规则。
- migration: LogisticsArrivalSigningDurationSnapshotRun.dataThrough。
任务名:物流到货签收时长-deepseek
(cherry picked from commit eca96b3067d73bc01e54f72dd11dd7253b324b97)
2026-10-09 18:01:32 +08:00
居居
1a53aa31a3
feat(supply-chain): 各部门数据分类去掉「数据权限例外」,权限统一以用户管理后台为准
...
- 配置弹窗移除「数据权限例外」输入项,保存时不再写入该字段(旧配置下次保存即清空)
- 数据范围不再按人收窄:部门负责人/总负责人/普通账号一律看全部利润中心
- 设置结构、settings 接口返回与权限节点描述同步移除 dataScopeGrants
2026-10-09 17:47:34 +08:00
apple
eca96b3067
fix(logistics-arrival): 快照覆盖判定改用实际数据覆盖,修当天少算/导出缺单
...
看板/导出的快照覆盖判定此前只比对批次"声明窗口"(windowTo = 跑批当天),
但每天 03:00/05:30 跑批时当天还没签收完,数据只到跑批那一刻,于是把
"还没签收完的当天"误判成已覆盖:10-08 生成的批次只会算到 10-07(约 3.8 万),
当天签收的单(用户清单里那 5,820 条)整批缺失。
- 快照批次新增 dataThrough(该批真实最大签收时间),覆盖上限改为
min(windowTo - 1, dataThrough 当天):跑批当天永远不完整,只信任到前一天;
数据源本身滞后时再由 dataThrough 收窄。
- 生成任务逐片记录 dataThrough 并写回批次;旧批次缺值时按 windowTo - 1 兜底。
- 定时器默认 05:30 → 03:00;文档同步更新覆盖规则。
- migration: LogisticsArrivalSigningDurationSnapshotRun.dataThrough。
任务名:物流到货签收时长-deepseek
2026-10-09 17:16:12 +08:00
居居
1779d8a697
style(supply-chain): 各部门数据分类配置弹窗标题去掉「(仅管理员)」
2026-10-09 16:42:01 +08:00
居居
e95748dee9
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-09 16:30:54 +08:00
居居
530a35711f
style(supply-chain): 各部门数据分类配置弹窗标题去掉「(仅管理员)」
2026-10-09 16:30:45 +08:00
居居
810f3a8a07
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-09 16:19:12 +08:00
居居
c4c370df2c
feat(supply-chain): 各部门数据分类去掉「数据权限例外」,权限统一以用户管理后台为准
...
- 配置弹窗移除「数据权限例外」输入项,保存时不再写入该字段(旧配置下次保存即清空)
- 数据范围不再按人收窄:部门负责人/总负责人/普通账号一律看全部利润中心
- 设置结构、settings 接口返回与权限节点描述同步移除 dataScopeGrants
2026-10-09 16:18:56 +08:00
codex
1187a7ec56
fix(logistics-arrival): 经营维度点选不再自动滚到 09 订单明细
...
之前任何下钻(经营对象维度点选、经营总览异常卡片)都会把 09 订单明细 scrollIntoView 到视口顶部,
点平台/店铺等维度时会直接把页面翻到底,用户没法接着看其他维度、还得手动往上拉。
- 自动滚动只保留给经营总览的异常卡片(卡片写着"点击看明细")
- 经营对象维度(平台/店铺/发货仓/物流/采购/供应商/商品/签收日期)点选不再抢滚动条,
下钻筛选照常生效,09 明细在原位置更新
- 测试拆成两条:维度点选不滚动(且仍触发 /drilldown)、异常卡片仍滚动到明细锚点
2026-10-09 15:48:00 +08:00
codex
e4fa4a2880
fix(logistics-arrival): 下钻/导出接口接受按字段分组的排除关键词
...
下钻和导出两个接口的 zod schema 还停留在 string | array,
而前端下发的是新的分组对象 { 字段: [词] },
于是点商品/店铺等对象下钻时 09 明细直接报"下钻条件格式不正确"(导出报"导出筛选条件格式不正确")。
- 两个接口的 excludeKeywords 都接受 对象 / `字段:词,词` 字符串 / 旧平铺数组
- 字符串形态改用 parseExcludeKeywords 解析(老链接按配置归位),不会把字段名当成关键词
- 新增两条路由单测:分组对象下钻/导出、字符串与平铺兼容、非法形态返回 400
2026-10-09 15:47:59 +08:00
居居
9b7d691ca9
feat(supply-chain): 商品SABC打标查看/导出默认全员开放,限制只在用户管理后台收紧
...
- 新增「商品SABC打标 · 商品明细」权限节点:默认全员可见+可导出,后台可单独关闭
- 侧边栏「商品SABC打标」入口与明细/经营总览/趋势/筛选候选/导出接口统一改用该节点
- 「各部门数据分类」同样默认全员可见+导出(移除商品企划的默认下载限制)
- 默认开放节点支持「显式关闭优先」:后台关掉某业务类型或个人例外,立即生效
- 「执行核算」仍由「商品SABC打标 · 执行核算」节点控制,未授权账号返回 403
- 补充权限映射与默认开放语义单测
2026-10-09 15:00:37 +08:00
居居
8d08176ab2
feat(supply-chain): 数据权限支持「全部」授权写法
2026-10-09 15:00:37 +08:00
居居
18eaaa4c5f
feat(supply-chain): 部门数据配置改为独立权限节点,默认商品企划与管理员可用
2026-10-09 15:00:37 +08:00
居居
fb1d25b373
feat(supply-chain): 各部门数据分类改为独立权限模块(可见/下载分开配置)
2026-10-09 15:00:37 +08:00
居居
b2ca7bf7f1
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-09 14:42:53 +08:00
居居
e2254c50f5
feat(supply-chain): 各部门数据分类默认全员可见全部利润中心,只有「数据权限例外」才收窄
...
- 未配置数据权限例外时不再默认只看本人:所有人可见全部利润中心数据(查看/导出仍由用户管理后台节点控制,默认开放)
- 移除按人员信息表(部门负责人/总负责人)自动收窄到本事业部的旧规则
- 显式配置了范围的人仍按配置收窄,写「全部/所有/*/全公司」表示不受限
- 配置弹窗提示语同步说明「默认不需要配置」
2026-10-09 14:42:38 +08:00
居居
93293258d1
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-09 14:24:53 +08:00
居居
f86d27cae1
feat(supply-chain): 商品SABC打标查看/导出默认全员开放,限制只在用户管理后台收紧
...
- 新增「商品SABC打标 · 商品明细」权限节点:默认全员可见+可导出,后台可单独关闭
- 侧边栏「商品SABC打标」入口与明细/经营总览/趋势/筛选候选/导出接口统一改用该节点
- 「各部门数据分类」同样默认全员可见+导出(移除商品企划的默认下载限制)
- 默认开放节点支持「显式关闭优先」:后台关掉某业务类型或个人例外,立即生效
- 「执行核算」仍由「商品SABC打标 · 执行核算」节点控制,未授权账号返回 403
- 补充权限映射与默认开放语义单测
2026-10-09 14:24:45 +08:00
codex
d727421dca
fix(logistics-arrival): 经营维度点选不再自动滚到 09 订单明细
...
之前任何下钻(经营对象维度点选、经营总览异常卡片)都会把 09 订单明细 scrollIntoView 到视口顶部,
点平台/店铺等维度时会直接把页面翻到底,用户没法接着看其他维度、还得手动往上拉。
- 自动滚动只保留给经营总览的异常卡片(卡片写着"点击看明细")
- 经营对象维度(平台/店铺/发货仓/物流/采购/供应商/商品/签收日期)点选不再抢滚动条,
下钻筛选照常生效,09 明细在原位置更新
- 测试拆成两条:维度点选不滚动(且仍触发 /drilldown)、异常卡片仍滚动到明细锚点
2026-10-09 14:21:08 +08:00
居居
f94c86bcc8
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
部门数据分类数据权限支持「全部」授权写法。
2026-10-09 13:08:24 +08:00
居居
5fdeea9a51
feat(supply-chain): 数据权限支持「全部」授权写法
2026-10-09 13:07:36 +08:00
居居
5a00ad317d
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
部门数据配置改为独立权限节点(默认商品企划 + 管理员)。
2026-10-09 11:27:32 +08:00
居居
cf5f3b2d49
feat(supply-chain): 部门数据配置改为独立权限节点,默认商品企划与管理员可用
2026-10-09 11:27:01 +08:00
居居
28e972f663
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
各部门数据分类改为独立权限模块(可见/下载分开配置),无权限自动隐藏页签。
2026-10-09 10:26:28 +08:00
居居
ca08d89946
feat(supply-chain): 各部门数据分类改为独立权限模块(可见/下载分开配置)
2026-10-09 10:25:36 +08:00
WuYongJie
bffa3ec1a6
fix(intake): enable Gujia 2026 certificate template
2026-10-09 10:09:37 +08:00
WuYongJie
3fd4c0fac0
Merge Gujia 2026 certificate enablement into shared mainline
2026-10-09 10:09:06 +08:00
WuYongJie
ee95abd0b0
fix(intake): enable Gujia 2026 certificate template
2026-10-09 10:03:34 +08:00
WuYongJie
6989354a42
feat(supply-chain): 档案设计师绑定新品流程结构设计师(只填空值,以新品流程表为准)
2026-10-09 10:02:26 +08:00
WuYongJie
8a4e0ac797
feat(supply-chain): 档案设计师绑定新品流程结构设计师(只填空值,以新品流程表为准)
2026-10-09 10:02:18 +08:00
WuYongJie
afe9b806d5
feat(supply-chain): 档案设计师绑定新品流程结构设计师(只填空值,以新品流程表为准)
2026-10-09 10:01:58 +08:00
WuYongJie
6d3891fc44
style(layout): 产品开发侧栏对齐供应链 224px,修复系统切换器「产品开发」截断
...
侧栏变量 --layout-app-sidebar-width 11rem→14rem(浅色/深色两处),切换器簇/按钮随之与供应链逐项一致(224/192/144);切换器簇改 min-width、触发器 flex-1→flex-auto 作为防截断兜底。已实测四主页面无挤压无横向溢出。
2026-10-09 09:39:26 +08:00
WuYongJie
4cd07bdda5
Merge origin/codex/xuxiake-mainline into codex/local-3001-integration (sync before sidebar alignment push)
2026-10-09 09:39:06 +08:00
WuYongJie
8617493f8a
style(layout): 产品开发侧栏对齐供应链 224px,修复系统切换器「产品开发」截断
...
侧栏变量 --layout-app-sidebar-width 11rem→14rem(浅色/深色两处),切换器簇/按钮随之与供应链逐项一致(224/192/144);切换器簇改 min-width、触发器 flex-1→flex-auto 作为防截断兜底。已实测四主页面无挤压无横向溢出。
2026-10-09 09:38:44 +08:00
WuYongJie
c3b20aace6
fix(supply-chain): 运营负责人改为一次性定标冻结(摘除跟随最新销售的每日翻转)
2026-10-09 09:00:53 +08:00
WuYongJie
5e842eeeb8
fix(supply-chain): 运营负责人改为一次性定标冻结(摘除跟随最新销售的每日翻转)
2026-10-09 09:00:46 +08:00
WuYongJie
b5dc4a1b1b
fix(supply-chain): 运营负责人改为一次性定标冻结(摘除跟随最新销售的每日翻转)
2026-10-09 09:00:12 +08:00
WuYongJie
139aec0e70
feat(oa-board): 出图进度页改为美术设计申请源数据视图
...
一行=一条流程实例,列=流程实例ID/编号/标题/状态/时间+128 个表单原字段(按全量填写率排序,与源库导出 xlsx 同口径)。新快照表 oa_art_flow_raw_snapshot(关键筛选列+fields_json 全字段清洗值)+ oa_art_flow_raw_meta 字段顺序;同步脚本入 timer 链;API /api/intake/oa-board/art-flow-raw。旧 SKU 维度视图从页面移除,后端服务与导出消费方保留。
2026-10-08 17:24:06 +08:00
WuYongJie
1ba16cbc6b
Merge origin/codex/xuxiake-mainline into codex/local-3001-integration (sync before art-flow raw view push)
2026-10-08 17:23:44 +08:00
WuYongJie
eaf11faea1
feat(oa-board): 出图进度页改为美术设计申请源数据视图
...
一行=一条流程实例,列=流程实例ID/编号/标题/状态/时间+128 个表单原字段(按全量填写率排序,与源库导出 xlsx 同口径)。新快照表 oa_art_flow_raw_snapshot(关键筛选列+fields_json 全字段清洗值)+ oa_art_flow_raw_meta 字段顺序;同步脚本入 timer 链;API /api/intake/oa-board/art-flow-raw。旧 SKU 维度视图从页面移除,后端服务与导出消费方保留。
2026-10-08 17:23:18 +08:00
WuYongJie
13b81e5822
feat(supply-chain): 新增替换款规则每日同步定时器安装脚本
...
SupplyChainProductArchiveReplacementRule 的上游是 rpt.pm_replacementManage,
此前只有 local-sync-archive.mjs 会调用 sync-product-replacement-rules.ts,
正式机没有任何定时任务,表建好后仍然是空的,SABC 的「同款商品编码」也就一直是空。
新增 install-product-replacement-rule-sync-timer.sh,按仓库既有 install-*-timer.sh
同款写法安装 furniture-product-replacement-rule-sync.{service,timer},
默认每天 07:40(Asia/Shanghai)同步一次,早于 09:00 的 SABC 打标日结。
脚本仅安装定时任务,改动生产数据由 sync-product-replacement-rules.ts 自己完成。
2026-10-08 16:43:58 +08:00
WuYongJie
bb777d4880
feat(supply-chain): 新增替换款规则每日同步定时器安装脚本
...
SupplyChainProductArchiveReplacementRule 的上游是 rpt.pm_replacementManage,
此前只有 local-sync-archive.mjs 会调用 sync-product-replacement-rules.ts,
正式机没有任何定时任务,表建好后仍然是空的,SABC 的「同款商品编码」也就一直是空。
新增 install-product-replacement-rule-sync-timer.sh,按仓库既有 install-*-timer.sh
同款写法安装 furniture-product-replacement-rule-sync.{service,timer},
默认每天 07:40(Asia/Shanghai)同步一次,早于 09:00 的 SABC 打标日结。
脚本仅安装定时任务,改动生产数据由 sync-product-replacement-rules.ts 自己完成。
2026-10-08 16:43:37 +08:00
居居
1bea953315
fix(supply-chain): 补齐替换规则表迁移(正式环境缺表导致同款商品编码全为空)
2026-10-08 16:30:35 +08:00
WuYongJie
03741083fa
feat(supply-chain): 产品全量档案产品标签每日跟随SABC打标结果(有变化才更新)
2026-10-08 16:28:31 +08:00
WuYongJie
c23f616003
feat(supply-chain): 产品全量档案产品标签每日跟随SABC打标结果(有变化才更新)
2026-10-08 16:28:14 +08:00
WuYongJie
a3e236e986
feat(supply-chain): 产品全量档案产品标签每日跟随SABC打标结果(有变化才更新)
2026-10-08 16:26:54 +08:00
居居
9baee61769
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
补齐 SupplyChainProductArchiveReplacementRule 迁移(正式环境缺表 → 同款商品编码全为空)。
2026-10-08 16:20:35 +08:00
居居
64a820a998
fix(supply-chain): 补齐替换规则表迁移(正式环境缺表导致同款商品编码全为空)
2026-10-08 16:20:27 +08:00
WuYongJie
c81b696a62
fix(supply-chain): 店铺账号列筛选支持全选后排除个别项(exclude 换算正面清单+筛选值截断上限提升)
2026-10-08 14:23:57 +08:00
WuYongJie
f13ed3d3fb
fix(supply-chain): 店铺账号列筛选支持全选后排除个别项(exclude 换算正面清单+筛选值截断上限提升)
2026-10-08 14:23:53 +08:00
WuYongJie
ad0b094af1
fix(supply-chain): 店铺账号列筛选支持全选后排除个别项(exclude 换算正面清单+筛选值截断上限提升)
2026-10-08 14:23:02 +08:00
WuYongJie
2925818a75
feat(supply-chain): 店铺账号三级负责人离职改为文字后缀(已离职)并支持任一列命中筛选
2026-10-08 14:02:06 +08:00
WuYongJie
b7dd8ac490
feat(supply-chain): 店铺账号三级负责人离职改为文字后缀(已离职)并支持任一列命中筛选
2026-10-08 14:02:03 +08:00
WuYongJie
b295e128eb
feat(supply-chain): 店铺账号三级负责人离职改为文字后缀(已离职)并支持任一列命中筛选
2026-10-08 14:01:43 +08:00
居居
8a3f32c5a2
fix(supply-chain): 修正月末创建时间边界,避免最后一天16点后创建的商品整月漏收录
2026-10-08 13:42:53 +08:00
WuYongJie
da1872c59d
feat(supply-chain): 店铺账号离职负责人红色标注与负责人状态筛选(自定义下拉)
2026-10-08 12:59:32 +08:00
WuYongJie
4e594a4eee
feat(supply-chain): 店铺账号离职负责人红色标注与负责人状态筛选(自定义下拉)
2026-10-08 12:59:23 +08:00
WuYongJie
ba1209deb3
feat(supply-chain): 店铺账号离职负责人红色标注与负责人状态筛选(自定义下拉)
2026-10-08 12:59:04 +08:00
WuYongJie
8e38894a2b
fix(supply-chain): 全量档案运营层级匹配加固(不可见字符清洗+档案已有运营负责人兜底)
2026-10-08 12:01:59 +08:00
WuYongJie
605fb1347b
fix(supply-chain): 全量档案运营层级匹配加固(不可见字符清洗+档案已有运营负责人兜底)
2026-10-08 12:01:38 +08:00
WuYongJie
bcfadc1e3f
fix(supply-chain): 全量档案运营层级匹配加固(不可见字符清洗+档案已有运营负责人兜底)
2026-10-08 12:01:11 +08:00
WuYongJie
867b5bf897
feat(supply-chain): 店铺授权提醒每日定时推送(11:00)+ 负责人不在内部整店跳过
2026-10-08 11:36:30 +08:00
WuYongJie
cde4d59afb
feat(supply-chain): 店铺授权提醒每日定时推送(11:00)+ 负责人不在内部整店跳过
2026-10-08 11:36:17 +08:00
WuYongJie
7979671a3d
feat(supply-chain): 店铺授权提醒每日定时推送(11:00)+ 负责人不在内部整店跳过
2026-10-08 11:36:02 +08:00
WuYongJie
3a10aa3d9f
feat(oa-board): 新品-视频进度(内容部)看板,钉钉内容视频流程独立接入
...
独立快照表 oa_video_flow_board_snapshot + 双驱动同步脚本 + 分页筛选接口 + 新 Tab;不进新品主链项目聚合/总状态/时效。阶段推进按表单字段推断(编导→摄像→剪辑→封面→验收/评分),节点名清单到位后可升级 activityId 映射。附数据字典 docs/数据字典/13-内容视频流程看板.md 供下游只读接入。
2026-10-08 11:22:46 +08:00
WuYongJie
9996ee83b2
Merge origin/codex/xuxiake-mainline into codex/local-3001-integration (sync before video-flow board push)
2026-10-08 11:22:14 +08:00
WuYongJie
af378a9d00
feat(oa-board): 新品-视频进度(内容部)看板,钉钉内容视频流程独立接入
...
独立快照表 oa_video_flow_board_snapshot + 双驱动同步脚本 + 分页筛选接口 + 新 Tab;不进新品主链项目聚合/总状态/时效。阶段推进按表单字段推断(编导→摄像→剪辑→封面→验收/评分),节点名清单到位后可升级 activityId 映射。附数据字典 docs/数据字典/13-内容视频流程看板.md 供下游只读接入。
2026-10-08 11:20:48 +08:00
codex
e6241481aa
fix(logistics-arrival): 下钻/导出接口接受按字段分组的排除关键词
...
下钻和导出两个接口的 zod schema 还停留在 string | array,
而前端下发的是新的分组对象 { 字段: [词] },
于是点商品/店铺等对象下钻时 09 明细直接报"下钻条件格式不正确"(导出报"导出筛选条件格式不正确")。
- 两个接口的 excludeKeywords 都接受 对象 / `字段:词,词` 字符串 / 旧平铺数组
- 字符串形态改用 parseExcludeKeywords 解析(老链接按配置归位),不会把字段名当成关键词
- 新增两条路由单测:分组对象下钻/导出、字符串与平铺兼容、非法形态返回 400
2026-10-08 11:16:57 +08:00
WuYongJie
12feabd17f
feat(supply-chain): 店铺账号授权提醒推送(正常+未授权店铺推送给运营负责人,离职顺延)
2026-10-08 11:05:56 +08:00
WuYongJie
24e403b183
feat(supply-chain): 店铺账号授权提醒推送(正常+未授权店铺推送给运营负责人,离职顺延)
2026-10-08 11:05:35 +08:00
WuYongJie
2342c53704
feat(supply-chain): 店铺账号授权提醒推送(正常+未授权店铺推送给运营负责人,离职顺延)
2026-10-08 10:59:54 +08:00
居居
246313c45a
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
修正商品SABC打标月末创建时间边界:最后一天 16:00 之后创建的商品不再被整月漏收录。
2026-10-08 09:27:37 +08:00
居居
838dcce410
fix(supply-chain): 修正月末创建时间边界,避免最后一天16点后创建的商品整月漏收录
2026-10-08 09:27:27 +08:00
WuYongJie
2528229c08
fix(supply-chain): 全量档案表宽固定为列宽之和,修复滚动时横向滚动条跳动
2026-10-08 09:27:05 +08:00
WuYongJie
91af9c5284
fix(supply-chain): 全量档案表宽固定为列宽之和,修复滚动时横向滚动条跳动
2026-10-08 09:26:56 +08:00
WuYongJie
f3f3bfa08b
fix(supply-chain): 全量档案表宽固定为列宽之和,修复滚动时横向滚动条跳动
2026-10-08 09:26:38 +08:00
WuYongJie
685f3cc756
perf(supply-chain): 产品全量档案表体行虚拟化(视口窗口渲染+占位行)
2026-10-08 08:50:19 +08:00
WuYongJie
17474f0d85
perf(supply-chain): 产品全量档案表体行虚拟化(视口窗口渲染+占位行)
2026-10-08 08:50:10 +08:00
WuYongJie
174b1eec25
perf(supply-chain): 产品全量档案表体行虚拟化(视口窗口渲染+占位行)
2026-10-08 08:49:52 +08:00
WuYongJie
6363ed87b7
style(layout): 系统切换器灰底与下拉面板右边缘对齐左侧栏
2026-10-07 17:58:59 +08:00
WuYongJie
173c594c24
style(supply-chain): 物流到货签收时长看板移除顶部表头区块
2026-10-07 17:58:59 +08:00
WuYongJie
62f693223f
style(supply-chain): 移除多处页面标题/说明块与冗余计数文本(工具条保持右对齐)
2026-10-07 17:58:59 +08:00
WuYongJie
bc79cd6321
style(layout): 系统切换器灰底与下拉面板右边缘对齐左侧栏
2026-10-07 17:58:56 +08:00
WuYongJie
48a8de5d77
style(supply-chain): 物流到货签收时长看板移除顶部表头区块
2026-10-07 17:58:56 +08:00
WuYongJie
bd0a5c81f3
style(supply-chain): 移除多处页面标题/说明块与冗余计数文本(工具条保持右对齐)
2026-10-07 17:58:56 +08:00
WuYongJie
5394319205
style(layout): 系统切换器灰底与下拉面板右边缘对齐左侧栏
2026-10-07 17:58:43 +08:00
WuYongJie
5779dcf5be
style(supply-chain): 物流到货签收时长看板移除顶部表头区块
2026-10-07 17:58:42 +08:00
WuYongJie
97fffc4f3d
style(supply-chain): 移除多处页面标题/说明块与冗余计数文本(工具条保持右对齐)
2026-10-07 17:58:42 +08:00
WuYongJie
5b8e1945af
perf(supply-chain): 列设置关闭面板改为非阻塞过渡,修复整表同步重渲染卡顿
2026-10-07 17:33:36 +08:00
WuYongJie
45ba5c1005
perf(supply-chain): 列设置关闭面板改为非阻塞过渡,修复整表同步重渲染卡顿
2026-10-07 17:33:29 +08:00
WuYongJie
70fb47f529
perf(supply-chain): 列设置关闭面板改为非阻塞过渡,修复整表同步重渲染卡顿
2026-10-07 17:33:15 +08:00
WuYongJie
d5762b3e12
style(supply-chain): 产品全量档案工具栏移除标题与字段统计文案
2026-10-07 17:19:28 +08:00
WuYongJie
e54976df03
perf(supply-chain): 产品全量档案按页聚合+缓存+候选项SQL化(含SWR后台刷新与全选提速)
2026-10-07 17:19:27 +08:00
WuYongJie
f14d796056
style(supply-chain): 产品全量档案工具栏移除标题与字段统计文案
2026-10-07 17:19:03 +08:00
WuYongJie
0a0b925d99
perf(supply-chain): 产品全量档案按页聚合+缓存+候选项SQL化(含SWR后台刷新与全选提速)
2026-10-07 17:18:44 +08:00
WuYongJie
1f8e8bab74
style(supply-chain): 产品全量档案工具栏移除标题与字段统计文案
2026-10-07 17:18:26 +08:00
WuYongJie
1b3498e785
perf(supply-chain): 产品全量档案按页聚合+缓存+候选项SQL化(含SWR后台刷新与全选提速)
2026-10-07 17:18:25 +08:00
codex
ed865a3c2d
fix(logistics-arrival): 修复订单明细"每页条数"选了没反应
...
BoardPagination 的下拉框在 onChange 里同时调了 onPageSizeChange(新值) 和 onPageChange(1)。
服务端分页(09 订单明细未下钻)这两次都会 router.push,而后一次是拿调用方当前的 filters
(pageSize 还是旧值)拼的 URL,把前一次覆盖掉——所以选 100/200 后又被拉回 50 条/页。
- BoardPagination 只通知"每页条数变了",回到第 1 页由调用方负责
- 本地分页(经营对象各维度表、发货仓/物流公司排名)在 setState 里带 page: 1
- 服务端分页继续用 href(1, { ...filters, pageSize })
- OrderDetailsBoard 测试补回归断言:切换每页条数只触发一次跳转
2026-10-07 15:26:12 +08:00
WuYongJie
1aef696ae6
chore(deploy): 生产 heap 上限 768MB 提升到 2048MB(缓解看板等重查询导致的 OOM 重启)
2026-10-07 15:26:11 +08:00
WuYongJie
b9a9d4b426
chore(deploy): 生产 heap 上限 768MB 提升到 2048MB(缓解看板等重查询导致的 OOM 重启)
2026-10-07 15:26:09 +08:00
WuYongJie
4fc857f1bd
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-07 15:25:56 +08:00
WuYongJie
c1dbfaa145
chore(deploy): 生产 heap 上限 768MB 提升到 2048MB(缓解看板等重查询导致的 OOM 重启)
2026-10-07 15:25:55 +08:00
codex
debdfb454b
fix(logistics-arrival): 修复订单明细"每页条数"选了没反应
...
BoardPagination 的下拉框在 onChange 里同时调了 onPageSizeChange(新值) 和 onPageChange(1)。
服务端分页(09 订单明细未下钻)这两次都会 router.push,而后一次是拿调用方当前的 filters
(pageSize 还是旧值)拼的 URL,把前一次覆盖掉——所以选 100/200 后又被拉回 50 条/页。
- BoardPagination 只通知"每页条数变了",回到第 1 页由调用方负责
- 本地分页(经营对象各维度表、发货仓/物流公司排名)在 setState 里带 page: 1
- 服务端分页继续用 href(1, { ...filters, pageSize })
- OrderDetailsBoard 测试补回归断言:切换每页条数只触发一次跳转
2026-10-07 14:35:46 +08:00
居居
255130b31f
fix(supply-chain): 修正导出 dense 选项的类型声明(xlsx 0.18 类型未含 dense)
2026-10-07 14:28:52 +08:00
居居
5367bc4d27
perf(supply-chain): SABC 导出改 dense 表格+结果缓存+串行生成,降低内存峰值并支持秒级重试
2026-10-07 14:28:52 +08:00
WuYongJie
dfdfe019f2
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-07 14:27:58 +08:00
WuYongJie
5f31eca7ac
fix(build): 外置 mssql,修复正式构建下 mssql 参数类型校验失败(物流看板等 mssql 功能)
2026-10-07 14:10:08 +08:00
WuYongJie
cb3e973bf6
fix(build): 外置 mssql,修复正式构建下 mssql 参数类型校验失败(物流看板等 mssql 功能)
2026-10-07 14:09:58 +08:00
WuYongJie
855cce7034
fix(build): 外置 mssql,修复正式构建下 mssql 参数类型校验失败(物流看板等 mssql 功能)
2026-10-07 14:09:47 +08:00
居居
ed893bd598
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
修正 SABC 导出 dense 选项类型声明。
2026-10-07 14:08:24 +08:00
居居
3d64e3e332
fix(supply-chain): 修正导出 dense 选项的类型声明(xlsx 0.18 类型未含 dense)
2026-10-07 14:08:23 +08:00
居居
60ea2f923b
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标导出:dense 表格 + 压缩输出 + 结果缓存 + 串行生成,降低 502/超时概率。
2026-10-07 14:00:21 +08:00
居居
faa60655f7
perf(supply-chain): SABC 导出改 dense 表格+结果缓存+串行生成,降低内存峰值并支持秒级重试
2026-10-07 14:00:13 +08:00
WuYongJie
0498a8f2e6
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-07 13:33:45 +08:00
居居
47f446bf62
perf(supply-chain): 导出压缩输出(8月明细 64MB→17MB)并补充导出耗时日志与错误详情
2026-10-07 13:04:59 +08:00
居居
14cb9939ad
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标导出改为压缩输出(8 月明细 64MB → 17MB),并补充导出耗时日志与失败原因提示。
2026-10-07 12:00:26 +08:00
居居
9d8b75ca4d
perf(supply-chain): 导出压缩输出(8月明细 64MB→17MB)并补充导出耗时日志与错误详情
2026-10-07 12:00:19 +08:00
codex
1b49125ffa
feat(logistics-arrival): 重置 / 恢复默认 / 清空排除 三个按钮语义拆开
...
过去三个按钮都只是"改输入、等用户点查询",而且重置只清日期+关键词、另两个只改排除词,
最终看起来结果一样。现在各自一件事,点下去立即查询:
- 重置:签收日期、关键词、排除关键词全部清空 → 没有任何筛选条件
(空日期仍由服务端兜底成本月 1 号~昨日;新增 dateRangeCleared 标记,
让输入框保持空白而不是被兜底值回填)
- 恢复默认:签收日期回到本月 1 号~昨日(显式填回输入框)+ 排除关键词恢复系统默认配置
- 清空排除:签收日期回到本月 1 号~昨日 + 排除关键词置空
配套:`logisticsArrivalSigningDurationDefaultRange()` 从过滤器规范化里抽出来共用(单一来源)、
按钮 hover 说明 + 筛选栏底部图例、去掉旧的"填好后点查询"提示、补视图层测试。
2026-10-07 11:46:00 +08:00
codex
787fcb67bb
perf(logistics-arrival): 看板冷启动从 7 秒降到 2 秒出头
...
整区间总览/环节目标原来 SELECT 全列,PG 只能对 900MB 堆表做 Seq Scan
(28 天区间 read=106409 页、6.3s);percentile_cont 又把 14 列宽的输入行
整行送进排序(两个分位数 4.3s,环节分位数叠加到分钟级);CTE 里的
CASE+EXTRACT 还会在每处引用被重复内联。
- 按用途收窄列集合:时间戳 / 时间戳+维度列,并新增覆盖索引
(snapshotDate, signTime) INCLUDE (payTime, sendTime, fetchTime,
warehouseName, platformName, shopName, logisticCompanyName) → Index Only Scan
- 分位数按列拆成独立语句、只投影一个浮点列,与计数语句并行下发
- measured / durations 改 AS MATERIALIZED,时长表达式只算一次
- 环节目标(上月平均 × 98%)接入 10 分钟内存缓存
实测(本机快照 648,689 行、冷启动):
28 天 7.3s→2.3s、10 天 4.4s→0.4s、2 天 1.7s→0.3s;
浏览器首屏出数 ~7-10s→2.7s。2 天区间与 JS 现算逐项对账一致。
2026-10-07 11:46:00 +08:00
codex
83d10ec9e7
fix(logistics-arrival): 修复排除关键词弹窗透明与保存报格式错误
...
- globals.css:在 :root 与 [data-theme='dark'] 补齐 --sc-* 主题别名。
弹窗通过 createPortal 挂在 document.body 上,位于 .sc-layout 之外,
之前取不到 --sc-surface/--sc-border 等变量,正式环境里表现为面板透明、
边框与分隔线丢失(本地开发因为另一分支已临时补过这段而看不出来)。
- settings 接口:接受按字段分组的排除关键词对象(同时兼容历史平铺数组与字符串),
修复管理员在选择器里新增关键词时报"排除关键词格式不正确"。
- 补充 settings 路由单测:分组对象落库、平铺数组兼容、非法格式返回 400。
2026-10-07 11:46:00 +08:00
WuYongJie
9a2bff07ab
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-07 11:39:58 +08:00
WuYongJie
ff722ab12e
chore(installation-demo-v2): 合并主线前落盘本地在途 V2 模型(仅 schema.prisma)
2026-10-07 11:39:55 +08:00
codex
7620e4bcb6
feat(logistics-arrival): 重置 / 恢复默认 / 清空排除 三个按钮语义拆开
...
过去三个按钮都只是"改输入、等用户点查询",而且重置只清日期+关键词、另两个只改排除词,
最终看起来结果一样。现在各自一件事,点下去立即查询:
- 重置:签收日期、关键词、排除关键词全部清空 → 没有任何筛选条件
(空日期仍由服务端兜底成本月 1 号~昨日;新增 dateRangeCleared 标记,
让输入框保持空白而不是被兜底值回填)
- 恢复默认:签收日期回到本月 1 号~昨日(显式填回输入框)+ 排除关键词恢复系统默认配置
- 清空排除:签收日期回到本月 1 号~昨日 + 排除关键词置空
配套:`logisticsArrivalSigningDurationDefaultRange()` 从过滤器规范化里抽出来共用(单一来源)、
按钮 hover 说明 + 筛选栏底部图例、去掉旧的"填好后点查询"提示、补视图层测试。
2026-10-07 11:05:35 +08:00
居居
bc10af7b62
feat(supply-chain): 商品SABC打标执行核算改由权限配置节点控制
2026-10-07 10:58:34 +08:00
居居
9f63e51702
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标「执行核算」改由权限配置节点(商品SABC打标 · 执行核算)控制,前端按钮与接口同步;清理未随提交带上的 WorkflowMonitorView 引用。
2026-10-07 10:01:28 +08:00
居居
e57604ac81
feat(supply-chain): 商品SABC打标执行核算改由权限配置节点控制
2026-10-07 10:01:19 +08:00
WuYongJie
c981ff3bb0
以图搜图粘贴与放大体验修复;部署脚本补齐 onnxruntime 原生库
...
- ProductArchiveImageSearchDialog:弹窗打开期间监听 document 级 paste,页面任意位置 Ctrl+V 直接粘贴图片(点击上传区仍是文件选择);搜索结果小图可点击,复用 ProductArchiveImagePreview 放大核对
- yydd-prod-release-guards.sh:prepare_standalone_runtime 补齐 Turbopack standalone 产物遗漏的 onnxruntime-node 原生二进制(libonnxruntime.so.*),根治部署后本地图索层加载失败;符号链接场景自动跳过
2026-10-07 09:57:43 +08:00
WuYongJie
8370ef2ddc
以图搜图粘贴与放大体验修复;部署脚本补齐 onnxruntime 原生库
...
- ProductArchiveImageSearchDialog:弹窗打开期间监听 document 级 paste,页面任意位置 Ctrl+V 直接粘贴图片(点击上传区仍是文件选择);搜索结果小图可点击,复用 ProductArchiveImagePreview 放大核对
- yydd-prod-release-guards.sh:prepare_standalone_runtime 补齐 Turbopack standalone 产物遗漏的 onnxruntime-node 原生二进制(libonnxruntime.so.*),根治部署后本地图索层加载失败;符号链接场景自动跳过
2026-10-07 09:57:23 +08:00
WuYongJie
a308eb6c81
以图搜图粘贴与放大体验修复;部署脚本补齐 onnxruntime 原生库
...
- ProductArchiveImageSearchDialog:弹窗打开期间监听 document 级 paste,页面任意位置 Ctrl+V 直接粘贴图片(点击上传区仍是文件选择);搜索结果小图可点击,复用 ProductArchiveImagePreview 放大核对
- yydd-prod-release-guards.sh:prepare_standalone_runtime 补齐 Turbopack standalone 产物遗漏的 onnxruntime-node 原生二进制(libonnxruntime.so.*),根治部署后本地图索层加载失败;符号链接场景自动跳过
2026-10-07 09:57:08 +08:00
WuYongJie
dbb2d4965a
fix(layout): 浏览器标签页标题统一为工作区名,不再随子页面跳变
...
供应链中心 layout 新增统一标题「由壹点「供应链中心」」并删除其下 25 个页面的页级 metadata title;产品开发侧产品开发日志、BOM核算、AI出图工作台、安装演示工作台(V1)、通知记录、更新日志、回收站 8 处删除旧标题覆盖,统一显示「由壹点「产品开发」」。纯 metadata 变更,无 UI 与逻辑改动。3001 逐页 SSR title 实测通过。
2026-10-07 09:51:18 +08:00
codex
eac3344e2d
perf(logistics-arrival): 看板冷启动从 7 秒降到 2 秒出头
...
整区间总览/环节目标原来 SELECT 全列,PG 只能对 900MB 堆表做 Seq Scan
(28 天区间 read=106409 页、6.3s);percentile_cont 又把 14 列宽的输入行
整行送进排序(两个分位数 4.3s,环节分位数叠加到分钟级);CTE 里的
CASE+EXTRACT 还会在每处引用被重复内联。
- 按用途收窄列集合:时间戳 / 时间戳+维度列,并新增覆盖索引
(snapshotDate, signTime) INCLUDE (payTime, sendTime, fetchTime,
warehouseName, platformName, shopName, logisticCompanyName) → Index Only Scan
- 分位数按列拆成独立语句、只投影一个浮点列,与计数语句并行下发
- measured / durations 改 AS MATERIALIZED,时长表达式只算一次
- 环节目标(上月平均 × 98%)接入 10 分钟内存缓存
实测(本机快照 648,689 行、冷启动):
28 天 7.3s→2.3s、10 天 4.4s→0.4s、2 天 1.7s→0.3s;
浏览器首屏出数 ~7-10s→2.7s。2 天区间与 JS 现算逐项对账一致。
2026-10-07 09:45:35 +08:00
WuYongJie
1da917bb01
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-10-07 09:40:10 +08:00
WuYongJie
08bb5a96a4
fix(layout): 浏览器标签页标题统一为工作区名,不再随子页面跳变
...
供应链中心 layout 新增统一标题「由壹点「供应链中心」」并删除其下 25 个页面的页级 metadata title;产品开发侧产品开发日志、BOM核算、AI出图工作台、安装演示工作台(V1)、通知记录、更新日志、回收站 8 处删除旧标题覆盖,统一显示「由壹点「产品开发」」。纯 metadata 变更,无 UI 与逻辑改动。3001 逐页 SSR title 实测通过。
2026-10-07 09:37:21 +08:00
WuYongJie
b0a6cdd1e7
feat(installation-demo): 工作台顶栏改为目录/制作/分享并新增工具抽屉与制作流程卡
...
- 标签行:模型→目录、详情→制作;工具从跳转链接改为面板内抽屉,勾选即保存,完整工具箱保留次级入口
2026-10-07 08:50:28 +08:00
WuYongJie
69618965c7
feat(installation-demo): 工作台顶栏改为目录/制作/分享并新增工具抽屉与制作流程卡
...
- 标签行:模型→目录、详情→制作;工具从跳转链接改为面板内抽屉,勾选即保存,完整工具箱保留次级入口
2026-10-06 18:21:35 +08:00
WuYongJie
f6e4d7f2e1
feat(installation-demo): 工作台顶栏改为目录/制作/分享并新增工具抽屉与制作流程卡
...
- 标签行:模型→目录、详情→制作;工具从跳转链接改为面板内抽屉,勾选即保存,完整工具箱保留次级入口
2026-10-06 18:20:36 +08:00
WuYongJie
614e3dabe2
feat(supply-chain): 产品全量档案「产品标签」接入 SABC 打标与未打标兜底
2026-10-06 18:19:40 +08:00
WuYongJie
ce2a6ebbaf
feat(supply-chain): 产品全量档案「产品标签」接入 SABC 打标与未打标兜底
2026-10-06 18:19:34 +08:00
WuYongJie
b1f55faebb
feat(supply-chain): 产品全量档案「产品标签」接入 SABC 打标与未打标兜底
2026-10-06 18:19:10 +08:00
codex
c5cae01ecd
fix(logistics-arrival): 修复排除关键词弹窗透明与保存报格式错误
...
- globals.css:在 :root 与 [data-theme='dark'] 补齐 --sc-* 主题别名。
弹窗通过 createPortal 挂在 document.body 上,位于 .sc-layout 之外,
之前取不到 --sc-surface/--sc-border 等变量,正式环境里表现为面板透明、
边框与分隔线丢失(本地开发因为另一分支已临时补过这段而看不出来)。
- settings 接口:接受按字段分组的排除关键词对象(同时兼容历史平铺数组与字符串),
修复管理员在选择器里新增关键词时报"排除关键词格式不正确"。
- 补充 settings 路由单测:分组对象落库、平铺数组兼容、非法格式返回 400。
2026-10-06 18:15:57 +08:00
WuYongJie
7e6cc35199
fix(intake): 搜索下拉支持清空已选值
2026-10-06 17:56:20 +08:00
WuYongJie
57b2b405cf
fix(intake): 商品企划候选人排除供应商账号
2026-10-06 17:56:20 +08:00
WuYongJie
e1b8989621
fix(intake): 搜索下拉支持清空已选值
2026-10-06 17:56:07 +08:00
WuYongJie
f5f20a8b18
fix(intake): 商品企划候选人排除供应商账号
2026-10-06 17:56:06 +08:00
WuYongJie
a110714305
fix(intake): 搜索下拉支持清空已选值
2026-10-06 17:55:36 +08:00
WuYongJie
f430b3e18d
fix(intake): 商品企划候选人排除供应商账号
2026-10-06 17:55:24 +08:00
居居
5cd69fb9db
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-06 17:24:22 +08:00
WuYongJie
a4e61b44a1
Merge origin/codex/xuxiake-mainline (SABC 模块等 74 个提交) into codex/local-3001-integration
2026-10-06 17:21:50 +08:00
居居
2be45f7a74
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
2026-10-06 17:02:56 +08:00
居居
14a5e1c5f7
feat(supply-chain): 人员信息同步支持自动标记离职(方案B:抓取比对+钉钉确认)
2026-10-06 16:53:13 +08:00
WuYongJie
6d5a8a65d3
fix(intake): 商品企划候选人改为全部内部人员(商品企划部解散后搜不到人)
2026-10-06 16:29:59 +08:00
WuYongJie
e95a2365f5
fix(intake): 商品企划候选人改为全部内部人员(商品企划部解散后搜不到人)
2026-10-06 16:29:36 +08:00
WuYongJie
294d6d3dfa
fix(intake): 商品企划候选人改为全部内部人员(商品企划部解散后搜不到人)
2026-10-06 16:29:20 +08:00
居居
cda264dd30
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标:月度核算生成后冻结、各部门数据分类子页面(按利润中心分组 + 部门数据权限 +
可配置品牌范围/兜底/目标 + 月度快照)、导出明细与经营总览、同款商品编码匹配修复;
并移除未随提交带上的 WorkflowMonitorView 引用、修正行快照类型。
2026-10-06 16:12:42 +08:00
居居
cfe8cf950c
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标:月度核算生成后冻结、各部门数据分类子页面(按利润中心分组 + 部门数据权限 +
可配置品牌范围/兜底/目标 + 月度快照)、导出明细与经营总览、同款商品编码匹配修复;
并移除未随提交带上的 WorkflowMonitorView 引用、修正行快照类型。
2026-10-06 16:07:22 +08:00
居居
3ef36c7648
fix(supply-chain): 移除未随提交带上的 WorkflowMonitorView 引用并修正 SABC 行快照类型
2026-10-06 16:05:54 +08:00
codex
83c10719ca
feat(logistics-arrival): 物流到货签收时长看板
...
- 看板:经营总览(平均到货时长 + 本月目标 + 目标达成率、异常单点击下钻)、
履约环节拆解(平均/中位/P90/目标/目标达成率,分栏可拖动)、发货→签收时效分布
- 经营对象问题排名:签收日期→平台→店铺→发货仓→物流→采购→供应商→商品→订单明细
逐级联动 + 独立翻页;经营对象带「目标 = 该对象上月平均 × 98%」与目标达成率
- 09 订单明细:看板内翻页、高度可拖动、下钻后自动滚动定位
- 排除关键词按字段分组(发货仓/物流公司/订单标签/买家留言/卖家备注),
选择器支持搜索、全部/已选项、全选/反选/清空、紧凑模式与按字段新增
- 每日订单明细快照:Prisma 模型与迁移、同步脚本、定时器安装脚本;
命中快照时整区间精确统计,超过规模上限回落均匀样本并如实标注
- 接入侧边菜单、标签页标题与权限映射(businessManagement),补充架构文档
2026-10-06 15:37:48 +08:00
居居
ac572e2c4d
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标:月度核算生成后冻结(每月3日自动生成上月)、各部门数据分类子页面
(按利润中心分组 + 部门数据权限 + 可配置品牌范围/兜底/目标)、导出明细与经营总览、
同款商品编码匹配修复等。
2026-10-06 15:37:48 +08:00
codex
77eff1744a
feat(employee-hours): 工时记录列表支持按列排序
...
- 查询接口与管理端筛选条件新增 sortBy / sortDirection,服务端校验取值合法性
- 仓储层按列名映射排序字段,approvedScore / attachment 使用 nulls last,并保持 id 升序兜底
- 列表列头改为可点击排序(显示升序/降序箭头与 aria-sort),保留原有列宽拖拽
- 补齐仓储、服务、视图层单测(排序参数校验与列头交互)
2026-10-06 15:37:47 +08:00
codex
05007d3ae2
feat(logistics-arrival): 物流到货签收时长看板
...
- 看板:经营总览(平均到货时长 + 本月目标 + 目标达成率、异常单点击下钻)、
履约环节拆解(平均/中位/P90/目标/目标达成率,分栏可拖动)、发货→签收时效分布
- 经营对象问题排名:签收日期→平台→店铺→发货仓→物流→采购→供应商→商品→订单明细
逐级联动 + 独立翻页;经营对象带「目标 = 该对象上月平均 × 98%」与目标达成率
- 09 订单明细:看板内翻页、高度可拖动、下钻后自动滚动定位
- 排除关键词按字段分组(发货仓/物流公司/订单标签/买家留言/卖家备注),
选择器支持搜索、全部/已选项、全选/反选/清空、紧凑模式与按字段新增
- 每日订单明细快照:Prisma 模型与迁移、同步脚本、定时器安装脚本;
命中快照时整区间精确统计,超过规模上限回落均匀样本并如实标注
- 接入侧边菜单、标签页标题与权限映射(businessManagement),补充架构文档
2026-09-30 18:18:51 +08:00
居居
a771a9a5dc
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标:月度核算生成后冻结(每月3日自动生成上月)、各部门数据分类子页面
(按利润中心分组 + 部门数据权限 + 可配置品牌范围/兜底/目标)、导出明细与经营总览、
同款商品编码匹配修复等。
2026-09-30 18:15:07 +08:00
居居
3f1de4e431
style(supply-chain): 导出下拉框与查询/重置按钮对齐
2026-09-30 18:14:09 +08:00
居居
155c93a0c5
feat(supply-chain): 产品中心/采购中心卡片新增导出按钮
2026-09-30 18:11:09 +08:00
居居
471b5b373e
perf(supply-chain): 各部门数据分类改为核算时落库月度快照,页面直接读结果
2026-09-30 18:08:01 +08:00
codex
df206dbfe3
feat(employee-hours): 工时记录列表支持按列排序
...
- 查询接口与管理端筛选条件新增 sortBy / sortDirection,服务端校验取值合法性
- 仓储层按列名映射排序字段,approvedScore / attachment 使用 nulls last,并保持 id 升序兜底
- 列表列头改为可点击排序(显示升序/降序箭头与 aria-sort),保留原有列宽拖拽
- 补齐仓储、服务、视图层单测(排序参数校验与列头交互)
2026-09-30 18:04:41 +08:00
居居
dc0a9e740a
style(supply-chain): 各部门数据分类按 A/B/C/G 优先排序
2026-09-30 17:56:43 +08:00
居居
398bc73450
feat(supply-chain): 产品中心/采购中心剔除山东项目组,导出补合计行
2026-09-30 17:51:18 +08:00
居居
4369e2f050
perf(supply-chain): 各部门数据分类增加结果/快照/花名册缓存,加载从秒级降到毫秒级
2026-09-30 17:11:52 +08:00
居居
e61772c2ce
feat(supply-chain): 导出菜单去掉列表项,明细=仅商品表,明细(含经营总览)=商品表+汇总
2026-09-30 15:51:36 +08:00
居居
5bc45f4e93
fix(supply-chain): 品牌兜底行的部门负责人/总负责人改按人员信息逻辑取
2026-09-30 15:41:07 +08:00
居居
4c4807c72e
feat(supply-chain): SABC 导出改为导出列表/导出明细/导出经营总览三档菜单
2026-09-30 15:39:14 +08:00
居居
baa2017106
feat(supply-chain): 山东专用/分销专用品牌运营负责人兜底(刘景刚/宋兵乙)
2026-09-30 15:34:17 +08:00
居居
38120d3f73
feat(supply-chain): 其他(未分配)分组核实花名册离职状态并置底展示
2026-09-30 14:37:55 +08:00
居居
9d2633420d
style(supply-chain): 产品中心/采购中心改为与运营中心一致的卡片与合计行
2026-09-30 14:25:33 +08:00
居居
de6d9014b3
feat(supply-chain): 各部门数据分类产品中心/采购中心改为完整指标列,去掉重复的未匹配清单
2026-09-30 14:22:09 +08:00
居居
0a2a9c2f89
feat(supply-chain): 各部门数据分类筛选占位/单中心导出/部门回落利润中心/离职人员分组/运营中心E并入G
2026-09-30 14:10:38 +08:00
居居
6a36cae707
style(supply-chain): 各部门数据分类业绩按万元展示
2026-09-30 13:54:03 +08:00
居居
d47d550409
fix(supply-chain): 各部门数据分类配置改为弹窗,点击配置立即可见
2026-09-30 13:53:28 +08:00
居居
303694784c
feat(supply-chain): SABC 导出新增「明细」/「明细(含经营总览)」两种模式
2026-09-30 13:49:38 +08:00
居居
da46e84526
feat(supply-chain): 新增「各部门数据分类」子页面(按利润中心分组 + 部门数据权限 + 可配置品牌范围)
2026-09-30 13:02:00 +08:00
居居
6eebb56ba0
feat(supply-chain): SABC 每月3日生成上月并冻结,执行核算仅管理员
2026-09-30 09:51:41 +08:00
居居
ad08dccf1c
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标全部源码:页面/筛选/经营总览、服务端核算规则、同款商品编码匹配、
每日同步(聚水潭档案/销售日表/替换规则/类目档位/产品类型回填)、API 与导出、测试用例。
2026-09-29 18:04:53 +08:00
居居
6da6b0df76
Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline
...
商品SABC打标全部源码:页面/筛选/经营总览、服务端核算规则、同款商品编码匹配、
每日同步(聚水潭档案/销售日表/替换规则/类目档位/产品类型回填)、API 与导出、测试用例。
2026-09-29 17:59:16 +08:00
WuYongJie
b9dc0bddb1
产品全量档案以图搜图改用壹点图搜接口并增加本地向量双层检索
...
- A 层:调壹点图搜上游(ownProductMatches 我司 SKU 命中),上游调用收口为共享 client,供应商推荐搜索市场同款同步复用
- B 层:本地 DINOv2 向量索引覆盖全量档案图(宽松排序、同图哈希置顶、模型未就绪自动降级)
- 上游编码与档案条码/SKU 大小写不敏感匹配,两路结果按条码去重
- 弹窗分「我司 SKU 命中」「全量档案相似」两区展示,本地索引通过 scripts/index-product-archive-images.ts 增量维护
2026-09-29 17:55:30 +08:00
WuYongJie
4008bcf061
产品全量档案以图搜图改用壹点图搜接口并增加本地向量双层检索
...
- A 层:调壹点图搜上游(ownProductMatches 我司 SKU 命中),上游调用收口为共享 client,供应商推荐搜索市场同款同步复用
- B 层:本地 DINOv2 向量索引覆盖全量档案图(宽松排序、同图哈希置顶、模型未就绪自动降级)
- 上游编码与档案条码/SKU 大小写不敏感匹配,两路结果按条码去重
- 弹窗分「我司 SKU 命中」「全量档案相似」两区展示,本地索引通过 scripts/index-product-archive-images.ts 增量维护
2026-09-29 17:54:54 +08:00
居居
39f603c091
fix(supply-chain): 同款编码改为直接正反向匹配,不再顺延替换链到末端
2026-09-29 17:21:24 +08:00
居居
34abc63edc
feat(supply-chain): 同款编码正反向匹配并顺延替换链到最终编码
2026-09-29 17:05:49 +08:00
居居
0a8231d93c
feat(supply-chain): 总览刷新与趋势支持强制取最新数据(绕过缓存)
2026-09-29 16:49:52 +08:00
居居
7838b82655
feat(supply-chain): 同款编码重复映射取创建时间最新的一条
2026-09-29 16:47:06 +08:00
居居
9f89ccbb7e
feat(supply-chain): 不考核原因只保留 ODM,其余为空并同步是否考核
2026-09-29 16:35:12 +08:00
WuYongJie
1dcaa48baf
fix(intake): 产品核价工作区接入受控列宽并修复长规格名称挤成多排
2026-09-29 16:19:38 +08:00
WuYongJie
51ff817dde
fix(intake): 产品核价工作区接入受控列宽并修复长规格名称挤成多排
2026-09-29 16:18:19 +08:00
居居
791fcf083b
style(supply-chain): 总览标签顺序恢复 S/A/B/C/D
2026-09-29 16:16:22 +08:00
居居
4cb5f9192a
feat(supply-chain): 筛选栏新增运营部门负责人(含下拉候选)
2026-09-29 16:13:58 +08:00
居居
0f9bade034
feat(supply-chain): 总览维度改为运营部门负责人并支持联动筛选
2026-09-29 16:12:30 +08:00
居居
eedda35a29
fix(supply-chain): 补回被误删的 percent 格式化函数
2026-09-29 16:06:51 +08:00
居居
55d77fd989
style(supply-chain): 总览真实业绩统一按万元展示
2026-09-29 16:05:29 +08:00
居居
c45ec60635
style(supply-chain): 总览标签卡片与对比条按真实业绩降序
2026-09-29 16:04:55 +08:00
居居
efc437f0de
feat(supply-chain): 维度汇总表展示全部分组,不再合并其他行
2026-09-29 16:04:23 +08:00
居居
3b1a629854
style(supply-chain): 维度汇总表去掉标签配色,与其他列保持一致
2026-09-29 16:03:08 +08:00
居居
a38aaef5d2
feat(supply-chain): 总览维度模块改为 S/A/B/C/D 数据汇总表
2026-09-29 16:01:06 +08:00
居居
7caa307042
style(supply-chain): 总览卡片保留数量与占比,对比条改为真实业绩(万)+业绩占比
2026-09-29 15:53:44 +08:00
居居
e0bad60b31
fix(supply-chain): 页面支持整体滚动,明细区不再被压扁
2026-09-29 15:48:53 +08:00
居居
8e0fc1d347
perf(supply-chain): 经营总览一次计算+短时缓存,首页刷新提速
2026-09-29 15:47:34 +08:00
居居
574f42c4ed
fix(supply-chain): 修复筛选区与总览重叠,总览可点击联动明细
2026-09-29 15:42:45 +08:00
居居
5102516b10
feat(supply-chain): 经营总览新增维度对比与近6个月趋势
2026-09-29 15:37:14 +08:00
居居
189344626e
feat(supply-chain): 经营总览改为 SABC 页内可折叠区块,移除独立页面与菜单
2026-09-29 15:35:24 +08:00
居居
fe6389a2a0
feat(supply-chain): 新增 SABC 经营总览(商品数 vs 业绩对比)
2026-09-29 15:31:48 +08:00
居居
9d53362466
style(supply-chain): SABC 筛选框固定单行排列,标签归位到行尾
2026-09-29 15:28:29 +08:00
居居
005cc37a65
style(supply-chain): SABC 筛选框按内容宽度排成一行
2026-09-29 15:26:57 +08:00
居居
2f081dd1f5
style(supply-chain): SABC 筛选改为圆角输入框样式
2026-09-29 15:25:10 +08:00
居居
b0701d8ae4
feat(supply-chain): 筛选候选取消服务端上限
2026-09-29 15:22:11 +08:00
居居
f0af29c62b
fix(supply-chain): 筛选候选上限提高到 200,运营负责人等人员全部可选
2026-09-29 15:21:14 +08:00
居居
2a61ed2b34
style(supply-chain): 核算按钮移至核算月份后,查询/重置/导出统一按钮样式
2026-09-29 15:17:06 +08:00
WuYongJie
143dfe019d
fix(layout): raise sidebar peek z-index above page content layers
2026-09-29 15:14:27 +08:00
WuYongJie
f5f4e2ec90
fix(layout): raise sidebar peek z-index above page content layers
2026-09-29 15:13:52 +08:00
居居
fefb1319c0
style(supply-chain): SABC 筛选头部与字段网格分离,消除空格
2026-09-29 15:05:35 +08:00
居居
cde8d617ad
style(supply-chain): SABC 筛选区统一网格排版
2026-09-29 15:03:55 +08:00
居居
85c69041fe
feat(supply-chain): SABC 新增运营负责人/采购/设计师筛选
2026-09-29 15:01:55 +08:00
居居
1762ba8387
feat(supply-chain): SABC 筛选字段支持下拉候选选择
2026-09-29 15:01:04 +08:00
居居
84515e895c
feat(supply-chain): SABC 筛选改为人员信息页同款样式(字段网格 + 搜索/重置)
2026-09-29 14:57:58 +08:00
居居
852d42bf3a
feat(supply-chain): SABC 筛选改为按字段独立输入框(支持批量、多字段取交集)
2026-09-29 14:53:59 +08:00
居居
8cd0f71ff7
feat(supply-chain): SABC 筛选支持批量查询,筛选区拆分为两行
2026-09-29 14:50:27 +08:00
WuYongJie
8c1c4bd938
feat(barcode-print): PLM 产品开发视图每日同步正式站条码打印脚本
2026-09-29 14:44:04 +08:00
居居
b1c3ba3bda
feat(supply-chain): 新老编码两侧均按自身+同款编码合并计算
2026-09-29 14:43:26 +08:00
居居
ea7c5a953c
fix(supply-chain): 老编码按自身数据照常打标(与人工表一致)
2026-09-29 14:40:41 +08:00
居居
117a5b2947
feat(supply-chain): 人员字段以正式库档案为准同步
2026-09-29 14:02:09 +08:00
居居
2dbc455b86
feat(supply-chain): 每日任务新增运营总负责人映射步骤
2026-09-29 14:00:19 +08:00
居居
c59647ac9f
feat(supply-chain): SABC 页面新增运营/供应商/采购/设计师字段(置于创建时间前)
2026-09-29 13:44:40 +08:00
居居
7b3a7acb12
feat(supply-chain): 是否考核动销按产品类型判定(OEM 考核,其余不考核)
2026-09-29 13:40:36 +08:00
居居
95f5915c6a
fix(supply-chain): 同款编码只展示单个编码,自映射规则不重复计算
2026-09-29 13:34:47 +08:00
居居
ff1ea6ce24
feat(supply-chain): 同款商品编码按替换款管理合并业绩与费比
2026-09-29 13:21:45 +08:00
WuYongJie
5eb7d4b1aa
fix(layout): cast keydown target to HTMLElement for isContentEditable check
2026-09-29 13:18:15 +08:00
WuYongJie
d40cad8eed
fix(layout): cast keydown target to HTMLElement for isContentEditable check
2026-09-29 13:18:06 +08:00
WuYongJie
110de56e7f
feat(layout): add collapsible workbench sidebar with hover peek and space shortcut
2026-09-29 13:03:51 +08:00
WuYongJie
d7e348b236
merge origin/codex/xuxiake-mainline (employee-hours sync)
2026-09-29 13:03:09 +08:00
WuYongJie
b2f4242526
feat(layout): add collapsible workbench sidebar with hover peek and space shortcut
2026-09-29 13:03:04 +08:00
apple
4c771e0a82
feat(employee-hours): sync row copy and time entry improvements
2026-09-29 11:49:49 +08:00
apple
f6b8065580
feat(employee-hours): sync row copy and time entry improvements
2026-09-29 11:37:15 +08:00
WuYongJie
db01d9e445
fix(intake): 样包测量/产品限价/首批质检列宽整列联动(受控列宽)
2026-09-29 11:27:18 +08:00
WuYongJie
eb6fa9d672
fix(intake): 样包测量/产品限价/首批质检列宽整列联动(受控列宽)
2026-09-29 11:25:55 +08:00
居居
4c518b054e
feat(supply-chain): SABC 不考核原因改用档案产品类型,并纳入每日回填
2026-09-29 11:19:17 +08:00
居居
9ae9423742
feat(supply-chain): 每日同步新增正式库类目档位配置步骤
2026-09-29 10:20:18 +08:00
居居
b976f075ff
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/xuxiake-sabc-sync-20260929
...
# Conflicts:
# furniture-3d-system/prisma/schema.prisma
# furniture-3d-system/src/server/repositories/supply-chain-product-archive-category-scale-row.repository.ts
# furniture-3d-system/src/server/repositories/supply-chain-product-archive-sales-period.repository.ts
2026-09-29 10:14:29 +08:00
居居
648b1eee8d
feat(supply-chain): 商品SABC打标(同步开发线前的本地快照)
2026-09-29 10:10:16 +08:00
WuYongJie
749c28452c
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-29 09:44:02 +08:00
WuYongJie
f2dfcf1419
feat(supply-chain): 产品全量档案新增「售后金额」列(after_sale_amount 按日/月/年周期聚合)
2026-09-28 18:13:15 +08:00
WuYongJie
0e85656279
feat(supply-chain): 产品全量档案新增「售后金额」列(after_sale_amount 按日/月/年周期聚合)
2026-09-28 18:12:31 +08:00
WuYongJie
fe99b46eef
feat(supply-chain): 产品全量档案新增「售后金额」列(after_sale_amount 按日/月/年周期聚合)
2026-09-28 18:11:43 +08:00
WuYongJie
afbb7b3aad
feat(supply-chain): refresh product type in daily archive sync
...
在每日产品档案同步链路中追加「产品类型」刷新步骤(定厂优先、JST vc_name 兜底),复用既有 timer 与库身份校验,无需单独回填或新增定时任务。
2026-09-28 17:00:23 +08:00
WuYongJie
7384163a2c
feat(supply-chain): refresh product type in daily archive sync
...
在每日产品档案同步链路中追加「产品类型」刷新步骤(定厂优先、JST vc_name 兜底),复用既有 timer 与库身份校验,无需单独回填或新增定时任务。
2026-09-28 17:00:17 +08:00
WuYongJie
c473825b3d
feat(supply-chain): refresh product type in daily archive sync
...
在每日产品档案同步链路中追加「产品类型」刷新步骤(定厂优先、JST vc_name 兜底),复用既有 timer 与库身份校验,无需单独回填或新增定时任务。
2026-09-28 17:00:08 +08:00
WuYongJie
5664958dfb
feat(supply-chain): add product type column to product archive
...
产品全量档案在「商品状态」后新增「产品类型」:定厂「产品生产类型」(IntakeNonIntegratedProduct.payload.factoryRows[].productionType) 优先,rpt.jst_sku.vc_name 兜底,按条码对应,都没有留空;值原样写入。附迁移、筛选与回填脚本。
2026-09-28 16:31:09 +08:00
WuYongJie
199be5d7cb
feat(supply-chain): add product type column to product archive
...
产品全量档案在「商品状态」后新增「产品类型」:定厂「产品生产类型」(IntakeNonIntegratedProduct.payload.factoryRows[].productionType) 优先,rpt.jst_sku.vc_name 兜底,按条码对应,都没有留空;值原样写入。附迁移、筛选与回填脚本。
2026-09-28 16:30:55 +08:00
WuYongJie
51c6c9f20b
feat(supply-chain): add product type column to product archive
...
产品全量档案在「商品状态」后新增「产品类型」:定厂「产品生产类型」(IntakeNonIntegratedProduct.payload.factoryRows[].productionType) 优先,rpt.jst_sku.vc_name 兜底,按条码对应,都没有留空;值原样写入。附迁移、筛选与回填脚本。
2026-09-28 16:30:14 +08:00
WuYongJie
8b76cd57db
feat(product-archive): 新增「销售金额」表头字段(取每日快照 sales_amount)
...
- 列表「数据信息」分组新增「销售金额」,位置固定在「真实业绩」前一列
- 取值来自每日快照表 SupplyChainProductArchiveSalesPerformanceDaily.sales_amount,
与发货金额/退货金额/真实业绩走同一链路,随页面 日/月/年 周期聚合
- 表头漏斗支持按销售金额筛选(可搜索多选标准弹层),列设置/详情弹窗/资料导出随列配置自动生效,
字段总数 89 → 90
- 新增一次性 localStorage 列序迁移,把上线前保存过的列设置里的新列挪回「真实业绩」前
- 不改数据库结构、不改每日同步脚本;旧的全周期汇总表不加列、不回填
2026-09-28 16:02:45 +08:00
WuYongJie
3f36d2b51e
feat(product-archive): 新增「销售金额」表头字段(取每日快照 sales_amount)
...
- 列表「数据信息」分组新增「销售金额」,位置固定在「真实业绩」前一列
- 取值来自每日快照表 SupplyChainProductArchiveSalesPerformanceDaily.sales_amount,
与发货金额/退货金额/真实业绩走同一链路,随页面 日/月/年 周期聚合
- 表头漏斗支持按销售金额筛选(可搜索多选标准弹层),列设置/详情弹窗/资料导出随列配置自动生效,
字段总数 89 → 90
- 新增一次性 localStorage 列序迁移,把上线前保存过的列设置里的新列挪回「真实业绩」前
- 不改数据库结构、不改每日同步脚本;旧的全周期汇总表不加列、不回填
2026-09-28 16:02:22 +08:00
apple
0fde0bfe4b
feat(employee-hours): add resizable columns and category import
2026-09-28 15:39:40 +08:00
codex
61a4d81658
feat(store-account): 新增账号按人员信息带出负责人层级,修复自动填充残留并明文显示密码
2026-09-28 14:58:24 +08:00
codex
2c4949f1cc
feat(store-account): 新增账号按人员信息带出负责人层级,修复自动填充残留并明文显示密码
2026-09-28 14:58:13 +08:00
codex
c89e4248f0
feat(store-account): 新增账号按人员信息带出负责人层级,修复自动填充残留并明文显示密码
2026-09-28 14:57:53 +08:00
WuYongJie
2b14e8863e
feat(supply-chain): sync product archive designer from js_sku_info_manage
...
按 barcode=sku_id 从 rpt.js_sku_info_manage 回填产品全量档案 designer:空值补来源值,冲突行按用户口径取辛环;写入 fieldSourceMap=JST_SKU_INFO_MANAGE 并保留来源记录。附正式站 systemd timer 安装脚本(每天 09:00 Asia/Shanghai)。
2026-09-28 14:45:30 +08:00
WuYongJie
97d618a25d
feat(supply-chain): sync product archive designer from js_sku_info_manage
...
按 barcode=sku_id 从 rpt.js_sku_info_manage 回填产品全量档案 designer:空值补来源值,冲突行按用户口径取辛环;写入 fieldSourceMap=JST_SKU_INFO_MANAGE 并保留来源记录。附正式站 systemd timer 安装脚本(每天 09:00 Asia/Shanghai)。
2026-09-28 14:45:11 +08:00
WuYongJie
5f4170919d
feat(supply-chain): sync product archive designer from js_sku_info_manage
...
按 barcode=sku_id 从 rpt.js_sku_info_manage 回填产品全量档案 designer:空值补来源值,冲突行按用户口径取辛环;写入 fieldSourceMap=JST_SKU_INFO_MANAGE 并保留来源记录。附正式站 systemd timer 安装脚本(每天 09:00 Asia/Shanghai)。
2026-09-28 14:44:54 +08:00
WuYongJie
b01a5bb574
fix(supplier-recommended): use upstream image search defaults
2026-09-28 14:22:40 +08:00
WuYongJie
da3a49f03f
fix(supplier-recommended): use upstream image search defaults
2026-09-28 14:19:21 +08:00
apple
a2dab2cd49
feat(employee-hours): add resizable columns and category import
2026-09-28 14:15:33 +08:00
WuYongJie
a4e577e376
fix(supplier-recommended): use upstream image search defaults
2026-09-28 14:09:50 +08:00
WuYongJie
4f12fdfcac
fix(intake): 分销部纳入运营负责人候选名单并默认归运营
...
1. intake-owner-options.service.ts: operation 口径在路径含运营中心之外,增加 江苏简尚品牌管理有限公司>分销部,SPU负责人与运营负责人共用该名单,运营中心原口径不变。
2. business-role-inference.ts: 分销部从 EXCLUDED_ROOTS 移出,改为默认归 OPERATIONS,避免每日花名册同步把分销部在职员工打回普通用户。
2026-09-28 12:35:36 +08:00
WuYongJie
4fb7802eb4
fix(intake): 分销部纳入运营负责人候选名单并默认归运营
...
1. intake-owner-options.service.ts: operation 口径在路径含运营中心之外,增加 江苏简尚品牌管理有限公司>分销部,SPU负责人与运营负责人共用该名单,运营中心原口径不变。
2. business-role-inference.ts: 分销部从 EXCLUDED_ROOTS 移出,改为默认归 OPERATIONS,避免每日花名册同步把分销部在职员工打回普通用户。
2026-09-28 12:35:21 +08:00
WuYongJie
d1aa93e17f
fix(intake): 分销部纳入运营负责人候选名单并默认归运营
...
1. intake-owner-options.service.ts: operation 口径在路径含运营中心之外,增加 江苏简尚品牌管理有限公司>分销部,SPU负责人与运营负责人共用该名单,运营中心原口径不变。
2. business-role-inference.ts: 分销部从 EXCLUDED_ROOTS 移出,改为默认归 OPERATIONS,避免每日花名册同步把分销部在职员工打回普通用户。
2026-09-28 12:35:10 +08:00
apple
6a52c0aa4b
feat(employee-hours): make business selector resizable
2026-09-28 09:27:59 +08:00
apple
daa0abbf03
feat(employee-hours): make business selector resizable
2026-09-28 09:00:22 +08:00
WuYongJie
48fcd34608
Revert "fix(deploy): support interactive password authentication"
...
This reverts commit d2f965611c15838a5b3e3e1f32cf1a5dbe7091bb.
2026-09-27 17:18:29 +08:00
WuYongJie
80f82d8ff0
fix(employee-hours): normalize attachment URLs before save
2026-09-27 17:14:02 +08:00
WuYongJie
9d7023df4a
fix(employee-hours): normalize attachment URLs before save
2026-09-27 17:11:37 +08:00
WuYongJie
d2f965611c
fix(deploy): support interactive password authentication
2026-09-27 17:10:21 +08:00
WuYongJie
a87a8b50b3
fix(employee-hours): normalize attachment URLs before save
2026-09-27 17:09:52 +08:00
WuYongJie
13e1dcb7b2
feat(barcode-print): 顾家模板改名「顾家(6x4)」并修复默认选中乱码匹配
...
- 下拉选项「顾家」改为「顾家(6x4)」(模板本身为 60mm×40mm 纸张)
2026-09-27 16:12:52 +08:00
WuYongJie
68b310f646
feat(store-account): add authorization status and header filters
2026-09-27 16:12:35 +08:00
WuYongJie
f9c32930da
feat(barcode-print): 顾家模板改名「顾家(6x4)」并修复默认选中乱码匹配
...
- 下拉选项「顾家」改为「顾家(6x4)」(模板本身为 60mm×40mm 纸张)
2026-09-27 16:09:42 +08:00
WuYongJie
2ba2a37232
feat(store-account): add authorization status and header filters
2026-09-27 16:08:43 +08:00
apple
5a59e727c0
feat(employee-hours): complete statistics and ranking workflow
2026-09-27 15:40:53 +08:00
WuYongJie
52ab8578e5
feat(barcode-print): 顾家模板改名「顾家(6x4)」并修复默认选中乱码匹配
...
- 下拉选项「顾家」改为「顾家(6x4)」(模板本身为 60mm×40mm 纸张)
2026-09-27 15:32:06 +08:00
WuYongJie
4e52997d64
feat(layout): 侧栏分组归类与首页、操作日志体验统一
...
1) 首页快捷网址子项去图标改4px圆点(产品开发/供应链双侧栏共用生效)
2) 工作台选择卡片只留图标与名称,去掉描述小字
3) 产品开发侧栏按 新品流程/AI生图/模块化/仓库管理 分组(默认展开可折叠,一级带图标统一14px,二级圆点13px,BOM核算归新品流程),手机端下拉同步
4) /intake/operation-logs 去左侧栏,固定返回链接改为返回上一步按钮(无历史兜底/intake)
2026-09-27 15:20:20 +08:00
WuYongJie
ccf8b6480f
feat(layout): 侧栏分组归类与首页、操作日志体验统一
...
1) 首页快捷网址子项去图标改4px圆点(产品开发/供应链双侧栏共用生效)
2) 工作台选择卡片只留图标与名称,去掉描述小字
3) 产品开发侧栏按 新品流程/AI生图/模块化/仓库管理 分组(默认展开可折叠,一级带图标统一14px,二级圆点13px,BOM核算归新品流程),手机端下拉同步
4) /intake/operation-logs 去左侧栏,固定返回链接改为返回上一步按钮(无历史兜底/intake)
2026-09-27 15:20:03 +08:00
apple
b96dfe9780
feat(employee-hours): complete statistics and ranking workflow
2026-09-27 14:30:00 +08:00
WuYongJie
aee6dc6c8f
feat(store-account): add batch delete
2026-09-27 13:44:31 +08:00
WuYongJie
010cd87601
feat(store-account): add batch delete
2026-09-27 13:42:59 +08:00
WuYongJie
5013d709e4
feat(store-account): add batch delete
2026-09-27 13:41:04 +08:00
WuYongJie
ca0e2d884c
fix(intake): persist AB package grouping and set counts
2026-09-27 13:14:50 +08:00
WuYongJie
02843032d2
fix(intake): persist AB package grouping and set counts
2026-09-27 13:13:28 +08:00
WuYongJie
90eebbc74d
fix(intake): persist AB package grouping and set counts
2026-09-27 13:10:02 +08:00
WuYongJie
f988334005
style(warehouse-config): 表头靠左,筛选图标后置对齐产品全量档案
2026-09-27 12:33:04 +08:00
WuYongJie
e6545b6eae
style(warehouse-config): 表头靠左,筛选图标后置对齐产品全量档案
2026-09-27 12:32:48 +08:00
WuYongJie
0cb88569d8
style(warehouse-config): 表头靠左,筛选图标后置对齐产品全量档案
2026-09-27 12:32:45 +08:00
WuYongJie
f9ff4af8c5
refactor(employee-hours): 工时独立业务配置表,与工作记录解耦
...
- 新增 EmployeeHoursBusinessOption/EmployeeHoursScoreRule 独立配置表与迁移
2026-09-27 11:37:39 +08:00
WuYongJie
3bd5384699
refactor(employee-hours): 工时独立业务配置表,与工作记录解耦
...
- 新增 EmployeeHoursBusinessOption/EmployeeHoursScoreRule 独立配置表与迁移
2026-09-27 11:36:16 +08:00
WuYongJie
5af8c6c539
refactor(employee-hours): 工时独立业务配置表,与工作记录解耦
...
- 新增 EmployeeHoursBusinessOption/EmployeeHoursScoreRule 独立配置表与迁移
2026-09-27 11:36:01 +08:00
WuYongJie
6f63f3936e
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-27 10:59:34 +08:00
WuYongJie
7fa65e3309
feat(warehouse-config): 导入导出+聚水潭字典候选+采购负责人回填+表头筛选改造
...
- 导入导出:模板下载/NDJSON流式导入(名称upsert+逐行报错)/ExcelJS导出,均跟随筛选
2026-09-27 10:40:24 +08:00
WuYongJie
997efc1084
feat(warehouse-config): 导入导出+聚水潭字典候选+采购负责人回填+表头筛选改造
...
- 导入导出:模板下载/NDJSON流式导入(名称upsert+逐行报错)/ExcelJS导出,均跟随筛选
2026-09-27 10:40:01 +08:00
WuYongJie
36493b75f8
feat(warehouse-config): 导入导出+聚水潭字典候选+采购负责人回填+表头筛选改造
...
- 导入导出:模板下载/NDJSON流式导入(名称upsert+逐行报错)/ExcelJS导出,均跟随筛选
2026-09-27 10:39:45 +08:00
WuYongJie
001a1e919e
fix(intake): skip unconfigured jushuitan virtual inventory
2026-09-27 10:22:31 +08:00
WuYongJie
1422c2f5fa
fix(intake): skip unconfigured jushuitan virtual inventory
2026-09-27 10:21:02 +08:00
WuYongJie
427448f48e
fix(intake): skip unconfigured jushuitan virtual inventory
2026-09-27 10:19:53 +08:00
WuYongJie
218517d5af
fix(build): keep upload route constants private
2026-09-27 10:01:21 +08:00
apple
3e31bcf29e
feat(supply-chain): add employee hours statistics
2026-09-27 09:22:12 +08:00
apple
2e3a36b25d
feat(supply-chain): add employee hours statistics
2026-09-24 19:49:35 +08:00
WuYongJie
842bdd3967
style(category-config): 重置按钮去图标纯文字
2026-09-24 18:04:58 +08:00
WuYongJie
0b7cb58418
style(category-config): 重置按钮去图标纯文字
2026-09-24 18:04:45 +08:00
WuYongJie
e3e572657a
feat(category-config): 筛选栏增加重置按钮(清空搜索/分类/规模标签并回第一页)
2026-09-24 18:03:12 +08:00
WuYongJie
ab817eddfa
feat(category-config): 筛选栏增加重置按钮(清空搜索/分类/规模标签并回第一页)
2026-09-24 18:02:59 +08:00
WuYongJie
3dcdeb5cf1
docs(数据字典): 类目配置更新为单表合并结构(两表口径+取数方式+消费方)
2026-09-24 17:34:49 +08:00
WuYongJie
0a2e0484b3
fix(category-config): buildRowInput 分类入参改可选(生产构建类型对齐)
2026-09-24 17:27:12 +08:00
WuYongJie
01cf89cd01
fix(category-config): buildRowInput 分类入参改可选(生产构建类型对齐)
2026-09-24 17:26:59 +08:00
WuYongJie
5984179dc9
fix(category-config): 规模行服务入参分类改为可选以匹配路由校验
2026-09-24 17:21:21 +08:00
WuYongJie
f75b05bda1
fix(category-config): 规模行服务入参分类改为可选以匹配路由校验
2026-09-24 17:20:59 +08:00
WuYongJie
9e7f8914f0
fix(category-config): 移除对已删除规模行生成方法的残留调用
2026-09-24 17:13:21 +08:00
WuYongJie
a45c691428
fix(category-config): 移除对已删除规模行生成方法的残留调用
2026-09-24 17:12:27 +08:00
WuYongJie
fff6675c7a
refactor(category-config): 类目规模合并为单表展示结构(一级类目/分类并入规模行,移除分类档位模板表)
2026-09-24 17:07:00 +08:00
WuYongJie
9e91f18dfd
refactor(category-config): 类目规模合并为单表展示结构(一级类目/分类并入规模行,移除分类档位模板表)
2026-09-24 17:06:41 +08:00
WuYongJie
2af84fd9ce
feat(intake): allow manual installation asset ordering
2026-09-24 16:36:24 +08:00
WuYongJie
9808224718
fix(category-config): 规模行导入同步一级类目与分类到类目配置;档位导入表头兼容带单位列名
2026-09-24 16:32:53 +08:00
WuYongJie
cb3efaa50c
fix(category-config): 规模行导入同步一级类目与分类到类目配置;档位导入表头兼容带单位列名
2026-09-24 16:31:44 +08:00
WuYongJie
d52fd19c49
fix(category-config): 规模行导入同步一级类目与分类到类目配置(留空保留原值)
2026-09-24 15:47:04 +08:00
WuYongJie
eb6a2e6571
fix(category-config): 规模行导入同步一级类目与分类到类目配置(留空保留原值)
2026-09-24 15:46:30 +08:00
WuYongJie
ebf9e6a6c4
fix(category-config): 规模行导入表头对齐导出格式(含一级类目/分类/带单位列名)
...
导入、导出、下载模板三处表头统一为导出格式;导入兼容带单位列名(业绩起点(元)/日销起点(件/天)),一级类目与分类列接受但忽略
2026-09-24 15:02:12 +08:00
WuYongJie
d42d500071
fix(category-config): 规模行导入表头对齐导出格式(含一级类目/分类/带单位列名)
...
导入、导出、下载模板三处表头统一为导出格式;导入兼容带单位列名(业绩起点(元)/日销起点(件/天)),一级类目与分类列接受但忽略
2026-09-24 15:00:27 +08:00
WuYongJie
e8a374e93c
feat(category-config): 类目配置增加分类、规模标签与业绩/日销阈值(含导入导出与删除)
...
- 类目配置单表新增:分类、规模标签、业绩起点/终点、日销起点/终点,操作列含编辑/删除
2026-09-24 14:36:43 +08:00
WuYongJie
fddf877d9e
feat(category-config): 类目配置增加分类、规模标签与业绩/日销阈值(含导入导出与删除)
...
- 类目配置单表新增:分类、规模标签、业绩起点/终点、日销起点/终点,操作列含编辑/删除
2026-09-24 14:35:46 +08:00
WuYongJie
cc7219a24e
feat(intake): sync installation assets to drawing system by ID
...
(cherry picked from commit c066c60494a9103e3d33655cbe09a0b7e03ffb18)
2026-09-24 13:37:30 +08:00
WuYongJie
c066c60494
feat(intake): sync installation assets to drawing system by ID
2026-09-24 13:35:04 +08:00
WuYongJie
9875a28716
feat(product-archive): include intake products in base sync and add 08:20 timer
2026-09-24 11:50:09 +08:00
WuYongJie
97a173eb9c
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-24 11:48:37 +08:00
WuYongJie
a8b6d31c5e
feat(product-archive): include intake products in base sync and add 08:20 timer
2026-09-24 10:56:21 +08:00
WuYongJie
46d0521105
merge: release DingTalk login resilience
2026-09-24 09:56:24 +08:00
WuYongJie
44be8f58b8
fix(auth): harden DingTalk login network failures
2026-09-24 09:50:38 +08:00
WuYongJie
02a25b1e75
修复:补齐创建人解析服务缺失的 ResolutionCache 类型声明(服务器构建失败根因)
2026-09-23 17:29:38 +08:00
WuYongJie
2d4965dfc7
修复:补齐创建人解析服务缺失的 ResolutionCache 类型声明(服务器构建失败根因)
2026-09-23 17:29:09 +08:00
WuYongJie
272219a4eb
1688代发异常事项:创建人列(纳廷创建人+人员信息在职校验+离职/兜底解析链)与业绩范围切换
2026-09-23 17:20:32 +08:00
WuYongJie
da4be64bfe
1688代发异常事项:创建人列(纳廷创建人+人员信息在职校验+离职/兜底解析链)与业绩范围切换
2026-09-23 17:20:05 +08:00
WuYongJie
c9431b7e26
feat(supply-chain): 店铺状态落库(StoreAccount.shopState 列 + 每日同步任务)
2026-09-23 14:05:25 +08:00
WuYongJie
a93159dddc
feat(supply-chain): 店铺状态落库(StoreAccount.shopState 列 + 每日同步任务)
2026-09-23 14:03:13 +08:00
WuYongJie
1b293985d6
1688代发异常事项:上传图纸改为页内直传图纸系统(条码分组绑定V01/V02)并接入每日图纸对账
2026-09-23 13:16:56 +08:00
WuYongJie
291485dbda
1688代发异常事项:上传图纸改为页内直传图纸系统(条码分组绑定V01/V02)并接入每日图纸对账
2026-09-23 13:16:08 +08:00
WuYongJie
aff07c4375
feat(intake): support batch lead time with row overrides
2026-09-23 13:15:43 +08:00
WuYongJie
84ac3ed6a4
feat(intake): support batch lead time with row overrides
2026-09-23 13:14:21 +08:00
WuYongJie
791f6bfa40
feat(supply-chain): 店铺账号管理新增店铺状态列与筛选(实时取公司报表库 rpt.fys_shopInfo)
2026-09-23 12:45:04 +08:00
WuYongJie
eabc26a044
feat(supply-chain): 店铺账号管理新增店铺状态列与筛选(实时取公司报表库 rpt.fys_shopInfo)
2026-09-23 12:40:33 +08:00
WuYongJie
4b800d0b3b
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-main-merge
...
# Conflicts:
# furniture-3d-system/docs/workflow/生产部署入口说明.md
# furniture-3d-system/scripts/install-dingtalk-directory-sync-timer.sh
# furniture-3d-system/src/server/services/download-center/download-center.service.ts
2026-09-23 10:48:04 +08:00
WuYongJie
3d22d627fb
fix(auth): separate DingTalk login credentials from API credentials
2026-09-23 10:43:16 +08:00
WuYongJie
fa17ffa9a8
fix(download-center): 生成中删除任务时丢弃产物,并忽略本地运行目录
2026-09-23 09:48:21 +08:00
WuYongJie
159035f98a
fix(download-center): correct error code enum and failAllActive return shape
2026-09-22 17:40:30 +08:00
WuYongJie
8a95dbcbf0
fix(download-center): correct error code enum and failAllActive return shape
2026-09-22 17:40:21 +08:00
WuYongJie
71a7f0a09a
feat(supply-chain): global download center with background export tasks
2026-09-22 17:32:53 +08:00
WuYongJie
9bfc3e826f
feat(product-archive): factory stock column and ops-owner hierarchy rework
2026-09-22 17:32:53 +08:00
WuYongJie
89ed5ee355
chore(sync): schedule product archive source sync daily at 08:10
2026-09-22 17:32:53 +08:00
WuYongJie
24c668e1c8
feat(supply-chain): global download center with background export tasks
2026-09-22 17:32:32 +08:00
WuYongJie
870632bd5e
feat(product-archive): factory stock column and ops-owner hierarchy rework
2026-09-22 17:32:23 +08:00
WuYongJie
152df22a1a
chore(sync): schedule product archive source sync daily at 08:10
2026-09-22 17:32:10 +08:00
WuYongJie
6e35bb42ee
chore(product-archive): 补提交发货方式历史数据回填脚本
2026-09-22 15:53:29 +08:00
WuYongJie
6f55f490f6
fix(supply-chain): complete personnel information source sync
...
(content-sync from origin/codex/xuxiake-mainline 0f52aca9)
2026-09-22 12:48:12 +08:00
居居
0f52aca923
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/xuxiake-mainline
2026-09-22 12:01:43 +08:00
居居
c0cc39a565
fix(supply-chain): complete personnel information source sync
2026-09-22 11:59:28 +08:00
WuYongJie
41030ec7f2
feat(oa-board): 流程状态筛选新增「全部」口径
...
流程状态下拉新增「全部」:overallStatus=__all__ 时服务端与客户端过滤均跳过状态限制,包含已驳回、已终止、已取消及无状态标记数据;默认口径(进行中+已完成)不变,导出明细同口径生效。
2026-09-22 11:29:19 +08:00
WuYongJie
687e80b6cd
feat(oa-board): 流程状态筛选新增「全部」口径
...
流程状态下拉新增「全部」:overallStatus=__all__ 时服务端与客户端过滤均跳过状态限制,包含已驳回、已终止、已取消及无状态标记数据;默认口径(进行中+已完成)不变,导出明细同口径生效。
2026-09-22 11:24:16 +08:00
居居
5512be5371
fix(supply-chain): 固化人员信息界面配置
2026-09-22 11:08:10 +08:00
居居
7b5f66dfcf
fix(supply-chain): 固化人员信息界面配置
2026-09-22 10:33:18 +08:00
Codex
271c7b24b4
feat(supplier-recommended): add image similarity search
2026-09-22 10:20:05 +08:00
Codex
f94286464b
feat(supplier-recommended): add image similarity search
2026-09-22 10:17:35 +08:00
WuYongJie
e3dcc2463a
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 21:27:48 +08:00
WuYongJie
4b54f3e531
fix(sync): guard against null skuoid rows in dws ops owners listing
2026-09-21 21:27:19 +08:00
WuYongJie
669fbd63fd
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 20:58:35 +08:00
WuYongJie
191e050374
fix(sync): drop server-only marker imports from the archive sync dependency chain
2026-09-21 20:58:07 +08:00
WuYongJie
9e0081724e
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 20:35:51 +08:00
WuYongJie
fd3b451af9
chore(sync): log full stack on enrichment failures
2026-09-21 20:34:25 +08:00
WuYongJie
616f985dee
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 19:28:31 +08:00
WuYongJie
16587f62af
fix(sync): alias server-only to an empty stub for plain-node tooling runs
2026-09-21 19:28:06 +08:00
WuYongJie
f57fd6d354
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 19:15:48 +08:00
WuYongJie
407946d5d2
chore(sync): record server-only and uuid in the deploy lock file
2026-09-21 19:15:24 +08:00
WuYongJie
37d09f0ca1
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 19:11:37 +08:00
WuYongJie
3269f4409f
fix(sync): declare server-only and uuid deps and drop the marker import so node-side scripts can run
2026-09-21 19:11:12 +08:00
WuYongJie
65b32ce405
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-21 17:36:54 +08:00
WuYongJie
c4943e6b04
fix(product-archive): include stat_date in ops owners group by to unblock daily sync
2026-09-21 17:35:36 +08:00
居居
475478b273
feat(supply-chain): 新增人员信息与钉钉组织同步
2026-09-21 16:38:13 +08:00
WuYongJie
ec807b3217
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
...
# Conflicts:
# furniture-3d-system/prisma/schema.prisma
# furniture-3d-system/src/app/api/supply-chain/new-products/dropship-issues/route.test.ts
# furniture-3d-system/src/app/api/supply-chain/new-products/dropship-issues/route.ts
# furniture-3d-system/src/app/api/supply-chain/new-products/dropship-issues/update/route.test.ts
# furniture-3d-system/src/app/api/supply-chain/new-products/dropship-issues/update/route.ts
# furniture-3d-system/src/app/supply-chain/config/supply-chain-menu.test.ts
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/DropshipIssueEditDialog.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/DropshipIssuesPagination.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/DropshipIssuesTable.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/DropshipOpsFilter.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/DropshipSkuPanel.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/dropship-issues.module.css
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/page.tsx
# furniture-3d-system/src/app/supply-chain/new-products/dropship-issues/types.ts
# furniture-3d-system/src/lib/supply-chain-permission-settings.test.ts
# furniture-3d-system/src/lib/supply-chain-permission-settings.ts
# furniture-3d-system/src/server/repositories/supply-chain-dropship-issue.repository.ts
# furniture-3d-system/src/server/services/__tests__/supply-chain-dropship-issue.service.test.ts
# furniture-3d-system/src/server/services/supply-chain-dropship-issue.service.ts
2026-09-21 15:58:02 +08:00
居居
e9cb61e18c
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/xuxiake-mainline
2026-09-21 14:25:22 +08:00
居居
1cf72e3c81
feat(supply-chain): 新增人员信息与钉钉组织同步
2026-09-21 14:25:05 +08:00
WuYongJie
4df5e800fe
fix(1688): show zero for missing cost values
...
(cherry picked from commit ce48ab7944bed1a81c29eb36145bcd9d76bf01f8)
2026-09-21 11:50:13 +08:00
WuYongJie
ce48ab7944
fix(1688): show zero for missing cost values
2026-09-21 11:42:05 +08:00
WuYongJie
bb730dd533
安装演示工作台 5 项 bug 根因修复接手
...
(cherry picked from commit 073437c8bfe809f3992bb1a5288aa2c57f3c3567)
2026-09-21 11:33:53 +08:00
WuYongJie
073437c8bf
安装演示工作台 5 项 bug 根因修复接手
2026-09-21 11:02:32 +08:00
WuYongJie
b92d56c090
feat(intake): extend barcode import permissions
...
(cherry picked from commit d4778d29e9f618745f0777335336dd8986614d9f)
2026-09-21 11:01:48 +08:00
WuYongJie
d4778d29e9
feat(intake): extend barcode import permissions
2026-09-21 10:54:14 +08:00
WuYongJie
ba5eeaea33
feat(supply-chain): add estimated freight to 1688 dropship data
...
Task: supply-chain-1688-freight-inclusive-unit-cost-20260918
(cherry picked from commit 4450ac5ce610a45c5c06f7cced6bfa7a2f4af82a)
2026-09-21 10:00:40 +08:00
WuYongJie
4450ac5ce6
feat(supply-chain): add estimated freight to 1688 dropship data
...
Task: supply-chain-1688-freight-inclusive-unit-cost-20260918
2026-09-21 09:43:43 +08:00
WuYongJie
87a28cc5f7
fix(supply-chain): restore 1688 data menu order
2026-09-18 15:53:51 +08:00
WuYongJie
7d8f6d3848
fix(supply-chain): restore 1688 data menu order
2026-09-18 15:53:36 +08:00
WuYongJie
76420b8ecd
fix(supply-chain): merge rapid 1688 field filters
2026-09-18 15:19:10 +08:00
伯阳
5a6f09b0df
feat(supply-chain): complete 1688 dropship sourcing workflow
2026-09-18 15:18:56 +08:00
WuYongJie
009685cdd7
fix(supply-chain): merge rapid 1688 field filters
2026-09-18 15:16:55 +08:00
伯阳
9244b9d570
merge: sync xuxiake mainline for 1688 sourcing
2026-09-18 13:25:12 +08:00
伯阳
a22657e28e
feat(supply-chain): complete 1688 dropship sourcing workflow
2026-09-18 11:17:47 +08:00
WuYongJie
446c550320
feat(operation-logs): 失败操作日志实时推送徐霞客
...
- 失败日志(FAILED/RETRY)写入后经壹点通知中心个人推送徐霞客
- 聚水潭固定虚拟库存错误码按 1 小时折叠成一条,其余按 动作+错误码+SPU+SKU 10 分钟合并
- 正文空行分段(钉钉 Markdown 会吞单个换行),纯文字无按钮
- record 挂载异步通知不阻塞业务,NODE_ENV=test 静默
- 新增带 worker 密钥的手动测试入口 /api/internal/operation-logs/failure-notification/run
2026-09-18 10:10:36 +08:00
WuYongJie
8ea81f886a
feat(product-archive): 定厂「发货方式」同步进全量档案的入库/代发列
...
全量档案的「入库/代发」列(storageType)此前 73,278 行 100% 为空:产品定厂时
采购填的「发货方式」(入仓/代发)从来没有回流到档案表,列上没有任何来源映射。
规则(按用户口径):全量的入库/代发只有 代发/入仓 两个值——
- 新品(产品开发)定厂带了发货方式的,直接带进档案
- 没填的,等仓库配置同步兜底填空
- 无法识别的值(如 海运)不写,保持空
实现要点:
- sync.repository:产品开发来源的 SELECT/类型加 shipping_method;
buildArchiveUpdate 白名单补 storageType(此前该列不在白名单里,值写不进档案表)
- sync.service:宽表 shipping_method 经 storageTypeFromShippingMethodLabel
映射(入仓/入库→INBOUND、代发→DROPSHIP、无法识别→空串不动),
仅非空时写入;fieldSourceMap 记 storageType ← shipping_method
- enrichment mapper:仓库配置来源拆成两条——warehouseHead 照常无条件更新;
storageType 改 fillEmptyOnly(只填空),定厂带回的值不被仓库配置覆盖
- lib/values:新增 storageTypeFromShippingMethodLabel(入仓/入库→INBOUND、
代发→DROPSHIP,兼容「入库」写法)
- 页面显示「入库」→「入仓」(与定厂填值一致)
- 测试:sync.service 加 3 用例;新增 warehouse-config-fill 套件 3 用例
(已有值不覆盖 / 为空才填 / 初始化过不再重复应用);
enrichment.service 计数断言 8→9 并补仓库配置两条的断言
验证:type-check EXIT=0;相关套件 sync 11 / enrichment 9 / warehouse-config-fill 3
全过;真库端到端——跑一次 XG0012 的产品开发同步,档案 storageType 从空变 INBOUND、
来源记 PRODUCT_DEVELOPMENT/shipping_method,再跑仓库配置 enrichment 后仍为 INBOUND
(不被覆盖);3001 真机按「入仓」筛选出 1 行、页面列显示「入仓」。
2026-09-18 10:10:36 +08:00
WuYongJie
f3f59adcbc
供应商新品推荐:页面默认视图改为明细数据
2026-09-18 10:10:36 +08:00
WuYongJie
b0bfd3d65a
feat(operation-logs): 失败操作日志实时推送徐霞客
...
- 失败日志(FAILED/RETRY)写入后经壹点通知中心个人推送徐霞客
- 聚水潭固定虚拟库存错误码按 1 小时折叠成一条,其余按 动作+错误码+SPU+SKU 10 分钟合并
- 正文空行分段(钉钉 Markdown 会吞单个换行),纯文字无按钮
- record 挂载异步通知不阻塞业务,NODE_ENV=test 静默
- 新增带 worker 密钥的手动测试入口 /api/internal/operation-logs/failure-notification/run
2026-09-18 09:46:16 +08:00
WuYongJie
fc12269838
fix(jushuitan): batch fixed virtual inventory pushes
2026-09-18 09:39:26 +08:00
WuYongJie
9647a1f49f
feat(operation-logs): 失败操作日志实时推送徐霞客
...
- 失败日志(FAILED/RETRY)写入后经壹点通知中心个人推送徐霞客
- 聚水潭固定虚拟库存错误码按 1 小时折叠成一条,其余按 动作+错误码+SPU+SKU 10 分钟合并
- 正文空行分段(钉钉 Markdown 会吞单个换行),纯文字无按钮
- record 挂载异步通知不阻塞业务,NODE_ENV=test 静默
- 新增带 worker 密钥的手动测试入口 /api/internal/operation-logs/failure-notification/run
2026-09-18 09:21:41 +08:00
WuYongJie
dc07310cda
fix(jushuitan): batch fixed virtual inventory pushes
2026-09-18 09:20:17 +08:00
WuYongJie
e8f8087f78
fix(intake): 保存实时供应商目录映射
2026-09-17 17:28:08 +08:00
WuYongJie
be9f844c5a
fix(intake): 保存实时供应商目录映射
2026-09-17 17:25:52 +08:00
WuYongJie
ca6e22ac66
feat(product-archive): 定厂「发货方式」同步进全量档案的入库/代发列
...
全量档案的「入库/代发」列(storageType)此前 73,278 行 100% 为空:产品定厂时
采购填的「发货方式」(入仓/代发)从来没有回流到档案表,列上没有任何来源映射。
规则(按用户口径):全量的入库/代发只有 代发/入仓 两个值——
- 新品(产品开发)定厂带了发货方式的,直接带进档案
- 没填的,等仓库配置同步兜底填空
- 无法识别的值(如 海运)不写,保持空
实现要点:
- sync.repository:产品开发来源的 SELECT/类型加 shipping_method;
buildArchiveUpdate 白名单补 storageType(此前该列不在白名单里,值写不进档案表)
- sync.service:宽表 shipping_method 经 storageTypeFromShippingMethodLabel
映射(入仓/入库→INBOUND、代发→DROPSHIP、无法识别→空串不动),
仅非空时写入;fieldSourceMap 记 storageType ← shipping_method
- enrichment mapper:仓库配置来源拆成两条——warehouseHead 照常无条件更新;
storageType 改 fillEmptyOnly(只填空),定厂带回的值不被仓库配置覆盖
- lib/values:新增 storageTypeFromShippingMethodLabel(入仓/入库→INBOUND、
代发→DROPSHIP,兼容「入库」写法)
- 页面显示「入库」→「入仓」(与定厂填值一致)
- 测试:sync.service 加 3 用例;新增 warehouse-config-fill 套件 3 用例
(已有值不覆盖 / 为空才填 / 初始化过不再重复应用);
enrichment.service 计数断言 8→9 并补仓库配置两条的断言
验证:type-check EXIT=0;相关套件 sync 11 / enrichment 9 / warehouse-config-fill 3
全过;真库端到端——跑一次 XG0012 的产品开发同步,档案 storageType 从空变 INBOUND、
来源记 PRODUCT_DEVELOPMENT/shipping_method,再跑仓库配置 enrichment 后仍为 INBOUND
(不被覆盖);3001 真机按「入仓」筛选出 1 行、页面列显示「入仓」。
2026-09-17 16:58:54 +08:00
WuYongJie
8d38f07626
fix(intake): 修复大产品保存事务超时与聚水潭分批推送
...
- 非集成产品保存事务(formal SPU 主事务 / saveActiveWithLock / createRecord /
updateRecord)统一加 { maxWait: 10s, timeout: 60s }:修复 224 SKU 大产品保存时
Prisma 交互式事务超过默认 5s 触发 P2028 整笔回滚、页面提示保存成功但数据未落库
的问题(正式站 LRSF0095 实际案例,单日 11 次保存失败,供应商数据全部丢失)
- 聚水潭商品资料推送分批:itemsku/upload 与 combinesku/upload 按每批 100 个 items
推送(单次上限 200,LRSF0095 一次推 224 个被 code=130 拒绝),逐批成功落锁,
中间批次失败抛 PartialFailureError 保护已成功 SKU
- 新增回归用例:250 SKU 断言 itemsku/upload 分 3 批(100/100/50)且总数无遗漏
验证:type-check 通过;intake-non-integrated-product.service.test.ts 108/108;
jushuitan-product-pricing-push.service.test.ts 33/34(唯一失败为既有环境问题)
2026-09-17 15:42:40 +08:00
WuYongJie
a310362839
fix(intake): 修复大产品保存事务超时与聚水潭分批推送
...
- 非集成产品保存事务(formal SPU 主事务 / saveActiveWithLock / createRecord /
updateRecord)统一加 { maxWait: 10s, timeout: 60s }:修复 224 SKU 大产品保存时
Prisma 交互式事务超过默认 5s 触发 P2028 整笔回滚、页面提示保存成功但数据未落库
的问题(正式站 LRSF0095 实际案例,单日 11 次保存失败,供应商数据全部丢失)
- 聚水潭商品资料推送分批:itemsku/upload 与 combinesku/upload 按每批 100 个 items
推送(单次上限 200,LRSF0095 一次推 224 个被 code=130 拒绝),逐批成功落锁,
中间批次失败抛 PartialFailureError 保护已成功 SKU
- 新增回归用例:250 SKU 断言 itemsku/upload 分 3 批(100/100/50)且总数无遗漏
验证:type-check 通过;intake-non-integrated-product.service.test.ts 108/108;
jushuitan-product-pricing-push.service.test.ts 33/34(唯一失败为既有环境问题)
2026-09-17 15:37:45 +08:00
WuYongJie
14974d20ef
fix(intake): 修复大产品保存事务超时与聚水潭分批推送
...
- 非集成产品保存事务(formal SPU 主事务 / saveActiveWithLock / createRecord /
updateRecord)统一加 { maxWait: 10s, timeout: 60s }:修复 224 SKU 大产品保存时
Prisma 交互式事务超过默认 5s 触发 P2028 整笔回滚、页面提示保存成功但数据未落库
的问题(正式站 LRSF0095 实际案例,单日 11 次保存失败,供应商数据全部丢失)
- 聚水潭商品资料推送分批:itemsku/upload 与 combinesku/upload 按每批 100 个 items
推送(单次上限 200,LRSF0095 一次推 224 个被 code=130 拒绝),逐批成功落锁,
中间批次失败抛 PartialFailureError 保护已成功 SKU
- 新增回归用例:250 SKU 断言 itemsku/upload 分 3 批(100/100/50)且总数无遗漏
验证:type-check 通过;intake-non-integrated-product.service.test.ts 108/108;
jushuitan-product-pricing-push.service.test.ts 33/34(唯一失败为既有环境问题)
2026-09-17 15:36:22 +08:00
WuYongJie
26754ae266
供应商新品推荐:页面默认视图改为明细数据
2026-09-17 14:56:22 +08:00
WuYongJie
98482bccec
feat(product-archive): 定厂「发货方式」同步进全量档案的入库/代发列
...
全量档案的「入库/代发」列(storageType)此前 73,278 行 100% 为空:产品定厂时
采购填的「发货方式」(入仓/代发)从来没有回流到档案表,列上没有任何来源映射。
规则(按用户口径):全量的入库/代发只有 代发/入仓 两个值——
- 新品(产品开发)定厂带了发货方式的,直接带进档案
- 没填的,等仓库配置同步兜底填空
- 无法识别的值(如 海运)不写,保持空
实现要点:
- sync.repository:产品开发来源的 SELECT/类型加 shipping_method;
buildArchiveUpdate 白名单补 storageType(此前该列不在白名单里,值写不进档案表)
- sync.service:宽表 shipping_method 经 storageTypeFromShippingMethodLabel
映射(入仓/入库→INBOUND、代发→DROPSHIP、无法识别→空串不动),
仅非空时写入;fieldSourceMap 记 storageType ← shipping_method
- enrichment mapper:仓库配置来源拆成两条——warehouseHead 照常无条件更新;
storageType 改 fillEmptyOnly(只填空),定厂带回的值不被仓库配置覆盖
- lib/values:新增 storageTypeFromShippingMethodLabel(入仓/入库→INBOUND、
代发→DROPSHIP,兼容「入库」写法)
- 页面显示「入库」→「入仓」(与定厂填值一致)
- 测试:sync.service 加 3 用例;新增 warehouse-config-fill 套件 3 用例
(已有值不覆盖 / 为空才填 / 初始化过不再重复应用);
enrichment.service 计数断言 8→9 并补仓库配置两条的断言
验证:type-check EXIT=0;相关套件 sync 11 / enrichment 9 / warehouse-config-fill 3
全过;真库端到端——跑一次 XG0012 的产品开发同步,档案 storageType 从空变 INBOUND、
来源记 PRODUCT_DEVELOPMENT/shipping_method,再跑仓库配置 enrichment 后仍为 INBOUND
(不被覆盖);3001 真机按「入仓」筛选出 1 行、页面列显示「入仓」。
2026-09-17 14:55:11 +08:00
WuYongJie
ba930d1df2
feat(product-archive): SPU 列支持「只看正常编码」与可累加排除规则
...
产品全量档案的 SPU 列筛选原来只有「勾选具体值 = 包含」一种语义,没法表达
「不要 DF- 开头的 / 不要纯数字的」这类排除需求,只能靠不断放宽正选来绕。
新增两类能力(原有「勾选值包含」语义一字未改):
- 「只看正常编码」:字母前缀(2~6位) + 可选「-字母段」 + 数字编号(3~8位),
一次收掉纯数字 / 1643A 型 / 含中文的商品名 / 32 位哈希等非正常形态
- 「排除以…开头」:可累加的前缀黑名单(如 WM- 外贸、DF- 代发、MKH),
对应「还有不想看就再填一条」
实现要点:
- lib:新增 ProductArchiveTextFilterKey / ProductArchiveExcludeRule 与
PRODUCT_ARCHIVE_NORMAL_CODE_PATTERN;ProductArchiveFilters 只追加
normalCodeOnly、excludeStartsWith 两个可选字段,老字段类型与语义不动
- 校验:zod schema 是 .strict(),同步放行两个新字段(否则整包筛选会被 400 拒掉)
- 服务端:buildProductArchiveWhere 保持同步,只追加 NOT startsWith;
需要查库的「正常编码」放在新增的异步 buildProductArchiveWhereWithTextRules
(Prisma 7.3 的字符串过滤不支持 regex,改为原生 SQL 取符合形态的取值清单拼 IN,
带 5 分钟缓存)。preparePeriodArchiveQuery 是全站唯一取数入口,
列表、候选项、导出、图片导出自动生效
- 文本规则故意不参与 omitFilter:若参与,候选值列表会冒出已被排除的取值,
用户勾了却得到 0 行
- UI:文本列弹层改左右双排(左=形态与排除规则,右=搜索与候选值),
弹层高度与横向偏移按触发按钮所在位置动态计算,保证清除/应用在任何视口都可见
- 偏好:两个新字段进入 sanitizeFilters 白名单,规则可持久化,点清除即清空
验证:本地真实库 66033 行——只勾正常编码 27645 行、再接 WM- 26852 行、
再接 DF- 26788 行,与 SQL 基准逐一致;3001 HTTP 对账五个口径全对、
非法列返回 400、候选项接口在勾了正常编码后返回的 SPU 全部符合形态;
真机 UI 12/12(应用 26788、刷新记住、回显、清除回 66033);
布局专项 36/36(1600x900 / 1440x720 / 1366x640 / 1280x600 下弹层均在视口内、
按钮可见、不超左右边界);新增单测 15/15;type-check EXIT=0。
2026-09-17 11:46:18 +08:00
WuYongJie
3cd14c4f0d
feat(product-archive): SPU 列支持「只看正常编码」与可累加排除规则
...
产品全量档案的 SPU 列筛选原来只有「勾选具体值 = 包含」一种语义,没法表达
「不要 DF- 开头的 / 不要纯数字的」这类排除需求,只能靠不断放宽正选来绕。
新增两类能力(原有「勾选值包含」语义一字未改):
- 「只看正常编码」:字母前缀(2~6位) + 可选「-字母段」 + 数字编号(3~8位),
一次收掉纯数字 / 1643A 型 / 含中文的商品名 / 32 位哈希等非正常形态
- 「排除以…开头」:可累加的前缀黑名单(如 WM- 外贸、DF- 代发、MKH),
对应「还有不想看就再填一条」
实现要点:
- lib:新增 ProductArchiveTextFilterKey / ProductArchiveExcludeRule 与
PRODUCT_ARCHIVE_NORMAL_CODE_PATTERN;ProductArchiveFilters 只追加
normalCodeOnly、excludeStartsWith 两个可选字段,老字段类型与语义不动
- 校验:zod schema 是 .strict(),同步放行两个新字段(否则整包筛选会被 400 拒掉)
- 服务端:buildProductArchiveWhere 保持同步,只追加 NOT startsWith;
需要查库的「正常编码」放在新增的异步 buildProductArchiveWhereWithTextRules
(Prisma 7.3 的字符串过滤不支持 regex,改为原生 SQL 取符合形态的取值清单拼 IN,
带 5 分钟缓存)。preparePeriodArchiveQuery 是全站唯一取数入口,
列表、候选项、导出、图片导出自动生效
- 文本规则故意不参与 omitFilter:若参与,候选值列表会冒出已被排除的取值,
用户勾了却得到 0 行
- UI:文本列弹层改左右双排(左=形态与排除规则,右=搜索与候选值),
弹层高度与横向偏移按触发按钮所在位置动态计算,保证清除/应用在任何视口都可见
- 偏好:两个新字段进入 sanitizeFilters 白名单,规则可持久化,点清除即清空
验证:本地真实库 66033 行——只勾正常编码 27645 行、再接 WM- 26852 行、
再接 DF- 26788 行,与 SQL 基准逐一致;3001 HTTP 对账五个口径全对、
非法列返回 400、候选项接口在勾了正常编码后返回的 SPU 全部符合形态;
真机 UI 12/12(应用 26788、刷新记住、回显、清除回 66033);
布局专项 36/36(1600x900 / 1440x720 / 1366x640 / 1280x600 下弹层均在视口内、
按钮可见、不超左右边界);新增单测 15/15;type-check EXIT=0。
2026-09-17 11:36:12 +08:00
WuYongJie
57e422308b
feat(product-archive): SPU 列支持「只看正常编码」与可累加排除规则
...
产品全量档案的 SPU 列筛选原来只有「勾选具体值 = 包含」一种语义,没法表达
「不要 DF- 开头的 / 不要纯数字的」这类排除需求,只能靠不断放宽正选来绕。
新增两类能力(原有「勾选值包含」语义一字未改):
- 「只看正常编码」:字母前缀(2~6位) + 可选「-字母段」 + 数字编号(3~8位),
一次收掉纯数字 / 1643A 型 / 含中文的商品名 / 32 位哈希等非正常形态
- 「排除以…开头」:可累加的前缀黑名单(如 WM- 外贸、DF- 代发、MKH),
对应「还有不想看就再填一条」
实现要点:
- lib:新增 ProductArchiveTextFilterKey / ProductArchiveExcludeRule 与
PRODUCT_ARCHIVE_NORMAL_CODE_PATTERN;ProductArchiveFilters 只追加
normalCodeOnly、excludeStartsWith 两个可选字段,老字段类型与语义不动
- 校验:zod schema 是 .strict(),同步放行两个新字段(否则整包筛选会被 400 拒掉)
- 服务端:buildProductArchiveWhere 保持同步,只追加 NOT startsWith;
需要查库的「正常编码」放在新增的异步 buildProductArchiveWhereWithTextRules
(Prisma 7.3 的字符串过滤不支持 regex,改为原生 SQL 取符合形态的取值清单拼 IN,
带 5 分钟缓存)。preparePeriodArchiveQuery 是全站唯一取数入口,
列表、候选项、导出、图片导出自动生效
- 文本规则故意不参与 omitFilter:若参与,候选值列表会冒出已被排除的取值,
用户勾了却得到 0 行
- UI:文本列弹层改左右双排(左=形态与排除规则,右=搜索与候选值),
弹层高度与横向偏移按触发按钮所在位置动态计算,保证清除/应用在任何视口都可见
- 偏好:两个新字段进入 sanitizeFilters 白名单,规则可持久化,点清除即清空
验证:本地真实库 66033 行——只勾正常编码 27645 行、再接 WM- 26852 行、
再接 DF- 26788 行,与 SQL 基准逐一致;3001 HTTP 对账五个口径全对、
非法列返回 400、候选项接口在勾了正常编码后返回的 SPU 全部符合形态;
真机 UI 12/12(应用 26788、刷新记住、回显、清除回 66033);
布局专项 36/36(1600x900 / 1440x720 / 1366x640 / 1280x600 下弹层均在视口内、
按钮可见、不超左右边界);新增单测 15/15;type-check EXIT=0。
2026-09-17 11:32:53 +08:00
WuYongJie
cffa8b64f8
merge: release BOM 预估 v2(价格回退工具/case 级预估卡/预览页/缓存表)
2026-09-16 17:37:42 +08:00
WuYongJie
b0036bcc48
merge: BOM 预估 v2 落地——价格回退工具、case 级预估卡编排、预估卡预览页、结果缓存表
2026-09-16 17:37:26 +08:00
WuYongJie
f30866530a
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0
2026-09-16 17:37:23 +08:00
WuYongJie
48871454e9
feat(bom-costing): BOM 预估 v2 —— 价格回退工具、case 级预估卡编排与预览页
...
- agent 工具:尺寸感知镜像检索 + 分类画像三级级联(包装 v1 回退链,导出纯函数复用)
- case 级编排:首批代表 SKU 自动精算,其余按需点算;结果持久缓存(新表 BomCostingAgentSkuEstimate,幂等迁移)
- EstimateCard 契约:代码侧聚合五行构成/区间包络/最小置信度/不确定点并集
- API:/api/bom-costing/cases/[id]/agent-estimate(GET 缓存卡 + POST 运行,复用模块鉴权)
- 预览页:/bom-costing/estimate(预估卡 + SKU 列表按需点算 + 竞品图片浏览,旁路不过闸门不设默认入口)
- Select 组件:透传 id/aria 到触发按钮;修复 skill 知识未注入循环的缺陷
- 基线工具:report:bom-agent-baseline(定价覆盖率 + shadow 聚合,含隧道重试)
- 设计文档:docs/架构设计/BOM成本预估v2-agent方案设计-20260916.md
2026-09-16 17:37:06 +08:00
WuYongJie
a3b9fa0fbb
merge: release 产品全量档案流式导出
2026-09-16 16:21:14 +08:00
WuYongJie
6f023e3f0d
fix(product-archive): 导出改为流式写出,修复全量导出 OOM 崩溃
...
正式站导出「产品全量档案资料」必然崩溃:整包写法在 89 列下约 60MB/千行,
生产 Node 堆被 PM2 限到 768MB,实际只能撑约 5000 行,而档案表已有 7 万余行。
PM2 记录 exited with code [0] via signal [SIGABRT],error log 19 次
FATAL ERROR: Reached heap limit,最后一次 GC dump 763.5MB(= 堆上限)。
改成「先冻结行 id 快照 → 每 2000 行分批取数 → ExcelJS 流式写出 → 边生成边下发」,
服务端堆占用与导出总行数解耦;并加同机并发上限 3(超限 429)兜底。
- repository:listRows 全量取数改为 openRowSource。先冻结本次要导的有序 id 快照,
再按 id 分批取完整行并按冻结顺序重排,避免导出期间上游同步导致行集合错位。
- service:createWorkbook 整包 writeBuffer 改为 openWorkbook 流式写出。
useSharedStrings:false(共享字符串表会累积全部唯一文本且无法回收);
冻结首行走 addWorksheet 的 views 选项(流式 worksheet 的 views 只有 getter,
直接赋值会被静默忽略);并发额度在「正常写完」与「客户端断开」两条路径都归还。
- route:改为流式响应,不再发 Content-Length(改 chunked);监听 request.signal,
客户端断开时销毁生成流;响应头发出后生成失败只能掐断流,故在路由层记日志。
- 前端:下载态文案改为「正在生成并下载文件...」;无 Content-Length 时显示「已接收 X」;
收流中断统一提示为可读文案,不再只报网络错误。
- 测试:5 个用例,含冻结首行回归守护与「客户端中途断开不泄漏并发额度」守护。
验证:本地真实库 66033 行 × 89 列,NODE_OPTIONS=--max-old-space-size=768 下
首字节 0.5s / 总耗时 26.7s / 产物 25.8MB / 峰值 heapUsed 152.5MB(对照:整包写法
同规模在 4GB 堆直接 OOM)。3001 真实路由 13951 行:status 200、无 Content-Length、
chunked、首字节 0.2s、5.5s / 5.6MB。产物特性 10/10(表名、冻结首行、autoFilter
A1:CK1、89 列宽度、表头加粗与文本、行数),并用 openpyxl 独立交叉复核一致。
jest 5/5 通过、type-check EXIT=0。
已知边界:只在本机 next dev 验证,未跑 next build / next start。
2026-09-16 16:07:31 +08:00
WuYongJie
c5e1c50418
fix(product-archive): 导出改为流式写出,修复全量导出 OOM 崩溃
...
正式站导出「产品全量档案资料」必然崩溃:整包写法在 89 列下约 60MB/千行,
生产 Node 堆被 PM2 限到 768MB,实际只能撑约 5000 行,而档案表已有 7 万余行。
PM2 记录 exited with code [0] via signal [SIGABRT],error log 19 次
FATAL ERROR: Reached heap limit,最后一次 GC dump 763.5MB(= 堆上限)。
改成「先冻结行 id 快照 → 每 2000 行分批取数 → ExcelJS 流式写出 → 边生成边下发」,
服务端堆占用与导出总行数解耦;并加同机并发上限 3(超限 429)兜底。
- repository:listRows 全量取数改为 openRowSource。先冻结本次要导的有序 id 快照,
再按 id 分批取完整行并按冻结顺序重排,避免导出期间上游同步导致行集合错位。
- service:createWorkbook 整包 writeBuffer 改为 openWorkbook 流式写出。
useSharedStrings:false(共享字符串表会累积全部唯一文本且无法回收);
冻结首行走 addWorksheet 的 views 选项(流式 worksheet 的 views 只有 getter,
直接赋值会被静默忽略);并发额度在「正常写完」与「客户端断开」两条路径都归还。
- route:改为流式响应,不再发 Content-Length(改 chunked);监听 request.signal,
客户端断开时销毁生成流;响应头发出后生成失败只能掐断流,故在路由层记日志。
- 前端:下载态文案改为「正在生成并下载文件...」;无 Content-Length 时显示「已接收 X」;
收流中断统一提示为可读文案,不再只报网络错误。
- 测试:5 个用例,含冻结首行回归守护与「客户端中途断开不泄漏并发额度」守护。
验证:本地真实库 66033 行 × 89 列,NODE_OPTIONS=--max-old-space-size=768 下
首字节 0.5s / 总耗时 26.7s / 产物 25.8MB / 峰值 heapUsed 152.5MB(对照:整包写法
同规模在 4GB 堆直接 OOM)。3001 真实路由 13951 行:status 200、无 Content-Length、
chunked、首字节 0.2s、5.5s / 5.6MB。产物特性 10/10(表名、冻结首行、autoFilter
A1:CK1、89 列宽度、表头加粗与文本、行数),并用 openpyxl 独立交叉复核一致。
jest 5/5 通过、type-check EXIT=0。
已知边界:只在本机 next dev 验证,未跑 next build / next start。
2026-09-16 16:02:44 +08:00
WuYongJie
990a4bfeb1
merge: release 商品抠图模型目录合并与选择器升级 + BOM agent 旁路引擎
...
# Conflicts:
# furniture-3d-system/src/app/supply-chain/config/supply-chain-menu.test.ts
# furniture-3d-system/src/app/supply-chain/config/supply-chain-menu.ts
2026-09-16 15:19:50 +08:00
WuYongJie
9533c2e4ec
merge: 商品抠图配置合并上游专用抠图模型目录 + BOM 核算 agent 旁路引擎与文本脱敏契约
...
- ai-config: 任一协议模式合并网关与异步两份模型目录,抠图模型置顶标记,选中自动对齐协议
- bom-costing/agent: 估算引擎(契约/工具/循环/网关适配/组装器,27 测试)旁路试验版
- lib: 预估文本对外脱敏契约共享模块(public-estimate-text)
- scripts: shadow 偏差报表与 agent 试跑工具(工程域专用)
2026-09-16 15:17:03 +08:00
WuYongJie
6492c2e400
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0
2026-09-16 15:14:00 +08:00
WuYongJie
20755dfdd1
feat(ai-config): 商品抠图配置合并上游专用抠图模型目录并升级选择器
...
- 目录服务:商品抠图任一协议模式都合并通用网关与异步媒体任务两份目录,
模型带 source 来源标记,抠图模型置顶;提取器按端点路径选择
- 配置页:原生 select 换平台 Select(可搜索、暗色协调),抠图模型带
【抠图】标记,选中后运行协议自动对齐异步媒体任务
- Select 组件:rest props 透传到触发按钮,支持 aria-label/id
2026-09-16 15:13:52 +08:00
WuYongJie
f8d74a5543
fix(intake): 补齐按SKU锁定与导入保护
2026-09-16 14:21:57 +08:00
WuYongJie
d73508bae6
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0
2026-09-16 14:18:51 +08:00
WuYongJie
2d93a22721
feat(bom-costing): agent 估算引擎(旁路试验版)
...
- agent/ 契约+工具+接线+循环+skill知识+网关适配+端到端组装器(27 测试)
- agent 只读仓储(归档素材/镜像价格/材质目录/案例与SKU简报)
- shadow 偏差报表与 trial 试跑脚本(工程域专用)
- 纪律:单价只来自工具结果、总额代码汇总、硬预算+trace、1688 仅中性摘要
2026-09-16 14:18:39 +08:00
WuYongJie
9983ab3a1a
fix(product-archive): 固定列不再透字,操作列改图标按钮
...
问题:产品全量档案的「序号」「操作」是两个 position: sticky 固定列。
主题样式把半透明的 --sc-hover(rgba(17,19,21,0.035))用 !important 打到了
这两个固定列上,覆盖了组件自带的不透明底色;横向滚动时压在固定列下方的
单元格文字就会透出来,污染序号列与操作列。
修复:
- .archive-td-index / .archive-td-actions 从半透明 hover 规则中摘出,
改为「不透明底色 var(--sc-surface) + linear-gradient(var(--sc-hover)) 叠加色层」,
视觉与原来一致,但底色恒不透明(浅色与深色主题均适用)
- 操作列「查看 / 更多」文字按钮改为图标按钮(Eye / MoreHorizontal),
补 title 与 aria-label,菜单项加图标并改用 --sc-* 主题变量配色
- 操作列宽度由 138px 收窄到 96px(colgroup / th / td 同步)
验证:3001 真机 puppeteer 复验 9/9 通过——hover 与横向滚动后两个固定列
背景均为不透明 rgb;操作列仅 2 个图标、无文字、宽度 96px;「更多」菜单与
「商品修改日志」入口正常,图标「查看」仍能打开条码档案详情。
type-check EXIT=0。jest 的 3 个失败用例均与本改动无关(主体文件属其他线程
未提交改动,或与 HEAD 逐字节一致属既有失败)。
2026-09-16 14:08:17 +08:00
WuYongJie
9c9a6a9a08
fix(product-archive): 固定列不再透字,操作列改图标按钮
...
问题:产品全量档案的「序号」「操作」是两个 position: sticky 固定列。
主题样式把半透明的 --sc-hover(rgba(17,19,21,0.035))用 !important 打到了
这两个固定列上,覆盖了组件自带的不透明底色;横向滚动时压在固定列下方的
单元格文字就会透出来,污染序号列与操作列。
修复:
- .archive-td-index / .archive-td-actions 从半透明 hover 规则中摘出,
改为「不透明底色 var(--sc-surface) + linear-gradient(var(--sc-hover)) 叠加色层」,
视觉与原来一致,但底色恒不透明(浅色与深色主题均适用)
- 操作列「查看 / 更多」文字按钮改为图标按钮(Eye / MoreHorizontal),
补 title 与 aria-label,菜单项加图标并改用 --sc-* 主题变量配色
- 操作列宽度由 138px 收窄到 96px(colgroup / th / td 同步)
验证:3001 真机 puppeteer 复验 9/9 通过——hover 与横向滚动后两个固定列
背景均为不透明 rgb;操作列仅 2 个图标、无文字、宽度 96px;「更多」菜单与
「商品修改日志」入口正常,图标「查看」仍能打开条码档案详情。
type-check EXIT=0。jest 的 3 个失败用例均与本改动无关(主体文件属其他线程
未提交改动,或与 HEAD 逐字节一致属既有失败)。
2026-09-16 13:54:43 +08:00
WuYongJie
570dcacdc9
fix(product-archive): 固定列不再透字,操作列改图标按钮
...
问题:产品全量档案的「序号」「操作」是两个 position: sticky 固定列。
主题样式把半透明的 --sc-hover(rgba(17,19,21,0.035))用 !important 打到了
这两个固定列上,覆盖了组件自带的不透明底色;横向滚动时压在固定列下方的
单元格文字就会透出来,污染序号列与操作列。
修复:
- .archive-td-index / .archive-td-actions 从半透明 hover 规则中摘出,
改为「不透明底色 var(--sc-surface) + linear-gradient(var(--sc-hover)) 叠加色层」,
视觉与原来一致,但底色恒不透明(浅色与深色主题均适用)
- 操作列「查看 / 更多」文字按钮改为图标按钮(Eye / MoreHorizontal),
补 title 与 aria-label,菜单项加图标并改用 --sc-* 主题变量配色
- 操作列宽度由 138px 收窄到 96px(colgroup / th / td 同步)
验证:3001 真机 puppeteer 复验 9/9 通过——hover 与横向滚动后两个固定列
背景均为不透明 rgb;操作列仅 2 个图标、无文字、宽度 96px;「更多」菜单与
「商品修改日志」入口正常,图标「查看」仍能打开条码档案详情。
type-check EXIT=0。jest 的 3 个失败用例均与本改动无关(主体文件属其他线程
未提交改动,或与 HEAD 逐字节一致属既有失败)。
2026-09-16 13:52:12 +08:00
WuYongJie
adac0dfc3a
fix(intake): 补齐按SKU锁定与导入保护
2026-09-16 13:47:39 +08:00
WuYongJie
374a39b6dc
feat(intake): 成品寄样支持一键填是/填否批量设置是否寄出
...
在产品开发明细-成品寄样工作区,「请寄样」旁新增「一键填否」「一键填是」,
一键把当前批次显示的 SKU 行的「是否寄出」填好,之后仍可单独改个别行
(例:30 个 SKU 先全填否,再把第 1 个改成是)。
实现要点:
- 只填空行,不覆盖已选过的行;目标为当前批次显示行的 skuId 集合。
- 单行默认值计算抽成 buildFinishedSampleShipmentRowWithShipped 复用,
批量走 applyFinishedSampleShipmentDecisionToRows(无变化时返回原引用)。
- 权限沿用 canEditFinishedSampleShipmentDecision;无权限或无待填写行时按钮置灰。
- HeaderActions 经 DocumentWorkspaceHeaderActionsSlot 透传动作、权限与待填写行数。
验证:
- type-check EXIT=0
- 新增单测 8 例 + 组件测试 5 例 + 集成测试 3 例 全通过
- 既有回归 buildNonIntegratedDetailChrome / buildNonIntegratedDocumentWorkspaceHeaderActions 通过
- 3001 真机(puppeteer)确认按钮组与交互元素就位,用户目视验收通过
2026-09-16 13:12:28 +08:00
WuYongJie
60034dfff0
test(intake): 样包测量只读断言随锁定口径对齐
...
非集成权限工作流用例中原断言期望样包测量「已确认」行仍可编辑,
与本次落地的口径(已确认即不可改、取消确认后方可改)冲突,
随主提交一并校正为期望 readonly,并加注释说明规则来源。
补 d3dc8821 遗漏的这一个测试文件(主提交已含对应实现)。
2026-09-16 13:12:28 +08:00
WuYongJie
44c69bef3e
feat(intake): 产品定厂与样包测量按SKU取消确认
...
为采购、跟单、管理员增加按当前批次取消样包测量 / 产品定厂确认的能力,
取消只退回未推送聚水潭的 SKU,已推送 SKU 保持锁定,且不清空任何业务字段。
主要改动:
- 取消确认:新增 workflow-confirmation/cancel 接口与服务端按结构化
systemEnteredAt 逐 SKU 重算逻辑;严格要求先取消样包测量再取消产品定厂;
「全部」页签不开放取消入口,仅具体批次页签可取消
- 编辑锁逐 SKU 化:基础信息、产品定厂、样包测量、产品核价改为逐 SKU 判定,
旧页面保存、整件删除、并发聚水潭推送均增加已推送 SKU 保护
- 样包测量锁定口径对齐:已确认即不可改,取消确认后可改;
界面只读、写入拦截与 Excel 导入共用同一判定
- 基础信息修订签名纳入产品公共字段,公共字段变更自动退回当前批次基础信息确认
- 修复产品定厂回写误退回基础信息确认:手动同步侧与派生侧统一使用
buildBasicInfoRevisionSignature,避免两侧签名形态错位导致比对恒不等
- 修复 advisory lock 被 Prisma 按 void 结果反序列化导致的保存报错
(无返回值加锁改用 executeRaw,产品行 FOR UPDATE 仍走 queryRaw)
- 并发保护:普通保存、正式 SPU 分配、资产中心系列部件写入、AI白底图乐观保存
统一接入产品级锁与锁内最新数据重读,避免旧快照覆盖取消结果
2026-09-16 13:12:28 +08:00
WuYongJie
2a7d2b04a2
feat(intake): 成品寄样支持一键填是/填否批量设置是否寄出
...
在产品开发明细-成品寄样工作区,「请寄样」旁新增「一键填否」「一键填是」,
一键把当前批次显示的 SKU 行的「是否寄出」填好,之后仍可单独改个别行
(例:30 个 SKU 先全填否,再把第 1 个改成是)。
实现要点:
- 只填空行,不覆盖已选过的行;目标为当前批次显示行的 skuId 集合。
- 单行默认值计算抽成 buildFinishedSampleShipmentRowWithShipped 复用,
批量走 applyFinishedSampleShipmentDecisionToRows(无变化时返回原引用)。
- 权限沿用 canEditFinishedSampleShipmentDecision;无权限或无待填写行时按钮置灰。
- HeaderActions 经 DocumentWorkspaceHeaderActionsSlot 透传动作、权限与待填写行数。
验证:
- type-check EXIT=0
- 新增单测 8 例 + 组件测试 5 例 + 集成测试 3 例 全通过
- 既有回归 buildNonIntegratedDetailChrome / buildNonIntegratedDocumentWorkspaceHeaderActions 通过
- 3001 真机(puppeteer)确认按钮组与交互元素就位,用户目视验收通过
2026-09-16 12:10:53 +08:00
WuYongJie
f9d29ba92f
feat(intake): 成品寄样支持一键填是/填否批量设置是否寄出
...
在产品开发明细-成品寄样工作区,「请寄样」旁新增「一键填否」「一键填是」,
一键把当前批次显示的 SKU 行的「是否寄出」填好,之后仍可单独改个别行
(例:30 个 SKU 先全填否,再把第 1 个改成是)。
实现要点:
- 只填空行,不覆盖已选过的行;目标为当前批次显示行的 skuId 集合。
- 单行默认值计算抽成 buildFinishedSampleShipmentRowWithShipped 复用,
批量走 applyFinishedSampleShipmentDecisionToRows(无变化时返回原引用)。
- 权限沿用 canEditFinishedSampleShipmentDecision;无权限或无待填写行时按钮置灰。
- HeaderActions 经 DocumentWorkspaceHeaderActionsSlot 透传动作、权限与待填写行数。
验证:
- type-check EXIT=0
- 新增单测 8 例 + 组件测试 5 例 + 集成测试 3 例 全通过
- 既有回归 buildNonIntegratedDetailChrome / buildNonIntegratedDocumentWorkspaceHeaderActions 通过
- 3001 真机(puppeteer)确认按钮组与交互元素就位,用户目视验收通过
2026-09-16 12:06:09 +08:00
WuYongJie
495ff9f30b
test(intake): 样包测量只读断言随锁定口径对齐
...
非集成权限工作流用例中原断言期望样包测量「已确认」行仍可编辑,
与本次落地的口径(已确认即不可改、取消确认后方可改)冲突,
随主提交一并校正为期望 readonly,并加注释说明规则来源。
补 d3dc8821 遗漏的这一个测试文件(主提交已含对应实现)。
2026-09-16 12:01:21 +08:00
WuYongJie
3ae72e800f
feat(intake): 产品定厂与样包测量按SKU取消确认
...
为采购、跟单、管理员增加按当前批次取消样包测量 / 产品定厂确认的能力,
取消只退回未推送聚水潭的 SKU,已推送 SKU 保持锁定,且不清空任何业务字段。
主要改动:
- 取消确认:新增 workflow-confirmation/cancel 接口与服务端按结构化
systemEnteredAt 逐 SKU 重算逻辑;严格要求先取消样包测量再取消产品定厂;
「全部」页签不开放取消入口,仅具体批次页签可取消
- 编辑锁逐 SKU 化:基础信息、产品定厂、样包测量、产品核价改为逐 SKU 判定,
旧页面保存、整件删除、并发聚水潭推送均增加已推送 SKU 保护
- 样包测量锁定口径对齐:已确认即不可改,取消确认后可改;
界面只读、写入拦截与 Excel 导入共用同一判定
- 基础信息修订签名纳入产品公共字段,公共字段变更自动退回当前批次基础信息确认
- 修复产品定厂回写误退回基础信息确认:手动同步侧与派生侧统一使用
buildBasicInfoRevisionSignature,避免两侧签名形态错位导致比对恒不等
- 修复 advisory lock 被 Prisma 按 void 结果反序列化导致的保存报错
(无返回值加锁改用 executeRaw,产品行 FOR UPDATE 仍走 queryRaw)
- 并发保护:普通保存、正式 SPU 分配、资产中心系列部件写入、AI白底图乐观保存
统一接入产品级锁与锁内最新数据重读,避免旧快照覆盖取消结果
2026-09-16 12:01:21 +08:00
WuYongJie
a4bff5dd59
test(intake): 样包测量只读断言随锁定口径对齐
...
非集成权限工作流用例中原断言期望样包测量「已确认」行仍可编辑,
与本次落地的口径(已确认即不可改、取消确认后方可改)冲突,
随主提交一并校正为期望 readonly,并加注释说明规则来源。
补 d3dc8821 遗漏的这一个测试文件(主提交已含对应实现)。
2026-09-16 11:52:18 +08:00
WuYongJie
d3dc8821c2
feat(intake): 产品定厂与样包测量按SKU取消确认
...
为采购、跟单、管理员增加按当前批次取消样包测量 / 产品定厂确认的能力,
取消只退回未推送聚水潭的 SKU,已推送 SKU 保持锁定,且不清空任何业务字段。
主要改动:
- 取消确认:新增 workflow-confirmation/cancel 接口与服务端按结构化
systemEnteredAt 逐 SKU 重算逻辑;严格要求先取消样包测量再取消产品定厂;
「全部」页签不开放取消入口,仅具体批次页签可取消
- 编辑锁逐 SKU 化:基础信息、产品定厂、样包测量、产品核价改为逐 SKU 判定,
旧页面保存、整件删除、并发聚水潭推送均增加已推送 SKU 保护
- 样包测量锁定口径对齐:已确认即不可改,取消确认后可改;
界面只读、写入拦截与 Excel 导入共用同一判定
- 基础信息修订签名纳入产品公共字段,公共字段变更自动退回当前批次基础信息确认
- 修复产品定厂回写误退回基础信息确认:手动同步侧与派生侧统一使用
buildBasicInfoRevisionSignature,避免两侧签名形态错位导致比对恒不等
- 修复 advisory lock 被 Prisma 按 void 结果反序列化导致的保存报错
(无返回值加锁改用 executeRaw,产品行 FOR UPDATE 仍走 queryRaw)
- 并发保护:普通保存、正式 SPU 分配、资产中心系列部件写入、AI白底图乐观保存
统一接入产品级锁与锁内最新数据重读,避免旧快照覆盖取消结果
2026-09-16 11:41:32 +08:00
WuYongJie
31dfacab23
1688代发异常事项:当月业绩列/供应商列/整装拆装维护 + Excel式列头筛选
...
- 列表新增当月真实业绩列(SPU 汇总条码当月值,条码展开行显示自身),当月无业绩整行过滤
- 新增供应商列(取 SPU 内非空 supplierName),列顺序调整为 SPU|业绩|供应商|运营
- 维护抽屉新增整装/拆装二选一,标记整装的 SPU 在"是否有图纸"列显示"整装不需要图纸"
- 顶部有无筛选与 Excel 式列头筛选(含 filter-options 接口)
- 新增迁移 20260915180000_add_dropship_issue_assembly_type(SupplyChainDropshipIssue.assemblyType)
2026-09-16 08:50:57 +08:00
WuYongJie
9e50804b2e
1688代发异常事项:当月业绩列/供应商列/整装拆装维护 + Excel式列头筛选
...
- 列表新增当月真实业绩列(SPU 汇总条码当月值,条码展开行显示自身),当月无业绩整行过滤
- 新增供应商列(取 SPU 内非空 supplierName),列顺序调整为 SPU|业绩|供应商|运营
- 维护抽屉新增整装/拆装二选一,标记整装的 SPU 在"是否有图纸"列显示"整装不需要图纸"
- 顶部有无筛选与 Excel 式列头筛选(含 filter-options 接口)
- 新增迁移 20260915180000_add_dropship_issue_assembly_type(SupplyChainDropshipIssue.assemblyType)
2026-09-16 08:43:27 +08:00
WuYongJie
b0fd9a8800
1688代发异常事项:SPU级维护表+运营筛选+图纸/视频筛选+条码搜索
2026-09-16 08:43:06 +08:00
WuYongJie
55ee1b421b
fix(barcode-print): restore legacy split-code text layout
...
Full-Page scaling mis-measured the 3096x416 single-line PNG by its intrinsic size and shrank the whole layout. Templates two and three now share the restored legacy ADD_PRINT_TEXT segments.
2026-09-15 18:16:15 +08:00
WuYongJie
8a7d6cae5a
fix(barcode-print): restore legacy split-code text layout
...
Full-Page scaling mis-measured the 3096x416 single-line PNG by its intrinsic size and shrank the whole layout. Templates two and three now share the restored legacy ADD_PRINT_TEXT segments.
2026-09-15 18:08:49 +08:00
WuYongJie
260fbc8428
feat(progress): add column header filters
2026-09-15 17:02:03 +08:00
WuYongJie
36616821cf
feat(progress): add column header filters
2026-09-15 16:57:42 +08:00
WuYongJie
53febe8eb7
feat(supplier-recommendations): add guided editor options
2026-09-15 14:45:25 +08:00
WuYongJie
170d776aa6
feat(supplier-recommendations): add guided editor options
2026-09-15 14:44:48 +08:00
WuYongJie
64e3378125
fix(finished-progress): backfill sample merchandiser owner
2026-09-15 13:49:26 +08:00
WuYongJie
f6dd04eeee
fix(finished-progress): backfill sample merchandiser owner
2026-09-15 13:45:40 +08:00
WuYongJie
1b301af15e
feat(finished-progress): link automatic rows to sample details
2026-09-15 11:38:40 +08:00
WuYongJie
499cbf66d1
feat(finished-progress): link automatic rows to sample details
2026-09-15 11:26:52 +08:00
WuYongJie
78dcdae880
fix(finished-progress): exclude historical JST entries
2026-09-15 11:01:33 +08:00
WuYongJie
79f34971d6
fix(finished-progress): exclude historical JST entries
2026-09-15 10:58:04 +08:00
WuYongJie
dac31e736a
fix(1688): accept opaque CDN image responses
2026-09-15 10:16:12 +08:00
WuYongJie
b63b2fe974
fix(1688): accept opaque CDN image responses
2026-09-15 10:05:15 +08:00
WuYongJie
200790b6fc
feat(finished-progress): require completed samples and improve automatic purchase intake
...
Require a real completed sample before finished-product intake. Carry factory, brand, merchandiser, delivery date and minimum order quantity into editable records; leave order date blank and support bulk maintenance.
Generate one factory contract per source group, place new automatic orders first and enlarge the horizontal scrollbar. Include source identity migration and regressions.
Validation: TypeScript noEmit; 18 Jest suites / 164 tests; local 3001 browser drag, wheel, and bottom-row checks.
2026-09-14 18:13:13 +08:00
WuYongJie
ed15789a81
feat(finished-progress): require completed samples and improve automatic purchase intake
...
Require a real completed sample before finished-product intake. Carry factory, brand, merchandiser, delivery date and minimum order quantity into editable records; leave order date blank and support bulk maintenance.
Generate one factory contract per source group, place new automatic orders first and enlarge the horizontal scrollbar. Include source identity migration and regressions.
Validation: TypeScript noEmit; 18 Jest suites / 164 tests; local 3001 browser drag, wheel, and bottom-row checks.
2026-09-14 18:07:47 +08:00
WuYongJie
73be6c9019
1688代发异常事项:SPU级维护表+运营筛选+图纸/视频筛选+条码搜索
...
- 新表 SupplyChainDropshipIssue:SPU 级普票/专票、退货地址运营维护,带操作日志
- 页面重构:删除 header,SPU 汇总行+展开条码明细(一码一行),操作列图标化
- 运营独立筛选项:可搜索/单选/多选(DropshipOpsFilter),默认按近7天销量合计降序
- 新增 是否有图纸/是否有安装视频 三态筛选(下拉一行排布),搜索支持条码维度
- 菜单排序:新品经营总览→新品终止任务反馈→1688代发数据明细→1688代发异常事项
- 平台标签标题注册 dropship-issues,修复顶部标签空白
2026-09-14 17:03:29 +08:00
WuYongJie
027d17dd4a
1688代发异常事项:SPU级维护表+运营筛选+图纸/视频筛选+条码搜索
...
- 新表 SupplyChainDropshipIssue:SPU 级普票/专票、退货地址运营维护,带操作日志
- 页面重构:删除 header,SPU 汇总行+展开条码明细(一码一行),操作列图标化
- 运营独立筛选项:可搜索/单选/多选(DropshipOpsFilter),默认按近7天销量合计降序
- 新增 是否有图纸/是否有安装视频 三态筛选(下拉一行排布),搜索支持条码维度
- 菜单排序:新品经营总览→新品终止任务反馈→1688代发数据明细→1688代发异常事项
- 平台标签标题注册 dropship-issues,修复顶部标签空白
2026-09-14 16:00:55 +08:00
WuYongJie
01fd83d28b
feat(supply-chain): 并入1688代发数据明细与代发异常事项占位
...
内容来源: codex/xuxiake-mainline 2aa85619(伯阳 1688 dropship analytics + 晓晓占位与图片预览),按文件集从 origin/main 干净并入。
- 新增 /supply-chain/new-products/1688-dropship-data 全链路(页面/筛选/趋势/API/repository/service)
- 新增 /supply-chain/new-products/dropship-issues 占位入口
- 权限 targetKey: newProduct1688DropshipData / newProductDropshipIssues
- 迁移 20260912120000_add_daily_sales_dropship_fields(salesAmount/skuOperator/unitCost)
- 产品图片点击弹窗预览
2026-09-14 10:23:47 +08:00
WuYongJie
2aa856197b
feat(supply-chain): 1688代发数据明细产品图片点击弹窗预览
...
- 新增 DropshipImageCell:缩略图可点击,平台 Modal 弹窗放大(等比铺满,最高680px)
- 缩略图样式收口到 .imageButton,避免与就地渲染的 Modal 大图互相污染
- 大图复用 source-image 认证代理 URL,浏览器缓存零额外请求
2026-09-14 10:02:55 +08:00
伯阳
bc2104b169
test(supply-chain): verify merged 1688 entries and record integration checks
2026-09-12 18:32:24 +08:00
伯阳
e271d1b941
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-1688-xuxiake-integration
2026-09-12 18:29:30 +08:00
伯阳
dfdc3c3626
feat(supply-chain): integrate 1688 dropship analytics with shared daily sales
...
Preserve shared barcode/day facts and atomic synchronization; add DF sales, cost and operator enrichment, filters, trends, and module-scoped image access. Include additive migration and deployment/backfill handoff. Independent review: passed with warnings; existing master-data audit failures match baseline.
2026-09-12 18:29:16 +08:00
WuYongJie
5156ead4c1
供应链新品管理新增「1688代发异常事项」占位入口
...
- 新增 /supply-chain/new-products/dropship-issues 占位页(功能建设中)
- supply-chain-menu 新品管理分组加菜单项,targetKey=newProductDropshipIssues
- 权限体系 targetKey 类型/列表/路由映射同步
- 侧栏清理未使用的 Home 图标导入
2026-09-12 18:05:22 +08:00
WuYongJie
090c6b39c5
运营负责人SPU级兜底:同SPU最新销售条码的负责人下放给未匹配条码
2026-09-12 17:10:50 +08:00
WuYongJie
38259cc40c
运营负责人SPU级兜底:同SPU最新销售条码的负责人下放给未匹配条码
2026-09-12 17:10:28 +08:00
WuYongJie
d20d7e4dd6
运营负责人SPU级兜底:同SPU最新销售条码的负责人下放给未匹配条码
...
- dws listLatestOpsOwners 带回 lastSaleDate;新增 listBarcodeSpuPairs(全档案条码→spu)
- service 构建按 spu 聚合的运营负责人映射(逐字段取最新销售日期的非空值)
- mapper 兜底:条码无 dws 直配时按 spu 继承(精确匹配优先,来源追溯 spu: 前缀)
- 用户口径:能匹配到的都放上去,不留空
2026-09-12 17:07:29 +08:00
WuYongJie
687ef50bb5
fix(home): workbench entry inside quick-links fold with unified styles
...
- expand list now starts with a fixed workbench entry (router.push to
the workspace picker) followed by configured links
- replace next/link with button + router.push inside the nav item so
styled-jsx scoped styles apply; fixes icon/label wrapping and keeps
font size and spacing consistent across entries
- tests updated for the new push-based navigation and roles
2026-09-12 17:03:28 +08:00
WuYongJie
f6dc344b71
fix(home): workbench entry inside quick-links fold with unified styles
...
- expand list now starts with a fixed workbench entry (router.push to
the workspace picker) followed by configured links
- replace next/link with button + router.push inside the nav item so
styled-jsx scoped styles apply; fixes icon/label wrapping and keeps
font size and spacing consistent across entries
- tests updated for the new push-based navigation and roles
2026-09-12 17:02:38 +08:00
WuYongJie
2b192afd86
fix(installation-demo): allow customer service model upload with progress toast
...
- /api/upload/model 去掉 requireDesignWorkspaceWrite 硬性门槛:改为安装演示
canEdit 或设计工作区权限二者其一即可上传(客服等已配置安装演示编辑权限
的角色可上传模型,其他模块设计权限语义不变)
- 上传进度右下角浮层按系统既有导入进度样式实现(文件名+百分比+进度条,
完成绿色停留 3 秒自动收起,失败红色保留可关闭)
- installationModelUpload 改用 XHR 以获得真实上传字节进度,工具箱共用不受影响
2026-09-12 15:51:36 +08:00
WuYongJie
6aba6e077c
fix(installation-demo): allow customer service model upload with progress toast
...
- /api/upload/model 去掉 requireDesignWorkspaceWrite 硬性门槛:改为安装演示
canEdit 或设计工作区权限二者其一即可上传(客服等已配置安装演示编辑权限
的角色可上传模型,其他模块设计权限语义不变)
- 上传进度右下角浮层按系统既有导入进度样式实现(文件名+百分比+进度条,
完成绿色停留 3 秒自动收起,失败红色保留可关闭)
- installationModelUpload 改用 XHR 以获得真实上传字节进度,工具箱共用不受影响
2026-09-12 15:51:11 +08:00
WuYongJie
9892fead34
fix(installation-demo): allow customer service model upload with progress toast
...
- /api/upload/model 去掉 requireDesignWorkspaceWrite 硬性门槛:改为安装演示
canEdit 或设计工作区权限二者其一即可上传(客服等已配置安装演示编辑权限
的角色可上传模型,其他模块设计权限语义不变)
- 上传进度右下角浮层按系统既有导入进度样式实现(文件名+百分比+进度条,
完成绿色停留 3 秒自动收起,失败红色保留可关闭)
- installationModelUpload 改用 XHR 以获得真实上传字节进度,工具箱共用不受影响
2026-09-12 15:50:47 +08:00
WuYongJie
9e9d92306e
feat(home): admin-configured quick links with sidebar home fold
...
- HomeQuickLink table + migration; CRUD API with admin-only writes and
internal-only visibility (suppliers/external intake excluded)
- sidebar home item folds open configured links in both product and
supply-chain sidebars, entries open in a new tab
- home portal top-right manage entry with sort/enable/delete sheet
- permission matrix default: home overview open to all internal subjects
so switching to supply chain no longer lands on an empty page
2026-09-12 15:04:54 +08:00
WuYongJie
0ea1c3ecdd
feat(home): admin-configured quick links with sidebar home fold
...
- HomeQuickLink table + migration; CRUD API with admin-only writes and
internal-only visibility (suppliers/external intake excluded)
- sidebar home item folds open configured links in both product and
supply-chain sidebars, entries open in a new tab
- home portal top-right manage entry with sort/enable/delete sheet
- permission matrix default: home overview open to all internal subjects
so switching to supply chain no longer lands on an empty page
2026-09-12 15:04:08 +08:00
WuYongJie
43f8540c9a
是否有图纸/是否有视频接入图纸系统API+非DF铺货图兜底+筛选修复
2026-09-12 14:27:10 +08:00
WuYongJie
002aa9dc34
fix(installation-demo): route customer service through node permissions
...
删除安装演示权限里硬编码的客服强制只读分享口径:原 isCustomerServiceUser
(CUSTOMER_SERVICE 角色或部门路径含客服中心)直接返回 canEdit=false 且排在
节点权限 overrides 之前,导致正式站给客服配置的编辑权限永远无效,客服只能
查看和分享、无法新建编辑截取。
删除后客服与普通员工一致走节点权限配置:客服主体 customerService
(部门路径含客服中心),正式站已配置的编辑权限即刻生效,可新建图纸、
维护编号、截取、分享与下载。
2026-09-12 14:25:40 +08:00
WuYongJie
d9d1b39d1c
fix(installation-demo): route customer service through node permissions
...
删除安装演示权限里硬编码的客服强制只读分享口径:原 isCustomerServiceUser
(CUSTOMER_SERVICE 角色或部门路径含客服中心)直接返回 canEdit=false 且排在
节点权限 overrides 之前,导致正式站给客服配置的编辑权限永远无效,客服只能
查看和分享、无法新建编辑截取。
删除后客服与普通员工一致走节点权限配置:客服主体 customerService
(部门路径含客服中心),正式站已配置的编辑权限即刻生效,可新建图纸、
维护编号、截取、分享与下载。
2026-09-12 14:24:58 +08:00
WuYongJie
4f2ea0bdf0
fix(installation-demo): route customer service through node permissions
...
删除安装演示权限里硬编码的客服强制只读分享口径:原 isCustomerServiceUser
(CUSTOMER_SERVICE 角色或部门路径含客服中心)直接返回 canEdit=false 且排在
节点权限 overrides 之前,导致正式站给客服配置的编辑权限永远无效,客服只能
查看和分享、无法新建编辑截取。
删除后客服与普通员工一致走节点权限配置:客服主体 customerService
(部门路径含客服中心),正式站已配置的编辑权限即刻生效,可新建图纸、
维护编号、截取、分享与下载。
2026-09-12 14:24:11 +08:00
WuYongJie
904b80d4c9
运营部门负责人/运营负责人接入聚水潭销售宽表cater/ider
...
- dws repository 新增 listLatestOpsOwners:rpt.dws_sn_sales_full_info_di 按 skuoid 取 stat_date 最新一条的 cater/ider,全条码范围
- enrichment 链路新增 ops owners patch:来源码 DWS_SALES_OPS 可追溯;字段级有值才覆盖(dws 无值保留档案原值)
- opsDirector(运营总负责人)不接
- 本地全量验证:抽样 10 条与上游 100% 一致;3001 API 验收通过
2026-09-12 11:14:04 +08:00
WuYongJie
aaa9c74eec
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-12 11:13:15 +08:00
WuYongJie
dd693dfbd5
运营部门负责人/运营负责人接入聚水潭销售宽表cater/ider
...
- dws repository 新增 listLatestOpsOwners:rpt.dws_sn_sales_full_info_di 按 skuoid 取 stat_date 最新一条的 cater/ider,全条码范围
- enrichment 链路新增 ops owners patch:来源码 DWS_SALES_OPS 可追溯;字段级有值才覆盖(dws 无值保留档案原值)
- opsDirector(运营总负责人)不接
- 本地全量验证:抽样 10 条与上游 100% 一致;3001 API 验收通过
2026-09-12 11:12:50 +08:00
WuYongJie
1b3f210e0f
feat(barcode-print): add size template and keep package codes on one line
2026-09-11 17:13:52 +08:00
WuYongJie
04b24f7972
feat(barcode-print): add size template and keep package codes on one line
2026-09-11 17:12:52 +08:00
WuYongJie
222f3e6a97
feat(barcode-print): add size template and keep package codes on one line
2026-09-11 17:08:02 +08:00
WuYongJie
02ad38908e
fix(installation-demo): recapture by current viewpoint, align material counts, add finished-frame ending
...
- 编号重截取按当前视角取景(engine 截图支持 viewpoint:current,默认行为不变),成功/失败给可见消息
- 动作分解物料数量改为该动作实际命中节点数(fixed/action 帧同口径),徽标与编号标注共用管理编号覆盖值
- 动作分解末尾固定追加成品展示收尾帧:复用成品展示截图,不参与截取与计数,支持调整画面与文字标注
- 编号标注对账按编号兜底认领并清理超量残留,修复部件重绑后改数量导致标注叠加翻倍
- 成品线稿统一 detail 风格,与动作图线宽一致
2026-09-11 14:37:05 +08:00
WuYongJie
6f49206964
fix(installation-demo): recapture by current viewpoint, align material counts, add finished-frame ending
...
- 编号重截取按当前视角取景(engine 截图支持 viewpoint:current,默认行为不变),成功/失败给可见消息
- 动作分解物料数量改为该动作实际命中节点数(fixed/action 帧同口径),徽标与编号标注共用管理编号覆盖值
- 动作分解末尾固定追加成品展示收尾帧:复用成品展示截图,不参与截取与计数,支持调整画面与文字标注
- 编号标注对账按编号兜底认领并清理超量残留,修复部件重绑后改数量导致标注叠加翻倍
- 成品线稿统一 detail 风格,与动作图线宽一致
2026-09-11 14:34:04 +08:00
WuYongJie
0c045ff906
chore(product-archive): default daily sales schedule to Beijing 08:00
...
- local scheduled task installer: compute next 08:00 Asia/Shanghai start boundary
- production systemd timer installer: default OnCalendar 08:00 Asia/Shanghai
- aligns installers with already-active 08:00 runtimes on both ends
2026-09-11 09:46:58 +08:00
WuYongJie
0c7d147129
chore(product-archive): default daily sales schedule to Beijing 08:00
...
- local scheduled task installer: compute next 08:00 Asia/Shanghai start boundary
- production systemd timer installer: default OnCalendar 08:00 Asia/Shanghai
- aligns installers with already-active 08:00 runtimes on both ends
2026-09-11 09:44:56 +08:00
WuYongJie
e075a81eb7
DF开头SKU档案图片接入聚水潭skumap三表平台图
...
- 新增 jst-skumap-pic.repository:rpt.jst_skumap/_pdd/_qmcust_add 三表 UNION,按 sku_id 取 modified 最新非空 pic,仅 DF 开头
- enrichment 同步链路:DF 条码 image 字段改用 skumap 平台图(无图清空),来源记录 JST_SKUMAP_PIC 可追溯;其他 SKU 图片逻辑不变
- 变更日志字段清单加入 image(图片)
- source-image 图片代理白名单放行 JST_SKUMAP_PIC,修复 DF 档案平台图 404 灰框
- 本地全量回填验证:331 批扫描 66033 failed=0;DF 有图 2281→24700;非 DF 14974 不变
2026-09-11 09:14:48 +08:00
WuYongJie
9e5a0d20b5
DF开头SKU档案图片接入聚水潭skumap三表平台图
...
- 新增 jst-skumap-pic.repository:rpt.jst_skumap/_pdd/_qmcust_add 三表 UNION,按 sku_id 取 modified 最新非空 pic,仅 DF 开头
- enrichment 同步链路:DF 条码 image 字段改用 skumap 平台图(无图清空),来源记录 JST_SKUMAP_PIC 可追溯;其他 SKU 图片逻辑不变
- 变更日志字段清单加入 image(图片)
- source-image 图片代理白名单放行 JST_SKUMAP_PIC,修复 DF 档案平台图 404 灰框
- 本地全量回填验证:331 批扫描 66033 failed=0;DF 有图 2281→24700;非 DF 14974 不变
2026-09-11 09:12:05 +08:00
WuYongJie
56560cd6d2
fix(deploy): verify complete releases before switching production
2026-09-10 18:29:17 +08:00
WuYongJie
e2f211c7ac
fix(deploy): verify complete releases before switching production
2026-09-10 18:29:13 +08:00
WuYongJie
7f9adebf88
feat(installation-demo): add manual catalog, permanent shares and hinge binding
2026-09-10 18:12:46 +08:00
WuYongJie
46a732d892
feat(installation-demo): add manual catalog, permanent shares and hinge binding
2026-09-10 17:59:58 +08:00
WuYongJie
2cfd57d678
feat(product-archive): add daily monthly yearly sales and daily sync
2026-09-10 13:16:26 +08:00
WuYongJie
aa1ca0afcf
feat(product-archive): add daily monthly yearly sales and daily sync
2026-09-10 13:15:23 +08:00
WuYongJie
b66e6b1f11
Merge remote-tracking branch 'origin/main' into HEAD
2026-09-10 12:59:21 +08:00
WuYongJie
0875c87058
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-10 12:59:20 +08:00
WuYongJie
a20b6cb79f
fix(product-archive): add missing POST handlers for large filter payloads
2026-09-10 12:59:03 +08:00
WuYongJie
b9c85357e6
fix(intake): abandon permission checks creator and real designer keys
...
废弃权限白名单原读取 payload 中不存在的 appearanceDesigner 等键,导致外观/结构设计师无法废弃产品。改为按 创建人 + 外观设计师(designer 列/payload.designer) + 结构设计师(openingReference.structureDesigner,兼容顶层旧键) 判定,不再放行 SPU 负责人与采购负责人;管理员口径不变。
2026-09-10 12:32:19 +08:00
WuYongJie
5c7ebbe914
fix(intake): abandon permission checks creator and real designer keys
...
废弃权限白名单原读取 payload 中不存在的 appearanceDesigner 等键,导致外观/结构设计师无法废弃产品。改为按 创建人 + 外观设计师(designer 列/payload.designer) + 结构设计师(openingReference.structureDesigner,兼容顶层旧键) 判定,不再放行 SPU 负责人与采购负责人;管理员口径不变。
2026-09-10 12:32:06 +08:00
WuYongJie
2947ddebcf
Merge remote-tracking branch 'origin/main' into HEAD
2026-09-10 11:53:26 +08:00
WuYongJie
69d19076bd
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-10 11:53:07 +08:00
WuYongJie
17d2e1d7bb
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-10 11:52:31 +08:00
WuYongJie
351b7d7d2a
feat(product-archive): take dropship df sku cost from sales goods_cost
2026-09-10 11:52:14 +08:00
WuYongJie
b8e80204a0
fix(barcode-print): raise Gujia certificate fields
2026-09-10 08:44:31 +08:00
WuYongJie
1042f35090
fix(barcode-print): raise Gujia certificate fields
2026-09-10 08:44:28 +08:00
WuYongJie
eedea9f791
fix(barcode-print): raise Gujia certificate fields
2026-09-10 08:43:13 +08:00
WuYongJie
0271da1b69
fix(barcode-print): recalibrate Gujia card and disable 2026 template
2026-09-09 17:56:14 +08:00
WuYongJie
b647cc2943
fix(barcode-print): recalibrate Gujia card and disable 2026 template
2026-09-09 17:55:27 +08:00
WuYongJie
3360ccb801
fix(barcode-print): recalibrate Gujia card and disable 2026 template
2026-09-09 17:54:04 +08:00
WuYongJie
1c0beffcb6
feat(barcode-print): add calibrated Gujia certificate template
2026-09-09 15:47:45 +08:00
WuYongJie
254cd92c5b
fix(product-archive): stream material library images through a same-origin endpoint
...
the material library api hands out signed preview urls whose objects 404 on its cdn, so archive rows kept rendering empty placeholders; the batch endpoint now returns same-origin streaming urls (material-image?file=1) that resolve server-side, try the reachable s3 direct link first with the original signed url as fallback, and stream the bytes to the browser; the resolved image object is copied before url mapping so the service in-memory cache is no longer poisoned across requests.
2026-09-09 15:45:58 +08:00
WuYongJie
3976f96fcb
fix(product-archive): stream material library images through a same-origin endpoint
...
the material library api hands out signed preview urls whose objects 404 on its cdn, so archive rows kept rendering empty placeholders; the batch endpoint now returns same-origin streaming urls (material-image?file=1) that resolve server-side, try the reachable s3 direct link first with the original signed url as fallback, and stream the bytes to the browser; the resolved image object is copied before url mapping so the service in-memory cache is no longer poisoned across requests.
2026-09-09 15:45:18 +08:00
WuYongJie
6161bb3e59
feat(barcode-print): add calibrated Gujia certificate template
2026-09-09 15:43:08 +08:00
WuYongJie
3cd064a467
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-09 14:57:09 +08:00
WuYongJie
db05c1ca0a
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-09 14:42:30 +08:00
WuYongJie
1bb87a454d
feat(product-archive): persist jianshang stock on main table and harden filter select-all
2026-09-09 14:42:17 +08:00
WuYongJie
cc1e15582e
fix(product-archive): fall back signed qnycdn material image urls to reachable s3 links
...
the material library api now returns signed preview urls on qnycdn.jiansun.vip/prod whose objects 404 on the cdn, so every resolved archive material image failed to render; rewrite those urls to the same path on s3.jiansun.vip/gongxiangpan (verified reachable) and drop the signature at every exit of the material image service (barcode lookup, sku zip index, white background fallback, resolved cache reads) so matched sku/barcode images display again.
2026-09-09 13:35:55 +08:00
WuYongJie
560579b7f9
fix(product-archive): fall back signed qnycdn material image urls to reachable s3 links
...
the material library api now returns signed preview urls on qnycdn.jiansun.vip/prod whose objects 404 on the cdn, so every resolved archive material image failed to render; rewrite those urls to the same path on s3.jiansun.vip/gongxiangpan (verified reachable) and drop the signature at every exit of the material image service (barcode lookup, sku zip index, white background fallback, resolved cache reads) so matched sku/barcode images display again.
2026-09-09 13:35:35 +08:00
WuYongJie
f0cc716dd0
fix(intake): map reorganized planning department to PLANNING role
...
钉钉组织调整后商品企划部更名为企划部并挂到公司根节点。部门到业务角色推断、非集成产品权限、节点权限主体与商品企划候选人筛选统一识别 企划部 及其下级在职人员;保留旧 品牌中心>商品企划部 口径兼容存量数据;在职/外部过滤逻辑不变。
2026-09-09 12:12:01 +08:00
WuYongJie
66746bdc7e
fix(intake): map reorganized planning department to PLANNING role
...
钉钉组织调整后商品企划部更名为企划部并挂到公司根节点。部门到业务角色推断、非集成产品权限、节点权限主体与商品企划候选人筛选统一识别 企划部 及其下级在职人员;保留旧 品牌中心>商品企划部 口径兼容存量数据;在职/外部过滤逻辑不变。
2026-09-09 12:11:32 +08:00
WuYongJie
d563513875
feat(product-development-todos): drop early-stage reminders and read structured factory rows
2026-09-09 11:45:40 +08:00
WuYongJie
1a0d3a7429
feat(product-development-todos): drop early-stage reminders and read structured factory rows
2026-09-09 11:45:01 +08:00
WuYongJie
c20bf5314a
feat(product-development-todos): drop early-stage reminders and read structured factory rows
2026-09-09 11:43:21 +08:00
f615161d8c
Merge pull request 'fix(store-accounts): 按明文存储规则修正密码状态' ( #21 ) from codex/xuxiake-mainline into main
2026-09-09 11:05:13 +08:00
WuYongJie
ed339ceb3f
merge: sync latest xuxiake before password status release
...
# Conflicts:
# furniture-3d-system/docs/integrations/finance-store-account-password-reveal.md
2026-09-09 11:02:18 +08:00
WuYongJie
149cf46b63
fix(store-accounts): align password status with plaintext storage
2026-09-09 11:01:42 +08:00
17daaee224
保持当前页分块读取限流额度 ( #20 )
2026-09-08 18:13:20 +08:00
2224112c29
保持当前页分块读取限流额度 ( #19 )
2026-09-08 18:11:34 +08:00
4fd134f636
发布财务当前页批量读取店铺密码 ( #16 )
...
Co-authored-by: xuxiake <2644600472@qq.com>
Co-committed-by: xuxiake <2644600472@qq.com>
2026-09-08 17:21:32 +08:00
caa960d70a
支持财务当前页批量读取店铺密码 ( #18 )
2026-09-08 17:19:01 +08:00
WuYongJie
9965c93c8d
feat(store-accounts): store password and bank account as plaintext
2026-09-08 15:07:35 +08:00
WuYongJie
811926e67b
feat(store-accounts): store password and bank account as plaintext
2026-09-08 15:06:43 +08:00
WuYongJie
c9d2f37ead
feat(product-archive): add select-all to header filter option lists
2026-09-08 14:44:26 +08:00
WuYongJie
4deea6518a
feat(product-archive): add select-all to header filter option lists
2026-09-08 14:43:37 +08:00
WuYongJie
0b4311a882
feat(store-accounts): show password and bank account in plaintext in list
2026-09-08 14:07:06 +08:00
WuYongJie
ecfd596ad0
feat(store-accounts): show password and bank account in plaintext in list
2026-09-08 14:05:44 +08:00
WuYongJie
df9c0ad67f
feat(intake): add product abandon action to the product list
...
the product list rows gain an abandon action next to edit/copy/delete for admins and product owners (operations brand / spu / appearance / structure / purchase / merchandiser / planner / space owners matched by name); abandoning sets projectStatus to rejected which makes every workspace read-only and the existing daily todo push already skips rejected products, so abandoned products drop out of daily pushes automatically; the server enforces the same permission via a new POST abandon endpoint. Abandoned rows keep the restore action to come back.
2026-09-08 12:27:26 +08:00
WuYongJie
d2f71b3723
feat(intake): add product abandon action to the product list
...
the product list rows gain an abandon action next to edit/copy/delete for admins and product owners (operations brand / spu / appearance / structure / purchase / merchandiser / planner / space owners matched by name); abandoning sets projectStatus to rejected which makes every workspace read-only and the existing daily todo push already skips rejected products, so abandoned products drop out of daily pushes automatically; the server enforces the same permission via a new POST abandon endpoint. Abandoned rows keep the restore action to come back.
2026-09-08 12:26:44 +08:00
WuYongJie
5754172787
fix(product-development-todo): route missing purchaser reminders and use plain text
2026-09-08 10:31:22 +08:00
WuYongJie
ee8172c724
fix(product-development-todo): route missing purchaser reminders and use plain text
2026-09-08 10:21:19 +08:00
WuYongJie
7139f40c8d
feat(oa-board): make workflow link cells clickable to open product detail
...
workflow link cells on the oa board detail table now render as anchors when the value is an http(s) url, opening the linked product detail in a new tab with platform link styling and hover underline; empty or non-url text still renders the dash placeholder.
2026-09-08 09:02:51 +08:00
WuYongJie
54bf9107fb
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-08 09:01:57 +08:00
WuYongJie
41e962da37
feat(oa-board): make workflow link cells clickable to open product detail
...
workflow link cells on the oa board detail table now render as anchors when the value is an http(s) url, opening the linked product detail in a new tab with platform link styling and hover underline; empty or non-url text still renders the dash placeholder.
2026-09-08 09:01:37 +08:00
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
WuYongJie
30ab1b4b35
merge: 发布 BOM 商品抠图与图片分类
2026-09-03 17:05:49 +08:00
WuYongJie
b5d05f2779
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0
2026-09-03 17:04:34 +08:00
WuYongJie
4ce03262c0
feat(bom-costing): 接入商品抠图并完善图片浏览
2026-09-03 17:04:05 +08:00
WuYongJie
4014f53b9e
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into HEAD
2026-09-03 15:52:13 +08:00
WuYongJie
3e92e7242a
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
2026-09-03 15:51:17 +08:00
WuYongJie
c10e787fcf
fix(users): fall back permission subjects to business roles when department misses dedicated lines
...
Department dedicated lines stay authoritative; when no department path matches any line, resolve subjects from account business roles (OPERATIONS->operation, PURCHASING->purchase, STRATEGY->brandCenter, etc). Personal overrides still apply last. Fixes operations and four purchasing accounts being downgraded to plain viewers.
2026-09-03 15:51:09 +08:00
WuYongJie
17a0491a4a
merge(main): 发布 BOM 九折预估与极简工作台
...
# Conflicts:
# furniture-3d-system/prisma/schema.prisma
# furniture-3d-system/src/app/intake/sample-progress/components/SampleProgressTableRow.tsx
# furniture-3d-system/src/app/supply-chain/database/store-account-management/StoreAccountManagementView.tsx
# furniture-3d-system/src/lib/store-account-management.ts
# furniture-3d-system/src/server/integrations/notification-center/client.test.ts
# furniture-3d-system/src/server/integrations/notification-center/client.ts
# furniture-3d-system/src/server/integrations/notification-center/types.ts
# furniture-3d-system/src/server/repositories/__tests__/store-account-management.repository.test.ts
# furniture-3d-system/src/server/repositories/store-account-management.repository.ts
# furniture-3d-system/src/server/services/__tests__/notification-delivery.service.test.ts
# furniture-3d-system/src/server/services/__tests__/store-account-notification.service.test.ts
# furniture-3d-system/src/server/services/notification-delivery.service.ts
# furniture-3d-system/src/server/services/sample-progress.service.test.ts
# furniture-3d-system/src/server/services/store-account-notification.service.ts
2026-09-03 15:44:35 +08:00
WuYongJie
1e1f667530
merge: 发布 BOM 九折预估与极简工作台
2026-09-03 15:41:55 +08:00
WuYongJie
33a13a8abb
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/wuyongjie-bom-estimate-agent-phase0
2026-09-03 15:38:14 +08:00
WuYongJie
4ceedf50ee
feat(bom-costing): 固定九折预估并精简工作台
2026-09-03 15:37:34 +08:00
WuYongJie
41a6bbff48
chore: enforce operation log retention policy
2026-09-03 15:36:36 +08:00
WuYongJie
856522552f
chore: enforce operation log retention policy
2026-09-03 15:33:22 +08:00
WuYongJie
c30aed3987
feat(supply-chain): enforce import required fields and move sample request column for supplier recommended products
...
- import rejects rows missing required fields and reports the row number with
missing labels; drop-shipping fee is required only when shipping mode includes
代发; date is system-filled on import and not required
- move 申请寄样 after 代发运费 across export, import template, table columns
and the editor drawer
- gate the download-template button behind edit permission (the template belongs
to the purchaser import workflow)
- add selection endpoint tests
2026-09-03 15:08:51 +08:00
WuYongJie
205db8234c
feat(supply-chain): enforce import required fields and move sample request column for supplier recommended products
...
- import rejects rows missing required fields and reports the row number with
missing labels; drop-shipping fee is required only when shipping mode includes
代发; date is system-filled on import and not required
- move 申请寄样 after 代发运费 across export, import template, table columns
and the editor drawer
- gate the download-template button behind edit permission (the template belongs
to the purchaser import workflow)
- add selection endpoint tests
2026-09-03 15:07:09 +08:00
WuYongJie
1edbc110d4
feat(users): show last login status in account management list
...
账号管理表格在账号状态与操作之间新增最后登录列:从未登录灰色、今天 HH:mm、昨天、N 天前、日期,超 30 天橙色标记闲置账号;组织树接口对管理员已返回 lastLoginAt,本次仅前端改动。
2026-09-03 14:21:23 +08:00
WuYongJie
455025f546
feat(users): show last login status in account management list
...
账号管理表格在账号状态与操作之间新增最后登录列:从未登录灰色、今天 HH:mm、昨天、N 天前、日期,超 30 天橙色标记闲置账号;组织树接口对管理员已返回 lastLoginAt,本次仅前端改动。
2026-09-03 14:21:06 +08:00
WuYongJie
58d5e0ffdd
feat: add operation log scrolling and pagination
2026-09-03 13:53:21 +08:00
WuYongJie
583e3240ce
feat: add operation log scrolling and pagination
2026-09-03 13:44:06 +08:00
WuYongJie
88ddd67736
style(finished-product-progress): soften contract group separator to 1px light gray
2026-09-03 13:32:09 +08:00
WuYongJie
259f4b8e7e
style(finished-product-progress): soften contract group separator to 1px light gray
2026-09-03 13:29:48 +08:00
WuYongJie
bb561d2482
feat(mobile): streamline mobile navigation and compact intake workspace UI
2026-09-03 13:20:42 +08:00
WuYongJie
8f5fde8d4e
feat(mobile): streamline mobile navigation and compact intake workspace UI
2026-09-03 13:18:39 +08:00
WuYongJie
925868fb65
feat(intake): allow designers to delete their own product records
...
product intake list delete button now also resolves for designers (DESIGN business role or design department paths), restricted to records they created; admins keep full delete scope; server DELETE route and client row button share the same record-level predicate; delete stays soft with operation logs.
2026-09-03 13:06:01 +08:00
WuYongJie
3556b48c4a
feat(intake): allow designers to delete their own product records
...
product intake list delete button now also resolves for designers (DESIGN business role or design department paths), restricted to records they created; admins keep full delete scope; server DELETE route and client row button share the same record-level predicate; delete stays soft with operation logs.
2026-09-03 13:03:49 +08:00
WuYongJie
74ac36f34d
feat(finished-product-progress): add filtered export with embedded images
...
Add an export action that collects all rows matching the current filters (or everything when unfiltered), fetches each row's image from object storage, and builds an ExcelJS workbook with the images embedded in the image column. The workbook headers match the import template so the file round-trips through the existing import flow. Export progress, image fetch failures and completion counts are surfaced in a status panel.
2026-09-03 12:07:58 +08:00
WuYongJie
b129acdc48
feat(finished-product-progress): add filtered export with embedded images
...
Add an export action that collects all rows matching the current filters (or everything when unfiltered), fetches each row's image from object storage, and builds an ExcelJS workbook with the images embedded in the image column. The workbook headers match the import template so the file round-trips through the existing import flow. Export progress, image fetch failures and completion counts are surfaced in a status panel.
2026-09-03 12:06:29 +08:00
WuYongJie
ee9a7cb88e
feat(supply-chain): add operations selection pools and selected-pool export to supplier recommended products
...
- selection pools: all/unselected/selected switch on the same page, batch select with
operator search-confirm (status, operator and time recorded with change logs), batch return
- selected rows stamped with a red 已选款 seal on card/thumbnail/detail images and locked
in the master pool to avoid accidental re-selection
- operations-role users (or admins) can select/return; service re-validates the operator
- selected-pool export: export endpoint follows all active filters, embeds product images
into the image column (webp converted via sharp to 320px png, fallback to url text),
includes selection status/operator/time columns, gated by download permission
2026-09-03 11:46:34 +08:00
WuYongJie
970cd3f234
feat(supply-chain): add operations selection pools and selected-pool export to supplier recommended products
...
- selection pools: all/unselected/selected switch on the same page, batch select with
operator search-confirm (status, operator and time recorded with change logs), batch return
- selected rows stamped with a red 已选款 seal on card/thumbnail/detail images and locked
in the master pool to avoid accidental re-selection
- operations-role users (or admins) can select/return; service re-validates the operator
- selected-pool export: export endpoint follows all active filters, embeds product images
into the image column (webp converted via sharp to 320px png, fallback to url text),
includes selection status/operator/time columns, gated by download permission
2026-09-03 11:44:41 +08:00
WuYongJie
7f15c5b756
fix finished product progress order dates
2026-09-03 10:01:26 +08:00
WuYongJie
25f5796dd0
fix finished product progress order dates
2026-09-03 09:54:33 +08:00
WuYongJie
ce34f56c39
feat(users): merchandiser inherits purchase permission subject
...
采购-跟单(merchandiser,含跟单组与雁兰/槐米特例)解析权限主体时追加采购负责人主体:给采购负责人开通的节点权限与供应链权限对跟单自动生效,无需重复开通;核价与质检主体保持独立。
2026-09-02 16:21:01 +08:00
WuYongJie
7ed6c061c4
feat(users): merchandiser inherits purchase permission subject
...
采购-跟单(merchandiser,含跟单组与雁兰/槐米特例)解析权限主体时追加采购负责人主体:给采购负责人开通的节点权限与供应链权限对跟单自动生效,无需重复开通;核价与质检主体保持独立。
2026-09-02 16:19:57 +08:00
WuYongJie
15f3331d58
feat(supply-chain): support clipboard paste image upload in supplier recommended product editor
...
- paste a screenshot anywhere in the drawer to upload and fill the storage url
- add file picker button, uploading state, error message and preview thumbnail
2026-09-02 15:51:02 +08:00
WuYongJie
cc0f5e65f4
feat(supply-chain): add category, card view and unified controls to supplier recommended products
...
- add category field with migration, import template column and multi-select filter (IN query)
- card view aligned with product selection dashboard style; table/card toggle persisted per browser
- purchaser/shipping-mode filters upgraded to searchable multi-select
- table actions as icon-only buttons with a view entry; date filter opens the picker on click
- column settings: reset to defaults and name search; page styles moved to a plain css file
2026-09-02 15:51:02 +08:00
WuYongJie
607b030034
feat(supply-chain): support clipboard paste image upload in supplier recommended product editor
...
- paste a screenshot anywhere in the drawer to upload and fill the storage url
- add file picker button, uploading state, error message and preview thumbnail
2026-09-02 15:44:14 +08:00
WuYongJie
021d7eab2b
feat(supply-chain): add category, card view and unified controls to supplier recommended products
...
- add category field with migration, import template column and multi-select filter (IN query)
- card view aligned with product selection dashboard style; table/card toggle persisted per browser
- purchaser/shipping-mode filters upgraded to searchable multi-select
- table actions as icon-only buttons with a view entry; date filter opens the picker on click
- column settings: reset to defaults and name search; page styles moved to a plain css file
2026-09-02 15:44:13 +08:00
WuYongJie
adfecb4c67
feat(intake): add sample measurement and product pricing workbook import/export
...
sample measurement: export template with image/barcode/L-W-H-weight columns (all batches) and import backfill by barcode into draft rows with per-row skip reasons; product pricing: export template with image/barcode/cost-price and import backfill cost price only; both reuse the product limit workbook pattern, keep edits in draft until the existing confirm/push flow, no API or schema changes.
2026-09-02 15:19:48 +08:00
WuYongJie
5aedfea85c
feat(intake): add sample measurement and product pricing workbook import/export
...
sample measurement: export template with image/barcode/L-W-H-weight columns (all batches) and import backfill by barcode into draft rows with per-row skip reasons; product pricing: export template with image/barcode/cost-price and import backfill cost price only; both reuse the product limit workbook pattern, keep edits in draft until the existing confirm/push flow, no API or schema changes.
2026-09-02 15:19:04 +08:00
WuYongJie
58966bba20
feat(finished-product-progress): align column settings drawer with unified standard
...
Replace the two-column popover with a right-docked drawer: single-column list with drag handles, checkboxes and lock markers; add column-name search, hide-all and reset-default buttons, and persist unlocked column order locally. Locked columns keep their default positions (trailing sticky actions column).
2026-09-02 14:43:01 +08:00
WuYongJie
7740433ae7
feat(finished-product-progress): align column settings drawer with unified standard
...
Replace the two-column popover with a right-docked drawer: single-column list with drag handles, checkboxes and lock markers; add column-name search, hide-all and reset-default buttons, and persist unlocked column order locally. Locked columns keep their default positions (trailing sticky actions column).
2026-09-02 14:41:19 +08:00
WuYongJie
5c43428a47
feat: route store account notices to DingTalk group
2026-09-02 13:57:51 +08:00
WuYongJie
7f078abb7b
feat: route store account notices to DingTalk group
2026-09-02 13:55:00 +08:00
WuYongJie
940e94882e
fix(finished-product-progress): allow negative in-transit quantity for over-delivery
...
Remove the Math.max(0,...) clamps in the in-transit calculation and delivery-record recompute, and switch the input schema inTransitQuantity validator to a dedicated negative-tolerant one. Ordered and delivered quantities stay non-negative.
2026-09-02 12:22:17 +08:00
WuYongJie
7126984caa
feat(finished-product-progress): support clipboard paste image upload in editor drawer
2026-09-02 12:22:17 +08:00
WuYongJie
43b867ef55
feat(finished-product-progress): add contract group separators and alternating band backgrounds
2026-09-02 12:22:17 +08:00
WuYongJie
9c459e7195
fix(finished-product-progress): allow negative in-transit quantity for over-delivery
...
Remove the Math.max(0,...) clamps in the in-transit calculation and delivery-record recompute, and switch the input schema inTransitQuantity validator to a dedicated negative-tolerant one. Ordered and delivered quantities stay non-negative.
2026-09-02 12:19:07 +08:00
WuYongJie
e4df1b2576
feat(finished-product-progress): support clipboard paste image upload in editor drawer
2026-09-02 12:18:26 +08:00
WuYongJie
b2fc4dde6d
feat(finished-product-progress): add contract group separators and alternating band backgrounds
2026-09-02 12:18:11 +08:00
WuYongJie
138dc0d644
feat(supply-chain): add finished product select all
2026-09-02 09:23:04 +08:00
WuYongJie
f91554c7dc
feat(supply-chain): add finished product select all
2026-09-02 09:17:39 +08:00
WuYongJie
6ec0258001
Merge branch 'release-finished-product-progress'
2026-09-01 18:32:15 +08:00
WuYongJie
9c66706b67
release finished product progress import and management
2026-09-01 18:32:06 +08:00
WuYongJie
f89bc61af4
fix finished product progress import and management
2026-09-01 18:27:04 +08:00
WuYongJie
3c69088433
fix: map store account subject company header
2026-09-01 17:53:56 +08:00
WuYongJie
e60b3b1e60
fix: map store account subject company header
2026-09-01 17:47:45 +08:00
WuYongJie
d06e45b0c8
fix(supply-chain): support supplier recommendation import images
2026-09-01 17:44:32 +08:00
WuYongJie
03eca07f9f
fix(supply-chain): support supplier recommendation import images
2026-09-01 17:38:57 +08:00
WuYongJie
242ed201ba
feat(store-accounts): add profit center options
2026-09-01 16:04:51 +08:00
WuYongJie
6b8661dcfd
feat(store-accounts): add profit center options
2026-09-01 16:02:49 +08:00
WuYongJie
b3f85d5f5a
fix(work-record): persist monthly archive rows with stable ids
2026-09-01 14:33:15 +08:00
WuYongJie
dc6c45848a
fix(work-record): persist monthly archive rows with stable ids
2026-09-01 14:31:58 +08:00
WuYongJie
eead468d4d
fix(users): use standalone permission navigation
2026-09-01 13:37:19 +08:00
WuYongJie
fb51614a86
fix(users): use standalone permission navigation
2026-09-01 13:35:49 +08:00
WuYongJie
e7996abc6a
feat(supply-chain): improve supplier recommended product management
2026-09-01 13:08:04 +08:00
WuYongJie
474f245ba7
feat(supply-chain): add supplier recommended products
2026-09-01 13:07:55 +08:00
WuYongJie
03f308261e
feat(supply-chain): improve supplier recommended product management
2026-09-01 13:01:55 +08:00
WuYongJie
934b073eea
fix(supply-chain): unify list pagination spacing
2026-09-01 12:37:41 +08:00
WuYongJie
9a3c5f9157
fix(supply-chain): unify list pagination spacing
2026-09-01 12:35:29 +08:00
WuYongJie
6e140e1445
fix(work-record): complete monthly archive release
2026-09-01 12:24:38 +08:00
WuYongJie
0b12ec28b9
feat(work-record): add monthly archive editing permissions
2026-09-01 12:08:25 +08:00
WuYongJie
2b5f49fc51
feat(work-record): add monthly archive editing permissions
2026-09-01 11:59:22 +08:00
WuYongJie
7b7e7d7e28
fix(oa-board): prevent production unified table redirect
2026-09-01 11:12:35 +08:00
WuYongJie
b01579ca99
fix(oa-board): prevent production unified table redirect
2026-09-01 11:10:59 +08:00
WuYongJie
d5f2b68d88
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
...
# Conflicts:
# furniture-3d-system/agents/script-monitor/README.md
# furniture-3d-system/agents/script-monitor/agent.mjs
# furniture-3d-system/agents/script-monitor/config.example.json
# furniture-3d-system/src/app/api/supply-chain/store-account-management/[id]/bank-account/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/import/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/template/route.ts
# furniture-3d-system/src/app/intake/sample-progress/components/SampleProgressTableRow.tsx
# furniture-3d-system/src/app/supply-chain/database/store-account-management/StoreAccountManagementView.tsx
# furniture-3d-system/src/app/supply-chain/script-monitor/ScriptMonitorView.test.tsx
# furniture-3d-system/src/app/supply-chain/script-monitor/ScriptMonitorView.tsx
# furniture-3d-system/src/app/supply-chain/script-monitor/page.tsx
# furniture-3d-system/src/lib/store-account-management.ts
# furniture-3d-system/src/lib/supply-chain-script-monitor.ts
# furniture-3d-system/src/server/dto/script-monitor.dto.ts
# furniture-3d-system/src/server/integrations/notification-center/client.test.ts
# furniture-3d-system/src/server/integrations/notification-center/client.ts
# furniture-3d-system/src/server/integrations/notification-center/types.ts
# furniture-3d-system/src/server/repositories/__tests__/store-account-management.repository.test.ts
# furniture-3d-system/src/server/repositories/script-monitor.repository.ts
# furniture-3d-system/src/server/repositories/store-account-management.repository.ts
# furniture-3d-system/src/server/services/__tests__/notification-delivery.service.test.ts
# furniture-3d-system/src/server/services/__tests__/store-account-management-export.service.test.ts
# furniture-3d-system/src/server/services/__tests__/store-account-notification.service.test.ts
# furniture-3d-system/src/server/services/notification-delivery.service.ts
# furniture-3d-system/src/server/services/sample-progress.service.test.ts
# furniture-3d-system/src/server/services/script-monitor.service.test.ts
# furniture-3d-system/src/server/services/script-monitor.service.ts
# furniture-3d-system/src/server/services/store-account-management-export.service.ts
# furniture-3d-system/src/server/services/store-account-notification.service.ts
2026-09-01 11:09:26 +08:00
WuYongJie
a2afbc40bb
chore: reconcile worktree snapshot before origin merge (local branch only)
2026-09-01 11:07:53 +08:00
WuYongJie
facc1f0955
feat(supply-chain): restrict store account password visibility
2026-09-01 10:36:27 +08:00
WuYongJie
e38f8e813b
feat(supply-chain): restrict store account password visibility
2026-09-01 10:33:49 +08:00
WuYongJie
70e268034e
fix(intake): keep default workspace tab available
...
Cherry-picked as an isolated mainline release from 22227e7cadf00b45056c429f96de489af7c6767c.
2026-09-01 10:11:07 +08:00
WuYongJie
508e0a40d5
fix(intake): keep default workspace tab available
2026-09-01 10:08:05 +08:00
WuYongJie
c0562fdddc
fix(intake): keep default workspace tab available
2026-09-01 10:02:57 +08:00
WuYongJie
22227e7cad
fix(auth): preserve custom permission role in API context
2026-08-31 18:07:46 +08:00
WuYongJie
7089ada0a0
fix(auth): preserve custom permission role in API context
2026-08-31 18:05:56 +08:00
WuYongJie
9bb36756d1
fix(auth): preserve custom permission role in session
2026-08-31 17:43:30 +08:00
jingchuan
f2a554a330
fix(oa-board): mark XP2026081900000414 terminated
2026-08-31 17:39:04 +08:00
WuYongJie
0aaacb4bff
fix(auth): preserve custom permission role in session
2026-08-31 17:38:38 +08:00
WuYongJie
bf7b71ab00
fix(auth): preserve custom permission role in session
2026-08-31 17:36:25 +08:00
WuYongJie
4ecad009b9
cherry-pick: publish approved supply chain updates
2026-08-31 17:17:23 +08:00
WuYongJie
e43bf78c73
feat: publish approved supply chain updates
2026-08-31 17:15:56 +08:00
WuYongJie
fecfd9053e
fix: 完善店铺账号通知与筛选体验
2026-08-31 16:34:36 +08:00
WuYongJie
7c6be91a91
fix: 完善店铺账号通知与筛选体验
2026-08-31 16:30:58 +08:00
WuYongJie
7d246e1d5b
fix(product-archive): include full export client hook
...
Add the client hook omitted from the isolated main integration.
2026-08-31 16:02:37 +08:00
WuYongJie
b974d83986
feat(product-archive): add full export and column filters
...
Applied only the product archive feature patch from 232eaa87 onto origin/main.
2026-08-31 15:52:20 +08:00
WuYongJie
232eaa8768
feat(product-archive): add full export and column filters
...
Cherry-picked feature patch from c2289ca0 onto latest codex/xuxiake-mainline without including unrelated working-tree changes.
2026-08-31 15:49:13 +08:00
WuYongJie
c2289ca074
feat(product-archive): add full export and column filters
2026-08-31 15:42:07 +08:00
WuYongJie
68916e2791
feat: store account management updates
2026-08-31 13:53:44 +08:00
WuYongJie
72262acfa0
feat: complete store account management updates
2026-08-31 13:52:18 +08:00
WuYongJie
4950135cfc
fix: normalize notification line breaks
2026-08-31 12:19:26 +08:00
WuYongJie
d40b6ad197
fix: normalize notification line breaks
2026-08-31 12:15:44 +08:00
WuYongJie
315ede4f3f
fix: normalize notification line breaks
2026-08-31 12:13:36 +08:00
WuYongJie
f3b0124d4c
feat(intake): add supplier filter and fixed development toolbar
2026-08-31 11:19:57 +08:00
WuYongJie
fb53234811
feat(intake): add supplier filter and fixed development toolbar
2026-08-31 11:17:30 +08:00
WuYongJie
9e51faa192
feat: notify on store account creation
2026-08-31 10:39:08 +08:00
WuYongJie
916930a714
feat: notify on store account creation
2026-08-31 10:38:33 +08:00
WuYongJie
7c17626339
feat: notify on store account creation
2026-08-31 10:27:20 +08:00
WuYongJie
368107c17b
release: publish approved sample and finished progress updates
2026-08-31 10:24:00 +08:00
WuYongJie
865be95b6e
feat: submit approved sample and finished progress updates
2026-08-31 10:21:29 +08:00
WuYongJie
3efe408a27
merge: release product development base SPU grouping
2026-08-29 16:52:10 +08:00
WuYongJie
b1505b4d63
feat(intake): group product development list by base SPU
2026-08-29 16:14:03 +08:00
WuYongJie
e1b7683bfd
fix(supply-chain): include finished product delivery service
2026-08-29 15:35:59 +08:00
WuYongJie
a69bf1997b
feat(supply-chain): add multi-delivery tracking to finished product progress
2026-08-29 15:25:36 +08:00
WuYongJie
622fc9d527
feat(supply-chain): refine finished product progress import
2026-08-29 15:17:19 +08:00
WuYongJie
3409a9db50
feat(supply-chain): add multi-delivery tracking to finished product progress
2026-08-29 15:07:12 +08:00
WuYongJie
0f55175d9b
fix: respect configured HR SQL Server schema
...
Use HR_SQLSERVER_SCHEMA for default employee directory queries so production can read the rpt source tables.
2026-08-29 14:07:33 +08:00
WuYongJie
0811bea57c
fix: respect configured HR SQL Server schema
...
Use HR_SQLSERVER_SCHEMA for default employee directory queries so production can read the rpt source tables.
2026-08-29 14:06:54 +08:00
WuYongJie
0ff6f87757
feat(supply-chain): add supplier recommended products
2026-08-29 13:31:45 +08:00
WuYongJie
089845e7ee
merge: integrate employee directory account protection
2026-08-29 13:25:24 +08:00
WuYongJie
ab5ea15e80
fix: protect external accounts during employee directory sync
2026-08-29 13:23:26 +08:00
WuYongJie
1347a34d14
feat(supply-chain): refine finished product progress import
2026-08-29 13:08:12 +08:00
WuYongJie
6a32957bf5
fix: protect external accounts during employee directory sync
2026-08-29 12:04:57 +08:00
WuYongJie
9bf54d95d3
fix: protect external accounts during employee directory sync
2026-08-29 12:01:18 +08:00
WuYongJie
dc16d2b75c
merge: release script monitor machine deletion
2026-08-28 20:48:38 +08:00
WuYongJie
85c31677c5
merge: release script monitor operations and store account completion
...
# Conflicts:
# furniture-3d-system/prisma/schema.prisma
# furniture-3d-system/src/app/api/supply-chain/store-account-management/[id]/bank-account/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/import/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/route.ts
# furniture-3d-system/src/app/api/supply-chain/store-account-management/profiles/template/route.ts
2026-08-28 18:28:11 +08:00
WuYongJie
ea363984a7
merge: release approved store account updates
2026-08-28 17:49:53 +08:00
WuYongJie
47df269785
release: approve store account updates and users build fix
2026-08-28 17:49:53 +08:00
WuYongJie
978b609325
merge: release accepted five features and latest long-lived changes
2026-08-28 16:12:43 +08:00
WuYongJie
422c23d3e5
release: merge latest development with script monitoring
2026-08-28 15:51:55 +08:00
WuYongJie
4d34a387a9
feat(supply-chain): add store account exports and permissions
2026-08-28 09:41:13 +08:00
WuYongJie
78cfa85232
release: integrate approved product and notification updates
...
Includes 13268ee5, 01a9d1e2, 48e496b0, bf85258d.
Store account fix e48229ab is already integrated by parent d8141a63.
2026-08-27 16:39:54 +08:00
WuYongJie
d8141a63a9
fix(supply-chain): allow incomplete store account imports
...
Isolated main integration of e48229ab.
2026-08-27 16:34:50 +08:00
WuYongJie
55c99cbc4d
feat(sample-progress): enhance detail collaboration
2026-08-27 13:53:01 +08:00
WuYongJie
37074cf25b
feat(supply-chain): stream store account import progress
2026-08-27 13:14:23 +08:00
WuYongJie
5da6c34758
feat(installation): auto-explode unnamed assemblies
2026-08-26 18:29:15 +08:00
WuYongJie
879a73e480
feat(supply-chain): add product, supplier, and store management
2026-08-26 18:28:55 +08:00
WuYongJie
8b8a41f2d7
fix(intake): preserve sku identities on delete
2026-08-26 16:49:42 +08:00
WuYongJie
c093c32e1d
fix(intake): preserve sku identities on delete
2026-08-26 16:46:57 +08:00
WuYongJie
07d6d0d03f
fix(intake): isolate basic info confirmation by batch
2026-08-26 16:25:41 +08:00
WuYongJie
9761465d45
fix(intake): isolate basic info confirmation by batch
2026-08-26 16:20:04 +08:00
WuYongJie
aa5d983b7d
merge: release SKU batch workbook isolation
2026-08-26 13:19:46 +08:00
WuYongJie
77b3b3c800
merge: release daily Jushuitan fixed virtual inventory
2026-08-25 14:27:28 +08:00
WuYongJie
ffc9c1a727
fix(jushuitan): schedule fixed virtual inventory daily
2026-08-25 14:07:36 +08:00
jingchuan
b23e4122f2
feat(supply-chain): organize sample timing by plan tabs
2026-08-25 13:04:30 +08:00
WuYongJie
10c32b2c97
fix(intake): preserve basic info confirmation after factory sync
2026-08-24 16:40:58 +08:00
WuYongJie
b1cebf0707
Merge remote-tracking branch 'origin/codex/xuxiake-mainline' into codex/local-3001-integration
...
# Conflicts:
# furniture-3d-system/src/app/supply-chain/database/product-archive/ProductArchiveView.tsx
# furniture-3d-system/src/lib/permissions.ts
# furniture-3d-system/src/lib/workspace-route-permissions.ts
# furniture-3d-system/src/server/core/types.ts
# furniture-3d-system/src/server/repositories/user.repository.ts
# furniture-3d-system/src/server/services/auth.service.ts
2026-08-21 13:11:21 +08:00
WuYongJie
a26f53aaba
refactor(supply-chain): clarify sync and UI ownership
2026-08-21 10:54:30 +08:00
WuYongJie
e9cd4e312a
fix(auth): preserve BOM-only session source
2026-08-18 16:32:30 +08:00
WuYongJie
63b37b564a
feat(auth): add BOM-costing-only account access
2026-08-18 15:57:05 +08:00