一:樹形結(jié)構(gòu)---權(quán)限樹顯示節(jié)點(設置權(quán)限頁):

同時樹形結(jié)構(gòu)的相互關(guān)聯(lián),導致父節(jié)點的key一旦返回,子節(jié)點便會全部選中。所以這里用一個數(shù)組halfSelectKeys去裝所有的父節(jié)點,返回選中的數(shù)據(jù)減去所有父節(jié)點。這樣渲染時就是通過子節(jié)點是否全部選中,去關(guān)聯(lián)父節(jié)點是否選上。(子節(jié)點如果全部選中,就算沒有數(shù)據(jù)里父節(jié)點的值,父節(jié)點也會勾選上)。

二:點確定提交時,將halfSelectKeys和選中節(jié)點數(shù)的據(jù)合集,并去重,作為參數(shù)傳遞。有兩種情況:
1無變更點確定。則是【返回數(shù)據(jù)父節(jié)點值的數(shù)組】和【返回數(shù)據(jù)選中子節(jié)點值的數(shù)組】合集傳遞即可。
2有變更點確定。在節(jié)點onCheck事件中可以拿到所有【半選中節(jié)點數(shù)組】和【已選中節(jié)點數(shù)組】,也可以在提交的時候取合集。
三:用戶登錄時顯示自己的菜單路由。
1,在登錄時,會返回用戶權(quán)限id數(shù)組,去匹配接口數(shù)據(jù)(全部路由的樹形結(jié)構(gòu),有id和path路由等參數(shù)),將有權(quán)限的路由path數(shù)組存儲在sessionStorage中。并刷新頁面(如不刷新,存儲的路由數(shù)據(jù)不會更新)
更新:將有權(quán)限的路由path數(shù)組存儲在狀態(tài)管理store中,sessionStorage可被用戶更改。



2,在app.jsx中的modifyRoutes方法中拿到本地全部路由,并匹配store中的路徑,重新 return 新的有權(quán)限的路由。注意路由的模糊匹配寫精確路由的后面,會先匹配精確路由,后匹配模糊路由。




3,在菜單級別也要過濾一下,匹配store中的路徑,展示有權(quán)限的菜單。



四,按鈕權(quán)限封裝。
1,約定每個模塊下的按鈕通用名字:查詢(query),新增(add),詳情(detail),編輯(edit),刪除(delete),導入(import),導出(export)。其他特殊按鈕自定義名稱。
2,路由改動,之前的重定向路由邏輯是:找第一個children下的最深層children為空的path。現(xiàn)加了按鈕權(quán)限,最深層的children為按鈕級別,所以需要修改重定向路由的方法:加上判斷,如children不為空,且children里的path包括'/',則繼續(xù)遞歸,否則判定為重定向路由。(因為約定按鈕權(quán)限的名稱不包括'/')

3,按鈕權(quán)限組件封裝邏輯。
(1)pathName為當前頁面路由(如:/production_scheduling/basic_info/enterprise),pathName與store中存儲的路由相比較,遞歸直到找到完全一致的路由,得到其children(如:['query','add', 'edit', 'delete']),并賦值為authBtnList。
(2)外層調(diào)用時,按鈕權(quán)限組件需包裹按鈕,并將此按鈕的type傳入。(如新增則傳入add)
(3)判斷authBtnList中是否含有type,如有則加載其組件。

