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,7 +26,7 @@ import com.ruoyi.system.service.ISysMenuService;
26 26
27 /** 27 /**
28 * 菜单 业务层处理 28 * 菜单 业务层处理
29 - * 29 + *
30 * @author ruoyi 30 * @author ruoyi
31 */ 31 */
32 @Service 32 @Service
@@ -45,7 +45,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -45,7 +45,7 @@ public class SysMenuServiceImpl implements ISysMenuService
45 45
46 /** 46 /**
47 * 根据用户查询系统菜单列表 47 * 根据用户查询系统菜单列表
48 - * 48 + *
49 * @param userId 用户ID 49 * @param userId 用户ID
50 * @return 菜单列表 50 * @return 菜单列表
51 */ 51 */
@@ -57,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -57,7 +57,7 @@ public class SysMenuServiceImpl implements ISysMenuService
57 57
58 /** 58 /**
59 * 查询系统菜单列表 59 * 查询系统菜单列表
60 - * 60 + *
61 * @param menu 菜单信息 61 * @param menu 菜单信息
62 * @return 菜单列表 62 * @return 菜单列表
63 */ 63 */
@@ -80,7 +80,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -80,7 +80,7 @@ public class SysMenuServiceImpl implements ISysMenuService
80 80
81 /** 81 /**
82 * 根据用户ID查询权限 82 * 根据用户ID查询权限
83 - * 83 + *
84 * @param userId 用户ID 84 * @param userId 用户ID
85 * @return 权限列表 85 * @return 权限列表
86 */ 86 */
@@ -101,7 +101,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -101,7 +101,7 @@ public class SysMenuServiceImpl implements ISysMenuService
101 101
102 /** 102 /**
103 * 根据用户ID查询菜单 103 * 根据用户ID查询菜单
104 - * 104 + *
105 * @param userId 用户名称 105 * @param userId 用户名称
106 * @return 菜单列表 106 * @return 菜单列表
107 */ 107 */
@@ -122,7 +122,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -122,7 +122,7 @@ public class SysMenuServiceImpl implements ISysMenuService
122 122
123 /** 123 /**
124 * 根据角色ID查询菜单树信息 124 * 根据角色ID查询菜单树信息
125 - * 125 + *
126 * @param roleId 角色ID 126 * @param roleId 角色ID
127 * @return 选中菜单列表 127 * @return 选中菜单列表
128 */ 128 */
@@ -134,81 +134,8 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -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 * @param menus 菜单列表 139 * @param menus 菜单列表
213 * @return 下拉树结构列表 140 * @return 下拉树结构列表
214 */ 141 */
@@ -221,7 +148,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -221,7 +148,7 @@ public class SysMenuServiceImpl implements ISysMenuService
221 148
222 /** 149 /**
223 * 根据菜单ID查询信息 150 * 根据菜单ID查询信息
224 - * 151 + *
225 * @param menuId 菜单ID 152 * @param menuId 菜单ID
226 * @return 菜单信息 153 * @return 菜单信息
227 */ 154 */
@@ -233,7 +160,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -233,7 +160,7 @@ public class SysMenuServiceImpl implements ISysMenuService
233 160
234 /** 161 /**
235 * 是否存在菜单子节点 162 * 是否存在菜单子节点
236 - * 163 + *
237 * @param menuId 菜单ID 164 * @param menuId 菜单ID
238 * @return 结果 165 * @return 结果
239 */ 166 */
@@ -246,7 +173,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -246,7 +173,7 @@ public class SysMenuServiceImpl implements ISysMenuService
246 173
247 /** 174 /**
248 * 查询菜单使用数量 175 * 查询菜单使用数量
249 - * 176 + *
250 * @param menuId 菜单ID 177 * @param menuId 菜单ID
251 * @return 结果 178 * @return 结果
252 */ 179 */
@@ -259,7 +186,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -259,7 +186,7 @@ public class SysMenuServiceImpl implements ISysMenuService
259 186
260 /** 187 /**
261 * 新增保存菜单信息 188 * 新增保存菜单信息
262 - * 189 + *
263 * @param menu 菜单信息 190 * @param menu 菜单信息
264 * @return 结果 191 * @return 结果
265 */ 192 */
@@ -271,7 +198,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -271,7 +198,7 @@ public class SysMenuServiceImpl implements ISysMenuService
271 198
272 /** 199 /**
273 * 修改保存菜单信息 200 * 修改保存菜单信息
274 - * 201 + *
275 * @param menu 菜单信息 202 * @param menu 菜单信息
276 * @return 结果 203 * @return 结果
277 */ 204 */
@@ -283,7 +210,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -283,7 +210,7 @@ public class SysMenuServiceImpl implements ISysMenuService
283 210
284 /** 211 /**
285 * 删除菜单管理信息 212 * 删除菜单管理信息
286 - * 213 + *
287 * @param menuId 菜单ID 214 * @param menuId 菜单ID
288 * @return 结果 215 * @return 结果
289 */ 216 */
@@ -295,7 +222,7 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -295,7 +222,7 @@ public class SysMenuServiceImpl implements ISysMenuService
295 222
296 /** 223 /**
297 * 校验菜单名称是否唯一 224 * 校验菜单名称是否唯一
298 - * 225 + *
299 * @param menu 菜单信息 226 * @param menu 菜单信息
300 * @return 结果 227 * @return 结果
301 */ 228 */
@@ -311,155 +238,4 @@ public class SysMenuServiceImpl implements ISysMenuService @@ -311,155 +238,4 @@ public class SysMenuServiceImpl implements ISysMenuService
311 return UserConstants.UNIQUE; 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,8 +24,10 @@ const permission = {
24 return new Promise(resolve => { 24 return new Promise(resolve => {
25 // 向后端请求路由数据 25 // 向后端请求路由数据
26 getRouters().then(res => { 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 const sidebarRoutes = filterAsyncRouter(sdata) 31 const sidebarRoutes = filterAsyncRouter(sdata)
30 const rewriteRoutes = filterAsyncRouter(rdata, true) 32 const rewriteRoutes = filterAsyncRouter(rdata, true)
31 rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) 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 \ No newline at end of file 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 package cn.iocoder.dashboard.modules.system.controller.auth.vo; 1 package cn.iocoder.dashboard.modules.system.controller.auth.vo;
2 2
  3 +import lombok.AllArgsConstructor;
  4 +import lombok.Builder;
3 import lombok.Data; 5 import lombok.Data;
  6 +import lombok.NoArgsConstructor;
4 7
5 import java.util.List; 8 import java.util.List;
6 9
@@ -10,6 +13,9 @@ import java.util.List; @@ -10,6 +13,9 @@ import java.util.List;
10 * @author ruoyi 13 * @author ruoyi
11 */ 14 */
12 @Data 15 @Data
  16 +@NoArgsConstructor
  17 +@AllArgsConstructor
  18 +@Builder
13 public class SysAuthGetRouterRespVO { 19 public class SysAuthGetRouterRespVO {
14 20
15 /** 21 /**
@@ -62,6 +68,9 @@ public class SysAuthGetRouterRespVO { @@ -62,6 +68,9 @@ public class SysAuthGetRouterRespVO {
62 private List<SysAuthGetRouterRespVO> children; 68 private List<SysAuthGetRouterRespVO> children;
63 69
64 @Data 70 @Data
  71 + @NoArgsConstructor
  72 + @AllArgsConstructor
  73 + @Builder
65 public static class MetaVO { 74 public static class MetaVO {
66 75
67 /** 76 /**
src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java
1 package cn.iocoder.dashboard.modules.system.convert.auth; 1 package cn.iocoder.dashboard.modules.system.convert.auth;
2 2
  3 +import cn.iocoder.dashboard.common.enums.CommonStatusEnum;
3 import cn.iocoder.dashboard.framework.security.core.LoginUser; 4 import cn.iocoder.dashboard.framework.security.core.LoginUser;
4 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO; 5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetInfoRespVO;
5 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO; 6 import cn.iocoder.dashboard.modules.system.controller.auth.vo.SysAuthGetRouterRespVO;
6 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO; 7 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO;
7 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO; 8 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysRoleDO;
8 import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.user.SysUserDO; 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 import cn.iocoder.dashboard.util.collection.CollectionUtils; 12 import cn.iocoder.dashboard.util.collection.CollectionUtils;
  13 +import jodd.util.StringUtil;
  14 +import org.apache.commons.lang3.StringUtils;
10 import org.mapstruct.Mapper; 15 import org.mapstruct.Mapper;
11 import org.mapstruct.Mapping; 16 import org.mapstruct.Mapping;
12 import org.mapstruct.factory.Mappers; 17 import org.mapstruct.factory.Mappers;
@@ -16,6 +21,12 @@ import java.util.List; @@ -16,6 +21,12 @@ import java.util.List;
16 @Mapper 21 @Mapper
17 public interface SysAuthConvert { 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 SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class); 30 SysAuthConvert INSTANCE = Mappers.getMapper(SysAuthConvert.class);
20 31
21 @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略 32 @Mapping(source = "updateTime", target = "updateTime", ignore = true) // 字段相同,但是含义不同,忽略
@@ -29,6 +40,88 @@ public interface SysAuthConvert { @@ -29,6 +40,88 @@ public interface SysAuthConvert {
29 .build(); 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,7 +11,7 @@ import java.util.List;
11 public interface SysMenuService { 11 public interface SysMenuService {
12 12
13 /** 13 /**
14 - * 14 + * 初始化菜单
15 */ 15 */
16 void init(); 16 void init();
17 17
@@ -39,4 +39,6 @@ public interface SysMenuService { @@ -39,4 +39,6 @@ public interface SysMenuService {
39 List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes, 39 List<SysMenuDO> listMenusFromCache(Collection<Long> menuIds, Collection<String> menuTypes,
40 Collection<String> menusStatuses); 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,7 +12,10 @@ import org.springframework.stereotype.Service;
12 12
13 import javax.annotation.PostConstruct; 13 import javax.annotation.PostConstruct;
14 import javax.annotation.Resource; 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 import java.util.stream.Collectors; 19 import java.util.stream.Collectors;
17 20
18 /** 21 /**
@@ -83,4 +86,5 @@ public class SysMenuServiceImpl implements SysMenuService { @@ -83,4 +86,5 @@ public class SysMenuServiceImpl implements SysMenuService {
83 && menusStatuses.contains(menu.getStatus())) 86 && menusStatuses.contains(menu.getStatus()))
84 .collect(Collectors.toList()); 87 .collect(Collectors.toList());
85 } 88 }
  89 +
86 } 90 }
src/main/resources/application.yaml
@@ -3,7 +3,7 @@ spring: @@ -3,7 +3,7 @@ spring:
3 name: dashboard 3 name: dashboard
4 # 数据源配置项 TODO 多数据源;TODO 监控配置 4 # 数据源配置项 TODO 多数据源;TODO 监控配置
5 datasource: 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 driver-class-name: com.mysql.jdbc.Driver 7 driver-class-name: com.mysql.jdbc.Driver
8 username: root 8 username: root
9 password: 123456 9 password: 123456