role.js 3.87 KB
import { message } from 'antd';
import * as services from '@/services/role';

/* SerachParams */
const staticSearch = {
  search: undefined,
  current: 1,
  size: 10,
};

export default {
  namespace: 'Role',
  state: {
    dataSearch: {
      ...staticSearch,
    },
    dataRole: {
      records: [],
      current: 1,
      size: 10,
      total: 0,
      totalPage: 0,
    },
    dataModal: {
      modalType: '',
      modalShow: false,
      modalData: {},
    },
    dataUserMenu: [],
    dataRoleMenuId: [],
  },
  effects: {
    /* 获取角色列表 */
    *getRoleList({ payload }, { call, put, select }) {
      const { dataSearch } = yield select(state => state.Role);
      try {
        const res = yield call(services.getRoleList, {
          current: 1,
          size: 10,
          ...dataSearch,
          ...payload,
        });
        if (res.code === 0) {
          res.data.records = res.data.records || [];
          yield put({
            type: 'changeState',
            payload: {
              dataRole: res.data,
            },
          });
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 新增、修改角色 */
    *updateRole({ payload }, { call, put, select }) {
      const { id } = payload;
      const {
        dataRole: { current, size },
      } = yield select(state => state.Role);
      const {
        currentUser: { roleId },
      } = yield select(state => state.user);
      try {
        const res = yield call(services[!id ? 'addRole' : 'updateRole'], payload);
        if (res.code === 0) {
          message.success(!id ? '新增成功' : '修改成功');
          yield put({
            type: 'getRoleList',
            payload: { size, current },
          });
          yield put({ type: 'cancelModal' });
          if (roleId === id) {
            setTimeout(() => {
              window.location.href = '/user/login';
            }, 500);
          }
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 删除角色 */
    *delRole({ payload }, { call, put, select }) {
      const {
        dataRole: { records = [], current, size },
      } = yield select(state => state.Role);
      try {
        const res = yield call(services.delRole, payload);
        if (res.code === 0) {
          message.success('删除成功');
          yield put({
            type: 'getRoleList',
            payload: {
              size,
              current: records.length === 1 ? (current === 1 ? 1 : current - 1) : current,
            },
          });
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 获取用户菜单 */
    *getUserMenu({ payload }, { call, put, select }) {
      try {
        const res = yield call(services.getUserMenu);
        if (res.code === 0) {
          yield put({
            type: 'changeState',
            payload: {
              dataUserMenu: res.data || [],
            },
          });
        }
      } catch (err) {
        console.error(err);
      }
    },
    /* 获取角色菜单id集合 */
    *getRoleMenuId({ payload }, { call, put, select }) {
      try {
        const res = yield call(services.getRoleMenuId, payload);
        if (res.code === 0) {
          yield put({
            type: 'changeState',
            payload: {
              dataRoleMenuId: res.data.menuId || [],
            },
          });
        }
      } catch (err) {
        console.error(err);
      }
    },
  },
  reducers: {
    changeState(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
    cancelModal(state, { payload }) {
      return {
        ...state,
        dataModal: {
          modalType: '',
          modalShow: false,
          modalData: {},
        },
      };
    },
    resetSearch(state, { payload }) {
      return {
        ...state,
        dataSearch: {
          ...staticSearch,
        },
      };
    },
  },
};