29 lines
1.0 KiB
JavaScript
29 lines
1.0 KiB
JavaScript
import { ref } from 'vue'
|
|
import { ElMessage } from 'element-plus'
|
|
import { http } from '@/utils/axios'
|
|
import { useGlobalStatusStore } from '@/stores/useGlobalStatusStore'
|
|
import { roleMeta } from '@/utils/userRoles.mjs'
|
|
|
|
export function useProfile() {
|
|
const store = useGlobalStatusStore()
|
|
const name = ref(store.userInfos.name || '')
|
|
const saving = ref(false)
|
|
async function save() {
|
|
if (saving.value) return
|
|
if (!name.value.trim()) return ElMessage.error('请输入显示名称')
|
|
saving.value = true
|
|
try {
|
|
const result = await http.post('/api/v1/user/profile', { name: name.value.trim() })
|
|
if (result?.errorNo !== 0) throw new Error(result?.errorMsg || '个人资料保存失败')
|
|
store.userInfos.name = result.data.name
|
|
name.value = result.data.name
|
|
ElMessage.success('个人资料已保存')
|
|
} catch (error) {
|
|
ElMessage.error(error.message || '个人资料保存失败')
|
|
} finally {
|
|
saving.value = false
|
|
}
|
|
}
|
|
return { store, name, saving, save, roleMeta }
|
|
}
|