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

    本文主要介紹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-模板權限管理相關內容請關注本站點。

    常見的電腦主板故障代碼有哪些問題(常見的電腦主板故障代碼有哪些圖片)
    可移動磁盤損壞如何修復,可移動磁盤壞了如何修復
    qq空間中的訪問權限設置方法在哪里(qq空間的訪問權限怎么設置)
    win7怎樣分區,win7如何分磁盤區域
    win10將日歷嵌入桌面(win 10如何添加日歷在桌面)
    vue-admin-template權限管理(vuetemplate admin)
    microsoft手機怎么樣,微軟手機怎么樣
    雷電模擬器下載沒反應(雷電模擬器下載了軟件打不開什么問題)
    vivo手機怎么設置呼吸燈
    傳奇手游變態版
    雙固態硬盤的好處和壞處,固態硬盤的好處和壞處
    二手電腦估價和成交價,回收二手電腦估價
    SSD硬盤壽命,固態硬盤使用壽命一般多久
    硬盤有問題死機(硬盤故障導致死機)
    時空光年老照片修復免費版,老照片翻新修復免費軟件
    適合新手的重裝win10教程步驟圖(適合新手的重裝win10教程步驟有哪些)
    愛奇藝會員怎么共享賬號登錄(愛奇藝會員怎么共享賬號給別人用)
    電腦桌面顏色發白(電腦顯示顏色泛白)
    字體 win7(win7系統字體在哪個文件夾)
    iphone怎么投屏到macbook上(蘋果如何投屏到macbook使用)
    主站蜘蛛池模板: 中文字幕一区二区三区永久| 天堂va在线高清一区| 亚洲性无码一区二区三区| 亚洲第一区在线观看| 成人无号精品一区二区三区| 久久国产精品一区免费下载| 一区二区免费国产在线观看| 日韩在线一区高清在线| 99精品国产一区二区三区2021| 丝袜人妻一区二区三区| 国产视频一区在线播放| 欧美日韩综合一区二区三区| 国产一区二区三区乱码网站| 人妻体内射精一区二区三四| 精品一区二区AV天堂| 精品国产一区二区三区香蕉| 亚洲美女视频一区| 亚洲国产情侣一区二区三区| 精品一区二区三区无码免费视频| 久久精品国产一区二区三区日韩| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲AV永久无码精品一区二区国产 | 无码人妻精品一区二区三区99仓本| 无码AV动漫精品一区二区免费| 国产精品成人99一区无码| 国产成人av一区二区三区在线观看 | 少妇一夜三次一区二区| 无码人妻久久一区二区三区免费丨| 日本一区二区在线播放| 亚洲男女一区二区三区| 亚洲综合一区国产精品| 国产成人欧美一区二区三区| 日韩视频在线一区| 国产成人精品一区二三区| 国产在线精品一区二区| 日本一区二区三区中文字幕| 中文字幕精品一区| 亚洲国产日韩在线一区| 国产高清一区二区三区视频| 真实国产乱子伦精品一区二区三区| 中文字幕一精品亚洲无线一区|