UNPKG

nbugs-pc-select-user

Version:

https://nbugs.yuque.com/front-end/components/project-readme

181 lines (167 loc) 5.5 kB
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, }; }, }, };