php短視訊原始碼,vue遞迴動態載入選單
阿新 • • 發佈:2022-05-13
php短視訊原始碼,vue遞迴動態載入選單
/**
* 靜態路由懶載入
* @param view 格式必須為 xxx/xxx 開頭不要加斜槓
* @returns
*/
export const loadView = (view) => {
return (resolve) => require([`@/views/${view}.vue`], resolve)
}
export function GetMenuData(menuRouters,data){
if(data=='' ||data==undefined || data.length==0 ){
return Message.success('選單資料為空')
}
let menuList = JSON.parse(JSON.stringify(data)); //深拷貝
// let menuRouters = []
// const menuRouters = Object.assign([], asyncRoutes)
menuList.forEach((m, i) => {
if (m.upid == '0') { //最外層,沒有父層的
let module = {
path:m.path,
children: [],
component: m.component === '#' ? Layout : loadView(m.component),
name: m.code,
hidden: m.hiddenStatus === 0, // 狀態為0的隱藏
redirect: m.redirect,
meta: { id: m.id,title: m.metaTitle, icon: m.metaIcon},
}
menuRouters.push(module);
}
})
function convertTree(routers) { //遞迴新增children
routers.forEach(r=>{
menuList.forEach((m,i)=>{
if(m.upid && m.upid == r.meta.id){
if(!r.children) {r.children=[]; };
// let key=m.url.lastIndexOf('/')
// let fileName=m.url.slice(key); //後端傳的/system/user 我需要這樣/system/user/user
let menu={
path:m.path,
name:m.code,
children: [],
hidden: m.hiddenStatus === 0, // 狀態為0的隱藏
redirect: m.redirect,
component: m.component === '#' ? Layout : loadView(m.component),
meta:{id:m.id,title:m.metaTitle, icon: m.metaIcon}
}
r.children.push(menu)
}
})
if(r.children) convertTree(r.children)
})
}
convertTree(menuRouters);
return menuRouters
}
const actions = {
generateRoutes({
commit
}, token) {
return new Promise(resolve => {
// 通過token從後端獲取使用者選單,並加入全域性狀態
GetCourseCategoryList(token).then(res => {
const menuData = Object.assign([], res)
const tempAsyncRoutes = Object.assign([], asyncRoutes)
// alert("info: "+token)
// const accessedRoutes = generaMenu(tempAsyncRoutes, menuData)
const accessedRoutes = GetMenuData(tempAsyncRoutes,res)
commit('SET_ROUTES', accessedRoutes)
resolve(accessedRoutes)
}).catch(error => {
console.log(error)
})
})
}
}
以上就是php短視訊原始碼,vue遞迴動態載入選單, 更多內容歡迎關注之後的文章