import { queryAccountList } from '@/services/api/institution' import { queryInstitutionRoleList } from '@/services/api/project' import consts from '@/utils/consts' import { useRequest } from '@umijs/max' import { Select, TreeSelect } from 'antd' import { useState } from 'react' enum AuditType { ACCOUNT = 'account', INSTITUTION = 'institution', ROLE = 'role' } const auditTypeOptions = [ { label: '用户', value: AuditType.ACCOUNT }, { label: '单位角色', value: AuditType.INSTITUTION } // { label: '审批角色', value: 'role'} ] type MemberItemProps = { value: string[] onChange: (value?: string) => void } type iState = { auditType: AuditType memberOptions: string[] members: string[] } const filterTreeNodes = (mode: AuditType, tree: string[]) => tree.map(item => { const newItem = { ...item } // 重新拼装id, 根据AuditType加上不同的前缀(后端同步前缀格式) switch (mode) { case AuditType.ACCOUNT: newItem.ID = `a_${newItem.ID}` break case AuditType.INSTITUTION: newItem.ID = `i_${newItem.ID}` break default: newItem.ID = `r_${newItem.ID}` break } if (newItem.children) { newItem.disabled = true newItem.children = filterTreeNodes(newItem.children) return newItem } return newItem }) const MemberItem: React.FC = ({ value, onChange }) => { const [state, setState] = useState({ auditType: AuditType.ACCOUNT, memberOptions: [], members: value }) useRequest( () => { let requestFn: Nullable<() => Promise> = null switch (state.auditType) { case AuditType.ACCOUNT: requestFn = () => queryAccountList({ pageSize: consts.MAX_PAGE_SIZE }) break case AuditType.INSTITUTION: requestFn = () => queryInstitutionRoleList({ pageSize: consts.MAX_PAGE_SIZE }) break default: break } return requestFn?.() }, { refreshDeps: [state.auditType], onSuccess(data: { items: any[] }) { setState({ ...state, memberOptions: filterTreeNodes(state.auditType, data.items) }) } } ) const toggleChange = value => { if (value) { onChange?.(value) } setState({ ...state, members: value }) } const toggleAuditType = (value: AuditType) => setState({ ...state, auditType: value, members: [] }) return (