# 电子元件库存管理系统 v1.0 一个基于 `Flask + SQLite` 的轻量库存系统,适合先本地开发,后续部署到宝塔服务器。 当前支持三类容器: - `28格小盒大盒`:常见 4 连排小盒(竖向 7 排)。 - `14格中盒大盒`:中等盒子,无固定摆放图。 - `袋装清单`:防静电袋列表模式(每行一个袋位,支持批量新增)。 ## 1. 项目结构 ```text 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 安装依赖 ```bash pip install -r requirements.txt ``` ### 2.2 初始化数据库 ```bash python init_db.py ``` 初始化后会生成:`data/inventory.db` ### 2.3 启动服务 ```bash python app.py ``` 默认访问:`http://127.0.0.1:5000` ## 3. 页面说明 ### 3.1 首页 `/` - 按容器类型显示 3 个列表。 - 每个列表都可新增盒子。 ### 3.2 盒子详情 `/box/` - `28格/14格`:格子视图,点格子进入编辑。 - `袋装清单`:表格视图,支持单条新增和批量新增。 ### 3.3 编辑页 `/edit//` - 编辑料号、名称、规格、数量、位置备注、备注。 - 可删除当前格子记录。 ### 3.4 扫码/搜索 `/scan` - 可按料号或名称搜索。 - 支持扫码枪输入后回车触发搜索。 ## 4. 袋装批量新增格式 在袋装清单页面的批量输入框里,每行一条,可用英文逗号或 Tab 分隔: ```text 料号, 名称, 数量, 规格, 位置备注, 备注 ``` 示例: ```text 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. 日常发布流程 本地开发后: ```bash git add . git commit -m "feat: xxx" git push origin main ``` 服务器更新: ```bash cd /www/wwwroot/inventory git pull origin main source venv/bin/activate pip install -r requirements.txt ``` 最后在宝塔里重启 Python 项目。 ## 8. 备份建议 重点备份:`data/inventory.db` 可按天备份,例如: ```bash 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 双向实时同步。建议以服务器库为主,本地用于测试。