递归展示树状图/树状表格

news2024/7/6 19:00:08

递归展示树状图

  • 一、数据库表设计
  • 二、后端java递归代码
  • 三、前端展示树状表格
  • 四、效果展示

一、数据库表设计

这里我们采用自关联的设计,通过id和pid的对应来确认数据的上下级关系

表

表的设计

建表语句,我这里把一级菜单的pid设置成了0

/*
 Navicat Premium Data Transfer

 Source Server         : 神舟软件
 Source Server Type    : MySQL
 Source Server Version : 50726
 Source Host           : 10.0.33.228:3306
 Source Schema         : sascoa

 Target Server Type    : MySQL
 Target Server Version : 50726
 File Encoding         : 65001

 Date: 23/11/2022 09:52:24
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for zgsw_scsl_sxbg
-- ----------------------------
DROP TABLE IF EXISTS `zgsw_scsl_sxbg`;
CREATE TABLE `zgsw_scsl_sxbg`  (
  `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '序号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称',
  `fullname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `sex` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别',
  `birthday` date NULL DEFAULT NULL COMMENT '生日',
  `birthdaytime` datetime NULL DEFAULT NULL COMMENT '时间',
  `pid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '父级id',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '生成示例树形表格' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of zgsw_scsl_sxbg
-- ----------------------------
INSERT INTO `zgsw_scsl_sxbg` VALUES ('1', '第一层级', '第一层级', 12, '2', '2022-11-23', '2022-11-23 03:30:24', '0');
INSERT INTO `zgsw_scsl_sxbg` VALUES ('2', '第二层级', '第二层级', 12, '1', '2022-11-23', '2022-11-23 03:30:54', '1');
INSERT INTO `zgsw_scsl_sxbg` VALUES ('3', '第三层级', '第三层级', 12, '1', '2022-11-23', '2022-11-23 03:31:11', '2');
INSERT INTO `zgsw_scsl_sxbg` VALUES ('4', '测试1', '测试', 12, '1', '2022-11-23', '2022-11-23 03:31:40', '0');
INSERT INTO `zgsw_scsl_sxbg` VALUES ('5', '测试2', '测试', 12, '1', '2022-11-23', '2022-11-23 03:31:40', '4');
INSERT INTO `zgsw_scsl_sxbg` VALUES ('6', '测试3', '测试', 12, '1', '2022-11-23', '2022-11-23 03:31:40', '5');

SET FOREIGN_KEY_CHECKS = 1;

二、后端java递归代码

我这里在mapper文件里没有做映射,是通过java递归方法set的值

<resultMap type="ZgswScslSxbg" id="ZgswScslSxbgResult">
        <result property="id"    column="id"    />
        <result property="name"    column="name"    />
        <result property="fullname"    column="fullname"    />
        <result property="age"    column="age"    />
        <result property="sex"    column="sex"    />
        <result property="birthday"    column="birthday"    />
        <result property="birthdaytime"    column="birthdaytime"    />
        <result property="pid"    column="pid"    />
    </resultMap>

    <sql id="selectZgswScslSxbgVo">
        select id, name, fullname, age, sex, birthday, birthdaytime, pid from zgsw_scsl_sxbg
    </sql>

    <select id="selectZgswScslSxbgList" parameterType="ZgswScslSxbg" resultMap="ZgswScslSxbgResult">
        <include refid="selectZgswScslSxbgVo"/>
        <where>
            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
            <if test="fullname != null  and fullname != ''"> and fullname like concat('%', #{fullname}, '%')</if>
            <if test="age != null "> and age = #{age}</if>
            <if test="sex != null  and sex != ''"> and sex = #{sex}</if>
            <if test="birthday != null "> and birthday = #{birthday}</if>
            <if test="birthdaytime != null "> and birthdaytime = #{birthdaytime}</if>
            <if test="pid != null  and pid != ''"> and pid = #{pid}</if>
        </where>
        <if test="orderByCode != null and orderByCode != ''">
            order by ${orderByCode}
        </if>
    </select>

首先我们需要在java实体类里,封装一个自己类型的列表
我们的工程中没有用Lombok注解,getter setter被我手动去掉了

package com.bjsasc.asp.dev.zgsw.scsl.sxbg.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import io.swagger.annotations.ApiModel;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.bjsasc.asp.dev.framework.aop.lang.annotation.Excel;
import com.bjsasc.asp.dev.framework.mvc.domain.BaseEntity;
import java.util.Date;
import java.util.List;

/**
 * 生成示例树形格对象 zgsw_scsl_sxbg
 * 
 * @author 陶得雨
 * @date 2022-11-23
 */
@ApiModel(description = "生成示例树形表格")
public class ZgswScslSxbg extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 序号 */
    private String id;

    /** 名称 */
	@ApiModelProperty(value="名称",name="name")
    @Excel(name = "名称")
    private String name;

    /** 姓名 */
	@ApiModelProperty(value="姓名",name="fullname")
    @Excel(name = "姓名")
    private String fullname;

    /** 年龄 */
	@ApiModelProperty(value="年龄",name="age")
    @Excel(name = "年龄")
    private Long age;

    /** 性别 */
	@ApiModelProperty(value="性别",name="sex")
    @Excel(name = "性别")
    private String sex;

    /** 生日 */
	@ApiModelProperty(value="生日",name="birthday")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "生日", width = 30, dateFormat = "yyyy-MM-dd")
    private Date birthday;

    /** 时间 */
	@ApiModelProperty(value="时间",name="birthdaytime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date birthdaytime;

    /** 父级id */
	@ApiModelProperty(value="父级id",name="pid")
    @Excel(name = "父级id")
    private String pid;

	private List<ZgswScslSxbg> children;

    /** 已办表查询参数start */
    private String ybid;

    private String orderByCode;

    private String taskId;

    private String nodeId;

    private String processInstanceId;

    private String businessKey;

    private String duration;

    private String subgwtype;

    private String type;

    private String moduleId;

    private String userid;

    private String username;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String startTime;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private String endTime;
    
}

下面是递归代码

@Override
public List<ZgswScslSxbg> selectZgswScslSxbgList(ZgswScslSxbg zgswScslSxbg)
{
	return getZgswScslSxbgList("0");
}
private List<ZgswScslSxbg> getZgswScslSxbgList(String pid)
{
	ZgswScslSxbg zgswScslSxbg = new ZgswScslSxbg();
	zgswScslSxbg.setPid(pid);
	List<ZgswScslSxbg> zgswScslSxbgList = zgswScslSxbgMapper.selectZgswScslSxbgList(zgswScslSxbg);
	if(zgswScslSxbgList.size()>0){
		for (ZgswScslSxbg zgswScslSxbg1:zgswScslSxbgList) {
			if(zgswScslSxbg1.getId()!= null){
				zgswScslSxbg1.setChildren(getZgswScslSxbgList(zgswScslSxbg1.getId()));
			}
		}
	}
	return zgswScslSxbgList;
}

三、前端展示树状表格

我这里的需求是要展示出来树状table而不是树状图,其实它俩的数据结构是一样的,只是视图部分用的组件有所区别

ElementUI官网有树状table的用法。

官网的描述
只需要在代码里加上这两部分即可

row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"

前端代码

 <el-table v-loading="loading" class="new-style-table" :data="sxbgList" @selection-change="handleSelectionChange" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column type="index" label="序号" width="65px" align="center" />
      <el-table-column label="名称" align="center" prop="name" />
      <el-table-column label="姓名" align="center" prop="fullname" />
      <el-table-column label="年龄" align="center" prop="age" />
      <el-table-column label="性别" align="center" prop="sex" width="140px">
        <template slot-scope="scope">
          <template v-if="scope.row.sex === '0'">未知</template>
          <template v-else-if="scope.row.sex === '1'"></template>
          <template v-else-if="scope.row.sex === '2'"></template>
        </template>
      </el-table-column>
      <el-table-column label="生日" align="center" prop="birthday" width="200" />
      <el-table-column label="时间" align="center" prop="birthdaytime" width="180">
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            @click="handleUpdate(scope.row)"
          >编辑</el-button>
          <el-button
            size="mini"
            type="text"
            style="color:#ff5d5d;"
            @click="handleDelete(scope.row)"
          >删除</el-button>
        </template>
      </el-table-column>
    </el-table>

四、效果展示

这样一个树状table的功能就实现了

最终效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring中Bean的作用域和生命周期

目录 Bean的作用域 singleton prototype request session application websocket 单例作用域和全局作用域的区别 Bean的生命周期 Bean的作用域 Bean的作用域是指Bean在Spring整个框架中的某种行为模式&#xff0c;比如singleton单例作用域&#xff0c;就表示Bean在整…

大数据Spark面试题2023

文章目录Spark核心——RDD概念特点创建方式RDD的分区依赖关系Spark的shuffle介绍Spark的 Partitioner 分区器都有哪些?Spark中的算子都有哪些RDD工作流&#x1f4cc;Spark运行模式(资源调度框架的使用&#xff0c;了解)&#x1f4cc;讲一下Spark 的运行架构一个spark程序的执行…

常用的框架技术-08 ElasticSearch分布式、高扩展、高实时的搜索与数据分析引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录1.ElasticSearch 概述1.1 ElasticSearch介绍1.2 全文搜索引擎1.3 lucene介绍1.4 倒排索引1.5 elasticsearch、solr对比2.ElasticSearch安装2.1 下载软件2.2 windows环…

【web渗透思路】框架敏感信息泄露(特点、目录、配置)

目录 一、挖掘思路 1、方法&#xff1a; 二、框架之信息泄露 1、Webpack 1.1、简述 1.2、.js.map文件泄露 1.3、源码审计 2、Spring boot 1.1、简述 1.2、利用 1.3、框架识别 &#xff08;基本分析方法都是一样&#xff0c;这里就举2个框架关于信息泄露方面的&#x…

Mybatis分页功能

1. 功能分析 如图所示分页功能&#xff0c;包括上一页、下一页、中间显示的当前页前后页码、全部页码以及跳转到XX页。手写的话实现起来很难&#xff0c;Mybatis给我们提供了插件&#xff0c;所提供的方法&#xff0c;直接包含了上述分页的相关数据。 2. 分页插件的使用及其相关…

虚拟环境下把python代码打包成exe(小白教程)

本教程适用于小白&#xff0c;本人也是小白&#xff0c;不妥之处还请包涵。 1、系统环境下安装 virtualenv 可以理解为 直接打开 系统的cmd安装 pip32 install virtualenv我之所以用pip32因为我电脑上装了两个版本的python 一个是32位一个是64位&#xff0c;如果你电脑上只有一…

为什么选择快速应用开发

如今&#xff0c;企业想要持续蓬勃发展&#xff0c;就需要具备快速满足客户期望的能力。无论是十几年历史的重要市场占有者推出新的APP&#xff0c;还是在疫情期间从线下转向线上电商营销&#xff0c;企业都需要主动适应市场。随着为客户提供新的服务方式&#xff0c;员工也需要…

如何轻松部署快解析 + WAMP

快解析是由北京金万维公司自主研发的域名解析工具&#xff0c;服务器端简单&#xff0c;通过快速部署就能实现在任何地域、任何时间、任何网络环境下快速访问到局域网内搭建的各类办公系统和各种应用。以发布网站服务为例&#xff0c;给大家演示下如何通过快解析实现外网访问WA…

一文带你看透短信验证码

短信验证码应用于我们生活、工作的方方面面&#xff0c;比如注册登录账号、支付订单、修改密码等等。验证码短信主要出于安全的考虑&#xff0c;防止应用/网站被恶意注册&#xff0c;恶意攻击&#xff0c;对于网站、APP而言&#xff0c;大量的无效注册&#xff0c;重复注册&…

Java8中的Stream流

定义 什么是Stream流&#xff0c;Java doc中是这样写的 A sequence of elements supporting sequential and parallel aggregate operations 翻译一下就是一个支持顺序和并行聚合操作的元素序列。 可以把它理解成一个迭代器&#xff0c;但是只能遍历一次&#xff0c;就像是流水…

Nodejs核心模块之Events

核心模块之Events 通过EventEmitter类实现事件统一管理 events与EventEmitter node.js是基于事件驱动的异步操作架构&#xff0c;内置events模块events模块提供了EventEmitter类node.js中很多内置核心模块集成EventEmitter EventEmitter常见Api on 添加实现被触发时调用的…

学生静态HTML个人博客主页【Web大学生网页作业成品】HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【没用的小知识又增加了--CCS】

1.CCS中导入工程时提示overlaps the location of another project问题 ​ ​ 工作区要选择最外面的文件夹 ​ 2. error #131: expected a "{" error: #130: expected a "{"_kuyoungest的博客-CSDN博客如果该提示定位到文件开头的语句&#xff0c;则应在…

【Spring(四)】Spring基于注解的配置方式

有关Spring的所有文章都收录于我的专栏&#xff1a;&#x1f449;Spring&#x1f448; 目录 一、前言 二、基于注解需要的依赖 三、通过注解来配置Bean 四、注解配置Bean再补充 五、基于注解的自动装配 六、泛型依赖注入 相关文章 【Spring&#xff08;一&#xff09;】如何获取…

企业知识管理难?选对系统可解决90%的问题

编者按&#xff1a;知识管理是企业加强竞争优势和核心竞争力的保证。本文分析了企业知识管理中遇到的困难&#xff0c;并进一步提出了解决方案——天翎KMS群晖云盘一体机。 关键词&#xff1a;在线预览&#xff0c;在线编辑&#xff0c;权限管理&#xff0c;水印设置&#xff…

macOS Ventura13.0.1解决office缺少“宋体”等问题。安装微软雅黑、宋体等字体。

最近在弄项目验收文档&#xff0c;文档格式要求宋体&#xff0c;用微软的Word打开文件保存时经常提示&#xff0c;系统不存在宋体字体&#xff0c;查了下是是Mac系统本身不存在该字体导致的&#xff0c;下载该字体&#xff0c;然后通过字体册安装就行。 我打包成压缩包了具体有…

【易错小点记录】坑人的for循环与逻辑或

目录 1.题目 1.1.以下for循环的执行次数是&#xff08; &#xff09; 1.1.1.题目分析 1.1.2.题目答案 1.2.下列main()函数执行后的结果为&#xff08;&#xff09; 1.2.题目分析 1.3.题目答案 2.题目 2.1.下面程序输出是什么&#xff1f;&#xff08; &#xff09; 2.…

非线性海洋捕食者算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

树表的查找

二叉排序树 二叉排序树&#xff08;BST&#xff09;又称二叉搜索树&#xff0c;其满足以下性质&#xff1a; &#xff08;1&#xff09;若根节点的左子树非空&#xff0c;则左子树上的所有节点关键字均小于根节点的关键字。 &#xff08;2&#xff09;若根节点的右子树非空&a…

补充(二)古典密码两张思维导图速通

目录 目录 古典密码思维导图 古典密码分析思维导图 唯密文分析古典密码 单表代替密码 棋盘密码 曾公密码 置换密码的代表&#xff1a;斯巴达人的密码棒 古典密码思维导图 古典密码分析思维导图 唯密文分析古典密码 最困难的分析条件通常需要用到英文字母的频率分析和反…