perf:个人中心交互优化

This commit is contained in:
Xwen
2023-12-24 16:16:56 +08:00
parent 69cfb63d03
commit bf5848b5f5
3 changed files with 172 additions and 130 deletions

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="app-container" style="width: 1400px;"> <div class="app-container" style="width: 1300px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="6" :xs="24"> <el-col :span="6" :xs="24">
<el-card class="box-card"> <el-card class="box-card">
@@ -27,11 +27,17 @@
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<el-icon><HelpFilled /></el-icon> 所属部门 <el-icon><HelpFilled /></el-icon> 所属部门
<div class="pull-right" v-if="state.dept">{{ state.dept.deptName }}</div> <div class="pull-right" v-if="state.dept">
{{ state.dept.deptName }}
</div>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<el-icon><Avatar /></el-icon> 所属角色 <el-icon><Avatar /></el-icon> 所属角色
<div class="pull-right"><span v-for="role in state.roles" :key="role.id">{{ role.roleName }} /</span></div> <div class="pull-right">
<span v-for="role in state.roles" :key="role.id"
>{{ role.roleName }} /</span
>
</div>
</li> </li>
<li class="list-group-item"> <li class="list-group-item">
<el-icon><Stopwatch /></el-icon> 创建日期 <el-icon><Stopwatch /></el-icon> 创建日期
@@ -75,11 +81,11 @@ const state = reactive({
dept: {}, dept: {},
roles: [], roles: [],
roleGroup: {}, roleGroup: {},
postGroup: {} postGroup: {},
}); });
function getUser() { function getUser() {
getUserProfile().then(response => { getUserProfile().then((response) => {
const res = response.data; const res = response.data;
state.user = res.user; state.user = res.user;
state.dept = res.dept; state.dept = res.dept;
@@ -87,11 +93,10 @@ function getUser() {
state.roleGroup = res.roleGroup; state.roleGroup = res.roleGroup;
state.postGroup = res.postGroup; state.postGroup = res.postGroup;
}); });
}; }
onMounted(() => { onMounted(() => {
getUser(); getUser();
}) });
</script> </script>
<style scoped> <style scoped>
.pull-right { .pull-right {

View File

@@ -1,13 +1,28 @@
<template> <template>
<el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px"> <el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px">
<el-form-item label="旧密码" prop="oldPassword"> <el-form-item label="旧密码" prop="oldPassword">
<el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password /> <el-input
v-model="user.oldPassword"
placeholder="请输入旧密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item label="新密码" prop="newPassword"> <el-form-item label="新密码" prop="newPassword">
<el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password /> <el-input
v-model="user.newPassword"
placeholder="请输入新密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item label="确认密码" prop="confirmPassword"> <el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/> <el-input
v-model="user.confirmPassword"
placeholder="请确认新密码"
type="password"
show-password
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submit">保存</el-button> <el-button type="primary" @click="submit">保存</el-button>
@@ -19,13 +34,15 @@
<script setup> <script setup>
import { updateUserPwd } from "@/apis/userApi"; import { updateUserPwd } from "@/apis/userApi";
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
const pwdRef = ref(null); const pwdRef = ref(null);
const user = reactive({ const user = reactive({
oldPassword: undefined, oldPassword: undefined,
newPassword: undefined, newPassword: undefined,
confirmPassword: undefined confirmPassword: undefined,
}); });
const equalToPassword = (rule, value, callback) => { const equalToPassword = (rule, value, callback) => {
@@ -37,30 +54,33 @@ const equalToPassword = (rule, value, callback) => {
}; };
const rules = ref({ const rules = ref({
oldPassword: [{ required: true, message: "旧密码不能为空", trigger: "blur" }], oldPassword: [{ required: true, message: "旧密码不能为空", trigger: "blur" }],
newPassword: [{ required: true, message: "新密码不能为空", trigger: "blur" }, { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }], newPassword: [
confirmPassword: [{ required: true, message: "确认密码不能为空", trigger: "blur" }, { required: true, validator: equalToPassword, trigger: "blur" }] { required: true, message: "密码不能为空", trigger: "blur" },
{ min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" },
],
confirmPassword: [
{ required: true, message: "确认密码不能为空", trigger: "blur" },
{ required: true, validator: equalToPassword, trigger: "blur" },
],
}); });
/** 提交按钮 */ /** 提交按钮 */
function submit() { function submit() {
pwdRef.value.validate(async valid => { pwdRef.value.validate(async (valid) => {
if (valid) { if (valid) {
const response=await updateUserPwd(user.oldPassword, user.newPassword) const response = await updateUserPwd(user.oldPassword, user.newPassword);
if(response.status==200) if (response.status == 200) {
{
ElMessage({ ElMessage({
type: "success", type: "success",
message: "更新密码成功", message: "更新密码成功",
}); });
} }
} }
}); });
}; }
/** 关闭按钮 */ /** 关闭按钮 */
function close() { function close() {
router.push("/index");
// proxy.$tab.closePage(); }
};
</script> </script>

View File

@@ -27,26 +27,42 @@
<script setup> <script setup>
import { updateUserProfile } from "@/apis/userApi"; import { updateUserProfile } from "@/apis/userApi";
import useUserStore from "@/stores/user" import useUserStore from "@/stores/user";
import { ref } from "vue"; import { ref } from "vue";
const userStore = useUserStore(); import { useRouter } from "vue-router";
const router = useRouter();
const props = defineProps({ const props = defineProps({
user: { user: {
type: Object type: Object,
} },
}); });
const userRef = ref(null); const userRef = ref(null);
const rules = ref({ const rules = ref({
nick: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }], nick: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }], email: [
phone: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }], { required: true, message: "邮箱地址不能为空", trigger: "blur" },
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"],
},
],
phone: [
{ required: true, message: "手机号码不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur",
},
],
}); });
/** 提交按钮 */ /** 提交按钮 */
function submit() { function submit() {
userRef.value.validate(async valid => { userRef.value.validate(async (valid) => {
if (valid) { if (valid) {
const response = await updateUserProfile(props.user); const response = await updateUserProfile(props.user);
if (response.status == 200) { if (response.status == 200) {
@@ -54,13 +70,14 @@ function submit() {
type: "success", type: "success",
message: "用户信息修改成功", message: "用户信息修改成功",
}); });
// 更新用户信息
await useUserStore().getInfo(); // 用户信息
} }
} }
}); });
}; }
/** 关闭按钮 */ /** 关闭按钮 */
function close() { function close() {
// proxy.$tab.closePage(); router.push("/index");
}; }
</script> </script>