diff --git a/src/components/scroller-modal/index.tsx b/src/components/scroller-modal/index.tsx
new file mode 100644
index 00000000..3a3a41a8
--- /dev/null
+++ b/src/components/scroller-modal/index.tsx
@@ -0,0 +1,19 @@
+import useBodyScroll from '@/hooks/use-body-scroll';
+import { Modal, type ModalProps } from 'antd';
+import React from 'react';
+
+const ScrollerModal = (props: ModalProps) => {
+ const { saveScrollHeight, restoreScrollHeight } = useBodyScroll();
+
+ React.useEffect(() => {
+ if (props.open) {
+ saveScrollHeight();
+ } else {
+ restoreScrollHeight();
+ }
+ }, [props.open]);
+
+ return ;
+};
+
+export default ScrollerModal;
diff --git a/src/pages/api-keys/components/add-apikey.tsx b/src/pages/api-keys/components/add-apikey.tsx
index e2223b28..1c68114e 100644
--- a/src/pages/api-keys/components/add-apikey.tsx
+++ b/src/pages/api-keys/components/add-apikey.tsx
@@ -1,11 +1,12 @@
import CopyButton from '@/components/copy-button';
import ModalFooter from '@/components/modal-footer';
+import ScrollerModal from '@/components/scroller-modal';
import SealInput from '@/components/seal-form/seal-input';
import SealSelect from '@/components/seal-form/seal-select';
import { PageAction } from '@/config';
import { PageActionType } from '@/config/types';
import { useIntl } from '@umijs/max';
-import { Button, Form, Modal, Tag } from 'antd';
+import { Button, Form, Tag } from 'antd';
import dayjs from 'dayjs';
import { useEffect, useState } from 'react';
import { createApisKey } from '../apis';
@@ -92,7 +93,7 @@ const AddModal: React.FC = ({
};
return (
- = ({
)}
-
+
);
};
diff --git a/src/pages/resources/components/update-labels.tsx b/src/pages/resources/components/update-labels.tsx
index 3b2f8dfb..e2517f83 100644
--- a/src/pages/resources/components/update-labels.tsx
+++ b/src/pages/resources/components/update-labels.tsx
@@ -1,8 +1,9 @@
import LabelSelector from '@/components/label-selector';
import ModalFooter from '@/components/modal-footer';
+import ScrollerModal from '@/components/scroller-modal';
import SealInput from '@/components/seal-form/seal-input';
import { useIntl } from '@umijs/max';
-import { Form, Modal } from 'antd';
+import { Form } from 'antd';
import _ from 'lodash';
import React from 'react';
import SimpleBar from 'simplebar-react';
@@ -37,7 +38,7 @@ const UpdateLabels: React.FC = (props) => {
};
return (
- = (props) => {
-
+
);
};
diff --git a/src/pages/users/components/add-modal.tsx b/src/pages/users/components/add-modal.tsx
index 9537906b..6ab859a4 100644
--- a/src/pages/users/components/add-modal.tsx
+++ b/src/pages/users/components/add-modal.tsx
@@ -1,11 +1,12 @@
import ModalFooter from '@/components/modal-footer';
+import ScrollerModal from '@/components/scroller-modal';
import SealInput from '@/components/seal-form/seal-input';
import SealSelect from '@/components/seal-form/seal-select';
import { PageAction, PasswordReg } from '@/config';
import { PageActionType } from '@/config/types';
import { UserOutlined, UserSwitchOutlined } from '@ant-design/icons';
import { useIntl } from '@umijs/max';
-import { Form, Modal, Select } from 'antd';
+import { Form, Select } from 'antd';
import { useEffect } from 'react';
import { UserRoles, UserRolesOptions } from '../config';
import { FormData, ListItem } from '../config/types';
@@ -51,7 +52,7 @@ const AddModal: React.FC = ({
}, [open]);
return (
- = ({
>
-
+
);
};