New file |
| | |
| | | /** |
| | | * ChinaLocations |
| | | * @author Tevin |
| | | */ |
| | | |
| | | import Taro from '@tarojs/taro'; |
| | | import { Fetcher } from '@components/bases/Fetcher'; |
| | | import project from '@project'; |
| | | |
| | | const locationTree = []; |
| | | let ChinaLocationData = {}; |
| | | let readyCallback = () => { }; |
| | | |
| | | Taro.request({ |
| | | url: Fetcher.host + project.host.assetsPath + '/datas/ChinaLocation.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 => { |
| | | ChinaLocationData = response.data; |
| | | 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, |
| | | 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); |
| | | }); |
| | | readyCallback(); |
| | | } |
| | | }); |
| | | |
| | | export default { |
| | | onReady(callback) { |
| | | if (ChinaLocationData.length > 0) { |
| | | callback(); |
| | | } else { |
| | | readyCallback = callback; |
| | | } |
| | | }, |
| | | getLocationTree() { |
| | | return locationTree; |
| | | }, |
| | | // 获取省市区拼合文本 |
| | | getRegionText(regions, callback) { |
| | | if (regions.length === 0) { |
| | | return ''; |
| | | } |
| | | let address = ''; |
| | | let tempLocationData = ChinaLocationData; |
| | | regions.forEach((code) => { |
| | | if (typeof tempLocationData[code].name === 'string') { |
| | | address += tempLocationData[code].name; |
| | | } else { |
| | | address += tempLocationData[code]; |
| | | } |
| | | tempLocationData = tempLocationData[code].children; |
| | | }); |
| | | return address; |
| | | }, |
| | | // 省市区名称 |
| | | getRegionNames(regions, callback) { |
| | | |
| | | if (typeof regions === 'string') { |
| | | regions = regions.split(','); |
| | | } |
| | | if (!regions || regions.length === 0 || !regions[0]) { |
| | | return []; |
| | | } |
| | | let address = []; |
| | | let tempLocationData = ChinaLocationData; |
| | | regions.forEach((code) => { |
| | | if (!tempLocationData[code]) { |
| | | return; |
| | | } |
| | | if (typeof tempLocationData[code].name === 'string') { |
| | | address.push(tempLocationData[code].name); |
| | | } else { |
| | | address.push(tempLocationData[code]); |
| | | } |
| | | tempLocationData = tempLocationData[code].children; |
| | | }); |
| | | return address; |
| | | |
| | | }, |
| | | // 省市区文本转code |
| | | getRegionCodes(regions, callback) { |
| | | |
| | | if (typeof regions === 'string') { |
| | | regions = regions.split(','); |
| | | } |
| | | if (!regions || regions.length === 0 || !regions[0]) { |
| | | return ''; |
| | | } |
| | | const codes = []; |
| | | // 省 |
| | | for (let provinceCode in ChinaLocationData) { |
| | | if (ChinaLocationData.hasOwnProperty(provinceCode)) { |
| | | if (ChinaLocationData[provinceCode].name === regions[0]) { |
| | | codes[0] = provinceCode; |
| | | // 市 |
| | | const provinceChildren = ChinaLocationData[provinceCode].children; |
| | | for (let cityCode in provinceChildren) { |
| | | if (provinceChildren.hasOwnProperty(cityCode)) { |
| | | if (provinceChildren[cityCode].name === regions[1]) { |
| | | codes[1] = cityCode; |
| | | // 区 |
| | | const areaChildren = provinceChildren[cityCode].children; |
| | | for (let areaCode in areaChildren) { |
| | | if (areaChildren.hasOwnProperty(areaCode)) { |
| | | if (areaChildren[areaCode] === regions[2]) { |
| | | codes[2] = areaCode; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | return codes; |
| | | |
| | | }, |
| | | }; |