SizeDropdown.vue 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <script lang="ts" setup>
  2. import { useAppStore } from '@/store/modules/app'
  3. import { propTypes } from '@/utils/propTypes'
  4. import { useDesign } from '@/hooks/web/useDesign'
  5. import { ElementPlusSize } from '@/types/elementPlus'
  6. defineOptions({ name: 'SizeDropdown' })
  7. const { getPrefixCls } = useDesign()
  8. const prefixCls = getPrefixCls('size-dropdown')
  9. defineProps({
  10. color: propTypes.string.def('')
  11. })
  12. const { t } = useI18n()
  13. const appStore = useAppStore()
  14. const sizeMap = computed(() => appStore.sizeMap)
  15. const setCurrentSize = (size: ElementPlusSize) => {
  16. appStore.setCurrentSize(size)
  17. }
  18. </script>
  19. <template>
  20. <ElDropdown :class="prefixCls" trigger="click" @command="setCurrentSize">
  21. <Icon :color="color" :size="18" class="cursor-pointer" icon="mdi:format-size" />
  22. <template #dropdown>
  23. <ElDropdownMenu>
  24. <ElDropdownItem v-for="item in sizeMap" :key="item" :command="item">
  25. {{ t(`size.${item}`) }}
  26. </ElDropdownItem>
  27. </ElDropdownMenu>
  28. </template>
  29. </ElDropdown>
  30. </template>