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