|
@ -6,17 +6,14 @@
|
|
<a-icon type="question-circle-o"></a-icon>
|
|
<a-icon type="question-circle-o"></a-icon>
|
|
</span>
|
|
</span>
|
|
</a>
|
|
</a>
|
|
|
|
|
|
<notice-icon class="action"/>
|
|
<notice-icon class="action"/>
|
|
|
|
|
|
|
|
|
|
<a-dropdown>
|
|
<a-dropdown>
|
|
<span class="action ant-dropdown-link user-dropdown-menu">
|
|
<span class="action ant-dropdown-link user-dropdown-menu">
|
|
<a-avatar class="avatar" size="small" :src="avatar"/>
|
|
<a-avatar class="avatar" size="small" :src="avatar"/>
|
|
<span>{{ nickname }}</span>
|
|
<span>{{ nickname }}</span>
|
|
</span>
|
|
</span>
|
|
<a-menu slot="overlay" class="user-dropdown-menu-wrapper">
|
|
<a-menu slot="overlay" class="user-dropdown-menu-wrapper">
|
|
<a-menu-item key="4" v-if="hasPerm('sysMenu:change')">
|
|
|
|
|
|
<a-menu-item key="4" v-if="mode === 'sidemenu'">
|
|
<a @click="appToggled()" >
|
|
<a @click="appToggled()" >
|
|
<a-icon type="swap"/>
|
|
<a-icon type="swap"/>
|
|
<span>切换应用</span>
|
|
<span>切换应用</span>
|
|
@ -51,43 +48,31 @@
|
|
</a-menu>
|
|
</a-menu>
|
|
</a-dropdown>
|
|
</a-dropdown>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<a-modal
|
|
<a-modal
|
|
title="切换应用"
|
|
title="切换应用"
|
|
:visible="visible"
|
|
:visible="visible"
|
|
|
|
:footer="null"
|
|
:confirm-loading="confirmLoading"
|
|
:confirm-loading="confirmLoading"
|
|
@ok="handleOkApp"
|
|
|
|
@cancel="handleCancel"
|
|
@cancel="handleCancel"
|
|
>
|
|
>
|
|
|
|
|
|
<a-form class="permission-form" :form="form1" >
|
|
|
|
<a-form-item>
|
|
|
|
<a-form-item
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
label="目前应用"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-button type="primary" size="small">{{this.appName}}</a-button>
|
|
|
|
</a-form-item>
|
|
|
|
|
|
|
|
<a-form-item
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
label="切换应用"
|
|
|
|
has-feedback
|
|
|
|
|
|
<a-form :form="form1" >
|
|
|
|
<a-form-item
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
label="选择应用"
|
|
|
|
>
|
|
|
|
<a-menu
|
|
|
|
mode="inline"
|
|
|
|
:default-selected-keys=this.defApp
|
|
|
|
style="border-bottom:0px;lineHeight:62px;"
|
|
>
|
|
>
|
|
<a-select style="width: 100%" placeholder="请选择要切换的应用" v-decorator="['application', {rules: [{ required: true, message: '请选择要切换的应用!' }]}]" >
|
|
|
|
<a-select-option v-for='(item,index) in userInfo.apps' :key="index" :value="item.code" >{{item.name}}</a-select-option>
|
|
|
|
</a-select>
|
|
|
|
</a-form-item>
|
|
|
|
|
|
|
|
|
|
<a-menu-item v-for='(item) in userInfo.apps' :key="item.code" style="top:0px;" @click="switchApp(item.code)">
|
|
|
|
{{item.name}}
|
|
|
|
</a-menu-item>
|
|
|
|
</a-menu>
|
|
</a-form-item>
|
|
</a-form-item>
|
|
</a-form>
|
|
</a-form>
|
|
|
|
|
|
</a-modal>
|
|
</a-modal>
|
|
|
|
|
|
|
|
|
|
<a-modal
|
|
<a-modal
|
|
title="修改密码"
|
|
title="修改密码"
|
|
:visible="visible_updPwd"
|
|
:visible="visible_updPwd"
|
|
@ -95,188 +80,188 @@
|
|
@ok="handleOkUpdPwd"
|
|
@ok="handleOkUpdPwd"
|
|
@cancel="handleCancel"
|
|
@cancel="handleCancel"
|
|
>
|
|
>
|
|
|
|
|
|
<a-form :form="form2">
|
|
|
|
<a-form-item
|
|
|
|
label="原密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请输入原密码" type="password" v-decorator="['password', {rules: [{required: true, message: '请输入原密码!'}]}]" />
|
|
|
|
</a-form-item>
|
|
|
|
</a-form>
|
|
|
|
|
|
|
|
<a-form :form="form2">
|
|
|
|
<a-form-item
|
|
|
|
label="新密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请输入新密码" type="password" v-decorator="['newPassword', {rules: [{required: true, message: '请输入新密码!'},{
|
|
|
|
|
|
<a-form :form="form2">
|
|
|
|
<a-form-item
|
|
|
|
label="原密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请输入原密码" type="password" v-decorator="['password', {rules: [{required: true, message: '请输入原密码!'}]}]" />
|
|
|
|
</a-form-item>
|
|
|
|
<a-form-item
|
|
|
|
label="新密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请输入新密码" type="password" v-decorator="['newPassword', {rules: [{required: true, message: '请输入新密码!'},{
|
|
validator: validateToNextPassword,
|
|
validator: validateToNextPassword,
|
|
},]}]" />
|
|
},]}]" />
|
|
</a-form-item>
|
|
|
|
</a-form>
|
|
|
|
<a-form :form="form2">
|
|
|
|
<a-form-item
|
|
|
|
label="重复新密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请再次输入新密码" type="password" v-decorator="['confirm', {rules: [{required: true, message: '请再次输入新密码!'},
|
|
|
|
|
|
</a-form-item>
|
|
|
|
<a-form-item
|
|
|
|
label="重复新密码"
|
|
|
|
:labelCol="labelCol"
|
|
|
|
:wrapperCol="wrapperCol"
|
|
|
|
has-feedback
|
|
|
|
>
|
|
|
|
<a-input placeholder="请再次输入新密码" type="password" v-decorator="['confirm', {rules: [{required: true, message: '请再次输入新密码!'},
|
|
{
|
|
{
|
|
validator: compareToFirstPassword,
|
|
validator: compareToFirstPassword,
|
|
}]}]" />
|
|
}]}]" />
|
|
</a-form-item>
|
|
|
|
</a-form>
|
|
|
|
|
|
|
|
|
|
</a-form-item>
|
|
|
|
</a-form>
|
|
</a-modal>
|
|
</a-modal>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
import NoticeIcon from '@/components/NoticeIcon'
|
|
|
|
import { mapActions, mapGetters } from 'vuex'
|
|
|
|
import { ALL_APPS_MENU } from '@/store/mutation-types'
|
|
|
|
import Vue from 'vue'
|
|
|
|
|
|
import NoticeIcon from '@/components/NoticeIcon'
|
|
|
|
import { mapActions, mapGetters } from 'vuex'
|
|
|
|
import { ALL_APPS_MENU } from '@/store/mutation-types'
|
|
|
|
import Vue from 'vue'
|
|
|
|
import { message } from 'ant-design-vue/es'
|
|
|
|
|
|
export default {
|
|
|
|
name: 'UserMenu',
|
|
|
|
components: {
|
|
|
|
NoticeIcon,
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
labelCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 5 }
|
|
|
|
},
|
|
|
|
wrapperCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 16 }
|
|
|
|
|
|
export default {
|
|
|
|
name: 'UserMenu',
|
|
|
|
components: {
|
|
|
|
NoticeIcon,
|
|
|
|
},
|
|
|
|
props: {
|
|
|
|
mode: {
|
|
|
|
type: String,
|
|
|
|
// sidemenu, topmenu
|
|
|
|
default: 'sidemenu'
|
|
},
|
|
},
|
|
visible: false,
|
|
|
|
visible_updPwd:false,
|
|
|
|
confirmLoading: false,
|
|
|
|
form1: this.$form.createForm(this),
|
|
|
|
form2: this.$form.createForm(this),
|
|
|
|
appName:''
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
labelCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 5 }
|
|
|
|
},
|
|
|
|
wrapperCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 16 }
|
|
|
|
},
|
|
|
|
visible: false,
|
|
|
|
visible_updPwd:false,
|
|
|
|
confirmLoading: false,
|
|
|
|
form1: this.$form.createForm(this),
|
|
|
|
form2: this.$form.createForm(this),
|
|
|
|
defApp:[]
|
|
|
|
};
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
...mapGetters(['nickname', 'avatar','userInfo'])
|
|
|
|
|
|
computed: {
|
|
|
|
...mapGetters(['nickname', 'avatar','userInfo'])
|
|
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
...mapActions(['Logout','MenuChange','UpdatePwd']),
|
|
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
...mapActions(['Logout','MenuChange','UpdatePwd']),
|
|
|
|
|
|
handleLogout () {
|
|
|
|
this.$confirm({
|
|
|
|
title: '提示',
|
|
|
|
content: '真的要注销登录吗 ?',
|
|
|
|
onOk: () => {
|
|
|
|
return this.Logout({}).then(() => {
|
|
|
|
setTimeout(() => {
|
|
|
|
window.location.reload()
|
|
|
|
}, 16)
|
|
|
|
}).catch(err => {
|
|
|
|
this.$message.error({
|
|
|
|
title: '错误',
|
|
|
|
description: err.message
|
|
|
|
|
|
handleLogout () {
|
|
|
|
this.$confirm({
|
|
|
|
title: '提示',
|
|
|
|
content: '真的要注销登录吗 ?',
|
|
|
|
onOk: () => {
|
|
|
|
return this.Logout({}).then(() => {
|
|
|
|
setTimeout(() => {
|
|
|
|
window.location.reload()
|
|
|
|
}, 16)
|
|
|
|
}).catch(err => {
|
|
|
|
this.$message.error({
|
|
|
|
title: '错误',
|
|
|
|
description: err.message
|
|
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
},
|
|
|
|
onCancel () {
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
onCancel () {
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
* 打开切换应用框
|
|
|
|
*/
|
|
|
|
appToggled () {
|
|
|
|
this.visible = true;
|
|
|
|
this.appName=Vue.ls.get(ALL_APPS_MENU)[0].name
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
* 打开切换应用框
|
|
|
|
*/
|
|
|
|
appToggled () {
|
|
|
|
this.visible = true;
|
|
|
|
this.defApp.push(Vue.ls.get(ALL_APPS_MENU)[0].code)
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
* 打开修改密码框
|
|
|
|
*/
|
|
|
|
updatePwd () {
|
|
|
|
this.visible_updPwd = true;
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
* 打开修改密码框
|
|
|
|
*/
|
|
|
|
updatePwd () {
|
|
|
|
this.visible_updPwd = true;
|
|
|
|
},
|
|
|
|
|
|
compareToFirstPassword(rule, value, callback) {
|
|
|
|
const form2 = this.form2;
|
|
|
|
if (value && value !== form2.getFieldValue('newPassword')) {
|
|
|
|
callback('请确认两次输入密码的一致性!');
|
|
|
|
} else {
|
|
|
|
|
|
compareToFirstPassword(rule, value, callback) {
|
|
|
|
const form2 = this.form2;
|
|
|
|
if (value && value !== form2.getFieldValue('newPassword')) {
|
|
|
|
callback('请确认两次输入密码的一致性!');
|
|
|
|
} else {
|
|
|
|
callback();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
validateToNextPassword(rule, value, callback) {
|
|
|
|
const form2 = this.form2;
|
|
|
|
if (value && this.confirmDirty) {
|
|
|
|
form2.validateFields(['confirm'], { force: true });
|
|
|
|
}
|
|
callback();
|
|
callback();
|
|
}
|
|
|
|
},
|
|
|
|
validateToNextPassword(rule, value, callback) {
|
|
|
|
const form2 = this.form2;
|
|
|
|
if (value && this.confirmDirty) {
|
|
|
|
form2.validateFields(['confirm'], { force: true });
|
|
|
|
}
|
|
|
|
callback();
|
|
|
|
},
|
|
|
|
|
|
},
|
|
|
|
|
|
handleOkApp(){
|
|
|
|
const { form1: { validateFields } } = this
|
|
|
|
validateFields((errors, values) => {
|
|
|
|
if(!errors){
|
|
|
|
const applicationData = this.userInfo.apps.filter(item => item.code == values.application)
|
|
|
|
this.MenuChange(applicationData[0])
|
|
|
|
this.handleCancel()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
switchApp(appCode){
|
|
|
|
this.visible = false;
|
|
|
|
this.defApp=[]
|
|
|
|
const applicationData = this.userInfo.apps.filter(item => item.code == appCode)
|
|
|
|
const hideMessage = message.loading('正在切换应用!', 0)
|
|
|
|
this.MenuChange(applicationData[0]).then((res)=>{
|
|
|
|
hideMessage()
|
|
|
|
}).catch((err)=>{
|
|
|
|
message.error("应用切换异常");
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
handleOkUpdPwd(){
|
|
|
|
const { form2: { validateFields } } = this
|
|
|
|
validateFields((errors, values) => {
|
|
|
|
if(!errors){
|
|
|
|
values.id = this.userInfo.id
|
|
|
|
this.UpdatePwd(values).then((res) =>{
|
|
|
|
if(res.success){
|
|
|
|
this.$message.success('修改成功')
|
|
|
|
this.handleCancel()
|
|
|
|
}else{
|
|
|
|
this.$message.error('修改失败:'+res.message)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
handleOkUpdPwd(){
|
|
|
|
const { form2: { validateFields } } = this
|
|
|
|
validateFields((errors, values) => {
|
|
|
|
if(!errors){
|
|
|
|
values.id = this.userInfo.id
|
|
|
|
this.UpdatePwd(values).then((res) =>{
|
|
|
|
if(res.success){
|
|
|
|
this.$message.success('修改成功')
|
|
|
|
this.handleCancel()
|
|
|
|
}else{
|
|
|
|
this.$message.error('修改失败:'+res.message)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
handleCancel(){
|
|
|
|
this.form1.resetFields();
|
|
|
|
this.form2.resetFields();
|
|
|
|
this.visible = false;
|
|
|
|
this.visible_updPwd = false;
|
|
|
|
|
|
handleCancel(){
|
|
|
|
this.form1.resetFields();
|
|
|
|
this.form2.resetFields();
|
|
|
|
this.visible = false;
|
|
|
|
this.visible_updPwd = false;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="less" scoped>
|
|
<style lang="less" scoped>
|
|
.appRedio {
|
|
|
|
|
|
.appRedio {
|
|
border:1px solid #91d5ff;
|
|
border:1px solid #91d5ff;
|
|
padding:10px 20px;
|
|
padding:10px 20px;
|
|
background: #e6f7ff;
|
|
background: #e6f7ff;
|
|
border-radius:2px;
|
|
border-radius:2px;
|
|
margin-bottom:10px;
|
|
margin-bottom:10px;
|
|
color: #91d5ff;
|
|
|
|
|
|
color: #91d5ff;
|
|
/*display: inline;
|
|
/*display: inline;
|
|
margin-bottom:10px;*/
|
|
margin-bottom:10px;*/
|
|
}
|
|
|
|
|
|
}
|
|
</style>
|
|
</style>
|