From 835b399f10640d1a78fe52aaa8f9f2b0198fccfd Mon Sep 17 00:00:00 2001 From: "du.meimei" Date: Sun, 27 Apr 2025 13:45:07 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(user):=20=E6=B7=BB=E5=8A=A0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E8=A7=92=E8=89=B2=E8=8E=B7=E5=8F=96=E5=92=8C=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 user store 中添加 roles 状态和 SET_ROLES mutation - 在 getters 中添加 roles 属性 - 修改 permission.js 中的逻辑,增加对用户角色的判断 - 更新 request.js 中的 401 错误处理方式 - 在 404.vue 中更新版权信息 --- public/favicon.ico | Bin 4286 -> 2788 bytes src/assets/js/utils/permission.js | 28 ++++++++++++++++------------ src/assets/js/utils/request.js | 14 ++++++-------- src/store/getters.js | 3 ++- src/store/modules/user.js | 14 +++++++++----- src/views/app/404.vue | 7 ++++++- 6 files changed, 39 insertions(+), 27 deletions(-) diff --git a/public/favicon.ico b/public/favicon.ico index d48ccc2413fd74e0bb82f8011b3710c023585570..ed859c93780870f6a665da6eef9129d7be2aa7be 100644 GIT binary patch literal 2788 zcmX9<2{aVy7ax*cWl8j;h6>Mrj3KmVnPH5jF{p$w3}cMFB1>ef4YFiQk75{w7DUUF zqGTzrJVmq;%D&Fn&3)tif9HJPckXw8zk9!PzkAMQ5p6AGBzH<85C|DdJeDLl%{P|# zrj30@?hyhZJWjNBzzIwnf3T#$RTrRmK$;7fdBI64ob&_>21qd=nF41hfTID)6YM=V zXcGRg)enx+K*}G){ej>Kj?@jIjNe8C0YPvn?FYs*AiHmnPf@|$10(`ATvC3J>I$|V zfTh7<8kl=Qx(jRx0LcIl4TLmj5I{h~dci?&FrmR2D$LEz;l1EEZ6o9VCH7Qs^#C`I zjYm#TPYbdO;w$<>00rdzK!pMOe8AZQ=_tDe!A%LDC-mzrf)44Xo48uiv<}+SR*Kl)uv4 zw#Y8${TStb?Vlf=f#Go&{tn+i!rf=^`Vl;0gMBIxW8iu?q%a`=Z+_KdzF9n<%-~1S z_%D0b`B(AU@3`r^fl+}zyQSPKi3z{<_Z(Lr4h!I~lvVqun86NfXea`Hlmj&|Ex z(tE#s`?fM+-W0)(VKNhra*HWq?y`o(n#l=FfoB6Nx9cOv$RXV2_SAQ6YrnpHdl;Ob zYu_%pd7kF`xz=Z}r7(iW=&7qbS>HZ+wiVPSyN$D#_?_ zuxqnEf8ay?`QNI?&W6`NEzbM<8mTfjFYj{M$9C&el30{I`2a2gDS2I%T#>Z{efjcY zqKv+GXExzb3A@Z%HoN6o*Zsn#6eII^G9zgZNAY^F7$I-vsg*X`*r{i0hd2RkD=RzO z-1h9FBDpcO{s?iben>I;+IHPY6Mcu$U&f;-O^3ZE^D9sI7B8$`8d! z6gN}Kw|iZRsWZWZ)gNM8D^MfaQ;m#D)a5v$l9U!_F#~$WOIA)c>tE#T1OcswscVv6 z^dNK;iN2F^`B0VoBCMD@X4^%+;IVdS^B#lFl!ukRm{UQ?_&|+jA~vS@%0aK#r}&ko zCwpFhZtUypF42AK8xi{6O`|T9sE<_B4xgQAYpuytw(VOhzW3^Lk^wtIG*YCDlGyyr zW~{#|)TA8KfLB)TjU82;aq9cmee#E)s@b`g4D&6%LQ0OM4^X>$nxrzw+Si%SI<~6x zcp%gzIg61t79lgca&9EWE4aOk*%5|GTAn^o(RW1zVs;Pyn1jm&x7AR$)i#R?zs}N1 zem`J-Rj&X2i4YLo&Qk556fJF;;d(|Gs@NjBOM4gZilWSS9j+bgtZ=MUEY2;O`rg1K zU&!pVmM_!j_!=K?eh*c;{r5ARdU^2gX-)(p1-msdc}ObT&KjM?laRn8cQK>y`l|LP z3vbirs)s8lA`MKW?Sfva1Ui3UUogE`H?fyJ(`W2I*_1LQL0i#3=5BbRiavR~Qu7aa zdHLTl>=LR+XtDC2b)`jl!Sea;^qVzGwI(t%DBldBZN#sZ6AT{ZtoR$ODD9(Pultb7 z1C;kGQY^N$`SoiX*Xj>{YN}(<&+(%t_GSy=CR_jcBy)X4pYd`6sf`f&c2>}938uo5 z6l>ppTrKmVsv4WL8fclE!V(f+Yo01hQm5&L%F%Xo9SOd2YquFXVqc+dVu|P2p;K;l}S&`}a zPYNUH{dem%cXvD*M+k}1r)t-kUsE*7@-+Q>AKdON?-70XKlEix<4G|~@e!$`N+T9r zJ55o3Z`h*(tNlXa zD1H;~TfbRuqP-5URB5;-|z18!mB%$%s2fe#T3Y#o>q_3Y--Z}@ixQH zaK9}w>cJbS0#!8Uw2u5pY2d(!x{`s>PeZ$w)M^ynGzxsN4q)u-;_C- z>L>gvR%EBCHYkWBUoEZCrEe#-SZ6su*Qz;r>AdHK9ioB^nSd zYX()bCp6K6TI{~~_JFnC&w~etXSM&xxuMza+hj4+0SK7?UD|mueS+?QBHYvDIZv2E$y?9eWHVmm>g2XuN z-IY0Kx@=j<+MyL=Q92zKWz?xB``(svEf3$)@rHOHD@BKQ$#rkTY{ZfuMZo8#trKM5El|QpxC8z7%_=sSBBP?;Y*!!lG*#7`XoTl6W literal 4286 zcmc(j*G?Nz5QaBzkgHsC6Dg08XM`IB5=BVJG-1;b#q^E~#TXDaz4u;hCi{&t*2;1N zB4yC=u1}fy|7pj;Vx{C~x=jUhn$as2s z5(Z~pUS4$YZu7QQOy}d{qg-BIe#kcV-rnAH@Qw}!Hkp5af0tA$r8-N&@$m3al6`Ew zzP`%+{k@!@pUck9j;yS#NIV{w)zwv5SXhv`xj9)|Ta&}XL-h$*%qPWsQD_~za6CFX zlD)k>xwyEHo0}V*Gyh}f_V!ly#8zVx3nKumhp|!O&XWYE!@f$ggzrgVo z+oqRXK*q<%wMKZ)7YFQ9U-{}X7ap6lCw6(afi2$A+1S{q`3N_|XHVl!yvSF4&l>X# z-m`NbJ=Sknv%PSn4os*+1Rqcrh!-!q(PiB6|H#OQOifMc;M~&ElJ=XSp&|9-?Ch+J zjg86n_O|AES67$rrDoXAK*#9lsBnfpMGt9iZdPpB_Q6hn0r%wOq%1ElDS!*4^E$JqIqewY7>RnMlg|`nuvK2eFwe2G}M}@J1#kCX^TN_?3Y$ zk3NJsdJ??BHat8mi9|xz_V@RtqoX5p4o>Xn+0xRYJc)_<0Q=-Ud=Tv5Z@3c^asqr7 z2Vw<(@WLCtgM))=A1uiH{Jiw{_q&N8x|j2a`H3@L``F^{K(ONv_=Ok~3u4H9!+U#s zyXs~Q{n$n5waH{M)928Stw)=J0+t}F9cdvc;lOG87&6jXx*nBJ&QyavY`x|}u z()ja^Eqn?mpU%K}k6sM;gR}S--=$M&#bj|~oq>Ot^UjkWdd6L| zTu~!`KWweCvQl##9ofDI3umqF%rERKHoSYi@0=rU2(?4)BiY>T4E*qCbSbKQa_wVp zse|+Q3BOiUROHP&(+6IBLyxmO|11X1SABpW*zgLmVvh;7xqJAn zRaI4$xx+YTIzRG+C&F(>e8KO?zP>)KZSsSDv9-0Ov8DghXBrwBv@hT*@O{>{;RJ)# zG_{m;?-=?U_bWXw5C~|0C12=6#0}v*XHCynpYVW_*WYT$^I?7EtDFmAg%kR-2lM}u QZy^l-a?Sn^@V}ma0I7B=2LJ#7 diff --git a/src/assets/js/utils/permission.js b/src/assets/js/utils/permission.js index 208ae10..eb15e08 100644 --- a/src/assets/js/utils/permission.js +++ b/src/assets/js/utils/permission.js @@ -16,20 +16,24 @@ router.beforeEach((to, from, next) => { next({ path: '/login' }) NProgress.done() } else { - // 判断当前用户是否已拉取完user_info信息 - store - .dispatch('user/getInfo') - .then(() => { - store.dispatch('app/GenerateRoutes').then(() => { - next() + if (store.getters.roles.length === 0) { + // 判断当前用户是否已拉取完user_info信息 + store + .dispatch('user/getInfo') + .then(() => { + store.dispatch('app/GenerateRoutes').then(() => { + next() + }) }) - }) - .catch(err => { - store.dispatch('user/logout').then(() => { - Message.error(err) - next({ path: '/ogin' }) + .catch(err => { + store.dispatch('user/logout').then(() => { + Message.error(err) + next({ path: '/ogin' }) + }) }) - }) + } else { + next() + } } } else { // 没有token diff --git a/src/assets/js/utils/request.js b/src/assets/js/utils/request.js index 5c77599..ae93703 100644 --- a/src/assets/js/utils/request.js +++ b/src/assets/js/utils/request.js @@ -1,7 +1,8 @@ import axios from 'axios' import { MessageBox, Message, Loading } from 'element-ui' import store from '@/store' -import { getToken } from '@/assets/js/utils/auth' +import { getToken, removeToken } from '@/assets/js/utils/auth' +import router from '@/router' // create an axios instance const service = axios.create({ @@ -61,15 +62,12 @@ service.interceptors.response.use( if (res.code === 401) { MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { confirmButtonText: '重新登录', - cancelButtonText: '取消', + showCancelButton: false, type: 'warning' + }).then(() => { + removeToken() + router.push({ path: '/login' }) }) - .then(() => { - store.dispatch('user/resetToken').then(() => { - location.reload() - }) - }) - .catch(() => {}) } else if (res.code === 500) { Message({ message: res.message, diff --git a/src/store/getters.js b/src/store/getters.js index 08fc58d..1ca0970 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -2,8 +2,9 @@ const getters = { sidebar: state => state.app.sidebar, device: state => state.app.device, token: state => state.user.token, + roles: state => state.user.roles, avatar: state => state.user.avatar, name: state => state.user.name, - sidebarList: state => state.user.sidebarList, + sidebarList: state => state.user.sidebarList } export default getters diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 6f46619..a1c60b1 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -4,7 +4,8 @@ import { getToken, setToken, removeToken } from '@/assets/js/utils/auth' const state = { token: getToken(), name: '', - avatar: '' + avatar: '', + roles: [] } const mutations = { @@ -16,6 +17,9 @@ const mutations = { }, SET_AVATAR: (state, avatar) => { state.avatar = avatar + }, + SET_ROLES: (state, roles) => { + state.roles = roles } } @@ -51,12 +55,12 @@ const actions = { return new Promise((resolve, reject) => { getInfo(state.token) .then(res => { - if (!res) { - reject('Verification failed, please Login again.') + let roles = res.content.content.roleCodes || [] + if (roles && roles.length > 0) { + // 验证返回的roles是否是一个非空数组 + commit('SET_ROLES', roles) } - commit('SET_NAME', res.content.content.userName) - // commit('SET_AVATAR', res.avatar) resolve(res) }) .catch(error => { diff --git a/src/views/app/404.vue b/src/views/app/404.vue index cd28027..b7ba9e8 100644 --- a/src/views/app/404.vue +++ b/src/views/app/404.vue @@ -11,7 +11,12 @@
OOPS!
{{ message }}
From 777f509c1a7dcbc9b84d9dd3be91b7472d06f686 Mon Sep 17 00:00:00 2001 From: "du.meimei" Date: Sun, 27 Apr 2025 17:37:44 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:request=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/js/utils/request.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/assets/js/utils/request.js b/src/assets/js/utils/request.js index ae93703..70f1302 100644 --- a/src/assets/js/utils/request.js +++ b/src/assets/js/utils/request.js @@ -81,6 +81,7 @@ service.interceptors.response.use( type: 'error', duration: 5 * 1000 }) + return Promise.reject(res) } else { if (!res.content.result || res.content.result !== '0') { Message({ @@ -94,12 +95,13 @@ service.interceptors.response.use( } }, error => { + endLoading() Message({ message: error.message, type: 'error', duration: 5 * 500 }) - return Promise.reject(error) + return } ) From e190f9a703ea8949c1a4b8179a93c286092869b7 Mon Sep 17 00:00:00 2001 From: "du.meimei" Date: Sun, 27 Apr 2025 17:41:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:request=20back=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/js/utils/request.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/assets/js/utils/request.js b/src/assets/js/utils/request.js index 70f1302..8c80322 100644 --- a/src/assets/js/utils/request.js +++ b/src/assets/js/utils/request.js @@ -50,6 +50,9 @@ service.interceptors.request.use( service.interceptors.response.use( response => { endLoading() + if (response.config.back) { + return response.data + } // 二进制数据则直接返回 if ( response.request.responseType === 'blob' ||