|
|
b79b0f99af
|
fix(借库扫码出库): 撤销 joinedload 修复 PG "FOR UPDATE cannot be applied to nullable side of outer join"
- 83b3db6 引入的 joinedload(ModelClass.base) 触发 LEFT OUTER JOIN,
而 with_for_update() 会被 SQLAlchemy 透传到 join 的 nullable 侧,
PG 直接抛 FeatureNotSupported,且连表加锁有死锁风险
- 退回最安全的单表 FOR UPDATE 模式,接受 N+1 lazy 加载的代价
- 在 防线3 上方加防回归注释,明确禁止未来再加 joinedload
- process_return 中的另两处 joinedload 不带 FOR UPDATE,不受 PG 限制,保留
|
2026-06-16 13:56:11 +08:00 |
|
|
|
83b3db693a
|
fix(借库扫码出库): 校验 key 从 (source_table, sku) 改为 (name, spec_model) + N+1 修复
- 借库申请按 (name, spec_model) 发起,审批明细无 sku 字段;
旧代码用 sku 做 key 会导致所有条目坍塌到同一桶,校验形同虚设
- 改为在扫码循环内即时累加、即时拦截:
防线4 锁定 stock 行后从 material_base 取真实 (name, spec_model),
与审批单按 strip 后的 (name, spec_model) 聚合比对
- 新增 joinedload(ModelClass.base) 一次 JOIN 加载 base,
避免循环内 stock.base 触发 N+1
- 修正 dispatch_borrow docstring 中"sku 用于超额交叉校验"的错误描述
|
2026-06-16 13:50:49 +08:00 |
|
|
|
bfeb397c4a
|
fix(借库扫码出库): items 字段名 stock_id → id 修复 400 + dispatch_borrow docstring 补全 sku 字段说明
|
2026-06-16 13:38:51 +08:00 |
|
|
|
dcef91c3b1
|
V3.47
|
2026-06-12 15:05:06 +08:00 |
|
|
|
5c0c1632c3
|
fix(审批邮件): items_json序列化Bug修复 + 邮件方法出库/借库物理隔离
|
2026-06-12 15:04:57 +08:00 |
|
|
|
6f5652b90e
|
fix(借库菜单): 调整路由顺序 + 统一菜单命名
|
2026-06-12 14:21:03 +08:00 |
|
|
|
7ef22a3830
|
feat(借库审批流): 完整前后端实现
|
2026-06-12 14:08:19 +08:00 |
|
|
|
941bd20fbd
|
fix(借库审批): borrow_service pytz时区修复 + transactions except块traceback增强
|
2026-06-12 14:06:17 +08:00 |
|
|
|
7ee6b0e02f
|
借库申请页面:恢复按 BOM 套餐添加功能
|
2026-06-12 13:19:01 +08:00 |
|
|
|
9e83c31f39
|
V3.46
|
2026-06-12 11:10:58 +08:00 |
|
|
|
6ad00884ba
|
借库列表:主子表聚合 + 展开行内嵌明细
|
2026-06-12 11:07:23 +08:00 |
|
|
|
9a5e3ee6b0
|
TransService.get_records: 追加 material_name 字段 + SKU 兜底查询解决数据孤岛问题
|
2026-06-12 11:06:34 +08:00 |
|
|
|
67bc5b6c5d
|
V3.45
|
2026-06-11 17:36:34 +08:00 |
|
|
|
6cf5a25d77
|
V3.44
|
2026-06-10 12:16:00 +08:00 |
|
|
|
6686747e57
|
BomManage: saveDraftData 简化为全局唯一草稿静默覆盖模式
|
2026-06-10 12:11:53 +08:00 |
|
|
|
74bc751624
|
V3.43
|
2026-06-10 11:36:06 +08:00 |
|
|
|
c7b84ff3c6
|
fix: BOM草稿模块缺陷修复(事务回滚 + 外键约束 + 前端状态清理)
|
2026-06-10 11:30:07 +08:00 |
|
|
|
0e6d294052
|
V3.42
|
2026-06-05 16:28:43 +08:00 |
|
|
|
93b9846fc6
|
feat: 以图搜图集成拍照功能,支持直接调起摄像头搜图
|
2026-06-05 15:47:50 +08:00 |
|
|
|
1def8c7747
|
fix: 修复物料管理菜单空白,修正子菜单显示名称
|
2026-06-05 15:41:05 +08:00 |
|
|
|
907c083107
|
feat: 新增 Odoo 风格物料管理视图及相关路由,优化成品入库逻辑
|
2026-06-05 15:35:43 +08:00 |
|
|
|
afe0f25415
|
物料类别隔离校验:buy 改黑名单 + semi/product 改精确路径匹配,消除子串包含Bug
|
2026-06-05 13:01:39 +08:00 |
|
|
|
ffc482bd9e
|
BomManage: 增删改刷新保留折叠状态,搜索时才重置 activeCategories
|
2026-06-05 11:31:37 +08:00 |
|
|
|
7087769a33
|
BomManage: 首屏懒渲染优化 — el-table 加 v-if 按需挂载,v-loading 替换为骨架屏
|
2026-06-05 11:24:40 +08:00 |
|
|
|
3d30cbc5c2
|
BomManage: autocomplete 添加 validate-event=false,rules 校验字段从 parent_id 改为 parentNameInput
|
2026-06-05 11:05:41 +08:00 |
|
|
|
355a21e94c
|
物料搜索:el-select 重构为 el-autocomplete Regression 修复(value-key 缺失 + parentNameInput 未声明 + onChildClear 不完整)
|
2026-06-05 11:02:35 +08:00 |
|
|
|
ff5418afa3
|
入库模块:物料搜索点击无感修复 + 类别校验白名单准入制
前端(buy/semi/product/service.vue,4 文件):
修复物料搜索"点击已聚焦 input 时内容被清空"交互 bug。
el-select 在 filterable+remote 模式下点击已聚焦的 input 时,el-select 内部
会 emit query='' 触发 remote-method,绕过 handleMaterialDropdownVisible
入口保护,直接清空 searchKeyword 和 materialOptions,导致用户被迫重写。
新增两层防御实现"编辑无感":
1) handleMaterialDropdownVisible 入口拦截:已选过物料(form.base_id 有值)
时下拉打开直接 return,不请求默认列表
2) handleSearchMaterial 内部拦截:拦截 el-select 内部 emit 的空 query,
仅在 form.base_id 有值 + safeQuery 为空 + 列表非空时 return
后端(buy/semi/product_service.py,3 文件):
入库类别校验从黑名单改为白名单准入制,彻底杜绝"成品进半成品库"
等非法组合(d94b52b 黑名单方案"成品不能进采购库"已挡不住这种组合)。
- buy_service.py: 黑名单(禁半成品/成品进采购)→ 白名单(必须含"原材料")
- semi_service.py: 统一错误信息格式为"只有【半成品】才允许半成品入库!"
- product_service.py: 统一错误信息格式为"只有【成品】才允许成品入库!"
- 三处空 category 统一显示为"未分类"
配合前端已修复的 catch 块(e.response.data.msg 精准提取),后端新错误
信息可原样弹窗给用户。
|
2026-06-04 17:57:17 +08:00 |
|
|
|
d94b52bf73
|
入库模块:物料类别隔离硬性校验(写拦截,读放宽)
|
2026-06-04 17:19:43 +08:00 |
|
|
|
8bb3e58b44
|
前端全局:<el-select remote> 三道防线扩展到 BOM 配方/采购/采购入库/售后入库
- 第一道防线:<el-select> 模板显式补充 reserve-keyword="true" / default-first-option="true",覆盖 4 文件 5 实例
- 第二道防线:handleRemoteSearch / handleSearchMaterial 首行深度净化 query(零宽字符/控制字符/BOM/不可见 Unicode)
- 第三道防线:handleVisibleChange / handleMaterialDropdownVisible 加竞态守卫,已有 searchKeyword 或 options 非空时跳过默认列表加载;带 debounce 的场景主动 clearTimeout 互斥
- service.vue 原本缺少 searchKeyword 状态,本轮新增 ref('') 专供 el-select 守卫使用
- BomManage.vue 父件/子件共用 handleVisibleChange,两套守卫分别按 parentQueryParams.keyword 和 state.queryParams.keyword 隔离判断
|
2026-06-04 16:44:59 +08:00 |
|
|
|
cdac915a4b
|
半成品/成品入库:物料/BOM 远程搜索粘贴失效 Bug 修复(三层防御)
- 深度净化 query:剔除零宽字符(U+200B-U+200D)/BOM(U+FEFF)/控制字符(U+0000-U+001F,U+007F-U+009F),应对外部复制粘贴混入隐形 Unicode 导致 ilike 匹配失败的场景
- 显式 reserve-keyword="true" / default-first-option="true":物料与 BOM 两个 <el-select> 全部显式标注,防止 Element 框架在选择后清空关键字(BOM 下拉框原缺失)
- handleMaterialDropdownVisible 竞态守卫:粘贴时 remote-method 与 @visible-change 同时触发,后者会 clearTimeout 前者的 debounce 定时器并加载默认列表覆盖结果。新增 !searchKeyword 守卫 + 主动 clearTimeout 互斥
|
2026-06-04 16:34:36 +08:00 |
|
|
|
8a2da1ac1e
|
半成品/成品入库:BOM 编号下拉按父件规格联动过滤(前后端双端改造)
- 后端 /inbound/{semi,product}/search-bom 增加 parent_spec 可选参数,Service 层在 MaterialBase.spec_model 上加等值过滤
|
2026-06-04 16:01:48 +08:00 |
|
|
|
332ae3c4cf
|
基础信息页:产品图/说明书上传后预览不显示修复 + 新增 Ctrl+V 粘贴蓝字提示
- customUpload 改为手动 push:移除 onSuccess(res) 调用,规避 el-upload 2.13.1 handleSuccess 未从 res.data.url 提取 url 的问题
|
2026-06-04 15:43:38 +08:00 |
|
|
|
d51c6f147f
|
前端:所有 <el-dialog> 统一添加 :close-on-click-modal="false" 防误触关闭(保留 Esc 关闭)
|
2026-06-04 15:16:16 +08:00 |
|
|
|
2977acbae7
|
BOM 配方管理:禁止编辑原数据,引入另存为(深拷贝+清 ID)+ 只读查看模式(点击编号进只读弹窗)
|
2026-06-04 14:44:29 +08:00 |
|
|
|
90eed24441
|
基础信息页:编辑弹窗新增另存为新项功能(清主键+切标题+清脏检查基准,复用 addMaterialBase 接口)
|
2026-06-04 14:07:34 +08:00 |
|
|
|
91444034e0
|
基础信息页:将出厂名称展示文案统一改为专业名称(5 处,变量名/接口字段保持不变)
|
2026-06-04 13:32:52 +08:00 |
|
|
|
8f901e3f08
|
基础信息页:类别→规格型号自动提取正则扩展为支持字母+数字(如 Opt9)
|
2026-06-04 13:27:00 +08:00 |
|
|
|
bac670ef7a
|
基础信息页:计量单位改 el-select(下拉历史+手动输入);表单排版重排为 4 行(类别占满行);类别末级英文后缀自动填规格型号
|
2026-06-04 13:22:51 +08:00 |
|
|
|
1c0c02fd36
|
基础信息页新增/编辑弹窗隐藏“可见等级”表单项(v-if=“false”,代码保留可恢复)
|
2026-06-04 11:40:34 +08:00 |
|
|
|
fffee9d964
|
入库管理三页面类别搜索中间节点支持子级匹配(buy/semi/product 类别过滤改为 ilike 前缀,与基础信息页一致)
|
2026-06-04 11:31:44 +08:00 |
|
|
|
a3d47f6328
|
入库管理三页面类别搜索统一为级联选择器;基础信息“俗名”改名为“出厂名称”
|
2026-06-04 11:05:58 +08:00 |
|
|
|
6149662fd8
|
V3.41修改AI接口
|
2026-06-01 11:07:24 +08:00 |
|
|
|
f18dfd9819
|
新增 /cascade-inventory 级联库存缺口查询接口,供 AI 调用 BOM 出库缺口分析
|
2026-06-01 09:59:48 +08:00 |
|
|
|
992e08aee9
|
V3.40
|
2026-06-01 09:29:03 +08:00 |
|
|
|
f27488e693
|
V3.39版本推送,出库选单依据BOM子件0的逻辑修改
|
2026-06-01 09:28:22 +08:00 |
|
|
|
034418df8a
|
V3.38版本修改,三种入库按照基础信息内容进行修改
|
2026-05-29 14:26:52 +08:00 |
|
|
|
cd54ca3fe2
|
V3.37版本修改,基础信息图片点击边缘空白处即可关闭
|
2026-05-29 11:33:54 +08:00 |
|
|
|
05aff2dd83
|
V3.36版本修改,基础信息列展示规则,分页数量修改,类别搜索修改
|
2026-05-29 11:23:05 +08:00 |
|
|
|
c1d364b786
|
基础信息页:新增列展示本地缓存 + 全选功能
|
2026-05-29 10:51:52 +08:00 |
|
|
|
6e50762da6
|
服务器数据库端口暴露宿主机修改
|
2026-05-28 11:49:06 +08:00 |
|