/**
|
* 地址数据&方法
|
*/
|
|
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
|
}
|