liweilong
2020-11-30 ad3cc54a2c55ac8cdfb290be3b1e7487f9293d97
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 * 地址数据&方法
 */
 
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
}