Sword/src/models/role.js

169 lines
4.1 KiB
JavaScript

import { message } from 'antd';
import router from 'umi/router';
import { ROLE_NAMESPACE } from '../actions/role';
import { list, submit, detail, remove, tree, treeById, grant } from '../services/role';
import { grantTree, roleTreeKeys, dynamicRoutes, dynamicButtons } from '../services/menu';
import { setButtons, setRoutes } from '../utils/authority';
import { formatButtons, formatRoutes } from '../utils/utils';
export default {
namespace: ROLE_NAMESPACE,
state: {
data: {
list: [],
pagination: false,
},
init: {
tree: [],
},
detail: {},
menuGrantTree: [],
menuTreeKeys: [],
dataScopeGrantTree: [],
dataScopeTreeKeys: [],
},
effects: {
*fetchList({ payload }, { call, put }) {
const response = yield call(list, payload);
if (response.success) {
yield put({
type: 'saveList',
payload: {
list: response.data,
pagination: false,
},
});
}
},
*fetchInit({ payload }, { call, put }) {
const response = yield call(tree, payload);
if (response.success) {
yield put({
type: 'saveInit',
payload: {
tree: response.data,
},
});
}
},
*fetchInitById({ payload }, { call, put }) {
const response = yield call(treeById, payload);
if (response.success) {
yield put({
type: 'saveInit',
payload: {
tree: response.data,
},
});
}
},
*fetchDetail({ payload }, { call, put }) {
const response = yield call(detail, payload);
if (response.success) {
yield put({
type: 'saveDetail',
payload: {
detail: response.data,
},
});
}
},
*clearDetail({ payload }, { put }) {
yield put({
type: 'removeDetail',
payload: { payload },
});
},
*grantTree({ payload }, { call, put }) {
const response = yield call(grantTree, payload);
yield put({
type: 'save',
payload: {
menuGrantTree: response.data.menu,
dataScopeGrantTree: response.data.dataScope,
},
});
},
*roleTreeKeys({ payload }, { call, put }) {
const response = yield call(roleTreeKeys, payload);
yield put({
type: 'save',
payload: {
menuTreeKeys: response.data.menu,
dataScopeTreeKeys: response.data.dataScope,
},
});
},
*setRoleTreeKeys({ payload }, { put }) {
yield put({
type: 'save',
payload: {
menuTreeKeys: payload.menuTreeKeys,
dataScopeTreeKeys: payload.dataScopeTreeKeys,
},
});
},
*grant({ payload, callback }, { call }) {
const response = yield call(grant, payload);
if (response.success) {
const routes = yield call(dynamicRoutes);
const buttons = yield call(dynamicButtons);
setRoutes(formatRoutes(routes.data));
setButtons(formatButtons(buttons.data));
if (callback) {
callback();
}
}
},
*submit({ payload }, { call }) {
const response = yield call(submit, payload);
if (response.success) {
message.success('提交成功');
router.push('/system/role');
}
},
*remove({ payload }, { call }) {
const {
data: { keys },
success,
} = payload;
const response = yield call(remove, { ids: keys });
if (response.success) {
success();
}
},
},
reducers: {
save(state, action) {
return {
...state,
...action.payload,
};
},
saveList(state, action) {
return {
...state,
data: action.payload,
};
},
saveInit(state, action) {
return {
...state,
init: action.payload,
};
},
saveDetail(state, action) {
return {
...state,
detail: action.payload.detail,
};
},
removeDetail(state) {
return {
...state,
detail: {},
};
},
},
};