Commit Graph

75 Commits

Author SHA1 Message Date
b6ec45a8b8 feat(outbound): 出库流程强化(缺料防漏 + 完全移除直接出库)
① BOM 清单 SKU 改为规格型号(getBomWithStock 返回 children 无 sku,只有 child_spec)
② 缺货清单自动写入出库申请备注(借鸡生蛋:历史欠料永久留存在申请单)
③ 打印单底部增加欠料待补签收区(补料人签字/日期)
④ 有缺料时阻断式二次确认,防手快漏看
⑤ 完全移除直接出库模式,所有出库必须按单出库
   - create.vue 删除 radio 切换、direct 相关逻辑
   - 提交前强制校验已选择审批申请单
2026-08-31 09:37:14 +08:00
a4bd6f54d4 feat(outbound): BOM 出库增加清单打印与缺货持久化提醒
- BOM 弹窗物料清单增加「本次结果」列(可出/缺货未出)
- 增加「打印 BOM 清单」按钮,可打印当前 BOM 的完整出库清单
- 缺货物料持久化到 localStorage,下次打开同一 BOM 时自动提示历史缺货记录
  防止重复出库或漏出
- 打印区域使用与 A4 出库单一致的 iframe 打印机制
2026-08-31 09:26:53 +08:00
57a6ab38d1 fix(outbound): 修复选单列表移除按钮排序后索引错位导致删错行
- 表格绑定 sortedSelectedItems(按库位排序),但移除按钮用 $index 操作原始 selectedItems
- 排序后索引与原始数组不一致,导致删除错误的行
- 改为按 uniqueKey 精确定位删除
2026-08-13 17:17:54 +08:00
9c0414b802 fix(outbound): 出库备注改为必填,按单出库自动填充申请原因
- 备注字段新增 required 校验规则
- placeholder 从「可选填」改为「请填写出库原因」
- 按单出库模式选择申请单后,自动将申请原因填入备注
2026-08-07 15:58:59 +08:00
a8a0290cd8 fix: outbound total_amount 改为需权限 outbound_list:total_amount,库管无此权限则隐藏总金额 2026-07-21 09:49:46 +08:00
35690c5b8f fix: 出库列表 permissionMap 基础列改为 null(始终可见),对齐 inbound 模式;单价/小计保留权限控制 2026-07-21 09:39:16 +08:00
5b1cd4d8d0 fix: 扫码出库类型改为必选,移除默认值SALES
- outbound_type 默认值: SALES → '' (空)
- el-select 新增 clearable
- rules 新增 outbound_type required 校验
2026-07-16 13:13:08 +08:00
329820117f perf: 消除 outbound/borrow BOM 匹配的 while(true) 全量加载
## 后端
- outbound.py: 新增 POST /api/v1/outbound/bom-match-stock 端点
  接收 child_ids[],服务端按 base_id IN 查询三表有库存记录并返回

## 前端
- outbound.ts: 新增 bomMatchStock(childIds) API 函数
- Selection.vue: loadAllStockForBom (while(true) 全量) → loadStockForBom (单次 API)
- borrow/apply/index.vue: 同上

## 效果
- BOM 匹配从 ~90 次 HTTP 请求降为 1 次
- 浏览器内存从 ~18000 条降为 ~8-50 条
2026-07-15 17:52:08 +08:00
2556b77530 perf: 系统级性能优化与并发安全修复
## 并发安全修复 (4处)
- scrap.py: 报废执行添加 SELECT FOR UPDATE 悲观锁,消除 TOCTOU 竞态
- stock.py (adjust_stock): 盘点调整添加 for_update=True 行锁
- outbound_service.py: 低库存预警 SMTP 调用移到 commit 之后,避免长事务
- trans_service.py: execute_dispatch 按 (source_table, id) 排序 items,消除死锁风险

## N+1 查询优化 (2处)
- inventory_task.py: _prefetch_inventory_map 单条 UNION ALL+GROUP BY 替代循环内逐条查询(N*4次→2次)
- stock.py (export_stocktake): get_borrowed_qty 批量 GROUP BY 替代逐条 TransBorrow 查询(~18000次→1次)

## BOM 列表性能重构
- bom_service.py: get_bom_list 单条 GROUP BY+string_agg+分页,消除 N+1 循环查询
- bom_service.py: 新增 get_bom_summary (轻量 GROUP BY category+COUNT)
- bom.py: 新增 /api/v1/bom/summary 路由,/list 支持 category 过滤

## Odoo 基础信息懒加载
- base_service.py: 新增 get_odoo_summary (GROUP BY category+COUNT)
- base.py: 新增 /api/v1/inbound/base/odoo-summary 路由
- buyOdoo.vue: 懒加载分组架构 (fetchOdooSummary + loadGroupItems)
- material_base.ts: 新增 getOdooSummary API

## 前端 Bug 修复
- BomManage.vue: 懒加载分组 (fetchBomSummary + loadGroupItems + collapse)
- BomManage.vue: 适配新 API 格式 (res.data.items 替代 res.data)
- buyOdoo.vue: 移除 "点击展开加载" 文字
- Selection.vue + borrow/apply/index.vue: openBomSelect 适配新 API 格式
2026-07-15 17:37:57 +08:00
4934cd4d8f feat: 采购管理税率+分开单价总价列 + 按单出/借库锁定扫描 + 含税法计算
- purchase: 新增tax_rate字段(model+service+frontend), 表格拆分为不含税单价/总价/税率三列
- buy.vue: 含税法计算(含税总价=数量×含税单价), 含税总价自动计算可手动覆盖
- create.vue: 按单出库模式下未选审批单时锁定摄像头和SKU输入
- borrow.vue: 未选审批单时锁定摄像头和SKU输入
- deploy_production.sql: 整合全部数据库变更(表结构+权限码+角色分配)
2026-07-15 16:07:59 +08:00
8d78ed9306 feat: 全局跨域公司选择器 + 权限页crossDomain开关
- 新增CompanySelector组件: 仅crossDomain权限或SUPER_ADMIN可见
- 权限分配页: 全局系统特权下新增"允许全局跨域"操作权限checkbox
- 入库汇总/出库记录搜索栏嵌入CompanySelector
- PermissionConfig: transformData识别crossDomain为操作权限码
2026-07-15 11:11:49 +08:00
dxc
6a895347d0 V3.51 2026-06-25 15:44:31 +08:00
dxc
c1092407ad V3.50 2026-06-25 15:21:43 +08:00
dxc
f27488e693 V3.39版本推送,出库选单依据BOM子件0的逻辑修改 2026-06-01 09:28:22 +08:00
DXC
c0ab3ce6d2 perf: 消除 BOM 齐套分析的全量库存拉取和 O(N·M) 嵌套循环,改为使用后端返回的 current_stock 2026-05-19 10:07:05 +08:00
dxc
f9dd8b6536 版本变更3.22 2026-05-15 13:03:13 +08:00
dxc
857ff958bc 版本变更3.19 2026-05-14 18:01:28 +08:00
dxc
3c9d7a999d fix(purchase): 审批人下拉隐藏角色/物料搜索下拉/价格弹窗确认/图片必填校验 2026-05-12 17:27:51 +08:00
dxc
e1e0bc1104 版本变更3.17 2026-05-12 14:07:26 +08:00
DXC
048317ee5e feat(branding): 更新系统名称为 MOM / Manufacturing Operations Management 2026-05-12 14:01:20 +08:00
dxc
183b93012e 4.28 2026-04-28 16:07:11 +08:00
DXC
62c0e3738e fix(outbound+trans): 修复POST接口错误数据清洗导致的sku/quantity字段被清除Bug,并新增出库审批工作流全链路 2026-04-28 16:02:34 +08:00
DXC
e08eaff40a feat(outbound): 库存列表按规格+库位聚合 + BOM明细类型修复 2026-04-28 09:23:59 +08:00
DXC
2006b7275f fix(outbound): 终极护航版confirmPrint,iframe克隆样式+强制分页CSS 2026-04-21 14:39:48 +08:00
DXC
dd54e047dd fix(outbound): 重构confirmPrint为iframe打印模式,彻底粉碎全局CSS高度锁死 2026-04-21 14:35:34 +08:00
DXC
f53b16f512 fix(outbound): 重构@media print,解除el-container/el-main/el-scrollbar父级裁剪锁定 2026-04-21 14:26:11 +08:00
DXC
8583b811e1 fix(outbound): 将@media print移至非scoped样式,解除body/html高度锁死实现自由分页 2026-04-21 14:01:20 +08:00
DXC
6f5a7cf0db fix(outbound): #print-area改为absolute解除高度锁死,新增行防断裂保护 2026-04-21 13:55:26 +08:00
DXC
01ce9c1432 fix(outbound): 修复预览弹窗el-table打印分页截断问题 2026-04-21 13:25:15 +08:00
DXC
0ab7050e03 feat(outbound): 批量模式下支持点击整行切换选中状态 2026-04-21 13:20:13 +08:00
DXC
cd714d0c16 feat(outbound): 优化批量操作UX,改为进入/退出批量模式设计 2026-04-21 13:14:50 +08:00
DXC
a6409ac091 feat(outbound): 添加批量移除和一键清空功能 2026-04-21 13:11:29 +08:00
DXC
eba558c9d9 feat(outbound): 优化按 BOM 添加逻辑,支持缺件时按现有库存部分出库 2026-04-21 13:06:03 +08:00
DXC
a5a35777b5 fix(inventory): 修复 BOM 齐套分析时 allStockData 未加载导致可用库存为 0 2026-04-20 18:44:35 +08:00
DXC
466e94c4dd fix(inventory): 修复 BOM 编辑回显显示 ID 及出库齐套分析库存为 0 的问题 2026-04-20 18:30:51 +08:00
DXC
30ab1c186c fix: filter zero quantity items in inventory export and add batch/sn traceability to outbound record details 2026-04-07 16:41:53 +08:00
DXC
c57c84f142 fix(outbound): map warehouse location field correctly and implement natural sorting by location path for picking route optimization 2026-04-02 17:54:09 +08:00
DXC
d0cac14a33 fix(outbound): fix row-key collision causing UI select-all bug and false duplicate warnings in stock selection 2026-04-02 17:48:06 +08:00
DXC
a8119dd577 fix(permission): force inject view-level permission checks for all unprotected root nodes 2026-03-25 10:21:28 +08:00
dxc
d5d12a8df5 3.24部署版本 2026-03-24 16:19:47 +08:00
DXC
93dc375ba4 perf: replace client-side pagination with server-side pagination in stock selection dialog and fix duplicate variable in semi.vue 2026-03-23 14:52:01 +08:00
DXC
08c921fe66 feat: standardize default page size to 20, add pagination to pick list, and fix table horizontal scrollbar visibility 2026-03-23 14:38:08 +08:00
DXC
71e5f075d2 feat: implement composite debounced search with prepended select and wipe out duplicate root permission nodes 2026-03-20 10:26:45 +08:00
DXC
990399a408 feat: implement cross-table search and debounced dynamic search for borrow and return records 2026-03-20 09:58:42 +08:00
DXC
74089c7d7d fix: clean orphaned permission tree nodes and enhance outbound search with material name/spec model 2026-03-20 09:53:32 +08:00
DXC
faea0379da refactor: replace transfer outbound type with production outbound across frontend and backend 2026-03-19 17:13:24 +08:00
dxc
29ab7432a3 修正,让调拨出库改为生产出库 2026-03-19 17:04:15 +08:00
DXC
6cc3d1b6e0 feat: upgrade adjustment workflow to require explicit inbound SKU or outbound tracking number and fix UTC timezone issue 2026-03-19 15:26:40 +08:00
DXC
de887136a3 feat: restore available qty color and add BOM shortage analysis (kitting) for outbound 2026-03-19 09:33:15 +08:00
DXC
63ea2a22a4 fix: set default outbound and borrow quantity to 1 to improve user experience 2026-03-18 10:10:05 +08:00