SeeAllIcon.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script setup lang="ts">
  2. import { useI18n } from 'vue-i18n'
  3. const { t } = useI18n()
  4. const isCollapse = defineModel<boolean>()
  5. const emits = defineEmits<{ collapse: [boolean] }>()
  6. const handleSeeAll = () => {
  7. isCollapse.value = !isCollapse.value
  8. // 使用nextTick来确保父组件能够在子组件的值更新后获取到最新的值
  9. nextTick(() => {
  10. emits('collapse', isCollapse.value as boolean)
  11. })
  12. }
  13. </script>
  14. <template>
  15. <div class="see-all-icon" @click="handleSeeAll">
  16. <span class="btn">{{ t('common.seeAll') }}</span>
  17. <span
  18. class="icon font_family icon-icon_dropdown__line_b"
  19. :class="{ 'is-rotate': isCollapse }"
  20. ></span>
  21. </div>
  22. </template>
  23. <style lang="scss" scoped>
  24. .see-all-icon {
  25. display: inline-block;
  26. cursor: pointer;
  27. & > .btn {
  28. margin-left: 8px;
  29. font-size: 14px;
  30. font-weight: 400;
  31. color: var(--color-theme);
  32. }
  33. & > .icon {
  34. display: inline-block !important;
  35. margin-left: 2px;
  36. margin-top: -2px;
  37. transform: rotate(0deg);
  38. transition: all 0.3s;
  39. color: var(--color-theme);
  40. &.is-rotate {
  41. transform: rotate(180deg) !important;
  42. }
  43. }
  44. }
  45. </style>