From d2f010d6f15cc683fe399b7d20416e3b74a42cdb Mon Sep 17 00:00:00 2001 From: soul2 <1052986332@qq.com> Date: Sun, 7 Apr 2024 14:21:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=AF=E7=94=A8=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/user.js | 17 ++-- src/layout/components/Navbar.vue | 2 + src/permission.js | 128 +++++++++++++++---------------- src/store/modules/user.js | 57 +++++++------- src/utils/auth.js | 2 +- src/utils/request.js | 13 ++-- src/views/login/index.vue | 25 +++--- src/views/subject/edit.vue | 2 +- 8 files changed, 122 insertions(+), 124 deletions(-) diff --git a/src/api/user.js b/src/api/user.js index 8ff4389..b93f25a 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -2,23 +2,16 @@ import request from '@/utils/request' export function login(data) { return request({ - url: '/vue-admin-template/user/login', + url: '/user/login', method: 'post', data }) } -export function getInfo(token) { +export function logout(data) { return request({ - url: '/vue-admin-template/user/info', - method: 'get', - params: { token } - }) -} - -export function logout() { - return request({ - url: '/vue-admin-template/user/logout', - method: 'post' + url: '/user/logout', + method: 'post', + data }) } diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index dce6207..ded83e1 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -27,6 +27,7 @@ + 退出登录 @@ -88,6 +89,7 @@ export default { float: right; height: 100%; line-height: 50px; + padding-right: 20px; &:focus { outline: none; diff --git a/src/permission.js b/src/permission.js index 963621f..fa1ea19 100644 --- a/src/permission.js +++ b/src/permission.js @@ -1,64 +1,64 @@ -// import router from './router' -// import store from './store' -// import { Message } from 'element-ui' -// import NProgress from 'nprogress' // progress bar -// import 'nprogress/nprogress.css' // progress bar style -// import { getToken } from '@/utils/auth' // get token from cookie -// import getPageTitle from '@/utils/get-page-title' -// -// NProgress.configure({ showSpinner: false }) // NProgress Configuration -// -// const whiteList = ['/login'] // no redirect whitelist -// -// router.beforeEach(async(to, from, next) => { -// // start progress bar -// NProgress.start() -// -// // set page title -// document.title = getPageTitle(to.meta.title) -// -// // determine whether the user has logged in -// const hasToken = getToken() -// -// if (hasToken) { -// if (to.path === '/login') { -// // if is logged in, redirect to the home page -// next({ path: '/' }) -// NProgress.done() -// } else { -// const hasGetUserInfo = store.getters.name -// if (hasGetUserInfo) { -// next() -// } else { -// try { -// // get user info -// await store.dispatch('user/getInfo') -// -// next() -// } catch (error) { -// // remove token and go to login page to re-login -// await store.dispatch('user/resetToken') -// Message.error(error || 'Has Error') -// next(`/login?redirect=${to.path}`) -// NProgress.done() -// } -// } -// } -// } else { -// /* has no token*/ -// -// if (whiteList.indexOf(to.path) !== -1) { -// // in the free login whitelist, go directly -// next() -// } else { -// // other pages that do not have permission to access are redirected to the login page. -// next(`/login?redirect=${to.path}`) -// NProgress.done() -// } -// } -// }) -// -// router.afterEach(() => { -// // finish progress bar -// NProgress.done() -// }) +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + + if (hasToken) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + next({ path: '/' }) + NProgress.done() + } else { + const hasGetUserInfo = store.getters.name + if (hasGetUserInfo) { + next() + } else { + try { + // get user info + await store.dispatch('user/getInfo') + + next() + } catch (error) { + // remove token and go to login page to re-login + await store.dispatch('user/resetToken') + Message.error(error || 'Has Error') + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } + } + } else { + /* has no token*/ + + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + next() + } else { + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/src/store/modules/user.js b/src/store/modules/user.js index d13cc6a..5f50ba4 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,12 +1,11 @@ -import { getInfo, login, logout } from '@/api/user' +import { login, logout } from '@/api/user' import { getToken, removeToken, setToken } from '@/utils/auth' import { resetRouter } from '@/router' const getDefaultState = () => { return { token: getToken(), - name: '', - avatar: '' + info: {} } } @@ -19,11 +18,8 @@ const mutations = { SET_TOKEN: (state, token) => { state.token = token }, - SET_NAME: (state, name) => { - state.name = name - }, - SET_AVATAR: (state, avatar) => { - state.avatar = avatar + SET_INFO: (state, info) => { + state.info = info } } @@ -34,40 +30,39 @@ const actions = { return new Promise((resolve, reject) => { login({ username: username.trim(), password: password }).then(response => { const { data } = response - commit('SET_TOKEN', data.token) - setToken(data.token) - resolve() + // console.log('data -> ', data) + if (data.loginFail == null) { + if (data.status === 0) { + commit('SET_TOKEN', data.token) + setToken(data.token) + commit('SET_INFO', data) + resolve() + } else { + if (data.status === 4) { + reject('该用户账号已被封禁!') + } else if (data.status === 9) { + reject('该用户账号异常!') + } else { + reject(data.loginFail) + } + } + } else { + reject(data.loginFail) + } }).catch(error => { reject(error) }) }) }, - // get user info - getInfo({ commit, state }) { - return new Promise((resolve, reject) => { - getInfo(state.token).then(response => { - const { data } = response - - if (!data) { - return reject('Verification failed, please Login again.') - } - - const { name, avatar } = data - - commit('SET_NAME', name) - commit('SET_AVATAR', avatar) - resolve(data) - }).catch(error => { - reject(error) - }) - }) + getInfo({ state }) { + return state.info }, // user logout logout({ commit, state }) { return new Promise((resolve, reject) => { - logout(state.token).then(() => { + logout({ token: state.token }).then(() => { removeToken() // must remove token first resetRouter() commit('RESET_STATE') diff --git a/src/utils/auth.js b/src/utils/auth.js index 059af18..11b013b 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -1,6 +1,6 @@ import Cookies from 'js-cookie' -const TokenKey = 'vue_admin_template_token' +const TokenKey = 'jyjc_admin_token' export function getToken() { return Cookies.get(TokenKey) diff --git a/src/utils/request.js b/src/utils/request.js index 0c4ecc2..5b00268 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,6 +1,7 @@ import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '@/store' +import { getToken } from '@/utils/auth' // create an axios instance const service = axios.create({ @@ -18,12 +19,12 @@ service.interceptors.request.use( config => { // do something before request is sent - // if (store.getters.token) { - // // let each request carry token - // // ['X-Token'] is a custom headers key - // // please modify it according to the actual situation - // config.headers['X-Token'] = getToken() - // } + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['jyjc-Token'] = getToken() + } return config }, error => { diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 83b5be6..23ce19d 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -48,10 +48,10 @@ >Login -
- username: admin - password: any -
+ + + + @@ -64,7 +64,7 @@ export default { name: 'Login', data() { const validateUsername = (rule, value, callback) => { - if (!validUsername(value)) { + if (false || !validUsername(value)) { callback(new Error('Please enter the correct user name')) } else { callback() @@ -80,11 +80,17 @@ export default { return { loginForm: { username: 'admin', - password: '111111' + password: '123456' }, loginRules: { - username: [{ required: true, trigger: 'blur', validator: validateUsername }], - password: [{ required: true, trigger: 'blur', validator: validatePassword }] + username: [{ + required: true, trigger: 'blur' + // validator: validateUsername + }], + password: [{ + required: true, trigger: 'blur' + // validator: validatePassword + }] }, loading: false, passwordType: 'password', @@ -117,8 +123,9 @@ export default { this.$store.dispatch('user/login', this.loginForm).then(() => { this.$router.push({ path: this.redirect || '/' }) this.loading = false - }).catch(() => { + }).catch((failMessage) => { this.loading = false + this.$message.error(failMessage) }) } else { console.log('error submit!!') diff --git a/src/views/subject/edit.vue b/src/views/subject/edit.vue index c15b770..4745bba 100644 --- a/src/views/subject/edit.vue +++ b/src/views/subject/edit.vue @@ -125,7 +125,7 @@ export default { // console.log(this.edit) items({ id: this.row.id }).then(r => { this.edit.items = r.data.items - // console.log('edit.items -> ', this.edit.items) + console.log('edit.items -> ', this.edit.items) }) } },