1234567891011121314151617181920212223242526272829303132333435363738 |
-
- function flatten (parent, data = [], menusRaw = []) {
- return data.reduce((acc, { name, children }) => {
- const menu = menusRaw.filter(x => x.Url === name)[0]
- if (!menu) return acc
-
- const MenuName = menu.MenuName
- const item = { Url: name, MenuName, parent }
-
- if (children && children.length) {
- const p = parent.concat({ Url: name, MenuName })
- return acc.concat(item, flatten(p, children, menusRaw))
- }
-
- return acc.concat(item)
- }, [])
- }
-
- export default {
- state: {
- menusRaw: [],
- menus: [],
- breadcrumb: [],
- },
- mutations: {
- updateBread (state, { routerData, Url }) {
- // 扁平 routerData
- // 同时构造出 含有 title 的 parent 数据
- const routeList = flatten([], routerData, state.menusRaw)
-
- // 过滤出与 name 相同的 route 节点
- const currentRoute = routeList.filter(x => x.Url === Url)[0]
-
- // 获取 面包屑
- if (currentRoute) state.breadcrumb = currentRoute.parent.slice(1).concat(currentRoute)
- }
- }
- }
|