|
|
67bc5b6c5d
|
V3.45
|
2026-06-11 17:36:34 +08:00 |
|
|
|
907c083107
|
feat: 新增 Odoo 风格物料管理视图及相关路由,优化成品入库逻辑
|
2026-06-05 15:35:43 +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 |
|
|
|
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 |
|
|
|
d51c6f147f
|
前端:所有 <el-dialog> 统一添加 :close-on-click-modal="false" 防误触关闭(保留 Esc 关闭)
|
2026-06-04 15:16:16 +08:00 |
|
|
|
a3d47f6328
|
入库管理三页面类别搜索统一为级联选择器;基础信息“俗名”改名为“出厂名称”
|
2026-06-04 11:05:58 +08:00 |
|
|
|
034418df8a
|
V3.38版本修改,三种入库按照基础信息内容进行修改
|
2026-05-29 14:26:52 +08:00 |
|
|
|
895d78a5e7
|
版本变更V3.33添加支持更新后识图功能
|
2026-05-25 11:20:45 +08:00 |
|
|
|
567c3175f6
|
fix: 审计日志跳过向量字段,修复 numpy 数组比较异常;补全三大入库单更新向量提取,统一删除确认弹窗
|
2026-05-25 11:11:10 +08:00 |
|
|
|
e331236a6e
|
fix: 为 handleExport 添加 onBeforeUnmount 幽灵定时器防护,并补充轮询失败时的兜底处理
|
2026-05-19 10:45:41 +08:00 |
|
|
|
e977ffc42d
|
feat: 将入库汇总导出从本地 xlsx 重构为后端异步轮询模式(submitExportTask + checkExportStatus)
|
2026-05-19 10:41:21 +08:00 |
|
|
|
ee893485bb
|
feat: 推广粘贴上传功能至所有图片上传页面(purchase/buy/product/semi)
|
2026-05-15 14:29:25 +08:00 |
|
|
|
97e7618bf3
|
feat(bom+inbound): BOM子件跳转规格修复 + 成品/半成品按钮迁移到标题行
|
2026-04-28 10:10:45 +08:00 |
|
|
|
ec71cb24f4
|
feat: 新增物料/成品/半成品页面一键直达BOM管理功能
|
2026-04-27 15:24:07 +08:00 |
|
|
|
9fa471f68a
|
fix: 修复物料列表跳转联动与弹窗定位逻辑
|
2026-04-27 14:41:26 +08:00 |
|
|
|
1499d2d45c
|
feat(buy): 入库编辑弹窗增加'前往修改基础信息'跳转按钮
|
2026-04-24 14:45:43 +08:00 |
|
|
|
605462cc33
|
fix: 解除库存盘点弹窗500条限制并修复字段匹配
|
2026-04-24 13:40:08 +08:00 |
|
|
|
996056d46a
|
fix: 修复库存盘点已盘数量卡在500的问题
|
2026-04-24 13:19:57 +08:00 |
|
|
|
ab353e5b34
|
库存盘点添加扫码保留数值的功能
|
2026-04-22 10:05:25 +08:00 |
|
|
|
6c0e13e52d
|
fix(frontend): reclassify global cross-company privilege as an operation to fix UI placement, and strictly enforce permission-driven table columns by bypassing localstorage
|
2026-04-17 09:36:23 +08:00 |
|
|
|
454f9b1184
|
feat(scrap): integrate repair items into physical scrap scanning flow and lock manual status
|
2026-04-09 09:53:20 +08:00 |
|
|
|
d3a143288b
|
fix(repair): enforce mandatory frontend form validations with proper prop bindings
|
2026-04-09 09:28:54 +08:00 |
|
|
|
f4d14f718d
|
refactor(repair): strictly gate 'Already Outbound' status to system-only trigger
|
2026-04-09 09:12:42 +08:00 |
|
|
|
48efbed46b
|
feat(repair): add quick status filters, mandatory validations, FIFO sorting, and hide actions on finished orders
|
2026-04-09 09:04:05 +08:00 |
|
|
|
0a9c8cd39c
|
fix(repair): add edit action, mandatory validations, default date, and fix outbound SN mapping
|
2026-04-09 08:49:50 +08:00 |
|
|
|
3085d9f447
|
feat(repair): decouple material base, sync global sku sequence and add scan/print features
|
2026-04-08 19:36:14 +08:00 |
|
|
|
7f2b9bc7ce
|
feat(repair): implement frontend API and Vue pages for repair management
|
2026-04-08 18:58:53 +08:00 |
|
|
|
c72e6e198e
|
fix(inbound): remove redundant /api prefix in history location requests
|
2026-04-08 17:38:19 +08:00 |
|
|
|
4a4baa2f8f
|
fix: sort warehouse tree by name, fix tree batch delete cascade, and implement safe history location autofill
|
2026-04-08 17:32:00 +08:00 |
|
|
|
6d80c90b66
|
feat: add 'not contains' operator, implement inbound record export, and verify export filter rules
|
2026-04-07 17:23:00 +08:00 |
|
|
|
0d8f697df4
|
fix(stocktake): enforce session_id in resume, make missing generation idempotent, update UI to show SN, and fix excel time offset
|
2026-04-03 09:42:51 +08:00 |
|
|
|
43e1d0aa55
|
fix(stocktake): strictly isolate stocktake drafts by session_id in list and finish generation to prevent historical data mixing
|
2026-04-03 09:25:52 +08:00 |
|
|
|
c361d25ea0
|
fix(stocktake): display batch number in scanning dialog and fix empty uncounted items in Excel export
|
2026-04-02 19:06:19 +08:00 |
|
|
|
dbcb7d0d92
|
perf(system): optimize large data rendering in stocktake, fix N+1 in warehouse, and add upload size limits
|
2026-04-02 18:51:13 +08:00 |
|
|
|
edf09508f6
|
fix(frontend): resolve cross-page selection loss, add destroy-on-close to dialogs, and fix row-key collision in stocktake
|
2026-04-02 18:35:11 +08:00 |
|
|
|
4b023a4002
|
fix(stocktake): auto-refresh inventory drafts silently after scanning to ensure real-time outer stats
|
2026-03-27 09:23:10 +08:00 |
|
|
|
b2ce9d31f8
|
fix(stocktake): replace hardcoded 'admin' with actual current user in excel export
|
2026-03-27 09:04:13 +08:00 |
|
|
|
8259a74c57
|
fix(stocktake): fetch inventory baseline immediately upon session start to show correct initial stats
|
2026-03-27 08:56:43 +08:00 |
|
|
|
dc42335ae0
|
fix(stocktake): decouple global stats calculation from list filters and pagination
|
2026-03-27 08:48:25 +08:00 |
|
|
|
f6b055d9c4
|
fix(stocktake): remove undeclared scannedMap and legacy cache references causing ReferenceError
|
2026-03-26 17:58:18 +08:00 |
|
|
|
8135a222f0
|
fix(stocktake): restore missing showConfirmDialog ref causing ReferenceError
|
2026-03-26 17:49:55 +08:00 |
|
|
|
edb49468a0
|
fix(stocktake): remove duplicate stats declaration causing compiler error
|
2026-03-26 17:47:40 +08:00 |
|
|
|
2a27f2e0df
|
feat(stocktake): implement strict blind stocktake logic with hidden system qty, editable count and status filters
|
2026-03-26 17:42:51 +08:00 |
|
|
|
a8119dd577
|
fix(permission): force inject view-level permission checks for all unprotected root nodes
|
2026-03-25 10:21:28 +08:00 |
|
|
|
663a4fc9ae
|
feat(permission): add missing RBAC permission checks for unprotected pages
|
2026-03-25 10:13:33 +08:00 |
|
|
|
57bdb6273b
|
refactor(stocktake): completely remove local stock cache and implement real-time remote scan match
|
2026-03-25 10:02:33 +08:00 |
|
|
|
bd20852739
|
refactor(stocktake): replace fetch-all with remote pagination/search and add permission checks
|
2026-03-25 09:51:28 +08:00 |
|