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