跳转至

菜单脚本链接自定义页面

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4h81jlsq9

脚本说明

该脚本用于在菜单中通过脚本链接到自定义页面。在MyApps平台中,可以通过菜单脚本返回URL,实现跳转到自定义页面。

常见实现方式

方式1:基本自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId;

    return url;
})();

方式2:带参数的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();
    var param1 = "参数1值";
    var param2 = "参数2值";

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&param1=" + param1 +
              "&param2=" + param2;

    return url;
})();

方式3:带预览模式的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&preview=true";

    return url;
})();

方式4:带Token的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();
    var userId = getWebUser().getId();

    // 获取Token
    var Security = new Packages.cn.myapps.common.util.Security();
    var token = Security.getToken(userId);

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&accessToken=" + token;

    return url;
})();

扩展示例

示例1:根据条件跳转不同页面

(function(){
    var currentUser = getWebUser();
    var userRole = "";
    var roles = currentUser.getRoles();

    if(roles != null && roles.size() > 0){
        userRole = roles.get(0).getName();
    }

    var pageId = "";
    var applicationId = getApplication();
    var domainId = currentUser.getDomainid();

    // 根据角色选择不同的页面
    if(userRole === "管理员"){
        pageId = "管理员页面ID";
    }else if(userRole === "普通用户"){
        pageId = "普通用户页面ID";
    }else{
        pageId = "默认页面ID";
    }

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId;

    return url;
})();

示例2:从文档获取参数并跳转

(function(){
    var doc = getCurrentDocument();
    var docId = doc.getId();
    var docType = doc.getItemValueAsString("类型字段");

    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&docId=" + docId +
              "&docType=" + docType;

    return url;
})();

示例3:新窗口打开自定义页面

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId;

    // 返回带新窗口打开的脚本
    var html = "<script>window.open('" + url + "', '_blank');</script>";

    return html;
})();

示例4:带返回地址的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    var request = getParamsTable().getHttpRequest();
    var currentUrl = request.getRequestURL().toString();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&returnUrl=" + encodeURIComponent(currentUrl);

    return url;
})();

示例5:根据部门跳转不同页面

(function(){
    var currentUser = getWebUser();
    var department = currentUser.getDepartment();
    var departmentId = department != null ? department.getId() : "";

    var pageId = "";
    var applicationId = getApplication();
    var domainId = currentUser.getDomainid();

    // 根据部门选择不同的页面
    if(departmentId === "部门ID1"){
        pageId = "部门1页面ID";
    }else if(departmentId === "部门ID2"){
        pageId = "部门2页面ID";
    }else{
        pageId = "默认页面ID";
    }

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId;

    return url;
})();

示例6:带时间戳的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();
    var timestamp = new Date().getTime();

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId +
              "&t=" + timestamp;

    return url;
})();

示例7:错误处理和日志记录

(function(){
    var pageId = "自定义页面ID";

    try{
        if(pageId == null || pageId.trim().length == 0){
            throw new Error("页面ID不能为空");
        }

        var applicationId = getApplication();
        var domainId = getWebUser().getDomainid();

        var request = getParamsTable().getHttpRequest();
        var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

        var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
                  "&appId=" + applicationId + 
                  "&domainId=" + domainId;

        println("生成自定义页面链接: " + url);

        return url;
    }catch(e){
        println("错误: " + e.getMessage());
        return "#";
    }
})();

示例8:带查询参数的自定义页面链接

(function(){
    var pageId = "自定义页面ID";
    var applicationId = getApplication();
    var domainId = getWebUser().getDomainid();

    // 从URL参数获取查询条件
    var searchKeyword = getParameter("keyword");
    var searchType = getParameter("type");

    var request = getParamsTable().getHttpRequest();
    var baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort();

    var url = baseUrl + "/static/portal/vue/pageIndexHtml/index.html#/?pageId=" + pageId + 
              "&appId=" + applicationId + 
              "&domainId=" + domainId;

    if(searchKeyword != null && searchKeyword.trim().length > 0){
        url += "&keyword=" + encodeURIComponent(searchKeyword);
    }

    if(searchType != null && searchType.trim().length > 0){
        url += "&type=" + encodeURIComponent(searchType);
    }

    return url;
})();

关键函数说明

  • getApplication(): 获取当前应用ID
  • getWebUser().getDomainid(): 获取当前用户的域ID
  • getParamsTable().getHttpRequest(): 获取HTTP请求对象
  • request.getScheme(): 获取请求协议(http/https)
  • request.getServerName(): 获取服务器名称
  • request.getServerPort(): 获取服务器端口
  • Security.getToken(userId): 获取用户访问令牌
  • getParameter("参数名"): 获取URL参数
  • encodeURIComponent(str): URL编码

自定义页面URL格式说明

基本格式

/static/portal/vue/pageIndexHtml/index.html#/?pageId={页面ID}&appId={应用ID}&domainId={域ID}

常用参数

  • pageId: 自定义页面ID(必需)
  • appId: 应用ID(必需)
  • domainId: 域ID(必需)
  • preview: 预览模式(true/false)
  • accessToken: 访问令牌(可选)
  • returnUrl: 返回地址(可选)
  • 其他自定义参数

注意事项

  • ⚠️ 页面ID: 确保页面ID正确,否则无法跳转
  • ⚠️ URL编码: 参数值包含特殊字符时需要URL编码
  • ⚠️ Token: 如果需要权限验证,建议添加Token
  • ⚠️ 错误处理: 建议添加try-catch进行错误处理
  • ⚠️ 参数传递: 注意参数的长度限制
  • ⚠️ 安全性: 敏感参数不要通过URL传递
  • 自定义页面需要在平台中预先创建
  • URL参数可以通过页面脚本获取
  • 建议使用HTTPS协议提高安全性

使用场景

  • 菜单跳转到自定义页面
  • 根据条件跳转不同页面
  • 传递参数到自定义页面
  • 实现复杂的页面跳转逻辑
  • 系统集成和页面导航

如需查看完整脚本代码,请访问源文档链接。