import REGION_DATA from 'china-area-data'; import { cloneDeep } from 'lodash-es'; // code转汉字大对象 const CodeToText = {}; // 汉字转code大对象 const TextToCode = {}; const provinceObject = REGION_DATA['86']; // 省份对象 const regionData = []; let provinceAndCityData = []; CodeToText[''] = '全部'; // 计算省 for (const prop in provinceObject) { regionData.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 = regionData.length; i < len; i++) { const provinceCode = regionData[i].value; const provinceText = regionData[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) { regionData[i].children = provinceChildren; } } provinceAndCityData = cloneDeep(regionData); // 计算区 for (let i = 0, len = regionData.length; i < len; i++) { const province = regionData[i].children; const provinceText = regionData[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; } } } } // 添加“全部”选项 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: '全部', }); } } } } //--begin--@updateBy:liusq----date:20210922---for:省市区三级联动需求方法----- //省份数据 const provinceOptions = []; for (const prop in provinceObject) { provinceOptions.push({ value: prop, // 省份code值 label: provinceObject[prop], // 省份汉字 }); } /** * 根据code获取下拉option的数据 * @param code * @returns [] */ function getDataByCode(code) { let data = []; for (const prop in REGION_DATA[code]) { data.push({ value: prop, // 省份code值 label: REGION_DATA[code][prop], // 省份汉字 }); } return data; } /** * 获取全部省市区的层级 * @type {Array} */ const pca = []; Object.keys(provinceObject).map((province) => { pca.push({ id: province, text: provinceObject[province], pid: '86', index: 1 }); const cityObject = REGION_DATA[province]; Object.keys(cityObject).map((city) => { pca.push({ id: city, text: cityObject[city], pid: province, index: 2 }); const areaObject = REGION_DATA[city]; if (areaObject) { Object.keys(areaObject).map((area) => { pca.push({ id: area, text: areaObject[area], pid: city, index: 3 }); }); } }); }); /** * 根据code反推value * @param code * @param level * @returns {Array} */ function getRealCode(code, level) { let arr = []; getPcode(code, arr, level); return arr; } function getPcode(id, arr, index) { for (let item of pca) { if (item.id === id && item.index == index) { arr.unshift(id); if (item.pid != '86') { getPcode(item.pid, arr, --index); } } } } //--end--@updateBy:liusq----date:20210922---for:省市区三级联动需求方法----- export { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, getDataByCode, provinceOptions, getRealCode };