index.js 3.14 KB
import * as services from '@/services/menu';
import { message } from 'antd';
import { getPermissionList } from '@/utils/menu';

export default {
  namespace: 'SystemMenu',
  state: {
    dataSystemMenu: [], // 层级菜单
    dataLevelMenu: [], // 铺平菜单
    dataMenuInfo: [], // 菜单详情
    dataExpandedKeys: [], // 菜单code
    dataModal: {
      modalType: '',
      modalShow: false,
      modalData: {},
    },
  },
  effects: {
    /* 获取菜单层级 */
    *getAllSystemMenu({ payload }, { call, put, select }) {
      const { dataMenuInfo } = yield select(state => state.SystemMenu);
      try {
        const res = yield call(services.getAllMenu);
        if (res.code === 0) {
          const { dataMenu, dataExpandedKeys } = getPermissionList(res.data || []);
          yield put({
            type: 'changeState',
            payload: {
              dataSystemMenu: res.data || [],
              dataLevelMenu: dataMenu,
              dataExpandedKeys,
            },
          });
          // 处理菜单选中进行编辑、删除的情况
          if (payload && payload.isEdit && dataMenuInfo.length) {
            const selectMenuInfo = dataMenu.find(
              item => item.resourceCode === dataMenuInfo[0].resourceCode,
            );
            yield put({
              type: 'changeState',
              payload: {
                dataMenuInfo: [{ ...selectMenuInfo, children: undefined }],
              },
            });
          } else if (payload && payload.isDel && dataMenuInfo.length) {
            const selectMenuInfo = dataMenu.find(
              item => item.resourceCode === dataMenuInfo[0].resourceCode,
            );
            yield put({
              type: 'changeState',
              payload: {
                dataMenuInfo: selectMenuInfo ? [{ ...selectMenuInfo, children: undefined }] : [],
              },
            });
          }
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 新增、编辑菜单 */
    *updateSystemMenu({ payload }, { call, put, select }) {
      try {
        const res = yield call(services[!payload.id ? 'addMenu' : 'updateMenu'], payload);
        if (res.code === 0) {
          message.success(!payload.id ? '新增成功' : '编辑成功');
          yield put({ type: 'cancelModal' });
          yield put({ type: 'getAllSystemMenu', payload: { isEdit: payload.id ? true : false } });
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 删除菜单 */
    *delSystemMenu({ payload }, { call, put, select }) {
      try {
        const res = yield call(services.delMenu, payload);
        if (res.code === 0) {
          message.success('删除成功');
          yield put({ type: 'getAllSystemMenu', payload: { isDel: true } });
        }
      } catch (err) {
        console.error(err);
      }
    },
  },
  reducers: {
    changeState(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
    cancelModal(state, { payload }) {
      return {
        ...state,
        dataModal: {
          modalType: '',
          modalShow: false,
          modalData: {},
        },
      };
    },
  },
};