效果图如下:

全国城市三级联动全国城市三级联动全国城市三级联动

sql文件下载:https://pan.baidu.com/s/1dGKczrb

java代码实现:

  /**
     * 
     * @Description (处理返回结果)
     */
    private void dealResultData(){
        List<City> allCities = City.find("FROM City ORDER BY parent_id ASC").fetch();
        //获取所有一级省份
        List<City> provinces = treeMenuList(allCities, 2);
        //java.util.Collections.sort(provinces);
        //所有城市
        List<City> cities = treeMenuList(allCities, 3);
       // java.util.Collections.sort(cities);
        //所有地区
        List<City> regions = treeMenuList(allCities, 4);
        //java.util.Collections.sort(regions);
        //获取省份下的所有城市
        Map<String, List<CityVo>> allNextCities = getAllChild(provinces,cities);
       //获取城市下面的所有地区
        Map<String, List<CityVo>> allRegions = getAllChild(cities,regions);
        
        Map<String,Object> resultMap=new HashMap<String, Object>();
        //provs_data, citys_data, dists_data
        List<CityVo> cityVos = new ArrayList<CityVo>();
        for (City province:provinces) {
            CityVo cityVo = new CityVo();
            cityVo.text = province.region_name;
            cityVo.value = province.region_code;
            cityVos.add(cityVo); 
        }
        resultMap.put("provs_data", cityVos);
        resultMap.put("citys_data", allNextCities);
        resultMap.put("dists_data", allRegions);
        resultMap.put("status", "0000");
        resultMap.put("message", "查询成功");
        RedisUtil.set(RedisDBApp.CommonCache,"allCitiesResult".getBytes(), resultMap);
    }
    
    /**
     * @Description (获取对应等级城市)
     * @param cities
     * @param level
     * @return
     */
    private final List<City> treeMenuList(List<City> cities, int level) {
        List<City> childs = new ArrayList<City>();
        for (City city : cities) {
            if (city.region_level == level) {
                childs.add(city);
            }
        }
        return childs;
    }
    /**
     * 
     * @Description (获取所有子类)
     * @param parents
     * @param childs
     * @return
     */
    private final Map<String, List<CityVo>> getAllChild(List<City> parents, List<City> childs) {
        Map<String, List<CityVo>> cityMap = new HashMap<String, List<CityVo>>();
        for (City parent : parents) {
            List<CityVo> cityVos = new ArrayList<CityVo>();
            for (City child : childs) {
                if (parent.region_id.equals(child.parent_id)) {
                    CityVo cityVo = new CityVo();
                    cityVo.text = child.region_name;
                    cityVo.value = child.region_code;
                    cityVos.add(cityVo);
                }
            }
            cityMap.put(parent.region_code, cityVos); 
        }
        return cityMap;
    }

js文件下载:https://pan.baidu.com/s/1qZLbUqS

h5网页中使用:

全国城市三级联动

ajax请求接口初始化页面控件数据代码如下:

 function initArea(provs_data,citys_data,dists_data){
area=new LArea();
 area.init({
        'trigger': '#demo',
        'valueTo': '#value',
        'keys': {
            id: 'value',
            name: 'text'
        },
        'type': 2,
        'data': [provs_data, citys_data, dists_data]
    }); 
}

   $.ajax({
type: "get",
url:HOST_SERVICE_URL +"/common/web/1.0/getAllCites",
async: false,
dataType:'json',
success: function(data) {
if(data.status=='0000'){
data=data.data;
provs_data=data.provs_data;
citys_data=data.citys_data;
dists_data=data.dists_data;
initArea(provs_data,citys_data,dists_data);
}else{

}
},
error:function(){
console.log('aa')
}
    });  
如有疑问,可以咨询我的qq717310359


相关文章: