找回密码
 注册成为天翎用户
查看: 644|回复: 2

[已解决] 弹框移动,或者定位它的位置

[复制链接]
ZSH 发表于 2020-9-4 16:21:39 | 显示全部楼层 |阅读模式
myApps/OBPM版本号】:
【系统版本】:WeiOA365 2.0_UPGRADE
【浏览器类型】:Chrome
【联系方式-QQ】:446126676
【问题描述】
弹出的框可以移动或者让他靠左或者靠右吗?
 楼主| ZSH 发表于 2020-9-4 16:24:07 | 显示全部楼层
     var js = "OBPM.dialog.show({opener:window.parent,title:'地图详情',url:'"+url+"',width:880,height:880,close:function(){}})";                              
                                     var btn="<a onclick="+js+" style='color:blue'>地图</a>";                              
回复

使用道具 举报

admin 发表于 昨天 04:44 | 显示全部楼层
【本回复由 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/
回复

使用道具 举报

本版积分规则

手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-15 04:32

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表