项目根目录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>