roleList.js 3.2 KB
Newer Older
sin's avatar
sin committed
1
import { message } from 'antd';
sin's avatar
sin committed
2
import { arrayToStringParams } from '../../utils/request.qs';
3
import { buildTreeNode, findAllNodes, findCheckedKeys } from '../../utils/tree.utils';
sin's avatar
sin committed
4
import {
5 6 7
  authorizationRoleResourceTree,
  authorizationRoleAssignResource,
} from '../../services/system';
8 9 10 11 12 13 14
import {
  rolePage,
  roleAdd,
  roleUpdate,
  roleDelete,
} from '../../services/system';

sin's avatar
sin committed
15

sin's avatar
sin committed
16 17 18 19 20 21 22 23
export default {
  namespace: 'roleList',

  state: {
    list: [],
    count: 0,
    pageNo: 0,
    pageSize: 10,
sin's avatar
sin committed
24 25 26 27

    roleTreeData: [],
    checkedKeys: [],
    assignModalLoading: true,
sin's avatar
sin committed
28 29 30 31 32
  },

  effects: {
    *add({ payload }, { call, put }) {
      const { callback, body, queryParams } = payload;
33
      const response = yield call(roleAdd, body);
sin's avatar
sin committed
34 35 36 37 38 39 40 41 42 43 44 45
      if (callback) {
        callback(response);
      }
      yield put({
        type: 'query',
        payload: {
          ...queryParams,
        },
      });
    },
    *update({ payload }, { call, put }) {
      const { callback, body, queryParams } = payload;
46
      const response = yield call(roleUpdate, body);
sin's avatar
sin committed
47 48 49 50 51 52 53 54 55 56 57 58
      if (callback) {
        callback(response);
      }
      yield put({
        type: 'query',
        payload: {
          ...queryParams,
        },
      });
    },
    *delete({ payload }, { call, put }) {
      const { queryParams, body } = payload;
59
      yield call(roleDelete, body);
sin's avatar
sin committed
60 61 62 63 64 65 66 67 68
      message.info('删除成功!');
      yield put({
        type: 'query',
        payload: {
          ...queryParams,
        },
      });
    },
    *query({ payload }, { call, put }) {
69
      const response = yield call(rolePage, payload);
sin's avatar
sin committed
70
      message.info('查询成功!');
71
      const { total, list } = response.data;
sin's avatar
sin committed
72 73 74
      yield put({
        type: 'querySuccess',
        payload: {
75 76
          list: list,
          count: total,
sin's avatar
sin committed
77 78 79
        },
      });
    },
sin's avatar
sin committed
80 81 82 83 84 85
    *queryRoleAssign({ payload }, { call, put }) {
      yield put({
        type: 'changeAssignModalLoading',
        payload: true,
      });

86
      const response = yield call(authorizationRoleResourceTree, payload);
sin's avatar
sin committed
87
      const roleResourceTree = response.data;
88
      const roleTreeData = buildTreeNode(roleResourceTree, 'name', 'id');
sin's avatar
sin committed
89
      const checkedKeys = findCheckedKeys(roleResourceTree);
sin's avatar
sin committed
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

      yield put({
        type: 'querySuccess',
        payload: {
          checkedKeys,
          roleTreeData,
        },
      });

      yield put({
        type: 'changeAssignModalLoading',
        payload: false,
      });
    },
    *roleAssignResource({ payload }, { call }) {
105
      const { roleId, resourceIds, roleTreeData } = payload;
sin's avatar
sin committed
106
      const assignNodes = findAllNodes(resourceIds, roleTreeData);
sin's avatar
sin committed
107
      const params = {
108
        roleId,
sin's avatar
sin committed
109
        resourceIds: arrayToStringParams(assignNodes),
sin's avatar
sin committed
110
      };
111
      const response = yield call(authorizationRoleAssignResource, params);
sin's avatar
sin committed
112 113 114 115
      if (response.code === 0) {
        message.info('操作成功!');
      }
    },
sin's avatar
sin committed
116 117 118 119 120 121 122 123 124
  },

  reducers: {
    querySuccess(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
sin's avatar
sin committed
125 126 127 128 129 130 131 132 133 134 135 136
    changeCheckedKeys(state, { payload }) {
      return {
        ...state,
        checkedKeys: payload,
      };
    },
    changeAssignModalLoading(state, { payload }) {
      return {
        ...state,
        assignModalLoading: payload,
      };
    },
sin's avatar
sin committed
137 138
  },
};