menu_reducer.js 3.03 KB
Newer Older
bert committed
1 2 3 4
import _ from 'lodash';
import { message } from 'antd';
import { createReducer } from '../../../util';
import types from '../../types';
bert committed
5 6
import initialState from './menu_state';
import objectAssign from 'object-assign';
bert committed
7

bert committed
8
export default createReducer(initialState, {
bert committed
9 10
  [`${types.GET_TOP_MENU}`]: (state, data, params) => {
    return objectAssign({}, state, { topMenu: params.topMenu });
bert committed
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
  },

  [`${types.UPDATE_NAVPATH}`]: (state, data) => {

    let navpath = [], tmpOb, tmpKey, child, selectClass = 'ant-menu-item-selected';
    /**
     * 判断 `Action` 传来的数据是否有 `面包屑` 信息
     * 
     * `Menu` 控件传来的值 ['子级控件值', '父级控件值'],将数组倒序,先遍历父级标签
     * 如果不做方向操作,`child` 没有子级菜单列表,导致程序出错
     * 
     * 判断如果是父级标签,查询菜单Json,取到对应Key的值。
     * 储存该菜单的子集菜单集合到 `child` 中
     * 将 `key`、`name` 添加到 `面包屑` 集合中
     * 
     * 判断如果是子级标签,取出对应的Key值
     * 判断 `child` 是否有值,
     * 取到对应的子级数据中的Json
     * 将 `key`、`name` 添加到 `面包屑` 集合中
     * 
     * 在面包屑组件中遍历 `navpath` 构建 `Breadcrumb` 标签的值,按顺序显示相关内容
     * 
     * `selectClass` 用于解决同步菜单二级菜单点击时 `class` 选中状态的问题,目前没有二级菜单,所以暂时没有用处
     * 
     */
    if (data.data) {
      data.data.reverse().map((item) => {
        if (item.indexOf('sub') != -1) {
          tmpKey = item.replace('sub', '');
          tmpOb = _.find(state.topMenu, function(o) {
            return o.key == tmpKey;
          });
          child = tmpOb.child;
          navpath.push({
            key: tmpOb.key,
            name: tmpOb.name
          })
          // selectClass = ''
        }
        if (item.indexOf('menu') != -1) {
          tmpKey = item.replace('menu', '');
          if (child) {
            tmpOb = _.find(child, function(o) {
              return o.key == tmpKey;
            });
          }
          navpath.push({
            key: tmpOb.key,
            name: tmpOb.name
          })
        }
      })
    }

bert committed
65 66 67 68 69
    return objectAssign({}, state, {
      currentIndex: data.key * 1,
      navpath: navpath,
      selectClass: selectClass
    });
bert committed
70 71 72
  },

  [`${types.UPDATE_STATUS}`]: (state, data) => {
bert committed
73
    return objectAssign({}, state, { status: data.status });
bert committed
74 75
  },

bert committed
76
  [`${types.GET_LEFT_MENU}`]: (state, data, params) => {
bert committed
77
    return objectAssign({}, state, { leftMenu: params.leftMenu });
bert committed
78 79 80 81 82 83
  },

  [`${types.INIT_MENU}`]: (state, data, params) => {

    params.leftMenu.map((item) => {
      item.num = 0;
bert committed
84
    });
bert committed
85

bert committed
86
    return objectAssign({}, state, { leftMenuType: leftMenuType });
bert committed
87 88 89
  },

  [`${types.UPDATE_COLLAPSE}`]: (state, data) => {
bert committed
90
    return objectAssign({}, state, { collapse: !data.collapse });
bert committed
91 92 93
  },

  [`${types.GET_ADD_CASE_LEFT_MENU}`]: (state, data) => {
bert committed
94
    return objectAssign({}, state, { leftMenu: leftMenu });
bert committed
95 96
  },
})