轻量ERP管理系统
轻量ERP管理系统
一个基于 Node.js + Express + PostgreSQL 与 Vue 3 + Vite + TypeScript 的轻量级企业资源规划系统,覆盖商品、入库、出库、退货、库存与操作日志等核心业务场景。
1. 项目背景与目标
1.1 项目背景
- 中小企业数字化需求:中小企业在库存管理、进销存管理方面存在信息化程度低、手工记录易错、数据不实时等问题
- 现有解决方案痛点:
- 大型 ERP 系统功能复杂、成本高昂、部署维护困难
- 开源方案往往缺乏持续维护或文档不完善
- 轻量级方案功能单一,难以满足实际业务需求
1.2 建设目标
- 提供开箱即用的轻量级 ERP 解决方案
- 支持商品管理、入库出库、库存跟踪等核心功能
- 提供友好的 Web 界面和移动端支持
- 支持本地化部署,数据完全可控
- 具备良好的可扩展性和可维护性
2. 项目应用场景
2.1 库存管理场景
- 商品入库验收、质检、上架全流程管理
- 实时库存查询、库存预警、库存盘点
- 多仓库管理、仓库调拨
2.2 进销存管理
- 销售出库、领用出库、退货管理
- 供应商管理、采购订单跟踪
- 价格管理、成本核算
2.3 数据分析与决策
- 库存周转率分析
- 商品销售趋势分析
- 异常出入库预警
- 操作日志审计
2.4 适用对象
- 小型制造企业库存管理
- 零售门店进销存管理
- 电商仓库管理
- 办公用品管理
3. 核心功能概述
3.1 基础功能
- 用户认证:支持用户登录、会话管理、角色权限控制
- 商品管理:商品信息维护、分类管理、规格管理
- 库存管理:实时库存查询、库存汇总、库存预警
- 入库管理:入库单创建、扫码入库、入库记录查询
- 出库管理:出库单创建、扫码出库、出库记录查询
- 退货管理:退货单创建、退货审批、退货记录查询
3.2 高级功能
- 序列号管理:支持商品序列号唯一性校验
- 价格控制:支持低于成本价出库预警
- 扫码功能:支持扫码枪快速出入库
- 数据导出:支持 Excel 格式数据导出
- 操作日志:完整记录用户操作行为
3.3 系统管理
- 用户管理:用户增删改查、角色分配
- 权限管理:基于角色的权限控制(RBAC)
- 系统设置:系统参数配置、数据备份恢复
- 日志查询:操作日志、异常日志查询
4. 主要技术栈
4.1 后端技术
- 运行环境:Node.js >= 18
- Web 框架:Express 5.x
- 数据库:PostgreSQL 15+
- 查询构建器:Knex.js 3.x
- 认证方案:JWT + HttpOnly Cookie + 会话持久化
- 日志系统:Winston 3.x(文件日志、数据库审计日志)
- 密码加密:bcrypt + pbkdf2
- API 文档:Swagger/OpenAPI 3.x
4.2 前端技术
- 框架:Vue 3.5+
- 构建工具:Vite 7.x
- 语言:TypeScript 5.x
- 路由:Vue Router 4.x
- HTTP 客户端:Axios 1.x
- 状态管理:Vue 3 Composition API
- UI 设计:自定义组件(支持明暗主题切换)
4.3 部署与运维
- 进程管理:PM2
- 反向代理:Nginx
- 容器化:Docker + Docker Compose
- 数据库初始化:SQL 脚本自动初始化
- 数据备份:自动化备份脚本
4.4 开发工具
- 版本控制:Git
- 代码规范:TypeScript
- 包管理器:npm
5. 系统界面预览
5.1 登录页面
5.2 首页仪表盘
5.3 商品管理页面
5.4 库存管理页面
5.5 入库管理页面

6. 项目使用指南
6.1 环境要求
开发环境
- 操作系统:Windows 11 / Linux (Ubuntu 20.04+) / macOS
- Node.js:>= 18.0.0
- Docker:20.10+(用于 PostgreSQL 容器)
- Docker Compose:2.0+
- 内存:>= 4GB
- 磁盘空间:>= 10GB
生产环境
- 操作系统:Linux (Ubuntu 20.04+ 推荐)
- Node.js:>= 18.0.0
- PostgreSQL:15+
- Nginx:1.18+ (作为反向代理)
- PM2:最新版本 (进程管理)
- 内存:>= 4GB
- 磁盘空间:>= 20GB
6.2 启动步骤
方式一:Docker Compose 快速启动(推荐)
这是最简单的方式,适合快速体验和开发环境。
cd mini-erp
# 2. 启动 PostgreSQL 容器(首次会自动初始化数据库)
docker-compose up -d
# 3. 等待数据库初始化完成(约 5-10 秒)
# 可以通过以下命令检查容器状态
docker-compose ps
# 4. 安装后端依赖
cd backend
npm install
# 5. 启动后端服务
npm start
# 6. 安装前端依赖
cd ../frontend
npm install
# 7. 启动前端开发服务
npm run dev
数据库自动初始化说明:
- PostgreSQL 容器首次启动时会自动执行
scripts/init-db.sql - 自动创建所有表结构(8个表)
- 自动创建默认管理员账号(admin / admin123)
- 自动导入示例数据(12个商品、10条入库、2条出库)
- 后续启动不再执行初始化,数据会持久化保存
方式二:使用现有数据库
如果您已经有运行中的 PostgreSQL 数据库:
# 1. 克隆项目并安装依赖
git clone https://github.com/your-org/mini-erp.git
cd mini-erp/backend
npm install
# 2. 配置环境变量
cp ../.env.example .env
# 编辑 .env 文件,设置数据库连接信息:
# DB_CLIENT=pg
# PG_URL=postgres://user:password@host:5432/dbname
# 3. 手动执行初始化脚本
psql -U your_user -d your_db -f scripts/init-db.sql
# 4. 启动后端服务
npm start
# 5. 启动前端服务
cd ../frontend
npm install
npm run dev
方式三:生产环境部署
详细的生产环境部署指南请参考:生产环境部署指南.md
6.3 访问地址
开发环境
- 前端页面:http://localhost:5173
- 后端 API:http://localhost:3001
- API 文档:http://localhost:3001/api-docs
生产环境
- 前端页面:https://your-domain.com(根据实际部署配置)
- 后端 API:https://your-domain.com/api(通过 Nginx 反向代理)
6.4 默认账号说明
⚠️ 安全警告:以下为开发环境默认账号,生产环境部署后请立即修改!
| 角色 | 用户名 | 默认密码 | 说明 |
|---|---|---|---|
| 管理员 | admin | admin123 | 数据库初始化时自动创建 |
修改默认密码:
- 登录系统后进入「我的账户」
- 点击「修改密码」
- 输入旧密码和新密码确认
7. 典型使用流程
7.1 用户登录流程
- 打开浏览器访问系统地址
- 输入用户名和密码
- 点击「登录」按钮
- 系统验证成功后跳转到首页
7.2 商品管理流程
- 进入「商品管理」页面
- 点击「新增商品」
- 填写商品信息:
- 商品编码(必填,唯一)
- 商品名称(必填)
- 规格(可选)
- 分类(可选)
- 点击「保存」完成商品创建
7.3 入库操作流程
- 进入「入库管理」页面
- 点击「新增入库」
- 选择或扫描商品编码
- 填写入库信息:
- 入库数量
- 单价
- 序列号(可选,支持扫码)
- 点击「提交」完成入库
- 系统自动更新库存数量
7.4 出库操作流程
- 进入「出库管理」页面
- 点击「新增出库」
- 选择或扫描商品编码
- 系统自动显示可用库存
- 填写出库信息:
- 出库数量
- 出库原因
- 关联入库单(可选)
- 点击「提交」完成出库
- 系统自动扣减库存
7.5 库存查询流程
- 进入「库存管理」页面
- 查看实时库存汇总
- 可按商品分类、名称筛选
- 点击商品可查看详细的入库出库历史
- 支持 Excel 导出库存报表
7.6 扫码出入库流程
- 确保扫码枪已连接并正常工作
- 进入入库/出库页面
- 将光标定位到商品编码输入框
- 使用扫码枪扫描商品条码
- 系统自动填充商品信息
- 填写数量等其他信息
- 提交完成出入库
附录
A. 目录结构
mini-erp/
├── backend/ # 后端服务
│ ├── src/ # 源代码
│ │ ├── routes/ # 业务路由
│ │ ├── utils/ # 工具函数
│ │ ├── middlewares/ # 中间件
│ │ ├── repositories/ # 数据访问层
│ │ ├── config/ # 配置文件
│ │ ├── server.js # 服务入口
│ │ ├── database.js # 数据库连接
│ │ ├── auth.js # 认证逻辑
│ │ └── session.js # 会话管理
│ ├── logs/ # 日志文件
│ ├── uploads/ # 上传文件
│ ├── knexfile.js # Knex 配置
│ └── package.json
├── frontend/ # 前端应用
│ ├── src/ # 源代码
│ │ ├── pages/ # 页面组件
│ │ ├── components/ # 公共组件
│ │ ├── api/ # API 客户端
│ │ ├── utils/ # 工具函数
│ │ ├── composables/ # 组合式 API
│ │ ├── router.ts # 路由配置
│ │ └── main.ts # 应用入口
│ ├── public/ # 静态资源
│ │ ├── favicon.svg # 网站图标
│ │ └── logo.png # 应用图标
│ ├── vite.config.ts # Vite 配置
│ └── package.json
├── scripts/ # 脚本工具
│ ├── init-db.sql # 数据库初始化脚本
│ ├── seed-data.sql # 示例数据(已合并到 init-db.sql)
│ ├── bump-version.js # 版本发布脚本
│ └── clean-port.ps1 # Windows 端口清理脚本
├── Docs/ # 文档目录
│ ├── README.md # 项目介绍(本文件)
│ └── 生产环境部署指南.md
├── docker-compose.yml # Docker 编排配置
├── nginx.conf.example # Nginx 配置示例
├── ecosystem.config.js # PM2 配置
├── .env.example # 环境变量模板
├── QUICKSTART.md # 快速启动指南
└── README.md # 项目说明
B. 数据库初始化说明
系统使用 SQL 脚本自动初始化数据库,无需手动运行迁移命令。
初始化脚本位置: scripts/init-db.sql
自动创建的内容:
- 数据库表结构(8个表)
- goods(商品表)
- inbound(入库表)
- outbound(出库表)
- returns(退货表)
- users(用户表)
- sessions(会话表)
- logs(操作日志表)
- inventory(库存视图)
- 默认账号
- 用户名:admin
- 密码:admin123
- 角色:管理员
- 示例数据
- 12个商品
- 10条入库记录
- 2条出库记录
重新初始化数据库:
# 停止并删除所有数据
docker-compose down -v
# 重新启动(自动初始化)
docker-compose up -d
C. 常见问题
Q1: 忘记管理员密码怎么办?
A: 方式一:登录系统后在「我的账户」中修改
方式二:执行 scripts/init-db.sql 中的管理员 INSERT 语句重置密码
Q2: 如何备份数据?
A: 使用 pg_dump 导出数据库,或参考生产环境部署指南中的备份章节
Q3: 扫码枪不工作怎么办?
A: 确保扫码枪已正确连接,输入框处于聚焦状态,尝试手动输入扫码枪内容测试
Q4: 如何更换端口?
A: 修改 .env 文件中的 PORT 配置项(后端)或 vite.config.ts 中的 server.port 配置项(前端)
Q5: 首次启动需要运行 migrate 命令吗?
A: 不需要。系统使用 SQL 脚本自动初始化,Docker 启动时会自动执行
Q6: 生产环境部署需要注意什么?
A: 请务必修改默认密码、配置 HTTPS、设置防火墙规则、定期备份数据
源码下载:

4.1 后端技术
5.2 首页仪表盘
5.4 库存管理页面
5.5 入库管理页面