使用WTM(ASP.NET Core)框架四步完成树形菜使用及制作增删查改功能

一、创建模型

1、在XXX.Model 项目中创建树形菜单类,继承BasePoco类和ITreeData接口。官方文档地址:点击进入

 2、在XXX.DataAccess项目中注册表。EF基本操作,这里就不多说了。

/// 
    /// 单位表
    /// 
    public class UnitWork: BasePoco,ITreeData
    {
        /// 
        /// 单位名称
        /// 
        [Display(Name = "部门名称")]
        public string UnitWorkName { get; set; }
        /// 
        /// 子菜单
        /// 
        
        public List Children { get; set; }
        /// 
        /// 子项
        /// 
        [Display(Name = "上级部门")]
        public UnitWork Parent { get; set; }
        /// 
        /// 子项ID
        /// 
        [Display(Name = "上级部门")]
        public Guid? ParentId { get; set ; }
    }

二、 新建视图模型,为控制器提供数据源。

在XXX.ViewModel项目中新建视图类,继承自BaseCRUDVM类。官方文档地址:点击进入

可以把CURD逻辑封装在此类中,也可以直接写到控制器中。(建议封装到视图类中。)这里为了方便,和更灵活的使用WTM数据库上下文,我写到控制器中。

  • Tree可以根据绑定Field字段的类型判断是单选模式还是多选模式,通过 Items 属性设置数据源,Items需要绑定一个List
  • TreeSelectListItem 是框架提供的辅助类,有 Id,Text,Url,Children等属性
  • 继承了ITreeData接口的模型,可以方便的调用框架提供的函数生成Tree控件需要的数据格式,
  • 比如 DC.Set().GetTreeSelectListItems( LoginUserInfo.DataPrivileges, null, x=>x.DepName) 直接读库并生成一个List
public class TestTreeVM : BaseCRUDVM
    {     
        public List AllParents { get; set; }
        /// 
        /// 生成树形菜单数据
        /// 
        protected override void InitVM()
        {
            AllParents = DC.Set().GetTreeSelectListItems(LoginUserInfo?.DataPrivileges, null, y => y.UnitWorkName);
        }      
    }

三、新建树形菜单CURD控制器

1、将控制器的继承修改为BaseController 

2、注意控制器中返回的视图,如果想完美继续使用WTM框架自带的layui后台菜单,建议使用 return PartialView();

public class TestVMController : BaseController
    {
        /// 
        /// 首页
        /// 
        /// 
        public IActionResult Index()
        {
            var vm = CreateVM();
            return PartialView(vm);
        }
        /// 
        /// 新增子菜单
        /// 
        /// 子菜单名
        /// 上级菜单主键
        /// 
        [HttpPost]
        public IActionResult Add(string name, string id)
        {
            UnitWork unit = new UnitWork
            {
                ParentId = new Guid(id),
                ID = new Guid(),
                UnitWorkName = name
            };

            DC.AddEntity(unit);
            int x = DC.SaveChanges();
            if (x > 0)
            {
                return Content("添加成功");
            }
            return Content("添加失败");
        }
        /// 
        /// 新增顶级菜单
        /// 
        /// 顶级菜单名称
        /// 
        [HttpPost]
        public IActionResult AddTop(string name)
        {
            UnitWork unit = new UnitWork
            {
                ID = new Guid(),
                UnitWorkName = name
            };
            DC.AddEntity(unit);
            int x = DC.SaveChanges();
            if (x > 0)
            {
                return Content("添加成功");
            }
            return Content("添加失败");
        }
        /// 
        /// 修改菜单
        /// 
        /// 修改名称
        /// 菜单主键
        /// 
        [HttpPost]
        public IActionResult Edit(string name, string id)
        {
            UnitWork unit = DC.Set().FirstOrDefault(x => x.ID.ToString() == id);
            unit.UnitWorkName = name;
            DC.UpdateEntity(unit);
            int x = DC.SaveChanges();
            if (x > 0)
            {
                return Content("修改成功");
            }
            return Content("修改失败");
        }
        /// 
        /// 单独删除菜单(若菜单下有分支,无法删除)
        /// 
        /// 菜单主键
        /// 
        [HttpPost]
        public IActionResult Del(string id)
        {
            UnitWork unit = DC.Set().FirstOrDefault(x => x.ID.ToString() == id);
            DC.DeleteEntity(unit);
            DC.CascadeDelete(unit);
            int x = DC.SaveChanges();
            if (x > 0)
            {
                return Content("删除成功");
            }
            return Content("删除失败");

        }
        /// 
        /// 删除菜单,(若菜单下有分支,连分支一起删除)
        /// 
        /// 
        /// 
        [HttpPost]
        public IActionResult DelAll(string id)
        {
            UnitWork unit = DC.Set().FirstOrDefault(x => x.ID.ToString() == id);
            DC.CascadeDelete(unit);
            int x = DC.SaveChanges();
            if (x > 0)
            {
                return Content("删除成功");
            }
            return Content("删除失败");
        }
    }

四、添加视图,完成树形菜单操作。

和平时使用cshtml页面一样,使用强类型视图,值得注意是WTM框架独有的TagHelper封装。 

如果是采用BaseCRUDVM的视图类,那么使用T类中的字段只需要使用Entity.字段名就可以了。无需二次编写代码。

@model HiddenPerils.ViewModel.HomeVMs.TestTreeVM
@{
    ViewData["Title"] = "Index";
}

树形菜单管理

 最终效果

使用WTM(ASP.NET Core)框架四步完成树形菜使用及制作增删查改功能_第1张图片

结尾:

1、树形菜单官方文档地址:点击进入

2、树形导航官当文档地址:点击进入

你可能感兴趣的:(WTM随写)