From eaec16c29daa703e0149f84a8fa57799e117e631 Mon Sep 17 00:00:00 2001 From: robincxiao Date: Mon, 1 May 2023 22:10:51 +0800 Subject: [PATCH 01/23] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=92=8C=E6=B3=A8?= =?UTF-8?q?=E5=86=8CAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/school.js | 4 +- src/api/user.js | 14 +- src/layout/components/Navbar.vue | 14 +- src/permission.js | 25 ++- src/router/index.js | 21 ++- src/store/modules/user.js | 32 +++- src/utils/request.js | 12 +- src/views/login/index.vue | 176 +++++++++++++----- vue.config.js | 12 +- ...56\351\242\230\346\200\273\347\273\223.md" | 11 ++ 10 files changed, 228 insertions(+), 93 deletions(-) diff --git a/src/api/school.js b/src/api/school.js index 4b6991e..1a8ffb5 100644 --- a/src/api/school.js +++ b/src/api/school.js @@ -1,9 +1,9 @@ import {get, post} from "@/api/request-common"; export function fetchSchool(data) { - return get('/vue-element-admin/school/list', data) + return get('/admin/school', data) } export function addSchool(data) { - return post('/vue-element-admin/school/add', data) + return post('/admin/school/save', data) } diff --git a/src/api/user.js b/src/api/user.js index b8b8741..82fcd24 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -2,7 +2,15 @@ import request from '@/utils/request' export function login(data) { return request({ - url: '/vue-element-admin/user/login', + url: '/user/login', + method: 'post', + data + }) +} + +export function register(data) { + return request({ + url: '/user/reg', method: 'post', data }) @@ -10,7 +18,7 @@ export function login(data) { export function getInfo(token) { return request({ - url: '/vue-element-admin/user/info', + url: '/admin/user/info', method: 'get', params: { token } }) @@ -18,7 +26,7 @@ export function getInfo(token) { export function logout() { return request({ - url: '/vue-element-admin/user/logout', + url: '/admin/user/logout', method: 'post' }) } diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index a0c98b7..7b5b4e9 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -12,7 +12,7 @@ - + @@ -22,11 +22,11 @@
- - + +
- - + + - Log Out + 退出登录
diff --git a/src/permission.js b/src/permission.js index ff5eaad..8cee817 100644 --- a/src/permission.js +++ b/src/permission.js @@ -20,21 +20,34 @@ router.beforeEach(async(to, from, next) => { // determine whether the user has logged in const hasToken = getToken() - if (hasToken) { - if (to.path === '/login') { + if (hasToken) {//已登录 + if (to.path === '/login') {//已登录如果访问的是登录页,跳转到首页 // if is logged in, redirect to the home page next({ path: '/' }) NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939 } else { // determine whether the user has obtained his permission roles through getInfo const hasRoles = store.getters.roles && store.getters.roles.length > 0 - if (hasRoles) { + if (hasRoles) {//有角色直接放行 next() + } else if(to.path === '/'){//没有角色,如果访问的是首页获取用户信息 + await store.dispatch('user/getInfo') + next() + NProgress.done() + return } else { try { // get user info // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] const { roles } = await store.dispatch('user/getInfo') + if(roles.length === 0) { + Message.error('没有访问权限') + next({ + ...from + }) + NProgress.done() + return + } // generate accessible routes map based on roles const accessRoutes = await store.dispatch('permission/generateRoutes', roles) @@ -54,13 +67,13 @@ router.beforeEach(async(to, from, next) => { } } } - } else { + } else {//未登录 /* has no token*/ - if (whiteList.indexOf(to.path) !== -1) { + if (whiteList.indexOf(to.path) !== -1) {//白名单直接放行 // in the free login whitelist, go directly next() - } else { + } else { //跳转到登录页面,并带上登陆成功后需要redirect的地址 // other pages that do not have permission to access are redirected to the login page. next(`/login?redirect=${to.path}`) NProgress.done() diff --git a/src/router/index.js b/src/router/index.js index 17b2c1b..79269e7 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -39,27 +39,28 @@ import nestedRouter from './modules/nested' * all roles can be accessed */ export const constantRoutes = [ + { + path: '/login', + component: () => import('@/views/login/index'), + hidden: true + }, + { + path: '/', + component: () => import('@/views/school/index'), + hidden: true + }, { path: '/redirect', component: Layout, hidden: true, children: [ { + //动态路由,将匹配所有内容并将其放在 `$route.params.path` 下 path: '/redirect/:path(.*)', component: () => import('@/views/redirect/index') } ] }, - { - path: '/login', - component: () => import('@/views/login/index'), - hidden: true - }, - { - path: '/', - component: () => import('@/views/school/index'), - hidden: true - }, { path: '/auth-redirect', component: () => import('@/views/login/auth-redirect'), diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 7800941..652d8eb 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,4 +1,4 @@ -import { login, logout, getInfo } from '@/api/user' +import { login, register, logout, getInfo } from '@/api/user' import { getToken, setToken, removeToken } from '@/utils/auth' import router, { resetRouter } from '@/router' @@ -7,7 +7,8 @@ const state = { name: '', avatar: '', introduction: '', - roles: [] + roles: [], + menus: [] } const mutations = { @@ -25,6 +26,9 @@ const mutations = { }, SET_ROLES: (state, roles) => { state.roles = roles + }, + SET_MENUS: (state, menus) => { + state.menus = menus } } @@ -43,6 +47,17 @@ const actions = { }) }) }, + //注册 + register({commit}, userInfo){ + const { username, password, repassword } = userInfo + return new Promise((resolve, reject) => { + register({ username: username.trim(), password, repassword }).then(response => { + resolve() + }).catch(error => { + reject(error) + }) + }) + }, // get user info getInfo({ commit, state }) { @@ -54,14 +69,15 @@ const actions = { reject('Verification failed, please Login again.') } - const { roles, name, avatar, introduction } = data + const { roles, menus, name, avatar, introduction } = data - // roles must be a non-empty array - if (!roles || roles.length <= 0) { - reject('getInfo: roles must be a non-null array!') - } + // // roles must be a non-empty array + // if (!roles || roles.length <= 0) { + // reject('getInfo: roles must be a non-null array!') + // } commit('SET_ROLES', roles) + commit('SET_MENUS', menus) commit('SET_NAME', name) commit('SET_AVATAR', avatar) commit('SET_INTRODUCTION', introduction) @@ -78,6 +94,7 @@ const actions = { logout(state.token).then(() => { commit('SET_TOKEN', '') commit('SET_ROLES', []) + commit('SET_MENUS', []) removeToken() resetRouter() @@ -97,6 +114,7 @@ const actions = { return new Promise(resolve => { commit('SET_TOKEN', '') commit('SET_ROLES', []) + commit('SET_MENUS', []) removeToken() resolve() }) diff --git a/src/utils/request.js b/src/utils/request.js index 2fb95ac..a69f72b 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -19,13 +19,13 @@ service.interceptors.request.use( // 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() + config.headers['token'] = getToken() } return config }, error => { // do something with request error - console.log(error) // for debug + console.log('request error', error) // for debug return Promise.reject(error) } ) @@ -48,7 +48,7 @@ service.interceptors.response.use( // if the custom code is not 20000, it is judged as an error. if (res.code !== 20000) { Message({ - message: res.message || 'Error', + message: res.msg || 'Error', type: 'error', duration: 5 * 1000 }) @@ -66,15 +66,15 @@ service.interceptors.response.use( }) }) } - return Promise.reject(new Error(res.message || 'Error')) + return Promise.reject(new Error(res.msg || 'Error')) } else { return res } }, error => { - console.log('err' + error) // for debug + console.log('response err', error) // for debug Message({ - message: error.message, + message: error.msg || "Server Response Error", type: 'error', duration: 5 * 1000 }) diff --git a/src/views/login/index.vue b/src/views/login/index.vue index b873caf..c28a776 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -3,7 +3,7 @@
- Login + + + + + + + + + + + -
+ {{isLogin ? '登 录' : '注 册'}} + {{isLogin ? '注 册' : '登 录'}} + + - - - Can not be simulated on local, so please combine you own business simulation! ! ! -
-
-
- -
diff --git a/src/views/setting/staff.vue b/src/views/setting/staff.vue index e10963c..ffae332 100644 --- a/src/views/setting/staff.vue +++ b/src/views/setting/staff.vue @@ -83,7 +83,7 @@ - + {{item.name}} @@ -166,7 +166,7 @@ export default { this.authDialogVisible = true this.authForm.id = row.id row.roles.map(item => { - this.authForm.role_ids.push(item.name) + this.authForm.role_ids.push(item.id) }) }, deleteItem(row) { @@ -231,10 +231,6 @@ export default { }) }, async commitAuth() { - this.authForm.role_ids = this.authForm.role_ids.map(name => { - const r = this.roles.find(role => role.name === name) - return r.id - }) const res = await setRole(this.authForm) this.authDialogVisible = false if (res.code === 20000) { From f839d80d99354e8d4da371d88d2f18d217c85c58 Mon Sep 17 00:00:00 2001 From: robincxiao Date: Sat, 13 May 2023 22:08:18 +0800 Subject: [PATCH 19/23] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/platform.js | 18 +++ src/layout/components/Navbar.vue | 19 ++- src/permission.js | 7 +- src/router/index.js | 5 + src/store/getters.js | 1 + src/store/modules/user.js | 14 +- src/utils/auth.js | 13 ++ src/views/platform/index.vue | 240 +++++++++++++++++++++++++++++++ src/views/setting/staff.vue | 2 +- 9 files changed, 313 insertions(+), 6 deletions(-) create mode 100644 src/api/platform.js create mode 100644 src/views/platform/index.vue diff --git a/src/api/platform.js b/src/api/platform.js new file mode 100644 index 0000000..b81ff8e --- /dev/null +++ b/src/api/platform.js @@ -0,0 +1,18 @@ +import {get, post} from './request-common' + + +export function fetchRoles(data) { + return get('/platform/role', data) +} + +export function createRole(data) { + return post('/platform/role/save', data) +} + +export function updateRole(data) { + return post('/platform/role/update', data) +} + +export function removeRole(data) { + return post('/platform/role/delete', data) +} diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index ded7129..6a98aea 100644 --- a/src/layout/components/Navbar.vue +++ b/src/layout/components/Navbar.vue @@ -4,7 +4,8 @@ -
我的网校列表
+
+ {{this.$route.fullPath === '/' ? '我的网校列表' : '平台角色设置'}}