欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > 构建分类树(ElementPlus的二级数据模型)

构建分类树(ElementPlus的二级数据模型)

2025/5/12 10:04:44 来源:https://blog.csdn.net/m0_64098720/article/details/146193017  浏览:    关键词:构建分类树(ElementPlus的二级数据模型)

构建分类树(ElementPlus的二级数据模型)

今天在根据ElementPlus构建分类树时,写后端请求时,遇到了构建List<Map<String,Object>>模型;记录一下。

前端建级联选择器需要的数据格式:

const data = [{value: '1',label: 'Level one 1',children: [{value: '1-1',label: 'Level two 1-1',children: [{value: '1-1-1',label: 'Level three 1-1-1',},],},],},{value: '2',label: 'Level one 2',children: [{value: '2-1',label: 'Level two 2-1',children: [{value: '2-1-1',label: 'Level three 2-1-1',},],},{value: '2-2',label: 'Level two 2-2',children: [{value: '2-2-1',label: 'Level three 2-2-1',},],},],}  

后端数据库信息格式:

UPDATE health_system.institution_category SET category_name = '国家级重点老年护理中心', category_alias = '医疗2', create_user = 10011, create_time = '2025-03-09 22:09:32', update_time = '2025-03-09 22:09:32', level = 1, level_name = '国家级养老机构', remark = '这是一个国家级养老机构' WHERE id = 1;
UPDATE health_system.institution_category SET category_name = '江苏省安宁疗护中心', category_alias = '医疗4', create_user = 10011, create_time = '2025-03-09 22:09:32', update_time = '2025-03-09 22:09:32', level = 2, level_name = '省级养老机构', remark = '这是一个省级养老机构' WHERE id = 2;
UPDATE health_system.institution_category SET category_name = '苏州市医养结合机构', category_alias = '医疗3333', create_user = 10011, create_time = '2025-03-09 22:09:32', update_time = '2025-03-09 22:09:32', level = 3, level_name = '市级养老机构', remark = '这是一个市级养老机构' WHERE id = 3;
UPDATE health_system.institution_category SET category_name = '工业园区医养结合机构', category_alias = '医疗6', create_user = 10011, create_time = '2025-03-09 22:09:32', update_time = '2025-03-09 22:09:32', level = 4, level_name = '社区养老机构', remark = '这是一个社区养老机构' WHERE id = 4;
UPDATE health_system.institution_category SET category_name = '省南京养老中心', category_alias = '医疗5', create_user = 10011, create_time = '2025-03-09 22:09:32', update_time = '2025-03-09 22:09:32', level = 2, level_name = '省级养老机构', remark = '这是一个省级养老机构' WHERE id = 5;
UPDATE health_system.institution_category SET category_name = '国家级养老院', category_alias = '1111', create_user = 1111, create_time = '2025-03-11 13:56:54', update_time = '2025-03-11 13:56:54', level = 1, level_name = '国家级养老机构', remark = '这是国家级养老机构' WHERE id = 7;
UPDATE health_system.institution_category SET category_name = '老年活动服务机构', category_alias = '11111', create_user = 11111, create_time = '2025-03-11 13:57:42', update_time = '2025-03-11 13:57:42', level = 5, level_name = '其它', remark = '其它养老机构' WHERE id = 8;
UPDATE health_system.institution_category SET category_name = '老年棋牌室', category_alias = '11111111', create_user = 110110, create_time = '2025-03-11 14:57:40', update_time = '2025-03-11 14:57:40', level = 5, level_name = '其它', remark = '老年棋牌室' WHERE id = 9;
UPDATE health_system.institution_category SET category_name = '家庭医疗', category_alias = '医疗', create_user = 1001, create_time = '2025-03-11 15:38:24', update_time = '2025-03-11 15:38:24', level = 6, level_name = '家庭医疗', remark = '家庭医疗备注' WHERE id = 10;
UPDATE health_system.institution_category SET category_name = '其它医疗', category_alias = '其它医疗', create_user = 1001, create_time = '2025-03-11 16:00:42', update_time = '2025-03-11 16:00:42', level = 6, level_name = '家庭医疗', remark = '家庭医疗备注' WHERE id = 11;
UPDATE health_system.institution_category SET category_name = '县级养老院', category_alias = '1234534', create_user = 1111111, create_time = '2025-03-11 21:30:00', update_time = '2025-03-11 21:30:00', level = 7, level_name = '县级', remark = '1111' WHERE id = 12;

后端实体:

@Data
@TableName("institution_category")
public class InstitutionCategory {private Long id; // 主键private String categoryName; // 分类名称private Integer level; // 层级private String levelName; // 层级名称
}

Controller:

@GetMapping("/tree")
public List<Map<String,Object>> getTree(){return institutionCategoryService.getTreeData();
}

Service:

public List<Map<String,Object> getTreeData(){List<InstitutionCategory> list = this.list();return buildTree(list);
}

ServiceImpl:

 private List<Map<Integer,Object> buildTree(List<InstitutionCategory> list){List<Map<String,Object>> tree = new ArrayList<>();Map<Integer,Map<String,Object>> levelMap = new HashMap<>();for(InstitutionCategory item : list){Integer level = item.getLevel();String levelName = item.getLevelName();Integer id = item.getId();String categoryName = item.getCategoryName();if(!levelMap.constainKey(level)){Map<String,Object> rootNode = new HashMap<>();rootNode.put("value", "level" + level);rootNode.put("label", levelName);rootNode.put("children", new ArrayList<>());levelMap.put(level,rootNode);tree.add(rootNode);// 将当前节点添加到对应 level 的 children 中Map<String, Object> childNode = new HashMap<>();childNode.put("value", "id" + id);childNode.put("label", categoryName);((List<Map<String, Object>>) levelMap.get(level).get("children")).add(childNode);}
return tree;
}
}

levelMap 的作用

levelMap 是一个 Map<Integer, Map<String, Object>> 类型的数据结构:

  • Keylevel(层级,例如 1, 2, 3 等)。
  • Value:对应层级的根节点(rootNode),是一个 Map<String, Object> 对象。

它的作用是:

  • 快速查找:通过 level 可以快速找到对应的根节点。
  • 避免重复创建:如果某个 level 的根节点已经存在,就不需要再创建,直接复用。

示例

假设有以下数据:

[{ id: 1, categoryName: "国家级重点老年护理中心", level: 1, levelName: "国家级养老机构" },{ id: 2, categoryName: "江苏省安宁疗护中心", level: 2, levelName: "省级养老机构" },{ id: 3, categoryName: "苏州市医养结合机构", level: 3, levelName: "市级养老机构" }
]
  • 当处理 level: 1 时:
    • 检查 levelMap,发现 level: 1 不存在。

    • 创建一个新的根节点 rootNode,并将其存储到 levelMap 中。

    • 最终 levelMap 的内容为:

      {1: {value: "level1",label: "国家级养老机构",children: []}
      }
      
  • 当处理 level: 2 时:
    • 检查 levelMap,发现 level: 2 不存在。

    • 创建一个新的根节点 rootNode,并将其存储到 levelMap 中。

    • 最终 levelMap 的内容为:

      {1: {value: "level1",label: "国家级养老机构",children: []},2: {value: "level2",label: "省级养老机构",children: []}
      }
      
  • 当处理 level: 3 时:
    • 检查 levelMap,发现 level: 3 不存在。

    • 创建一个新的根节点 rootNode,并将其存储到 levelMap 中。

    • 最终 levelMap 的内容为:

      {1: {value: "level1",label: "国家级养老机构",children: []},2: {value: "level2",label: "省级养老机构",children: []},3: {value: "level3",label: "市级养老机构",children: []}
      }
      

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词