(1)开发环境IDEA+JDK1.8+mysql1.8SpringBoot2.2.6+mybatis-plus此处仅后台开发(返回json数据),前台页面展示后续会讲解。
(3)插入测试数据为了数据直观显示,如下插入数据,每段数据代表一个菜单栏。注:parent_menu_id从0开始,0表示第一级菜单(没有父菜单)。meun_level从1开始,1表示第一级菜单,2表示第二级菜单。
INSERTINTOtree_menu(menu_id,name,parent_menu_id,meun_level,sort)VALUES(1,'厨具',0,1,0),(2,'刀具',1,2,0),(3,'烹饪工具',1,2,0),(4,'餐具',1,2,0),(5,'菜刀',2,3,0),(6,'剪刀',2,3,0),(7,'水果刀',2,3,0),(8,'炒菜锅',3,3,0),(9,'压力锅',3,3,0),(10,'平底锅',3,3,0),(11,'筷子',4,3,0),(12,'碗',4,3,0),(13,'果盘',4,3,0),(14,'家用电器',0,1,0),(15,'大家电',14,2,0),(16,'生活家电',14,2,0),(17,'电视',15,3,0),(18,'电脑',15,3,0),(19,'洗衣机',15,3,0),(20,'冰箱',15,3,0),(21,'电风扇',16,3,0),(22,'吸尘器',16,3,0),(23,'饮水机',16,3,0),(24,'加湿器',16,3,0),(25,'数码',0,1,0),(26,'摄像摄影',25,2,0),(27,'影音娱乐',25,2,0),(28,'教育学习',25,2,0),(29,'数码相机',26,3,0),(30,'单反相机',26,3,0),(31,'摄像机',26,3,0),(32,'拍立得',26,3,0),(33,'MP3/MP4/MP5/PSP',27,3,0),(34,'音箱',27,3,0),(35,'麦克风',27,3,0),(36,'学生平板',28,3,0),(37,'复读机',28,3,0),(38,'电子辞典',28,3,0),(39,'点读机',28,3,0)
(2)测试代码是否能成功调用。Step1:给TreeMenuDao加上@Mapper注解。
Step2:启动服务并访问TreeMenuController。
(1)实现思路:每条记录里都有当前菜单ID,以及当前菜单的父菜单ID。想要查询出菜单的树形结构,可以根据这两个ID来实现。思路:首先一次性从数据库中查询出所有的菜单数据。然后定位到第一级菜单,递归遍历出其所有的子菜单。
(2)一次性查询出所有的数据。Step1:在service中添加一个查询所有数据的方法。
Step2:在service的实现类中重写该方法。
Step3:修改controller,调用该方法。
Step4:启动服务,访问。打开控制台,可以看到返回的json数据。
(3)对查询的数据进行处理,返回树形的json数据。Step1:对于菜单实体类,增加一个实体类属性,用于保存其子菜单数据。
Step2:在service中添加一个查询所有数据并返回树形json的方法。
Step3:在service的实现类中重写该方法。
Step4:在controller中调用该方法。
Step5:启动服务,访问。打开控制台,可以看到返回的树形json数据。
前面使用后台处理返回了树形结构的json数据,现在需要将json数据按照一定的方式显示出来即可。使用vue-cli3.0创建vue项目。使用element-ui作为页面显示。使用Axios向后台发送请求并返回数据。
(2)添加element-ui依赖
(3)在vue项目中引入element-ui。在main.js中引入完整的element-ui。
(4)引入树形控件。直接从官网选择一个模板,加以修改即可。如下,复制基本模板到HelloWorld.vue组件中,并加以修改。
运行项目、查看效果如下。
(1)vue项目添加Axios。
(2)使用Axios发送请求。
(3)解决跨域问题。后端解决:可以使用@CrossOrigin注解,在方法上添加该注解。
@CrossOrigin@GetMapping("selectAllWithTree")publicResultselectAllWithTree(){returnResult.ok().data("items",treeMenuService.listWithTree());}
前端解决:
(1)树形控件常用属性分析
当然,还有其他属性,比如可以自定义树节点数据,可以实现拖拽功能等。此处不过多叙述,详情可以参考官方文档。
此处仅演示了获取全部数据的代码,可以根据项目情况,自行完善增加节点、删除节点、批量删除节点、拖拽节点等操作。