签入版本

This commit is contained in:
2026-09-11 11:39:07 +08:00
commit c381201858
928 changed files with 116443 additions and 0 deletions
+104
View File
@@ -0,0 +1,104 @@
<template>
<el-cascader
:filterable="false"
:props="cascaderProps"
clearable
:disabled="disabled"
v-model="selectedOptions"
@change="handleChange"
/>
</template>
<script setup lang="ts" name="china-area">
import { ref, onMounted, computed } from 'vue';
import type { CascaderProps } from 'element-plus';
import { getCityByList } from '@/api/common/city';
const emit = defineEmits(['update:modelValue', 'change']);
const optionsData = ref();
const mapData = ref({});
const props = defineProps({
// 当前的值
modelValue: [String, Array],
// 类型 (二级联动,三级联动)
type: {
type: Number,
default: 3,
},
// 是否禁用
disabled: {
type: Boolean,
default: () => false,
},
});
const cascaderProps: CascaderProps = {
value: 'areaCode',
label: 'name',
leaf: 'hasChild',
lazy: true,
lazyLoad: function (node, resolve) {
let level = node.level;
let value = node.value;
getCityList(value ? value : 0, level, resolve);
},
};
const getCityList = (pid: any, level: any, resolve: any) => {
getCityByList(pid)
.then((data) => {
for (let i = 0; i < data.length; i++) {
data[i].areaCode = parseInt(data[i].areaCode);
data[i].hasChild = level >= props.type - 1 ? true : false;
}
mapData.value[pid] = data;
resolve(data ? data : []);
})
.catch((e) => {
resolve([]);
});
};
const selectedOptions = computed({
get: () => {
return props.modelValue;
},
set: (val) => {
emit('update:modelValue', val);
},
});
const findListChild = (list: any, value: any) => {
let child = null;
for (let i = 0; i < list.length; i++) {
if (list[i].areaCode == value) {
child = list[i];
break;
}
}
return child;
};
const handleChange = (value: String[]) => {
let receiveText = '';
if (value && value.length > 0) {
if (mapData.value[0]) {
for (let i = 0; i < value.length; i++) {
if (i === 0) {
let child = findListChild(mapData.value[0], value[i]);
receiveText += child ? child.name : '';
} else {
let child = findListChild(mapData.value[value[i - 1]], value[i]);
receiveText += child ? child.name : '';
}
}
}
}
emit('change', receiveText);
};
onMounted(() => {});
</script>
<style lang="scss">
.el-cascader-menu {
background-color: #ffffff;
}
</style>