Commit c9372b0a5c30bf300fe5d0f48d9ba241179498b4

Authored by YunaiV
1 parent 823c26a5

修改 get-routers 接口的相关方法,简单完成

ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
... ... @@ -26,7 +26,7 @@ import com.ruoyi.system.service.ISysMenuService;
26 26  
27 27 /**
28 28 * 菜单 业务层处理
29   - *
  29 + *
30 30 * @author ruoyi
31 31 */
32 32 @Service
... ... @@ -45,7 +45,7 @@ public class SysMenuServiceImpl implements ISysMenuService
45 45  
46 46 /**
47 47 * 根据用户查询系统菜单列表
48   - *
  48 + *
49 49 * @param userId 用户ID
50 50 * @return 菜单列表
51 51 */
... ... @@ -57,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService
57 57  
58 58 /**
59 59 * 查询系统菜单列表
60   - *
  60 + *
61 61 * @param menu 菜单信息
62 62 * @return 菜单列表
63 63 */
... ... @@ -80,7 +80,7 @@ public class SysMenuServiceImpl implements ISysMenuService
80 80  
81 81 /**
82 82 * 根据用户ID查询权限
83   - *
  83 + *
84 84 * @param userId 用户ID
85 85 * @return 权限列表
86 86 */
... ... @@ -101,7 +101,7 @@ public class SysMenuServiceImpl implements ISysMenuService
101 101  
102 102 /**
103 103 * 根据用户ID查询菜单
104   - *
  104 + *
105 105 * @param userId 用户名称
106 106 * @return 菜单列表
107 107 */
... ... @@ -122,7 +122,7 @@ public class SysMenuServiceImpl implements ISysMenuService
122 122  
123 123 /**
124 124 * 根据角色ID查询菜单树信息
125   - *
  125 + *
126 126 * @param roleId 角色ID
127 127 * @return 选中菜单列表
128 128 */
... ... @@ -134,81 +134,8 @@ public class SysMenuServiceImpl implements ISysMenuService
134 134 }
135 135  
136 136 /**
137   - * 构建前端路由所需要的菜单
138   - *
139   - * @param menus 菜单列表
140   - * @return 路由列表
141   - */
142   - @Override
143   - public List<RouterVo> buildMenus(List<SysMenu> menus)
144   - {
145   - List<RouterVo> routers = new LinkedList<RouterVo>();
146   - for (SysMenu menu : menus)
147   - {
148   - RouterVo router = new RouterVo();
149   - router.setHidden("1".equals(menu.getVisible()));
150   - router.setName(getRouteName(menu));
151   - router.setPath(getRouterPath(menu));
152   - router.setComponent(getComponent(menu));
153   - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));
154   - List<SysMenu> cMenus = menu.getChildren();
155   - if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
156   - {
157   - router.setAlwaysShow(true);
158   - router.setRedirect("noRedirect");
159   - router.setChildren(buildMenus(cMenus));
160   - }
161   - else if (isMeunFrame(menu))
162   - {
163   - List<RouterVo> childrenList = new ArrayList<RouterVo>();
164   - RouterVo children = new RouterVo();
165   - children.setPath(menu.getPath());
166   - children.setComponent(menu.getComponent());
167   - children.setName(StringUtils.capitalize(menu.getPath()));
168   - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache())));
169   - childrenList.add(children);
170   - router.setChildren(childrenList);
171   - }
172   - routers.add(router);
173   - }
174   - return routers;
175   - }
176   -
177   - /**
178   - * 构建前端所需要树结构
179   - *
180   - * @param menus 菜单列表
181   - * @return 树结构列表
182   - */
183   - @Override
184   - public List<SysMenu> buildMenuTree(List<SysMenu> menus)
185   - {
186   - List<SysMenu> returnList = new ArrayList<SysMenu>();
187   - List<Long> tempList = new ArrayList<Long>();
188   - for (SysMenu dept : menus)
189   - {
190   - tempList.add(dept.getMenuId());
191   - }
192   - for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
193   - {
194   - SysMenu menu = (SysMenu) iterator.next();
195   - // 如果是顶级节点, 遍历该父节点的所有子节点
196   - if (!tempList.contains(menu.getParentId()))
197   - {
198   - recursionFn(menus, menu);
199   - returnList.add(menu);
200   - }
201   - }
202   - if (returnList.isEmpty())
203   - {
204   - returnList = menus;
205   - }
206   - return returnList;
207   - }
208   -
209   - /**
210 137 * 构建前端所需要下拉树结构
211   - *
  138 + *
212 139 * @param menus 菜单列表
213 140 * @return 下拉树结构列表
214 141 */
... ... @@ -221,7 +148,7 @@ public class SysMenuServiceImpl implements ISysMenuService
221 148  
222 149 /**
223 150 * 根据菜单ID查询信息
224   - *
  151 + *
225 152 * @param menuId 菜单ID
226 153 * @return 菜单信息
227 154 */
... ... @@ -233,7 +160,7 @@ public class SysMenuServiceImpl implements ISysMenuService
233 160  
234 161 /**
235 162 * 是否存在菜单子节点
236   - *
  163 + *
237 164 * @param menuId 菜单ID
238 165 * @return 结果
239 166 */
... ... @@ -246,7 +173,7 @@ public class SysMenuServiceImpl implements ISysMenuService
246 173  
247 174 /**
248 175 * 查询菜单使用数量
249   - *
  176 + *
250 177 * @param menuId 菜单ID
251 178 * @return 结果
252 179 */
... ... @@ -259,7 +186,7 @@ public class SysMenuServiceImpl implements ISysMenuService
259 186  
260 187 /**
261 188 * 新增保存菜单信息
262   - *
  189 + *
263 190 * @param menu 菜单信息
264 191 * @return 结果
265 192 */
... ... @@ -271,7 +198,7 @@ public class SysMenuServiceImpl implements ISysMenuService
271 198  
272 199 /**
273 200 * 修改保存菜单信息
274   - *
  201 + *
275 202 * @param menu 菜单信息
276 203 * @return 结果
277 204 */
... ... @@ -283,7 +210,7 @@ public class SysMenuServiceImpl implements ISysMenuService
283 210  
284 211 /**
285 212 * 删除菜单管理信息
286   - *
  213 + *
287 214 * @param menuId 菜单ID
288 215 * @return 结果
289 216 */
... ... @@ -295,7 +222,7 @@ public class SysMenuServiceImpl implements ISysMenuService
295 222  
296 223 /**
297 224 * 校验菜单名称是否唯一
298   - *
  225 + *
299 226 * @param menu 菜单信息
300 227 * @return 结果
301 228 */
... ... @@ -311,155 +238,4 @@ public class SysMenuServiceImpl implements ISysMenuService
311 238 return UserConstants.UNIQUE;
312 239 }
313 240  
314   - /**
315   - * 获取路由名称
316   - *
317   - * @param menu 菜单信息
318   - * @return 路由名称
319   - */
320   - public String getRouteName(SysMenu menu)
321   - {
322   - String routerName = StringUtils.capitalize(menu.getPath());
323   - // 非外链并且是一级目录(类型为目录)
324   - if (isMeunFrame(menu))
325   - {
326   - routerName = StringUtils.EMPTY;
327   - }
328   - return routerName;
329   - }
330   -
331   - /**
332   - * 获取路由地址
333   - *
334   - * @param menu 菜单信息
335   - * @return 路由地址
336   - */
337   - public String getRouterPath(SysMenu menu)
338   - {
339   - String routerPath = menu.getPath();
340   - // 非外链并且是一级目录(类型为目录)
341   - if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
342   - && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
343   - {
344   - routerPath = "/" + menu.getPath();
345   - }
346   - // 非外链并且是一级目录(类型为菜单)
347   - else if (isMeunFrame(menu))
348   - {
349   - routerPath = "/";
350   - }
351   - return routerPath;
352   - }
353   -
354   - /**
355   - * 获取组件信息
356   - *
357   - * @param menu 菜单信息
358   - * @return 组件信息
359   - */
360   - public String getComponent(SysMenu menu)
361   - {
362   - String component = UserConstants.LAYOUT;
363   - if (StringUtils.isNotEmpty(menu.getComponent()) && !isMeunFrame(menu))
364   - {
365   - component = menu.getComponent();
366   - }
367   - else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
368   - {
369   - component = UserConstants.PARENT_VIEW;
370   - }
371   - return component;
372   - }
373   -
374   - /**
375   - * 是否为菜单内部跳转
376   - *
377   - * @param menu 菜单信息
378   - * @return 结果
379   - */
380   - public boolean isMeunFrame(SysMenu menu)
381   - {
382   - return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
383   - && menu.getIsFrame().equals(UserConstants.NO_FRAME);
384   - }
385   -
386   - /**
387   - * 是否为parent_view组件
388   - *
389   - * @param menu 菜单信息
390   - * @return 结果
391   - */
392   - public boolean isParentView(SysMenu menu)
393   - {
394   - return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
395   - }
396   -
397   - /**
398   - * 根据父节点的ID获取所有子节点
399   - *
400   - * @param list 分类表
401   - * @param parentId 传入的父节点ID
402   - * @return String
403   - */
404   - public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
405   - {
406   - List<SysMenu> returnList = new ArrayList<SysMenu>();
407   - for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
408   - {
409   - SysMenu t = (SysMenu) iterator.next();
410   - // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
411   - if (t.getParentId() == parentId)
412   - {
413   - recursionFn(list, t);
414   - returnList.add(t);
415   - }
416   - }
417   - return returnList;
418   - }
419   -
420   - /**
421   - * 递归列表
422   - *
423   - * @param list
424   - * @param t
425   - */
426   - private void recursionFn(List<SysMenu> list, SysMenu t)
427   - {
428   - // 得到子节点列表
429   - List<SysMenu> childList = getChildList(list, t);
430   - t.setChildren(childList);
431   - for (SysMenu tChild : childList)
432   - {
433   - if (hasChild(list, tChild))
434   - {
435   - recursionFn(list, tChild);
436   - }
437   - }
438   - }
439   -
440   - /**
441   - * 得到子节点列表
442   - */
443   - private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
444   - {
445   - List<SysMenu> tlist = new ArrayList<SysMenu>();
446   - Iterator<SysMenu> it = list.iterator();
447   - while (it.hasNext())
448   - {
449   - SysMenu n = (SysMenu) it.next();
450   - if (n.getParentId().longValue() == t.getMenuId().longValue())
451   - {
452   - tlist.add(n);
453   - }
454   - }
455   - return tlist;
456   - }
457   -
458   - /**
459   - * 判断是否有子节点
460   - */
461   - private boolean hasChild(List<SysMenu> list, SysMenu t)
462   - {
463   - return getChildList(list, t).size() > 0 ? true : false;
464   - }
465 241 }
... ...
ruoyi-ui/src/store/modules/permission.js
... ... @@ -24,8 +24,10 @@ const permission = {
24 24 return new Promise(resolve => {
25 25 // 向后端请求路由数据
26 26 getRouters().then(res => {
27   - const sdata = JSON.parse(JSON.stringify(res.data))
28   - const rdata = JSON.parse(JSON.stringify(res.data))
  27 + // const sdata = JSON.parse(JSON.stringify(res.data))
  28 + // const rdata = JSON.parse(JSON.stringify(res.data))
  29 + const sdata = JSON.parse(JSON.stringify(res))
  30 + const rdata = JSON.parse(JSON.stringify(res))
29 31 const sidebarRoutes = filterAsyncRouter(sdata)
30 32 const rewriteRoutes = filterAsyncRouter(rdata, true)
31 33 rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
... ...
src/main/java/cn/iocoder/dashboard/framework/errorcode/package-info.java 0 → 100644
  1 +/**
  2 + * 错误码组件
  3 + *
  4 + * 将错误码缓存在内存中,同时通过定时器每 n 分钟更新
  5 + */
  6 +package cn.iocoder.dashboard.framework.errorcode;
... ...
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java renamed to src/main/java/cn/iocoder/dashboard/framework/excel/Excel.java
1   -package com.ruoyi.common.annotation;
2   -
3   -import java.lang.annotation.ElementType;
4   -import java.lang.annotation.Retention;
5   -import java.lang.annotation.RetentionPolicy;
6   -import java.lang.annotation.Target;
7   -import java.math.BigDecimal;
8   -
9   -/**
10   - * 自定义导出Excel数据注解
11   - *
12   - * @author ruoyi
13   - */
14   -@Retention(RetentionPolicy.RUNTIME)
15   -@Target(ElementType.FIELD)
16   -public @interface Excel
17   -{
18   - /**
19   - * 导出时在excel中排序
20   - */
21   - public int sort() default Integer.MAX_VALUE;
22   -
23   - /**
24   - * 导出到Excel中的名字.
25   - */
26   - public String name() default "";
27   -
28   - /**
29   - * 日期格式, 如: yyyy-MM-dd
30   - */
31   - public String dateFormat() default "";
32   -
33   - /**
34   - * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
35   - */
36   - public String dictType() default "";
37   -
38   - /**
39   - * 读取内容转表达式 (如: 0=男,1=女,2=未知)
40   - */
41   - public String readConverterExp() default "";
42   -
43   - /**
44   - * 分隔符,读取字符串组内容
45   - */
46   - public String separator() default ",";
47   -
48   - /**
49   - * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
50   - */
51   - public int scale() default -1;
52   -
53   - /**
54   - * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
55   - */
56   - public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
57   -
58   - /**
59   - * 导出类型(0数字 1字符串)
60   - */
61   - public ColumnType cellType() default ColumnType.STRING;
62   -
63   - /**
64   - * 导出时在excel中每个列的高度 单位为字符
65   - */
66   - public double height() default 14;
67   -
68   - /**
69   - * 导出时在excel中每个列的宽 单位为字符
70   - */
71   - public double width() default 16;
72   -
73   - /**
74   - * 文字后缀,如% 90 变成90%
75   - */
76   - public String suffix() default "";
77   -
78   - /**
79   - * 当值为空时,字段的默认值
80   - */
81   - public String defaultValue() default "";
82   -
83   - /**
84   - * 提示信息
85   - */
86   - public String prompt() default "";
87   -
88   - /**
89   - * 设置只能选择不能输入的列内容.
90   - */
91   - public String[] combo() default {};
92   -
93   - /**
94   - * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
95   - */
96   - public boolean isExport() default true;
97   -
98   - /**
99   - * 另一个类中的属性名称,支持多级获取,以小数点隔开
100   - */
101   - public String targetAttr() default "";
102   -
103   - /**
104   - * 是否自动统计数据,在最后追加一行统计数据总和
105   - */
106   - public boolean isStatistics() default false;
107   -
108   - /**
109   - * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
110   - */
111   - Align align() default Align.AUTO;
112   -
113   - public enum Align
114   - {
115   - AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
116   - private final int value;
117   -
118   - Align(int value)
119   - {
120   - this.value = value;
121   - }
122   -
123   - public int value()
124   - {
125   - return this.value;
126   - }
127   - }
128   -
129   - /**
130   - * 字段类型(0:导出导入;1:仅导出;2:仅导入)
131   - */
132   - Type type() default Type.ALL;
133   -
134   - public enum Type
135   - {
136   - ALL(0), EXPORT(1), IMPORT(2);
137   - private final int value;
138   -
139   - Type(int value)
140   - {
141   - this.value = value;
142   - }
143   -
144   - public int value()
145   - {
146   - return this.value;
147   - }
148   - }
149   -
150   - public enum ColumnType
151   - {
152   - NUMERIC(0), STRING(1), IMAGE(2);
153   - private final int value;
154   -
155   - ColumnType(int value)
156   - {
157   - this.value = value;
158   - }
159   -
160   - public int value()
161   - {
162   - return this.value;
163   - }
164   - }
165   -}
166 1 \ No newline at end of file
  2 +package cn.iocoder.dashboard.framework.excel;
  3 +
  4 +import java.lang.annotation.ElementType;
  5 +import java.lang.annotation.Retention;
  6 +import java.lang.annotation.RetentionPolicy;
  7 +import java.lang.annotation.Target;
  8 +import java.math.BigDecimal;
  9 +
  10 +/**
  11 + * 自定义导出Excel数据注解
  12 + *
  13 + * @author ruoyi
  14 + */
  15 +@Retention(RetentionPolicy.RUNTIME)
  16 +@Target(ElementType.FIELD)
  17 +public @interface Excel {
  18 +
  19 + /**
  20 + * 导出时在excel中排序
  21 + */
  22 + int sort() default Integer.MAX_VALUE;
  23 +
  24 + /**
  25 + * 导出到Excel中的名字.
  26 + */
  27 + String name() default "";
  28 +
  29 + /**
  30 + * 日期格式, 如: yyyy-MM-dd
  31 + */
  32 + String dateFormat() default "";
  33 +
  34 + /**
  35 + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
  36 + */
  37 + String dictType() default "";
  38 +
  39 + /**
  40 + * 读取内容转表达式 (如: 0=男,1=女,2=未知)
  41 + */
  42 + public String readConverterExp() default "";
  43 +
  44 + /**
  45 + * 分隔符,读取字符串组内容
  46 + */
  47 + public String separator() default ",";
  48 +
  49 + /**
  50 + * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
  51 + */
  52 + public int scale() default -1;
  53 +
  54 + /**
  55 + * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
  56 + */
  57 + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
  58 +
  59 + /**
  60 + * 导出类型(0数字 1字符串)
  61 + */
  62 + public ColumnType cellType() default ColumnType.STRING;
  63 +
  64 + /**
  65 + * 导出时在excel中每个列的高度 单位为字符
  66 + */
  67 + public double height() default 14;
  68 +
  69 + /**
  70 + * 导出时在excel中每个列的宽 单位为字符
  71 + */
  72 + public double width() default 16;
  73 +
  74 + /**
  75 + * 文字后缀,如% 90 变成90%
  76 + */
  77 + String suffix() default "";
  78 +
  79 + /**
  80 + * 当值为空时,字段的默认值
  81 + */
  82 + String defaultValue() default "";
  83 +
  84 + /**
  85 + * 提示信息
  86 + */
  87 + String prompt() default "";
  88 +
  89 + /**
  90 + * 设置只能选择不能输入的列内容.
  91 + */
  92 + String[] combo() default {};
  93 +
  94 + /**
  95 + * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
  96 + */
  97 + boolean isExport() default true;
  98 +
  99 + /**
  100 + * 另一个类中的属性名称,支持多级获取,以小数点隔开
  101 + */
  102 + String targetAttr() default "";
  103 +
  104 + /**
  105 + * 是否自动统计数据,在最后追加一行统计数据总和
  106 + */
  107 + boolean isStatistics() default false;
  108 +
  109 + /**
  110 + * 导出字段对齐方式(0:默认;1:靠左;2:居中;3:靠右)
  111 + */
  112 + Align align() default Align.AUTO;
  113 +
  114 + enum Align {
  115 + AUTO(0), LEFT(1), CENTER(2), RIGHT(3);
  116 + private final int value;
  117 +
  118 + Align(int value) {
  119 + this.value = value;
  120 + }
  121 +
  122 + public int value() {
  123 + return this.value;
  124 + }
  125 + }
  126 +
  127 + /**
  128 + * 字段类型(0:导出导入;1:仅导出;2:仅导入)
  129 + */
  130 + Type type() default Type.ALL;
  131 +
  132 + enum Type {
  133 + ALL(0), EXPORT(1), IMPORT(2);
  134 + private final int value;
  135 +
  136 + Type(int value) {
  137 + this.value = value;
  138 + }
  139 +
  140 + public int value() {
  141 + return this.value;
  142 + }
  143 + }
  144 +
  145 + enum ColumnType {
  146 + NUMERIC(0), STRING(1), IMAGE(2);
  147 + private final int value;
  148 +
  149 + ColumnType(int value) {
  150 + this.value = value;
  151 + }
  152 +
  153 + public int value() {
  154 + return this.value;
  155 + }
  156 + }
  157 +}
... ...
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java renamed to src/main/java/cn/iocoder/dashboard/framework/excel/Excels.java
1   -package com.ruoyi.common.annotation;
2   -
3   -import java.lang.annotation.ElementType;
4   -import java.lang.annotation.Retention;
5   -import java.lang.annotation.RetentionPolicy;
6   -import java.lang.annotation.Target;
7   -
8   -/**
9   - * Excel注解集
10   - *
11   - * @author ruoyi
12   - */
13   -@Target(ElementType.FIELD)
14   -@Retention(RetentionPolicy.RUNTIME)
15   -public @interface Excels
16   -{
17   - Excel[] value();
18   -}
  1 +package cn.iocoder.dashboard.framework.excel;
  2 +
  3 +import java.lang.annotation.ElementType;
  4 +import java.lang.annotation.Retention;
  5 +import java.lang.annotation.RetentionPolicy;
  6 +import java.lang.annotation.Target;
  7 +
  8 +/**
  9 + * Excel注解集
  10 + *
  11 + * @author ruoyi
  12 + */
  13 +@Target(ElementType.FIELD)
  14 +@Retention(RetentionPolicy.RUNTIME)
  15 +public @interface Excels
  16 +{
  17 + Excel[] value();
  18 +}
... ...
src/main/java/cn/iocoder/dashboard/modules/system/controller/auth/vo/SysAuthGetRouterRespVO.java
1 1 package cn.iocoder.dashboard.modules.system.controller.auth.vo;
2 2  
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Builder;
3 5 import lombok.Data;
  6 +import lombok.NoArgsConstructor;
4 7  
5 8 import java.util.List;
6 9  
... ... @@ -10,6 +13,9 @@ import java.util.List;
10 13 * @author ruoyi
11 14 */
12 15 @Data
  16 +@NoArgsConstructor
  17 +@AllArgsConstructor
  18 +@Builder
13 19 public class SysAuthGetRouterRespVO {
14 20  
15 21 /**
... ... @@ -62,6 +68,9 @@ public class SysAuthGetRouterRespVO {
62 68 private List<SysAuthGetRouterRespVO> children;
63 69  
64 70 @Data
  71 + @NoArgsConstructor
  72 + @AllArgsConstructor
  73 + @Builder
65 74 public static class MetaVO {
66 75  
67 76 /**
... ...
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
1 1 package cn.iocoder.dashboard.modules.system.convert.auth;
2 2  
  3 +import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
3 4 import cn.iocoder.dashboard.framework.security.core.LoginUser;
4 5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO;
5 6 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO;
6 7 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO;
7 8 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO;
8 9 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO;
  10 +import cn.iocoder.dashboard.modules.system.enums.permission.MenuIdEnum;
  11 +import cn.iocoder.dashboard.modules.system.enums.permission.MenuTypeEnum;
9 12 import cn.iocoder.dashboard.util.collection.CollectionUtils;
  13 +import jodd.util.StringUtil;
  14 +import org.apache.commons.lang3.StringUtils;
10 15 import org.mapstruct.Mapper;
11 16 import org.mapstruct.Mapping;
12 17 import org.mapstruct.factory.Mappers;
... ... @@ -16,6 +21,12 @@ import java.util.List;
16 21 @Mapper
17 22 public interface SysAuthConvert {
18 23  
  24 + /** Layout组件标识 */
  25 + public final static String LAYOUT = "Layout";
  26 +
  27 + /** ParentView组件标识 */
  28 + public final static String PARENT_VIEW = "ParentView";
  29 +
19 30 SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class);
20 31  
21 32 @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略
... ... @@ -29,6 +40,88 @@ public interface SysAuthConvert {
29 40 .build();
30 41 }
31 42  
32   - SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu);
  43 + default SysAuthGetRouterRespVO convertTreeNode(SysMenuDO menu) {
  44 + SysAuthGetRouterRespVO.SysAuthGetRouterRespVOBuilder respVOBuilder = SysAuthGetRouterRespVO.builder();
  45 + respVOBuilder.menuId(menu.getMenuId()).parentId(menu.getParentId())
  46 + .hidden("1".equals(menu.getVisible())) // TODO 芋艿:需要处理
  47 + .name(getRouteName(menu)).path(menu.getPath()).component(getComponent(menu))
  48 + .meta(SysAuthGetRouterRespVO.MetaVO.builder().title(menu.getMenuName()).icon(menu.getIcon())
  49 + .noCache("1".equals(menu.getIsCache())).build())
  50 + ;
  51 + return respVOBuilder.build();
  52 + }
  53 +
  54 +
  55 +
  56 + // TODO 芋艿:需要预处理。存储的时候
  57 + default String getRouteName(SysMenuDO menu) {
  58 + String routerName = StringUtil.capitalize(menu.getPath()); // TODO 芋艿:看看怎么去除掉
  59 + // 非外链并且是一级目录(类型为目录)
  60 + if (isMenuFrame(menu)) {
  61 + routerName = StringUtils.EMPTY;
  62 + }
  63 + return routerName;
  64 + }
  65 +
  66 + /**
  67 + * 是否为菜单内部跳转
  68 + *
  69 + * @param menu 菜单信息
  70 + * @return 是否
  71 + */
  72 + // TODO 芋艿:思考下是不是可以重构下
  73 + default boolean isMenuFrame(SysMenuDO menu) {
  74 + return MenuIdEnum.ROOT.getId().equals(menu.getParentId())
  75 + && MenuTypeEnum.MENU.getType().equals(menu.getMenuType())
  76 + && CommonStatusEnum.ENABLE.getStatus().equals(menu.getIsFrame()); // TODO 芋艿:思考是不是用这个好
  77 + }
  78 +
  79 +// /** // TODO 芋艿:后面重构下
  80 +// * 获取路由地址
  81 +// *
  82 +// * @param menu 菜单信息
  83 +// * @return 路由地址
  84 +// */
  85 +// default String getRouterPath(SysMenuDO menu) {
  86 +// String routerPath = menu.getPath();
  87 +// // 非外链并且是一级目录(类型为目录)
  88 +// if (MenuIdEnum.ROOT.getId().equals(menu.getParentId())
  89 +// && MenuTypeEnum.MENU.getType().equals(menu.getMenuType())
  90 +// && CommonStatusEnum.DISABLE.getStatus().equals(menu.getIsFrame())) {
  91 +// routerPath = "/" + menu.getPath();
  92 +// }
  93 +// // 非外链并且是一级目录(类型为菜单)
  94 +// else if (isMenuFrame(menu)) {
  95 +// routerPath = "/";
  96 +// }
  97 +// return routerPath;
  98 +// }
  99 +
  100 + /**
  101 + * 获取组件信息
  102 + *
  103 + * @param menu 菜单信息
  104 + * @return 组件信息
  105 + */
  106 + default String getComponent(SysMenuDO menu) {
  107 + String component = LAYOUT;
  108 + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
  109 + component = menu.getComponent();
  110 + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) {
  111 + component = PARENT_VIEW;
  112 + }
  113 + return component;
  114 + }
  115 +
  116 + /**
  117 + * 是否为parent_view组件
  118 + *
  119 + * @param menu 菜单信息
  120 + * @return 结果
  121 + */
  122 + default boolean isParentView(SysMenuDO menu) {
  123 + return !MenuIdEnum.ROOT.getId().equals(menu.getParentId())
  124 + && MenuTypeEnum.DIR.getType().equals(menu.getMenuType());
  125 + }
33 126  
34 127 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/SysMenuService.java
... ... @@ -11,7 +11,7 @@ import java.util.List;
11 11 public interface SysMenuService {
12 12  
13 13 /**
14   - *
  14 + * 初始化菜单
15 15 */
16 16 void init();
17 17  
... ... @@ -39,4 +39,6 @@ public interface SysMenuService {
39 39 List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes,
40 40 Collection<String> menusStatuses);
41 41  
  42 +
  43 +
42 44 }
... ...
src/main/java/cn/iocoder/dashboard/modules/system/service/permission/impl/SysMenuServiceImpl.java
... ... @@ -12,7 +12,10 @@ import org.springframework.stereotype.Service;
12 12  
13 13 import javax.annotation.PostConstruct;
14 14 import javax.annotation.Resource;
15   -import java.util.*;
  15 +import java.util.Collection;
  16 +import java.util.Collections;
  17 +import java.util.List;
  18 +import java.util.Map;
16 19 import java.util.stream.Collectors;
17 20  
18 21 /**
... ... @@ -83,4 +86,5 @@ public class SysMenuServiceImpl implements SysMenuService {
83 86 && menusStatuses.contains(menu.getStatus()))
84 87 .collect(Collectors.toList());
85 88 }
  89 +
86 90 }
... ...
src/main/resources/application.yaml
... ... @@ -3,7 +3,7 @@ spring:
3 3 name: dashboard
4 4 # 数据源配置项 TODO 多数据源;TODO 监控配置
5 5 datasource:
6   - url: jdbc:mysql://127.0.1:3306/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
  6 + url: jdbc:mysql://127.0.1:33061/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
7 7 driver-class-name: com.mysql.jdbc.Driver
8 8 username: root
9 9 password: 123456
... ...