前端-组件渲染-el-select-teleported下拉被遮罩遮挡
问题现象
el-dialog内嵌el-select,点击下拉按钮后无任何反应,下拉面板不出现- 并非选项为空,而是整个浮层不可见
- 控制台无报错,API 数据正常返回
核心问题
- Element Plus 的
el-select默认teleported=true,下拉浮层渲染到document.body - 浮层默认 z-index 低于
el-dialog的遮罩层(通常 backdrop z-index 为对话框 z-index 减 1) - 当对话框设置了
append-to-body+ 高z-index(如 9999),下拉浮层被遮罩遮挡,交互不可见 - 本项目涉及 Element Plus 2.6.x,所有对话框内的
el-select都可能受此影响
涉及文件:web/admin/src/views/modules/insurance/location-manage.vue
解决方法
给对话框内所有 el-select 添加 :teleported="false",让浮层留在对话框 DOM 内:
<!-- 修复前 -->
<el-select v-model="form.company_id" filterable placeholder="请选择公司" style="width:100%">
<!-- 修复后 -->
<el-select v-model="form.company_id" filterable placeholder="请选择公司" style="width:100%" :teleported="false">
下次防错措施
- 快速定位:打开 DevTools Elements 面板,搜索
.el-select-dropdown或.el-popper,看浮层是否在body下而非对话框内;F12 强制修改浮层 z-index 为 10000 可快速验证 - 开发规范:项目中所有
el-dialog(尤其设置了append-to-body或自定义 z-index 的)内的el-select、el-date-picker、el-cascader等弹出类组件,统一加:teleported="false" - ESLint 规则:可自定义规则检测
el-dialog内的el-select是否缺少teleported属性 - 复查范围:全局搜索其他有
el-dialog且含el-select的页面,逐一添加rg 'el-dialog' web/admin/src --files-with-matches | xargs rg 'el-select' -l