nbugs-pc-select-user
Version:
https://nbugs.yuque.com/front-end/components/project-readme
181 lines (167 loc) • 5.5 kB
JavaScript
import {
getOrgTree,
getUserList,
saveSelectResult,
getSelectResult,
} from '../../service/selectUser';
import { getEnv, fetchDefaultOptions, filterNodes } from '../../utils/selectUser';
const initState = {
componentProps: {
showSearchInput: true,
deptNodeCheckable: true,
onOk: null,
onCancel: null,
getCheckedNodes: null,
APIEnv: getEnv(),
fetchOptions: {},
checkedNodes: [],
intermediateNodeKeys: [],
modalTitle: '请选择发送对象',
},
treeData: [],
checkedNodes: [],
intermediateNodeKeys: [],
};
export default {
namespace: 'selectUser',
state: initState,
effects: {
*fetchSourceList({ params }, { call, put }) {
const { fetchOptions } = params;
// 附加组件调用方传递的接口请求参数
const requestParams = {
haveAuthority:
fetchOptions.haveAuthority === undefined
? fetchDefaultOptions.haveAuthority
: fetchOptions.haveAuthority,
groupTypes:
fetchOptions.groupTypes === undefined
? fetchDefaultOptions.groupTypes.join(',')
: Array.prototype.join.call(fetchOptions.groupTypes, ','),
};
const adminPartTree = yield call(getOrgTree, requestParams);
const { rootDepartments } = adminPartTree;
yield put({
type: 'saveState',
payload: {
treeData: rootDepartments,
},
});
},
*getUserList({ params }, { call }) {
const { deptId, deptName, deptType, memberRole } = params;
const res = yield call(getUserList, params);
const { users = [] } = res;
return users.map(item => {
const { userId, userName, role, userType = '' } = item;
return {
userId,
userName,
userType,
role,
deptId,
deptName,
deptType,
memberRole,
};
});
},
// 保存选择结果
*saveSelectResult({ params }, { call }) {
const { checkedNodes = [], intermediateNodes = [], selectType, fetchOptions } = params;
// console.log('intermediateNodes',intermediateNodes)
// const intermediateNodeKeys = filterNodes(intermediateNodes).map(node => {
// const { deptId = '' } = node;
// return deptId;
// });
let intermediateNodeKeys = [];
if (intermediateNodes.length && intermediateNodes[0].deptId) {
intermediateNodeKeys = filterNodes(intermediateNodes).map(node => {
const { deptId = '' } = node;
return deptId;
});
} else {
intermediateNodeKeys = intermediateNodes
}
const checkedList = filterNodes(checkedNodes);
const selectResult = {
intermediateNodeKeys,
checkedNodes:
selectType === 'dept'
? checkedList.map(item => {
const { deptId = '' } = item;
return deptId;
})
: checkedList,
};
const deptList = checkedList.filter(item => item.type === 'dept');
const userList = checkedList.filter(item => item.type === 'user');
const haveAuthority = true;
const groupTypes = ['student_group', 'schoolworker_group'];
const requestParams = {
haveAuthority,
groupTypes,
containChild: true, // 暂时将此字段写死为true,
deptAllRole: false, // 暂时将此字段写死为false,
deptRoleList: deptList.map(item => {
const { deptId, memberRole: role } = item;
return { deptId, role };
}),
users: userList.map(item => {
const { deptId, deptName, userId, userName } = item;
return { deptId, deptName, userId, userName };
}),
selectResult: JSON.stringify(selectResult),
};
// 传递组件调用方传递的接口请求参数
if (fetchOptions && Object.keys(fetchOptions).length) {
for (const key in fetchOptions) {
if (Object.prototype.hasOwnProperty.call(fetchOptions, key)) {
/* eslint-disable */
requestParams[key] = fetchOptions[key];
/* eslint-enable */
}
}
}
const res = yield call(saveSelectResult, requestParams);
const { selectSignature = '' } = res;
return { selectSignature, deptList, userList };
},
// 获取选择结果
*getSelectResult({ params }, { call, put, select }) {
const { selectSignature = '' } = params;
const requestParams = {
selectSignature,
};
const res = yield call(getSelectResult, requestParams);
const { selectResult } = res;
const { checkedNodes = [], intermediateNodeKeys = [] } = JSON.parse(selectResult);
let _checkedNodes = [];
let _intermediateNodeKeys = [];
yield select(state => {
_checkedNodes = state.selectUser.checkedNodes;
_intermediateNodeKeys = state.selectUser.intermediateNodeKeys;
});
console.log('selectResult', JSON.parse(selectResult));
yield put({
type: 'saveState',
payload: {
checkedNodes: checkedNodes.concat(_checkedNodes),
intermediateNodeKeys: intermediateNodeKeys.concat(_intermediateNodeKeys),
},
});
return { checkedNodes, intermediateNodeKeys };
},
},
reducers: {
resetState() {
return initState;
},
saveState(state, { payload }) {
return {
...state,
...payload,
};
},
},
};