You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.2 KiB
101 lines
3.2 KiB
<template>
|
|
<el-dialog
|
|
:title="$t('main.updateLanguageDialog.title')"
|
|
:visible.sync="visible"
|
|
width="300px"
|
|
:append-to-body="true">
|
|
<el-form :model="dataForm" ref="dataForm" @keyup.enter.native="dataFormSubmit()" label-width="80px">
|
|
<el-form-item :label="$t('main.updateLanguageDialog.account')">
|
|
<span>{{ userName }}</span>
|
|
</el-form-item>
|
|
<el-form-item :label="$t('main.updateLanguageDialog.currentLanguage')" prop="newPassword">
|
|
<span>{{ currentLanguageName }}</span>
|
|
</el-form-item>
|
|
<el-form-item :label="$t('main.updateLanguageDialog.newLanguage')" prop="newLanguage">
|
|
<el-select filterable v-model="dataForm.languageDefault" clearable>
|
|
<el-option :label="item.languageName" :value="item.languageCode" v-for="(item,index) in languageList "
|
|
:key="index"></el-option>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="visible = false">{{ $t('main.common.cancel') }}</el-button>
|
|
<el-button type="primary" @click="dataFormSubmit()">{{ $t('main.common.confirm') }}</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
import {updateUserLanguage} from '@/api/user.js'
|
|
import { normalizeLocale } from '@/i18n/i18n'
|
|
// import PubSub from 'pubsub-js'
|
|
import {
|
|
searchSysLanguage
|
|
} from "@/api/sysLanguage.js"
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
visible: false,
|
|
dataForm: {
|
|
languageDefault: ''
|
|
},
|
|
language: normalizeLocale(localStorage.getItem('locale')),
|
|
languageList: []
|
|
}
|
|
},
|
|
computed: {
|
|
userName: {
|
|
get() {
|
|
return this.$store.state.user.name
|
|
}
|
|
},
|
|
mainTabs: {
|
|
get() {
|
|
return this.$store.state.common.mainTabs
|
|
},
|
|
set(val) {
|
|
this.$store.commit('common/updateMainTabs', val)
|
|
}
|
|
},
|
|
currentLanguageName() {
|
|
const langCode = normalizeLocale(this.language)
|
|
return this.$t(`main.languageName.${langCode}`)
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
// 获取多语言列表
|
|
getLanguageList() {
|
|
searchSysLanguage({}).then(({data}) => {
|
|
const allowSet = new Set(['cn', 'en', 'zh-CN', 'en-US'])
|
|
this.languageList = (data.rows || []).filter(item => allowSet.has(item.languageCode))
|
|
})
|
|
},
|
|
// 初始化
|
|
init() {
|
|
this.visible = true
|
|
this.$nextTick(() => {
|
|
this.$refs['dataForm'].resetFields()
|
|
})
|
|
},
|
|
// 修改用户默认语言
|
|
dataFormSubmit() {
|
|
const normalizedLanguage = normalizeLocale(this.dataForm.languageDefault || this.language)
|
|
updateUserLanguage({ languageDefault: normalizedLanguage }).then(({data}) => {
|
|
if (data.code == 0) {
|
|
this.$i18n.locale = normalizedLanguage
|
|
this.language = normalizedLanguage
|
|
localStorage.setItem('locale', normalizedLanguage)
|
|
this.$router.go(0)
|
|
// PubSub.publish('search',this.dataForm.languageDefault )
|
|
// this.$router.replace({name: 'login'})
|
|
}
|
|
})
|
|
}
|
|
} ,created() {
|
|
this.getLanguageList()
|
|
},
|
|
}
|
|
</script>
|
|
|