| <template> | 
|   <div class="main-header"> | 
|     <div class="header"> | 
|       <div class="message"> | 
|         <h2> | 
|           <i class="el-icon-s-unfold" v-if="menuData.collapse" @click="switchCollapseMenu(null)"></i> | 
|           <i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i> | 
|           {{title}} | 
|         </h2> | 
|         <div class="user"> | 
|           <div class="user_help" @click="jumpWord"> | 
|             <img src="@/assets/images/ic_help@2x.png" alt="" /> | 
|             <span>帮助文档</span> | 
|           </div> | 
|           <div style="margin-right: 10px;">企业代码: {{ tempId }}</div> | 
|           <el-dropdown trigger="click" style="margin-right: 20px;" v-userState @command="select"> | 
|             <span class="el-dropdown-link"> | 
|             {{ tempC }}<i class="el-icon-arrow-down el-icon--right"></i> | 
|             </span> | 
|             <el-dropdown-menu slot="dropdown"> | 
|               <el-dropdown-item v-for="(item, index) in cList" :key="index" :command='item.id'>{{ item.name }}</el-dropdown-item> | 
|             </el-dropdown-menu> | 
|           </el-dropdown> | 
|           <el-dropdown trigger="click"> | 
|             <span class="el-dropdown-link" style="display: flex; align-items: center;"> | 
|               <img | 
|                 style="width: 30px; height: 30px; margin-right: 7px;" | 
|                 :src="userInfo.avatar == '' ||  userInfo.avatar == null ? manImg : (userInfo.avatar.indexOf('woman') != -1 ? womanImg : manImg)" | 
|                 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> | 
|       </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, getUserInfo } from '@/api/system/common' | 
| import { getDepartmentListByConditon, changeCom } from '@/api/ext/departmentExt' | 
| import tagsview from "./tagsview.vue" | 
| export default { | 
|   name: 'Header', | 
|   components: { GlobalWindow, tagsview }, | 
|   data () { | 
|     return { | 
|       tempC: '', | 
|       tempId: '', | 
|       cList: '', | 
|       visible: { | 
|         // 修改密码 | 
|         changePwd: false | 
|       }, | 
|       manImg: require('../../assets/images/man.png'), | 
|       womanImg: require('../../assets/images/woman.png'), | 
|       isWorking: { | 
|         // 修改密码 | 
|         changePwd: false, | 
|         // 切换公司 | 
|         changeCom: false | 
|       }, | 
|       username: 'bob', // 用户名 | 
|       // 修改密码弹框 | 
|       changePwdData: { | 
|         form: { | 
|           oldPwd: '', | 
|           newPwd: '', | 
|           confirmPwd: '' | 
|         }, | 
|         rules: { | 
|           oldPwd: [ | 
|             { required: true, message: '请输入原始密码' } | 
|           ], | 
|           newPwd: [ | 
|             { required: true, message: '请输入新密码' } | 
|           ], | 
|           confirmPwd: [ | 
|             { required: true, message: '请再次输入新密码' } | 
|           ] | 
|         } | 
|       } | 
|     } | 
|   }, | 
|   computed: { | 
|     ...mapState(['menuData', 'userInfo']), | 
|     title () { | 
|       return this.$route.meta.title | 
|     } | 
|   }, | 
|   filters: { | 
|     // 展示名称 | 
|     displayName (userInfo) { | 
|       if (userInfo == null) { | 
|         return '' | 
|       } | 
|       if (userInfo.companyUser && userInfo.companyUser.name != null && userInfo.companyUser.name.trim().length > 0) { | 
|         return userInfo.companyUser.name | 
|       } | 
|       return userInfo.username | 
|     } | 
|   }, | 
|   created () { | 
|     if (this.userInfo.curComDepartment) { | 
|       this.tempC = this.userInfo.curComDepartment.name | 
|       this.tempId = this.userInfo.curComDepartment.id | 
|     } | 
|     getDepartmentListByConditon({ | 
|       type: 0 | 
|     }) | 
|       .then(res => { | 
|         this.cList = res | 
|       }) | 
|       .catch(err => { | 
|         console.log(err) | 
|       }) | 
|   }, | 
|   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.visible.changePwd = false | 
|             setTimeout(() => { | 
|               this.$dialog.attentionConfirm('密码修改成功,请重新登录', null, '重新登录').then(() => { | 
|                 this.logout() | 
|               }) | 
|             }, 300) | 
|           }) | 
|           .catch(e => { | 
|             this.$tip.apiFailed(e) | 
|           }) | 
|           .finally(() => { | 
|             this.isWorking.changePwd = false | 
|           }) | 
|       }) | 
|     }, | 
|     /** | 
|      * 退出登录 | 
|      */ | 
|     logout () { | 
|       console.log(this.$store.state.companyId); | 
|       debugger | 
|       logout() | 
|         .then(() => { | 
|           let companyId = this.$store.state.userInfo.company.id | 
|           this.setUserInfo(null) | 
|           this.$cache.twoFA.removePassword() | 
|           this.$router.push({ name: 'login', params: { | 
|             companyId | 
|           }}) | 
|         }) | 
|         .catch(e => { | 
|           this.$tip.apiFailed(e) | 
|         }) | 
|     }, | 
|     jumpWord() { | 
|       window.open('https://kdocs.cn/l/cceUmaghVwH4') | 
|     }, | 
|     select (v) { | 
|       const loading = this.$loading({ | 
|         lock: true, | 
|         text: '公司及业务数据切换中~', | 
|         spinner: 'el-icon-loading', | 
|         background: 'rgba(0, 0, 0, 0.7)' | 
|       }) | 
|       changeCom(v) | 
|         .then(res => { | 
|           this.$tip.success('修改成功') | 
|           this.refreshUserinfo() | 
|         }) | 
|         .catch(err => { | 
|           this.$tip.error(err) | 
|         }) | 
|         .finally(() => { | 
|           loading.close() | 
|         }) | 
|     }, | 
|     refreshUserinfo () { | 
|       getUserInfo() | 
|         .then(userInfo => { | 
|           this.setUserInfo(userInfo) | 
|           this.tempC = this.userInfo.curComDepartment.name | 
|           window.location.reload() | 
|         }) | 
|         .catch(e => { | 
|           console.log(e) | 
|         }) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style scoped lang="scss"> | 
| @import "@/assets/style/variables.scss"; | 
| .header { | 
|   overflow: hidden; | 
|   padding: 0 25px; | 
|   background: #fff; | 
|   height: 100%; | 
|   .message { | 
|     display: flex; | 
|     justify-content: space-between; | 
|     height: 60px; | 
|     h2 { | 
|       width: 50%; | 
|       flex-shrink: 0; | 
|       line-height: $header-height; | 
|       font-size: 19px; | 
|       font-weight: 600; | 
|       color: #606263; | 
|       display: inline; | 
|       & > i { | 
|         font-size: 20px; | 
|         margin-right: 12px; | 
|       } | 
|     } | 
|     .user { | 
|       // width: 30%; | 
|       flex-shrink: 0; | 
|       // text-align: right; | 
|       display: flex; | 
|       align-items: center; | 
|       .user_help { | 
|         width: 111px; | 
|         height: 36px; | 
|         display: flex; | 
|         align-items: center; | 
|         justify-content: center; | 
|         background: #F7F7F7; | 
|         border-radius: 4px; | 
|         margin-right: 30px; | 
|         cursor: pointer; | 
|         img { | 
|           width: 16px; | 
|           height: 16px; | 
|           margin-right: 7px !important; | 
|         } | 
|         span { | 
|           font-size: 16px; | 
|           font-family: PingFangSC-Regular, PingFang SC; | 
|           font-weight: 400; | 
|           color: #666666; | 
|         } | 
|       } | 
|       .el-dropdown { | 
|         flex-shrink: 0; | 
|         top: 2px; | 
|         display: flex; | 
|         align-items: center; | 
|       } | 
|       // img { | 
|       //   flex-shrink: 0; | 
|       //   width: 32px; | 
|       //   position: relative; | 
|       //   top: 10px; | 
|       //   margin-right: 10px; | 
|       // } | 
|     } | 
|   } | 
|   .tags { | 
|     padding-bottom: 16px; | 
|   } | 
| } | 
| // 下拉菜单框 | 
| .el-dropdown-menu { | 
|   width: 140px; | 
|   .el-dropdown-menu__item:hover { | 
|     background: #E3EDFB; | 
|     color: $primary-color; | 
|   } | 
| } | 
| </style> |