using System; using System.Collections.Generic; using System.IRepositories; using System.Linq; using System.Model; using System.Security.Claims; using System.Threading.Tasks; using System.Web; using System.Common; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TVShoppingCallCenter_ZLJ.Models.Inputs; namespace TVShoppingCallCenter_ZLJ.Controllers.System { [Authorize] [Produces("application/json")] [Route("api/[controller]")] public class ModuleInfoController : BaseController { private readonly ISys_ModuleInfoRepository _sys_moduleinfoRepository; public ModuleInfoController(ISys_ModuleInfoRepository sys_moduleinfoRepository) { _sys_moduleinfoRepository = sys_moduleinfoRepository; } /// /// 返回树形下拉框 菜单数据 /// /// [HttpGet("getall")] public async Task GetALL() { var list_ModuleInfo = await _sys_moduleinfoRepository.GetListALL(x => x.F_State == (int)EnumDelState.Enabled, o => o.F_Sort, SqlSugar.OrderByType.Asc); var treeList = new List(); foreach (var item in list_ModuleInfo) { TreeModel treeModel = new TreeModel(); treeModel.id = item.F_Id; treeModel.iconcls = item.F_ImgUrl; treeModel.text = item.F_MenuName; treeModel.parentid = item.F_ParentId.Value; treeList.Add(treeModel); } return Success("获取菜单树成功", treeList.TreeRecursion(0)); } /// /// 依据关键字获取相关菜单数据 /// /// /// [HttpGet("gettreegridjson")] public async Task GetTreeGridJson(string keyword) { var list_ModuleInfo = await _sys_moduleinfoRepository.GetListALL(x => x.F_State < (int)EnumDelState.Delete); if (!string.IsNullOrEmpty(keyword)) { list_ModuleInfo = list_ModuleInfo.ToList().TreeWhere(t => t.F_MenuName.Contains(keyword), "F_Id", "F_ParentId").ToList(); } list_ModuleInfo = list_ModuleInfo.Where(x => x.F_State != (int)EnumDelState.Delete).OrderBy(x => x.F_Sort).ThenByDescending(x => x.F_LastModifyOn).ToList();//排序 var treeList = new List(); foreach (var item in list_ModuleInfo) { TreeGridModel treeModel = new TreeGridModel(); bool hasChildren = list_ModuleInfo.Count(t => t.F_ParentId == item.F_Id) == 0 ? false : true; treeModel.id = item.F_Id.ToString(); treeModel.isLeaf = hasChildren; treeModel.parentId = item.F_ParentId.ToString(); treeModel.expanded = hasChildren; treeModel.entityJson = item.ToJson(); treeList.Add(treeModel); } return Content(treeList.TreeGridJson()); } /// /// 获取菜单实体 /// /// /// [HttpGet("getmodule")] public async Task GetModule(int mid) { var entity_ModuleInfo = await _sys_moduleinfoRepository.GetSingle(x=>x.F_Id==mid); if (entity_ModuleInfo != null) { return Success("加载菜单成功", new { name = entity_ModuleInfo.F_MenuName, imgUrl = entity_ModuleInfo.F_ImgUrl, code = entity_ModuleInfo.F_MenuCode, target = entity_ModuleInfo.F_Target, url = entity_ModuleInfo.F_OptUrl, enable = entity_ModuleInfo.F_State, remark = entity_ModuleInfo.F_Remark, sort = entity_ModuleInfo.F_Sort }); } else { return Error("加载菜单失败"); } } /// /// 添加菜单 /// /// /// [HttpPost("addmodule")] public async Task AddModule(ModuleInfoInput input) { if (string.IsNullOrEmpty(input.name)) return Error("请输入菜单名称"); if (string.IsNullOrEmpty(input.code)) return Error("请输入菜单代码"); var entity_ModuleInfo = new T_Sys_ModuleInfo(); entity_ModuleInfo.F_ParentId = input.parentid; entity_ModuleInfo.F_MenuName = input.name; entity_ModuleInfo.F_ImgUrl = HttpUtility.UrlDecode(input.imgurl); entity_ModuleInfo.F_MenuCode = input.code; entity_ModuleInfo.F_Target = input.target; entity_ModuleInfo.F_Remark = input.remark; entity_ModuleInfo.F_Sort = input.sort; entity_ModuleInfo.F_State = input.flag; entity_ModuleInfo.F_OptUrl = input.url; entity_ModuleInfo.F_CreateOn = DateTime.Now.ToLocalTime(); entity_ModuleInfo.F_CreateBy = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; var res = await _sys_moduleinfoRepository.Add(entity_ModuleInfo); if (res>0) { return Success("菜单添加成功"); } else { return Error("菜单添加失败,请重试!"); } } /// /// 删除菜单 /// /// /// [HttpPost("delmodule")] public async Task DelModule(int[] ids) { if (ids != null && ids.Length > 0) { var res = 0; //获取选中的菜单下所有级联菜单id List _ids = await GetTreeModuleId(new List(ids)); foreach (var item in _ids) { var ml = await _sys_moduleinfoRepository.GetSingle(x => x.F_Id == item); ml.F_State = (int)EnumDelState.Delete; ml.F_DeleteOn = DateTime.Now.ToLocalTime(); ml.F_DeleteBy = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; if (_sys_moduleinfoRepository.Update(ml).Result) res += 1; } if (res == ids.Length) return Success("删除菜单成功"); else if (res > 0 && res < ids.Length) return Error("部分删除失败,请查看后重新操作"); else return Error("删除失败,请查看后重新操作"); } else { return Error("获取参数失败"); } } /// /// 编辑菜单 /// /// /// [HttpPost("editmodule")] public async Task EditModule(ModuleInfoInput input) { if (string.IsNullOrEmpty(input.name)) return Error("请输入菜单名称"); if (string.IsNullOrEmpty(input.code)) return Error("请输入菜单代码"); var entity_ModuleInfo = await _sys_moduleinfoRepository.GetSingle(x=>x.F_Id==input.id); if (entity_ModuleInfo != null) { entity_ModuleInfo.F_ParentId = input.parentid; entity_ModuleInfo.F_MenuName = input.name; entity_ModuleInfo.F_ImgUrl = HttpUtility.UrlDecode(input.imgurl); entity_ModuleInfo.F_MenuCode = input.code; entity_ModuleInfo.F_Target = input.target; entity_ModuleInfo.F_Remark = input.remark; entity_ModuleInfo.F_Sort = input.sort; entity_ModuleInfo.F_State = input.flag; entity_ModuleInfo.F_OptUrl = input.url; entity_ModuleInfo.F_LastModifyOn = DateTime.Now; entity_ModuleInfo.F_LastModifyBy = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value; if (await _sys_moduleinfoRepository.Update(entity_ModuleInfo)) { return Success("菜单修改成功!"); } else { return Error("菜单修改失败,请重试!"); } } else { return Error("菜单对象获取失败"); } } #region 私有方法 /// /// 获取所有子节点的Id /// /// /// private async Task> GetTreeModuleId(List ids) { List _moduleIdlist = null; List _list = new List(ids); var list_ModuleInfo = await _sys_moduleinfoRepository.GetList();//DataSet 不在此处添加搜素条件,是因为计划改为缓存 for (int i = 0; i < ids.Count; i++) { _moduleIdlist = list_ModuleInfo.Where(x => x.F_ParentId == ids[i]).Select(x => x.F_Id).ToList(); if (_moduleIdlist.Count > 0) { _list.AddRange(_moduleIdlist); _list.AddRange(await GetTreeModuleId(_moduleIdlist)); _list = _list.Distinct().ToList(); } } return _list; } #endregion } }