| | |
| | | /** |
| | | * ChinaLocations For Normal |
| | | * ChinaLocations For WeApp |
| | | * @author Tevin |
| | | */ |
| | | |
| | | import ChinaLocationData from './ChinaLocationData.json'; |
| | | import Taro from '@tarojs/taro'; |
| | | import project from '@project'; |
| | | import { $hostBoot } from '@components/bases/HostBoot'; |
| | | import { Tools } from '@components/common/Tools'; |
| | | |
| | | const locationTree = []; |
| | | let locationTreeLv3 = []; |
| | | let locationTreeLv4 = []; |
| | | let locationRes = {}; |
| | | let readyCallback = () => { }; |
| | | |
| | | Object.keys(ChinaLocationData).forEach((code1) => { |
| | | const province = { |
| | | label: ChinaLocationData[code1].name, |
| | | value: code1, |
| | | children: [], |
| | | }; |
| | | const children1 = ChinaLocationData[code1].children; |
| | | Object.keys(children1).forEach((code2) => { |
| | | const city = { |
| | | label: children1[code2].name, |
| | | value: code2, |
| | | area: children1[code2].area, // 电话区码 |
| | | children: [], |
| | | }; |
| | | if (typeof children1[code2].children !== 'undefined') { |
| | | const children2 = children1[code2].children; |
| | | Object.keys(children2).forEach((code3) => { |
| | | city.children.push({ |
| | | label: children2[code3], |
| | | value: code3, |
| | | }); |
| | | }); |
| | | } |
| | | province.children.push(city); |
| | | }); |
| | | locationTree.push(province); |
| | | Taro.request({ |
| | | url: $hostBoot.getHost() + project.host.assetsPath + '/datas/ChinaLocations.lv4.min.json', |
| | | header: { |
| | | 'X-Requested-With': 'XMLHttpRequest', |
| | | 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', |
| | | 'Ax-Rq-Type': 'separation', |
| | | }, |
| | | credentials: 'same-origin', |
| | | dataType: 'json', |
| | | timeout: 30 * 1000, |
| | | method: 'GET', |
| | | success: response => { |
| | | locationRes = response.data; |
| | | readyCallback(); |
| | | } |
| | | }); |
| | | |
| | | export default { |
| | | export class ChinaLocations { |
| | | |
| | | onReady(callback) { |
| | | callback(); |
| | | }, |
| | | getLocationTree() { |
| | | return locationTree; |
| | | }, |
| | | if (Tools.isEmptyObject(locationRes)) { |
| | | readyCallback = callback; |
| | | } else { |
| | | callback(); |
| | | } |
| | | } |
| | | |
| | | _createLocationTree(level) { |
| | | const treeDatas = []; |
| | | // lv1-省 |
| | | Object.keys(locationRes).forEach((provinceCode) => { |
| | | const province = { |
| | | label: locationRes[provinceCode].name, |
| | | value: provinceCode, |
| | | children: [], |
| | | }; |
| | | // lv2-市 |
| | | const cityContainer = locationRes[provinceCode].children; |
| | | Object.keys(cityContainer).forEach((cityCode) => { |
| | | const city = { |
| | | value: cityCode, |
| | | area: cityContainer[cityCode].area, // 电话区码 |
| | | children: [], |
| | | }; |
| | | if (typeof cityContainer[cityCode] === 'string') { |
| | | city.label = cityContainer[cityCode]; |
| | | } else { |
| | | city.label = cityContainer[cityCode].name; |
| | | // lv3-区 |
| | | const distContainer = cityContainer[cityCode].children || {}; |
| | | Object.keys(distContainer).forEach(distCode => { |
| | | const dist = { |
| | | value: distCode, |
| | | }; |
| | | if (typeof distContainer[distCode] === 'string') { |
| | | dist.label = distContainer[distCode]; |
| | | } else { |
| | | dist.label = distContainer[distCode].name; |
| | | // lv4-街 |
| | | if (level === 4) { |
| | | dist.children = []; |
| | | const streetContainer = distContainer[distCode].children || {}; |
| | | Object.keys(streetContainer).forEach(streetCode => { |
| | | const street = { |
| | | label: streetContainer[streetCode], |
| | | value: streetCode, |
| | | }; |
| | | dist.children.push(street); |
| | | }); |
| | | if (dist.children.length > 0) { |
| | | dist.children.unshift({ |
| | | label: '( 不选 )', |
| | | value: '', |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | city.children.push(dist); |
| | | }); |
| | | } |
| | | province.children.push(city); |
| | | }); |
| | | treeDatas.push(province); |
| | | }); |
| | | return treeDatas; |
| | | } |
| | | |
| | | getLocationTree(level) { |
| | | if (level === 3) { |
| | | if (locationTreeLv3.length === 0) { |
| | | locationTreeLv3 = this._createLocationTree(3); |
| | | } |
| | | return locationTreeLv3; |
| | | } else if (level === 4) { |
| | | if (locationTreeLv4.length === 0) { |
| | | locationTreeLv4 = this._createLocationTree(4); |
| | | } |
| | | return locationTreeLv4; |
| | | } |
| | | } |
| | | |
| | | // 获取省市区拼合文本 |
| | | getRegionText(regions) { |
| | | getRegionText(regions, callback) { |
| | | if (regions.length === 0) { |
| | | return ''; |
| | | } |
| | | let address = ''; |
| | | let tempLocationData = ChinaLocationData; |
| | | let tempLocationData = locationRes; |
| | | regions.forEach((code) => { |
| | | if (!code || !tempLocationData[code]) { |
| | | address.push(''); |
| | |
| | | } |
| | | }); |
| | | return address; |
| | | }, |
| | | } |
| | | |
| | | // 省市区名称 |
| | | getRegionNames(regions) { |
| | | getRegionNames(regions, callback) { |
| | | if (typeof regions === 'string') { |
| | | regions = regions.split(','); |
| | | } |
| | |
| | | return []; |
| | | } |
| | | let address = []; |
| | | let tempLocationData = ChinaLocationData; |
| | | let tempLocationData = locationRes; |
| | | regions.forEach((code) => { |
| | | if (!code || !tempLocationData[code]) { |
| | | address.push(''); |
| | |
| | | } |
| | | }); |
| | | return address; |
| | | }, |
| | | } |
| | | |
| | | // 省市区文本转code |
| | | getRegionCodes(regions) { |
| | | getRegionCodes(regions, callback) { |
| | | if (typeof regions === 'string') { |
| | | regions = regions.split(','); |
| | | } |
| | |
| | | } |
| | | const codes = []; |
| | | // 省 |
| | | for (let provinceCode in ChinaLocationData) { |
| | | if (ChinaLocationData.hasOwnProperty(provinceCode)) { |
| | | if (ChinaLocationData[provinceCode].name === regions[0]) { |
| | | for (let provinceCode in locationRes) { |
| | | if (locationRes.hasOwnProperty(provinceCode)) { |
| | | if (locationRes[provinceCode].name === regions[0]) { |
| | | codes[0] = provinceCode; |
| | | // 市 |
| | | const provinceChildren = ChinaLocationData[provinceCode].children; |
| | | const provinceChildren = locationRes[provinceCode].children; |
| | | for (let cityCode in provinceChildren) { |
| | | if (provinceChildren.hasOwnProperty(cityCode)) { |
| | | if (provinceChildren[cityCode].name === regions[1]) { |
| | |
| | | } |
| | | } |
| | | return codes; |
| | | }, |
| | | } |
| | | |
| | | // 电话区码 |
| | | getRegionsArea(regions) { |
| | | if (typeof regions === 'string') { |
| | |
| | | } |
| | | let area = ''; |
| | | // 省 |
| | | for (let provinceCode in ChinaLocationData) { |
| | | if (ChinaLocationData.hasOwnProperty(provinceCode)) { |
| | | for (let provinceCode in locationRes) { |
| | | if (locationRes.hasOwnProperty(provinceCode)) { |
| | | if (provinceCode === regions[0]) { |
| | | // 市 |
| | | const provinceChildren = ChinaLocationData[provinceCode].children; |
| | | const provinceChildren = locationRes[provinceCode].children; |
| | | for (let cityCode in provinceChildren) { |
| | | if (provinceChildren.hasOwnProperty(cityCode)) { |
| | | if (cityCode === regions[1]) { |
| | |
| | | } |
| | | } |
| | | return area; |
| | | }, |
| | | }; |
| | | } |
| | | }; |
| | | |
| | | export const $locations = new ChinaLocations(); |