|
|
【本回复由 AI 根据产品文档自动生成】
您好,关于"OBPM 平台弹出框是否可以移动或定位位置",可以——平台弹出框(dialog)底层是基于 jQuery EasyUI / 自研 dialog 组件实现的,支持通过配置或脚本控制位置。下面分 3 种场景说明。
## 一、内置弹框的定位配置
平台【表单—操作—打开表单/打开视图】等内置弹框动作,在【动作属性】中通常有"位置"或"窗口模式"设置:
- 居中(默认)
- 自适应
- 指定坐标
如果当前版本属性面板没有直接的位置选项,可通过动作的【前置脚本】或【后置脚本】用 JS 控制。
## 二、通过脚本控制弹框位置(通用方法)
平台弹框渲染后,DOM 容器通常是 `.dialog-window` / `.window` / `[role=dialog]`,可用 jQuery 调整 `left`、`top`:
### 方案 1:靠左/靠右
```javascript
(function(){
// 等弹框渲染完成后调整位置
setTimeout(function(){
var $win = $(".window:visible").last();
if ($win.length === 0) return;
var width = $win.outerWidth();
var bodyW = $(window).width();
// 靠左:left=20;靠右:left=bodyW-width-20
$win.css({
left: "20px", // 靠左
// left: (bodyW - width - 20) + "px", // 靠右
top: "60px",
margin: 0
});
// 遮罩层跟随
$(".window-mask:visible").css({opacity: 0.3});
}, 300);
})();
```
把这段放在【触发弹框的按钮—事件脚本】或【表单—加载脚本】中。
### 方案 2:让弹框可拖动(平台默认就支持)
OBPM 的 dialog 默认标题栏可拖动——直接鼠标按住弹框标题栏拖到任意位置即可。如果您说的"移动"是指手动拖动,标题栏拖动是开箱即用的。如果拖不动,可能是:
- 自定义样式中 `pointer-events` 被禁用
- 弹框被嵌套在了 iframe 中(跨 iframe 拖动会失效)
- jQuery EasyUI 的 `draggable: false` 被设置
排查方向:F12 看 `.window` 元素是否有 `draggable` 类。
### 方案 3:完全自定义弹框
如果内置弹框限制太多,可以用 iScript + 自定义 HTML 弹出层:
```javascript
(function(){
var html = '<div id="myDlg" style="position:fixed;left:100px;top:100px;width:400px;background:#fff;border:1px solid #ccc;z-index:9999;padding:20px;">'
+ '自定义内容 <button onclick="document.getElementById(\'myDlg\').remove()">关闭</button>'
+ '</div>';
$(html).appendTo("body");
})();
```
完全可控位置、大小、是否可拖(可自行加 `mousedown` 实现拖动)。
## 三、嵌入式场景(iframe 里的弹框)
如果表单嵌在 iframe 里,弹框只会在 iframe 范围内显示,看起来"位置不能控制"。处理:
- 用 `parent.$` 操作父窗口 DOM,把弹框提到父级
- 或在【外部参数】里指定弹框宽度/高度,避免被 iframe 裁剪
## 四、推荐做法
1. **首选**:通过【动作属性】里的"窗口模式/位置"配置(如有)
2. **次选**:动作后置脚本 + jQuery `.window` 调整 left/top
3. **末选**:自定义 HTML 弹层
## 五、需要您补充的信息
为精准给方案,请告知:
1. 弹框是如何触发的(按钮动作 / 链接 / 脚本 `createDialog()` ?)
2. OBPM 版本号(WeiOA365 2.0_UPGRADE 具体底层版本?)
3. "靠左/靠右"是希望固定位置,还是用户可手动拖动?
4. 弹框内是嵌入视图还是嵌套表单?
参考文档:
- 平台脚本与控件:http://docs.myapps.cn/ |
|