<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="help" @click="jumpWord"> 
 | 
            <div class="user_help"> 
 | 
              <img src="@/assets/images/ic_help@2x.png" alt="" /> 
 | 
              <span>帮助文档</span> 
 | 
            </div> 
 | 
            <span class="ml5 mr5">|</span> 
 | 
            <span>企业代码: {{ tempId }}</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"> 
 | 
            <span class="c2 f16">{{ tempC }}</span><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.company.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; 
 | 
      vertical-align: middle; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      .help { 
 | 
        display: flex; 
 | 
        height: 29px; 
 | 
        line-height: 38px; 
 | 
        align-items: center; 
 | 
        justify-content: center; 
 | 
        vertical-align: middle; 
 | 
        margin-right: 30px; 
 | 
        span { 
 | 
          font-size: 12px; 
 | 
          font-family: PingFangSC-Regular, PingFang SC; 
 | 
          font-weight: 400; 
 | 
          vertical-align: middle; 
 | 
          color: #666666; 
 | 
        } 
 | 
        .user_help { 
 | 
          // width: 111px; 
 | 
           
 | 
          // background: #F7F7F7; 
 | 
          
 | 
           
 | 
          cursor: pointer; 
 | 
          img { 
 | 
            width: 16px; 
 | 
            height: 16px; 
 | 
            margin-right: 7px !important; 
 | 
            vertical-align: middle; 
 | 
          } 
 | 
           
 | 
        } 
 | 
      } 
 | 
       
 | 
      .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> 
 |