一款基于 Electron 的桌面端标签打印与库存管理软件,支持多用户协同使用。一台电脑作为服务端运行软件,其他员工通过浏览器访问,无需安装任何软件。
- 标签打印 — 小标签/大标签,带二维码,选择产品后自动生成,可直接调用系统打印机打印
- 入库 / 出库管理 — 搜索产品并录入数量和备注
- 实时库存查看与修改 — 查看所有产品的实时库存数量,支持手动调整
- 打印自动扣减库存 — 打印标签时自动扣减对应库存
- 操作记录审计 — 记录每一笔操作的人员和时间
- 用户权限管理 — 支持管理员和普通用户角色,可控制库存查看权限
- 数据管理 — 产品数据的增删改查,支持从 Excel(.xlsx / .xls / .csv)批量导入
开发模式启动:
npm run dev打包为安装程序:
npm run dist:win打包完成后在 dist 目录下会生成安装包,安装后双击运行即可。
软件启动后,窗口标题栏会显示类似以下内容:
标签打印软件 - 其他电脑请访问 http://192.168.1.100:3456
请记住这个地址,告诉其他需要使用系统的员工。
在浏览器地址栏输入标题栏显示的地址,例如:
http://192.168.1.100:3456
推荐使用 Chrome、Edge 或 Firefox 浏览器。支持 Windows 7/10/11、Mac、Linux 等任何操作系统。
所有电脑需在同一个局域网内(连同一个路由器/交换机/WiFi)。
如果其他电脑无法访问,请检查:
- 服务端电脑的防火墙是否放行了 3456 端口
- 两台电脑是否在同一网段(IP 前三段相同,如 192.168.1.xxx)
首次使用时,系统自动创建一个管理员账号:
| 项目 | 内容 |
|---|---|
| 用户名 | admin |
| 密码 | admin123 |
请登录后立即修改密码!
打开系统后会看到登录页面,输入用户名和密码即可登录。
登录后,点击左下角的用户名,在弹出菜单中选择「修改密码」。
点击左下角用户名 → 选择「退出登录」。
管理员登录后,左侧菜单会多出「用户管理」入口。
- 点击「用户管理」→「新增用户」
- 填写用户名、显示名称、密码
- 选择角色:
- 普通用户:可使用打印、入库、出库、数据管理功能
- 管理员:拥有所有权限,包括用户管理和清空数据
- 设置「库存查看权限」开关:
- 开启:该用户可以看到库存数量、库存页面、出入库记录
- 关闭:该用户无法看到任何库存相关数字,但仍可正常执行入库/出库/打印操作
点击用户列表中的「编辑」按钮,可修改显示名称、角色、权限、重置密码。
点击「删除」按钮即可删除用户(不能删除自己)。
- 进入「标签打印」页面
- 在搜索框输入物料号、名称或规格,或使用扫码枪扫描二维码
- 从搜索结果中选择要打印的物品
- 设置:
- 物品数量:显示在标签上的数量
- 打印张数:需要打印几张标签
- 标签模板:小标签(袋装 50x40mm)或大标签(箱装 100x70mm)
- 右侧可预览标签效果
- 点击「打印标签并扣减库存」按钮
打印时会自动扣减库存,扣减数量 = 物品数量 × 打印张数。即使库存不足也允许打印(库存可以为负数)。
- 进入「入库」页面
- 搜索或扫码找到物品
- 点击物品或「入库」按钮,弹出入库窗口
- 输入入库数量和备注(选填)
- 点击「确认入库」
- 进入「出库」页面
- 搜索或扫码找到物品
- 输入出库数量和备注
- 点击「确认出库」
出库不限制库存数量,允许负库存。
需要「库存查看权限」才能看到此页面。
- 进入「库存」页面
- 可搜索过滤,查看所有产品的实时库存数量
- 点击「修改」按钮可手动调整库存数量(需填写修改原因)
- 每次修改都会记录操作日志
- 进入「数据管理」页面
- 可进行以下操作:
- 新增物品:手动填写物料信息
- 编辑物品:修改已有物品信息
- 删除物品:单个或批量删除
- 导入 Excel:批量导入物品数据
- 清空全部:清空所有物品数据(仅管理员)
Excel 文件第一行为表头,支持以下列名(顺序不限):
| 列名(任选一种写法) | 是否必填 |
|---|---|
| 物料号 / 物品编码 / 编码 / code | 必填 |
| 物品名称 / 名称 / name | 必填 |
| 物料描述 / 描述 | 选填 |
| 规格 / spec | 选填 |
| 等级 / grade | 选填 |
| 表面处理 | 选填 |
| 材质 | 选填 |
| 特殊备注 / 备注 | 选填 |
系统会自动记录以下所有操作,记录只增不删,确保可追溯:
| 操作类型 | 备注格式 | 记录内容 |
|---|---|---|
| 入库 | 用户填写的备注 | 操作人、数量、时间 |
| 出库 | 用户填写的备注 | 操作人、数量、时间 |
| 打印出库 | [打印出库] 2张小标签, 每张100 | 操作人、扣减数量、时间 |
| 手动调整 | [手动调整] 用户填写的原因 | 操作人、调整差值、时间 |
拥有库存查看权限的用户可以在入库/出库页面底部看到操作记录列表。
| 功能 | 普通用户 | 普通用户(有库存权限) | 管理员 |
|---|---|---|---|
| 标签打印 | 可以 | 可以 | 可以 |
| 入库操作 | 可以 | 可以 | 可以 |
| 出库操作 | 可以 | 可以 | 可以 |
| 查看库存数量 | 不可以 | 可以 | 可以 |
| 修改库存数量 | 不可以 | 可以 | 可以 |
| 查看操作记录 | 不可以 | 可以 | 可以 |
| 数据管理(增删改) | 可以 | 可以 | 可以 |
| 清空所有数据 | 不可以 | 不可以 | 可以 |
| 用户管理 | 不可以 | 不可以 | 可以 |
| 修改自己密码 | 可以 | 可以 | 可以 |
Q:其他电脑打不开页面? A:检查服务端电脑防火墙,确保 3456 端口已放行。Windows 首次启动时通常会弹窗询问,点击「允许访问」。如果没有弹窗,手动在 Windows 防火墙中添加入站规则放行 TCP 3456 端口。
Q:打印出来的标签样式不对? A:打印时请在打印对话框中检查以下设置:
- 纸张大小与标签尺寸匹配
- 边距设为「无」或最小
- 勾选「背景图形」选项
Q:忘记管理员密码?
A:删除服务端电脑上的数据库文件(位于系统用户数据目录下的 tape-printer.db),重新启动软件会自动创建新的默认管理员账号 admin/admin123。注意:这会清空所有数据。
Q:库存显示负数? A:系统允许负库存,表示出库/打印数量超过了实际入库数量。可以通过入库操作或手动调整库存来修正。
Q:多人同时操作会不会冲突? A:不会。所有数据操作都通过服务端统一处理,数据库由服务端独占访问,天然保证数据一致性。
| 层级 | 技术 |
|---|---|
| 框架 | Electron 40 + electron-vite 5 |
| 前端 | React 19 + TypeScript 5.9 |
| UI 组件 | Ant Design 6 |
| 数据库 | SQLite(better-sqlite3) |
| 条形码 | JsBarcode |
| 二维码 | qrcode |
| Excel 解析 | SheetJS (xlsx) |
| 打包工具 | electron-builder |
本软件同时支持 macOS、Windows 和 Linux 三个平台。electron-builder.yml 中已配置好各平台的打包目标:
| 平台 | 安装包格式 | 说明 |
|---|---|---|
| macOS | .dmg |
标准 macOS 磁盘映像 |
| Windows | .exe(NSIS 安装器) |
支持自定义安装路径 |
| Linux | .AppImage |
免安装,双击即可运行 |
注意:打包时默认为当前操作系统生成安装包。如需交叉编译(如在 Mac 上打 Windows 包),需要额外配置,详见下文。
- Node.js >= 18(推荐 20 LTS)
- npm >= 9(随 Node.js 一同安装)
- Git(用于版本管理)
检查版本:
node -v # 期望 v18.x 或更高
npm -v # 期望 9.x 或更高- Xcode Command Line Tools(编译
better-sqlite3原生模块需要)
xcode-select --install- Visual Studio Build Tools 或 Visual Studio(编译
better-sqlite3原生模块需要 C++ 编译器)
最简单的安装方式:
# 以管理员身份运行 PowerShell
npm install -g windows-build-tools或者手动安装 Visual Studio Build Tools,安装时勾选「使用 C++ 的桌面开发」工作负载。
- Python(部分原生模块编译时需要,通常
windows-build-tools会一并安装)
# Debian / Ubuntu
sudo apt-get install build-essential python3
# Fedora
sudo dnf groupinstall "Development Tools"# 克隆项目
git clone <仓库地址>
cd tapePrinter
# 安装依赖(会自动执行 postinstall 编译原生模块)
npm install
better-sqlite3是 C++ 原生模块,npm install时会自动编译。如果编译失败,请确认上述平台编译工具已正确安装。
npm run dev该命令使用 electron-vite 启动开发服务器,渲染进程支持热更新(HMR),修改前端代码后会自动刷新。
# 仅构建(不打包安装器)
npm run build
# 构建并生成未打包的可执行文件(用于测试)
npm run pack
# 构建并生成安装包(.dmg / .exe / .AppImage)
npm run dist- 安装 Node.js 和 Xcode Command Line Tools
npm install→npm run dev即可启动开发环境npm run dist生成.dmg安装包,双击挂载后拖入「应用程序」文件夹即可使用
- 安装 Node.js 和 Visual Studio Build Tools(或运行
npm install -g windows-build-tools) npm install→npm run dev即可启动开发环境npm run dist生成 NSIS.exe安装器,运行后按向导安装
Windows 常见问题:
- 如果
npm install报node-gyp相关错误,说明 C++ 编译环境未配置好,请检查 Visual Studio Build Tools 是否安装- 如果遇到 PowerShell 执行策略限制,可尝试以管理员身份运行:
Set-ExecutionPolicy RemoteSigned
- 安装 Node.js 和编译工具(
build-essential、python3) npm install→npm run dev即可启动开发环境npm run dist生成.AppImage文件,添加执行权限后即可运行:
chmod +x dist/标签打印软件-1.0.0.AppImage
./dist/标签打印软件-1.0.0.AppImagetapePrinter/
├── electron-builder.yml # electron-builder 打包配置
├── electron.vite.config.ts # electron-vite 构建配置
├── package.json
├── tsconfig.json
├── src/
│ ├── main/ # Electron 主进程
│ │ ├── index.ts # 应用入口,创建窗口
│ │ ├── database.ts # SQLite 数据库操作(产品、库存、出入库记录)
│ │ └── ipc-handlers.ts # IPC 通信处理器(主进程 API)
│ ├── preload/ # 预加载脚本
│ │ ├── index.ts # contextBridge 暴露 API 给渲染进程
│ │ └── index.d.ts # 类型声明
│ └── renderer/ # 渲染进程(前端 React 应用)
│ ├── index.html
│ └── src/
│ ├── App.tsx # 应用根组件(侧边栏导航 + 页面路由)
│ ├── main.tsx # React 入口
│ ├── pages/
│ │ ├── PrintPage.tsx # 标签打印页
│ │ ├── StockInPage.tsx # 入库页
│ │ ├── StockOutPage.tsx # 出库页
│ │ ├── StockPage.tsx # 库存查看页
│ │ └── DataPage.tsx # 数据管理页
│ ├── components/
│ │ ├── LabelLarge.tsx # 大标签组件
│ │ ├── LabelSmall.tsx # 小标签组件
│ │ ├── ProductForm.tsx # 产品表单组件
│ │ └── ImportModal.tsx # Excel 导入弹窗
│ ├── styles/
│ │ ├── global.css # 全局样式
│ │ └── label-print.css # 标签打印样式
│ └── assets/ # 静态资源(logo、印章图片等)
- 数据库文件:SQLite 数据库自动存储在系统用户数据目录下
- macOS:
~/Library/Application Support/tape-printer/tape-printer.db - Windows:
%APPDATA%/tape-printer/tape-printer.db - Linux:
~/.config/tape-printer/tape-printer.db
- macOS:
- 数据库采用 WAL 模式以提升读写性能
- 首次启动时自动创建数据库和表结构,无需手动配置
| 命令 | 说明 |
|---|---|
npm run dev |
启动开发服务器(支持热更新) |
npm run build |
构建生产版本到 out/ 目录 |
npm run pack |
构建 + 打包为可执行文件(不生成安装器,用于快速测试) |
npm run dist |
构建 + 生成平台对应的安装包 |
- 原生模块编译:
better-sqlite3需要 C++ 编译器,请确保开发环境中已安装对应平台的编译工具 - Electron 版本:项目使用 Electron 40,如需升级请注意 API 兼容性
- 交叉编译:electron-builder 支持在一个平台上为其他平台打包,但
better-sqlite3等原生模块需要对应平台的预编译二进制文件。建议在目标平台上直接打包 - 打印功能:标签打印依赖系统打印服务,请确保已连接并配置好打印机