|
|
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
|
|
type UserProfile,
|
|
|
|
|
updateUserProfile,
|
|
|
|
|
verifyEmailCode,
|
|
|
|
|
fetchVerifyCode
|
|
|
|
|
fetchVerifyCode,
|
|
|
|
|
setUserLanguage
|
|
|
|
|
} from '@/api/user'
|
|
|
|
|
import regionList from '@/utils/area'
|
|
|
|
|
import {
|
|
|
|
|
@@ -18,6 +19,9 @@ import {
|
|
|
|
|
type SettingsData
|
|
|
|
|
} from './types'
|
|
|
|
|
import { validateCase, validateLength, validateSpecial } from '@/views/login/tools'
|
|
|
|
|
import {useUserInfoStore} from '@/stores'
|
|
|
|
|
|
|
|
|
|
const userInfoStore = useUserInfoStore()
|
|
|
|
|
|
|
|
|
|
type Translate = (key: string, ...args: unknown[]) => string
|
|
|
|
|
|
|
|
|
|
@@ -26,24 +30,6 @@ interface UseSettingsFormOptions {
|
|
|
|
|
locale: Ref<string>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 前端 UI 使用的语言值(用于下拉选择)
|
|
|
|
|
const languageLocaleMap: Record<LanguageValue, 'ENGLISH' | 'CHINESE_SIMPLIFIED'> = {
|
|
|
|
|
english: 'ENGLISH',
|
|
|
|
|
chinese: 'CHINESE_SIMPLIFIED'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 后端 API 使用的语言值
|
|
|
|
|
const backendLanguageMap: Record<'ENGLISH' | 'CHINESE_SIMPLIFIED', 'en' | 'zh-CN'> = {
|
|
|
|
|
ENGLISH: 'en',
|
|
|
|
|
CHINESE_SIMPLIFIED: 'zh-CN'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 后端语言值转换为前端语言值
|
|
|
|
|
const backendToFrontendLanguage: Record<'en' | 'zh-CN', LanguageValue> = {
|
|
|
|
|
en: 'english',
|
|
|
|
|
'zh-CN': 'chinese'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
|
|
|
|
|
|
|
|
|
const isRoleValue = (value: string): value is RoleValue =>
|
|
|
|
|
@@ -75,15 +61,10 @@ const normalizeLanguage = (language: string | null | undefined): LanguageValue =
|
|
|
|
|
if (!language) {
|
|
|
|
|
return '' as LanguageValue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 后端返回 'en' 或 'zh-CN'
|
|
|
|
|
const trimmed = language.trim()
|
|
|
|
|
if (trimmed === 'en') {
|
|
|
|
|
return 'english'
|
|
|
|
|
} else if (trimmed === 'zh-CN') {
|
|
|
|
|
return 'chinese'
|
|
|
|
|
if (trimmed === 'ENGLISH' || trimmed === 'CHINESE_SIMPLIFIED') {
|
|
|
|
|
return trimmed as LanguageValue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return '' as LanguageValue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -182,9 +163,8 @@ export function useSettingsForm({ t, locale }: UseSettingsFormOptions) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const syncAppLanguage = (language: LanguageValue) => {
|
|
|
|
|
const nextLocale = languageLocaleMap[language]
|
|
|
|
|
locale.value = nextLocale
|
|
|
|
|
localStorage.setItem('language', nextLocale)
|
|
|
|
|
locale.value = language
|
|
|
|
|
localStorage.setItem('language', language)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const loadUserProfile = async () => {
|
|
|
|
|
@@ -334,12 +314,8 @@ export function useSettingsForm({ t, locale }: UseSettingsFormOptions) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 将前端语言值转换为后端格式
|
|
|
|
|
let backendLanguage = ''
|
|
|
|
|
if (draftData.value.language) {
|
|
|
|
|
const i18nLocale = languageLocaleMap[draftData.value.language as LanguageValue]
|
|
|
|
|
backendLanguage = backendLanguageMap[i18nLocale]
|
|
|
|
|
}
|
|
|
|
|
// 前端语言值直接作为后端格式
|
|
|
|
|
const backendLanguage = draftData.value.language || ''
|
|
|
|
|
|
|
|
|
|
const nextData: UserProfile = {
|
|
|
|
|
firstName: draftData.value.firstName.trim(),
|
|
|
|
|
@@ -370,10 +346,8 @@ export function useSettingsForm({ t, locale }: UseSettingsFormOptions) {
|
|
|
|
|
try {
|
|
|
|
|
await updateUserProfile(nextData)
|
|
|
|
|
|
|
|
|
|
// 将后端返回的语言值转换为前端格式
|
|
|
|
|
const frontendLanguage = backendLanguage
|
|
|
|
|
? backendToFrontendLanguage[backendLanguage as 'en' | 'zh-CN']
|
|
|
|
|
: ''
|
|
|
|
|
// 后端返回的语言值直接作为前端格式
|
|
|
|
|
const frontendLanguage = backendLanguage as LanguageValue
|
|
|
|
|
|
|
|
|
|
const settingsData: SettingsData = {
|
|
|
|
|
firstName: nextData.firstName,
|
|
|
|
|
@@ -388,7 +362,12 @@ export function useSettingsForm({ t, locale }: UseSettingsFormOptions) {
|
|
|
|
|
console.log(nextData)
|
|
|
|
|
|
|
|
|
|
if (frontendLanguage && frontendLanguage !== previousLanguage) {
|
|
|
|
|
syncAppLanguage(frontendLanguage as LanguageValue)
|
|
|
|
|
// syncAppLanguage(frontendLanguage as LanguageValue)
|
|
|
|
|
setUserLanguage(frontendLanguage).then((res) => {
|
|
|
|
|
// console.log(res)
|
|
|
|
|
userInfoStore.setToken(res)
|
|
|
|
|
location.reload()
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
draftData.value = cloneSettingsData(sourceData.value)
|
|
|
|
|
|