A2Tab2AddTable.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import React, { useCallback, useEffect, useMemo, useState } from "react";
  2. import { A5TableType } from "@/types";
  3. import { Radio, Table } from "antd";
  4. import { forwardRef, useImperativeHandle } from "react";
  5. type Props = {
  6. data: A5TableType[];
  7. type: "部门" | "阶段";
  8. valAc: string;
  9. ref: any;
  10. };
  11. function A2Tab2AddTable({ data, type, valAc }: Props, ref: any) {
  12. const [value, setValue] = useState("");
  13. useEffect(() => {
  14. if (valAc) setValue(valAc);
  15. }, [valAc]);
  16. const kongGeFu = useCallback((level: 1 | 2 | 3 | 4, name: string) => {
  17. let arr = "";
  18. for (let i = 1; i < level; i++) {
  19. arr += "&emsp;";
  20. }
  21. return arr + name;
  22. }, []);
  23. const A2Tab2AddTableResFu = useCallback(() => {
  24. return value;
  25. }, [value]);
  26. // 可以让父组件调用子组件的方法
  27. useImperativeHandle(ref, () => ({
  28. A2Tab2AddTableResFu,
  29. }));
  30. const columns = useMemo(() => {
  31. return [
  32. {
  33. width: 150,
  34. title: "单选",
  35. render: (item: A5TableType) => {
  36. if (item.children) return null;
  37. else
  38. return (
  39. <Radio
  40. value={item.id}
  41. checked={item.id === value}
  42. onChange={(e) => setValue(e.target.value)}
  43. ></Radio>
  44. );
  45. },
  46. },
  47. {
  48. title: `${type}名称`,
  49. render: (item: A5TableType) => (
  50. <span
  51. dangerouslySetInnerHTML={{
  52. __html: kongGeFu(item.level, item.name),
  53. }}
  54. ></span>
  55. ),
  56. },
  57. ];
  58. }, [kongGeFu, type, value]);
  59. return (
  60. <>
  61. {data.length ? (
  62. <Table
  63. size="small"
  64. dataSource={data}
  65. columns={columns}
  66. rowKey="id"
  67. pagination={false}
  68. expandable={{ defaultExpandAllRows: true }}
  69. />
  70. ) : null}
  71. </>
  72. );
  73. }
  74. export default forwardRef(A2Tab2AddTable);