工厂仓库 ERP 管理系统

基于 PHP 8.2 + MySQL 的工厂仓库 ERP 管理系统,部署为网站形式,开箱即用。 首次访问通过部署引导配置数据库与管理员账号,完成后即可使用全部功能。 纯原生 PHP OOP 实现,不依赖任何框架、无前端构建步骤,便于二次开发与定制。

✨ 功能特性

📷 界面预览

登录 仪表盘
登录 仪表盘
入库管理 出库管理
入库管理 出库管理
生产管理 设置生产配方
生产管理 设置生产配方
产线管理 退回管理
产线管理 退回管理
库存管理 报表统计
库存管理 报表统计
仓库管理 商品管理
仓库管理 商品管理
供应商管理 客户管理
供应商管理 客户管理
成员管理 基础设置
成员管理 基础设置
系统设置 打印
系统设置 打印

一、技术栈

项目 说明
后端 PHP 8.2(不使用复杂框架,原生 OOP 结构)
数据库 MySQL 5.7+ / MariaDB 10.3+
前端 原生 HTML / CSS / JavaScript(无构建步骤)
字符集 UTF-8(utf8mb4)
时区 Asia/Shanghai

充分使用 PHP 8.2 特性:declare(strict_types=1)、只读属性、联合类型、命名参数、枚举式匹配(match)、readonly 等。


二、环境要求

项目 要求
PHP 8.2.0 及以上
扩展 pdo_mysql、mbstring、openssl(会话安全随机)
数据库 MySQL 5.7+ 或 MariaDB 10.3+
Web 服务器 Nginx / Apache / IIS 均可(推荐 Nginx + PHP-FPM)
PHP 配置 session 可写、date.timezone = Asia/Shanghai

如使用 Apache,已提供 .htaccess;如使用 Nginx,参考下方配置。


三、项目结构

erp/
├── index.php              # 前端控制器入口
├── install.php            # 部署引导(首次访问运行)
├── .htaccess              # Apache 伪静态(可选)
├── web.config             # IIS 伪静态(可选)
├── README.md              # 本文件
├── config/
│   ├── config.example.php # 配置示例
│   └── config.php         # 安装后自动生成(含数据库连接信息,请勿手动修改)
├── core/                  # 核心层(无需修改)
│   ├── Bootstrap.php      # 路由分发
│   ├── Auth.php           # 登录/会话
│   ├── BaseController.php # 控制器基类(渲染、CSRF、权限、分页)
│   ├── BaseCrudController.php # 配置驱动通用 CRUD
│   ├── Database.php       # PDO 单例(预处理防注入)
│   ├── Permission.php    # 模块级+操作级权限
│   ├── Csrf.php           # CSRF 令牌
│   └── helpers.php        # 全局辅助函数
├── app/
│   └── Controllers/       # 业务控制器
│       ├── AuthController.php        # 登录/退出/权限拒绝
│       ├── DashboardController.php   # 仪表盘
│       ├── UserController.php        # 成员管理+权限设置
│       ├── WarehouseController.php   # 仓库
│       ├── ProductController.php     # 商品
│       ├── SupplierController.php    # 供应商
│       ├── CustomerController.php    # 客户
│       ├── InboundController.php     # 入库(含明细+库存联动)
│       ├── OutboundController.php    # 出库(含明细+库存扣减+校验)
│       ├── ProductionController.php  # 生产方案(BOM)+生产任务(完工自动生成领料出库单+成品入库单)
│       ├── LineController.php        # 产线档案(负责人,生产任务下发目标)
│       ├── InventoryController.php   # 库存查询+预警
│       ├── ReturnController.php      # 退回管理(独立退货单)
│       ├── ReportController.php      # 报表统计
│       └── SettingsController.php    # 系统设置
├── views/                 # 视图模板(PHP 原生)
│   ├── layout/main.php    # 后台布局(顶栏 + 侧边栏)
│   ├── auth/              # 登录/权限拒绝
│   ├── dashboard/
│   ├── users/             # 成员管理(含权限设置弹窗)
│   ├── crud/              # 通用 CRUD 视图(被仓库/商品/供应商/客户复用)
│   ├── inbound/
│   ├── outbound/
│   ├── production/       # 生产任务 + 生产方案(BOM)
│   ├── inventory/
│   ├── return/
│   ├── report/
│   └── settings/
├── public/                # 静态资源
│   ├── css/style.css
│   └── js/app.js          # Toast、Modal、Ajax、CRUD 绑定
├── database/
│   └── schema.sql         # 数据库结构(由 install.php 自动执行)
└── storage/logs/          # 错误日志(运行时生成)
 

四、部署步骤

1. 上传代码

将整个项目目录上传到服务器 Web 根目录(如 /var/www/html/erp 或 D:\www\erp)。

2. 设置目录权限

Linux 命令示例:

chmod -R 755 /var/www/html/erp
chmod 777 /var/www/html/erp/config
chmod 777 /var/www/html/erp/storage/logs
 

3. 首次访问

浏览器打开网站根目录地址,例如 http://your-domain/erp/。 若未检测到 config/config.php,系统自动跳转到部署引导 install.php:

  1. 第一步:填写数据库地址 / 端口 / 库名(不存在自动创建)/ 用户名 / 密码
  2. 第二步:填写管理员用户名 / 密码 / 姓名
  3. 点击「开始部署」→ 自动建库建表 + 创建管理员 + 写入配置
  4. 成功后点击「进入登录页面」即可使用

4. 部署完成后


五、Web 服务器配置

Nginx(推荐)

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/html/erp;
    index index.php;

    # 静态资源
    location /public/ {
        try_files $uri =404;
    }

    # 任何路由都由 index.php 处理
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;  # 按实际调整
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # 禁止访问敏感目录
    location ~ ^/(config|core|app|database|storage)/ {
        deny all;
    }
}
 

提示:即使不配置伪静态,系统也支持 index.php?r=Controller/method 形式访问,便于开发调试。

Apache

项目已附带 .htaccess,开启 mod_rewrite 即可。也可直接使用 index.php?r=... 访问。

IIS

项目附带 web.config,导入到 IIS 站点即可。


六、系统功能与使用说明

6.1 登录管理

6.2 成员账号管理(仅管理员)

路径:「成员管理」

6.3 仓库 / 商品 / 供应商 / 客户

通用 CRUD 列表:

6.4 入库管理

6.5 出库管理

6.6 生产管理

6.7 库存管理 + 预警

6.8 退回管理

6.9 报表统计

6.10 系统设置


七、安全机制

风险 防护措施
SQL 注入 全部使用 PDO 预处理(PDO::ATTR_EMULATE_PREPARES = false)
XSS 输出统一使用 e() 函数(htmlspecialchars)
CSRF 所有 POST/PUT/DELETE 自动校验 _csrf_token,前端通过 X-CSRF-TOKEN 头携带
密码哈希 使用 password_hash + PASSWORD_DEFAULT,登录时自动升级过期哈希
会话安全 HttpOnly / SameSite=Lax / 自动 session_regenerate_id
路由保护 反射校验方法可见性,禁止下划线开头方法被路由
权限校验 后端每个方法按 module/action 校验;管理员账号不可删除
错误输出 生产关闭 display_errors,错误写入 storage/logs/error.log
配置文件 安装后 config/config.php 含敏感信息,Nginx 已配置禁止访问

八、数据库结构概览

详见 database/schema.sql,主要表:

表 说明
users 系统账号(is_admin=1 为管理员,permissions 存 JSON)
warehouses 仓库
products 商品(含成本/售价/最低/最高库存、is_producible 是否可生产)
suppliers 供应商
customers 客户
inbound_orders / inbound_items 入库单主表+明细(production_id 关联生产完工入库单)
outbound_orders / outbound_items 出库单主表+明细(production_id 关联生产任务)
production_boms 生产方案 BOM(成品 → 消耗材料及单位用量)
production_orders / production_items 生产任务单主表(含目标产线、成品入库仓库、领料出库单/完工入库单ID;0待生产 2生产中(已领料) 1已完成)+消耗材料快照
production_lines 产线档案(含负责人,生产任务下发目标)
production_cancels / production_cancel_items 生产取消单(CX 单号,0待取消 1已取消)+按比例退回材料明细快照
return_orders / return_items 退回/反回单主表+明细(return_type 1出库反回 2入库退回,source_id 关联来源出库单/入库单;0待办 1已完成)
inventory 库存(仓库+商品唯一)
settings 系统设置键值
operation_logs 操作审计日志(预留)

如需手动初始化数据库(不通过 install.php),可直接导入 database/schema.sql 并手动插入一条管理员记录(密码用 password_hash)。


九、常见问题

Q1:部署后访问页面报 500 或数据库连接失败?

Q2:忘记管理员密码?

Q3:如何重置系统重新部署?

Q4:成员登录后看不到菜单?

Q5:能否迁移到新服务器?


十、版本信息