<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>
|