|  |  | 
 |  |  |         <i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i> | 
 |  |  |         {{title}} | 
 |  |  |       </h2> | 
 |  |  |       <div class="user"> | 
 |  |  |         <el-dropdown trigger="click"> | 
 |  |  |           <span class="el-dropdown-link"> | 
 |  |  |             <img v-if="userInfo != null" :src="userInfo.avatar == null ? '@/assets/images/avatar/man.png' : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> | 
 |  |  |           </span> | 
 |  |  |           <el-dropdown-menu slot="dropdown"> | 
 |  |  |             <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item> | 
 |  |  |             <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item> | 
 |  |  |           </el-dropdown-menu> | 
 |  |  |         </el-dropdown> | 
 |  |  |       </div> | 
 |  |  |       <tagsview class="tags"></tagsview> | 
 |  |  |     </div> | 
 |  |  |     <!-- 修改密码 --> | 
 |  |  |     <GlobalWindow | 
 |  |  |       title="修改密码" | 
 |  |  |       :visible.sync="visible.changePwd" | 
 |  |  |       @confirm="confirmChangePwd" | 
 |  |  |       @close="visible.changePwd = false" | 
 |  |  |     > | 
 |  |  |       <el-form :model="changePwdData.form" ref="changePwdDataForm" :rules="changePwdData.rules"> | 
 |  |  |         <el-form-item label="原始密码" prop="oldPwd" required> | 
 |  |  |           <el-input v-model="changePwdData.form.oldPwd" type="password" placeholder="请输入原始密码" maxlength="30" show-password></el-input> | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="新密码" prop="newPwd" required> | 
 |  |  |           <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="请输入新密码" maxlength="30" show-password></el-input> | 
 |  |  |         </el-form-item> | 
 |  |  |         <el-form-item label="确认新密码" prop="confirmPwd" required> | 
 |  |  |           <el-input v-model="changePwdData.form.confirmPwd" type="password" placeholder="请再次输入新密码" maxlength="30" show-password></el-input> | 
 |  |  |         </el-form-item> | 
 |  |  |       </el-form> | 
 |  |  |     </GlobalWindow> | 
 |  |  |   </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import { mapState, mapMutations } from 'vuex' | 
 |  |  | import GlobalWindow from './GlobalWindow' | 
 |  |  | import { logout, updatePwd } from '@/api/system/common' | 
 |  |  | import tagsview from "./tagsview.vue" | 
 |  |  | export default { | 
 |  |  |   name: 'Header', | 
 |  |  |   components: { GlobalWindow }, | 
 |  |  |   data () { | 
 |  |  |     return { | 
 |  |  |       visible: { | 
 |  |  |         // 修改密码 | 
 |  |  |         changePwd: false | 
 |  |  |       }, | 
 |  |  |       isWorking: { | 
 |  |  |         // 修改密码 | 
 |  |  |         changePwd: false | 
 |  |  |       }, | 
 |  |  |       username: 'bob', // 用户名 | 
 |  |  |       // 修改密码弹框 | 
 |  |  |       changePwdData: { | 
 |  |  |         form: { | 
 |  |  |           oldPwd: '', | 
 |  |  |           newPwd: '', | 
 |  |  |           confirmPwd: '' | 
 |  |  |         }, | 
 |  |  |         rules: { | 
 |  |  |           oldPwd: [ | 
 |  |  |             { required: true, message: '请输入原始密码' } | 
 |  |  |           ], | 
 |  |  |           newPwd: [ | 
 |  |  |             { required: true, message: '请输入新密码' } | 
 |  |  |           ], | 
 |  |  |           confirmPwd: [ | 
 |  |  |             { required: true, message: '请再次输入新密码' } | 
 |  |  |           ] | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   components: { tagsview }, | 
 |  |  |   computed: { | 
 |  |  |     ...mapState(['menuData', 'userInfo']), | 
 |  |  |     ...mapState(['menuData']), | 
 |  |  |     title () { | 
 |  |  |       return this.$route.meta.title | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   filters: { | 
 |  |  |     // 展示名称 | 
 |  |  |     displayName (userInfo) { | 
 |  |  |       if (userInfo == null) { | 
 |  |  |         return '' | 
 |  |  |       } | 
 |  |  |       if (userInfo.realname != null && userInfo.realname.trim().length > 0) { | 
 |  |  |         return userInfo.realname | 
 |  |  |       } | 
 |  |  |       return userInfo.username | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     ...mapMutations(['setUserInfo', 'switchCollapseMenu']), | 
 |  |  |     // 修改密码 | 
 |  |  |     changePwd () { | 
 |  |  |       this.visible.changePwd = true | 
 |  |  |       this.$nextTick(() => { | 
 |  |  |         this.$refs.changePwdDataForm.resetFields() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     // 确定修改密码 | 
 |  |  |     confirmChangePwd () { | 
 |  |  |       if (this.isWorking.changePwd) { | 
 |  |  |         return | 
 |  |  |       } | 
 |  |  |       this.$refs.changePwdDataForm.validate((valid) => { | 
 |  |  |         if (!valid) { | 
 |  |  |           return | 
 |  |  |         } | 
 |  |  |         // 验证两次密码输入是否一致 | 
 |  |  |         if (this.changePwdData.form.newPwd !== this.changePwdData.form.confirmPwd) { | 
 |  |  |           this.$tip.warning('两次密码输入不一致') | 
 |  |  |           return | 
 |  |  |         } | 
 |  |  |         // 执行修改 | 
 |  |  |         this.isWorking.changePwd = true | 
 |  |  |         updatePwd({ | 
 |  |  |           oldPwd: this.changePwdData.form.oldPwd, | 
 |  |  |           newPwd: this.changePwdData.form.newPwd | 
 |  |  |         }) | 
 |  |  |           .then(() => { | 
 |  |  |             this.$tip.apiSuccess('修改成功') | 
 |  |  |             this.visible.changePwd = false | 
 |  |  |           }) | 
 |  |  |           .catch(e => { | 
 |  |  |             this.$tip.apiFailed(e) | 
 |  |  |           }) | 
 |  |  |           .finally(() => { | 
 |  |  |             this.isWorking.changePwd = false | 
 |  |  |           }) | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     // 退出登录 | 
 |  |  |     logout () { | 
 |  |  |       logout() | 
 |  |  |         .then(() => { | 
 |  |  |           this.setUserInfo(null) | 
 |  |  |           this.$router.push({ name: 'login' }) | 
 |  |  |         }) | 
 |  |  |         .catch(e => { | 
 |  |  |           this.$tip.apiFailed(e) | 
 |  |  |         }) | 
 |  |  |     } | 
 |  |  |     ...mapMutations(['switchCollapseMenu']), | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  | 
 |  |  |   background: #fff; | 
 |  |  |   height: 100%; | 
 |  |  |   display: flex; | 
 |  |  |   overflow: hidden; | 
 |  |  |   h2 { | 
 |  |  |     width: 50%; | 
 |  |  |     flex-shrink: 0; | 
 |  |  |     line-height: $header-height; | 
 |  |  |     line-height: 48px; | 
 |  |  |     width: 240px; | 
 |  |  |     font-size: 19px; | 
 |  |  |     font-weight: 600; | 
 |  |  |     color: #606263; | 
 |  |  |     font-weight: normal; | 
 |  |  |     display: inline; | 
 |  |  |     & > i { | 
 |  |  |       font-size: 20px; | 
 |  |  |       margin-right: 12px; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |   .user { | 
 |  |  |     width: 50%; | 
 |  |  |     flex-shrink: 0; | 
 |  |  |     text-align: right; | 
 |  |  |     .el-dropdown { | 
 |  |  |       top: 2px; | 
 |  |  |     } | 
 |  |  |     img { | 
 |  |  |       width: 32px; | 
 |  |  |       position: relative; | 
 |  |  |       top: 10px; | 
 |  |  |       margin-right: 10px; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | // 下拉菜单框 | 
 |  |  | .el-dropdown-menu { | 
 |  |  |   width: 140px; | 
 |  |  |   .el-dropdown-menu__item:hover { | 
 |  |  |     background: #E3EDFB; | 
 |  |  |     color: $primary-color; | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | // .tags { | 
 |  |  | //     padding-bottom: 16px; | 
 |  |  | //   } | 
 |  |  |  | 
 |  |  | </style> |