diff --git a/react-ui/src/assets/img/create-experiment.png b/react-ui/src/assets/img/create-experiment.png
new file mode 100644
index 00000000..b086fefa
Binary files /dev/null and b/react-ui/src/assets/img/create-experiment.png differ
diff --git a/react-ui/src/assets/img/edit-experiment.png b/react-ui/src/assets/img/edit-experiment.png
new file mode 100644
index 00000000..d41a8dbf
Binary files /dev/null and b/react-ui/src/assets/img/edit-experiment.png differ
diff --git a/react-ui/src/assets/img/modal-parameter.png b/react-ui/src/assets/img/modal-parameter.png
new file mode 100644
index 00000000..d717b59a
Binary files /dev/null and b/react-ui/src/assets/img/modal-parameter.png differ
diff --git a/react-ui/src/assets/svg/modal-close.svg b/react-ui/src/assets/svg/modal-close.svg
new file mode 100644
index 00000000..1345011e
--- /dev/null
+++ b/react-ui/src/assets/svg/modal-close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/assets/svg/parameter.svg b/react-ui/src/assets/svg/parameter.svg
new file mode 100644
index 00000000..58803521
--- /dev/null
+++ b/react-ui/src/assets/svg/parameter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/assets/svg/view-param.svg b/react-ui/src/assets/svg/view-param.svg
new file mode 100644
index 00000000..3eb2efce
--- /dev/null
+++ b/react-ui/src/assets/svg/view-param.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/components/KFModal/index.less b/react-ui/src/components/KFModal/index.less
new file mode 100644
index 00000000..192ec678
--- /dev/null
+++ b/react-ui/src/components/KFModal/index.less
@@ -0,0 +1,37 @@
+.kf-modal {
+ .ant-modal-content {
+ padding: 20px 67px;
+ background: linear-gradient(180deg, #cfdfff 0%, #d4e2ff 9.77%, #ffffff 40%, #ffffff 100%);
+ border-radius: 21px;
+ }
+ .ant-modal-header {
+ margin: 20px 0;
+ background-color: transparent;
+ }
+ .ant-modal-footer {
+ display: flex;
+ justify-content: center;
+ margin: 40px 0 20px 0;
+
+ .ant-btn {
+ height: 40px;
+ padding: 0 30px;
+ font-size: 16px;
+ border-radius: 10px;
+ }
+ .ant-btn-default {
+ color: #1d1d20;
+ background: rgba(22, 100, 255, 0.06);
+ border-color: transparent;
+ }
+ .ant-btn + .ant-btn {
+ margin-left: 20px;
+ }
+ }
+ .ant-modal-close {
+ top: 27px;
+ right: 27px;
+ width: 26px;
+ height: 26px;
+ }
+}
diff --git a/react-ui/src/components/KFModal/index.tsx b/react-ui/src/components/KFModal/index.tsx
new file mode 100644
index 00000000..2ce5907b
--- /dev/null
+++ b/react-ui/src/components/KFModal/index.tsx
@@ -0,0 +1,25 @@
+// 自定义 Modal
+
+import { ReactComponent as CloseIcon } from '@/assets/svg/modal-close.svg';
+import ModalTitle from '@/components/ModalTitle';
+import { Modal, type ModalProps } from 'antd';
+import classNames from 'classnames';
+import './index.less';
+
+type KFModalProps = ModalProps & {
+ image: string;
+};
+function KFModal({ title, image, children, className, ...rest }: KFModalProps) {
+ return (
+