218 lines
5.1 KiB
Markdown
218 lines
5.1 KiB
Markdown
# 电子元件库存管理系统 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 双向实时同步。建议以服务器库为主,本地用于测试。
|