jdk 1.8+vue elemenuiは多級メニュー機能を実現します。


前書き:穀粒商城を学ぶ時、分類して木の形のメニューの維持の機能を維持する中で、プロジェクトの中でただメニューの3級の木がどのように実現するだけと言って、多級のメニューを開拓したいです。機能はすでに実現して、記録して、間違いがあるところは指摘を歓迎します。
一、バックエンド部分
Jdk 1.8の新しい特性Streamとlamada表現を使って、データベースのフレームはトウモロコシのmybatis plusを使って、話は多くなくて、コードをつけます。
1.ManyTree類を新設し、工具類にパッケージすることができます。

import com.atguigu.gulimall.product.entity.CategoryEntity;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;
public class ManyTree {

 private List<CategoryEntity> rootList; //           
 private List<CategoryEntity> bodyList; //          ,       

 public ManyTree(List<CategoryEntity> rootList, List<CategoryEntity> bodyList) {
  this.rootList = rootList;
  this.bodyList = bodyList;
 }

 public List<CategoryEntity> getTree() { //        
  if (bodyList != null && !bodyList.isEmpty()) {
   //     map,           
   Map<String, String> map = Maps.newHashMapWithExpectedSize(bodyList.size());
   rootList.forEach(beanTree -> getChild(beanTree, map));
   return rootList;
  }
  return null;
 }

 public void getChild(CategoryEntity beanTree, Map<String, String> map) {
  List<CategoryEntity> childList = Lists.newArrayList();
  bodyList.stream().filter(c -> !map.containsKey(c.getCatId())).filter(c -> c.getParentCid().equals(beanTree.getCatId()))
    .forEach(c -> {
     map.put(String.valueOf(c.getCatId()), String.valueOf(c.getParentCid()));
     getChild(c, map);
     childList.add(c);
    });
  beanTree.setChildren(childList);
 }

}
2.新規エンティティCategoryEntityは、ここでlombook、ideaにlombookプラグインをインストールし、プロジェクトにlombookの依存を追加して、詳しくは自分で百度です。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
/**
 *     
 * 
 */
@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 *   id
	 */
	@TableId
	private Long catId;
	/**
	 *     
	 */
	private String name;
	/**
	 *     ID
	 */
	private Long parentCid;
	/**
	 *   ,1 2 3 
	 */
	private Integer catLevel;
	/**
	 *     ,       
	 */
	private Integer showStatus;
	/**
	 *     
	 */
	private Integer sort;
	/**
	 *     
	 */
	private String icon;
	private String productUnit;
	private Integer productCount;
	//                 
	/**
	 *        children
	 */
	@TableField(exist=false)
	private List<CategoryEntity> children;
}
3.業務階にserviceを新設し、ここではservice実現層のコードのみを貼ります。

 /**
  *                   ,
  *                :1、      ,           2、        
  * @return
  */
 @Override
 public List<CategoryEntity> getAllTree() {
  //  mybatis-plus   baseMapper.selectList       
  List<CategoryEntity> bodyList = baseMapper.selectList(null);
  //  xml         
  List<CategoryEntity> rootList = categoryDao.getRootTree();
  ManyTree utils = new ManyTree(rootList, bodyList);
  List<CategoryEntity> result = utils.getTree();
  return result;
 }
二、先端部分
1.Category.vue

<template>
 <div class>
 <el-tree
  :data="menus"
  :props="defaultProps"
  :expand-on-click-node="false"
  node-key="catId"
  ref="menuTree"
  :show-checkbox="showCheckbox"
 >
  <span class="custom-tree-node" slot-scope="{ node, data }">
  <span>{{ node.label }}</span>
  <span>
   <el-button type="text" size="mini" @click="() => append(data)">  </el-button>
   <el-button type="text" size="mini" @click="() => edit(data)">  </el-button>
   <el-button
   v-if="node.childNodes.length==0"
   type="text"
   size="mini"
   @click="() => remove(node, data)"
   >  </el-button>
  </span>
  </span>
 </el-tree>
 </div>
</template>
<script>
//          (  :  ,  js,     js,json  ,      )
//  :import 《    》 from '《    》';
export default {
 //import                 
 components: {},
 data() {
 //      
 return {
  //     
  menus: [],
  defaultProps: {
		//                
  children: "children",
  label: "name"
  },
  showCheckbox:true
 };
 },
 //        data  
 computed: {},
 //  data      
 watch: {},
 //    
 methods: {
 //       
 getMenus() {
  this.$http({
  url: this.$http.adornUrl("/product/category/list/tree"),
  method: "get"
  }).then(({ data }) => {
  //console.log("       data:" + data.data);
  this.menus = data.data;
  });
 },
 edit(data){
 },
 append(data) { 
 },
 //      
 remove(node, data) { 
 }
 },
 //     -     (      this  )
 created() {
 this.getMenus();
 },
 //     -     (    DOM  )
 mounted() {},
 beforeCreate() {}, //     -     
 beforeMount() {}, //     -     
 beforeUpdate() {}, //     -     
 updated() {}, //     -     
 beforeDestroy() {}, //     -     
 destroyed() {}, //     -     
 activated() {} //     keep-alive    ,       
};
</script>
<style lang='scss' scoped>
//@import url();     css 
</style>
2.展示効果
在这里插入图片描述
三、データベース
1.建表sql

CREATE TABLE `pms_category` (
 `cat_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '  id',
 `name` char(50) DEFAULT NULL COMMENT '    ',
 `parent_cid` bigint(20) DEFAULT NULL COMMENT '   id',
 `cat_level` int(11) DEFAULT NULL COMMENT '  ',
 `show_status` tinyint(4) DEFAULT NULL COMMENT '    [0-   ,1  ]',
 `sort` int(11) DEFAULT NULL COMMENT '  ',
 `icon` char(255) DEFAULT NULL COMMENT '    ',
 `product_unit` char(50) DEFAULT NULL COMMENT '    ',
 `product_count` int(11) DEFAULT NULL COMMENT '    ',
 PRIMARY KEY (`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1450 DEFAULT CHARSET=utf8mb4 COMMENT='    ';
2.アナログデータ
自分でいくつかデータを作ることができて、必要なデータが雲の皿で取ることができて、怠け者は摘み取る!
リンク:https://pan.baidu.com/s/1Brt8682D3ydvorEWhgEUEA抽出コード:kkkjx
以上で、jdk 1.8+vue elemenuiについて多段メニュー機能を実現する記事を紹介しました。vue elemenuiに関する詳細なメニューを提供します。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。