項目根目錄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>