既然说起这个了,就顺便提一下详细的建议吧
大部分情况下,可以认为我国存在五级行政区划:
省 -> 市 -> 县 -> 乡 -> 村
每一级又存在部分不同名但同级的单位:直辖市、自治区、县级市、街道 之类的
大部分情况下,我们用到 乡 /镇 /街道 一级,也就是四级区划。
但是实际执行中,存在各种 “特例”,于是就产生了几个警察容易出坑的地方:
1、直辖市辖区虽然行政上属于厅局级,但是行政区划上属于县级,相当于少了一级地级单位
也就是:直辖市 - 空缺地级 - 直辖市辖区 - 直辖市辖区街道
这个不用举例了,四个直辖市都这样
2、省直管县其实是 “正统”,但是由于少了地级市 “代管”,也相当于少了一级地级单位
也就是:省 - 空缺地级 - 省直管县 / 省直管县级市 - 省管县下辖乡镇街道
这个就是我上面举例的一大堆,典型就是济源市
3、全国有五个 “直筒子市”,不设区县,地级市直接管理乡镇街道级别,相当于少了一级县级单位
也就是:省 - 直筒子地级市 - 空缺县级 - 直筒子地级市下辖街道 /镇
这个就是我上面提到的五个城市:中山 东莞 嘉峪关 三沙 儋州
关于这三种特殊情况的处理,可以看到第一种楼主已经处理了,采取的是 city 字段 null 的形式,同时会自动删减一级菜单。
第二第三种应该是没有处理,会导致找不到济源市、以及中山市选不到下级街道的问题。
个人建议为了保证兼容性,应该强行插入一级来保证每个字段都能取到值:
北京市 - 北京市 - 东城区 - 东华门街道 (虚拟地级北京市)
河南省 - 济源市 - 济源市 - 沁园街道 (虚拟地级济源市)
广东省 - 中山市 - 中山市 - 石岐区街道 (虚拟县级中山市)
这样可以保证 city area 字段均有值,方便开发者实现相应逻辑,也解决了删减菜单带来的跳动问题。
如果担心省辖县过多导致臃肿,也可以虚拟一级 “省辖县 /省辖县级市” 来集合:
河南省 - 省辖县 /省辖县级市 - 济源市 - 沁园街道 (虚拟地级 省辖县 /省辖县级市)
但是这样也会带来缺陷,开发者获取 city 字段时获取到的信息会无意义。
参考资料:
https://zhuanlan.zhihu.com/p/31774163