123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package org.jeecg.modules.ngalain.service.impl;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import org.jeecg.common.util.oConvertUtils;
- import org.jeecg.modules.ngalain.service.NgAlainService;
- import org.jeecg.modules.system.entity.SysPermission;
- import org.jeecg.modules.system.mapper.SysDictMapper;
- import org.jeecg.modules.system.service.ISysPermissionService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.util.Base64;
- import java.util.List;
- import java.util.Map;
- @Service("ngAlainService")
- public class NgAlainServiceImpl implements NgAlainService {
- @Autowired
- private ISysPermissionService sysPermissionService;
- @Autowired
- private SysDictMapper mapper;
- @Override
- public JSONArray getMenu(String id) throws Exception {
- return getJeecgMenu(id);
- }
- @Override
- public JSONArray getJeecgMenu(String id) throws Exception {
- List<SysPermission> metaList = sysPermissionService.queryByUser(id);
- JSONArray jsonArray = new JSONArray();
- getPermissionJsonArray(jsonArray, metaList, null);
- JSONArray menulist= parseNgAlain(jsonArray);
- JSONObject jeecgMenu = new JSONObject();
- jeecgMenu.put("text", "jeecg菜单");
- jeecgMenu.put("group",true);
- jeecgMenu.put("children", menulist);
- JSONArray jeecgMenuList=new JSONArray();
- jeecgMenuList.add(jeecgMenu);
- return jeecgMenuList;
- }
- @Override
- public List<Map<String, String>> getDictByTable(String table, String key, String value) {
- return this.mapper.getDictByTableNgAlain(table,key,value);
- }
- private JSONArray parseNgAlain(JSONArray jsonArray) {
- JSONArray menulist=new JSONArray();
- for (Object object : jsonArray) {
- JSONObject jsonObject= (JSONObject) object;
- String path= (String) jsonObject.get("path");
- JSONObject meta= (JSONObject) jsonObject.get("meta");
- JSONObject menu=new JSONObject();
- menu.put("text",meta.get("title"));
- menu.put("reuse",true);
- if (jsonObject.get("children")!=null){
- JSONArray child= parseNgAlain((JSONArray) jsonObject.get("children"));
- menu.put("children",child);
- JSONObject icon=new JSONObject();
- icon.put("type", "icon");
- icon.put("value", meta.get("icon"));
- menu.put("icon",icon);
- }else {
- menu.put("link",path);
- }
- menulist.add(menu);
- }
- return menulist;
- }
- /**
- * 获取菜单JSON数组
- * @param jsonArray
- * @param metaList
- * @param parentJson
- */
- private void getPermissionJsonArray(JSONArray jsonArray,List<SysPermission> metaList,JSONObject parentJson) {
- for (SysPermission permission : metaList) {
- if(permission.getMenuType()==null) {
- continue;
- }
- String tempPid = permission.getParentId();
- JSONObject json = getPermissionJsonObject(permission);
- if(parentJson==null && oConvertUtils.isEmpty(tempPid)) {
- jsonArray.add(json);
- if(!permission.isLeaf()) {
- getPermissionJsonArray(jsonArray, metaList, json);
- }
- }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){
- if(permission.getMenuType()==0) {
- JSONObject metaJson = parentJson.getJSONObject("meta");
- if(metaJson.containsKey("permissionList")) {
- metaJson.getJSONArray("permissionList").add(json);
- }else {
- JSONArray permissionList = new JSONArray();
- permissionList.add(json);
- metaJson.put("permissionList", permissionList);
- }
- }else if(permission.getMenuType()==1) {
- if(parentJson.containsKey("children")) {
- parentJson.getJSONArray("children").add(json);
- }else {
- JSONArray children = new JSONArray();
- children.add(json);
- parentJson.put("children", children);
- }
- if(!permission.isLeaf()) {
- getPermissionJsonArray(jsonArray, metaList, json);
- }
- }
- }
- }
- }
- private JSONObject getPermissionJsonObject(SysPermission permission) {
- JSONObject json = new JSONObject();
- //类型(0:一级菜单 1:子菜单 2:按钮)
- if(permission.getMenuType()==2) {
- json.put("action", permission.getPerms());
- json.put("describe", permission.getName());
- }else if(permission.getMenuType()==0||permission.getMenuType()==1) {
- json.put("id", permission.getId());
- if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
- String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes()));
- json.put("path", "/sys/link/" +url.replaceAll("=",""));
- }else {
- json.put("path", permission.getUrl());
- }
- //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)
- json.put("name", urlToRouteName(permission.getUrl()));
- //是否隐藏路由,默认都是显示的
- if(permission.isHidden()) {
- json.put("hidden",true);
- }
- //聚合路由
- if(permission.isAlwaysShow()) {
- json.put("alwaysShow",true);
- }
- json.put("component", permission.getComponent());
- JSONObject meta = new JSONObject();
- meta.put("title", permission.getName());
- if(oConvertUtils.isEmpty(permission.getParentId())) {
- //一级菜单跳转地址
- json.put("redirect",permission.getRedirect());
- meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
- }else {
- meta.put("icon", oConvertUtils.getString(permission.getIcon(), ""));
- }
- if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) {
- meta.put("url", permission.getUrl());
- }
- json.put("meta", meta);
- }
- return json;
- }
- /**
- * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-)
- * 举例: URL = /isystem/role
- * RouteName = isystem-role
- * @return
- */
- private String urlToRouteName(String url) {
- if(oConvertUtils.isNotEmpty(url)) {
- if(url.startsWith("/")) {
- url = url.substring(1);
- }
- url = url.replace("/", "-");
- return url;
- }else {
- return null;
- }
- }
- }
|