<var id="mprk0"><track id="mprk0"></track></var>

  • <blockquote id="mprk0"></blockquote>
    <blockquote id="mprk0"></blockquote><video id="mprk0"><thead id="mprk0"></thead></video>
      <blockquote id="mprk0"><wbr id="mprk0"></wbr></blockquote>

    1. <i id="mprk0"></i>

      vue-admin-template權限管理(vuetemplate admin)

      發布時間:2023-10-23
      本文主要介紹vue-admin-模板權限管理,下面一起看看vue-admin-模板權限管理相關資訊。
      在vue-admin-template角色權限設置(1)中提到了如何根據用戶角色控制訪問,但是在項目的實際使用中發現了一些存在的問題。下面主要針對這些存在的問題進行修改和完善。
      1頁面刷新后頭像等個人信息消失的原因:頁面登錄成功后,項目通過getinfo方法獲取個人信息并存儲在vuex中,但頁面刷新后,vuex中的數據會丟失。這是因為js代碼運行在內存中,代碼運行時的所有變量和函數也都存儲在內存中。刷新頁面后,之前應用的內存被釋放,腳本代碼被重新加載,變量被重新分配,所以這些數據如果要存儲的話,必須外部存儲。解決方案:獲取數據后,在存儲器中保存數據的副本。這里需要注意的是:盡量不要在localstorage中存儲過多的數據,否則會影響頁面加載性能。從 @/api/用戶 從 amp導入{ gettoken,settoken,removetoken };;@/utils/auth ;從 amp導入{ resetrouter };;@/路由器 const getdefaultstate == { return {//使用localstorag: g: local storage . getitem( ;姓名和名稱。;)刷新后還存在?json . parse(local storag: ; 、avatar: local storage . getitem( ;阿凡達 ) ?json . parse(local storag: ; 、rol: local storage . getitem( ;角色 ) ?json . parse(local storag:[]} }常量統計e = getdefaultstateconst mutations = { r:(state)= { object . assign(stat:(stat:(stat:(state,avatar)= { state . avatar = avatar } } const actions = {//用戶登錄登錄({ commit },userinfo) { const { username,password } = userinfo返回新的承諾((resolve,reject){ log in然后(response = { const { data } =響應提交( 設置令牌 ,data . token)settoken(data . token)resolve})。catch(error = { reject(error)} })},//獲取用戶信息getinfo({ commit,state }){ return new promise((resolve,reject) = { getinfo(state.token)。然后(response = { const { data } = response;如果(!數據){退貨拒絕( 驗證失敗,請重新登錄! )} const {name,roles,avatar } = data//在lo備份個人信息。本地存儲。;角色 ,json。stringify (roles))本地存儲。;角色 ,json。stringify (roles))本地存儲。;阿凡達 ,json。stringify(頭像))如果(!roles | | roles . length = 0){ reject( ;您不是有效身份! )}//在local storage if(roles . includes( ;商店經理 )){本地存儲。setitem( ;許可 ,json。stringify([ ;添加 , 編輯和刪除。;]);} else if(roles . includes( ;收銀員 )||角色. includes( ;技術員和技術員。;)||角色. includes( ;造型師 ){本地存儲。setitem( ;許可 ,json。stringify([]);}提交( set _ name ,name)提交( 設置角色 角色)提交( 設定_頭像 ,頭像)解析(數據)})。catch(error = { reject(error)} })},//用戶注銷注銷({ commit,state }){ return new promise((resolve,reject) = {logout (state。token)。然后(= { remove token//must remove token first reset router//記得清空localstorage。remove item( ;許可 ).localstorage.removeitem;姓名和名稱。;)local storage . remove item( ;角色 )local storage . remove item( ;阿凡達 )提交( 重置狀態 )resolve })。貓ch(error = { reject(error)} })},//移除令牌resettoken({ commit }){ return new promise(resolve = { remove token//必須先移除令牌//記得清除local storage . remove item( ;許可 )local storage . remove item( ;姓名和名稱。;)local storage . remove item( ;角色 )local storage . remove item( ;阿凡達 ).提交( 重置狀態 )resolve} } export default {namespac: true,state,mutations,actions}這樣刷新后vuex中的值依然存在~
      2.頁面刷新后,動態路由無法跳轉到/。一方面,頁面刷新后對應的vuex的值失效,另一方面,即使該值仍然有效,但是在addroutes動態添加路由之前,從靜態找到頁面,導致一直跳轉到404。解決方案:路線可以存儲在localstorage中。因為之前已經持久化了角色,所以可以在路由預保護中直接處理刷新情況。主要思想是在路由中加入動態路由表后,404路由也是動態加入的!需要注意的是,多次調用router.addroutes方重復添加路由,并警告路由名重復,可以重新打包一個方法。將router/index.js中的addroutes方法重新打包//解決路由名重復的問題。$ add routes = params = { router . match: router.options.routes//key代碼})。matcherrouter . add routes(params);};刪除*查找404 { path : ;* ,redirect : ;/404 ;,hidden: true}在路由器/index.js的靜態路由中在rc/permission.js中,刷新情況在router.before each (async (to,from,next) = { //啟動進度條nprogress.start //設置頁面標題document . title = get page title(to . meta . title)//判斷用戶是否已經登錄const hastoken = gettokenif(hastoken){ if(to . path = = = ;/登錄 ){ //如果登錄了,下一步重定向到首頁({ path : ;/ ;}) nprogress。done} else {//添加routes后第一次訪問添加的路由時,屏幕會是空白的,因為剛添加routes//后就立即訪問添加的路由,但是此時添加routes的執行還沒有結束,所以可以 找不到新添加的路由,導致屏幕空白。所以你需要再次訪問路線。//此時將使用next ({… to,replac: true })來確保在添加路由時,已經完全加載了動態添加的路由。//replac: true in next({…to,replac: true })只是一個設置信息,告訴vue在這個操作之后,你可以 t通過瀏覽器的后退按鈕返回到以前的路線。//通過getinfo判斷用戶是否獲得了權限角色const has roles = store . getters . roles store . getters . roles . length 0;if (hasroles) {//如果正在刷新if (store。狀態。許可。路線。length = = 0){//生成可訪問的路由const accessroutes = await store。派遣( 許可/生成路線。;,存儲。getters.roles)根據角色;//動態添加路由路由器呃。$ add routes(acc: ;* 、redirect: ;/404 ;,hidd:真})console . log(router . options . routes)下一個({...對,replac:真});} else { next} } else { try {//get userinfo//注意:角色必須是數組形式,比如[ ;行政及管理。;]或者,[ ;開發商 ,編輯 ] const {roles} = awaitstore。派遣( 用戶/getinfo ;)//根據角色生成可訪問的路由const access routes = awaitstore。派遣( 許可/生成路線。;,角色);//動態添加路由路由器。$ add routes(acc: ;* 、redirect: ;/404 ;,hidd:為真})//確保addroutes已完成//將其設置為真,以便導航不會留下歷史記錄({...對,replac:是真的});} catch (error) { //刪除令牌并轉到登錄頁面to重新登錄等待store.dispatch。;用戶/重置令牌 )message . error(error | | ;有錯誤 )下一個(`/登錄?redirect = $ { to . path } `)n progress . done} } } else {/*沒有標記*/ if (whitelist.indexof(to.path)!== -1) { //在免費登錄白名單中,直接進入next } else { //其他沒有訪問權限的頁面被重定向到登錄頁面。下一個(`/登錄?重定向= $ {到。path }`) nprogress。done} })it ;在這里刷新沒有問題??!結束了。
      標簽:
      路由頁面
      了解更多vue-admin-模板權限管理相關內容請關注本站點。
      上一個:筆記本硬盤線斷了,筆記本硬盤線斷了怎么解決
      下一個:電腦開機沒反應如何解決問題(電腦開機沒反應如何解決視頻)

      電腦系統分為哪幾種類型(電腦系統分別有哪些)
      mac如何快速切換輸入法(macbook切換輸入法按哪個鍵)
      生命中的香遇知之惜之
      RC-02K3922FT,F 0402 39.2K現貨購買,風華 0402 39.2KΩ ±1% 1/16W
      金立s6橫屏怎么設置,金立手機怎么橫屏
      中央復歸能重復動作的事故信號啟動回路
      蘋果筆記本系統為什么安裝不了(新款蘋果筆記本不能裝windows)
      雞爪槭在江蘇北部的引種實驗
      雪松種苗的繁殖與注意事項
      0201 274R ±1%貼片電阻
      亚洲国产精品久久久久久动画_av中文字幕1区_超清无码一区二区三区_日韩高清无码一二三区_久久综合九色综合97_久久久_久久久久久久久久国产