- src/components/DictSelect: 改用 defineModel 与 computed,修复选项加载时清空已选值与父子值分叉 - src/components/ThemeSwitcher: ThemeSwitch 改名,修正 theneList 拼写 - src/composables/useTableSelection: 显式判空,避免 id 为 0 的行被过滤 - src/utils/download: 收窄入参类型,headers 改为可选 - src/api/system/user: 导出与模板下载接口声明 Blob 响应类型 - src/views/system/dict: 标签类型选项排除空串,el-tag 去掉 as any - src/views/system/user/components/UserImportDialog: 去掉响应类型的 any 标注 - src/layouts、src/views/login: 删除可自动导入组件的冗余 import
50 lines
1.1 KiB
Vue
50 lines
1.1 KiB
Vue
<template>
|
||
<el-dropdown trigger="click" @command="handleLanguageChange">
|
||
<div class="i-svg:language" :class="size" />
|
||
<template #dropdown>
|
||
<el-dropdown-menu>
|
||
<el-dropdown-item
|
||
v-for="item in langOptions"
|
||
:key="item.value"
|
||
:disabled="appStore.language === item.value"
|
||
:command="item.value"
|
||
>
|
||
{{ item.label }}
|
||
</el-dropdown-item>
|
||
</el-dropdown-menu>
|
||
</template>
|
||
</el-dropdown>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
import { useAppStore } from "@/stores/app";
|
||
import { LanguageEnum } from "@/enums/settings";
|
||
|
||
defineProps({
|
||
size: {
|
||
type: String,
|
||
required: false,
|
||
},
|
||
});
|
||
|
||
const langOptions = [
|
||
{ label: "中文", value: LanguageEnum.ZH_CN },
|
||
{ label: "English", value: LanguageEnum.EN },
|
||
];
|
||
|
||
const appStore = useAppStore();
|
||
const { locale, t } = useI18n();
|
||
|
||
/**
|
||
* 处理语言切换
|
||
*
|
||
* @param lang 语言(zh-cn、en)
|
||
*/
|
||
function handleLanguageChange(lang: string) {
|
||
locale.value = lang;
|
||
appStore.changeLanguage(lang);
|
||
|
||
ElMessage.success(t("langSelect.message.success"));
|
||
}
|
||
</script>
|