¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dropdown trigger="click" @command="handleLanguageChange"> |
| | | <div class="lang-select--style"> |
| | | <svg-icon icon-class="language" /> |
| | | </div> |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <el-dropdown-item :disabled="appStore.language === 'zh-cn'" command="zh-cn"> 䏿 </el-dropdown-item> |
| | | <el-dropdown-item :disabled="appStore.language === 'en'" command="en"> English </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useI18n } from 'vue-i18n'; |
| | | import SvgIcon from '@/components/SvgIcon/index.vue'; |
| | | import { useAppStore } from '@/store/modules/app'; |
| | | |
| | | const appStore = useAppStore(); |
| | | const { locale } = useI18n(); |
| | | |
| | | function handleLanguageChange(lang: string) { |
| | | locale.value = lang; |
| | | appStore.changeLanguage(lang); |
| | | if (lang == 'en') { |
| | | ElMessage.success('Switch Language Successful!'); |
| | | } else { |
| | | ElMessage.success('忢è¯è¨æåï¼'); |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .lang-select--style { |
| | | font-size: 18px; |
| | | line-height: 50px; |
| | | } |
| | | </style> |
| | |
| | | <script setup lang="ts"> |
| | | const { isFullscreen, toggle } = useFullscreen(); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screenfull-svg { |
| | | display: inline-block; |
| | | cursor: pointer; |
| | | fill: #5a5e66; |
| | | width: 20px; |
| | | height: 20px; |
| | | vertical-align: 10px; |
| | | } |
| | | </style> |
| | |
| | | }, |
| | | // ç»å½é¡µé¢å½é
å |
| | | login: { |
| | | title: 'vue3-element-admin', |
| | | username: 'Username', |
| | | password: 'Password', |
| | | login: 'Login', |
| | | code: 'Verification Code', |
| | | copyright: '', |
| | | icp: '', |
| | | thirdPartyLogin: 'third-party login' |
| | | copyright: '' |
| | | }, |
| | | // å¯¼èªæ å½é
å |
| | | navbar: { |
| | | full: 'Full Screen', |
| | | language: 'Language', |
| | | dashboard: 'Dashboard', |
| | | logout: 'Logout', |
| | | document: 'Document', |
| | | gitee: 'Gitee' |
| | | layoutSize: 'Layout Size', |
| | | selectTenant: 'Select Tenant', |
| | | layoutSetting: 'Layout Setting', |
| | | personalCenter: 'Personal Center', |
| | | logout: 'Logout' |
| | | } |
| | | }; |
| | |
| | | // æ¬å°è¯è¨å
|
| | | import enLocale from './en'; |
| | | import zhCnLocale from './zh-cn'; |
| | | import Cookies from 'js-cookie'; |
| | | |
| | | const messages = { |
| | | 'zh-cn': { |
| | |
| | | |
| | | /** |
| | | * è·åå½åç³»ç»ä½¿ç¨è¯è¨å符串 |
| | | * |
| | | * @returns zh-cn|en ... |
| | | */ |
| | | export const getLanguage = () => { |
| | | // æ¬å°ç¼åè·å |
| | | let language = localStorage.getItem('language'); |
| | | let language = Cookies.get('language'); |
| | | if (language) { |
| | | return language; |
| | | } |
| | |
| | | const i18n = createI18n({ |
| | | legacy: false, |
| | | locale: getLanguage(), |
| | | messages: messages |
| | | messages |
| | | }); |
| | | |
| | | export default i18n; |
| | |
| | | }, |
| | | // ç»å½é¡µé¢å½é
å |
| | | login: { |
| | | title: 'vue3-element-admin', |
| | | username: 'ç¨æ·å', |
| | | password: 'å¯ç ', |
| | | login: 'ç» å½', |
| | | code: '请è¾å
¥éªè¯ç ', |
| | | copyright: '', |
| | | icp: '', |
| | | thirdPartyLogin: 'ç¬¬ä¸æ¹ç»å½' |
| | | copyright: '' |
| | | }, |
| | | navbar: { |
| | | full: 'å
¨å±', |
| | | language: 'è¯è¨', |
| | | dashboard: 'é¦é¡µ', |
| | | logout: '注é', |
| | | document: 'é¡¹ç®ææ¡£', |
| | | gitee: 'ç äº' |
| | | layoutSize: 'å¸å±å¤§å°', |
| | | selectTenant: 'éæ©ç§æ·', |
| | | layoutSetting: 'å¸å±è®¾ç½®', |
| | | personalCenter: '个人ä¸å¿', |
| | | logout: 'éåºç»å½' |
| | | } |
| | | }; |
| | |
| | | clearable |
| | | filterable |
| | | reserve-keyword |
| | | placeholder="è¯·éæ©ç§æ·" |
| | | :placeholder="$t('navbar.selectTenant')" |
| | | v-if="userId === 1 && tenantEnabled" |
| | | @change="dynamicTenantEvent" |
| | | @clear="dynamicClearEvent" |
| | |
| | | |
| | | <header-search id="header-search" class="right-menu-item" /> |
| | | |
| | | <el-tooltip content="æºç å°å" effect="dark" placement="bottom"> |
| | | <el-tooltip content="Github" effect="dark" placement="bottom"> |
| | | <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" /> |
| | | </el-tooltip> |
| | | |
| | | <el-tooltip content="ææ¡£å°å" effect="dark" placement="bottom"> |
| | | <el-tooltip :content="$t('navbar.document')" effect="dark" placement="bottom"> |
| | | <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" /> |
| | | </el-tooltip> |
| | | |
| | | <el-tooltip content="å
¨å±" effect="dark" placement="bottom"> |
| | | <el-tooltip :content="$t('navbar.full')" effect="dark" placement="bottom"> |
| | | <screenfull id="screenfull" class="right-menu-item hover-effect" /> |
| | | </el-tooltip> |
| | | |
| | | <el-tooltip content="å¸å±å¤§å°" effect="dark" placement="bottom"> |
| | | <el-tooltip :content="$t('navbar.language')" effect="dark" placement="bottom"> |
| | | <lang-select id="lang-select" class="right-menu-item hover-effect" /> |
| | | </el-tooltip> |
| | | |
| | | <el-tooltip :content="$t('navbar.layoutSize')" effect="dark" placement="bottom"> |
| | | <size-select id="size-select" class="right-menu-item hover-effect" /> |
| | | </el-tooltip> |
| | | </template> |
| | |
| | | <template #dropdown> |
| | | <el-dropdown-menu> |
| | | <router-link to="/user/profile" v-if="!dynamic"> |
| | | <el-dropdown-item>个人ä¸å¿</el-dropdown-item> |
| | | <el-dropdown-item>{{ $t('navbar.personalCenter') }}</el-dropdown-item> |
| | | </router-link> |
| | | <el-dropdown-item command="setLayout"> |
| | | <span>å¸å±è®¾ç½®</span> |
| | | <span>{{ $t('navbar.layoutSetting') }}</span> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item divided command="logout"> |
| | | <span>éåºç»å½</span> |
| | | <span>{{ $t('navbar.logout') }}</span> |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | |
| | | import { getConfigKey, updateConfigByKey } from '@/api/system/config'; |
| | | import { parseTime, addDateRange, handleTree, selectDictLabel, selectDictLabels } from '@/utils/ruoyi'; |
| | | |
| | | // å½é
å |
| | | import i18n from '@/lang/index'; |
| | | |
| | | const app = createApp(App); |
| | | // å
¨å±æ¹æ³æè½½ |
| | | app.config.globalProperties.useDict = useDict; |
| | |
| | | app.use(ElementIcons); |
| | | app.use(router); |
| | | app.use(store); |
| | | app.use(i18n); |
| | | app.use(plugins); |
| | | // èªå®ä¹æä»¤ |
| | | directive(app); |
| | |
| | | // è¯è¨ |
| | | const language = ref(Cookies.get('language')); |
| | | const locale = computed(() => { |
| | | if (language?.value == 'en') { |
| | | if (language.value == 'en') { |
| | | return en; |
| | | } else { |
| | | return zhCn; |
| | |
| | | |
| | | const changeLanguage = (val: string): void => { |
| | | language.value = val; |
| | | Cookies.set('language', val); |
| | | }; |
| | | |
| | | return { |