import React, { useEffect, useMemo, useState } from 'react'; import { queryUserListByRoleID, queryLeader } from '@/services/boom'; import { connect } from 'umi'; import { PlusOutlined } from '@ant-design/icons'; import { Popover, Radio, RadioChangeEvent, Spin, Steps } from 'antd'; import { useModel, useRequest } from '@umijs/max'; const { Step } = Steps; enum TYPE { ROLE = 'role', USER = 'user', LEADER = 'leader', } const ApprovalProcess = (props: any) => { const { approvalProcess, leaderData, dispatch, onChange, roleList = [], } = props; const [selectUserList, setSelectUserList] = useState([]); const [curNodeIdx, setCurNodeIdx] = useState(-1); const [loading, setLoading] = useState(false); const { userList, run } = useModel('userList'); const list = useMemo(() => { approvalProcess?.forEach((item: any) => { if (item.length > 1 && item[0].type == TYPE.USER) { item.forEach((curUser: any) => { curUser.name = userList.find((user: any) => user.ID == curUser.value)?.CName || '-'; }); } else if (item.length == 1 && item[0].type == TYPE.USER) { item[0].name = userList.find((user: any) => user.ID == item[0].value)?.CName || '-'; } else if (item.length == 1 && item[0].nowType == TYPE.USER) { item[0].name = userList.find((user: any) => user.ID == item[0].nowValue)?.CName || '-'; } else { item[0].name = null; } }); return approvalProcess; }, [approvalProcess]); const onStepsChange = async (current: any, list: any) => { setLoading(true); const itemNode = list[current][0]; if (itemNode.type !== 'role') return; const data = await queryUserListByRoleID({ role_id: itemNode.value }); setCurNodeIdx(current); setSelectUserList(data); setLoading(false); }; const selectedUserId = ({ target: { value } }: RadioChangeEvent) => { //userId const name = userList.find((user: any) => user.ID == value)?.CName || '-'; const data = { nowType: TYPE.USER, nowValue: Number(value), name }; //type: TYPE.USER, value: Number(value) list[curNodeIdx][0] = { ...list[curNodeIdx][0], ...data }; console.log([...list]); onChange?.([...list]); }; const content = ( {selectUserList.map((item: any) => ( // {item.c_name} ))} ); const getLeaderContent = (length: any) => ( ({ title: leader.CName }))} > ); useEffect(() => { dispatch({ type: 'user/getRoleList', }); run(); }, []); return ( <> onStepsChange(value, list)} > {list?.map((item: any, index: Number) => item[0]?.type == TYPE.LEADER ? ( } title={`${Math.min( item[0]?.value, leaderData?.length, )}级主管审批`} /> ) : ( } title={ item[0]?.name || `从${ roleList?.find((cur: any) => cur.ID == item[0]?.value) ?.Name || '-' }选择` } /> ), )} ); }; export default connect(({ user }: any) => ({ roleList: user.roleList, }))(ApprovalProcess);