1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- <script lang="ts" name="LocaleDropdown" setup>
- import { useLocaleStore } from '@/store/modules/locale'
- import { useLocale } from '@/hooks/web/useLocale'
- import { propTypes } from '@/utils/propTypes'
- import { useDesign } from '@/hooks/web/useDesign'
- const { getPrefixCls } = useDesign()
- const prefixCls = getPrefixCls('locale-dropdown')
- defineProps({
- color: propTypes.string.def('')
- })
- const localeStore = useLocaleStore()
- const langMap = computed(() => localeStore.getLocaleMap)
- const currentLang = computed(() => localeStore.getCurrentLocale)
- const setLang = (lang: LocaleType) => {
- if (lang === unref(currentLang).lang) return
- // 需要重新加载页面让整个语言多初始化
- window.location.reload()
- localeStore.setCurrentLocale({
- lang
- })
- const { changeLocale } = useLocale()
- changeLocale(lang)
- }
- </script>
- <template>
- <ElDropdown :class="prefixCls" trigger="click" @command="setLang">
- <Icon
- :class="$attrs.class"
- :color="color"
- :size="18"
- class="cursor-pointer"
- icon="ion:language-sharp"
- />
- <template #dropdown>
- <ElDropdownMenu>
- <ElDropdownItem v-for="item in langMap" :key="item.lang" :command="item.lang">
- {{ item.name }}
- </ElDropdownItem>
- </ElDropdownMenu>
- </template>
- </ElDropdown>
- </template>
|