搜索suggest实现 动态的查询建议

解决的问题:

  1. 因为select下拉选项太多需要做搜索建议
  2. 提高页面加载速度
  3. 实现一次之后 后续的接入只需修改js和枚举

主要思路:

  1. 使用动态sql 拼装需要的参数
  2. 使用枚举来动态的加载表
  3. 在页面中传入需要的枚举值 和 需要like的字段

引入插件magicsuggest

<script src="${pageContext.request.contextPath}/static/plugin/magicsuggest/magicsuggest-min.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/plugin/magicsuggest/magicsuggest-min.css" />
复制代码

在页面中加上相应的区域 可以为input或者div

<div id="mssupplier"></div>
复制代码

在js中对上面的id进行绑定magicsuggest事件

$(function() {
   var mssupplier = $('#mssupplier').magicSuggest({
        allowFreeEntries: false,
        autoSelect: true,
        placeholder:'请选择供应商',
        data: '****.html',  //数据请求地址
        dataUrlParams: {    //请求带的参数
            category: 2,    //对应的下面的枚举值
            columns: ['name', 'supplierNo'] //请求的数据库字段(需要like的)
        },
        maxSelection: 1,
        cls: 'col-xs-2',
        infoMsgCls: 'hide'
    });
 
    $(mssupplier).on('selectionchange', function(e,m){
        reloadGrid(); //改变之后需要所做的事情
    });
}
复制代码

设置枚举类对应请求参数

/**
 * @author lemon
 * @date 2017-12-20 18:24
 * @desc 搜索建议插件枚举
 */
public enum SuggestCategoryEnum {
    SHOP(1, "table1", true),
    SUPPLIER(2, "table2", true),
    USER(3, "table3", false),
    PRODUCT(4, "table4", true);
 
    private final int category; //分类
    private final String tableName; //表名
    private final boolean isMall;   //其他参数(这个为作者的业务需求)
 
    SuggestCategoryEnum(int category, String tableName, boolean isMall) {
        this.category = category;
        this.tableName = tableName;
        this.isMall = isMall;
    }
 
    public int getCategory() {
        return category;
    }
 
    public String getTableName() {
        return tableName;
    }
 
    public boolean isMall() {
        return isMall;
    }
 
    public static SuggestCategoryEnum getEnum(int category) {
        for (SuggestCategoryEnum anEnum : values()) {
            if (anEnum.getCategory() == category) {
                return anEnum;
            }
        }
        throw new RuntimeException("not find category:" + category);
    }
}
复制代码

请求后台sql mybatis

<select id="listSuggest" resultType="cc.laowantong.entity.suggest.Suggest" parameterType="cc.laowantong.entity.suggest.SuggestParam">
    select id,
    concat
    <foreach item="column" index="index" collection="matchColumns"
             open="(" separator="," close=")">
        ${column}
    </foreach> as name
    from ${tableName}
    <trim prefix="WHERE" prefixOverrides="AND|OR">
        <foreach item="column" index="index" collection="matchColumns"
                 open="" separator="or" close="">
            ${column} like "%"#{keywords}"%"
        </foreach>
    </trim>
    limit #{limit}
</select>
复制代码

参考资料:http://nicolasbize.com/magicsuggest/doc.html

未经作者lemon允许 请勿转载,谢谢 :)

转载于:https://juejin.im/post/5a3bb666518825455f2f7679

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值