很多制造业、化工、能源企业都知道,EHS(Environment、Health、Safety)系统能帮公司统一管理环境保护、职业健康和安全生产。但在实际落地中,“事故管理”往往是企业最迫切需要数字化的板块之一。 原因很简单:
- 纸质记录和Excel管理事故,查询效率低
- 事故跟踪不及时,整改落实难
- 统计分析靠人工,延迟高
- 审计和合规检查中,数据查找费时费力
而事故管理板块的核心价值,就是让事故事件从发生到关闭的全生命周期都有记录、有跟踪、有分析。
本文你将了解
- 功能模块拆解
- 业务流程图
- 系统架构设计
- 整合代码示例(前端+后端+数据库)
- 开发技巧与注意事项
- 实现效果与价值
- FAQ
一、什么是 EHS 事故管理板块
在一套标准的 EHS 系统中,事故管理板块主要负责:
- 事故事件登记(员工或管理员可以提交事故事件,记录发生时间、地点、类型、原因等)
- 事故处理跟踪(分配处理人、制定整改措施、跟踪进度)
- 事故看板展示(用可视化方式展示事故状态、类型分布、趋势)
- 事故分析统计(分析事故发生原因、频率、部门分布)
- 权限与审批(不同角色看到的内容不同,有的能登记、有的能审批)
二、业务流程图
1. 功能模块拆解
1.1 事故事件登记
- 表单包含:事故时间、地点、类型(人身、设备、环境等)、原因描述、照片/视频上传
- 自动生成事故编号
- 提交后进入待审核状态
1.2 事故管理看板
- 按状态分类(待审核、处理中、已关闭)
- 支持按部门、事故类型、时间范围过滤
- 数据可导出 Excel/PDF
1.3 事故处理与跟踪
- 管理员分配责任人
- 制定整改措施和完成期限
- 系统自动提醒逾期未处理的事故
1.4 分析与统计
- 月度事故趋势图
- 部门事故占比饼图
- 原因分类统计
1.5 权限与审批
- 普通员工:可登记事故
- 部门经理:可审核、分配责任人
- 安全主管:可查看全部数据、导出分析报告
2.业务流程图
css
[事故发生]
↓
[员工提交事故登记表]
↓
[部门经理审核 → 退回修改 或 分配责任人]
↓
[责任人整改并提交整改报告]
↓
[安全主管复核]
↓
[关闭事故/存档]
三、系统架构设计
bash
┌──────────────────┐
│ 前端(Vue3) │
│ - 登记表单 │
│ - 看板可视化 │
│ - 数据分析图表 │
└─────────┬────────┘
│ REST API
┌─────────▼────────┐
│ 后端(Node.js) │
│ - API 接口层 │
│ - 业务逻辑层 │
│ - 权限认证 JWT │
└─────────┬────────┘
│ SQL
┌─────────▼────────┐
│ 数据库(MySQL) │
│ - accident │
│ - users │
│ - dept │
└──────────────────┘
四、整合代码示例(前端+后端+数据库)
以下示例是一个简化版,可运行的事故管理模块代码,包含前端(Vue3)、后端(Node.js Express)、数据库(MySQL)三部分。
javascript
/* === 数据库 SQL === */
-- 创建用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
role ENUM('employee','manager','supervisor')
);
-- 创建事故表
CREATE TABLE accident (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
description TEXT,
type ENUM('person','equipment','environment'),
location VARCHAR(100),
status ENUM('pending','in_progress','closed') DEFAULT 'pending',
reporter_id INT,
assigned_to INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
/* === 后端 Node.js Express === */
const express = require('express');
const mysql = require('mysql2/promise');
const app = express();
app.use(express.json());
const db = mysql.createPool({ host: 'localhost', user: 'root', password: '123456', database: 'ehs' });
// 提交事故
app.post('/accidents', async (req, res) => {
const { title, description, type, location, reporter_id } = req.body;
const [result] = await db.execute(
'INSERT INTO accident (title, description, type, location, reporter_id) VALUES (?,?,?,?,?)',
[title, description, type, location, reporter_id]
);
res.json({ id: result.insertId, message: '事故已提交' });
});
// 获取事故列表
app.get('/accidents', async (req, res) => {
const [rows] = await db.execute('SELECT * FROM accident ORDER BY created_at DESC');
res.json(rows);
});
// 更新事故状态
app.put('/accidents/:id/status', async (req, res) => {
const { status, assigned_to } = req.body;
await db.execute('UPDATE accident SET status=?, assigned_to=? WHERE id=?', [status, assigned_to, req.params.id]);
res.json({ message: '状态已更新' });
});
app.listen(3000, () => console.log('Server running on port 3000'));
/* === 前端 Vue3 === */
import { ref, onMounted } from 'vue';
const form = ref({ title: '', description: '', type: 'person', location: '', reporter_id: 1 });
const accidents = ref([]);
async function submitAccident() {
await fetch('/accidents', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(form.value) });
loadAccidents();
}
async function loadAccidents() {
const res = await fetch('/accidents');
accidents.value = await res.json();
}
onMounted(loadAccidents);
五、开发技巧与注意事项
- 数据校验必须做在前后端(防止用户绕过前端直接调接口)
- 状态流转要固定流程(比如 pending → in_progress → closed,不能反向跳过)
- 图片/附件上传建议用云存储
- 事故编号自动生成,方便追踪
- 看板图表建议用 ECharts 或 Chart.js
六、实现效果与价值
- 事故登记效率提升 70% 以上
- 数据分析实时可见
- 管理者可在手机端直接审批
- 审计时只需几分钟导出报告
七、FAQ
Q1:事故管理系统一定要和 EHS 系统一起做吗? A1:不一定。小企业可以先单独做事故管理模块,后期再和EHS其他模块集成。但如果有预算,建议直接搭在EHS体系内,这样权限、数据标准化会更统一,减少后续二次开发成本。
Q2:怎么保证数据安全? A2:数据安全要从三方面入手:1)账号权限分级,不同角色只能访问对应范围的数据;2)数据库定期备份,最好异地备份;3)传输用 HTTPS,敏感字段加密存储,比如人员身份证号、联系方式等。
Q3:事故分析怎么做才有价值? A3:分析不仅是做统计图,更关键的是让结果能指导行动。比如统计发现“夜班设备事故率高”,那下一步就可以调整夜班巡检频率或加强夜班培训,而不是只是做一份漂亮的饼图。