restructure/src/components/AreaCascader/index.vue

54 lines
1.0 KiB
Vue
Raw Normal View History

2022-07-05 14:12:18 +08:00
<template>
<n-cascader v-bind="getProps" @update:value="handleUpdate" />
</template>
<script>
import { NCascader } from 'naive-ui'
import { computed } from 'vue'
export default {
name: 'AreaCascader',
props: {
...NCascader.props,
showCheckbox: {
type: Boolean,
default: true
},
field: {
type: Array,
default: () => {
return ['province', 'city', 'distance']
}
}
},
emits: ['selectd'],
setup(props, { emit }) {
const getProps = computed(() => {
return {
...props
}
})
function handleUpdate(value, option, pathValues) {
const field = props.field
const valueField = props.valueField
const filedJson = {}
field.forEach((item, index) => {
filedJson[item] = pathValues?.[index]?.[valueField] || ''
})
emit('selectd', filedJson)
}
function clearValue() {
handleUpdate(null, null, [])
}
return {
getProps,
handleUpdate,
clearValue
}
}
}
</script>
<style scoped lang='scss'>
</style>