leftSlider.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <!-- @format -->
  2. <script lang="ts" setup>
  3. defineProps({
  4. topLevel: {
  5. type: Object,
  6. default: () => {},
  7. },
  8. list: {
  9. type: Array as any,
  10. default: () => [],
  11. },
  12. })
  13. const emit = defineEmits(['onSelect'])
  14. const selectedValue = defineModel('selectedValue')
  15. function onHandleTopLevel(topLevel: any) {
  16. selectedValue.value = topLevel.key
  17. emit('onSelect', topLevel.key)
  18. }
  19. function onHandleChildLevel(childLevel: any) {
  20. selectedValue.value = childLevel.key
  21. emit('onSelect', childLevel.key)
  22. }
  23. </script>
  24. <template>
  25. <div>
  26. <div
  27. class="!fw-700 text-20px text-#333 !mb-40px cursor-pointer hover:text-#B06B3C"
  28. :class="selectedValue === topLevel.key ? 'text-#B06B3C' : ''"
  29. @click="onHandleTopLevel(topLevel)"
  30. >
  31. {{ topLevel.label }}({{ topLevel.entityQty }})
  32. </div>
  33. <div class="gap-28px flex flex-col pl-10px text-#333">
  34. <div
  35. v-for="item in list"
  36. :key="item.key"
  37. :class="selectedValue === item.key && 'text-#B06B3C'"
  38. class="cursor-pointer hover:text-#B06B3C"
  39. @click="onHandleChildLevel(item)"
  40. >
  41. {{ item.title }} ({{ item.entityQty }})
  42. </div>
  43. </div>
  44. </div>
  45. </template>
  46. <style lang="less" scoped></style>