- 增加了 LCSC API 集成,可利用 app_id、access_key 和 secret_key 获取产品详情。 - 实现了用于安全 API 请求的一次性和签名生成。 - 通过新端点提升包容量管理,更新插槽容量。 - 更新界面,支持 LCSC 产品直接导入袋口。 - 改进了 API 响应和用户输入验证的错误处理。 - 重构箱子渲染逻辑,以适应新的包包功能和展示产品详情。 - 为与 LCSC 产品信息相关的新 UI 元素添加了 CSS 样式。 - 更新了 AI 设置页面,包含了 LCSC API 配置选项。
10 KiB
10 KiB
电子元件库存管理系统 v1.0
一个基于 Flask + SQLite 的轻量库存系统,适合先本地开发,后续部署到宝塔服务器。
当前支持三类容器:
28格小盒大盒:常见 4 连排小盒(竖向 7 排)。14格中盒大盒:中等盒子,无固定摆放图。袋装清单:防静电袋列表模式(每行一个袋位,支持批量新增)。袋装清单为固定容器(系统内置一个大盒),不需要新增/删除盒子。
v1.1 新增能力:
- 支持盒子改名和删除。
- 新增盒子时可设置
前缀 + 起始序号,内部编号自动递增。 - 盒子名称自动生成:
基础名称 + 编号范围,重名自动加#2/#3。 - 首页可直接看到每个盒子的编号范围(如
A1-A28)。 - 首页新增概览按钮:快速查看已启用的编号与名称。
- 编辑页支持
启用/停用。
1. 项目结构
inventory/
├── app.py
├── requirements.txt
├── init_db.py
├── data/
│ └── inventory.db # 首次初始化后生成
├── templates/
│ ├── index.html
│ ├── box.html
│ ├── edit.html
│ └── stats.html
└── static/
├── css/
│ └── style.css
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
2.4 可选:启用 AI 补货建议(硅基流动)
在启动前设置环境变量:
$env:SILICONFLOW_API_KEY="你的APIKey"
$env:SILICONFLOW_MODEL="Qwen/Qwen2.5-7B-Instruct"
可选变量:
SILICONFLOW_API_URL(默认:https://api.siliconflow.cn/v1/chat/completions)SILICONFLOW_TIMEOUT(默认:30秒)
仓库概览页点击 AI补货建议 按钮即可调用接口。
也可在页面中直接配置参数:
- 入口:
仓库概览->AI参数 - 页面:
/ai/settings - 保存文件:
data/ai_settings.json
3. 页面说明
3.1 首页 /
- 首页已改为入口跳转到
仓库概览页面。
3.1.1 仓库概览 /types
- 展示三类独立界面入口:
28格小盒大盒、14格中盒大盒、袋装清单。 - 每类入口显示当前容器数量,点击进入单独分类页面。
3.1.2 分类独立页 /type/<box_type>
- 每个分类使用独立页面,避免容器变多后的长页翻找。
- 页面内支持新增、设置、删除,并在操作后停留在当前分类页。
3.2 盒子详情 /box/<box_id>
28格/14格:格子视图,点格子进入编辑。袋装清单:表格视图,支持单条新增和批量新增。袋装清单仅使用编号前缀(如BAG),不设置编号范围。28格/14格支持快速入库:多行粘贴后自动分配空位。28格/14格/自定义容器支持立创编号入库:进入对应格位编辑页后输入编号,自动拉取商品基础信息并写入当前格位。- 支持按当前盒子导出打标 CSV(仅导出启用记录),可用于热敏打标机导入。
- 打标 CSV 列名为中英双语格式(如
料号(part_no)、备注(note)),便于直接识别。
3.3 编辑页 /edit/<box_id>/<slot>
- 编辑料号、名称、规格、数量、备注。
- 通过按钮启用/停用。
- 可删除当前格子记录。
3.4 统计页 /stats
- 独立统计页,仅展示核心指标:
库存总量 / 分类占比 / 变动趋势。 - 支持
7天与30天视图切换:/stats?days=7、/stats?days=30。 - 支持分类筛选:
/stats?days=30&box_type=small_28(可选值:small_28、medium_14、custom、bag、all)。 - 趋势图基于库存变动日志实时计算,来源包括:新增、快速入库、启用/停用、删除。
- 说明:升级前的历史操作不会自动回溯写入日志,趋势从启用该版本后开始逐步真实化。
- 新增最近操作时间线(最新 20 条),便于追踪库存变化来源。
- 筛选到单一分类后,指标会切换为更有意义的数据:
分类库存占比 / 周期操作次数 / 活跃天数 / 分类内元件Top。 - 支持趋势数据导出 CSV:
/stats/export?days=7&box_type=all(包含daily_delta日增减列)。 - 支持清除统计日志(当前筛选或全部),仅影响统计与趋势,不影响库存数据本体。
3.5 快速搜索与出库 /search
- 支持按
料号或名称搜索已启用元件。 - 搜索结果可一键跳转到对应盒位编辑页。
- 支持快速出库:只填写数量即可扣减库存,并写入统计日志。
3.6 AI 补货建议 /ai/restock-plan
- 基于低库存清单和最近 30 天出库数据生成补货建议。
- 未配置
SILICONFLOW_API_KEY时会返回明确错误提示。
3.7 AI 参数设置 /ai/settings
- 支持页面内编辑:
API URL / 模型名称 / API Key / 超时 / 低库存阈值 / 建议条目上限。 - 支持页面内编辑立创接口参数:
Base URL / Path / API Key / Header / Prefix / 请求编号字段 / 超时。 - 保存后立即生效,无需改代码。
3.8 立创编号入库 /edit/<box_id>/<slot>/lcsc-import
- 请求方式:
POST - 表单字段:
lcsc_product_id:立创商品编号(默认按文档使用整数productId)quantity:写入数量
- 导入逻辑:
part_no<-productModel(兜底productCode)name<-productNamespecification<-brandName / encapStandard / catalogNamenote<-LCSC productCode + productId
- 鉴权支持:
JOP签名(推荐,示例中的app_id/access_key/secret_key)简单Header API Key(兼容模式)
4. 袋装批量新增格式
在袋装清单页面的批量输入框里,每行一条,可用英文逗号或 Tab 分隔:
料号, 名称, 数量, 规格, 备注
示例:
10K-0603, 贴片电阻10K, 500, 0603, A袋, 常用
100nF-0603, 电容100nF, 300, 0603, B袋, X7R
说明:
料号、名称必填。数量需为大于等于 0 的整数(留空按 0)。- 无效行会跳过并提示。
5. 快速入库(28格/14格)
在盒子页面使用“快速入库”,每行一条:
料号, 名称, 数量, 规格, 位置备注, 备注
规则:
- 自动放入当前盒子的空位。
- 同料号已存在时自动累加数量(不重复占位)。
- 格子满了会跳过并提示具体行号。
6. 自动编号规则(新增)
新增盒子时只需填写:
前缀:如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
7. 元器件命名建议(简洁版)
为避免命名过长又保证可检索,建议:
料号(part_no):优先写厂家/采购料号,保持唯一。名称(name):品类 + 关键值 + 封装,如电阻10K 0603、电容100nF 0603。规格(specification):补充精度/耐压/温漂等必要信息,如1%、50V X7R。
推荐格式:
名称: 电阻10K 0603
规格: 1%
名称: 电容100nF 0603
规格: 50V X7R
7.1 轻量入库规范(推荐)
目标:字段尽量少,但保证后续能搜索、能区分、能补货。
最少必填(3项):
料号(part_no):优先填厂家型号(如STM32F103C8T6)。名称(name):品类 + 型号/关键值(如MCU STM32F103C8T6)。数量(quantity):当前实际库存数量。
建议选填(2-3项):
规格(specification):只写 2-4 个关键参数(如Cortex-M3 / 64KB Flash / LQFP-48)。位置备注(location):盒位或袋位(如A12、BAG4)。备注(note):来源或追溯信息(如LCSC item 9243或商品链接)。
不建议录入(避免复杂且易过期):
- 实时单价、促销价、交期、商城库存等动态信息。
推荐录入模板:
料号: <厂家型号>
名称: <品类 + 型号/关键值>
规格: <封装 + 关键参数>
数量: <整数>
位置备注: <盒位/袋位>
备注: <来源编号或链接>
示例:
料号: STM32F103C8T6
名称: MCU STM32F103C8T6
规格: Cortex-M3 / 64KB Flash / LQFP-48
数量: 10
位置备注: BAG4
备注: LCSC item 9243
8. 数据库说明
- 使用 SQLite,文件路径:
data/inventory.db - 库存变动日志表:
inventory_events(用于统计页趋势计算) inventory_events主要字段:box_type、part_no、event_type、delta、created_at- 首次发布执行一次
python init_db.py - 后续通常不需要重复初始化
9. 服务器部署(宝塔)
建议流程:
- 上传代码或
git clone到服务器。 - 创建并启用虚拟环境。
pip install -r requirements.txtpython init_db.py- 用 Gunicorn 启动:
app:app - 宝塔/Nginx 反向代理到 Gunicorn 端口
- 域名解析 + SSL
建议 Gunicorn 仅监听内网:127.0.0.1:5000
10. 日常发布流程
本地开发后:
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 项目。
11. 备份建议
重点备份:data/inventory.db
可按天备份,例如:
cp /www/wwwroot/inventory/data/inventory.db /www/backup/inventory_$(date +%F).db
12. 常见问题
Q1: VS Code 提示无法解析 flask 导入
通常是编辑器没选到正确虚拟环境,不代表代码不能运行。切换解释器到项目 venv 即可。
Q2: 为什么线上不能用 python app.py 长期跑
python app.py 是开发模式。生产请使用 Gunicorn(或其他 WSGI)并由宝塔托管。
Q3: 本地和服务器数据库要实时同步吗
不建议 SQLite 双向实时同步。建议以服务器库为主,本地用于测试。