star 439877c6ba feat: 入库/出库单笔录入新增物料编码输入框(输入或扫码自动定位)
- 单笔录入表单顶部新增「物料编码」输入框, 输入或扫码物料编码即自动定位下拉物料:
  精确命中/前缀唯一立即锁定并把光标跳到数量; 多个前缀候选提示继续输入; 编码不存在标红提示
- 下拉保留作后备, 手选下拉会反向自动填入编码, 两种方式互通
- option 加 data-pn 携带物料编码供前端精确匹配, 不改后端提交逻辑(仍用 material_id)
- 新增 .pn-lookup / .pn-hint 样式(状态色与系统 ok/danger/warn 一致)
- 教程补充单笔录入物料编码输入框说明

(注: 此前模拟齐套 commit 9f29139 因网络断连未推送, 本次一并推送)
2026-09-23 11:14:27 +08:00

物料入库 / 出库系统 (M1 + M2 + M3 完整版)

本地 Web 系统,对标桌面 物料明细表.xlsx 的台账 + BOM 核算能力。Flask + SQLite,免外部数据库,即开即用。 库存由 SQL 实时聚合(在库 = 入库 − 出库),彻底规避原 Excel 的 [1]物料入库!D_ 外部链接断链风险。

运行方式

方式一 · 单文件 EXE(推荐车间用) dist/MaterialWMS.exe 双击即开,自动弹出浏览器到 http://127.0.0.1:8080。 库文件 app.db 自动生成在 exe 同目录,换机器直接拷贝 exe 即可。

方式二 · 源码(双击 bat) 双击 启动.bat 启动;或命令行 python app.py。

方式三 · 指定库位置 set WMS_DB=D:/path/app.db 后再启动,可把数据放到任意位置。

默认账号

  • 管理员 admin / admin123(首次启动自动建;可在「用户」页加 operator / manager)

角色权限

角色 权限
admin 全部,含用户管理
manager 物料/BOM/订单/报表/日志/Excel 导入导出
operator 库存看板 / 物料查看 / 入库 / 出库

功能清单

模块 说明
库存看板 实时核算在库;低于安全库存标黄、库存为负标红,顶部统计负数/预警数
物料 主数据 CRUD(编号/型号/单位/安全库存)+ 搜索
入库 流水登记(批次/数量/经手人/来源),写入即更新库存
出库 流水登记,库存不足自动拦截
批量导入窗口 入库/出库/物料/BOM 页「批量导入窗口」按钮弹出模态框:粘贴多行清单或上传 Excel/CSV,实时预览解析与校验,一键批量生成。各页格式见下
入库/出库批量窗口 每行 物料编号 数量 批次(可选) 日期(可选) 备注(可选),校验物料存在/数量>0/出库库存充足
物料批量窗口 每行 物料编号 型号/规格 单位 安全库存(可选) 期初库存(可选),校验重复编号;已存在编号显示「更新」,一键批量 upsert(含期初流水)
BOM 批量窗口 ① 上传真实 Altium / 嘉立创 BOM 模板(Item/Part Number/Manufacture Part Number/Quantity/Reference/Part/Package):每个 worksheet 视为一个 BOM,sheet 名即 BOM 型号,Part Number 关联物料、Quantity 列即单套用量(若存在两个 Quantity 列,取首列,首列空时回退次列);也支持中文「组装」sheet(物料代码 + 数量)。② 粘贴文本:以 #BOM <型号> <名称> 分段、其下 物料编号 单套用量。物料不存在的项预览时标「新建」,导入时自动新建物料(并写入型号/规格),一键多 BOM 落库
BOM(M2) BOM 型号 + 组成物料单套用量;支持 Excel 导入
生产订单(M2) 选 BOM + 接单量 → 自动展开「需求 = 单套用量 × 接单量」,一键「确认领料」生成出库,缺料在看板预警
Excel 双向(M2) 物料导入/导出、BOM 导入、库存报表导出、导入模板下载
报表(M3) 库存报表页,支持打印(浏览器打印)与导出 Excel
操作日志(M3) 每次收发/BOM/订单/导入/用户操作全记录(谁/何时/做了什么)
用户管理(M3) admin 增删改角色、启停账号

数据来源

init_db.py 已从桌面 物料明细表.xlsx 的「物料入库」表导入 439 条真实物料, 把 Excel 库存数量作为"期初入库"写入,看板开箱即有数。

目录结构

material_wms/
├─ app.py            # 路由 + 鉴权 + 库存核算 + 冻结路径处理
├─ models.py         # SQLAlchemy 2.0 模型(user/material/inbound/outbound/bom/bom_item/prod_order/operation_log)
├─ excel_io.py       # Excel 双向导入导出 + 模板生成
├─ init_db.py        # 建表 + 管理员 + Excel 导入真实物料
├─ build_exe.py      # PyInstaller 单文件打包脚本
├─ requirements.txt
├─ 启动.bat
├─ templates/        # 登录/看板/物料/收发/BOM/订单/报表/日志/用户/导入 共 15 个页面
├─ static/style.css
├─ instance/app.db   # SQLite 库(源码模式自动生成)
├─ dist/MaterialWMS.exe  # 打包产物(单文件)
└─ tools/            # e2e_test.py(全量冒烟) / check_server.py

打包 EXE

python build_exe.py

产物在 dist/MaterialWMS.exe。冻结后模板/静态走 sys._MEIPASS,库文件落 exe 同目录。

测试

python tools/e2e_test.py   # 覆盖 登录/收发核算/BOM/订单展开/领料/日志/报表/导入导出/入库·物料·BOM 批量导入窗口/角色拦截
S
Description
No description provided
Readme
629 KiB
Languages
Python 63.1%
HTML 33.6%
CSS 2.9%
Batchfile 0.4%