电子元件库存管理系统 v1.0

一个基于 Flask + SQLite 的轻量库存系统,适合先本地开发,后续部署到宝塔服务器。

当前支持三类容器:

  • 28格小盒大盒:常见 4 连排小盒(竖向 7 排)。
  • 14格中盒大盒:中等盒子,无固定摆放图。
  • 袋装清单:防静电袋列表模式(每行一个袋位,支持批量新增)。

1. 项目结构

inventory/
├── app.py
├── requirements.txt
├── init_db.py
├── data/
│   └── inventory.db          # 首次初始化后生成
├── templates/
│   ├── index.html
│   ├── box.html
│   ├── edit.html
│   └── scan.html
└── static/
	├── css/
	│   └── style.css
	└── js/
		└── scanner.js

2. 本地运行

2.1 安装依赖

pip install -r requirements.txt

2.2 初始化数据库

python init_db.py

初始化后会生成:data/inventory.db

2.3 启动服务

python app.py

默认访问:http://127.0.0.1:5000

3. 页面说明

3.1 首页 /

  • 按容器类型显示 3 个列表。
  • 每个列表都可新增盒子。

3.2 盒子详情 /box/<box_id>

  • 28格/14格:格子视图,点格子进入编辑。
  • 袋装清单:表格视图,支持单条新增和批量新增。

3.3 编辑页 /edit/<box_id>/<slot>

  • 编辑料号、名称、规格、数量、位置备注、备注。
  • 可删除当前格子记录。

3.4 扫码/搜索 /scan

  • 可按料号或名称搜索。
  • 支持扫码枪输入后回车触发搜索。

4. 袋装批量新增格式

在袋装清单页面的批量输入框里,每行一条,可用英文逗号或 Tab 分隔:

料号, 名称, 数量, 规格, 位置备注, 备注

示例:

10K-0603, 贴片电阻10K, 500, 0603, A袋, 常用
100nF-0603, 电容100nF, 300, 0603, B袋, X7R

说明:

  • 料号名称 必填。
  • 数量 需为大于等于 0 的整数(留空按 0
  • 无效行会跳过并提示。

5. 数据库说明

  • 使用 SQLite文件路径data/inventory.db
  • 首次发布执行一次 python init_db.py
  • 后续通常不需要重复初始化

6. 服务器部署(宝塔)

建议流程:

  1. 上传代码或 git clone 到服务器。
  2. 创建并启用虚拟环境。
  3. pip install -r requirements.txt
  4. python init_db.py
  5. 用 Gunicorn 启动:app:app
  6. 宝塔/Nginx 反向代理到 Gunicorn 端口
  7. 域名解析 + SSL

建议 Gunicorn 仅监听内网:127.0.0.1:5000

7. 日常发布流程

本地开发后:

git add .
git commit -m "feat: xxx"
git push origin main

服务器更新:

cd /www/wwwroot/inventory
git pull origin main
source venv/bin/activate
pip install -r requirements.txt

最后在宝塔里重启 Python 项目。

8. 备份建议

重点备份:data/inventory.db

可按天备份,例如:

cp /www/wwwroot/inventory/data/inventory.db /www/backup/inventory_$(date +%F).db

9. 常见问题

Q1: VS Code 提示无法解析 flask 导入

通常是编辑器没选到正确虚拟环境,不代表代码不能运行。切换解释器到项目 venv 即可。

Q2: 为什么线上不能用 python app.py 长期跑

python app.py 是开发模式。生产请使用 Gunicorn或其他 WSGI并由宝塔托管。

Q3: 本地和服务器数据库要实时同步吗

不建议 SQLite 双向实时同步。建议以服务器库为主,本地用于测试。

Description
电子元件库存管理系统 v1.0
Readme 970 KiB
Languages
Python 59.1%
HTML 32.7%
CSS 8.2%