adminList.js 5.7 KB
Newer Older
1 2
import {message} from 'antd';
import {buildTreeNode, findCheckedKeys} from '../../utils/tree.utils';
sin's avatar
sin committed
3 4
import {
  addAdmin,
5
  adminRoleAssign,
sin's avatar
sin committed
6 7
  deleteAdmin,
  queryAdmin,
8
  queryAdminRoleList,
9 10
  updateAdmin,
  updateAdminStatus,
sin's avatar
sin committed
11
} from '../../services/admin';
12 13 14 15 16 17
import {arrayToStringParams} from '../../utils/request.qs';
import PaginationHelper from '../../../helpers/PaginationHelper';

const SEARCH_PARAMS_DEFAULT = {
  nickname: '',
};
sin's avatar
sin committed
18 19 20 21 22

export default {
  namespace: 'adminList',

  state: {
23
    // 分页列表相关
sin's avatar
sin committed
24
    list: [],
25
    listLoading: false,
26
    pagination: PaginationHelper.defaultPaginationConfig,
27
    searchParams: SEARCH_PARAMS_DEFAULT,
28

29 30 31 32
    // 添加 or 修改表单相关
    modalVisible: false,
    modalType: undefined, // 'add' or 'update' 表单
    formVals: {}, // 当前表单值
33
    modalLoading: false,
34 35

    // 分配角色表单相关
36
    roleList: [],
37 38
    roleModalVisible: false,
    roleCheckedKeys: [], // 此处的 Key ,就是角色编号
39
    roleAssignLoading: false,
sin's avatar
sin committed
40 41 42
  },

  effects: {
43 44
    // 查询列表
    * query({ payload }, { call, put }) {
45 46 47 48 49 50 51
      // 显示加载中
      yield put({
        type: 'changeListLoading',
        payload: true,
      });

      // 请求
52
      const response = yield call(queryAdmin, payload);
53
      // 响应
54
      yield put({
55
        type: 'setAll',
56 57 58 59 60 61 62 63
        payload: {
          list: response.data.list,
          pagination: PaginationHelper.formatPagination(response.data, payload),
          searchParams: {
            nickname: payload.nickname || ''
          }
        },
      });
64 65 66 67 68 69

      // 隐藏加载中
      yield put({
        type: 'changeListLoading',
        payload: false,
      });
70
    },
71 72
    * add({ payload }, { call, put }) {
      const { callback, body } = payload;
73 74 75 76 77 78 79
      // 显示加载中
      yield put({
        type: 'changeModalLoading',
        payload: true,
      });

      // 请求
sin's avatar
sin committed
80
      const response = yield call(addAdmin, body);
81
      // 响应
82 83 84 85 86 87 88 89 90 91 92
      if (response.code === 0) {
        if (callback) {
          callback(response);
        }
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
            ...PaginationHelper.defaultPayload
          },
        });
sin's avatar
sin committed
93
      }
94 95 96 97 98 99

      // 隐藏加载中
      yield put({
        type: 'changeModalLoading',
        payload: false,
      });
sin's avatar
sin committed
100
    },
101 102
    * update({ payload }, { call, put }) {
      const { callback, body } = payload;
103 104 105 106 107 108 109
      // 显示加载中
      yield put({
        type: 'changeModalLoading',
        payload: true,
      });

      // 请求
sin's avatar
sin committed
110
      const response = yield call(updateAdmin, body);
111
      // 响应
112 113 114 115 116 117 118 119 120 121 122
      if (response.code === 0) {
        if (callback) {
          callback(response);
        }
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
            ...PaginationHelper.defaultPayload
          },
        });
sin's avatar
sin committed
123
      }
124 125

      // 隐藏加载中
sin's avatar
sin committed
126
      yield put({
127 128
        type: 'changeModalLoading',
        payload: false,
sin's avatar
sin committed
129 130
      });
    },
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

    * updateStatus({ payload }, { call, put }) {
      // 请求
      const response = yield call(updateAdminStatus, payload);
      // 响应
      if (response.code === 0) {
        message.info('更新状态成功!');
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
            ...PaginationHelper.defaultPayload
          },
        });
      }
    },

    * delete({ payload }, { call, put }) {
      // 请求
      const response = yield call(deleteAdmin, payload);
      // 响应
      if (response.code === 0) {
        message.info('删除成功!');
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
            ...PaginationHelper.defaultPayload
          },
        });
      }
sin's avatar
sin committed
162
    },
163

164 165
    * queryRoleList({ payload }, { call, put }) {
      // 显示加载中
166 167 168 169 170
      yield put({
        type: 'changeRoleAssignLoading',
        payload: true,
      });

171
      // 请求
172
      const response = yield call(queryAdminRoleList, payload);
173 174 175 176 177 178 179 180 181 182 183 184 185
      // 响应
      if (response.code === 0) {
        const roleList = response.data;
        const roleTreeData = buildTreeNode(roleList, 'name', 'id');
        const roleCheckedKeys = findCheckedKeys(roleList);
        yield put({
          type: 'setAll',
          payload: {
            roleList: roleTreeData,
            roleCheckedKeys,
          },
        });
      }
186

187
      // 隐藏加载中
188
      yield put({
189 190
        type: 'changeRoleAssignLoading',
        payload: false,
191
      });
192
    },
193

194 195 196
    * roleAssign({ payload }, { call, put }) {
      const { callback, body } = payload;
      // 显示加载中
197 198
      yield put({
        type: 'changeRoleAssignLoading',
199
        payload: true,
200
      });
201 202 203 204 205 206 207

      // 请求
      const response = yield call(adminRoleAssign, {
        id: body.id,
        roleIds: arrayToStringParams(body.roleIds),
      });
      // 响应
208
      if (response.code === 0) {
209 210 211
        if (callback) {
          callback(response);
        }
212
      }
213 214 215 216 217 218

      // 隐藏加载中
      yield put({
        type: 'changeRoleAssignLoading',
        payload: false,
      });
219
    },
sin's avatar
sin committed
220 221 222
  },

  reducers: {
223 224 225 226 227 228
    changeRoleCheckedKeys(state, { payload }) {
      return {
        ...state,
        roleCheckedKeys: payload,
      };
    },
229
    // 修改加载中的状态
230 231 232 233 234 235
    changeRoleAssignLoading(state, { payload }) {
      return {
        ...state,
        roleAssignLoading: payload,
      };
    },
236 237
    changeModalLoading(state, { payload }) {
      return {
238
        ...state,
239 240 241 242 243 244 245 246 247 248 249
        modalLoading: payload,
      };
    },
    changeListLoading(state, { payload }) {
      return {
        ...state,
        listLoading: payload,
      };
    },
    // 设置所有属性
    setAll(state, { payload }) {
250 251 252 253 254
      return {
        ...state,
        ...payload,
      };
    }
sin's avatar
sin committed
255 256
  },
};