jiku-ui
Version:
A Component Library for Vue.js.
102 lines (97 loc) • 2.54 kB
JavaScript
import {
getAllProvince, getCities, getCounties, getTowns
} from './api';
import get from 'lodash/get';
export default {
props: {
httpClient: {
required: true
},
apiUrlMap: {
required: true
},
responseProps: {
required: true
},
responsePath: {
required: true
},
addressIDs: {
type: Array,
default: () => ([])
},
level: {
required: true
},
disabled: {
required: true
},
clearable: {
type: Boolean,
default: false
}
},
computed: {
addressHttpClient() {
return this.httpClient || this.$axios || this.$fetch || window.fetch;
}
},
methods: {
getAllProvince() {
const { apiUrlMap, responseProps, responsePath, level } = this;
return getAllProvince(this.addressHttpClient, apiUrlMap.province)
.then(res => {
return get(res, responsePath, res).map(v => ({
label: v[responseProps.provinceName],
value: v[responseProps.provinceID],
leaf: level === 1
}));
})
.catch(() => {
return [];
});
},
getCities(provinceID) {
const { apiUrlMap, responseProps, responsePath, level } = this;
return getCities(this.addressHttpClient, apiUrlMap.city, provinceID)
.then(res => {
return get(res, responsePath, res).map(v => ({
label: v[responseProps.cityName],
value: v[responseProps.cityID],
leaf: level === 2
}));
})
.catch(() => {
return [];
});
},
getCounties(cityID) {
const { apiUrlMap, responseProps, responsePath, level } = this;
return getCounties(this.addressHttpClient, apiUrlMap.county, cityID)
.then(res => {
return get(res, responsePath, res).map(v => ({
label: v[responseProps.countyName],
value: v[responseProps.countyID],
leaf: level === 3
}));
})
.catch(() => {
return [];
});
},
getTowns(countyID) {
const { apiUrlMap, responseProps, responsePath, level } = this;
return getTowns(this.addressHttpClient, apiUrlMap.town, countyID)
.then(res => {
return get(res, responsePath, res).map(v => ({
label: v[responseProps.townName],
value: v[responseProps.townID],
leaf: level === 4
}));
})
.catch(() => {
return [];
});
}
}
};