Files
cmanager/src/components/city-cascader/main.vue

86 lines
1.5 KiB
Vue
Raw Normal View History

2024-02-02 15:04:47 +08:00
<template>
<el-cascader
:options="area.data"
:show-all-levels="showAllLevels"
v-model="model"
:filterable="filterable"
:placeholder="placeholder"
:disabled="disabled"
:clearable="clearable"
></el-cascader>
</template>
<script>
import { mapGetters } from "vuex";
function getProv(code) {
return code.substring(0, 2) + "0000";
}
function getCity(code) {
return code.substring(0, 4) + "00";
}
export default {
props: {
value: String,
filterable: Boolean,
placeholder: String,
showAllLevels: { type: Boolean, default: true },
disabled: Boolean,
clearable: Boolean,
},
data() {
return {
options: [],
};
},
created() {
this.$store.dispatch("InitArea");
},
watch: {},
computed: {
...mapGetters(["area"]),
prov() {
if (this.county) {
return getProv(this.county);
} else {
return "";
}
},
city() {
if (this.county) {
return getCity(this.county);
} else {
return "";
}
},
county: {
get() {
return this.value;
},
set(val) {
this.$emit("input", val);
},
},
model: {
set(val) {
if (val.length > 2) {
this.county = val[2];
} else {
this.county = undefined;
}
},
get() {
if (this.county) {
return [this.prov, this.city, this.county];
}
return null;
},
},
},
};
</script>
<style>
2024-04-19 14:58:16 +08:00
</style>