Merge remote-tracking branch 'origin/feature-yaojie' into feature-guji

This commit is contained in:
GUjiYN 2024-04-15 12:58:18 +08:00
commit 240cafe11d
7 changed files with 42 additions and 18 deletions

View File

@ -18,9 +18,10 @@ export function login(data) {
export function getInfo(token) { export function getInfo(token) {
return request({ return request({
url: '/user/profile/get', url: '/user/profile/get',
method: 'post', method: 'get',
params: {token}, // params: {token},
headers: { headers: {
'Authorization':'Bearer '+token,
'Timestamp': getCurrentTimestamp() 'Timestamp': getCurrentTimestamp()
} }
}); });
@ -31,8 +32,8 @@ export function logout(token) {
return request({ return request({
url: '/auth/logout', url: '/auth/logout',
method: 'get', method: 'get',
params: { token },
headers: { headers: {
'Authorization':'Bearer '+token,
'Timestamp': getCurrentTimestamp() 'Timestamp': getCurrentTimestamp()
} }
}); });

View File

@ -62,6 +62,7 @@ import Search from '@/components/HeaderSearch';
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import { CaretBottom } from '@element-plus/icons-vue'; import { CaretBottom } from '@element-plus/icons-vue';
export default defineComponent({ export default defineComponent({
components: { components: {
Breadcrumb, Breadcrumb,
@ -86,6 +87,8 @@ export default defineComponent({
store.app().toggleSidebar(); store.app().toggleSidebar();
}, },
async logout() { async logout() {
console.log('5989569898')
// store.user().login()
await store.user().logout(); await store.user().logout();
this.$router.push(`/login?redirect=${this.$route.fullPath}`); this.$router.push(`/login?redirect=${this.$route.fullPath}`);
} }

View File

@ -10,6 +10,7 @@ NProgress.configure({ showSpinner: false }); // NProgress Configuration
const whiteList = ['/login', '/auth-redirect']; // no redirect whitelist const whiteList = ['/login', '/auth-redirect']; // no redirect whitelist
//每次路由变动,都会调用这个路由守卫
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
console.log('router.beforeEach', to.path, from.path); console.log('router.beforeEach', to.path, from.path);
// start progress bar // start progress bar
@ -21,31 +22,42 @@ router.beforeEach(async (to, from, next) => {
// determine whether the user has logged in // determine whether the user has logged in
const hasToken = getToken(); const hasToken = getToken();
console.log('88888',hasToken) console.log('88888',hasToken)
if (hasToken) { if (hasToken) {
//有token
// 且前往登录
if (to.path === '/login') { if (to.path === '/login') {
// if is logged in, redirect to the home page // if is logged in, redirect to the home page
NProgress.done(); // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939 NProgress.done(); // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939
next({ path: '/' }); next({ path: '/' });
} else { } else {
// 有token但是不去登录
// determine whether the user has obtained his permission roles through getInfo // determine whether the user has obtained his permission roles through getInfo
// const hasRoles = userStore().roles && userStore().roles.length > 0; // const hasRoles = userStore().roles && userStore().roles.length > 0;
const hasRoles = true; const hasRoles = true;
// console.log('hasRoles=', hasRoles); // console.log('hasRoles=', hasRoles);
// 如果用角色
if (hasRoles) { if (hasRoles) {
// 继续执行
const accessRoutes = await permissionStore().generateRoutes(['admin']);
accessRoutes.forEach(item => {
router.addRoute(item);
});
next(); next();
} else { } else {
// 没有角色
try { try {
// get user info // get user info
// note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const infoRes = await userStore().getInfo() as any; const infoRes = await userStore().getInfo() as any; //获取角色,调用查询个人信息的接口
console.log('permissionuserinfor:',infoRes) console.log('permissionuserinfor:',infoRes)
let roles = []; let roles:any = [];
if (infoRes.roles) { if (infoRes.roles) {
roles = infoRes.roles; roles = infoRes.roles;
} }
roles = ['admin']
// generate accessible routes map based on roles // generate accessible routes map based on roles
const accessRoutes = await permissionStore().generateRoutes(roles); const accessRoutes = await permissionStore().generateRoutes(roles);
// console.log('accessRoutes=', accessRoutes) // console.log('accessRoutes=', accessRoutes)
@ -71,6 +83,7 @@ router.beforeEach(async (to, from, next) => {
} }
} }
} else { } else {
// 没有token
/* has no token*/ /* has no token*/
if (whiteList.indexOf(to.path) !== -1) { if (whiteList.indexOf(to.path) !== -1) {
// in the free login whitelist, go directly // in the free login whitelist, go directly

View File

@ -55,10 +55,15 @@ export default defineStore({
this.routes = constantRoutes.concat(routes); this.routes = constantRoutes.concat(routes);
}, },
generateRoutes(roles: string[]) { generateRoutes(roles: string[]) {
console.log("asdasd")
let accessedRoutes; let accessedRoutes;
if (roles.includes('teacher_user')) { if (roles.includes('admin')) {
console.log("123")
accessedRoutes = asyncRoutes || []; accessedRoutes = asyncRoutes || [];
} else { } else {
console.log("456")
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles); accessedRoutes = filterAsyncRoutes(asyncRoutes, roles);
} }
this.setRoutes(accessedRoutes); this.setRoutes(accessedRoutes);

View File

@ -57,6 +57,7 @@ export default defineStore({
const { data } = response; const { data } = response;
this.token = data.token; this.token = data.token;
setToken(data.token); setToken(data.token);
console.log("token", this.token)
router.push('/') router.push('/')
resolve(); resolve();
console.log('2222',response) console.log('2222',response)
@ -76,11 +77,11 @@ export default defineStore({
if (!data) { if (!data) {
reject('Verification failed, please Login again.'); reject('Verification failed, please Login again.');
} }
const { id,username,address,phone,email,age,signature,avatar,nickname,sex,description,roles } = data; const { id,username,address,phone,email,age,signature,avatar,nickname,sex,description } = data;
// roles must be a non-empty array // roles must be a non-empty array
if (!roles || roles.length <= 0) { // if (!roles || roles.length <= 0) {
reject('getInfo: roles must be a non-null array!'); // reject('getInfo: roles must be a non-null array!');
} // }
this.id = id; this.id = id;
// this.roles = roles; // this.roles = roles;
// this.roles =['admin']; // this.roles =['admin'];
@ -103,17 +104,17 @@ export default defineStore({
// user logout // user logout
logout():Promise<void> { logout():Promise<void> {
console.log("token",this.token)
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
apiLogout(this.token).then(() => { apiLogout(this.token).then(() => {
this.token = ''; this.token = '';
this.roles = []; this.roles = [];
console.log('退出',this.token)
removeToken(); removeToken();
resetRouter(); resetRouter();
// reset visited views and cached views // reset visited views and cached views
// to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485 // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
tagsViewStore().delAllViews(); tagsViewStore().delAllViews();
resolve(); resolve();
}).catch(error => { }).catch(error => {
reject(error); reject(error);
@ -137,11 +138,11 @@ export default defineStore({
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const infoRes = await this.getInfo() as any; const infoRes = await this.getInfo() as any;
let roles = []; let roles : any[] = [];
if (infoRes.roles) { if (infoRes.roles) {
roles = infoRes.roles; roles = infoRes.roles;
} }
roles = ['admin']
resetRouter(); resetRouter();
// generate accessible routes map based on roles // generate accessible routes map based on roles

View File

@ -1,6 +1,6 @@
import axios from 'axios'; import axios from 'axios';
import store from '@/store'; import store from '@/store';
import { getToken } from '@/utils/auth'; import {getToken, removeToken} from '@/utils/auth';
const BaseURL ='https://nbxt.oa.x-lf.cn' const BaseURL ='https://nbxt.oa.x-lf.cn'
// create an axios instance // create an axios instance
@ -50,7 +50,8 @@ service.interceptors.response.use(
*/ */
response => { response => {
const res = response.data; const res = response.data;
console.log('999999',res) // console.log("removeToken:",removeToken())
console.log('999999',response)
// if the custom code is not 20000, it is judged as an error. // if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000 && res.code !== 200) { if (res.code !== 20000 && res.code !== 200) {
ElMessage({ ElMessage({

View File

@ -32,7 +32,7 @@ export default defineComponent({
}; };
}, },
created() { created() {
this.fetchData(); // this.fetchData();
}, },
methods: { methods: {
statusFilter(status) { statusFilter(status) {