jdk 1.8+vue elemenuiは多級メニュー機能を実現します。
7529 ワード
前書き:穀粒商城を学ぶ時、分類して木の形のメニューの維持の機能を維持する中で、プロジェクトの中でただメニューの3級の木がどのように実現するだけと言って、多級のメニューを開拓したいです。機能はすでに実現して、記録して、間違いがあるところは指摘を歓迎します。
一、バックエンド部分
Jdk 1.8の新しい特性Streamとlamada表現を使って、データベースのフレームはトウモロコシのmybatis plusを使って、話は多くなくて、コードをつけます。
1.ManyTree類を新設し、工具類にパッケージすることができます。
1.Category.vue
三、データベース
1.建表sql
自分でいくつかデータを作ることができて、必要なデータが雲の皿で取ることができて、怠け者は摘み取る!
リンク:https://pan.baidu.com/s/1Brt8682D3ydvorEWhgEUEA抽出コード:kkkjx
以上で、jdk 1.8+vue elemenuiについて多段メニュー機能を実現する記事を紹介しました。vue elemenuiに関する詳細なメニューを提供します。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
一、バックエンド部分
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に関する詳細なメニューを提供します。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。