SysMenuService.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702
  1. using Attribute;
  2. using Common;
  3. using Dto;
  4. using Enums;
  5. using Extensions;
  6. using Model;
  7. using Service;
  8. using Services;
  9. using Vo;
  10. namespace Services
  11. {
  12. /// <summary>
  13. /// 菜单
  14. /// </summary>
  15. [AppService(ServiceType = typeof(ISysMenuService), ServiceLifetime = LifeTime.Transient)]
  16. public class SysMenuService : BaseService<SysMenu>, ISysMenuService
  17. {
  18. public ISysRoleService SysRoleService;
  19. public SysMenuService(ISysRoleService sysRoleService)
  20. {
  21. SysRoleService = sysRoleService;
  22. }
  23. /// <summary>
  24. /// 获取所有菜单数(菜单管理)
  25. /// </summary>
  26. /// <returns></returns>
  27. public List<TreeSelectVo> SelectTreeMenuList(MenuQueryDto menu, long userId)
  28. {
  29. // if (menu.parentId != null)
  30. // {
  31. // return GetMenusByMenuId(menu.parentId.ParseToInt(), userId);
  32. // }
  33. List<TreeSelectVo> menuList = BuildMenuTreeSelect(SelectMenuList(menu, userId));
  34. return menuList;
  35. }
  36. /// <summary>
  37. /// 获取所有菜单列表
  38. /// </summary>
  39. /// <returns></returns>
  40. public List<SysMenu> SelectMenuList(MenuQueryDto menu, long userId)
  41. {
  42. List<SysMenu> menuList;
  43. if (SysRoleService.IsAdmin(userId))
  44. {
  45. menuList = SelectMenuList(menu);
  46. }
  47. else
  48. {
  49. var userRoles = SysRoleService.SelectUserRoles(userId);
  50. menuList = SelectMenuListByRoles(menu, userRoles);
  51. }
  52. return menuList;
  53. }
  54. /// <summary>
  55. /// 获取菜单详情
  56. /// </summary>
  57. /// <param name="menuId"></param>
  58. /// <returns></returns>
  59. public SysMenu GetMenuByMenuId(int menuId)
  60. {
  61. return GetFirst(it => it.menuId == menuId);
  62. }
  63. /// <summary>
  64. /// 根据菜单id获取菜单列表
  65. /// </summary>
  66. /// <param name="menuId"></param>
  67. /// <param name="userId"></param>
  68. /// <returns></returns>
  69. public List<SysMenu> GetMenusByMenuId(int menuId, long userId)
  70. {
  71. var menuExpression = Expressionable.Create<SysMenu>();
  72. menuExpression.And(c => c.parentId == menuId);
  73. if (!SysRoleService.IsAdmin(userId))
  74. {
  75. var userRoles = SysRoleService.SelectUserRoles(userId);
  76. var roleMenus = Context.Queryable<SysRoleMenu>()
  77. .Where(r => userRoles.Contains(r.RoleId)).Select(s => s.MenuId).ToList();
  78. menuExpression.And(c => roleMenus.Contains(c.menuId));
  79. }
  80. var list = GetList(menuExpression.ToExpression()).OrderBy(f => f.sortOrder).ToList();
  81. Context.ThenMapper(list, item =>
  82. {
  83. item.subNum = Context.Queryable<SysMenu>().SetContext(x => x.parentId, () => item.menuId, item).Count;
  84. });
  85. return list;
  86. }
  87. /// <summary>
  88. /// 添加菜单
  89. /// </summary>
  90. /// <param name="menu"></param>
  91. /// <returns></returns>
  92. public long AddMenu(SysMenu menu)
  93. {
  94. menu.CreateTime = DateTime.Now;
  95. menu.UpdateTime = DateTime.Now;
  96. return InsertReturnBigIdentity(menu);
  97. }
  98. /// <summary>
  99. /// 添加菜单
  100. /// </summary>
  101. /// <param name="menu"></param>
  102. /// <returns></returns>
  103. public void AddMenuFromApi(AddMenuFromApiDto param)
  104. {
  105. long parentMenuId = 0;
  106. var parentMenu = GetFirst(m => m.enName == param.module);
  107. if(parentMenu != null)
  108. {
  109. parentMenuId = parentMenu.menuId;
  110. }
  111. else
  112. {
  113. parentMenuId = InsertReturnIdentity(new SysMenu()
  114. {
  115. name = param.module,
  116. enName = param.module,
  117. path = "/" + param.module,
  118. icon = "ep:coffee",
  119. parentId = -1,
  120. visible = "1",
  121. keepAlive = "1",
  122. menuType = "0",
  123. CreateBy = "admin",
  124. CreateTime = DateTime.Now,
  125. UpdateBy = "admin",
  126. UpdateTime = DateTime.Now,
  127. });
  128. }
  129. SysMenu rootMenu = GetFirst(m => m.enName == param.rootPath && m.path == param.apiPath) ?? new SysMenu();
  130. if (!Any(m => m.enName == param.apiEnName && m.path == param.apiPath))
  131. {
  132. int menuId = InsertReturnIdentity(new SysMenu()
  133. {
  134. name = param.apiName.Split('-')[0],
  135. enName = param.apiEnName,
  136. path = param.apiPath,
  137. parentId = parentMenuId,
  138. visible = "1",
  139. keepAlive = "1",
  140. menuType = "0",
  141. CreateBy = "admin",
  142. CreateTime = DateTime.Now,
  143. UpdateBy = "admin",
  144. UpdateTime = DateTime.Now,
  145. });
  146. InsertReturnIdentity(new SysMenu()
  147. {
  148. name = "新增",
  149. permission = string.Concat(param.module, "_add", param.apiEnName[..1].ToUpper(), param.apiEnName.AsSpan(1)),
  150. parentId = menuId,
  151. visible = "1",
  152. keepAlive = "1",
  153. menuType = "1",
  154. CreateBy = "admin",
  155. CreateTime = DateTime.Now,
  156. UpdateBy = "admin",
  157. UpdateTime = DateTime.Now,
  158. });
  159. InsertReturnIdentity(new SysMenu()
  160. {
  161. name = "修改",
  162. permission = string.Concat(param.module, "_update", param.apiEnName[..1].ToUpper(), param.apiEnName.AsSpan(1)),
  163. parentId = menuId,
  164. visible = "1",
  165. keepAlive = "1",
  166. menuType = "1",
  167. CreateBy = "admin",
  168. CreateTime = DateTime.Now,
  169. UpdateBy = "admin",
  170. UpdateTime = DateTime.Now,
  171. });
  172. InsertReturnIdentity(new SysMenu()
  173. {
  174. name = "删除",
  175. permission = string.Concat(param.module, "_delete", param.apiEnName[..1].ToUpper(), param.apiEnName.AsSpan(1)),
  176. parentId = menuId,
  177. visible = "1",
  178. keepAlive = "1",
  179. menuType = "1",
  180. CreateBy = "admin",
  181. CreateTime = DateTime.Now,
  182. UpdateBy = "admin",
  183. UpdateTime = DateTime.Now,
  184. });
  185. }
  186. }
  187. /// <summary>
  188. /// 编辑菜单
  189. /// </summary>
  190. /// <param name="menu"></param>
  191. /// <returns></returns>
  192. public long EditMenu(SysMenu menu)
  193. {
  194. menu.UpdateTime = DateTime.Now;
  195. menu.icon = string.IsNullOrEmpty(menu.icon) ? "" : menu.icon;
  196. return Update(menu, true);
  197. }
  198. /// <summary>
  199. /// 删除菜单管理信息
  200. /// </summary>
  201. /// <param name="menuId"></param>
  202. /// <returns></returns>
  203. public int DeleteMenuById(int menuId)
  204. {
  205. return Delete(menuId);
  206. }
  207. /// <summary>
  208. /// 校验菜单名称是否唯一
  209. /// </summary>
  210. /// <param name="menu"></param>
  211. /// <returns></returns>
  212. public string CheckMenuNameUnique(SysMenu menu)
  213. {
  214. long menuId = menu.menuId == 0 ? -1 : menu.menuId;
  215. SysMenu info = GetFirst(it => it.name == menu.name && it.parentId == menu.parentId);
  216. //if (info != null && menuId != info.menuId && menu.menuName.Equals(info.menuName))
  217. //{
  218. // return UserConstants.NOT_UNIQUE;
  219. //}
  220. if (info != null && info.menuId != menu.menuId)
  221. {
  222. return UserConstants.NOT_UNIQUE;
  223. }
  224. return UserConstants.UNIQUE;
  225. }
  226. /// <summary>
  227. /// 菜单排序
  228. /// </summary>
  229. /// <param name="menuDto"></param>
  230. /// <returns></returns>
  231. public int ChangeSortMenu(MenuDto menuDto)
  232. {
  233. return Update(new SysMenu() { menuId = menuDto.menuId, sortOrder = menuDto.sortOrder }, it => new { it.sortOrder });
  234. }
  235. /// <summary>
  236. /// 是否存在菜单子节点
  237. /// </summary>
  238. /// <param name="menuId"></param>
  239. /// <returns></returns>
  240. public bool HasChildByMenuId(long menuId)
  241. {
  242. return Count(it => it.parentId == menuId) > 0;
  243. }
  244. /// <summary>
  245. /// 获取左边导航栏菜单树
  246. /// </summary>
  247. /// <param name="userId"></param>
  248. /// <returns></returns>
  249. public List<SysMenu> SelectMenuTreeByUserId(long userId)
  250. {
  251. MenuQueryDto dto = new() { delFlag = "0", menuTypeIds = "M,C" };
  252. if (SysRoleService.IsAdmin(userId))
  253. {
  254. return SelectTreeMenuList(dto);
  255. }
  256. else
  257. {
  258. List<long> roleIds = SysRoleService.SelectUserRoles(userId);
  259. return SelectTreeMenuListByRoles(dto, roleIds);
  260. }
  261. }
  262. /// <summary>
  263. /// 查询精确到按钮的操作权限
  264. /// </summary>
  265. /// <param name="userId"></param>
  266. /// <returns></returns>
  267. public List<string> SelectMenuPermsByUserId(long userId)
  268. {
  269. var menus = Context.Queryable<SysMenu, SysRoleMenu, SysUserRole, SysRole>((m, rm, ur, r) => new JoinQueryInfos(
  270. JoinType.Left, m.menuId == rm.MenuId,
  271. JoinType.Left, rm.RoleId == ur.RoleId,
  272. JoinType.Left, ur.RoleId == r.roleId
  273. ))
  274. .WithCache(60 * 10)
  275. .Where((m, rm, ur, r) => m.DelFlag == "0" && ur.UserId == userId)
  276. .Select((m, rm, ur, r) => m).ToList();
  277. var menuList = menus.Where(f => !string.IsNullOrEmpty(f.permission));
  278. return menuList.Select(x => x.permission).Distinct().ToList();
  279. }
  280. /// <summary>
  281. /// 根据用户查询系统菜单列表
  282. /// </summary>
  283. /// <param name="menu"></param>
  284. /// <param name="roles">用户角色集合</param>
  285. /// <returns></returns>
  286. public List<SysMenu> SelectTreeMenuListByRoles(MenuQueryDto menu, List<long> roles)
  287. {
  288. var roleMenus = Context.Queryable<SysRoleMenu>()
  289. .Where(r => roles.Contains(r.RoleId))
  290. .Select(f => f.MenuId).Distinct().ToList();
  291. return Queryable()
  292. .Where(c => roleMenus.Contains(c.menuId))
  293. .WhereIF(!string.IsNullOrEmpty(menu.menuName), (c) => c.name.Contains(menu.menuName))
  294. .WhereIF(!string.IsNullOrEmpty(menu.visible), (c) => c.visible == menu.visible)
  295. .WhereIF(!string.IsNullOrEmpty(menu.delFlag), (c) => c.DelFlag == menu.delFlag)
  296. // .WhereIF(!string.IsNullOrEmpty(menu.menuTypeIds), c => menu.menuTypeIdArr.Contains(c.menuType))
  297. .OrderBy((c) => new { c.parentId, c.sortOrder })
  298. .Select(c => c)
  299. .ToTree(it => it.children, it => it.parentId, 0);
  300. }
  301. /// <summary>
  302. /// 根据用户查询系统菜单列表
  303. /// </summary>
  304. /// <param name="menu"></param>
  305. /// <param name="roleId">用户角色</param>
  306. /// <returns></returns>
  307. public List<RoleMenuExportDto> SelectRoleMenuListByRole(MenuQueryDto menu, int roleId)
  308. {
  309. var menuIds = Context.Queryable<SysRoleMenu>()
  310. .Where(r => r.RoleId == roleId)
  311. .Select(f => f.MenuId).Distinct().ToList();
  312. return Context.Queryable<SysMenu>()
  313. .InnerJoin<SysMenu>((t1, t2) => t1.menuId == t2.parentId)
  314. .InnerJoin<SysMenu>((t1, t2, t3) => t2.menuId == t3.parentId)
  315. .Where((t1, t2, t3) => menuIds.Contains(t1.menuId))
  316. .Select((t1, t2, t3) => new RoleMenuExportDto()
  317. {
  318. MenuName = $"{t1.name}->{t2.name}->{t3.name}",
  319. Path = t2.path,
  320. Component = t2.path,
  321. Perms = t3.permission,
  322. MenuType = (MenuType)(object)t3.menuType,
  323. Status = (MenuStatus)(object)t3.DelFlag
  324. }).ToList();
  325. }
  326. /// <summary>
  327. /// 获取所有菜单
  328. /// </summary>
  329. /// <returns></returns>
  330. private List<SysMenu> SelectMenuList(MenuQueryDto menu)
  331. {
  332. var menuExp = Expressionable.Create<SysMenu>();
  333. menuExp.AndIF(!string.IsNullOrEmpty(menu.menuName), it => it.name.Contains(menu.menuName));
  334. menuExp.AndIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible);
  335. menuExp.AndIF(!string.IsNullOrEmpty(menu.delFlag), it => it.DelFlag == menu.delFlag);
  336. // menuExp.AndIF(!string.IsNullOrEmpty(menu.menuTypeIds), it => menu.menuTypeIdArr.Contains(it.menuType));
  337. menuExp.AndIF(menu.parentId != null, it => it.parentId == menu.parentId);
  338. return Queryable()
  339. .Where(menuExp.ToExpression())
  340. .OrderBy(it => new { it.parentId, it.sortOrder })
  341. .ToList();
  342. }
  343. /// <summary>
  344. /// 根据用户查询系统菜单列表
  345. /// </summary>
  346. /// <param name="sysMenu"></param>
  347. /// <param name="roles">用户角色集合</param>
  348. /// <returns></returns>
  349. private List<SysMenu> SelectMenuListByRoles(MenuQueryDto sysMenu, List<long> roles)
  350. {
  351. var roleMenus = Context.Queryable<SysRoleMenu>()
  352. .Where(r => roles.Contains(r.RoleId));
  353. return Queryable()
  354. .InnerJoin(roleMenus, (c, j) => c.menuId == j.MenuId)
  355. .Where((c, j) => c.DelFlag == "0")
  356. .WhereIF(!string.IsNullOrEmpty(sysMenu.menuName), (c, j) => c.name.Contains(sysMenu.menuName))
  357. .WhereIF(!string.IsNullOrEmpty(sysMenu.visible), (c, j) => c.visible == sysMenu.visible)
  358. .OrderBy((c, j) => new { c.parentId, c.sortOrder })
  359. .Select(c => c)
  360. .ToList();
  361. }
  362. /// <summary>
  363. /// 获取所有菜单(菜单管理)
  364. /// </summary>
  365. /// <returns></returns>
  366. public List<SysMenu> SelectTreeMenuList(MenuQueryDto menu)
  367. {
  368. int parentId = menu.parentId != null ? (int)menu.parentId : 0;
  369. var list = Queryable()
  370. .WithCache(60 * 10)
  371. .WhereIF(!string.IsNullOrEmpty(menu.menuName), it => it.name.Contains(menu.menuName))
  372. .WhereIF(!string.IsNullOrEmpty(menu.visible), it => it.visible == menu.visible)
  373. .WhereIF(!string.IsNullOrEmpty(menu.delFlag), it => it.DelFlag == menu.delFlag)
  374. // .WhereIF(!string.IsNullOrEmpty(menu.menuTypeIds), it => menu.menuTypeIdArr.Contains(it.menuType))
  375. .WhereIF(menu.parentId != null, it => it.parentId == menu.parentId)
  376. .OrderBy(it => new { it.parentId, it.sortOrder })
  377. .ToTree(it => it.children, it => it.parentId, parentId);
  378. return list;
  379. }
  380. #region 方法
  381. ///// <summary>
  382. ///// 根据父节点的ID获取所有子节点
  383. ///// </summary>
  384. ///// <param name="list">分类表</param>
  385. ///// <param name="parentId">传入的父节点ID</param>
  386. ///// <returns></returns>
  387. //public List<SysMenu> GetChildPerms(List<SysMenu> list, int parentId)
  388. //{
  389. // List<SysMenu> returnList = new List<SysMenu>();
  390. // var data = list.FindAll(f => f.parentId == parentId);
  391. // foreach (var item in data)
  392. // {
  393. // RecursionFn(list, item);
  394. // returnList.Add(item);
  395. // }
  396. // return returnList;
  397. //}
  398. /// <summary>
  399. /// 递归列表
  400. /// </summary>
  401. /// <param name="list"></param>
  402. /// <param name="t"></param>
  403. private void RecursionFn(List<SysMenu> list, SysMenu t)
  404. {
  405. //得到子节点列表
  406. List<SysMenu> childList = GetChildList(list, t);
  407. t.children = childList;
  408. // t.meta = new TreeSelectMeta();
  409. t.title = t.name;
  410. t.icon = t.icon;
  411. t.id = t.menuId;
  412. foreach (var item in childList)
  413. {
  414. if (GetChildList(list, item).Count() > 0)
  415. {
  416. RecursionFn(list, item);
  417. }
  418. }
  419. }
  420. /// <summary>
  421. /// 递归获取子菜单
  422. /// </summary>
  423. /// <param name="list">所有菜单</param>
  424. /// <param name="sysMenu"></param>
  425. /// <returns></returns>
  426. private List<SysMenu> GetChildList(List<SysMenu> list, SysMenu sysMenu)
  427. {
  428. return list.Where(p => p.parentId == sysMenu.menuId).ToList();
  429. }
  430. /// <summary>
  431. /// 获取路由侧边栏,动态生成
  432. /// </summary>
  433. /// <param name="menus"></param>
  434. /// <returns></returns>
  435. public List<RouterVo> BuildMenus(List<SysMenu> menus)
  436. {
  437. List<RouterVo> routers = new();
  438. if (menus == null) return routers;
  439. foreach (var menu in menus)
  440. {
  441. RouterVo router = new()
  442. {
  443. Hidden = "1".Equals(menu.visible),
  444. Name = GetRouteName(menu),
  445. Path = GetRoutePath(menu),
  446. Component = GetComponent(menu),
  447. Meta = new Meta(menu.name, menu.icon, "1".Equals(menu.keepAlive), menu.enName, menu.path, menu.CreateTime.Value)
  448. };
  449. List<SysMenu> cMenus = menu.children;
  450. //是目录并且有子菜单
  451. if (cMenus != null && cMenus.Count > 0 && UserConstants.TYPE_DIR.Equals(menu.menuType))
  452. {
  453. router.AlwaysShow = true;
  454. router.Redirect = "noRedirect";
  455. router.Children = BuildMenus(cMenus);
  456. }
  457. else if (IsMeunFrame(menu))
  458. {
  459. router.Meta = null;
  460. List<RouterVo> childrenList = new();
  461. RouterVo children = new()
  462. {
  463. Path = menu.path,
  464. Name = string.IsNullOrEmpty(menu.path) ? "" : menu.path.ToLower(),
  465. Meta = new Meta(menu.name, menu.icon, "1".Equals(menu.keepAlive), menu.enName, menu.path, menu.CreateTime.Value)
  466. };
  467. childrenList.Add(children);
  468. router.Children = childrenList;
  469. }
  470. else if (menu.parentId == 0 && IsInnerLink(menu))
  471. {
  472. router.Meta = new Meta(menu.name, menu.icon);
  473. router.Path = "/";
  474. List<RouterVo> childrenList = new();
  475. RouterVo children = new();
  476. string routerPath = InnerLinkReplaceEach(menu.path);
  477. children.Path = routerPath;
  478. children.Component = UserConstants.INNER_LINK;
  479. children.Name = routerPath.ToLower();
  480. children.Meta = new Meta(menu.name, menu.icon, menu.path);
  481. childrenList.Add(children);
  482. router.Children = childrenList;
  483. }
  484. routers.Add(router);
  485. }
  486. return routers;
  487. }
  488. /// <summary>
  489. /// 构建前端所需要下拉树结构
  490. /// </summary>
  491. /// <param name="menus">菜单列表</param>
  492. /// <returns>下拉树结构列表</returns>
  493. public List<SysMenu> BuildMenuTree(List<SysMenu> menus)
  494. {
  495. List<SysMenu> returnList = new();
  496. List<long> tempList = menus.Select(f => f.menuId).ToList();
  497. foreach (var menu in menus)
  498. {
  499. // 如果是顶级节点, 遍历该父节点的所有子节点
  500. if (!tempList.Contains(menu.parentId))
  501. {
  502. var menuInfo = menus.Find(f => f.menuId == menu.menuId);
  503. //移除按钮没有上级
  504. if (!tempList.Contains(menuInfo.parentId) && menu.menuType != "F")
  505. {
  506. RecursionFn(menus, menu);
  507. returnList.Add(menu);
  508. }
  509. }
  510. }
  511. if (!returnList.Any())
  512. {
  513. returnList = menus;
  514. }
  515. return returnList;
  516. }
  517. /// <summary>
  518. /// 构建前端所需要下拉树结构
  519. /// </summary>
  520. /// <param name="menus"></param>
  521. /// <returns></returns>
  522. public List<TreeSelectVo> BuildMenuTreeSelect(List<SysMenu> menus)
  523. {
  524. List<SysMenu> menuTrees = BuildMenuTree(menus);
  525. List<TreeSelectVo> treeMenuVos = new List<TreeSelectVo>();
  526. foreach (var item in menuTrees)
  527. {
  528. treeMenuVos.Add(new TreeSelectVo(item));
  529. }
  530. return treeMenuVos;
  531. }
  532. public List<LeftMenuVo> BuildLeftMenuTreeSelect(List<SysMenu> menus)
  533. {
  534. List<SysMenu> menuTrees = BuildMenuTree(menus);
  535. List<LeftMenuVo> treeMenuVos = new List<LeftMenuVo>();
  536. foreach (var item in menuTrees)
  537. {
  538. treeMenuVos.Add(new LeftMenuVo(item));
  539. }
  540. return treeMenuVos;
  541. }
  542. /// <summary>
  543. /// 获取路由名称
  544. /// </summary>
  545. /// <param name="menu">菜单信息</param>
  546. /// <returns>路由名称</returns>
  547. public string GetRouteName(SysMenu menu)
  548. {
  549. string routerName = menu.path.ToLower();
  550. // 非外链并且是一级目录(类型为目录)
  551. if (IsMeunFrame(menu))
  552. {
  553. routerName = string.Empty;
  554. }
  555. return routerName;
  556. }
  557. /// <summary>
  558. /// 获取路由路径
  559. /// </summary>
  560. /// <param name="menu">菜单信息</param>
  561. /// <returns>路由地址</returns>
  562. public string GetRoutePath(SysMenu menu)
  563. {
  564. string routerPath = menu.path;
  565. // 内链打开外网方式
  566. if (menu.parentId != 0 && IsInnerLink(menu))
  567. {
  568. routerPath = InnerLinkReplaceEach(routerPath);
  569. }
  570. // 非外链并且是一级目录(类型为目录)
  571. if (0 == menu.parentId && UserConstants.TYPE_DIR.Equals(menu.menuType)
  572. && UserConstants.NO_FRAME.Equals(menu.embedded))
  573. {
  574. routerPath = "/" + menu.path;
  575. }
  576. else if (IsMeunFrame(menu))// 非外链并且是一级目录(类型为菜单)
  577. {
  578. routerPath = "/";
  579. }
  580. return routerPath;
  581. }
  582. /// <summary>
  583. /// 获取组件名称
  584. /// </summary>
  585. /// <param name="menu"></param>
  586. /// <returns></returns>
  587. public string GetComponent(SysMenu menu)
  588. {
  589. string component = UserConstants.LAYOUT;
  590. // if (!string.IsNullOrEmpty(menu.Component) && !IsMeunFrame(menu))
  591. // {
  592. // component = menu.Component;
  593. // }
  594. // else if (menu.Component.IsEmpty() && menu.ParentId != 0 && IsInnerLink(menu))
  595. // {
  596. // component = UserConstants.INNER_LINK;
  597. // }
  598. // else if (string.IsNullOrEmpty(menu.Component) && IsParentView(menu))
  599. // {
  600. // component = UserConstants.PARENT_VIEW;
  601. // }
  602. return component;
  603. }
  604. /// <summary>
  605. /// 是否为菜单内部跳转
  606. /// </summary>
  607. /// <param name="menu">菜单信息</param>
  608. /// <returns></returns>
  609. public bool IsMeunFrame(SysMenu menu)
  610. {
  611. return menu.parentId == 0 && UserConstants.TYPE_MENU.Equals(menu.menuType)
  612. && menu.embedded.Equals(UserConstants.NO_FRAME);
  613. }
  614. /// <summary>
  615. /// 是否为内链组件
  616. /// </summary>
  617. /// <param name="menu">菜单信息</param>
  618. /// <returns>结果</returns>
  619. public bool IsInnerLink(SysMenu menu)
  620. {
  621. return menu.embedded.Equals(UserConstants.NO_FRAME) && Tools.IsUrl(menu.path);
  622. }
  623. /// <summary>
  624. /// 是否为parent_view组件
  625. /// </summary>
  626. /// <param name="menu">菜单信息</param>
  627. /// <returns></returns>
  628. public bool IsParentView(SysMenu menu)
  629. {
  630. return menu.parentId != 0 && UserConstants.TYPE_DIR.Equals(menu.menuType);
  631. }
  632. /// <summary>
  633. /// 内链域名特殊字符替换
  634. /// </summary>
  635. /// <param name = "path" ></ param >
  636. /// < returns ></ returns >
  637. public string InnerLinkReplaceEach(string path)
  638. {
  639. return path.IsNotEmpty() ? path
  640. .Replace(UserConstants.HTTP, "")
  641. .Replace(UserConstants.HTTPS, "")
  642. .Replace(UserConstants.WWW, "")
  643. .Replace(".", "/") : path;
  644. }
  645. #endregion
  646. public void AddSysMenu()
  647. {
  648. }
  649. }
  650. }