ASP.netcore ORM框架递归 实现导航栏菜单树形结构接口

前端:

后端:

创建实体类:

 public  class NavbarTreeQuery
 {
     /// <summary>
     /// 系统编号 
     /// </summary>
     public string? id { get; set; }
     /// <summary>
     /// 编号
     /// </summary>
     [Required(ErrorMessage = "Code type is required.")]
     public string code { get; set; }
     /// <summary>
     /// 英文名称
     /// </summary>
     public string? name_en { get; set; }
     /// <summary>
     /// 中文名称
     /// </summary>
     public string? name_cn { get; set; }
     /// <summary>
     /// 繁体名称
     /// </summary>
     public string? label { get; set; }
     /// <summary>
     /// ICON
     /// </summary>
     public string? icon { get; set; }
     /// <summary>
     /// 备注
     /// </summary>
     public string? remark { get; set; }
     /// <summary>
     /// 类型 0:目录;1:菜单
     /// </summary>
     public int? type { get; set; }
     /// <summary>
     /// 功能列表
     /// </summary>
     public string? functionlist_id { get; set; }
     /// <summary>
     /// 是否有显示0顯示1不顯示
     /// </summary>
     public int? display { get; set; }
     /// <summary>
     /// 是否有下级0,1,2,3 0表示一級,1表示二級,2表示三级,3表示四级
     /// </summary>
     public int? subordinate { get; set; }
     /// <summary>
     /// 上级ID
     /// </summary>
     public string? superior_id { get; set; }
     /// <summary>
     /// 公司ID
     /// </summary>
     public string? company_id { get; set; }
     /// <summary>
     /// 创建者
     /// </summary>
     public string? create_user { get; set; }
     /// <summary>
     /// 创建时间
     /// </summary>
     public DateTime? create_date { get; set; }
     /// <summary>
     /// 修改者
     /// </summary>
     public string? modify_user { get; set; }
     /// <summary>
     /// 修改时间
     /// </summary>
     public DateTime? modify_date { get; set; }
     /// <summary>
     /// 优先级
     /// </summary>
     public int priority { get; set; }

     public IList<NavbarTreeQuery> children { get; set; } = new List<NavbarTreeQuery>();
 }

写下来是代码:

  /// <summary>
  /// 查询全部树形 导航栏
  /// </summary>
  /// <param name="bs"></param>
  /// <returns></returns>
  public async Task<List<NavbarTreeQuery>> QueryAllTree(BaseQuery<BasicSettings> bs)
  {
      var fidsNode = _sqlSugarClient.Queryable<NavbarModel>()
          .Where(navbar => navbar.NO_SUBORDINATE == 0)
          .OrderBy(navbar => navbar.NO_PRIORITY, OrderByType.Asc)
          .ToList(); //查父级

      var tree = new List<NavbarTreeQuery>();

      foreach (var item in fidsNode)
      {
          NavbarTreeQuery model1 = new NavbarTreeQuery
          {
              id = item.ST_ID,
              code = item.ST_CODE,
              //name_cn = item.ST_NAME_CN,
              //name_en = item.ST_NAME_EN,
              //过滤器找到了对应的资源文件,然后用里面的值就行了
              label = GetValue(lang.LangType, item.ST_NAME_CN, item.ST_LABEL, item.ST_NAME_EN, ""),
              company_id = item.ST_COMPANY_ID,
              create_date = item.DT_CREATEDATE,
              create_user = item.ST_CREATEUSER,
              modify_date = item.DT_MODIFYDATE,
              modify_user = item.ST_MODIFYUSER,
              remark = item.ST_REMARK,
              icon = item.ST_ICON,
              subordinate = item.NO_SUBORDINATE,
              superior_id = item.ST_SUPERIOR_ID,
              display = item.NO_DISPLAY,
              functionlist_id = item.ST_FUNCTIONLIST_ID,
              type = item.NO_TYPE,
              priority = item.NO_PRIORITY
          };

          AddChildMenu(model1, bs.oData.id);
          tree.Add(model1);
      }

      return tree;
  }
 
  /// <summary>
  /// 递归构造子节点函数 导航栏
  /// </summary>
  /// <param name="muenListd">当前节点</param>
  private void AddChildMenu(NavbarTreeQuery muenListd, string id)
  {
      try
      {


          var childMenu = _sqlSugarClient.Queryable<NavbarModel>()
              .Where(p => p.ST_SUPERIOR_ID == muenListd.id)
              .OrderBy(navbar => navbar.NO_PRIORITY, OrderByType.Asc)
              .ToList();



          if (childMenu != null)
          {
              foreach (var item in childMenu)
              {
                  NavbarTreeQuery model = new NavbarTreeQuery
                  {
                      id = item.ST_ID,
                      code = item.ST_CODE,
                      //name_cn = item.ST_NAME_CN ,
                      //name_en = item.ST_NAME_EN ,
                      label = GetValue(lang.LangType, item.ST_NAME_CN, item.ST_LABEL, item.ST_NAME_EN, ""),

                      company_id = item.ST_COMPANY_ID,
                      create_date = item.DT_CREATEDATE,
                      create_user = item.ST_CREATEUSER,
                      modify_date = item.DT_MODIFYDATE,
                      modify_user = item.ST_MODIFYUSER,
                      remark = item.ST_REMARK,
                      functionlist_id = item.ST_FUNCTIONLIST_ID,
                      type = item.NO_TYPE,
                      icon = item.ST_ICON,
                      subordinate = item.NO_SUBORDINATE,
                      superior_id = item.ST_SUPERIOR_ID,
                      display = item.NO_DISPLAY,
                      priority = item.NO_PRIORITY
                  };

                  muenListd.children.Add(model);
                  AddChildMenu(model, id); //递归调用,将当前节点作为参数传入子节点

                  // 添加跳出条件,当子节点的children为空时跳出递归
                  if (model.children.Count == 0)
                  {
                      model.children = null;
                  }
              }
          }
      }
      catch (Exception)
      {
          throw;
      }
  }

结果返回树形格式如图:

如何在前端使用 可以看"VUE3+el-tree的使用"这篇文章https://blog.csdn.net/qq_58734875/article/details/134857216?spm=1001.2014.3001.5501

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值