一个项目中用户希望通过区域对订单进行筛选,但是查阅了海豚PHP框架文档后发现searchArea并不支持三级联动,因此手动进行了一个简单的改造,使用三个select框完成地区的筛选。以下为实现笔记。
第一步:在搜索区域添加三个Select下拉选框,用于省市区县的联动选择。
- $search = [
- ['select','province','省份选择','','',$province],
- ['select','city','城市选择','','',[]],
- ['select','region','区县选择','','',[]],
- ];
其中省份的数据,需要自行查询并赋值。以便于用户从省份开始选择。
第二步:对Zbuilder增加额外JS,源代码如下:
- //监听省份选择
- $('select[name="province"]').on('change',function () {
- var prov = $('select[name="province"] option:selected').val();
- var cate = 'prov';
- r(prov,cate);
- })
- //监听地区选择
- $('select[name="city"]').on('change',function () {
- var city = $('select[name="city"] option:selected').val();
- var cate = 'city';
- r(city,cate);
- })
- function r(i,c) {
- $.ajax({
- 'type':"post",
- 'url':"/admin.php/store/order/getRegionSelect",
- 'data':{"pid":i},
- success:function (res) {
- var yunsu = createHtml(res);
- if (c == 'prov'){
- console.log('11111',$("#search_city").children())
- // $("#search_city").children().empty();
- // $("#search_region").children().empty();
- $("#search_city").html(yunsu);
- }else if(c == 'city'){
- console.log('search_region',yunsu)
- // $("#search_region").children().empty();
- $("#search_region").html(yunsu);
- }
- }
- })
- }
- /**
- * 组合html
- */
- function createHtml(data) {
- var html = '<option value="">请选择区域</option>';
- $.each(data,function (key,value) {
- html += '<option value="'+key+'">'+value+'</option>';
- })
- return html;
- }
第三步:编写地区查询接口,也就是上一步中的查询接口。返回数据以城市ID为key,以城市名称为value即可。查询很简单,就不放代码了。
完成以上三步后,基本上搜索区域的省市区县三级联动就结束了。需要值得一提的是,如果你的查询参数中需要用到province、city两个参数,可以直接使用。如果查询参数只需要区县的参数,把province和city去掉的时候,一定要对查询的数组重建索引。让where条件的数组索引从0开始。否则thinkPHP的where查询会报错。