重构配置文件视图以使用 Pinia 用户存储进行数据管理 - 在本地存储和配置文件表单之间同步用户信息
This commit is contained in:
parent
3ff03864d6
commit
61dd6f86a9
@ -172,7 +172,6 @@ const isActive = ref(true);
|
|||||||
// 性能监控
|
// 性能监控
|
||||||
const monitorPerformance = () => {
|
const monitorPerformance = () => {
|
||||||
const loadTime = Date.now() - componentLoadTime.value;
|
const loadTime = Date.now() - componentLoadTime.value;
|
||||||
console.log(`[Performance] AdminLayout loaded in ${loadTime}ms`);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 资源清理
|
// 资源清理
|
||||||
|
@ -59,6 +59,7 @@ const handleLogin = async (formEl) => {
|
|||||||
status: "成功",
|
status: "成功",
|
||||||
detail: "用户登录成功",
|
detail: "用户登录成功",
|
||||||
});
|
});
|
||||||
|
console.log(userStore.userInfo)
|
||||||
|
|
||||||
// 显示登录成功提示
|
// 显示登录成功提示
|
||||||
ElMessage.success({
|
ElMessage.success({
|
||||||
|
@ -1,19 +1,23 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { User, Lock, Message, Phone } from '@element-plus/icons-vue'
|
import { User, Lock, Message, Phone } from '@element-plus/icons-vue'
|
||||||
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
|
// 获取用户状态管理
|
||||||
|
const userStore = useUserStore()
|
||||||
|
|
||||||
// 用户信息
|
// 用户信息
|
||||||
const userInfo = reactive({
|
const userInfo = reactive({
|
||||||
username: 'admin',
|
username: userStore.userInfo?.username || '',
|
||||||
nickname: '管理员',
|
real_name: userStore.userInfo?.real_name || '',
|
||||||
email: 'admin@example.com',
|
email: userStore.userInfo?.email || '',
|
||||||
phone: '13800138000',
|
phone: userStore.userInfo?.phone || '',
|
||||||
avatar: '',
|
avatar: userStore.userInfo?.avatar || '',
|
||||||
role: '超级管理员',
|
role: userStore.userInfo?.role || '',
|
||||||
createTime: '2023-01-01',
|
createTime: userStore.userInfo?.create_time || '',
|
||||||
lastLoginTime: '2024-03-20 10:00:00',
|
lastLoginTime: userStore.userInfo?.last_login_time || '',
|
||||||
lastLoginIp: '192.168.1.100'
|
lastLoginIp: userStore.userInfo?.last_login_ip || ''
|
||||||
})
|
})
|
||||||
|
|
||||||
// 修改密码表单
|
// 修改密码表单
|
||||||
@ -50,14 +54,14 @@ const passwordRules = {
|
|||||||
|
|
||||||
// 修改个人信息表单
|
// 修改个人信息表单
|
||||||
const profileForm = reactive({
|
const profileForm = reactive({
|
||||||
nickname: userInfo.nickname,
|
real_name: userInfo.real_name,
|
||||||
email: userInfo.email,
|
email: userInfo.email,
|
||||||
phone: userInfo.phone
|
phone: userInfo.phone
|
||||||
})
|
})
|
||||||
|
|
||||||
// 个人信息表单规则
|
// 个人信息表单规则
|
||||||
const profileRules = {
|
const profileRules = {
|
||||||
nickname: [
|
real_name: [
|
||||||
{ required: true, message: '请输入昵称', trigger: 'blur' },
|
{ required: true, message: '请输入昵称', trigger: 'blur' },
|
||||||
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
|
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
@ -81,7 +85,7 @@ const handleChangePassword = async () => {
|
|||||||
|
|
||||||
await passwordFormRef.value.validate((valid) => {
|
await passwordFormRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
ElMessage.success('密码修改成功(这是模拟消息)')
|
ElMessage.success('密码修改成功')
|
||||||
// 重置表单
|
// 重置表单
|
||||||
passwordForm.oldPassword = ''
|
passwordForm.oldPassword = ''
|
||||||
passwordForm.newPassword = ''
|
passwordForm.newPassword = ''
|
||||||
@ -96,11 +100,20 @@ const handleUpdateProfile = async () => {
|
|||||||
|
|
||||||
await profileFormRef.value.validate((valid) => {
|
await profileFormRef.value.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
ElMessage.success('个人信息更新成功(这是模拟消息)')
|
ElMessage.success('个人信息更新成功')
|
||||||
// 更新用户信息
|
// 更新用户信息
|
||||||
userInfo.nickname = profileForm.nickname
|
userInfo.real_name = profileForm.real_name
|
||||||
userInfo.email = profileForm.email
|
userInfo.email = profileForm.email
|
||||||
userInfo.phone = profileForm.phone
|
userInfo.phone = profileForm.phone
|
||||||
|
|
||||||
|
// 更新 store 中的用户信息
|
||||||
|
const updatedUserInfo = {
|
||||||
|
...userStore.userInfo,
|
||||||
|
real_name: profileForm.real_name,
|
||||||
|
email: profileForm.email,
|
||||||
|
phone: profileForm.phone
|
||||||
|
}
|
||||||
|
localStorage.setItem('userInfo', JSON.stringify(updatedUserInfo))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -108,7 +121,13 @@ const handleUpdateProfile = async () => {
|
|||||||
// 处理头像上传
|
// 处理头像上传
|
||||||
const handleAvatarSuccess = (response) => {
|
const handleAvatarSuccess = (response) => {
|
||||||
userInfo.avatar = response.url
|
userInfo.avatar = response.url
|
||||||
ElMessage.success('头像上传成功(这是模拟消息)')
|
// 更新 store 中的头像
|
||||||
|
const updatedUserInfo = {
|
||||||
|
...userStore.userInfo,
|
||||||
|
avatar: response.url
|
||||||
|
}
|
||||||
|
localStorage.setItem('userInfo', JSON.stringify(updatedUserInfo))
|
||||||
|
ElMessage.success('头像上传成功')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 上传之前的处理
|
// 上传之前的处理
|
||||||
@ -124,6 +143,13 @@ const beforeAvatarUpload = (file) => {
|
|||||||
}
|
}
|
||||||
return isJPG && isLt2M
|
return isJPG && isLt2M
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在组件挂载时同步表单数据
|
||||||
|
onMounted(() => {
|
||||||
|
profileForm.real_name = userInfo.real_name
|
||||||
|
profileForm.email = userInfo.email
|
||||||
|
profileForm.phone = userInfo.phone
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -167,8 +193,8 @@ const beforeAvatarUpload = (file) => {
|
|||||||
<el-form-item label="用户名">
|
<el-form-item label="用户名">
|
||||||
<el-input v-model="userInfo.username" disabled />
|
<el-input v-model="userInfo.username" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="昵称" prop="nickname">
|
<el-form-item label="昵称" prop="real_name">
|
||||||
<el-input v-model="profileForm.nickname" />
|
<el-input v-model="profileForm.real_name" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="邮箱" prop="email">
|
<el-form-item label="邮箱" prop="email">
|
||||||
<el-input v-model="profileForm.email">
|
<el-input v-model="profileForm.email">
|
||||||
@ -185,7 +211,7 @@ const beforeAvatarUpload = (file) => {
|
|||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色">
|
<el-form-item label="角色">
|
||||||
<el-input v-model="userInfo.role" disabled />
|
<el-input v-model="userInfo.real_name" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleUpdateProfile">保存修改</el-button>
|
<el-button type="primary" @click="handleUpdateProfile">保存修改</el-button>
|
||||||
@ -251,7 +277,7 @@ const beforeAvatarUpload = (file) => {
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<!-- 登录信息 -->
|
<!-- 登录信息 -->
|
||||||
<div class="login-info">
|
<!-- <div class="login-info">
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="label">上次登录时间:</span>
|
<span class="label">上次登录时间:</span>
|
||||||
<span class="value">{{ userInfo.lastLoginTime }}</span>
|
<span class="value">{{ userInfo.lastLoginTime }}</span>
|
||||||
@ -260,7 +286,7 @@ const beforeAvatarUpload = (file) => {
|
|||||||
<span class="label">上次登录IP:</span>
|
<span class="label">上次登录IP:</span>
|
||||||
<span class="value">{{ userInfo.lastLoginIp }}</span>
|
<span class="value">{{ userInfo.lastLoginIp }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user