7a79f3629bfa23c286a98b5027776eb1960b5906.svn-base 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package org.jeecg.modules.ngalain.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import org.jeecg.common.util.oConvertUtils;
  5. import org.jeecg.modules.ngalain.service.NgAlainService;
  6. import org.jeecg.modules.system.entity.SysPermission;
  7. import org.jeecg.modules.system.mapper.SysDictMapper;
  8. import org.jeecg.modules.system.service.ISysPermissionService;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Service;
  11. import org.springframework.transaction.annotation.Transactional;
  12. import java.util.Base64;
  13. import java.util.List;
  14. import java.util.Map;
  15. @Service("ngAlainService")
  16. public class NgAlainServiceImpl implements NgAlainService {
  17. @Autowired
  18. private ISysPermissionService sysPermissionService;
  19. @Autowired
  20. private SysDictMapper mapper;
  21. @Override
  22. public JSONArray getMenu(String id) throws Exception {
  23. return getJeecgMenu(id);
  24. }
  25. @Override
  26. public JSONArray getJeecgMenu(String id) throws Exception {
  27. List<SysPermission> metaList = sysPermissionService.queryByUser(id);
  28. JSONArray jsonArray = new JSONArray();
  29. getPermissionJsonArray(jsonArray, metaList, null);
  30. JSONArray menulist= parseNgAlain(jsonArray);
  31. JSONObject jeecgMenu = new JSONObject();
  32. jeecgMenu.put("text", "jeecg菜单");
  33. jeecgMenu.put("group",true);
  34. jeecgMenu.put("children", menulist);
  35. JSONArray jeecgMenuList=new JSONArray();
  36. jeecgMenuList.add(jeecgMenu);
  37. return jeecgMenuList;
  38. }
  39. @Override
  40. public List<Map<String, String>> getDictByTable(String table, String key, String value) {
  41. return this.mapper.getDictByTableNgAlain(table,key,value);
  42. }
  43. private JSONArray parseNgAlain(JSONArray jsonArray) {
  44. JSONArray menulist=new JSONArray();
  45. for (Object object : jsonArray) {
  46. JSONObject jsonObject= (JSONObject) object;
  47. String path= (String) jsonObject.get("path");
  48. JSONObject meta= (JSONObject) jsonObject.get("meta");
  49. JSONObject menu=new JSONObject();
  50. menu.put("text",meta.get("title"));
  51. menu.put("reuse",true);
  52. if (jsonObject.get("children")!=null){
  53. JSONArray child= parseNgAlain((JSONArray) jsonObject.get("children"));
  54. menu.put("children",child);
  55. JSONObject icon=new JSONObject();
  56. icon.put("type", "icon");
  57. icon.put("value", meta.get("icon"));
  58. menu.put("icon",icon);
  59. }else {
  60. menu.put("link",path);
  61. }
  62. menulist.add(menu);
  63. }
  64. return menulist;
  65. }
  66. /**
  67. * 获取菜单JSON数组
  68. * @param jsonArray
  69. * @param metaList
  70. * @param parentJson
  71. */
  72. private void getPermissionJsonArray(JSONArray jsonArray,List<SysPermission> metaList,JSONObject parentJson) {
  73. for (SysPermission permission : metaList) {
  74. if(permission.getMenuType()==null) {
  75. continue;
  76. }
  77. String tempPid = permission.getParentId();
  78. JSONObject json = getPermissionJsonObject(permission);
  79. if(parentJson==null && oConvertUtils.isEmpty(tempPid)) {
  80. jsonArray.add(json);
  81. if(!permission.isLeaf()) {
  82. getPermissionJsonArray(jsonArray, metaList, json);
  83. }
  84. }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){
  85. if(permission.getMenuType()==0) {
  86. JSONObject metaJson = parentJson.getJSONObject("meta");
  87. if(metaJson.containsKey("permissionList")) {
  88. metaJson.getJSONArray("permissionList").add(json);
  89. }else {
  90. JSONArray permissionList = new JSONArray();
  91. permissionList.add(json);
  92. metaJson.put("permissionList", permissionList);
  93. }
  94. }else if(permission.getMenuType()==1) {
  95. if(parentJson.containsKey("children")) {
  96. parentJson.getJSONArray("children").add(json);
  97. }else {
  98. JSONArray children = new JSONArray();
  99. children.add(json);
  100. parentJson.put("children", children);
  101. }
  102. if(!permission.isLeaf()) {
  103. getPermissionJsonArray(jsonArray, metaList, json);
  104. }
  105. }
  106. }
  107. }
  108. }
  109. private JSONObject getPermissionJsonObject(SysPermission permission) {
  110. JSONObject json = new JSONObject();
  111. //类型(0:一级菜单 1:子菜单 2:按钮)
  112. if(permission.getMenuType()==2) {
  113. json.put("action", permission.getPerms());
  114. json.put("describe", permission.getName());
  115. }else if(permission.getMenuType()==0||permission.getMenuType()==1) {
  116. json.put("id", permission.getId());
  117. if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
  118. String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes()));
  119. json.put("path", "/sys/link/" +url.replaceAll("=",""));
  120. }else {
  121. json.put("path", permission.getUrl());
  122. }
  123. //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)
  124. json.put("name", urlToRouteName(permission.getUrl()));
  125. //是否隐藏路由,默认都是显示的
  126. if(permission.isHidden()) {
  127. json.put("hidden",true);
  128. }
  129. //聚合路由
  130. if(permission.isAlwaysShow()) {
  131. json.put("alwaysShow",true);
  132. }
  133. json.put("component", permission.getComponent());
  134. JSONObject meta = new JSONObject();
  135. meta.put("title", permission.getName());
  136. if(oConvertUtils.isEmpty(permission.getParentId())) {
  137. //一级菜单跳转地址
  138. json.put("redirect",permission.getRedirect());
  139. meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
  140. }else {
  141. meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
  142. }
  143. if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
  144. meta.put("url", permission.getUrl());
  145. }
  146. json.put("meta", meta);
  147. }
  148. return json;
  149. }
  150. /**
  151. * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-)
  152. * 举例: URL = /isystem/role
  153. * RouteName = isystem-role
  154. * @return
  155. */
  156. private String urlToRouteName(String url) {
  157. if(oConvertUtils.isNotEmpty(url)) {
  158. if(url.startsWith("/")) {
  159. url = url.substring(1);
  160. }
  161. url = url.replace("/", "-");
  162. return url;
  163. }else {
  164. return null;
  165. }
  166. }
  167. }