当前位置: 首页 > article >正文

构建分类树(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: []
          }
      }
      

http://www.kler.cn/a/585182.html

相关文章:

  • [S32K]SPI
  • Python 语言因其广泛的库与框架资源,诸如 `requests`、`BeautifulSoup
  • 证券交易系统的流程
  • pytorch lightning ddp 逆天分配显存方式
  • 关于重构分析查询界面的思考(未完)
  • 基于Hadoop的城市道路交通数据的可视化分析-Flask
  • 前端技巧第五期JavaScript函数
  • C++ 内存管理
  • NFC碰一碰发视频-nfc碰一碰发视频拓客系统 实体商家碰一碰发视频引流获客
  • AI辅助工具-通义灵码
  • 【机器学习】基于t-SNE的MNIST数据集可视化探索
  • MCP-Playwright:当自动化测试遇上「万能插座」,效率革命就此开启!
  • Linux 匿名管道实现进程池
  • 【webrtc debug tools】 rtc_event_log_to_text
  • 容器技术与Kubernetes概述
  • Ai文章改写出来的文章,怎么过Ai检测?控制指令,测试的一点心得,彻底疯了!
  • Python:面向对象,类和对象,实例方法与实例属性,构造函数
  • ARM:什么是满减栈?为何选择满减栈?
  • 【零基础入门unity游戏开发——unity3D篇】3D物理系统之 —— 3D刚体组件Rigidbody
  • 一些docker命令