Files
inventory/README.md

218 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 电子元件库存管理系统 v1.0
一个基于 `Flask + SQLite` 的轻量库存系统,适合先本地开发,后续部署到宝塔服务器。
当前支持三类容器:
- `28格小盒大盒`:常见 4 连排小盒(竖向 7 排)。
- `14格中盒大盒`:中等盒子,无固定摆放图。
- `袋装清单`:防静电袋列表模式(每行一个袋位,支持批量新增)。
v1.1 新增能力:
- 支持盒子改名和删除。
- 新增盒子时可设置 `前缀 + 起始序号`,内部编号自动递增。
- 盒子名称自动生成:`基础名称 + 编号范围`,重名自动加 `#2/#3`
- 首页可直接看到每个盒子的编号范围(如 `A1-A28`)。
- 首页新增概览按钮:快速查看已启用的编号与名称。
- 编辑页支持 `启用/停用`
## 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/<box_id>`
- `28格/14格`:格子视图,点格子进入编辑。
- `袋装清单`:表格视图,支持单条新增和批量新增。
- 页面显示自动编号范围(由前缀+起始序号生成)。
### 3.3 编辑页 `/edit/<box_id>/<slot>`
- 编辑料号、名称、规格、数量、位置备注、备注。
- 支持勾选启用,或通过按钮启用/停用。
- 可删除当前格子记录。
### 3.4 扫码/搜索 `/scan`
- 可按料号或名称搜索。
- 支持扫码枪输入后回车触发搜索。
## 4. 袋装批量新增格式
在袋装清单页面的批量输入框里,每行一条,可用英文逗号或 Tab 分隔:
```text
料号, 名称, 数量, 规格, 位置备注, 备注
```
示例:
```text
10K-0603, 贴片电阻10K, 500, 0603, A袋, 常用
100nF-0603, 电容100nF, 300, 0603, B袋, X7R
```
说明:
- `料号``名称` 必填。
- `数量` 需为大于等于 0 的整数(留空按 0
- 无效行会跳过并提示。
## 5. 自动编号规则(新增)
新增盒子时只需填写:
- `前缀`:如 `A``B``C``BAG`
- `起始序号`:如 `1`
系统自动生成内部编号:
- 第 1 位:`前缀 + 起始序号`
- 第 N 位:`前缀 + (起始序号 + N - 1)`
示例:
- 前缀 `A`、起始 `1`、容量 28 -> `A1-A28`
- 前缀 `B`、起始 `100`、容量 14 -> `B100-B113`
盒子名生成示例:
- 基础名称 `电阻盒` + 范围 `A1-A28` -> `电阻盒 A1-A28`
- 若发生重名会自动变为:`电阻盒 A1-A28 #2`
## 6. 元器件命名建议(简洁版)
为避免命名过长又保证可检索,建议:
- `料号(part_no)`:优先写厂家/采购料号,保持唯一。
- `名称(name)``品类 + 关键值 + 封装`,如 `电阻10K 0603``电容100nF 0603`
- `规格(specification)`:补充精度/耐压/温漂等必要信息,如 `1%``50V X7R`
推荐格式:
```text
名称: 电阻10K 0603
规格: 1%
```
```text
名称: 电容100nF 0603
规格: 50V X7R
```
## 7. 数据库说明
- 使用 SQLite文件路径`data/inventory.db`
- 首次发布执行一次 `python init_db.py`
- 后续通常不需要重复初始化
## 8. 服务器部署(宝塔)
建议流程:
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`
## 9. 日常发布流程
本地开发后:
```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 项目。
## 10. 备份建议
重点备份:`data/inventory.db`
可按天备份,例如:
```bash
cp /www/wwwroot/inventory/data/inventory.db /www/backup/inventory_$(date +%F).db
```
## 11. 常见问题
### Q1: VS Code 提示无法解析 `flask` 导入
通常是编辑器没选到正确虚拟环境,不代表代码不能运行。切换解释器到项目 venv 即可。
### Q2: 为什么线上不能用 `python app.py` 长期跑
`python app.py` 是开发模式。生产请使用 Gunicorn或其他 WSGI并由宝塔托管。
### Q3: 本地和服务器数据库要实时同步吗
不建议 SQLite 双向实时同步。建议以服务器库为主,本地用于测试。