Browse Source

先加载语言再加载菜单

master
han\hanst 1 week ago
parent
commit
9b64f7b30f
  1. 8
      cclqms-java/src/main/resources/mapper/language/SysLanguageListDao.xml
  2. 22
      cclqms-vue/src/i18n/i18n.js
  3. 9
      cclqms-vue/src/router/index.js
  4. 6
      cclqms-vue/src/views/common/login-new.vue
  5. 6
      cclqms-vue/src/views/common/login.vue
  6. 16
      cclqms-vue/src/views/main-navbar-update-language.vue

8
cclqms-java/src/main/resources/mapper/language/SysLanguageListDao.xml

@ -10,6 +10,10 @@
FROM FROM
sys_language_list sl sys_language_list sl
LEFT JOIN sys_object_language_list sol on (sol.language_id = sl.language_id) LEFT JOIN sys_object_language_list sol on (sol.language_id = sl.language_id)
WHERE sol.language_code = #{languageCode}
<where>
<if test="languageCode != null and languageCode != ''">
sol.language_code = #{languageCode}
</if>
</where>
</select> </select>
</mapper>
</mapper>

22
cclqms-vue/src/i18n/i18n.js

@ -3,12 +3,24 @@ import Vue from 'vue'
Vue.use(VueI18n) Vue.use(VueI18n)
const supportedLocales = ['cn', 'en']
let locale = localStorage.getItem('locale') || 'cn'
if (!supportedLocales.includes(locale)) {
locale = 'cn'
localStorage.setItem('locale', locale)
const localeAliasMap = {
cn: 'cn',
'zh-cn': 'cn',
'zh_cn': 'cn',
en: 'en',
'en-us': 'en',
'en_us': 'en'
}
export function normalizeLocale (locale) {
const normalizedLocale = (locale || '').toString().trim().toLowerCase()
return localeAliasMap[normalizedLocale] || 'cn'
} }
const locale = normalizeLocale(localStorage.getItem('locale'))
localStorage.setItem('locale', locale)
const i18n = new VueI18n({ const i18n = new VueI18n({
locale: locale, // 语言标识 locale: locale, // 语言标识
messages: { messages: {

9
cclqms-vue/src/router/index.js

@ -9,7 +9,7 @@ import Router from 'vue-router'
import http from '@/utils/httpRequest' import http from '@/utils/httpRequest'
import { isURL } from '@/utils/validate' import { isURL } from '@/utils/validate'
import { clearLoginInfo } from '@/utils' import { clearLoginInfo } from '@/utils'
import i18n from '@/i18n/i18n'
import i18n, { normalizeLocale } from '@/i18n/i18n'
Vue.use(Router) Vue.use(Router)
@ -64,11 +64,16 @@ router.beforeEach((to, from, next) => {
if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') { if (router.options.isAddDynamicMenuRoutes || fnCurrentRouteType(to, globalRoutes) === 'global') {
next() next()
} else { } else {
const menuLocale = normalizeLocale(i18n.locale)
if (i18n.locale !== menuLocale) {
i18n.locale = menuLocale
localStorage.setItem('locale', menuLocale)
}
http({ http({
url: http.adornUrl('/sys/menu/nav'), url: http.adornUrl('/sys/menu/nav'),
method: 'get', method: 'get',
params: { params: {
'l': i18n.locale, //i18n.locale
'l': menuLocale,
menuType: "pc" menuType: "pc"
} }
}).then(({data}) => { }).then(({data}) => {

6
cclqms-vue/src/views/common/login-new.vue

@ -73,6 +73,7 @@
<script> <script>
import { getUUID } from '@/utils' import { getUUID } from '@/utils'
import {getConfigParams} from '@/api/sysConfig.js' import {getConfigParams} from '@/api/sysConfig.js'
import { normalizeLocale } from '@/i18n/i18n'
export default { export default {
data () { data () {
return { return {
@ -134,10 +135,11 @@
}) })
}).then(({data}) => { }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
const locale = normalizeLocale(data.language)
this.$cookie.set('token', data.token) this.$cookie.set('token', data.token)
this.$i18n.locale = locale
localStorage.setItem('locale', locale)
this.$router.replace({ name: 'home' }) this.$router.replace({ name: 'home' })
this.$i18n.locale=data.language
localStorage.setItem('locale', data.language)
localStorage.setItem('refresh', "0") localStorage.setItem('refresh', "0")
localStorage.setItem('userName', this.dataForm.userName) localStorage.setItem('userName', this.dataForm.userName)
this.getConfigParams() this.getConfigParams()

6
cclqms-vue/src/views/common/login.vue

@ -25,6 +25,7 @@
<script> <script>
import { getUUID } from '@/utils' import { getUUID } from '@/utils'
import {getConfigParams} from '@/api/sysConfig.js' import {getConfigParams} from '@/api/sysConfig.js'
import { normalizeLocale } from '@/i18n/i18n'
export default { export default {
data () { data () {
return { return {
@ -86,10 +87,11 @@
}) })
}).then(({data}) => { }).then(({data}) => {
if (data && data.code === 0) { if (data && data.code === 0) {
const locale = normalizeLocale(data.language)
this.$cookie.set('token', data.token) this.$cookie.set('token', data.token)
this.$i18n.locale = locale
localStorage.setItem('locale', locale)
this.$router.replace({ name: 'home' }) this.$router.replace({ name: 'home' })
this.$i18n.locale=data.language
localStorage.setItem('locale', data.language)
localStorage.setItem('refresh', "0") localStorage.setItem('refresh', "0")
localStorage.setItem('userName', this.dataForm.userName) localStorage.setItem('userName', this.dataForm.userName)
this.getConfigParams() this.getConfigParams()

16
cclqms-vue/src/views/main-navbar-update-language.vue

@ -27,6 +27,7 @@
<script> <script>
import {updateUserLanguage} from '@/api/user.js' import {updateUserLanguage} from '@/api/user.js'
import { normalizeLocale } from '@/i18n/i18n'
// import PubSub from 'pubsub-js' // import PubSub from 'pubsub-js'
import { import {
searchSysLanguage searchSysLanguage
@ -39,7 +40,7 @@
dataForm: { dataForm: {
languageDefault: '' languageDefault: ''
}, },
language: localStorage.getItem('locale'),
language: normalizeLocale(localStorage.getItem('locale')),
languageList: [] languageList: []
} }
}, },
@ -58,7 +59,7 @@
} }
}, },
currentLanguageName() { currentLanguageName() {
const langCode = this.language === 'en' ? 'en' : 'cn'
const langCode = normalizeLocale(this.language)
return this.$t(`main.languageName.${langCode}`) return this.$t(`main.languageName.${langCode}`)
} }
}, },
@ -66,7 +67,7 @@
methods: { methods: {
// //
getLanguageList() { getLanguageList() {
searchSysLanguage({ languageCode: this.$i18n.locale}).then(({data}) => {
searchSysLanguage({}).then(({data}) => {
const allowSet = new Set(['cn', 'en', 'zh-CN', 'en-US']) const allowSet = new Set(['cn', 'en', 'zh-CN', 'en-US'])
this.languageList = (data.rows || []).filter(item => allowSet.has(item.languageCode)) this.languageList = (data.rows || []).filter(item => allowSet.has(item.languageCode))
}) })
@ -80,10 +81,13 @@
}, },
// //
dataFormSubmit() { dataFormSubmit() {
updateUserLanguage(this.dataForm).then(({data}) => {
const normalizedLanguage = normalizeLocale(this.dataForm.languageDefault || this.language)
updateUserLanguage({ languageDefault: normalizedLanguage }).then(({data}) => {
if (data.code == 0) { if (data.code == 0) {
language: localStorage.setItem('locale',this.dataForm.languageDefault)
this.$router.go(0);
this.$i18n.locale = normalizedLanguage
this.language = normalizedLanguage
localStorage.setItem('locale', normalizedLanguage)
this.$router.go(0)
// PubSub.publish('search',this.dataForm.languageDefault ) // PubSub.publish('search',this.dataForm.languageDefault )
// this.$router.replace({name: 'login'}) // this.$router.replace({name: 'login'})
} }

Loading…
Cancel
Save