diff --git a/.gitignore b/.gitignore
index 89bd235d..0203dc65 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,7 +43,6 @@ target/
._*
.Spotlight-V100
.Trashes
-Icon?
ehthumbs.db
Thumbs.db
.factorypath
diff --git a/react-ui/config/defaultSettings.ts b/react-ui/config/defaultSettings.ts
index b4430310..35d75e3f 100644
--- a/react-ui/config/defaultSettings.ts
+++ b/react-ui/config/defaultSettings.ts
@@ -19,7 +19,7 @@ const Settings: ProLayoutProps & {
title: '复杂智能软件',
pwa: true,
logo: '/assets/images/left-top-logo.png',
- iconfontUrl: '',
+ iconfontUrl: '//at.alicdn.com/t/c/font_4509211_dfghcwme8ki.js',
token: {
// 参见ts声明,demo 见文档,通过token 修改样式
//https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F
diff --git a/react-ui/config/routes.ts b/react-ui/config/routes.ts
index 9c30003d..959bf0aa 100644
--- a/react-ui/config/routes.ts
+++ b/react-ui/config/routes.ts
@@ -135,6 +135,17 @@ export default [
path: '/dataset/datasetIntro/:id',
component: './Dataset/datasetIntro',
},
+ {
+ name: '镜像',
+ path: 'mirror',
+ routes: [
+ {
+ name: '镜像列表',
+ path: '',
+ component: './Mirror/list',
+ },
+ ],
+ },
{
name: '模型管理',
path: '/dataset/modelIndex',
diff --git a/react-ui/public/assets/images/delete-icon.png b/react-ui/public/assets/images/delete-icon.png
new file mode 100644
index 00000000..310f8bb8
Binary files /dev/null and b/react-ui/public/assets/images/delete-icon.png differ
diff --git a/react-ui/public/assets/images/icon/流水线-1.png b/react-ui/public/assets/images/icon/流水线-1.png
new file mode 100644
index 00000000..7fbb9266
Binary files /dev/null and b/react-ui/public/assets/images/icon/流水线-1.png differ
diff --git a/react-ui/src/app.tsx b/react-ui/src/app.tsx
index ee86b5cd..5c255b73 100644
--- a/react-ui/src/app.tsx
+++ b/react-ui/src/app.tsx
@@ -1,7 +1,9 @@
import RightContent from '@/components/RightContent';
+import themes from '@/styles/theme.less';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import type { RunTimeLayoutConfig } from '@umijs/max';
import { history } from '@umijs/max';
+import { RuntimeAntdConfig } from 'umi';
import defaultSettings from '../config/defaultSettings';
import '../public/fonts/font.css';
import { getAccessToken } from './access';
@@ -182,3 +184,24 @@ export function render(oldRender: () => void) {
oldRender();
});
}
+
+// 主题修改
+export const antd: RuntimeAntdConfig = (memo) => {
+ memo.theme ??= {};
+ memo.theme.token = {
+ colorPrimary: themes['primaryColor'],
+ };
+ memo.theme.components ??= {};
+ memo.theme.components.Tabs = {};
+ // memo.theme.cssVar = true;
+ // memo.theme.hashed = false;
+
+ // memo.appConfig = {
+ // message: {
+ // // 配置 message 最大显示数,超过限制时,最早的消息会被自动关闭
+ // maxCount: 3,
+ // },
+ // };
+
+ return memo;
+};
diff --git a/react-ui/src/assets/img/mirror-tabs-bg.png b/react-ui/src/assets/img/mirror-tabs-bg.png
new file mode 100644
index 00000000..9e01b8f3
Binary files /dev/null and b/react-ui/src/assets/img/mirror-tabs-bg.png differ
diff --git a/react-ui/src/assets/img/modal-select-dataset.png b/react-ui/src/assets/img/modal-select-dataset.png
new file mode 100644
index 00000000..6a99cc24
Binary files /dev/null and b/react-ui/src/assets/img/modal-select-dataset.png differ
diff --git a/react-ui/src/assets/svg/save--return.svg b/react-ui/src/assets/svg/save--return.svg
new file mode 100644
index 00000000..73fd196d
--- /dev/null
+++ b/react-ui/src/assets/svg/save--return.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/components/KFModal/index.tsx b/react-ui/src/components/KFModal/index.tsx
index 3a03e303..3491ca6b 100644
--- a/react-ui/src/components/KFModal/index.tsx
+++ b/react-ui/src/components/KFModal/index.tsx
@@ -1,22 +1,35 @@
-// 自定义 Modal
+/*
+ * @Author: 赵伟
+ * @Date: 2024-04-15 10:01:29
+ * @Description: 自定义 Modal
+ */
import ModalTitle from '@/components/ModalTitle';
-import { Modal, type ModalProps } from 'antd';
+import { ConfigProvider, Modal, theme, type ModalProps } from 'antd';
import classNames from 'classnames';
+import { useAntdConfig } from 'umi';
import './index.less';
-type KFModalProps = ModalProps & {
+const { useToken } = theme;
+
+export interface KFModalProps extends ModalProps {
image: string;
-};
-function KFModal({ title, image, children, className, ...rest }: KFModalProps) {
+}
+function KFModal({ title, image, children, className = '', ...rest }: KFModalProps) {
+ const { token } = useToken();
+ console.log('token', token);
+ const antdConfig = useAntdConfig();
+ console.log('antdConfig', antdConfig);
return (
- }
- >
- {children}
-
+
+ }
+ >
+ {children}
+
+
);
}
diff --git a/react-ui/src/components/KFTabs/index.less b/react-ui/src/components/KFTabs/index.less
new file mode 100644
index 00000000..e69de29b
diff --git a/react-ui/src/components/KFTabs/index.tsx b/react-ui/src/components/KFTabs/index.tsx
new file mode 100644
index 00000000..a9a9f2f1
--- /dev/null
+++ b/react-ui/src/components/KFTabs/index.tsx
@@ -0,0 +1,32 @@
+/*
+ * @Author: 赵伟
+ * @Date: 2024-04-16 14:55:40
+ * @Description:
+ */
+// import { useEffect, useState } from 'react';
+// import styles from './index.less';
+// import { Tabs } from "antd"
+
+// function KFTabs() {
+// const [iframeUrl, setIframeUrl] = useState('');
+// useEffect(() => {
+
+// }, []);
+
+// return (
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+//
+// );
+// }
+
+// export default KFTabs;
diff --git a/react-ui/src/global.less b/react-ui/src/global.less
index 29b900b5..a50f3ec4 100644
--- a/react-ui/src/global.less
+++ b/react-ui/src/global.less
@@ -31,10 +31,10 @@ body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
-a{
- color:#1664ff;
+a {
+ color: #1664ff;
}
-.ant-btn-link{
+.ant-btn-link {
color: #1664ff;
}
.ant-pro-layout .ant-pro-layout-content {
@@ -52,9 +52,8 @@ a{
.ant-menu-light .ant-menu-item-selected {
background: rgba(197, 232, 255, 0.8) !important;
}
-.ant-pro-layout .ant-pro-sider .ant-layout-sider-children{
- background:#f2f5f7;
-
+.ant-pro-layout .ant-pro-sider .ant-layout-sider-children {
+ background: #f2f5f7;
}
.ant-pro-base-menu-inline {
// height: 87vh;
@@ -64,12 +63,12 @@ a{
.ant-pro-layout .ant-pro-layout-content {
background-color: transparent;
}
-.ant-table-wrapper .ant-table-pagination.ant-pagination{
- background-color: #fff;
+.ant-table-wrapper .ant-table-pagination.ant-pagination {
margin: 0;
padding: 21px 16px;
+ background-color: #fff;
}
-.ant-table-wrapper .ant-table{
+.ant-table-wrapper .ant-table {
height: 75vh;
}
.ant-pro-global-header-logo img {
@@ -81,38 +80,96 @@ a{
.ant-pro-layout .ant-pro-layout-container {
height: 98vh;
}
-.ant-modal .ant-modal-close-x{
- border: 2px solid #272536;
- border-radius: 50%;
+.ant-modal-confirm .ant-modal-confirm-paragraph{
+ margin: 54px 0 auto;
+ text-align: center;
+}
+.ant-modal-confirm-confirm .ant-modal-confirm-body > .anticon {
+ display: none;
+}
+.ant-modal-confirm .ant-modal-confirm-btns {
+ margin-top: 30px;
+ text-align: center;
+}
+.ant-modal-confirm-btns .ant-btn-default{
+ width:110px;
+height:40px;
+background:rgba(22, 100, 255, 0.06);
+border-radius:10px;
+color:#1d1d20;
+font-size:18px;
+margin-right: 10px;
+border-color: transparent;
+}
+.ant-modal-confirm-btns .ant-btn-default:hover {
+ background: rgba(22, 100, 255, 0.06);
+ border-color: transparent;
+}
+.ant-modal-confirm-btns .ant-btn-primary{
+ width:110px;
+ height:40px;
+ background:#1664ff;
+ border-radius:10px;
+ font-size: 18px;
+}
+.ant-modal .ant-input-affix-wrapper{
+ height: 46px;
+ padding: 1px 11px;
+}
+.ant-modal .ant-select-single{
+ height: 46px;
+
+}
+.ant-modal .ant-select-single .ant-select-selector .ant-select-selection-placeholder{
+ line-height: 46px;
+}
+.ant-modal .ant-modal-close-x {
width: 26px;
height: 26px;
color: #272536;
+ border: 2px solid #272536;
+ border-radius: 50%;
}
-.ant-modal-content{
- margin-left: -130px;
+.ant-modal-content {
margin-top: 50px;
+ margin-left: -130px;
+}
+.ant-modal .ant-modal-content {
+ padding: 0;
+}
+.ant-modal-confirm-body-wrapper{
+height:303px;
+border-radius:21px;
+background-image: url(/assets/images/modal-back.png);
+background-repeat:no-repeat;
+background-size:100%;
+background-position: top center;
+border-radius: 0;
+}
+.ant-modal .ant-modal-content {
+ border-radius: 20px;
}
.ant-modal .ant-modal-close:hover {
background-color: transparent;
}
-.ant-modal .ant-modal-footer >.ant-btn+.ant-btn{
+.ant-modal .ant-modal-footer > .ant-btn + .ant-btn {
margin-left: 20px;
}
.ant-pagination .ant-pagination-item-active a {
color: #fff;
background: #1664ff;
border-color: #1664ff;
- border-radius:6px;
+ border-radius: 6px;
}
.ant-pagination .ant-pagination-item-active:hover {
color: #fff;
background: rgba(22, 100, 255, 0.8);
border-color: rgba(22, 100, 255, 0.8);
- border-radius:6px;
+ border-radius: 6px;
}
.ant-pagination .ant-pagination-item {
border: 1px solid #e6e6e6;
- border-radius:6px;
+ border-radius: 6px;
}
// ::-webkit-scrollbar-button {
// background: #97a1bd;
@@ -152,3 +209,7 @@ ol {
}
}
}
+
+.umi-local-svg {
+ vertical-align: -1px;
+}
diff --git a/react-ui/src/hooks/index.ts b/react-ui/src/hooks/index.ts
index 8e0f60c6..7ebf7b1c 100644
--- a/react-ui/src/hooks/index.ts
+++ b/react-ui/src/hooks/index.ts
@@ -24,7 +24,7 @@ export function useStateRef(initialValue: T) {
* @param initialValue - The initial visibility state of the modal.
* @return An array containing the visibility state and functions to open and close the modal.
*/
-export function useAntdModal(initialValue: boolean) {
+export function useVisible(initialValue: boolean) {
const [visible, setVisible] = useState(initialValue);
const open = useCallback(() => {
diff --git a/react-ui/src/icons/dataset-select-button.svg b/react-ui/src/icons/dataset-select-button.svg
new file mode 100644
index 00000000..2a376d71
--- /dev/null
+++ b/react-ui/src/icons/dataset-select-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/icons/magnifying-glass.svg b/react-ui/src/icons/magnifying-glass.svg
new file mode 100644
index 00000000..69bf383b
--- /dev/null
+++ b/react-ui/src/icons/magnifying-glass.svg
@@ -0,0 +1,3 @@
+
diff --git a/react-ui/src/icons/mirror-select-button.svg b/react-ui/src/icons/mirror-select-button.svg
new file mode 100644
index 00000000..59e5a215
--- /dev/null
+++ b/react-ui/src/icons/mirror-select-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/icons/modal-close.svg b/react-ui/src/icons/modal-close.svg
new file mode 100644
index 00000000..1345011e
--- /dev/null
+++ b/react-ui/src/icons/modal-close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/icons/model-select-button.svg b/react-ui/src/icons/model-select-button.svg
new file mode 100644
index 00000000..525e061b
--- /dev/null
+++ b/react-ui/src/icons/model-select-button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/icons/parameter.svg b/react-ui/src/icons/parameter.svg
new file mode 100644
index 00000000..58803521
--- /dev/null
+++ b/react-ui/src/icons/parameter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/icons/view-param.svg b/react-ui/src/icons/view-param.svg
new file mode 100644
index 00000000..3eb2efce
--- /dev/null
+++ b/react-ui/src/icons/view-param.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/react-ui/src/pages/Dataset/datasetIntro.jsx b/react-ui/src/pages/Dataset/datasetIntro.jsx
index bdc9171b..bd7b1604 100644
--- a/react-ui/src/pages/Dataset/datasetIntro.jsx
+++ b/react-ui/src/pages/Dataset/datasetIntro.jsx
@@ -59,12 +59,14 @@ const Dataset = () => {
const locationParams = useParams(); //新版本获取路由参数接口
const [wordList, setWordList] = useState([]);
const [activeTabKey, setActiveTabKey] = useState('1');
+ const [uuid, setUuid] = useState(Date.now());
const getDatasetByDetail = () => {
getDatasetById(locationParams.id).then((ret) => {
console.log(ret);
setDatasetDetailObj(ret.data);
});
};
+ // 获取数据集版本
const getDatasetVersionList = () => {
getDatasetVersionsById(locationParams.id).then((ret) => {
console.log(ret);
@@ -77,6 +79,8 @@ const Dataset = () => {
};
}),
);
+ setVersion(ret.data[0]);
+ getDatasetVersions({ version: ret.data[0], dataset_id: locationParams.id });
}
});
};
@@ -90,6 +94,7 @@ const Dataset = () => {
form.setFieldsValue({ name: datasetDetailObj.name });
setDialogTitle('创建新版本');
+ setUuid(Date.now());
setIsModalOpen(true);
};
const handleCancel = () => {
@@ -102,16 +107,23 @@ const Dataset = () => {
};
const deleteDataset = () => {
Modal.confirm({
- title: '删除',
- content: '确定删除数据集版本?',
+ title: (
+
+

+
删除后,该数据集版本将不可恢复
+
+ ),
+ content: 是否确认删除?
,
okText: '确认',
cancelText: '取消',
onOk: () => {
deleteDatasetVersion({ dataset_id: locationParams.id, version }).then((ret) => {
- setVersion(null);
getDatasetVersionList();
- getDatasetVersions({ version, dataset_id: locationParams.id });
message.success('删除成功');
});
},
@@ -124,6 +136,7 @@ const Dataset = () => {
message.success('创建成功');
});
};
+ // 获取版本下的文件列表
const getDatasetVersions = (params) => {
getDatasetVersionIdList(params).then((res) => {
setWordList(res?.data?.content ?? []);
@@ -368,7 +381,7 @@ const Dataset = () => {
},
]}
>
-
+