工厂 ERP SaaS 系统里,很多页面看起来像表单和列表,但真正的复杂点不在 CRUD,而在单据状态、权限边界、库存影响和前后端协作。采购入库、销售出库、生产领料、库存盘点这些流程,都不是简单地保存一条记录,而是会影响后续业务动作。
这篇文章整理我在 ERP 项目中参与模块开发和接口联调时的一些理解。
ERP 单据为什么不是普通表单
普通后台表单通常关注字段是否填完整、能不能保存、列表能不能查到。但 ERP 单据还要关注业务动作是否成立。
以采购入库为例,一个入库单可能经历:
- 新建草稿。
- 填写供应商、物料、仓库、数量等信息。
- 提交审核。
- 审核通过后影响库存。
- 后续可能关联财务应付或采购订单状态。
所以页面上的一个按钮,背后可能影响库存、审批、财务、日志和权限。前端不能只管提交表单,还要理解当前状态下用户到底能做什么。
常见单据状态
制造业 ERP 里,单据状态通常会影响页面按钮、字段是否可编辑、列表筛选和接口调用。
一个简化的状态流转可以是:
| 状态 | 含义 | 页面表现 |
|---|---|---|
| 草稿 | 用户正在编辑,还未进入正式流程 | 可编辑、可删除、可提交 |
| 待审核 | 已提交,等待负责人处理 | 大多数字段只读,可撤回或审核 |
| 已审核 | 业务确认生效 | 只读,可进行后续业务动作 |
| 已驳回 | 审核不通过,需要修改 | 可编辑后重新提交 |
| 已作废 | 单据不再有效 | 只读,通常不可继续操作 |
前端要做的不是把所有按钮都放出来,而是根据状态展示当前真正可执行的动作。这样既能减少误操作,也能让用户理解业务流程。
列表、详情和操作区要保持一致
ERP 页面常见问题是:列表显示一个状态,详情页按钮却允许另一个动作,或者操作成功后列表没有刷新,导致用户以为系统没有变化。
比较稳妥的做法是让列表、详情和操作区遵循同一套状态判断:
- 列表用于快速筛选和批量查看状态。
- 详情页展示完整字段、审批记录和操作记录。
- 操作区只展示当前状态下允许的动作。
- 操作成功后刷新详情和列表,避免状态不一致。
如果状态判断只散落在不同页面里,后期维护会很难。即使前端不一定负责全部状态规则,也要和后端约定清楚状态枚举和可操作动作。
权限会影响单据流转
多租户 ERP 还要考虑权限。不同企业、部门和岗位看到的数据不一样,能执行的动作也不一样。
权限通常可以分几层:
- 租户隔离:A 企业不能看到 B 企业的数据。
- 菜单权限:用户是否能进入某个模块。
- 按钮权限:用户是否能新增、审核、作废、导出。
- 数据权限:用户能看全部数据、部门数据,还是自己的数据。
前端页面需要根据权限控制菜单、按钮和操作入口,但真正的数据安全必须由后端兜底。前端隐藏按钮只是体验优化,不能作为权限的唯一依据。
字段、枚举和接口联调
ERP 页面字段多,接口联调时容易出现几个问题:
- 前端字段名和后端字段名不一致。
- 枚举值能保存,但页面展示文案不清楚。
- 搜索条件和分页参数与后端约定不一致。
- 金额、数量、日期等字段格式需要统一。
- 后端校验失败时,前端提示不够具体。
这类问题看起来不难,但会直接影响用户使用。尤其是单据页面,用户经常需要录入大量字段,如果错误提示不清楚,排查成本会很高。
异常提示要贴近业务
ERP 系统里的错误提示不能只写“操作失败”。例如:
- 库存不足,不能销售出库。
- 单据已审核,不能继续编辑。
- 当前用户没有审核权限。
- 物料未维护仓库信息。
- 盘点单已作废,不能再次提交。
这些提示越接近业务,用户越容易自己判断下一步怎么处理。前端在展示错误时,也应该尽量保留后端返回的业务原因,而不是统一吞成通用提示。
前后端协作的重点
ERP 单据流转里,前后端协作最重要的是把“状态”和“动作”说清楚。
我理解比较好的协作方式是:
- 后端定义状态枚举和每个状态允许的业务动作。
- 前端根据状态和权限渲染按钮。
- 所有关键操作都由后端再次校验,避免越权或状态过期。
- 操作完成后返回最新状态,前端刷新页面。
- 异常返回明确业务原因,前端给出可理解提示。
这样可以减少前端猜逻辑,也能避免状态流转在不同页面表现不一致。
收获
ERP 项目让我意识到,企业系统里很多页面不是视觉复杂,而是业务状态复杂。一个单据从草稿到审核再到生效,背后关联权限、库存、财务和流程记录。
前端开发如果只把它当成表单,就很容易忽略业务边界;但如果能理解状态流转和操作规则,就能把页面做得更稳定,也能更好地和后端、测试、业务人员沟通。