|
@@ -0,0 +1,141 @@
|
|
|
|
+import twData from './taiwan.json'
|
|
|
|
+import { formatCity } from './filterCity'
|
|
|
|
+export default {
|
|
|
|
+ /**
|
|
|
|
+ * 按省的城市编码排序
|
|
|
|
+ */
|
|
|
|
+ orderByCityCode(a, b) {
|
|
|
|
+ return parseInt(a.value) - parseInt(b.value)
|
|
|
|
+ },
|
|
|
|
+ /**
|
|
|
|
+ * 自定义app数据格式
|
|
|
|
+ * @param {Array} addressList 高德地图api返回的城市数据
|
|
|
|
+ * @param {boolean} noFilter 是否过滤省市区
|
|
|
|
+ * @param {boolean} allProvice 是否显示全省
|
|
|
|
+ * @param {boolean} allCity 是否显示全市
|
|
|
|
+ * @param {boolean} allCountry 是否显示全国
|
|
|
|
+ */
|
|
|
|
+ buildAppJSONData({
|
|
|
|
+ addressList,
|
|
|
|
+ noFilter = false,
|
|
|
|
+ allProvince = false,
|
|
|
|
+ allCity = false,
|
|
|
|
+ allCountry = false,
|
|
|
|
+ }) {
|
|
|
|
+ let array = []
|
|
|
|
+ get(addressList, array, noFilter)
|
|
|
|
+
|
|
|
|
+ array.forEach(item => {
|
|
|
|
+ if (item.value === '710000') {
|
|
|
|
+ if (item.children.length === 0) {
|
|
|
|
+ item.children = twData
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ array.sort(this.orderByCityCode) // 加入台湾区域,并按省份城市代码排序
|
|
|
|
+
|
|
|
|
+ const specialCitys = ['北京', '上海', '天津', '重庆', '香港', '澳门']
|
|
|
|
+ if (array.length > 0) {
|
|
|
|
+ array.forEach(item => {
|
|
|
|
+ if (allCity) {
|
|
|
|
+ item.children.forEach(city => {
|
|
|
|
+ city.children.unshift({
|
|
|
|
+ value: '0', label: '全市', children: []
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ if (allProvince) {
|
|
|
|
+ if (specialCitys.indexOf(item.label) === -1) {
|
|
|
|
+ item.children.unshift({
|
|
|
|
+ value: '0', label: '全省', children: [
|
|
|
|
+ {value: '0', label: '全省', children: []}
|
|
|
|
+ ]
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ if (allCountry) {
|
|
|
|
+ array.unshift({
|
|
|
|
+ value: '0', label: '全国', children: [
|
|
|
|
+ {value: '0', label: '全国', children: [
|
|
|
|
+ {value: '0', label: '全国', children: []}
|
|
|
|
+ ]}
|
|
|
|
+ ]
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return array
|
|
|
|
+
|
|
|
|
+ function get(districts, children, noFilter) {
|
|
|
|
+ districts.forEach((item, index) => {
|
|
|
|
+ children.push({
|
|
|
|
+ value: noFilter === true ? item.adcode : item.name,
|
|
|
|
+ label: noFilter === true ? formatCity(item.name) : item.name
|
|
|
|
+ })
|
|
|
|
+ if (item.districts.length != 0) {
|
|
|
|
+ children[children.length - 1].children = []
|
|
|
|
+ if (item.adcode === item.districts[0].adcode) {
|
|
|
|
+ children[children.length - 1].children = [
|
|
|
|
+ {
|
|
|
|
+ value: noFilter === true ? item.adcode : item.name,
|
|
|
|
+ label: noFilter === true ? formatCity(item.name) : item.name
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ } else {
|
|
|
|
+ get(item.districts, children[children.length - 1].children, noFilter)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 特别处理香港,市区统一
|
|
|
|
+ if (parseInt(item.adcode) > 810000 && parseInt(item.adcode) < 820000) {
|
|
|
|
+ children[children.length - 1].children = [
|
|
|
|
+ {
|
|
|
|
+ value: noFilter === true ? item.adcode : item.name,
|
|
|
|
+ label: noFilter === true ? formatCity(item.name) : item.name
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ // 特别处理澳门,市区统一
|
|
|
|
+ if (parseInt(item.adcode) > 820000 && parseInt(item.adcode) < 830000) {
|
|
|
|
+ children[children.length - 1].children = [
|
|
|
|
+ {
|
|
|
|
+ value: noFilter === true ? item.adcode : item.name,
|
|
|
|
+ label: noFilter === true ? formatCity(item.name) : item.name
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ // 特别处理台湾
|
|
|
|
+ if (parseInt(item.adcode) === 710000) {
|
|
|
|
+ children[children.length - 1].children = []
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ getGaoDeData(key) {
|
|
|
|
+ if (key) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
+ uni.request({
|
|
|
|
+ method: 'get',
|
|
|
|
+ url: `https://restapi.amap.com/v3/config/district?subdistrict=3&key=${key}`,
|
|
|
|
+ success: res => {
|
|
|
|
+ if (res.statusCode === 200) {
|
|
|
|
+ // 构造匹配app,otms框架的城市JSON文件
|
|
|
|
+ // const data = this.buildAppJSONData(, false, false)
|
|
|
|
+ resolve(res.data.districts[0].districts)
|
|
|
|
+ } else {
|
|
|
|
+ reject(res)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ fail: res => {
|
|
|
|
+ reject(res)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ } else {
|
|
|
|
+ uni.showModal({
|
|
|
|
+ title: '提示',
|
|
|
|
+ content: '请输入高德key'
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|