后台管理系统模板,包含权限、字典、日志的功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
4.8 KiB

4 years ago
<template>
<div id="header">
<el-row class="info" type="flex" justify="end" align="middle">
<el-button class="info-btn" icon="el-icon-user-solid" type="text">
{{ $store.state.userInfo.userId }}
</el-button>
<el-button class="info-btn" icon="el-icon-setting" type="text" @click="update = true">
修改密码
</el-button>
<el-button class="info-btn" icon="el-icon-switch-button" type="text" @click="$store.commit('logout')">
注销登录
</el-button>
</el-row>
<el-row class="menu-row">
<el-menu class="el-menu-demo" :default-active="activeGroup" mode="horizontal" background-color="#FFF" text-color="#000" active-text-color="#4669e7">
<el-menu-item v-for="item in $store.state.menuGroups" :key="item.id" :index="item.id" @click="clickGroup(item)">
{{ item.title }}
<!-- <i :class="item.desc"></i> -->
</el-menu-item>
</el-menu>
<el-radio-group v-model="active" fill="#edf2f7" text-color="#4669e7">
<el-radio-button v-for="item in menus" :label="item.href">
{{ item.title }}
</el-radio-button>
</el-radio-group>
</el-row>
<el-dialog title="修改密码" :visible.sync="update" width="40%" top="15vh" :close-on-click-modal="false"
@keydown.enter.native="confirm()">
<el-form ref="update" :model="user" :rules="rules" label-width="180px">
<el-form-item label="旧密码" prop="key">
<el-input type="password" v-model="user.key"></el-input>
</el-form-item>
<el-form-item label="新密码" prop="newKey">
<el-input type="password" v-model="user.newKey"></el-input>
</el-form-item>
<el-form-item label="重复新密码" prop="reKey">
<el-input type="password" v-model="user.reKey" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="update = false;"> </el-button>
<el-button type="primary" @click="confrim"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
Vue,
Component,
Prop,
Watch
} from 'vue-property-decorator';
import md5 from 'js-md5';
import {
password
} from '@/static/tool/validate.js';
@Component
export default class NavHeader extends Vue {
menus = [];
active = 'home';
activeGroup = 'home';
update = false;
user = {};
rules = {
key: [{
required: true,
message: '请输入密码',
trigger: 'blur'
}],
newKey: [{
validator: password,
trigger: 'blur'
}],
reKey: [{
validator: this.reKey,
trigger: 'blur'
}]
};
clickGroup(group) {
this.activeGroup = group.id
this.menus = group.children
const children = group.children
if (children.length == 0) {
this.active = group.href
} else {
this.active = children[0].href
}
}
clickMenu(id) {
this.active = id
}
toHome() {
this.clickGroup(this.$store.state.menuGroups[0])
}
confrim() {
const that = this
this.$refs.update.validate((valid) => {
if (valid) {
const param = JSON.parse(JSON.stringify(that.user));
param.userId = that.$store.state.userInfo.userId;
param.key = md5(param.key)
param.newKey = md5(param.newKey)
delete param.reKey;
that.$post('um/update/password', param).then(rsp => {
if (rsp) {
that.update = false;
that.user = {};
that.$store.commit('logout')
}
});
} else {
return false
}
});
}
reKey(rule, value, callback) {
if (!value) {
callback(new Error('请重复输入新密码'));
} else if (value != this.user.newKey) {
callback(new Error('两次输入的新密码不一致'));
}else{
callback();
}
}
@Watch('active')
activeChang(n, o) {
this.$router.push('/' + n)
}
created() {}
mounted() {} // 生命周期 - 挂载完成(可以访问DOM元素
beforeCreate() {} // 生命周期 - 创建之前
beforeMount() {} // 生命周期 - 挂载之前
beforeUpdate() {} // 生命周期 - 更新之前
updated() {} // 生命周期 - 更新之后
beforeDestroy() {} // 生命周期 - 销毁之前
destroyed() {} // 生命周期 - 销毁完成
activated() {} // 如果页面有keep-alive缓存功能,这个函数会触发
}
</script>
<style scoped>
.info {
background-color: cadetblue;
height: 50px;
padding-right: 100px;
}
.info-btn {
font-size: 17px;
color: #2D3748;
margin-left: 30px !important;
}
.menu-row {
background-color: #FFFFFF;
/* padding-left: 20px; */
}
</style>