element-china-area-data-new2
Version:
Element UI 级联 中国省市区数据
217 lines (204 loc) • 6.63 kB
JavaScript
import REGION_DATA from 'china-area-data-new'
import {cloneDeep} from 'lodash-es'
// code转汉字大对象
const CodeToText = {}
// 汉字转code大对象
const TextToCode = {}
const provinceObject = REGION_DATA['86'] // 省份对象
const useRegionData = []
let regionData = []
let provinceAndCityData = []
let areaData = []
CodeToText[''] = '全部'
// 计算省
for (const prop in provinceObject) {
useRegionData.push({
value: prop, // 省份code值
label: provinceObject[prop] // 省份汉字
})
CodeToText[prop] = provinceObject[prop]
TextToCode[provinceObject[prop]] = {
code: prop
}
TextToCode[provinceObject[prop]]['全部'] = {
code: ''
}
}
// 计算市
for (let i = 0, len = useRegionData.length; i < len; i++) {
const provinceCode = useRegionData[i].value
const provinceText = useRegionData[i].label
const provinceChildren = []
for (const prop in REGION_DATA[provinceCode]) {
provinceChildren.push({
value: prop,
label: REGION_DATA[provinceCode][prop]
})
CodeToText[prop] = REGION_DATA[provinceCode][prop]
TextToCode[provinceText][REGION_DATA[provinceCode][prop]] = {
code: prop
}
TextToCode[provinceText][REGION_DATA[provinceCode][prop]]['全部'] = {
code: ''
}
}
if (provinceChildren.length) {
useRegionData[i].children = provinceChildren
}
}
provinceAndCityData = cloneDeep(useRegionData)
// 计算区
for (let i = 0, len = useRegionData.length; i < len; i++) {
const province = useRegionData[i].children
const provinceText = useRegionData[i].label
if (province) {
for (let j = 0, len = province.length; j < len; j++) {
const cityCode = province[j].value
const cityText = province[j].label
const cityChildren = []
for (const prop in REGION_DATA[cityCode]) {
cityChildren.push({
value: prop,
label: REGION_DATA[cityCode][prop]
})
CodeToText[prop] = REGION_DATA[cityCode][prop]
TextToCode[provinceText][cityText][REGION_DATA[cityCode][prop]] = {
code: prop
}
}
if (cityChildren.length) {
province[j].children = cityChildren
}
}
}
}
regionData = cloneDeep(useRegionData)
// 计算街道
for (let i = 0, len = useRegionData.length; i < len; i++) {
const province = useRegionData[i].children
const provinceText = useRegionData[i].label
if (province) {
for (let j = 0, len = province.length; j < len; j++) {
const cityCode = province[j].value
const cityText = province[j].label
const cityChildren = []
for (const prop in REGION_DATA[cityCode]) {
//todo
const areaChildren = []
for (const areaprop in REGION_DATA[prop]) {
areaChildren.push({
value: areaprop,
label: REGION_DATA[prop][areaprop]
})
CodeToText[areaprop] = REGION_DATA[prop][areaprop]
TextToCode[provinceText][cityText][REGION_DATA[cityCode][prop]][REGION_DATA[prop][areaprop]] = {
code: areaprop
}
}
if (areaChildren.length) {
let index = province[j].children.findIndex(v => {
return v.value == prop
})
province[j].children[index].children = areaChildren
//REGION_DATA[cityCode][prop].children = areaChildren
}
}
}
}
}
areaData = cloneDeep(useRegionData)
// 添加“全部”选项
const provinceAndCityDataPlus = cloneDeep(provinceAndCityData)
provinceAndCityDataPlus.unshift({
value: '',
label: '全部'
})
for (let i = 0, len = provinceAndCityDataPlus.length; i < len; i++) {
const province = provinceAndCityDataPlus[i].children
if (province && province.length) {
province.unshift({
value: '',
label: '全部'
})
for (let j = 0, len = province.length; j < len; j++) {
const city = province[j].children
if (city && city.length) {
city.unshift({
value: '',
label: '全部'
})
}
}
}
}
const regionDataPlus = cloneDeep(regionData)
// regionDataPlus.unshift({
// value: '',
// label: '全部'
// })
for (let i = 0, len = regionDataPlus.length; i < len; i++) {
const province = regionDataPlus[i].children
if (province && province.length) {
// province.unshift({
// value: '',
// label: '全部'
// })
for (let j = 0, len = province.length; j < len; j++) {
const city = province[j].children
if (city && city.length) {
city.unshift({
value: '',
label: '全部'
})
}
}
}
}
const areaDataPlus = cloneDeep(areaData)
// areaDataPlus.unshift({
// value: '',
// label: '全部'
// })
for (let i = 0, len = areaDataPlus.length; i < len; i++) {
const province = areaDataPlus[i].children
if (province && province.length) {
// province.unshift({
// value: '',
// label: '全部'
// })
for (let j = 0, len = province.length; j < len; j++) {
const city = province[j].children
if (city && city.length) {
city.unshift({
value: '',
label: '全部'
})
for (let k = 0, len = city.length; k < len; k++) {
let area = city[k].children
if (area && area.length) {
area.unshift({
value: '',
label: '全部'
})
}else {
city[k].children=[{
value: '',
label: '全部'
}]
}
}
}
}
}
}
console.log('regionData',regionData)
export {
provinceAndCityData,
provinceAndCityDataPlus,
regionData,
regionDataPlus,
areaData,
areaDataPlus,
CodeToText,
TextToCode
}