伊利项目【架构筛选功能重构】

This commit is contained in:
qinoy 2022-07-22 09:57:17 +08:00
parent ab47b1ed82
commit 49c224f06d
10 changed files with 312 additions and 73 deletions

View File

@ -7769,44 +7769,76 @@ public class CoeProcessLevelWeb extends ActionWeb {
JSONArray orgIdList = UtilString.isNotEmpty(orgIds) ? JSONArray.parseArray(orgIds) : new JSONArray();
JSONArray methodIdList = UtilString.isNotEmpty(methodIds) ? JSONArray.parseArray(methodIds) : new JSONArray();
JSONArray result = PALRepositoryQueryAPIManager.getInstance().getUsedPalRepositoryTreeDataByPidNew(_uc, wsId, teamId, pid);
// 先过滤掉空的架构与空的文件夹
if (createUserList.size() > 0 || orgIdList.size() > 0 || methodIdList.size() > 0) {
result = result.stream().filter(model -> {
boolean flag = true;
if (!("itsystem.normal".equals(((JSONObject)model).getString("plMethodId")) || "org.normal".equals(((JSONObject)model).getString("plMethodId")))) {
if ("process.framework".equals(((JSONObject)model).getString("plMethodId")) || "default".equals(((JSONObject)model).getString("plMethodId"))){
flag = this.filterEmptyMoldel(((JSONObject)model).getString("wsId"),((JSONObject)model).getString("currId"));
}
}
return flag;
}).collect(Collectors.toCollection(JSONArray::new));
}
// 根据文件类型过滤
if (methodIdList.size() > 0) {
result = result.stream()
.filter(item -> {
// 小组下 判断当前用户在当前文件夹是否有新建权限
boolean flag = true;
if (UtilString.isNotEmpty(teamId) && "default".equals(((JSONObject)item).getString("plMethodId"))) {
Set<String> userOperatePermission = CooperationCache.getUserOperatePermission(teamId, _uc.getUID());
flag = userOperatePermission.contains(CoeCooperationConst.ACTION_CREATE_PROCESS);
if ("itsystem.normal".equals(((JSONObject)item).getString("plMethodId")) || "org.normal".equals(((JSONObject)item).getString("plMethodId"))) {
return true;
}
boolean flag = false;
if ("process.framework".equals(((JSONObject)item).getString("plMethodId")) || "default".equals(((JSONObject)item).getString("plMethodId"))){
// 递归判断当前架构下是否有符合的文件类型
flag = this.filterChildLevelModelByPid(((JSONObject)item).getString("wsId"), ((JSONObject)item).getString("currId"),methodIdList);
}else {
flag = methodIdList.contains(((JSONObject)item).getString("plMethodId"));
}
return flag;
})
.filter(item -> methodIdList.contains(((JSONObject)item).getString("plMethodId"))
|| "default".equals(((JSONObject)item).getString("plMethodId")) || "process.framework".equals(((JSONObject)item).getString("plMethodId")))
.collect(Collectors.toCollection(JSONArray::new));
}
// 根据创建人过滤
if (createUserList.size() > 0) {
JSONArray tempArr = new JSONArray();
for (Object o : result) {
JSONObject tempObj = (JSONObject) o;
if (createUserList.contains(tempObj.getString("createUser"))){
tempArr.add(tempObj);
}
}
result = tempArr;
result = result.stream()
.filter(item -> {
if ("itsystem.normal".equals(((JSONObject)item).getString("plMethodId")) || "org.normal".equals(((JSONObject)item).getString("plMethodId"))) {
return true;
}
boolean flag = false;
if (createUserList.contains(((JSONObject)item).getString("createUser")) || createUserList.contains(((JSONObject)item).getString("modifyUser"))) {
flag = true;
}
return flag;
})
.collect(Collectors.toCollection(JSONArray::new));
}
// 根据组织架构过滤
if (orgIdList.size() > 0) {
Set<String> userIds = new HashSet<>();
for (Object o : orgIdList) {
String orgId = (String) o;
List<UserModel> userModels = SDK.getORGAPI().getUsersByDepartment(orgId);
userModels.stream().forEach(user -> userIds.add(user.getUID()));
}
createUserList.stream().forEach(userId -> userIds.add((String) userId));
result = result.stream()
.filter(model -> userIds.contains(((JSONObject)model).getString("createUser")) || userIds.contains(((JSONObject)model).getString("modifyUser")))
.filter(item -> {
boolean flag = false;
JSONObject itemObj = (JSONObject) item;
if ("itsystem.normal".equals(itemObj.getString("plMethodId")) || "org.normal".equals(itemObj.getString("plMethodId"))) {
return true;
}
if ("process.framework".equals(itemObj.getString("plMethodId")) || "default".equals(itemObj.getString("plMethodId"))){
flag = this.filterIsMatchPropertyModel(itemObj.getString("wsId"),itemObj.getString("currId"),orgIdList);
}else {
List<DesignerShapeRelationModel> relationModels = DesignerShapeRelationCache.getByFileId(itemObj.getString("currId"), "Issuing_department");
// 是否有发布部门的文件属性可能会有多个值
if (relationModels != null && relationModels.size() > 0) {
for (DesignerShapeRelationModel relationModel : relationModels) {
JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText());
String deptId = relationObj.getString("id");
flag = orgIdList.contains(deptId);
if (flag) break;
}
}
}
return flag;
})
.collect(Collectors.toCollection(JSONArray::new));
}
ro.setData(result);
@ -8898,23 +8930,73 @@ public String deleteReply(String replyid, String messageid) {
JSONObject methodIcons = new JSONObject();
// 获取最近编辑的文件
List<PALRepositoryModel> recentList = CoeProcessLevelUtil.getRecentUpdateRepositoryList(wsId, teamId, _uc.getUID(), null, null, 30);
// 伊利需求--所选用户创建作为创建人的流程当前用户所拥有流程权限的交集
// 伊利需求架构筛选不过滤组织图与IT系统图
// 先过滤掉空的架构与空的文件夹
if (createUserList.size() > 0 || orgIdList.size() > 0 || methodIdList.size() > 0) {
recentList = recentList.stream().filter(model -> {
boolean flag = true;
if (!("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId()))) {
if ("process.framework".equals(model.getMethodId()) || "default".equals(model.getMethodId())){
flag = this.filterEmptyMoldel(model.getWsId(),model.getId());
}
}
return flag;
}).collect(Collectors.toList());
}
if (methodIdList.size() > 0) {
recentList = recentList.stream()
.filter(model -> methodIdList.contains(model.getMethodId()) || "process.framework".equals(model.getMethodId())).collect(Collectors.toList());
.filter(model -> {
boolean flag = false;
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
// 代表架构伊利专属需求
if ("process.framework".equals(model.getMethodId()) || "default".equals(model.getMethodId())){
// 递归判断当前架构下是否有符合的文件类型
flag = this.filterChildLevelModelByPid(model.getWsId(), model.getId(),methodIdList);
}else {
flag = methodIdList.contains(model.getMethodId());
}
return flag;
}).collect(Collectors.toList());
}
// 如果勾选了创建人则用创建人与模型的创建人与修改人匹配
if (createUserList.size() > 0) {
recentList = recentList.stream().filter(model -> createUserList.contains(model.getCreateUser())).collect(Collectors.toList());
recentList = recentList.stream().filter(model -> {
boolean flag = false;
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
if (createUserList.contains(model.getCreateUser()) || createUserList.contains(model.getModifyUser())) {
flag = true;
}
return flag;
}).collect(Collectors.toList());
}
// 如果勾选了组织机构则根据文件属性中的发布部门去匹配
if (orgIdList.size() > 0) {
Set<String> userIds = new HashSet<>();
for (Object o : orgIdList) {
String orgId = (String) o;
List<UserModel> userModels = SDK.getORGAPI().getUsersByDepartment(orgId);
userModels.stream().forEach(user -> userIds.add(user.getUID()));
}
createUserList.stream().forEach(userId -> userIds.add((String) userId));
recentList = recentList.stream().filter(model -> userIds.contains(model.getCreateUser()) || userIds.contains(model.getModifyUser())).collect(Collectors.toList());
recentList = recentList.stream()
.filter(model -> {
boolean flag = false;
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
if ("process.framework".equals(model.getMethodId()) || "default".equals(model.getMethodId())){
flag = this.filterIsMatchPropertyModel(model.getWsId(),model.getId(),orgIdList);
}else {
List<DesignerShapeRelationModel> relationModels = DesignerShapeRelationCache.getByFileId(model.getId(), "Issuing_department");
// 是否有发布部门的文件属性可能会有多个值
if (relationModels != null && relationModels.size() > 0) {
for (DesignerShapeRelationModel relationModel : relationModels) {
JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText());
String deptId = relationObj.getString("id");
flag = orgIdList.contains(deptId);
if (flag) break;
}
}
}
return flag;
}).collect(Collectors.toList());
}
JSONArray recentData = new JSONArray();
for (PALRepositoryModel model: recentList) {
@ -8984,21 +9066,69 @@ public String deleteReply(String replyid, String messageid) {
}
// 获取收藏的文件
List<PALRepositoryModel> commonList = CoeProcessLevelUtil.getCommonRepositoryList(_uc, wsId, teamId, _uc.getUID());
// 伊利需求--所选用户创建作为创建人的流程当前用户所拥有流程权限的交集
// 先过滤掉空的架构与空的文件夹
if (createUserList.size() > 0 || orgIdList.size() > 0 || methodIdList.size() > 0) {
commonList = commonList.stream().filter(model -> {
boolean flag = true;
if (!("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId()))) {
flag = this.filterEmptyMoldel(model.getWsId(),model.getId());
}
return flag;
}).collect(Collectors.toList());
}
// 伊利需求架构筛选
if (methodIdList.size() > 0) {
commonList = commonList.stream().filter(model -> methodIdList.contains(model.getMethodId())).collect(Collectors.toList());
commonList = commonList.stream()
.filter(model -> {
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
boolean flag = false;
// 代表架构伊利专属需求
if ("process.framework".equals(model.getMethodId()) || "default".equals(model.getMethodId())){
// 递归判断当前架构下是否有符合的文件类型
flag = this.filterChildLevelModelByPid(model.getWsId(), model.getId(),methodIdList);
}else {
flag = methodIdList.contains(model.getMethodId());
}
return flag;
}).collect(Collectors.toList());
}
if (createUserList.size() > 0) {
commonList = commonList.stream().filter(model -> createUserList.contains(model.getCreateUser())).collect(Collectors.toList());
commonList = commonList.stream().filter(model -> {
boolean flag = false;
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
if (createUserList.contains(model.getCreateUser()) || createUserList.contains(model.getModifyUser())) {
flag = true;
}
return flag;
}).collect(Collectors.toList());
}
if (orgIdList.size() > 0) {
Set<String> userIds = new HashSet<>();
for (Object o : orgIdList) {
String orgId = (String) o;
List<UserModel> userModels = SDK.getORGAPI().getUsersByDepartment(orgId);
userModels.stream().forEach(user -> userIds.add(user.getUID()));
}
commonList = commonList.stream().filter(model -> userIds.contains(model.getCreateUser()) || userIds.contains(model.getModifyUser())).collect(Collectors.toList());
commonList = commonList.stream()
.filter(model -> {
if ("itsystem.normal".equals(model.getMethodId()) || "org.normal".equals(model.getMethodId())) {
return true;
}
boolean flag = false;
if ("process.framework".equals(model.getMethodId()) || "default".equals(model.getMethodId())){
flag = this.filterIsMatchPropertyModel(model.getWsId(),model.getId(),orgIdList);
}else {
List<DesignerShapeRelationModel> relationModels = DesignerShapeRelationCache.getByFileId(model.getId(), "Issuing_department");
// 是否有发布部门的文件属性可能会有多个值
if (relationModels != null && relationModels.size() > 0) {
for (DesignerShapeRelationModel relationModel : relationModels) {
JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText());
String deptId = relationObj.getString("id");
flag = orgIdList.contains(deptId);
if (flag) break;
}
}
}
return flag;
}).collect(Collectors.toList());
}
JSONArray commonData = new JSONArray();
for (PALRepositoryModel model: commonList) {
@ -9071,6 +9201,82 @@ public String deleteReply(String replyid, String messageid) {
return ro.toString();
}
/**
* 判断当前架构或者文件夹下是否含有
* 选中的建模小类的文件
* @param wsId
* @param pid
* @param methodIdList
* @return
*/
private boolean filterChildLevelModelByPid(String wsId,String pid,JSONArray methodIdList){
boolean flag = false;
Iterator<PALRepositoryModel> iterator = PALRepositoryCache.getByPid(wsId, pid);
while (iterator.hasNext()) {
PALRepositoryModel currentModel = iterator.next();
if ("process.framework".equals(currentModel.getMethodId())) {
flag = this.filterChildLevelModelByPid(wsId,currentModel.getId(),methodIdList);
}else {
flag = methodIdList.contains(currentModel.getMethodId());
}
if (flag) break;
}
return flag;
}
/**
* 判断当前架构或者文件夹下是否含有
* 匹配的文件属性发布部门
* @param wsId
* @param pid
* @param orgIdList
* @return
*/
private boolean filterIsMatchPropertyModel(String wsId,String pid,JSONArray orgIdList){
boolean flag = false;
Iterator<PALRepositoryModel> iterator = PALRepositoryCache.getByPid(wsId, pid);
while (iterator.hasNext()) {
PALRepositoryModel currentModel = iterator.next();
if ("process.framework".equals(currentModel.getMethodId()) || "default".equals(currentModel.getMethodId())) {
flag = this.filterIsMatchPropertyModel(wsId,currentModel.getId(),orgIdList);
}else {
List<DesignerShapeRelationModel> relationModels = DesignerShapeRelationCache.getByFileId(currentModel.getId(), "Issuing_department");
// 是否有发布部门的文件属性可能会有多个值
if (relationModels != null && relationModels.size() > 0) {
for (DesignerShapeRelationModel relationModel : relationModels) {
JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText());
String deptId = relationObj.getString("id");
flag = orgIdList.contains(deptId);
if (flag) break;
}
}
}
if (flag) break;
}
return flag;
}
/**
* 递归判断当前架构或文件夹下是否含有文件
* @param wsId
* @param pid
* @return
*/
private boolean filterEmptyMoldel(String wsId,String pid){
boolean flag = false;
Iterator<PALRepositoryModel> iterator = PALRepositoryCache.getByPid(wsId, pid);
while (iterator.hasNext()) {
PALRepositoryModel currentModel = iterator.next();
if ("process.framework".equals(currentModel.getMethodId()) || "default".equals(currentModel.getMethodId())) {
flag = this.filterEmptyMoldel(wsId,currentModel.getId());
}else {
flag = true;
}
if (flag) break;
}
return flag;
}
/**
* 收藏文件模型
* @param wsId
@ -9207,6 +9413,7 @@ public String deleteReply(String replyid, String messageid) {
subObj.put("index", index++);
subObj.put("id", subModel.getId());
subObj.put("pid", subModel.getParentId());
subObj.put("wsId", subModel.getWsId());
subObj.put("versionId", subModel.getVersionId());
subObj.put("name", subModel.getName());
subObj.put("methodId", subModel.getMethodId());
@ -9277,44 +9484,76 @@ public String deleteReply(String replyid, String messageid) {
JSONArray createUserList = UtilString.isNotEmpty(createUsers) ? JSONArray.parseArray(createUsers) : new JSONArray();
JSONArray orgIdList = UtilString.isNotEmpty(orgIds) ? JSONArray.parseArray(orgIds) : new JSONArray();
JSONArray methodIdList = UtilString.isNotEmpty(methodIds) ? JSONArray.parseArray(methodIds) : new JSONArray();
// 先过滤掉空的架构与空的文件夹
if (createUserList.size() > 0 || orgIdList.size() > 0 || methodIdList.size() > 0) {
tableData = tableData.stream().filter(item -> {
boolean flag = true;
if (!("itsystem.normal".equals(((JSONObject)item).getString("methodId")) || "org.normal".equals(((JSONObject)item).getString("methodId")))) {
if ("process.framework".equals(((JSONObject)item).getString("methodId")) || "default".equals(((JSONObject)item).getString("methodId"))){
flag = this.filterEmptyMoldel(((JSONObject)item).getString("wsId"),((JSONObject)item).getString("id"));
}
}
return flag;
}).collect(Collectors.toCollection(JSONArray::new));
}
// 根据文件类型过滤
if (methodIdList.size() > 0) {
tableData = tableData.stream()
.filter(item -> {
// 小组下 判断当前用户在当前文件夹是否有新建权限
boolean flag = true;
if (UtilString.isNotEmpty(teamId) && "default".equals(((JSONObject)item).getString("methodId"))) {
Set<String> userOperatePermission = CooperationCache.getUserOperatePermission(teamId, _uc.getUID());
flag = userOperatePermission.contains(CoeCooperationConst.ACTION_CREATE_PROCESS);
if ("itsystem.normal".equals(((JSONObject)item).getString("methodId")) || "org.normal".equals(((JSONObject)item).getString("methodId"))) {
return true;
}
boolean flag = false;
if ("process.framework".equals(((JSONObject)item).getString("methodId")) || "default".equals(((JSONObject)item).getString("methodId"))){
// 递归判断当前架构下是否有符合的文件类型
flag = this.filterChildLevelModelByPid(((JSONObject)item).getString("wsId"), ((JSONObject)item).getString("id"),methodIdList);
}else {
flag = methodIdList.contains(((JSONObject)item).getString("methodId"));
}
return flag;
})
.filter(item -> methodIdList.contains(((JSONObject)item).getString("methodId"))
|| "default".equals(((JSONObject)item).getString("methodId")) || "process.framework".equals(((JSONObject)item).getString("methodId")))
.collect(Collectors.toCollection(JSONArray::new));
}
// 根据创建人过滤
if (createUserList.size() > 0) {
JSONArray tempArr = new JSONArray();
for (Object o : tableData) {
JSONObject tempObj = (JSONObject) o;
if (createUserList.contains(tempObj.getString("createUser"))){
tempArr.add(tempObj);
}
}
tableData = tempArr;
tableData = tableData.stream()
.filter(item -> {
if ("itsystem.normal".equals(((JSONObject)item).getString("methodId")) || "org.normal".equals(((JSONObject)item).getString("methodId"))) {
return true;
}
boolean flag = false;
if (createUserList.contains(((JSONObject)item).getString("createUser")) || createUserList.contains(((JSONObject)item).getString("modifyUser"))) {
flag = true;
}
return flag;
})
.collect(Collectors.toCollection(JSONArray::new));
}
// 根据组织架构过滤
if (orgIdList.size() > 0) {
Set<String> userIds = new HashSet<>();
for (Object o : orgIdList) {
String orgId = (String) o;
List<UserModel> userModels = SDK.getORGAPI().getUsersByDepartment(orgId);
userModels.stream().forEach(user -> userIds.add(user.getUID()));
}
createUserList.stream().forEach(userId -> userIds.add((String) userId));
tableData = tableData.stream()
.filter(item -> userIds.contains(((JSONObject)item).getString("createUser")) || userIds.contains(((JSONObject)item).getString("modifyUser")))
.filter(item -> {
boolean flag = false;
JSONObject itemObj = (JSONObject) item;
if ("itsystem.normal".equals(itemObj.getString("methodId")) || "org.normal".equals(itemObj.getString("methodId"))) {
return true;
}
if ("process.framework".equals(itemObj.getString("methodId")) || "default".equals(itemObj.getString("methodId"))){
flag = this.filterIsMatchPropertyModel(itemObj.getString("wsId"),itemObj.getString("id"),orgIdList);
}else {
List<DesignerShapeRelationModel> relationModels = DesignerShapeRelationCache.getByFileId(itemObj.getString("id"), "Issuing_department");
// 是否有发布部门的文件属性可能会有多个值
if (relationModels != null && relationModels.size() > 0) {
for (DesignerShapeRelationModel relationModel : relationModels) {
JSONObject relationObj = JSONObject.parseObject(relationModel.getRelationShapeText());
String deptId = relationObj.getString("id");
flag = orgIdList.contains(deptId);
if (flag) break;
}
}
}
return flag;
})
.collect(Collectors.toCollection(JSONArray::new));
}
// 串联分析应用是否安装

View File

@ -13,4 +13,4 @@
var mainType = "<#mainType>";
var uid = "<#uid>";
var wHref = "./w";
var jdHref = "./jd";</script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-03c6285a.7d5e2b5a.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-08f4719e.e0cd2ccf.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-0df035f6.e83dbaa2.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-21453108.a3fd01d3.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-23a660f0.0ecc4095.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-33a8fbff.9f161cd2.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-79148172.dc3e7967.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-b158b92a.fe2f3f84.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-bb3b9f20.f7f4b256.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-03c6285a.529dedd5.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-08f4719e.4739bcb1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-0df035f6.52f9d178.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-21453108.61269ead.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-23a660f0.1efa21de.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.fd29d082.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.f290866f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d212b99.1061dc70.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.9f4d92b1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.c12b6728.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.9b69a5bc.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3178e2bf.97e80de1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-33a8fbff.e8861a4d.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3a9b7577.1c8372d8.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-79148172.25989b20.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-b158b92a.02ee2c83.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-bb3b9f20.8fc67a6c.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.b58aa8df.css rel=preload as=style><link href=../apps/com.actionsoft.apps.coe.pal/main/js/app.66218ed9.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.335bcbdd.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.b58aa8df.css rel=stylesheet></head><body style=margin:0;><div id=app></div><script src=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.335bcbdd.js></script><script src=../apps/com.actionsoft.apps.coe.pal/main/js/app.66218ed9.js></script></body></html>
var jdHref = "./jd";</script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-03c6285a.7d5e2b5a.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-0df035f6.e83dbaa2.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-21453108.a3fd01d3.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-23a660f0.0ecc4095.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-4f0211c3.cd46a328.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-79148172.dc3e7967.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-7f2e89b2.e0cd2ccf.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-b158b92a.fe2f3f84.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/chunk-bb3b9f20.f7f4b256.css rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-03c6285a.529dedd5.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-0df035f6.52f9d178.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-21453108.61269ead.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-23a660f0.1efa21de.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0ab156.fd29d082.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d0f078a.f290866f.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d212b99.1061dc70.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d216d3a.9f4d92b1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224b23.c12b6728.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-2d224ef1.9b69a5bc.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3178e2bf.97e80de1.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-3a9b7577.1c8372d8.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-4f0211c3.46d6b97b.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-79148172.25989b20.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-7f2e89b2.e179f783.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-b158b92a.02ee2c83.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-bb3b9f20.8fc67a6c.js rel=prefetch><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.b58aa8df.css rel=preload as=style><link href=../apps/com.actionsoft.apps.coe.pal/main/js/app.9add3d2c.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.335bcbdd.js rel=preload as=script><link href=../apps/com.actionsoft.apps.coe.pal/main/css/app.b58aa8df.css rel=stylesheet></head><body style=margin:0;><div id=app></div><script src=../apps/com.actionsoft.apps.coe.pal/main/js/chunk-vendors.335bcbdd.js></script><script src=../apps/com.actionsoft.apps.coe.pal/main/js/app.9add3d2c.js></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long