菜单脚本链接自定义页面¶
本文档内容来源于 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 +
"¶m1=" + param1 +
"¶m2=" + 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(): 获取当前应用IDgetWebUser().getDomainid(): 获取当前用户的域IDgetParamsTable().getHttpRequest(): 获取HTTP请求对象request.getScheme(): 获取请求协议(http/https)request.getServerName(): 获取服务器名称request.getServerPort(): 获取服务器端口Security.getToken(userId): 获取用户访问令牌getParameter("参数名"): 获取URL参数encodeURIComponent(str): URL编码
自定义页面URL格式说明¶
基本格式¶
常用参数¶
- pageId: 自定义页面ID(必需)
- appId: 应用ID(必需)
- domainId: 域ID(必需)
- preview: 预览模式(true/false)
- accessToken: 访问令牌(可选)
- returnUrl: 返回地址(可选)
- 其他自定义参数
注意事项¶
- ⚠️ 页面ID: 确保页面ID正确,否则无法跳转
- ⚠️ URL编码: 参数值包含特殊字符时需要URL编码
- ⚠️ Token: 如果需要权限验证,建议添加Token
- ⚠️ 错误处理: 建议添加try-catch进行错误处理
- ⚠️ 参数传递: 注意参数的长度限制
- ⚠️ 安全性: 敏感参数不要通过URL传递
- 自定义页面需要在平台中预先创建
- URL参数可以通过页面脚本获取
- 建议使用HTTPS协议提高安全性
使用场景¶
- 菜单跳转到自定义页面
- 根据条件跳转不同页面
- 传递参数到自定义页面
- 实现复杂的页面跳转逻辑
- 系统集成和页面导航
如需查看完整脚本代码,请访问源文档链接。