diff --git a/admin/src/layout/components/Navbar.vue b/admin/src/layout/components/Navbar.vue
index dfafe84e..562eb042 100644
--- a/admin/src/layout/components/Navbar.vue
+++ b/admin/src/layout/components/Navbar.vue
@@ -97,8 +97,14 @@
       </el-upload>
     </el-dialog>
 
-    <el-dialog title="修改密码" :visible.sync="dialogPWD">
-      <el-form :rules="rules" :model="form">
+    <el-dialog
+      title="修改密码"
+      :show-close="isPassword"
+      :close-on-press-escape="isPassword"
+      :close-on-click-modal="isPassword"
+      :visible.sync="dialogPWD"
+    >
+      <el-form ref="formName" :rules="rules" :model="form">
         <el-form-item label="旧密码" prop="oldpwd">
           <el-input v-model="form.oldpwd" autocomplete="off" />
         </el-form-item>
@@ -107,7 +113,9 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogPWD = false">取 消</el-button>
+        <el-button v-if="isPassword" @click="dialogPWD = false"
+          >取 消</el-button
+        >
         <el-button type="primary" @click="pwd">确 定</el-button>
       </div>
     </el-dialog>
@@ -201,6 +209,7 @@ import sidebar from "@/layout/components/Sidebar/index.vue";
 import avatar from "element-ui/packages/avatar";
 import { getQaCityList, getQaList } from "@/api/qa";
 import clickoutside from "element-ui/src/utils/clickoutside";
+import { Local } from "@/utils/storage";
 export default {
   directives: { clickoutside },
   components: {
@@ -228,6 +237,14 @@ export default {
   },
   // eslint-disable-next-line vue/order-in-Wangeditor
   data() {
+    var validatePassword = (rule, password, callback) => {
+      const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/;
+      if (!passwordRegex.test(password)) {
+        callback(new Error("新密码要求包含字母和数字并且长度在8到16位"));
+      } else {
+        callback();
+      }
+    };
     return {
       workstatus: false,
       drawer: false,
@@ -238,6 +255,7 @@ export default {
       imageUrl: false,
       QaShow: true,
       os: [],
+      isPassword: true,
       getQaCityList: [],
       getQaLists: [],
       times: [],
@@ -260,13 +278,13 @@ export default {
           },
         ],
         pwd: [
-          { required: true, message: "请输入密码", trigger: "blur" },
-          {
-            min: 6,
-            max: 20,
-            message: "长度在 6 到 20 个字符",
-            trigger: "blur",
-          },
+          { required: true, validator: validatePassword, trigger: "blur" },
+          // {
+          //   min: 6,
+          //   max: 20,
+          //   message: "长度在 6 到 20 个字符",
+          //   trigger: "blur",
+          // },
         ],
       },
     };
@@ -277,6 +295,12 @@ export default {
       this.getQaCityList = res.data;
     });
   },
+  mounted() {
+    if (Local.get("userInfo").change_passwd) {
+      this.dialogPWD = true;
+      this.isPassword = false;
+    }
+  },
   methods: {
     color,
     toggleSideBar() {
@@ -308,15 +332,23 @@ export default {
       this.imageUrl = URL.createObjectURL(file.raw);
     },
     pwd() {
-      this.$axios
-        .post("/admin/admin/pwd", this.form)
-        .then((res) => {
-          this.dialogPWD = false;
-          this.form = {};
-        })
-        .catch((err) => {
-          console.log(err);
-        });
+      this.$refs["formName"].validate((valid) => {
+        if (valid) {
+          this.$axios
+            .post("/admin/admin/pwd", this.form)
+            .then((res) => {
+              this.dialogPWD = false;
+              this.isPassword = true;
+              this.form = {};
+              Local.remove("userInfo");
+            })
+            .catch((err) => {
+              console.log(err);
+            });
+        } else {
+          return false;
+        }
+      });
     },
     saveWork() {
       this.$axios
diff --git a/admin/src/store/modules/user.js b/admin/src/store/modules/user.js
index 8f304fd9..d052cf7b 100644
--- a/admin/src/store/modules/user.js
+++ b/admin/src/store/modules/user.js
@@ -1,7 +1,7 @@
 import { login, logout, getInfo } from '@/api/user'
 import { getToken, setToken, removeToken } from '@/utils/auth'
 import router, { resetRouter } from '@/router'
-
+import { Local } from '@/utils/storage'
 const state = {
   token: getToken(),
   name: '',
@@ -45,6 +45,7 @@ const actions = {
         const { data } = response
         commit('SET_TOKEN', data.token)
         setToken(data.token)
+        Local.set('userInfo', data)
         resolve()
       }).catch(error => {
         reject(error)