@ -208,22 +208,34 @@ setupVbenVxeTable({
}
function renderConfirm ( opt : Recordable < any > ) {
let viewportWrapper : HTMLElement | null = null ;
return h (
Popconfirm ,
{
getPopupContainer ( el ) {
return (
el
. closest ( '.vxe-table--viewport-wrapper' )
? . querySelector ( '.vxe-table--main-wrapper' )
? . querySelector ( 'tbody' ) || document . body
) ;
/ * *
* 当 popconfirm 用 在 固 定 列 中 时 , 将 固 定 列 作 为 弹 窗 的 容 器 时 可 能 会 因 为 固 定 列 较 窄 而 无 法 容 纳 弹 窗
* 将 表 格 主 体 区 域 作 为 弹 窗 容 器 时 又 会 因 为 固 定 列 的 层 级 较 高 而 遮 挡 弹 窗
* 将 body 或 者 表 格 视 口 区 域 作 为 弹 窗 容 器 时 又 会 导 致 弹 窗 无 法 跟 随 表 格 滚 动 。
* 鉴 于 以 上 各 种 情 况 , 一 种 折 中 的 解 决 方 案 是 弹 出 层 展 示 时 , 禁 止 操 作 表 格 的 滚 动 条 。
* 这 样 既 解 决 了 弹 窗 的 遮 挡 问 题 , 又 不 至 于 让 弹 窗 随 着 表 格 的 滚 动 而 跑 出 视 口 区 域 。
* /
getPopupContainer() {
viewportWrapper = el . closest ( '.vxe-table--viewport-wrapper' ) ;
return document . body ;
} ,
placement : 'topLeft' ,
title : $t ( 'ui.actionTitle.delete' , [ attrs ? . nameTitle || '' ] ) ,
. . . props ,
. . . opt ,
icon : undefined ,
onOpenChange : ( open : boolean ) = > {
// 当弹窗打开时,禁止表格的滚动
if ( open ) {
viewportWrapper ? . style . setProperty ( 'pointer-events' , 'none' ) ;
} else {
viewportWrapper ? . style . removeProperty ( 'pointer-events' ) ;
}
} ,
onConfirm : ( ) = > {
attrs ? . onClick ? . ( {
code : opt.code ,