Przeglądaj źródła

登录 登出 修改密码

魏熙美 5 lat temu
rodzic
commit
298b87c68e

+ 1
- 0
vue-element-admin/src/router/index.js Wyświetl plik

@@ -38,6 +38,7 @@ export const constantRouterMap = [
38 38
   },
39 39
   {
40 40
     path: '/login',
41
+    name: 'login',
41 42
     component: () => import('@/views/login/index'),
42 43
     hidden: true
43 44
   },

+ 14
- 3
vue-element-admin/src/store/modules/user.js Wyświetl plik

@@ -1,4 +1,4 @@
1
-import { loginByUsername, logout, getUserInfo } from '@/api/login'
1
+import { loginByUsername, logout, getUserInfo, updatePass } from '@/api/login'
2 2
 import { getToken, setToken, removeToken } from '@/utils/auth'
3 3
 
4 4
 const user = {
@@ -52,7 +52,7 @@ const user = {
52 52
           const data = response.data
53 53
           commit('SET_TOKEN', data.token)
54 54
           setToken(response.data.token)
55
-          resolve()
55
+          resolve(data)
56 56
         }).catch(error => {
57 57
           reject(error)
58 58
         })
@@ -66,7 +66,7 @@ const user = {
66 66
           if (!response.data) { // 由于mockjs 不支持自定义状态码只能这样hack
67 67
             reject('error')
68 68
           }
69
-          const data = response.data
69
+          const data = response.data.data
70 70
 
71 71
           if (data.roles && data.roles.length > 0) { // 验证返回的roles是否是一个非空数组
72 72
             commit('SET_ROLES', data.roles)
@@ -136,6 +136,17 @@ const user = {
136 136
           resolve()
137 137
         })
138 138
       })
139
+    },
140
+
141
+    UpdatePass({ commit }, data) { // 修改密码
142
+      return new Promise((resolve, reject) => {
143
+        updatePass(data).then((res) => {
144
+          const resData = res.data
145
+          resolve(resData)
146
+        }).catch((err) => {
147
+          reject(err)
148
+        })
149
+      })
139 150
     }
140 151
   }
141 152
 }

+ 15
- 2
vue-element-admin/src/utils/request.js Wyświetl plik

@@ -9,6 +9,8 @@ const service = axios.create({
9 9
   timeout: 10000 // request timeout
10 10
 })
11 11
 
12
+service.defaults.withCredentials = true
13
+
12 14
 // request interceptor
13 15
 service.interceptors.request.use(
14 16
   config => {
@@ -28,7 +30,18 @@ service.interceptors.request.use(
28 30
 
29 31
 // response interceptor
30 32
 service.interceptors.response.use(
31
-  response => response,
33
+  response => {
34
+    // console.log('response: ', response)
35
+    const resData = response.data
36
+    if (resData.code !== '0') {
37
+      Message({
38
+        message: resData.message,
39
+        type: 'error',
40
+        duration: 5 * 1000
41
+      })
42
+    }
43
+    return response
44
+  },
32 45
   /**
33 46
    * 下面的注释为通过在response里,自定义code来标示请求状态
34 47
    * 当code返回如下情况则说明权限有问题,登出并返回到登录页
@@ -63,7 +76,7 @@ service.interceptors.response.use(
63 76
   //   }
64 77
   // },
65 78
   error => {
66
-    console.log('err' + error) // for debug
79
+    console.log('err :', error) // for debug
67 80
     Message({
68 81
       message: error.message,
69 82
       type: 'error',

+ 69
- 0
vue-element-admin/src/views/layout/components/Navbar.vue Wyświetl plik

@@ -19,9 +19,31 @@
19 19
           <el-dropdown-item divided>
20 20
             <span style="display:block;" @click="logout">{{ $t('navbar.logOut') }}</span>
21 21
           </el-dropdown-item>
22
+          <el-dropdown-item divided>
23
+            <span style="display:block;" @click="showPass">修改密码</span>
24
+          </el-dropdown-item>
22 25
         </el-dropdown-menu>
23 26
       </el-dropdown>
24 27
     </div>
28
+
29
+    <el-dialog
30
+      :visible.sync="dialogVisible"
31
+      :before-close="handleClose"
32
+      title="修改密码"
33
+      width="30%">
34
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
35
+        <el-form-item label="旧密码" prop="oldPass">
36
+          <el-input v-model="form.oldPass"/>
37
+        </el-form-item>
38
+        <el-form-item label="新密码" prop="newPass">
39
+          <el-input v-model="form.newPass"/>
40
+        </el-form-item>
41
+      </el-form>
42
+      <span slot="footer" class="dialog-footer">
43
+        <el-button @click="dialogVisible = false">取 消</el-button>
44
+        <el-button type="primary" @click="upPass('form')">确 定</el-button>
45
+      </span>
46
+    </el-dialog>
25 47
   </div>
26 48
 </template>
27 49
 
@@ -45,6 +67,24 @@ export default {
45 67
     LangSelect,
46 68
     ThemePicker
47 69
   },
70
+  data() {
71
+    return {
72
+      dialogVisible: false,
73
+      form: {
74
+        oldPass: '',
75
+        newPass: ''
76
+      },
77
+      rules: {
78
+        oldPass: [
79
+          { required: true, message: '请输入旧密码', trigger: 'blur' }
80
+        ],
81
+        newPass: [
82
+          { required: true, message: '请输入新密码', trigger: 'blur' },
83
+          { min: 6, message: '请输入最少6位', trigger: 'blur' }
84
+        ]
85
+      }
86
+    }
87
+  },
48 88
   computed: {
49 89
     ...mapGetters([
50 90
       'sidebar',
@@ -61,6 +101,35 @@ export default {
61 101
       this.$store.dispatch('LogOut').then(() => {
62 102
         location.reload()// In order to re-instantiate the vue-router object to avoid bugs
63 103
       })
104
+    },
105
+    handleClose(done) {
106
+      done()
107
+    },
108
+    showPass() {
109
+      this.form.oldPass = ''
110
+      this.form.newPass = ''
111
+      this.dialogVisible = true
112
+    },
113
+    upPass(formName) {
114
+      this.$refs[formName].validate((valid) => {
115
+        if (valid) {
116
+          this.$store.dispatch('UpdatePass', this.form).then((res) => {
117
+            const resCode = res.code
118
+            if (resCode === '0') {
119
+              this.$message.success(res.message || res.msg)
120
+              this.dialogVisible = false
121
+              return
122
+            }
123
+
124
+            this.$message.error(res.message || res.msg)
125
+          }).catch((err) => {
126
+            console.log('UpdatePass err: ', err)
127
+          })
128
+        } else {
129
+          console.log('error submit!!')
130
+          return false
131
+        }
132
+      })
64 133
     }
65 134
   }
66 135
 }