user.js 2.24 KB
import { getUserInfo, updatePassword } from '@/services/user';
import { getDataMenus } from '@/utils/menu';
import { message } from 'antd';
const UserModel = {
  namespace: 'user',
  state: {
    currentUser: {
      admin: {},
      dataMenus: [],
      username: '',
    },
    userAuths: [], // 权限
    dataModal: {
      modalType: '',
      modalShow: false,
      modalData: {},
    },
  },
  effects: {
    *fetchCurrent(_, { call, put, select }) {
      const {
        currentUser,
        currentUser: { username },
      } = yield select(state => state.user);
      if (!currentUser || !username) {
        try {
          const res = yield call(getUserInfo);
          // data.dataMenus = getDataMenus(data.permissionVos);
          if (res.code === 0) {
            res.data.menus = [
              {
                children: [],
                id: 999999,
                parentId: 0,
                resourceCode: 'Home',
                resourceNodeType: '1',
                title: '数智大屏',
              },
              ...(res.data.menus || []),
              {
                resourceCode: '404',
              },
            ];
            yield put({ type: 'saveCurrentUser', payload: res.data });
          }
        } catch (err) {
          console.error(err, 'err');
        }
      }
    },
    /* 修改密码 */
    *updatePassword({ payload }, { call, put, select }) {
      try {
        const res = yield call(updatePassword, payload);
        if (res.code === 0) {
          message.success('修改成功');
          yield put({ type: 'cancelModal' });
          yield put({ type: 'login/logout', payload: { message: 1 } });
        }
      } catch (err) {
        console.error(err);
      }
    },
  },
  reducers: {
    changeState(state, { payload }) {
      return {
        ...state,
        ...payload,
      };
    },
    cancelModal(state, { payload }) {
      return {
        ...state,
        dataModal: {
          modalType: '',
          modalShow: false,
          modalData: {},
        },
      };
    },
    saveCurrentUser(state, { payload }) {
      return {
        ...state,
        currentUser: payload || {},
        // userAuths: payload.authorities.map(_ => _.code),
      };
    },
  },
};
export default UserModel;