using SqlSugar; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_ISystemRepository; using WIDESEAWCS_ISystemServices; using WIDESEAWCS_Model; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_SystemServices { public class Sys_MenuService : ServiceBase<Sys_Menu, ISys_MenuRepository>, ISys_MenuService { private readonly IUnitOfWorkManage _unitOfWorkManage; public Sys_MenuService(ISys_MenuRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; } /// <summary> /// 获å–当å‰ç”¨æˆ·æ‰€æœ‰èœå•与æƒé™ /// </summary> /// <returns></returns> public object GetCurrentMenuActionList() { object obj = GetMenuActionList(App.User.RoleId); if (obj is IEnumerable<object> list) { if (list.Any()) { return obj; } else { return WebResponseContent.Instance.Error("未获å–到èœå•ä¿¡æ¯"); } } return obj; } /// <summary> /// æ ¹æ®è§’色ID获å–èœå•与æƒé™ /// </summary> /// <param name="roleId"></param> /// <returns></returns> public object GetMenuActionList(int roleId) { if (App.User.IsRoleIdSuperAdmin(roleId)) { return BaseDal.GetSuperAdminMenu(); } return BaseDal.GetMenuByRoleId(roleId); } public List<Sys_Menu> GetUserMenuList(int roleId) { if (App.User.IsRoleIdSuperAdmin(roleId)) { return BaseDal.GetAllMenu(); } List<int> menuIds = BaseDal.GetPermissions(roleId).Select(x => x.MenuId).ToList(); return BaseDal.GetAllMenu().Where(x => menuIds.Contains(x.MenuId)).ToList(); } public List<Sys_Actions> GetActions(int menuId, List<Sys_Actions> menuActions, List<Permissions> permissions, int roleId) { if (App.User.IsRoleIdSuperAdmin(roleId)) { return menuActions; } return menuActions.Where(p => permissions .Exists(w => menuId == w.MenuId && w.UserAuthArr.Contains(p.Value))) .ToList(); } /// <summary> /// 编辑修改èœå•æ—¶,èŽ·å–æ‰€æœ‰èœå• /// </summary> /// <returns></returns> public object GetMenu() { if (App.User.IsRoleIdSuperAdmin(App.User.RoleId)) { List<int> menuIds = BaseDal.QueryData().Select(x => x.MenuId).ToList(); return BaseDal.GetMenu(menuIds); } else { List<int> menuIds = BaseDal.GetPermissions(App.User.RoleId).Select(x => x.MenuId).ToList(); return BaseDal.GetMenu(menuIds); } } /// <summary> /// 编辑èœå•时,获å–èœå•ä¿¡æ¯ /// </summary> /// <param name="menuId"></param> /// <returns></returns> public object GetTreeItem(int menuId) { return BaseDal.GetTreeItem(menuId); } /// <summary> /// 新建或编辑èœå• /// </summary> /// <param name="menu"></param> /// <returns></returns> public WebResponseContent Save(Sys_Menu menu) { WebResponseContent webResponse = new WebResponseContent(); if (menu == null) return webResponse.Error("没有获å–到æäº¤çš„傿•°"); if (menu.MenuId > 0 && menu.MenuId == menu.ParentId) return webResponse.Error("父级IDä¸èƒ½æ˜¯å½“å‰èœå•çš„ID"); try { //webResponse = menu.ValidationEntity(x => new { x.MenuName, x.TableName }); //if (!webResponse.Status) return webResponse; if (menu.TableName != "/" && menu.TableName != ".") { // 2022.03.26å¢žç§»åŠ¨ç«¯åŠ èœå•ç±»åž‹åˆ¤æ– Sys_Menu sysMenu = BaseDal.QueryFirst(x => x.TableName == menu.TableName); if (sysMenu != null) { sysMenu.MenuType ??= 0; if (sysMenu.MenuType == menu.MenuType) { if ((menu.MenuId > 0 && sysMenu.MenuId != menu.MenuId) || menu.MenuId <= 0) { return webResponse.Error($"视图/表åã€{menu.TableName}】已被其他èœå•使用"); } } } } bool _changed = false; if (menu.MenuId <= 0) { int id = BaseDal.AddData(menu); menu.MenuId = id; } else { //2020.05.07æ–°å¢žç¦æ¢é€‰æ‹©ä¸Šçº§è§’色为自己 if (menu.MenuId == menu.ParentId) { return webResponse.Error($"父级idä¸èƒ½ä¸ºè‡ªå·±"); } if (BaseDal.QueryFirst(x => x.ParentId == menu.MenuId && menu.ParentId == x.MenuId) != null) { return webResponse.Error($"ä¸èƒ½é€‰æ‹©æ¤çˆ¶çº§id,选择的父级id与当å‰èœå•å½¢æˆä¾èµ–关系"); } _changed = BaseDal.QueryData(c => c.MenuId == menu.MenuId).Select(s => s.Auth).FirstOrDefault() != menu.Auth; BaseDal.UpdateData(menu); } webResponse.OK("ä¿å˜æˆåŠŸ", menu); } catch (Exception ex) { webResponse.Error(ex.Message); } return webResponse; } public WebResponseContent DelMenu(int menuId) { WebResponseContent webResponse = new WebResponseContent(); if(BaseDal.QueryFirst(x=>x.ParentId == menuId) != null) { return webResponse = WebResponseContent.Instance.Error("当å‰èœå•å˜åœ¨åèœå•,è¯·å…ˆåˆ é™¤åèœå•!"); } BaseDal.DeleteDataById(menuId); return webResponse = WebResponseContent.Instance.OK("åˆ é™¤æˆåŠŸ"); } } }