93 lines
2.3 KiB
JavaScript
93 lines
2.3 KiB
JavaScript
|
|
// 使用china-area-data包提供完整的省市区数据
|
||
|
|
import areaData from 'china-area-data';
|
||
|
|
|
||
|
|
// 转换数据格式为我们需要的格式
|
||
|
|
function convertAreaData() {
|
||
|
|
const provinces = [];
|
||
|
|
|
||
|
|
// 遍历省份
|
||
|
|
Object.keys(areaData['86']).forEach(provinceCode => {
|
||
|
|
const provinceName = areaData['86'][provinceCode];
|
||
|
|
const province = {
|
||
|
|
value: provinceCode,
|
||
|
|
label: provinceName,
|
||
|
|
children: []
|
||
|
|
};
|
||
|
|
|
||
|
|
// 遍历城市
|
||
|
|
if (areaData[provinceCode]) {
|
||
|
|
Object.keys(areaData[provinceCode]).forEach(cityCode => {
|
||
|
|
const cityName = areaData[provinceCode][cityCode];
|
||
|
|
const city = {
|
||
|
|
value: cityCode,
|
||
|
|
label: cityName,
|
||
|
|
children: []
|
||
|
|
};
|
||
|
|
|
||
|
|
// 遍历区县
|
||
|
|
if (areaData[cityCode]) {
|
||
|
|
Object.keys(areaData[cityCode]).forEach(countyCode => {
|
||
|
|
const countyName = areaData[cityCode][countyCode];
|
||
|
|
city.children.push({
|
||
|
|
value: countyCode,
|
||
|
|
label: countyName
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
province.children.push(city);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
provinces.push(province);
|
||
|
|
});
|
||
|
|
|
||
|
|
return provinces;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 生成完整的省市区数据
|
||
|
|
const provinceData = convertAreaData();
|
||
|
|
|
||
|
|
// 根据省份代码获取城市列表
|
||
|
|
function getCitiesByProvince(provinceCode) {
|
||
|
|
const province = provinceData.find(p => p.value === provinceCode);
|
||
|
|
return province ? province.children : [];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 根据城市代码获取区县列表
|
||
|
|
function getCountiesByCity(cityCode) {
|
||
|
|
for (const province of provinceData) {
|
||
|
|
const city = province.children.find(c => c.value === cityCode);
|
||
|
|
if (city) {
|
||
|
|
return city.children;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 根据代码获取名称
|
||
|
|
function getNameByCode(code) {
|
||
|
|
// 查找省份
|
||
|
|
for (const province of provinceData) {
|
||
|
|
if (province.value === code) {
|
||
|
|
return province.label;
|
||
|
|
}
|
||
|
|
// 查找城市
|
||
|
|
for (const city of province.children) {
|
||
|
|
if (city.value === code) {
|
||
|
|
return city.label;
|
||
|
|
}
|
||
|
|
// 查找区县
|
||
|
|
if (city.children) {
|
||
|
|
for (const county of city.children) {
|
||
|
|
if (county.value === code) {
|
||
|
|
return county.label;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
|
||
|
|
export { provinceData, getCitiesByProvince, getCountiesByCity, getNameByCode };
|