提交 f7525e71 authored 作者: 龙菲's avatar 龙菲

增加个人资料修改和密码修改

上级 a65f970c
...@@ -88,6 +88,26 @@ export function upadateUser(data) { ...@@ -88,6 +88,26 @@ export function upadateUser(data) {
}) })
} }
// 修改用户信息
export function editUserInfo(data) {
return request({
url: '/sys/user/info',
method: 'put',
data
})
}
// 修改密码
export function editUserPwd(data) {
return request({
url: '/sys/user/pwd',
method: 'put',
data
})
}
// 删除用户 // 删除用户
export function deleteUser(data) { export function deleteUser(data) {
return request({ return request({
......
...@@ -13,18 +13,97 @@ ...@@ -13,18 +13,97 @@
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img v-if="avatar" :src="avatar" class="user-avatar" /> <img v-if="avatar" :src="avatar" class="user-avatar" />
<img v-else src="@/assets/imgs/avatar.png" class="user-avatar" /> <img v-else src="@/assets/imgs/avatar.png" class="user-avatar" />
<!-- <span
>欢迎你
<span v-if="userInfo.nickName || userInfo.username">{{
"," + userInfo.nickName || userInfo.username
}}</span></span
> -->
<i class="el-icon-caret-bottom" /> <i class="el-icon-caret-bottom" />
</div> </div>
<el-dropdown-menu slot="dropdown" class="user-dropdown"> <el-dropdown-menu slot="dropdown" class="user-dropdown">
<router-link to="/"> <router-link to="/">
<el-dropdown-item>主页</el-dropdown-item> <el-dropdown-item>主页</el-dropdown-item>
</router-link> </router-link>
<el-dropdown-item divided @click.native="handleShowUserInfo">
<span style="display: block">个人资料</span>
</el-dropdown-item>
<el-dropdown-item divided @click.native="handleShowPwd">
<span style="display: block">修改密码</span>
</el-dropdown-item>
<el-dropdown-item divided @click.native="logout"> <el-dropdown-item divided @click.native="logout">
<span style="display: block">退出</span> <span style="display: block">退出</span>
</el-dropdown-item> </el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
<el-drawer
:title="isUserInfo ? '个人资料' : '修改密码'"
:visible.sync="showDrawer"
direction="rtl"
:before-close="handleClose"
append-to-body
v-loading="loading"
>
<!-- <span>{{ isUserInfo ? "个人资料" : "修改密码" }}</span> -->
<el-form
ref="userInfoForm"
v-if="isUserInfo"
:label-width="labelWidth"
:rules="userInfoRules"
:model="userInfoForm"
>
<el-form-item label="用户名" prop="username">
<span v-if="!isEditingUserInfo">{{ userInfo.username }}</span>
<el-input v-else v-model="userInfoForm.username"></el-input>
</el-form-item>
<el-form-item label="昵称" prop="nickName">
<span v-if="!isEditingUserInfo">{{ userInfo.nickName }}</span>
<el-input v-else v-model="userInfoForm.nickName"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="phone">
<span v-if="!isEditingUserInfo">{{ userInfo.phone }}</span>
<el-input v-else v-model="userInfoForm.phone"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click.native="handleSubmitUserInfo">{{
isEditingUserInfo ? "保存" : "修改个人信息"
}}</el-button>
<el-button
type="primary"
@click.native="handleCancelChangeUserInfo"
v-if="isEditingUserInfo"
>取消</el-button
>
</el-form-item>
</el-form>
<el-form
ref="pwdForm"
:model="pwdForm"
:label-width="labelWidth"
:rules="pwdRules"
v-else
>
<el-form-item label="旧密码" prop="oldPwd">
<el-input v-model="pwdForm.oldPwd" type="password"></el-input>
</el-form-item>
<el-form-item label="新密码" prop="newPwd">
<el-input v-model="pwdForm.newPwd" type="password"></el-input>
</el-form-item>
<el-form-item label="确认密码" prop="checkPass">
<el-input v-model="pwdForm.checkPass" type="password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click.native="handleSubmitPwd"
>保存</el-button
>
<el-button type="primary" @click.native="handleCancelChangePwd"
>取消</el-button
>
</el-form-item>
</el-form>
</el-drawer>
</div> </div>
</template> </template>
...@@ -32,14 +111,91 @@ ...@@ -32,14 +111,91 @@
import { mapGetters } from "vuex"; import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb"; import Breadcrumb from "@/components/Breadcrumb";
import Hamburger from "@/components/Hamburger"; import Hamburger from "@/components/Hamburger";
import { editUserInfo, editUserPwd } from "@/api/user";
import { setUserInfo } from "@/utils/auth";
export default { export default {
components: { components: {
Breadcrumb, Breadcrumb,
Hamburger, Hamburger,
}, },
computed: { computed: {
...mapGetters(["sidebar", "avatar"]), ...mapGetters(["sidebar", "avatar", "userInfo"]),
},
data() {
var validatePass = (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入新密码"));
} else {
var pattern =
/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\\W_!@#$%^&*`~()-+=]+$)(?![0-9\\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\\W_!@#$%^&*`~()-+=]{8,30}$/;
if (!pattern.test(value)) {
callback(
new Error(
"密码长度至少8位,至少含数字,大写字母,小写字母,特殊符其中三种"
)
);
}
if (this.pwdForm.checkPass !== "") {
this.$refs.pwdForm.validateField("checkPass");
}
callback();
}
};
var validatePass2 = (rule, value, callback) => {
if (value === "") {
callback(new Error("请再次输入密码"));
} else if (value !== this.pwdForm.newPwd) {
callback(new Error("两次输入密码不一致!"));
} else {
callback();
}
};
return {
showDrawer: false,
isUserInfo: true,
isEditingUserInfo: false,
userInfoForm: {},
loading: false,
labelWidth: "100px",
userInfoRules: {
username: [
{
required: true,
message: "请填写用户名",
trigger: "blur",
},
],
nickName: [
{
required: true,
message: "请填写昵称",
trigger: "blur",
},
],
phone: [
{
required: true,
message: "请填写手机号",
trigger: "blur",
},
],
},
pwdForm: {
oldPwd: "",
newPwd: "",
checkPass: "",
},
pwdRules: {
oldPwd: [
{ trigger: "blur", required: true, message: "请输入当前密码" },
],
newPwd: [{ validator: validatePass, trigger: "blur", required: true }],
checkPass: [
{ validator: validatePass2, trigger: "blur", required: true },
],
},
};
}, },
methods: { methods: {
toggleSideBar() { toggleSideBar() {
...@@ -49,6 +205,85 @@ export default { ...@@ -49,6 +205,85 @@ export default {
let res = await this.$store.dispatch("user/logout"); let res = await this.$store.dispatch("user/logout");
this.$router.push(`/login?redirect=${this.$route.fullPath}`); this.$router.push(`/login?redirect=${this.$route.fullPath}`);
}, },
handleShowUserInfo() {
this.showDrawer = true;
this.isUserInfo = true;
},
handleShowPwd() {
this.showDrawer = true;
this.isUserInfo = false;
},
handleSubmitUserInfo() {
if (this.isEditingUserInfo) {
this.$refs.userInfoForm.validate(async (valid) => {
if (valid) {
this.loading = true;
let res = await editUserInfo(this.userInfoForm);
if (res.code == "0") {
this.$message.success("修改成功!");
this.$store.commit("user/SET_USERINFO", this.userInfoForm);
setUserInfo(this.userInfoForm);
}
this.loading = false;
this.isEditingUserInfo = false;
}
});
} else {
this.isEditingUserInfo = true;
this.userInfoForm = JSON.parse(JSON.stringify(this.userInfo));
}
},
handleSubmitPwd() {
this.$refs.pwdForm.validate(async (valid) => {
if (valid) {
const { newPwd, oldPwd } = this.pwdForm;
const params = {
newPwd,
oldPwd,
};
let res = await editUserPwd(params);
if (res.code == "0") {
this.$message.success("修改成功,请重新登录!");
this.logout();
}
}
});
},
handleCancelChangeUserInfo() {
this.isEditingUserInfo = false;
this.$refs.userInfoForm.resetFields();
},
handleCancelChangePwd() {
this.showDrawer = false;
this.reset();
},
reset() {
this.showDrawer = false;
this.isUserInfo = true;
this.isEditingUserInfo = false;
if (this.$refs.userInfoForm) {
this.$refs.userInfoForm.resetFields();
}
if (this.$refs.pwdForm) {
this.$refs.pwdForm.resetFields();
}
if (this.loading) {
this.loading = false;
}
},
handleClose(done) {
done();
this.reset();
},
}, },
}; };
</script> </script>
...@@ -130,4 +365,7 @@ export default { ...@@ -130,4 +365,7 @@ export default {
} }
} }
} }
::v-deep .el-drawer__body {
padding: 10px 60px 0 20px;
}
</style> </style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论