index.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { TreeSelect } from 'antd';
  2. import React, { useState, useEffect, useMemo } from 'react';
  3. import { connect } from 'dva';
  4. // import { queryDDdepList } from '@/services/boom';
  5. // import { queryDDdepList } from '@/services/boom';
  6. function DepartmentField(props) {
  7. const { value = [], onChange, defaultValue, depTrees } = props;
  8. // const [treeData, setTreeData] = useState([]);
  9. // const genTreeNode = dep => {
  10. // return {
  11. // id: dep.dept_id,
  12. // pId: dep.parent_id,
  13. // value: dep.dept_id,
  14. // title: dep.name,
  15. // isLeaf: false,
  16. // };
  17. // };
  18. // const onLoadData = async ({ id }) => {
  19. // let depList = await queryDDdepList({ dept_id: id });
  20. // console.log(depList);
  21. // if (depList.length > 0) {
  22. // let nodes = depList.map(genTreeNode);
  23. // setTreeData([...treeData, ...nodes]);
  24. // }
  25. // };
  26. const findDepName = (list, ID) => {
  27. let result = '';
  28. const dep = list.find(item => item.ID === ID);
  29. if (dep) {
  30. result = dep.Name;
  31. return result;
  32. }
  33. for (let index = 0; index < list.length; index++) {
  34. const element = list[index];
  35. if (element?.children && element?.children.length) {
  36. result = findDepName(element.children, ID);
  37. if (result) {
  38. break;
  39. }
  40. }
  41. }
  42. return result;
  43. };
  44. const findDepID = (list, Name) => {
  45. let result = '';
  46. const dep = list.find(item => item.Name === Name);
  47. if (dep) {
  48. result = dep.ID;
  49. } else {
  50. for (let index = 0; index < list.length; index++) {
  51. const element = list[index];
  52. if (element?.children && element?.children.length) {
  53. result = findDepID(element.children, Name);
  54. if (result) {
  55. break;
  56. }
  57. }
  58. }
  59. }
  60. return result;
  61. };
  62. const defaultID = useMemo(() => {
  63. if (defaultValue !== undefined) {
  64. return findDepID(depTrees, defaultValue[0]);
  65. } else {
  66. return null;
  67. }
  68. }, [defaultValue]);
  69. const onChangeValue = (newValue, label) => {
  70. // const depName = findDepName(depTrees, newValue);
  71. onChange(String(newValue));
  72. };
  73. return (
  74. <TreeSelect
  75. showSearch
  76. // // multiple
  77. allowClear
  78. defaultValue={defaultID}
  79. dropdownStyle={{
  80. maxHeight: 400,
  81. overflow: 'auto',
  82. }}
  83. style={{ width: '100%' }}
  84. placeholder="请选择部门"
  85. treeData={depTrees}
  86. filterTreeNode={(input, option) => {
  87. return option.title.toLowerCase().includes(input.toLowerCase());
  88. }}
  89. onChange={onChangeValue}
  90. />
  91. );
  92. }
  93. export default connect(({ user }) => ({ depTrees: user.depTrees }))(DepartmentField);