重构配置文件视图以使用 Pinia 用户存储进行数据管理 - 在本地存储和配置文件表单之间同步用户信息

This commit is contained in:
wzclm 2025-03-09 16:18:03 +08:00
parent 3ff03864d6
commit 61dd6f86a9
3 changed files with 48 additions and 22 deletions

View File

@ -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`);
}; };
// //

View File

@ -59,6 +59,7 @@ const handleLogin = async (formEl) => {
status: "成功", status: "成功",
detail: "用户登录成功", detail: "用户登录成功",
}); });
console.log(userStore.userInfo)
// //
ElMessage.success({ ElMessage.success({

View File

@ -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>