基础资料F7精准搜索(禁用模糊查询)原创
4人赞赏了该文章
812次浏览
编辑于2022年11月08日 17:33:54
关键词:基础资料,搜索
一、需求
目前标准产品基础资料f7都是模糊查询。实际应用场景用户输入要搜索的内容,一下子带出很多不想要的数据出来。需要开发一个精准搜索的功能来应对这种场景,输入什么就查什么,不模糊查询。
二、思路与方案
2.1分析思路
难点是开发者事件的选择上可能会选择beforeF7Select事件来做过滤,但是实际上我们要拦截搜索框内容这个时候beforeF7Select已经执行完了,我们不需要过滤打开f7的页面。
2.2实现方案
确定插件绑定的表单:应该是基础资料列表插件
确定重写的事件:通过setFilter事件监听搜索框输入的内容
拦截输入的内容,进行过滤条件替换
三、实现过程
1、绑定基础资料列表插件
2、插件继承AbstractListPlugin,重写setFilter,获取过滤条件
通过getQFilters方法,知道搜索框的查询条件是 1 ftlike 'number,name#d'
3、掌握了规律,进行过滤条件的替换
@Override public void setFilter(SetFilterEvent e) { // TODO Auto-generated method stub super.setFilter(e); //拿到过滤条件 List<QFilter> qFilters = e.getQFilters(); //遍历 for(int x=0;x<qFilters.size();x++) { String filterstring = qFilters.get(x).toString(); //判断是否来自搜索框过滤 if(filterstring.contains("name")&&filterstring.contains("number")) {//搜索框查询 //截取搜索框条件 String[] split = filterstring.split("#"); String substring = split[1].substring(0, split[1].length()-1); //删除标准过滤条件 qFilters.remove(x); //增加自定义搜索 qFilters.add(x, new QFilter("name","=",substring).or("number","=",substring)); } } }
四、效果图
五、开发环境版本
V5.0.002
六、注意事项
1、遍历过滤条件时,注意执行remove后会改变qFilters集合,所以要即时在相对角标位置补充过滤条件否则会影响后续条件替换
七、参考资料
八、源代码
推荐阅读