From 5186227a467bd34dc253e64b23bc96d3a07bb399 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 17 十一月 2021 17:39:53 +0800 Subject: [PATCH] 添加用户权限控制 --- src/layouts/components/VabAvatar/index.vue | 144 ++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 126 insertions(+), 18 deletions(-) diff --git a/src/layouts/components/VabAvatar/index.vue b/src/layouts/components/VabAvatar/index.vue index 6ee4913..2f5edc8 100644 --- a/src/layouts/components/VabAvatar/index.vue +++ b/src/layouts/components/VabAvatar/index.vue @@ -10,51 +10,159 @@ </span> <el-dropdown-menu slot="dropdown"> + <el-dropdown-item command="password" divided>淇敼瀵嗙爜</el-dropdown-item> <el-dropdown-item command="logout" divided>閫�鍑虹櫥褰�</el-dropdown-item> </el-dropdown-menu> + + <el-dialog + title="淇敼瀵嗙爜" + :visible.sync="dialogVisible" + width="25%" + :modal="false" + :close-on-click-modal="false" + destroy-on-close + > + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-form-item label="鍘熷瘑鐮�" prop="oldPassword"> + <el-input + v-model.trim="form.oldPassword" + autocomplete="off" + show-password + ></el-input> + </el-form-item> + <el-form-item label="鏂板瘑鐮�" prop="newPassword"> + <el-input + v-model.trim="form.newPassword" + autocomplete="off" + show-password + ></el-input> + </el-form-item> + <el-form-item label="纭瀵嗙爜" prop="confirmPassword"> + <el-input + v-model.trim="form.confirmPassword" + autocomplete="off" + show-password + ></el-input> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="resetPassword">纭� 瀹�</el-button> + </span> + </el-dialog> </el-dropdown> </template> <script> -import { mapGetters } from 'vuex' -import { recordRoute } from '@/config' +import { mapGetters } from "vuex"; +import { recordRoute } from "@/config"; +import { updatePassword } from "@/api/user"; export default { - name: 'VabAvatar', + name: "VabAvatar", + data() { + var validatePass = (rule, value, callback) => { + if (value === "") { + callback(new Error("璇峰啀娆¤緭鍏ュ瘑鐮�")); + } else if (value.length < 6) { + callback(new Error("璇疯緭鍏�6浣嶄互涓婂瘑鐮�")); + } else { + callback(); + } + }; + + var validatePass2 = (rule, value, callback) => { + if (value === "") { + callback(new Error("璇峰啀娆¤緭鍏ュ瘑鐮�")); + } else if (value !== this.form.newPassword) { + callback(new Error("涓ゆ杈撳叆瀵嗙爜涓嶄竴鑷�!")); + } else { + callback(); + } + }; + return { + form: {}, + rules: { + oldPassword: [ + { + required: true, + trigger: "blur", + message: "鍘熷瘑鐮佷笉鑳戒负绌�", + }, + ], + newPassword: [ + { + validator: validatePass, + required: true, + trigger: "blur", + }, + ], + confirmPassword: [ + { + validator: validatePass2, + required: true, + trigger: "blur", + }, + ], + }, + dialogVisible: false, + }; + }, computed: { ...mapGetters({ - avatar: 'user/avatar', - username: 'user/username', + avatar: "user/avatar", + username: "user/username", + userId: "user/userId", }), }, methods: { handleCommand(command) { switch (command) { - case 'logout': - this.logout() - break + case "logout": + this.logout(); + break; + case "password": + this.dialogVisible = true; + this.form = {}; + break; } - }, - personalCenter() { - this.$router.push('/personalCenter/personalCenter') }, logout() { this.$baseConfirm( - '鎮ㄧ‘瀹氳閫�鍑�' + this.$baseTitle + '鍚�?', + "鎮ㄧ‘瀹氳閫�鍑�" + this.$baseTitle + "鍚�?", null, async () => { - await this.$store.dispatch('user/logout') + await this.$store.dispatch("user/logout"); if (recordRoute) { - const fullPath = this.$route.fullPath - this.$router.push(`/login?redirect=${fullPath}`) + const fullPath = this.$route.fullPath; + this.$router.push(`/login?redirect=${fullPath}`); } else { - this.$router.push('/login') + this.$router.push("/login"); } } - ) + ); + }, + resetPassword() { + this.$refs["form"].validate(async (valid) => { + if (valid) { + let rsp = await updatePassword(this.userId, { + oldPassword: this.form.oldPassword, + newPassword: this.form.newPassword, + }); + if (rsp && rsp.success) { + this.$baseMessage(rsp.msg, "success"); + this.$refs["form"].resetFields(); + this.dialogVisible = false; + } + } + }); + }, + handleClose() { + console.log("close"); + this.$refs["form"].resetFields(); }, }, -} +}; </script> <style lang="scss" scoped> .avatar-dropdown { -- Gitblit v1.8.0