vuex添加token

master
fanluyan 2 years ago
parent 915a926816
commit 167945d7e7

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

@ -1,28 +1,19 @@
<template> <template>
<div class="header"> <div class="header">
<!-- 折叠按钮 -->
<!-- <div class="collapse-btn" @click="collapseChage">
<i v-if="!collapse" class="el-icon-s-fold"></i>
<i v-else class="el-icon-s-unfold"></i>
</div> -->
<div class="logo">可视化智能管控系统</div> <div class="logo">可视化智能管控系统</div>
<v-sidebar></v-sidebar> <v-sidebar></v-sidebar>
<div class="header-right"> <div class="header-right">
<div class="header-user-con"> <div class="header-user-con">
<el-select v-model="colorValue" value-key="value" @change="changeTheme"> <el-select v-model="colorValue" @change="changeTheme">
<el-option <el-option
v-for="item in colorList" v-for="item in colorList"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
></el-option> ></el-option>
<!-- <el-option label="红色" value="红色"></el-option>
<el-option label="绿色" value="绿色"></el-option>
<el-option label="橙色" value="橙色"></el-option> -->
</el-select> </el-select>
<!-- 全屏显示 --> <!-- 全屏显示 -->
<!-- <div class="btn-fullscreen" @click="handleFullScreen">
<div class="btn-fullscreen" @click="handleFullScreen">
<el-tooltip <el-tooltip
effect="dark" effect="dark"
:content="fullscreen ? `取消全屏` : `全屏`" :content="fullscreen ? `取消全屏` : `全屏`"
@ -30,8 +21,7 @@
> >
<i class="el-icon-rank"></i> <i class="el-icon-rank"></i>
</el-tooltip> </el-tooltip>
</div> </div> -->
<!-- 用户头像 --> <!-- 用户头像 -->
<div class="user-avator"> <div class="user-avator">
<img src="../../assets/img/user.jpeg" /> <img src="../../assets/img/user.jpeg" />
@ -43,22 +33,29 @@
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
</span> </span>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item divided command="loginout" <el-dropdown-item command="noticeShow">公告</el-dropdown-item>
>退出登录</el-dropdown-item <el-dropdown-item command="changePwd"> 修改密码</el-dropdown-item>
> <el-dropdown-item command="loginout">退出登录</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</div> </div>
</div> </div>
<password-dialog
:dialogFormPsd="dialogFormPsd"
@psdDialogClose="psdDialogClose"
></password-dialog>
</div> </div>
</template> </template>
<script> <script>
// import bus from '../common/bus'; // import bus from '../common/bus';
import { mapState } from "vuex";
import updateElementUiTheme from "update-element-ui-theme"; import updateElementUiTheme from "update-element-ui-theme";
import vSidebar from "./Sidebar.vue"; import vSidebar from "./Sidebar.vue";
import passwordDialog from "@/views/components/passwordDialog.vue";
export default { export default {
components: { components: {
vSidebar, vSidebar,
passwordDialog,
}, },
data() { data() {
return { return {
@ -81,90 +78,104 @@ export default {
}, },
], ],
colorValue: "", colorValue: "",
theme: {},
//collapse: false,
fullscreen: false, fullscreen: false,
name: "xinyin", dialogFormPsd: false,
}; };
}, },
computed: { computed: {
...mapState(["username"]),
username() { username() {
let username = localStorage.getItem("ms_username"); let name = localStorage.getItem("username");
return username ? username : this.name; return name;
}, },
}, },
methods: { methods: {
// //
changeTheme(e) { changeTheme(event) {
console.log(e); console.log(event);
this.theme = this.colorList.find(function (i) { let colorTheme = {};
return i.value === e; colorTheme = this.colorList.find(function (item) {
return item.value === event;
}); //change }); //change
console.log(this.theme); console.log(colorTheme);
updateElementUiTheme({
theme: this.theme.value,
themeName: "--my-theme-name",
});
const app = document.getElementById("app"); const app = document.getElementById("app");
console.log(app); console.log(app);
if (this.theme.label === "蓝色") { if (colorTheme.label === "蓝色") {
this.theme.value = "#20a0ff"; colorTheme.value = "#20a0ff";
app.classList.add("blueStyle"); app.classList.add("blueStyle");
app.classList.remove("redStyle", "greenStyle", "orangeStyle"); app.classList.remove("redStyle", "greenStyle", "orangeStyle");
} else if (this.theme.label === "红色") { } else if (colorTheme.label === "红色") {
this.theme.value = "#EE320C"; colorTheme.value = "#EE320C";
app.classList.remove("blueStyle", "greenStyle", "orangeStyle"); app.classList.remove("blueStyle", "greenStyle", "orangeStyle");
app.classList.add("redStyle"); app.classList.add("redStyle");
} else if (this.theme.label === "绿色") { } else if (colorTheme.label === "绿色") {
this.theme.value = "#25EE28"; colorTheme.value = "#25EE28";
app.classList.add("greenStyle"); app.classList.add("greenStyle");
} else if (this.theme.label === "橙色") { } else if (colorTheme.label === "橙色") {
this.theme.value = "#f08200"; colorTheme.value = "#f08200";
app.classList.remove("blueStyle", "greenStyle", "redStyle"); app.classList.remove("blueStyle", "greenStyle", "redStyle");
app.classList.add("orangeStyle"); app.classList.add("orangeStyle");
} }
updateElementUiTheme({
theme: colorTheme.value,
themeName: "--my-theme-name",
});
}, },
// //
handleCommand(command) { handleCommand(command) {
if (command == "loginout") { switch (command) {
localStorage.removeItem("ms_username"); case "noticeShow": //
this.$router.push("/login"); console.log(command);
break;
case "changePwd": //
console.log(command);
this.dialogFormPsd = true;
break;
case "loginout": //退
this.$store.commit("REMOVE_INFO");
this.$router.push("/login");
break;
} }
// if (command == "loginout") {
// localStorage.removeItem("ms_username");
// this.$router.push("/login");
// }
}, },
//
// collapseChage() { //psdDialogClose
// this.collapse = !this.collapse; psdDialogClose() {
// bus.$emit('collapse', this.collapse); this.dialogFormPsd = false;
// this.$store.commit('changeOpen', this.collapse);
// },
//
handleFullScreen() {
let element = document.documentElement;
if (this.fullscreen) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
// IE11
element.msRequestFullscreen();
}
}
this.fullscreen = !this.fullscreen;
}, },
//
// handleFullScreen() {
// let element = document.documentElement;
// if (this.fullscreen) {
// if (document.exitFullscreen) {
// document.exitFullscreen();
// } else if (document.webkitCancelFullScreen) {
// document.webkitCancelFullScreen();
// } else if (document.mozCancelFullScreen) {
// document.mozCancelFullScreen();
// } else if (document.msExitFullscreen) {
// document.msExitFullscreen();
// }
// } else {
// if (element.requestFullscreen) {
// element.requestFullscreen();
// } else if (element.webkitRequestFullScreen) {
// element.webkitRequestFullScreen();
// } else if (element.mozRequestFullScreen) {
// element.mozRequestFullScreen();
// } else if (element.msRequestFullscreen) {
// // IE11
// element.msRequestFullscreen();
// }
// }
// this.fullscreen = !this.fullscreen;
// },
}, },
created() { created() {
this.colorValue = this.colorList[0].label; this.colorValue = this.colorList[0].label;

@ -38,18 +38,15 @@ new Vue({
//使用钩子函数对路由进行权限跳转 //使用钩子函数对路由进行权限跳转
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
document.title = `${to.meta.title} | 可视化智能管控系统`; document.title = `${to.meta.title} | 可视化智能管控系统`;
const role = localStorage.getItem("ms_username"); const role = localStorage.getItem("username");
//const token = localStorage.getItem("token"); const token = localStorage.getItem("token");
// if (token === null || token === "") {
// next("/login");
// } else
if (!role && to.path !== "/login") { if (!role && to.path !== "/login") {
next("/login"); next("/login");
} else if (to.meta.permission) { } else if (to.meta.permission) {
console.log(to.meta.permission); console.log(to.meta.permission);
console.log(role); console.log(role);
// 如果是管理员权限则可进入,这里只是简单的模拟管理员权限而已 // 如果是管理员权限则可进入,这里只是简单的模拟管理员权限而已
role === "admin" ? next() : next("/403"); role === "xytest" ? next() : next("/403");
} else { } else {
next(); next();
} }

@ -6,14 +6,25 @@ Vue.use(Vuex);
export default new Vuex.Store({ export default new Vuex.Store({
state: { state: {
//用户登录token 存储 //用户登录token 存储
token: localStorage.getItem("token") ? localStorage.getItem("token") : "", token: "",
username: "",
}, },
getters: {}, getters: {},
mutations: { mutations: {
//修改token 并将token存入localstorage SET_TOKEN(state, token) {
setToken(state, user) { state.token = token;
state.token = user.token; localStorage.setItem("token", token);
localStorage.setItem("token", user.token); console.log(state);
console.log("store、localstorage保存token成功");
},
SET_USERINFO(state, username) {
state.username = username;
localStorage.setItem("username", username);
console.log("store、localstorage保存userinfo成功");
},
//退出清除locastorge
REMOVE_INFO(state) {
localStorage.clear();
}, },
}, },
actions: {}, actions: {},

@ -1,33 +1,38 @@
<template> <template>
<div class="login-wrap"> <div class="login-wrap">
<div class="ms-login"> <div class="ms-login">
<div class="ms-title">后台管理系统</div> <div class="ms-title">
<img src="../assets/img/logo.png" alt="欣影" />
<h3>可视化智能管控系统</h3>
</div>
<el-form <el-form
:model="param" :model="userInfo"
:rules="rules" :rules="rules"
ref="login" ref="loginForm"
label-width="0px" label-width="0px"
class="ms-content" class="ms-content"
size="medium"
> >
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="param.username" placeholder="username"> <el-input v-model="userInfo.username" placeholder="用户名">
<el-button slot="prepend" icon="el-icon-lx-people"></el-button> <el-button slot="prepend" icon="el-icon-user"></el-button>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input
type="password" type="password"
placeholder="password" placeholder="密码"
v-model="param.password" show-password
v-model="userInfo.password"
@keyup.enter.native="submitForm()" @keyup.enter.native="submitForm()"
> >
<el-button slot="prepend" icon="el-icon-lx-lock"></el-button> <el-button slot="prepend" icon="el-icon-lock"></el-button>
</el-input> </el-input>
</el-form-item> </el-form-item>
<div class="login-btn"> <div class="login-btn">
<el-button type="primary" @click="submitForm()"></el-button> <el-button type="primary" @click="submitForm()"></el-button>
</div> </div>
<p class="login-tips">Tips : 用户名和密码随便填</p> <!-- <p class="login-tips">Tips : 用户名和密码随便填</p> -->
</el-form> </el-form>
</div> </div>
</div> </div>
@ -35,13 +40,13 @@
<script> <script>
import { mapMutations } from "vuex"; import { mapMutations } from "vuex";
import { login, get1, get2 } from "@/utils/api/index"; import { login } from "@/utils/api/index";
export default { export default {
data: function () { data: function () {
return { return {
param: { userInfo: {
username: "admin", username: "xytest",
password: "123123", password: "123456",
}, },
rules: { rules: {
username: [ username: [
@ -49,40 +54,23 @@ export default {
], ],
password: [{ required: true, message: "请输入密码", trigger: "blur" }], password: [{ required: true, message: "请输入密码", trigger: "blur" }],
}, },
token: "",
}; };
}, },
computed: { computed: {
...mapMutations(["setToken"]), ...mapMutations(["setColorTheme"]),
}, },
methods: { methods: {
submitForm() { submitForm() {
this.$refs.login.validate((valid) => { this.$refs.loginForm.validate((valid) => {
if (valid) { if (valid) {
// login({ console.log(valid);
// account: "xytest", //this.userInfo.password = this.$md5(this.userInfo.password); //
// pwd: "2b4c6570bb613fb6b81589fbfa635edf", this.token = this.$md5(this.userInfo.password); //token
// captcha: "bgsq", this.$store.commit("SET_TOKEN", this.token); //tokenvuex
// requestIp: "180.166.218.222", this.$store.commit("SET_USERINFO", this.userInfo.username); //vuex
// requestPort: "7200",
// })
// .then((res) => {
// console.log(res);
// this.$message.success("");
// this.token = "asdadadadadasdasd" + res.statusCode;
// this.setToken({ token: this.token });
// this.$router.push("/");
// })
// .catch((error) => {
// alert("");
// console.log(error);
// });
this.$message.success("登录成功");
localStorage.setItem("ms_username", this.param.username);
console.log("加密密码:" + this.$md5(this.param.username));
this.$router.push("/"); this.$router.push("/");
this.$message.success("登录成功");
} else { } else {
this.$message.error("请输入账号和密码"); this.$message.error("请输入账号和密码");
console.log("error submit!!"); console.log("error submit!!");
@ -92,14 +80,7 @@ export default {
}, },
getLogin() {}, getLogin() {},
}, },
created() { created() {},
get1().then((res) => {
console.log(res);
});
get2().then((res) => {
console.log(res);
});
},
}; };
</script> </script>
@ -108,29 +89,43 @@ export default {
position: relative; position: relative;
width: 100%; width: 100%;
height: 100%; height: 100%;
background: url(../assets/img/login-bg.jpg) no-repeat center center; background: url(../assets/img/loginbg.jpeg) no-repeat center center;
background-size: cover; background-size: cover;
.ms-login { .ms-login {
position: absolute; position: absolute;
width: 420px;
height: 454px;
left: 50%; left: 50%;
top: 50%; top: 50%;
width: 350px; transform: translate(-50%;-50%);
margin: -190px 0 0 -175px;
border-radius: 5px; border-radius: 5px;
background: rgba(255, 255, 255, 0.3); background: url(../assets/img/loginBackImage.8b77ab2c.png) no-repeat;
-webkit-backdrop-filter: blur(5px); // -webkit-backdrop-filter: blur(5px);
backdrop-filter: blur(5px); // backdrop-filter: blur(15px);
overflow: hidden; overflow: hidden;
background-size: 100%;
.ms-title { .ms-title {
width: 100%;
line-height: 50px;
text-align: center; text-align: center;
font-size: 20px;
color: @color-white;
border-bottom: 1px solid @border-color-base; border-bottom: 1px solid @border-color-base;
padding: 40px 16px;
img {
margin-bottom: 8px;
width: 160px;
}
h3 {
font-size: 30px;
background: linear-gradient(0deg, #86b7ff, #4293fd 99.46289%);
background-clip: text;
-webkit-text-fill-color: transparent;
// font-weight: normal;
}
} }
.ms-content { .ms-content {
padding: 30px 30px; padding: 40px 40px;
.el-form-item {
margin-bottom: 30px;
}
.login-btn { .login-btn {
text-align: center; text-align: center;
button { button {
@ -140,11 +135,11 @@ export default {
} }
} }
} }
.login-tips { // .login-tips {
font-size: 12px; // font-size: 12px;
line-height: 30px; // line-height: 30px;
color: @color-white; // color: @color-white;
} // }
} }
} }
</style> </style>

@ -0,0 +1,48 @@
<template>
<el-dialog
class="psdDialog"
title="修改密码"
:visible.sync="dialogFormPsd"
width="420px"
>
<el-form :model="psdForm" label-position="left" label-width="80px">
<el-form-item label="登录账号:">
<el-input v-model="psdForm.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="原密码:">
<el-input v-model="psdForm.originalPsd" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="新密码:">
<el-input v-model="psdForm.newPsd" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="确认密码:">
<el-input v-model="psdForm.confirmPsd" autocomplete="off"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="closeDialog"> </el-button>
<el-button type="primary" @click="closeDialog"> </el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: ["dialogFormPsd"],
data() {
return {
psdForm: {
name: "",
originalPsd: "",
newPsd: "",
confirmPsd: "",
},
};
},
methods: {
closeDialog() {
this.$emit("psdDialogClose");
},
},
};
</script>
Loading…
Cancel
Save