app.js 1.0KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. function flatten (parent, data = [], menusRaw = []) {
  2. return data.reduce((acc, { name, children }) => {
  3. const menu = menusRaw.filter(x => x.Url === name)[0]
  4. if (!menu) return acc
  5. const MenuName = menu.MenuName
  6. const item = { Url: name, MenuName, parent }
  7. if (children && children.length) {
  8. const p = parent.concat({ Url: name, MenuName })
  9. return acc.concat(item, flatten(p, children, menusRaw))
  10. }
  11. return acc.concat(item)
  12. }, [])
  13. }
  14. export default {
  15. state: {
  16. menusRaw: [],
  17. menus: [],
  18. breadcrumb: [],
  19. },
  20. mutations: {
  21. updateBread (state, { routerData, Url }) {
  22. // 扁平 routerData
  23. // 同时构造出 含有 title 的 parent 数据
  24. const routeList = flatten([], routerData, state.menusRaw)
  25. // 过滤出与 name 相同的 route 节点
  26. const currentRoute = routeList.filter(x => x.Url === Url)[0]
  27. // 获取 面包屑
  28. if (currentRoute) state.breadcrumb = currentRoute.parent.slice(1).concat(currentRoute)
  29. }
  30. }
  31. }