前端面试erp项目常问问题

一、 项目经验与业务理解类(必问)

这类问题考察你是否真正参与过 ERP 核心模块开发,而非只做简单的页面展示。

1. 你在 ERP 项目中负责了哪些模块?具体做了什么?
回答思路 :挑 2-3 个核心模块(如采购管理、库存管理、财务管理、生产工单 ),讲清「需求场景 + 技术实现 + 解决的业务痛点」。
示例 :"我负责库存管理模块,包括库存台账查询、出入库单录入、库存预警功能。其中核心是解决海量库存数据的分页与筛选性能 问题,我用了前端虚拟列表 + 接口防抖,把 10 万条数据的渲染时间从 3s 降到了 200ms;另外针对出入库单的表单联动(如选择商品自动带出规格、单价),封装了通用的联动组件,提升了其他模块的复用率。"

2. ERP 系统中,前端如何处理复杂的表单业务?(如采购单、销售单)
回答思路 :从 表单设计、数据联动、校验、提交、回显 五个维度展开。

(1)表单拆分 :复杂表单拆分为子表单组件(如基础信息、商品明细、结算信息),降低耦合;

(2)数据联动 :通过 watch/computed 实现字段联动(如选仓库后过滤商品、数量变化自动算金额);

(3)校验规则 :封装通用校验函数(如手机号、税号、金额格式),支持实时校验 + 提交前统一校验

(4)提交优化 :大表单分批次提交(如基础信息和商品明细分开接口),添加加载状态防止重复提交;

(5)回显处理 :编辑页从接口获取数据后,处理空值、枚举值映射(如 0→未审核,1→已审核)。

3. ERP 中的权限管理你是怎么做的?前端如何控制页面、按钮级别的权限?
回答思路 :结合后端返回的权限数据,从 路由、页面、按钮 三层控制。

核心实现:

(1)路由权限 :登录后获取用户权限列表,通过 router.beforeEach 拦截,无权限则跳 403;动态生成路由(addRoute),避免无权限路由注册;

(2)页面权限 :根据用户角色(如管理员、采购专员),控制页面某些模块的显示 / 隐藏(如 v-if="permission.includes('stock:edit')");

(3)按钮权限 :封装 v-permission 指令,传入权限码(如 stock:delete),指令内部判断用户权限,无权限则移除按钮或置灰;

数据权限:前端配合后端,在接口请求时携带用户的数据范围(如只能看本部门的单据),后端返回对应数据。

二、技术栈与核心难点类

这类问题考察你解决 ERP 项目技术痛点的能力,比如大数据渲染、性能优化、状态管理

1. ERP 系统数据量很大(如几万条单据列表),前端如何优化渲染性能?
回答思路 :从 数据请求、列表渲染、缓存 三个层面优化,这是 ERP 面试的高频重点。

(1)请求层 :分页查询(后端分页 + 前端分页)、筛选条件防抖(500ms 延迟)、只请求必要字段(避免返回冗余数据);

(2)渲染层 :使用虚拟列表(如 vue-virtual-scroller/react-window),只渲染可视区域的 DOM;列表懒加载,滚动到底部自动加载下一页;

(3)缓存层 :列表数据缓存到 sessionStorage,相同筛选条件下直接复用,避免重复请求;

(4)其他优化 :关闭列表的 watch 深度监听、避免复杂的单元格计算(如用 computed 缓存计算结果)。

2. ERP 中大量的表单和列表,你是如何做组件复用的?
回答思路 :提炼通用组件 + 封装业务组件,区分「通用型」和「业务型」。

(1)通用基础组件 :封装 BaseInputBaseSelectBaseTable,支持自定义 props(如校验规则、下拉选项、列配置);

(2)业务通用组件 :针对 ERP 高频场景,封装 GoodsSelector(商品选择器,带模糊搜索、分类筛选)、DateRangePicker(日期范围选择,支持快捷选项如「近 7 天」「本月」)、BillStatusTag(单据状态标签,统一样式);

(3)页面级复用:相同的表单结构(如出入库单),抽离为 BillForm 组件,通过传入模板配置(如不同单据的字段差异)实现复用。

3. ERP 项目的状态管理你是怎么设计的?用 Vuex/Pinia/Redux 解决了什么问题?
回答思路 :按模块划分状态,区分「全局状态」和「页面状态」,避免状态混乱。

(1)全局状态 :用户信息、权限列表、全局字典(如商品分类、单据状态枚举),存在 Pinia/Vuex 中,所有模块共享;

(2)业务模块状态 :如库存模块的「当前选中仓库」「筛选条件」,按模块拆分 store(如 stockStore),避免全局 store 臃肿;

(3)页面级状态 :如表单的临时数据、列表的分页参数,直接存在组件内部(ref/useState),无需放入全局 store;

(4)解决的问题 :避免了组件之间的 props 层层传递(如商品选择器选择后,同步到父表单),统一管理全局字典的加载与更新。

4. ERP 中如何处理数据的导入导出?比如 Excel 导入商品信息。
回答思路 :讲清「前端解析 Excel + 数据校验 + 批量提交」的流程。

(1)导入 :使用 xlsx 库解析用户上传的 Excel 文件,转为 JSON 数据;对解析后的数据做前端校验(如必填项、数据格式、重复项),生成校验报告(哪些行有误);校验通过后,批量提交到后端(分批次提交,避免单次请求数据过大);

(2)导出 :后端返回导出接口(通常是下载链接),前端触发下载;或前端用 xlsx 生成 Excel(适合少量数据),注意处理大文件导出(前端生成易卡顿,建议后端生成);

(3)体验优化:添加导入导出的进度条,失败时给出明确的错误提示。

三、 性能与稳定性类

ERP 系统是企业核心系统,对稳定性和性能要求高,面试官会关注这类问题。

1. 前端如何保证 ERP 系统的稳定性?比如接口请求失败、网络异常怎么处理?
回答思路 :从 请求拦截、错误处理、降级方案 展开。

(1)请求拦截 :封装 Axios 请求拦截器,统一添加 token处理请求参数;响应拦截器统一处理错误(如 401 跳转登录、403 无权限提示);

(2)错误重试 :对非核心接口(如统计数据)添加失败重试(1-2 次),核心接口(如提交单据)不重试,避免重复提交;

(3)离线处理 :关键操作(如单据录入)可结合 localStorage 做本地缓存,网络恢复后自动同步到后端;

兜底提示:接口报错时,给出友好提示(如「服务器繁忙,请稍后重试」),并记录错误日志(接入 Sentry),方便排查问题。

2. ERP 系统的首屏加载如何优化?
回答思路 :结合之前提到的静态资源优化、路由懒加载、接口优化,针对 ERP 特点补充。
核心要点

(1)路由懒加载 :按模块拆分路由(如 /purchase /stock),只加载当前页面的 JS 代码;

(2)预加载核心数据 :登录后提前加载全局字典(如枚举值),缓存到 store,避免各页面重复请求;

(3)骨架屏 :列表 / 表单页面添加骨架屏,减少用户等待的感知;

(4)静态资源优化 :JS/CSS 压缩、CDN 部署、第三方库按需引入(如 Element UI 按需加载组件)。

四、 场景设计类

这类问题考察你的业务设计能力,面试官会给出一个具体场景,让你设计解决方案。

1. 如果让你设计一个 ERP 的「单据审批」模块,前端需要考虑哪些点?

回答思路:从 流程设计、权限、交互、状态 四个维度展开。

(1)流程支持 :支持多级审批(如专员→主管→经理),前端根据后端返回的审批节点,动态渲染审批按钮(同意 / 驳回);

(2)权限控制 :不同角色看到的按钮不同(如审批人能同意,申请人只能撤回);

(3)交互体验 :审批时支持填写意见;审批状态实时更新(可结合 WebSocket 实现推送);

(4)状态管理:单据的审批状态(待审批、审批中、已同意、已驳回)需要和后端保持一致,避免前端状态错乱。

相关推荐
小陈phd2 小时前
langGraph从入门到精通(十一)——基于langgraph构建复杂工具应用的ReAct自治代理
前端·人工智能·react.js·自然语言处理
cyforkk2 小时前
05、Java 基础硬核复习:数组的本质与面试考点
java·开发语言·面试
2 小时前
ubuntu 通过ros-noetic获取RTK模块的nmea格式数据
java·前端·javascript
橘橙黄又青2 小时前
List和Map篇
java·开发语言·面试
&活在当下&2 小时前
uniapp 选择城市区号索引列表实现
前端·uni-app
阿珊和她的猫2 小时前
简述 React 的虚拟 DOM 机制
前端·react.js·前端框架
梵得儿SHI2 小时前
Vue 高级特性:混入(Mixin)使用场景与问题、Vue3 组合式 API 替代方案精讲
前端·javascript·vue.js·组合式api·参数传递·mixin机制·显式调用
qq_336313932 小时前
javaweb-HTML和CSS(2)
前端·css·html
阿蒙Amon2 小时前
C#每日面试题-简述类型实例化底层过程
java·面试·c#