layui三方下拉选择插件xmSelect的使用详解

5,710 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情

xm-select是下拉选择框的多选的layui三方库,可是说这是我觉着最好用的下拉多选框了。它支持多选、单选、重复选、分组选择、搜索、异步加载、分页等等。几乎囊括了所有的可能存在的场景。

1、实战

1.1、引入xm-select

<script type="text/javascript" th:src="@{/lib/ui/xm-select/xm-select.js}" charset="utf-8"></script>

1.2、初始化

  • 创建下拉框所在容器
<div id="xmSelect"></div>
const deptSelectObj = xmSelect.render({
    el: '#xmSelect',
    //自动换行
    autoRow: true,
    //开启搜索框
    filterable: true,
    //树形结构相关属性
    tree: {
        //以树状结构展示
        show: true,
        showFolderIcon: true,
        //展示虚线
        showLine: true,
        //节点间距
        indent: 20,
    },
    toolbar: {
        //展示工具条 全选/清除这些
        show: true,
        list: ['ALL', 'CLEAR']
    },
    //高度自适应
    height: 'auto',
    //显示的数据,正常使用,我们仅需改成接口调用即可
    data: function(){
        return [
            {name: '奖品', value: -2, children: [
                {name: '奖品3', value: -3, children: [
                    {name: '苹果3', value: 14},
                    {name: '香蕉3', value: 15},
                    {name: '葡萄3', value: 16},
                ]},
                {name: '苹果2', value: 4},
                {name: '香蕉2', value: 5},
                {name: '葡萄2', value: 6},
            ]},
        ]
    }
});

  • 动态更新下拉数据
axios({
    method: 'get',
    url: 'https://www.test.com/xmSelect',
}).then(response => {
    let res = response.data;
    deptSelectObj.update({
        data: res.data,
        autoRow: true,
    })
});

  • 展示效果:

展示效果还是不错的,可以左右切换图片,主要还是开发起来很快,成本低。

image.png

1.3、后端接口

后端组装树形数据时,我们可以通过自行遍历找父节点组装。这里为大家介绍下hutool中的树形数据构造方法,非常方便。

  • 引入依赖
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.6.5</version>
</dependency>

  • TreeUtil
//1、获取到所有的标签信息
List<ComTag> allTags = readComTagMapper.getAllTags();
//2、构建树形列表
List<Tree<String>> treeNodes = TreeUtil.build(allTags, ROOT, new TreeNodeConfig(), (comTag, tree) -> {
    //指定ID字段
    tree.setId(comTag.getCom_tag_id());
    //指定父节点ID
    tree.setParentId(comTag.getCom_tag_parent_id());
    //排序
    tree.setWeight(comTag.getSort());
    //名称
    tree.setName(comTag.getTag_name());
    // 扩展属性
    tree.putExtra("tag_type", comTag.getTag_type());
    tree.putExtra("add_time", comTag.getAdd_time());
});
return treeNodes;