TreeNodeSelect.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import React, { useState, useEffect } from 'react'
  2. import { TreeSelect } from 'antd'
  3. import { useRequest } from 'umi'
  4. import { queryAcountInstitutionList } from '@/services/api/institution'
  5. const { TreeNode } = TreeSelect
  6. const TreeNodeSelect = ({ onChange, placeholder = '请选择', ...otherProps }) => {
  7. const [list, setList] = useState([])
  8. const { run: tryAcountInstitutionList } = useRequest(() => queryAcountInstitutionList(), {
  9. manual: true,
  10. onSuccess: result => {
  11. setList(result)
  12. }
  13. })
  14. useEffect(() => {
  15. tryAcountInstitutionList()
  16. }, [])
  17. const onNodeChange = (value, labelList) => {
  18. console.log('labelList', labelList)
  19. onChange(value, { value, label: labelList[0] })
  20. }
  21. const renderTreeNodes = data =>
  22. data.map(item => {
  23. if (item.children) {
  24. item.disabled = true
  25. return (
  26. <TreeNode {...item} disabled={item.disabled}>
  27. {renderTreeNodes(item.children)}
  28. </TreeNode>
  29. )
  30. }
  31. return <TreeNode {...item} />
  32. })
  33. return (
  34. list?.length && (
  35. <TreeSelect
  36. {...otherProps}
  37. showSearch
  38. style={{ width: '100%' }}
  39. placeholder={placeholder}
  40. treeNodeFilterProp="label"
  41. allowClear
  42. treeDefaultExpandAll
  43. onChange={(value, labelList, extra) => onNodeChange(value, labelList, extra)}
  44. >
  45. {renderTreeNodes(list)}
  46. </TreeSelect>
  47. )
  48. )
  49. }
  50. export default TreeNodeSelect