/** * 地址数据&方法 */ import area from './data.js' // 引入地区数组 // import Req from '../http_install.js' // 引入请求方法 const axios = require('axios') /** * 根据省名称获取城市数组 * @param {string} province 省名 * @return {object[]} 城市数组 */ function getCitiesByLabel(province) { province = area.find(obj => province === obj.label) return province ? province.children : [] } /** * 根据省市名称获取区数组 * @param {string} province 省名 * @param {string} city 城市名 * @return {object[]} 区数组 */ function getDistrictsByLabel(province, city) { var cities = getCitiesByLabel(province) city = cities.find(obj => city === obj.label) return city ? city.children : [] } /** * 根据省市区获取区数据 * @param {string} province 省名 * @param {string} city 城市名 * @param {string} district 区名 * @return {object} 区对象数据 */ function getDistrictsObjByLabel(province, city, district) { return getDistrictsByLabel(province, city).find(obj => obj.label === district) } /** * 初始化 elementUI Cascader 的 option * @param {object[]} areaArr 地区数据 * @return {object[]} elementUI 级联选择组件用的 option 参数 */ function getAreaOpts(areaArr) { if (!areaArr || !areaArr.length) { return } return areaArr.map((obj) => { return { value: obj.label, label: obj.label, code: obj.value, children: getAreaOpts(obj.children) } }) } /** * 请求获取街道json数据 - 根据传入的区编号,请求对应的json文件 * Promise * @param {string} districtCode 区编号 * @param {VueObject} _this vue页面实例 * @resolve {'街道号': '街道名', ...} */ function getStreetByDistrictCode(districtCode) { return new Promise((resolve, reject) => { if (!districtCode) { reject('缺失 districtCode') } // TODO 改为axios axios({ method: 'GET', url: './static/town/' + districtCode + '.json', header: { 'content-type': 'application/json' // 默认值 } }).then((res) => { const result = [] const data = res.data // 构建街道数组 // 注:此处label与value一致,预留一个code字段保留街道编号 if (data) { for (var i in data) { result.push({ label: data[i], value: data[i], code: i }) } } resolve(result) }).catch(() => { reject() }) }) } export default { data: area, getAreaOpts, getCitiesByLabel, getDistrictsByLabel, getDistrictsObjByLabel, getStreetByDistrictCode }