index.tsx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { FC, Key, useState } from "react";
  2. import { Form, Modal, ModalProps, Tree } from "antd";
  3. import style from "./index.module.scss";
  4. import { getAssIndexTreeApi } from "@/api";
  5. import { AssIndexTreeItemType, ASS_INDEX_TYPE } from "@/types";
  6. import { useParams } from "react-router-dom";
  7. import { DageLoading } from "@dage/pc-components";
  8. export interface AddIndexModalProps extends Omit<ModalProps, "onOk"> {
  9. onCancel?: () => void;
  10. onOk?: (keys: string[]) => void;
  11. // onOk?: (keys: Key[], items: AssIndexTreeItemType[]) => void;
  12. }
  13. export const AddIndexModal: FC<AddIndexModalProps> = ({
  14. open,
  15. onOk,
  16. onCancel,
  17. ...rest
  18. }) => {
  19. const params = useParams();
  20. const [form] = Form.useForm<any>();
  21. const [_checkedKeys, setCheckedKeys] = useState<Key[]>([]);
  22. const [treeData, setTreeData] = useState<AssIndexTreeItemType[]>([]);
  23. const [loading, setLoading] = useState(false);
  24. const getAssIndexTree = async () => {
  25. try {
  26. setLoading(true);
  27. const data = await getAssIndexTreeApi(params.type as ASS_INDEX_TYPE);
  28. setTreeData(data);
  29. } finally {
  30. setLoading(false);
  31. }
  32. };
  33. const handleCancel = () => {
  34. onCancel?.();
  35. form.resetFields();
  36. setCheckedKeys([]);
  37. };
  38. const handleConfirm = () => {
  39. form.submit();
  40. };
  41. const handleSubmit = async (values: any) => {
  42. onOk?.(values.checkedKeys.map((i: number) => String(i)));
  43. // onOk?.(values.checkedKeys, getSelectedNodes(values.checkedKeys, treeData));
  44. handleCancel();
  45. };
  46. const handleAfterOpenChange = (open: boolean) => {
  47. if (open && !treeData.length) getAssIndexTree();
  48. };
  49. return (
  50. <Modal
  51. className={style.modal}
  52. title="新增指标"
  53. okText="提交"
  54. cancelText="取消"
  55. open={open}
  56. width={640}
  57. okButtonProps={{
  58. disabled: false,
  59. }}
  60. onOk={handleConfirm}
  61. onCancel={handleCancel}
  62. {...rest}
  63. afterOpenChange={handleAfterOpenChange}
  64. >
  65. <Form
  66. labelCol={{ span: 4, offset: 2 }}
  67. form={form}
  68. onFinish={handleSubmit}
  69. >
  70. <Form.Item
  71. label="采用指标"
  72. name="checkedKeys"
  73. required
  74. rules={[{ required: true, message: "请选择指标" }]}
  75. >
  76. <Tree
  77. checkable
  78. defaultExpandAll
  79. fieldNames={{ title: "name", key: "id" }}
  80. checkedKeys={_checkedKeys}
  81. treeData={treeData}
  82. onCheck={(checkedKeys) => {
  83. setCheckedKeys(checkedKeys as Key[]);
  84. form.setFieldsValue({
  85. checkedKeys,
  86. });
  87. }}
  88. />
  89. </Form.Item>
  90. </Form>
  91. {loading && <DageLoading />}
  92. </Modal>
  93. );
  94. };