
项目根目录package.json中加入依赖,然后cnpm install
目录结构

main.js
import Vue from 'vue' import App from './App' import router from './router' import VueResource from 'vue-resource' import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; import store from './store/store' Vue.use(ElementUI); Vue.use(VueResource); Vue.config.productionTip = false; Vue.http.get('http://192.168.10.128:8000/api/login').then(response => {}); let djangocookie=getCookie('csrftoken'); Vue.http.headers.common['X-CSRFToken'] = djangocookie;//这里设置请求头 router.beforeEach((to, from, next) => { //未登陆拦截 if (to.path === '/login') { next() } else { if (!store.state.user ) { next({ path: '/login' }) } else { next() } } }); new Vue({ el: '#app', router, store, components: { App }, template: '<App/>' }); function getCookie(name){ //获取cookie函数 name = name + "="; let start = document.cookie.indexOf(name), value = null; if(start>-1){ let end = document.cookie.indexOf(";",start); if(end === -1){ end = document.cookie.length; } value = document.cookie.substring(start+name.length,end); } return value; }
store.js
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); export default new Vuex.Store({ state: JSON.parse(localStorage.getItem('user')) || {}, mutations: { Login(state, user) { localStorage.setItem('user', JSON.stringify(user)); Object.assign(state, user) }, Logout(state) { localStorage.removeItem('user'); Object.keys(state).forEach(k => Vue.delete(state, k)) } }, actions: { login({commit}, user) { commit("Login", user) }, logout({commit}) { commit("Logout") } } })
login.vue
<template>
<div class="main">
<div class="login">
<h1>应用管理系统</h1>
<div class="inset" >
<el-form class="el-form" ref="form" >
<h2>管理登录</h2>
<el-form-item label="用户" prop="name">
<el-input type="text" auto-complete="off" class=input_text v-model="authInfo.username" placeholder="请输入用户名"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input type="password" class=input_text auto-complete="off" v-model="authInfo.password" placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item>
<div class="sign">
<!-- 点击进行登录提交 -->
<el-button class="submit" type="primary" @click="submit" >登录</el-button>
<div style="color: red">{{req.msg}}</div>
<!-- 点击重置表单 -->
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { mapActions } from 'vuex'
// import { USER_SIGNIN } from '../store/store'
import crypto from 'crypto'
export default {
data() {
return {
DjangoCookie:null,
books: [],
authInfo: {
username: null,
password: null
},
req: {
msg: null,
},
form: {
user: null
}
}
},
methods: {
...mapActions(["login"]),
getmd5(pwd) {
let md5 = crypto.createHash("md5");
md5.update(pwd);
let a = md5.digest('hex');
return a
},
submit: function () {
let pwd = this.authInfo.password;
this.authInfo.password = this.getmd5(pwd);
let formData = JSON.stringify(this.authInfo); // 这里才是你的表单数据
this.$http.post('http://192.168.10.128:8000/api/login', formData).then((response) => {
// success callback
this.req.msg = response.data.msg;
this.req.respCode = response.data['resp_code'];
if (this.req.respCode === "0000") {
this.form.user = response.data.username;
this.$store.dispatch("login", this.form); //将user保存到store
this.$router.push({path: '/manage'});
}
}, (response) => {
// console.log("error");
// error callback
});
},
},
}
function getCookie(name){ //获取cookie函数
name = name + "=";
let start = document.cookie.indexOf(name),
value = null;
if(start>-1){
let end = document.cookie.indexOf(";",start);
if(end === -1){
end = document.cookie.length;
}
value = document.cookie.substring(start+name.length,end);
}
return value;
}
</script>
manage.vue 退出
<template>
<div>
<el-menu
router
default-active="$route.path"
class="el-menu-demo"
mode="horizontal"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b">
<el-menu-item index="/manage/javamanage">java应用</el-menu-item>
<el-menu-item index="/manage/jenkinsmanage" >jekins</el-menu-item>
<el-menu-item index="" class="floatR" @click="loginOut">注销</el-menu-item>
<el-menu-item index="" class="floatR">{{user}}</el-menu-item>
</el-menu>
<keep-alive>
<router-view/>
</keep-alive>
</div>
</template>
<style>
.floatR{
float: right !important;
}
</style>
<script>
import { mapState } from 'vuex'
export default {
// data() {
// return {
// activeIndex: '1',
// activeIndex2: '1'
// }
computed: mapState({ user: state => state.user }),
data(){
return{
userName: sessionStorage.userName
}
},
methods:{
loginOut() {
this.$confirm('您确定要退出吗?', '退出管理平台', {
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(() => {
const info = {
'user': sessionStorage.getItem('user')
};
this.$store.dispatch('logout', info).then(() => {
this.$router.push({ path: '/login' })
}).catch(() => {
})
}).catch(() => {
})
}
}
}
</script>
