xm-select中树形下拉框的使用

xm-select中树形下拉框的使用

官网:https://maplemei.gitee.io/xm-select/#/component/install
需要的js可以去官网下载

效果图

因为整体效果美观,所以选用了该插件
在这里插入图片描述

完整代码如下

实体类

package com.kh.thunder.entity.vo;

import lombok.Data;

import java.util.List;

@Data
public class TreeResult {

    private String name;

    private String value;

    private String pvalue;

    private boolean disabled;

    private boolean selected;

    List<TreeResult> children;

    public TreeResult() {
    }

    public TreeResult(String name, String value, String pvalue, boolean disabled) {
        this.name = name;
        this.value = value;
        this.pvalue = pvalue;
        this.disabled = disabled;
    }
}

工具类

package com.kh.thunder.util;


import com.kh.thunder.entity.vo.TreeResult;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class TreePlusUtil {

    private List<TreeResult> treeResults = new ArrayList<TreeResult>();

    private List<String> selectEdId=null;

    public TreePlusUtil(List<TreeResult> treeResults, List<String> selectEdId) {
        this.treeResults = treeResults;
        this.selectEdId = selectEdId;
    }

    //建立树形结构
    public List<TreeResult> builTree(Predicate<TreeResult> predicate) {
        List<TreeResult> treeMenus = new ArrayList<TreeResult>();
        for (TreeResult treeResult : getRootNode(predicate)) {
            treeResult = buildChilTree(treeResult);
            treeMenus.add(treeResult);
        }
        return treeMenus;
    }

    //递归,建立子树形结构
    private TreeResult buildChilTree(TreeResult pNode) {
        List<TreeResult> chilMenus = new ArrayList<TreeResult>();
        for (TreeResult treeResult : treeResults) {
            if (pNode.getValue().equalsIgnoreCase(treeResult.getPvalue())) {
                if (selectEdId.stream().anyMatch(a->treeResult.getValue().equalsIgnoreCase(a))){
                    treeResult.setSelected(true);
                }
                chilMenus.add(buildChilTree(treeResult));
            }
        }
        pNode.setChildren(chilMenus);
        return pNode;
    }

    //获取根节点
    private List<TreeResult> getRootNode(Predicate<TreeResult> predicate) {
        List<TreeResult> rootMenuLists = new ArrayList<TreeResult>();
        for (TreeResult treeResult : treeResults) {
            if (predicate.test(treeResult)) {
                rootMenuLists.add(treeResult);
            }
        }
        return rootMenuLists;
    }
}

数据格式
后台数据

/**
     * 
     * @param selectIds 此参数,表示选中某个选项,如效果图中选中李四
     *                  对应实体类中selected
     * @return
     */
    @RequestMapping("/testData")
    @ResponseBody
    public JSONObject testData(@RequestParam(name = "selectIds",required = false) List<String> selectIds) {
        JSONObject json = new JSONObject();
        List<TreeResult> treeResults = new ArrayList<>();
        treeResults.add(new TreeResult("开发组1","1","0",true));
        treeResults.add(new TreeResult("李四","2","1",false));
        treeResults.add(new TreeResult("张三","3","1",true));
        treeResults.add(new TreeResult("八下","4","1",false));
        treeResults.add(new TreeResult("开发组2","5","0",true));
        treeResults.add(new TreeResult("王五","6","5",true));
        treeResults.add(new TreeResult("赵柳","7","5",false));
        treeResults.add(new TreeResult("七上","8","5",false));
        TreePlusUtil menuTree =new TreePlusUtil(treeResults,selectIds);
        //此处需要你填写父级value值,可根据实际自行更改
        Predicate<TreeResult> predicate = TreeResult -> TreeResult.getPvalue().equalsIgnoreCase("0");
        List<TreeResult> list =menuTree.builTree(predicate);
        json.put("info",list);
        return json;
    }

前台代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--<script src="/static/js/jquery-1.11.0.min.js"></script>-->
    <script th:src="@{/static/js/jquery-2.2.3.min.js}"></script>
    <script th:src="@{/static/js/xm-select.js}"></script>
    <script type="text/javascript" th:inline="javascript">
        /*<![CDATA[*/
        ctxPath = /*[[@{/}]]*/ '';
        /*]]>*/
    </script>

</head>
<body>
<div id="demo3" class="xm-select-demo"></div>

<script>
    var demo3 = xmSelect.render({
        el: '#demo3',
        model: { label: { type: 'text' } },
        radio: true,
        clickClose: true,
        tree: {
            show: true,
            strict: false,
            expandedKeys: [ -1 ],
        },
        height: 'auto',
        data:[]
    })

    $(function () {
        $.ajax({
            url:ctxPath+'test/testData?selectIds='+'3,7',//地址,如需传参在此处传参
            dataType:'json',//数据类型
            type:'POST',//类型
            timeout:5000,//超时
            //请求成功
            success:function(data,status){
                demo3.update({
                    data: data.info,
                    autoRow: true,
                });
            }
        });
    });
</script>
</body>
</html>

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
xm-select 是一个基于 layui下拉框组件,可以实现多选、搜索、异步加载等功能。下面是一个简单的示例代码: ```html <div class="layui-form-item"> <label class="layui-form-label">多选下拉框</label> <div class="layui-input-block"> <select xm-select="demo2" xm-select-max="3" xm-select-search xm-select-skin="default" name="city[]" lay-verify="required" multiple> <option value="0">北京</option> <option value="1">上海</option> <option value="2">广州</option> <option value="3">深圳</option> <option value="4">杭州</option> <option value="5">南京</option> <option value="6">武汉</option> <option value="7">成都</option> </select> </div> </div> ``` 其,`xm-select` 属性指定了下拉框的 ID,`xm-select-max` 属性指定了最多可选项数,`xm-select-search` 属性表示开启搜索功能,`xm-select-skin` 属性指定了皮肤样式,`multiple` 属性表示开启多选。 在 JavaScript ,我们需要使用 `xmSelect` 函数初始化下拉框,并设置各种配置项: ```javascript layui.use(['xmSelect'], function(){ var xmSelect = layui.xmSelect; var demo2 = xmSelect.render({ el: '#demo2', name: 'city', layVerify: 'required', filterable: true, searchPlaceholder: '请选择城市', tips: '最多选择3个城市', max: 3, data: [{ name: '北京', value: 0 }, { name: '上海', value: 1 }, { name: '广州', value: 2 }, { name: '深圳', value: 3 }, { name: '杭州', value: 4 }, { name: '南京', value: 5 }, { name: '武汉', value: 6 }, { name: '成都', value: 7 }] }); }); ``` 其,`el` 属性指定了下拉框的 ID,`name` 属性指定了提交表单时的参数名,`layVerify` 属性指定了表单验证规则,`filterable` 属性表示开启搜索功能,`searchPlaceholder` 属性指定了搜索框的提示文本,`tips` 属性指定了超出可选项数时的提示文本,`max` 属性指定了最多可选项数,`data` 属性指定了下拉框的选项数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值