index.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div class="treeSelectV2">
  3. <TreeSelectV2
  4. :data="areaTree"
  5. :props="{ label: 'name', value: 'id' }"
  6. v-model="xzqdm"
  7. :filter-method="filterNodeMethod"
  8. :disabled="disabled"
  9. />
  10. </div>
  11. </template>
  12. <script setup lang="ts">
  13. import TreeSelectV2 from '@/components/TreeSelectV2/index.vue'
  14. import { filterNodeMethod } from '@/utils/tree'
  15. import { useQuery } from '@tanstack/vue-query'
  16. import { getAreaTree } from '@/service/system'
  17. defineOptions({
  18. name: 'DistrictTree'
  19. })
  20. const props = defineProps({
  21. disabled: {
  22. type: Boolean,
  23. default: false
  24. },
  25. modelValue: {
  26. type: [Number, String],
  27. default: null
  28. }
  29. })
  30. const emit = defineEmits<{ (e: 'update:modelValue', v: any): void }>()
  31. const xzqdm = computed({
  32. get: () => Number(props.modelValue),
  33. set: (val) => emit('update:modelValue', val)
  34. })
  35. const { data: areaTree } = useQuery([getAreaTree.name], getAreaTree)
  36. </script>
  37. <style lang="scss" scoped>
  38. .treeSelectV2 {
  39. position: relative;
  40. :deep(.el-popper) {
  41. width: 100% !important;
  42. left: 0px !important;
  43. right: 0px !important;
  44. }
  45. :deep(.el-input__suffix) {
  46. .el-icon {
  47. color: var(--el-select-input-color);
  48. font-size: var(--el-select-input-font-size);
  49. transition: transform var(--el-transition-duration);
  50. transform: rotateZ(0);
  51. cursor: pointer;
  52. }
  53. }
  54. :deep(.is-focus) {
  55. .el-input__suffix .el-icon {
  56. transform: rotateZ(-180deg);
  57. cursor: pointer;
  58. }
  59. }
  60. }
  61. </style>