index.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <el-cascader :model-value="modelValue"
  3. @update:modelValue="emitInput"
  4. :placeholder="placeholder"
  5. :options="options"
  6. :props="optionProps"
  7. :disabled="disabled"
  8. :style="{width}"
  9. :clearable="clearable"></el-cascader>
  10. </template>
  11. <script>
  12. import { ElCascader } from 'element-plus'
  13. import { useFormInput, useOptions } from '@cip/components/hooks/form-input'
  14. import { formInputProps } from '../../form-input-props'
  15. import { computed } from 'vue'
  16. export default {
  17. components: { ElCascader },
  18. props: formInputProps,
  19. emits: ['update:modelValue'],
  20. setup (props, context) {
  21. const formInput = useFormInput(props, context)
  22. // 是否多选,ElCascader的多选比较特殊,multiple是在props里面,所以特殊处理
  23. const multiple = computed(() => {
  24. return props.config?.multiple ?? false
  25. })
  26. const { options } = useOptions(props, multiple)
  27. const optionProps = computed(() => {
  28. const multiple = props.config?.multiple ?? false
  29. return props.config?.optionProps ? { multiple, ...props.config?.optionProps } : {
  30. value: 'value',
  31. label: 'label',
  32. children: 'children',
  33. multiple
  34. }
  35. })
  36. return {
  37. ...formInput,
  38. options,
  39. optionProps
  40. }
  41. }
  42. }
  43. </script>
  44. <style lang="less">
  45. .el-cascader-panel{
  46. max-height: 50vh;
  47. overflow-y: scroll;
  48. }
  49. </style>