adminList.js 6.8 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
  deleteAdmin,
7
  queryAdminRoleList,
8 9
  updateAdmin,
  updateAdminStatus,
10
  deptTreeAll,
sin's avatar
sin committed
11
} from '../../services/admin';
12 13 14
import {
  adminPage
} from '../../services/system';
15
import { arrayToStringParams } from '../../utils/request.qs';
16 17 18
import PaginationHelper from '../../../helpers/PaginationHelper';

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

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
const buildSelectTree = list => {
  return list.map(item => {
    let children = [];
    if (item.children) {
      children = buildSelectTree(item.children);
    }
    return {
      title: item.name,
      value: `${item.name}-${item.id}`,
      key: item.id,
      children,
    };
  });
};

sin's avatar
sin committed
37 38 39 40
export default {
  namespace: 'adminList',

  state: {
41
    // 分页列表相关
sin's avatar
sin committed
42
    list: [],
43
    listLoading: false,
44
    pagination: PaginationHelper.defaultPaginationConfig,
45
    searchParams: SEARCH_PARAMS_DEFAULT,
46

47 48 49 50
    // 添加 or 修改表单相关
    modalVisible: false,
    modalType: undefined, // 'add' or 'update' 表单
    formVals: {}, // 当前表单值
51
    modalLoading: false,
52 53

    // 分配角色表单相关
54
    roleList: [],
55 56
    roleModalVisible: false,
    roleCheckedKeys: [], // 此处的 Key ,就是角色编号
57
    roleAssignLoading: false,
58 59 60

    //部门相关
    deptSelectTree: [],
sin's avatar
sin committed
61 62 63
  },

  effects: {
64 65 66 67 68 69 70 71
    *getDeptmentTree({ payload }, { call, put }) {
      const result = yield call(deptTreeAll, payload);
      yield put({
        type: 'treeSuccess',
        payload: result.data,
      });
    },

72
    // 查询列表
73
    *query({ payload }, { call, put }) {
74 75 76 77 78 79 80
      // 显示加载中
      yield put({
        type: 'changeListLoading',
        payload: true,
      });

      // 请求
81
      const response = yield call(adminPage, payload);
82
      // 响应
83
      yield put({
84
        type: 'setAll',
85 86 87 88
        payload: {
          list: response.data.list,
          pagination: PaginationHelper.formatPagination(response.data, payload),
          searchParams: {
89
            name: payload.name || '',
90
          },
91 92
        },
      });
93 94 95 96 97 98

      // 隐藏加载中
      yield put({
        type: 'changeListLoading',
        payload: false,
      });
99
    },
100
    *add({ payload }, { call, put }) {
101 102 103 104 105 106 107
      // 显示加载中
      yield put({
        type: 'changeModalLoading',
        payload: true,
      });

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

      // 隐藏加载中
      yield put({
        type: 'changeModalLoading',
        payload: false,
      });
sin's avatar
sin committed
129
    },
130
    *update({ payload }, { call, put }) {
131
      const { callback, body } = payload;
132 133 134 135 136 137 138
      // 显示加载中
      yield put({
        type: 'changeModalLoading',
        payload: true,
      });

      // 请求
sin's avatar
sin committed
139
      const response = yield call(updateAdmin, body);
140
      // 响应
141 142 143 144 145 146 147 148
      if (response.code === 0) {
        if (callback) {
          callback(response);
        }
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
149
            ...PaginationHelper.defaultPayload,
150 151
          },
        });
sin's avatar
sin committed
152
      }
153 154

      // 隐藏加载中
sin's avatar
sin committed
155
      yield put({
156 157
        type: 'changeModalLoading',
        payload: false,
sin's avatar
sin committed
158 159
      });
    },
160

161
    *updateStatus({ payload }, { call, put }) {
162 163 164 165 166 167 168 169 170
      // 请求
      const response = yield call(updateAdminStatus, payload);
      // 响应
      if (response.code === 0) {
        message.info('更新状态成功!');
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
171
            ...PaginationHelper.defaultPayload,
172 173 174 175 176
          },
        });
      }
    },

177
    *delete({ payload }, { call, put }) {
178 179 180 181 182 183 184 185 186
      // 请求
      const response = yield call(deleteAdmin, payload);
      // 响应
      if (response.code === 0) {
        message.info('删除成功!');
        // 刷新列表
        yield put({
          type: 'query',
          payload: {
187
            ...PaginationHelper.defaultPayload,
188 189 190
          },
        });
      }
sin's avatar
sin committed
191
    },
192

193
    *queryRoleList({ payload }, { call, put }) {
194
      // 显示加载中
195 196 197 198 199
      yield put({
        type: 'changeRoleAssignLoading',
        payload: true,
      });

200
      // 请求
201
      const response = yield call(queryAdminRoleList, payload);
202 203 204 205 206 207 208 209 210 211 212 213 214
      // 响应
      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,
          },
        });
      }
215

216
      // 隐藏加载中
217
      yield put({
218 219
        type: 'changeRoleAssignLoading',
        payload: false,
220
      });
221
    },
222

223
    *roleAssign({ payload }, { call, put }) {
224 225
      const { callback, body } = payload;
      // 显示加载中
226 227
      yield put({
        type: 'changeRoleAssignLoading',
228
        payload: true,
229
      });
230 231 232 233 234 235 236

      // 请求
      const response = yield call(adminRoleAssign, {
        id: body.id,
        roleIds: arrayToStringParams(body.roleIds),
      });
      // 响应
237
      if (response.code === 0) {
238 239 240
        if (callback) {
          callback(response);
        }
241
      }
242 243 244 245 246 247

      // 隐藏加载中
      yield put({
        type: 'changeRoleAssignLoading',
        payload: false,
      });
248
    },
sin's avatar
sin committed
249 250 251
  },

  reducers: {
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
    treeSuccess(state, { payload }) {
      const resultData = payload;
      const treeData = buildSelectTree(resultData);

      // // value 要保护 displayName 不然,搜索会失效
      // const rootNode = [
      //   {
      //     title: '根节点',
      //     value: `根节点-0`,
      //     key: 0,
      //     children: [],
      //   },
      // ];

      // const deptSelectTree = rootNode.concat(treeData);
      return {
        ...state,
        // list: resultData,
        deptSelectTree: treeData,
      };
    },
273 274 275 276 277 278
    changeRoleCheckedKeys(state, { payload }) {
      return {
        ...state,
        roleCheckedKeys: payload,
      };
    },
279
    // 修改加载中的状态
280 281 282 283 284 285
    changeRoleAssignLoading(state, { payload }) {
      return {
        ...state,
        roleAssignLoading: payload,
      };
    },
286 287
    changeModalLoading(state, { payload }) {
      return {
288
        ...state,
289 290 291 292 293 294 295 296 297 298 299
        modalLoading: payload,
      };
    },
    changeListLoading(state, { payload }) {
      return {
        ...state,
        listLoading: payload,
      };
    },
    // 设置所有属性
    setAll(state, { payload }) {
300 301 302 303
      return {
        ...state,
        ...payload,
      };
304
    },
sin's avatar
sin committed
305 306
  },
};