Merge branch 'dev' into dev-zw
This commit is contained in:
commit
9101179343
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
|
@ -224,8 +224,8 @@ const Dataset = () => {
|
|||
<span style={{ color: '#1d1d20', fontSize: '20px' }}>{datasetDetailObj.name}</span>
|
||||
<div className={Styles.smallTagBox}>
|
||||
<div className={Styles.tagItem}>数据集 id:{datasetDetailObj.id}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.data_tag || '...'}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.data_type}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.dataset_type_name || '...'}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.dataset_tag_name || '...'}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={Styles.datasetIntroCneterBox}>
|
||||
|
|
|
@ -229,6 +229,11 @@
|
|||
border-color: #eaeaea;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
.dropdown{
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 15px;
|
||||
}
|
||||
.itemText {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
|
|
|
@ -1,14 +1,22 @@
|
|||
import { getAccessToken } from '@/access';
|
||||
import clock from '@/assets/img/clock.png';
|
||||
import creatByImg from '@/assets/img/creatBy.png';
|
||||
import deleteIcon from '@/assets/img/delete-icon.png';
|
||||
import KFIcon from '@/components/KFIcon';
|
||||
import { addDatesetAndVesion, getAssetIcon, getDatasetList } from '@/services/dataset/index.js';
|
||||
import {
|
||||
addDatesetAndVesion,
|
||||
deleteDataset,
|
||||
getAssetIcon,
|
||||
getDatasetList,
|
||||
} from '@/services/dataset/index.js';
|
||||
import { getDictSelectOption } from '@/services/system/dict';
|
||||
import { modalConfirm } from '@/utils/ui';
|
||||
import { UploadOutlined } from '@ant-design/icons';
|
||||
import { Button, Form, Input, Modal, Pagination, Radio, Select, Upload } from 'antd';
|
||||
import moment from 'moment';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
||||
import './index.less';
|
||||
import Styles from './index.less';
|
||||
const { Search } = Input;
|
||||
|
@ -277,7 +285,30 @@ const PublicData = (React.FC = () => {
|
|||
return (
|
||||
<div className={Styles.dataItem} onClick={(e) => routeToIntro(e, item)}>
|
||||
<span className={Styles.itemText}>{item.name}</span>
|
||||
<img
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
modalConfirm({
|
||||
title: '确定删除该条数据集实例吗?',
|
||||
onOk: () => {
|
||||
deleteDataset(item.id).then((ret) => {
|
||||
if (ret.code === 200) {
|
||||
message.success('删除成功');
|
||||
getModelLists(queryFlow);
|
||||
} else {
|
||||
message.error(ret.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}}
|
||||
className={Styles.dropdown}
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
src={deleteIcon}
|
||||
alt=""
|
||||
/>
|
||||
<div className={Styles.itemDescripition}>{item.description}</div>
|
||||
|
||||
<div className={Styles.itemTime}>
|
||||
<img
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import clock from '@/assets/img/clock.png';
|
||||
import creatByImg from '@/assets/img/creatBy.png';
|
||||
import { getAssetIcon, getDatasetList } from '@/services/dataset/index.js';
|
||||
import deleteIcon from '@/assets/img/delete-icon.png';
|
||||
import { deleteDataset, getAssetIcon, getDatasetList } from '@/services/dataset/index.js';
|
||||
import { modalConfirm } from '@/utils/ui';
|
||||
import { Form, Input, Pagination } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { useEffect, useState } from 'react';
|
||||
|
@ -225,6 +227,28 @@ const PublicData = () => {
|
|||
return (
|
||||
<div className={Styles.dataItem} onClick={(e) => routeToIntro(e, item)}>
|
||||
<span className={Styles.itemText}>{item.name}</span>
|
||||
<img
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
modalConfirm({
|
||||
title: '确定删除该条数据集实例吗?',
|
||||
onOk: () => {
|
||||
deleteDataset(item.id).then((ret) => {
|
||||
if (ret.code === 200) {
|
||||
message.success('删除成功');
|
||||
getModelLists(queryFlow);
|
||||
} else {
|
||||
message.error(ret.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}}
|
||||
className={Styles.dropdown}
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
src={deleteIcon}
|
||||
alt=""
|
||||
/>
|
||||
<div className={Styles.itemDescripition}>{item.description}</div>
|
||||
<div className={Styles.itemTime}>
|
||||
<img
|
||||
|
|
|
@ -29,12 +29,37 @@
|
|||
background: #ffffff;
|
||||
box-shadow: 0px 3px 6px rgba(146, 146, 146, 0.09);
|
||||
}
|
||||
.drawBox{
|
||||
:global{
|
||||
.ant-drawer .ant-drawer-body{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.experimentDrawer{
|
||||
:global{
|
||||
.ant-tabs >.ant-tabs-nav .ant-tabs-nav-list{
|
||||
margin-left: 24px;
|
||||
}
|
||||
.ant-drawer .ant-drawer-body{
|
||||
overflow-y: hidden;
|
||||
}
|
||||
.ant-tabs {
|
||||
height: calc(100% - 160px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.detailBox {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15px;
|
||||
color: #1d1d20;
|
||||
font-size: 15px;
|
||||
padding-left: 24px;
|
||||
|
||||
}
|
||||
.allMessageItem {
|
||||
display: flex;
|
||||
|
|
|
@ -386,7 +386,7 @@ const Props = forwardRef(({ onParentChange }, ref) => {
|
|||
},
|
||||
}));
|
||||
return (
|
||||
<>
|
||||
<div className={Styles.drawBox}>
|
||||
<Drawer
|
||||
title="任务执行详情"
|
||||
placement="right"
|
||||
|
@ -397,9 +397,12 @@ const Props = forwardRef(({ onParentChange }, ref) => {
|
|||
afterOpenChange={afterOpenChange}
|
||||
open={open}
|
||||
width={420}
|
||||
className={Styles.experimentDrawer}
|
||||
destroyOnClose={true}
|
||||
>
|
||||
<div className={Styles.detailBox}>任务名称:{stagingItem.label}</div>
|
||||
<div className={Styles.detailBox} style={{ marginTop: '15px' }}>
|
||||
任务名称:{stagingItem.label}
|
||||
</div>
|
||||
<div className={Styles.detailBox}>
|
||||
执行状态:
|
||||
<div
|
||||
|
@ -429,7 +432,7 @@ const Props = forwardRef(({ onParentChange }, ref) => {
|
|||
</div>
|
||||
<Tabs defaultActiveKey="1" items={items} />
|
||||
</Drawer>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
|
||||
|
|
|
@ -69,6 +69,7 @@ function Experiment() {
|
|||
return { ...item, key: item.id };
|
||||
}),
|
||||
);
|
||||
|
||||
setTotal(res.data.totalElements);
|
||||
}
|
||||
};
|
||||
|
@ -82,6 +83,7 @@ function Experiment() {
|
|||
// 获取实验实例
|
||||
const getQueryByExperiment = (val) => {
|
||||
getQueryByExperimentId(val).then((ret) => {
|
||||
console.log(val);
|
||||
setExpandedRowKeys(val);
|
||||
if (ret && ret.data && ret.data.length > 0) {
|
||||
try {
|
||||
|
@ -159,6 +161,7 @@ function Experiment() {
|
|||
};
|
||||
const expandChange = (e, record) => {
|
||||
clearExperimentInTimers();
|
||||
console.log(e, record);
|
||||
if (record.id === expandedRowKeys) {
|
||||
setExpandedRowKeys(null);
|
||||
} else {
|
||||
|
@ -517,6 +520,7 @@ function Experiment() {
|
|||
: ''}
|
||||
</div>
|
||||
),
|
||||
|
||||
onExpand: (e, a) => {
|
||||
expandChange(e, a);
|
||||
},
|
||||
|
|
|
@ -219,6 +219,11 @@
|
|||
border-color: #eaeaea;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
.dropdown{
|
||||
position: absolute;
|
||||
right: 20px;
|
||||
top: 15px;
|
||||
}
|
||||
.itemText {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
|
|
|
@ -222,8 +222,8 @@ const Dataset = () => {
|
|||
<span style={{ color: '#1d1d20', fontSize: '20px' }}>{datasetDetailObj.name}</span>
|
||||
<div className={Styles.smallTagBox}>
|
||||
<div className={Styles.tagItem}>模型 id:{datasetDetailObj.id}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.data_tag || '...'}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.data_type}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.model_type_name || '...'}</div>
|
||||
<div className={Styles.tagItem}>{datasetDetailObj.model_tag_name || '...'}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={Styles.datasetIntroCneterBox}>
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
import { getAccessToken } from '@/access';
|
||||
import clock from '@/assets/img/clock.png';
|
||||
import creatByImg from '@/assets/img/creatBy.png';
|
||||
import deleteIcon from '@/assets/img/delete-icon.png';
|
||||
import KFIcon from '@/components/KFIcon';
|
||||
import { addModel, getAssetIcon, getModelList } from '@/services/dataset/index.js';
|
||||
import { addModel, deleteModel, getAssetIcon, getModelList } from '@/services/dataset/index.js';
|
||||
import { modalConfirm } from '@/utils/ui';
|
||||
import { UploadOutlined } from '@ant-design/icons';
|
||||
import { Button, Form, Input, Modal, Pagination, Select, Upload } from 'antd';
|
||||
import { Button, Form, Input, Modal, Pagination, Select, Upload, message } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
@ -54,8 +56,8 @@ const PublicData = () => {
|
|||
});
|
||||
const [activeType, setActiveType] = useState(null);
|
||||
const [activeTag, setActiveTag] = useState(null);
|
||||
const [datasetTypeList, setDatasetTypeList] = useState([]);
|
||||
const [datasetDirectionList, setDatasetDirectionList] = useState([]);
|
||||
const [modelTypeList, setmodelTypeList] = useState([]);
|
||||
const [modelDirectionList, setmodelDirectionList] = useState([]);
|
||||
const [isModalOpen, setIsModalOpen] = useState(false);
|
||||
const [datasetList, setDatasetList] = useState([]);
|
||||
const [total, setTotal] = useState(0);
|
||||
|
@ -82,11 +84,11 @@ const PublicData = () => {
|
|||
getAssetIcon(params).then((ret) => {
|
||||
console.log(ret);
|
||||
if (ret.code == 200 && ret.data.content && ret.data.content.length > 0) {
|
||||
setDatasetTypeList(ret.data.content.filter((item) => item.category_id == 3));
|
||||
setDatasetDirectionList(ret.data.content.filter((item) => item.category_id == 4));
|
||||
setmodelTypeList(ret.data.content.filter((item) => item.category_id == 3));
|
||||
setmodelDirectionList(ret.data.content.filter((item) => item.category_id == 4));
|
||||
} else {
|
||||
setDatasetTypeList([]);
|
||||
setDatasetDirectionList([]);
|
||||
setmodelTypeList([]);
|
||||
setmodelDirectionList([]);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -181,8 +183,8 @@ const PublicData = () => {
|
|||
/>
|
||||
<div className={Styles.itemTitle}>模型框架</div>
|
||||
<div className={Styles.itemBox}>
|
||||
{datasetTypeList && datasetTypeList.length > 0
|
||||
? datasetTypeList.map((item) => {
|
||||
{modelTypeList && modelTypeList.length > 0
|
||||
? modelTypeList.map((item) => {
|
||||
return (
|
||||
<div>
|
||||
<div
|
||||
|
@ -222,8 +224,8 @@ const PublicData = () => {
|
|||
</div>
|
||||
<div className={Styles.itemTitle}>模型能力</div>
|
||||
<div className={Styles.itemBox}>
|
||||
{datasetDirectionList && datasetDirectionList.length > 0
|
||||
? datasetDirectionList.map((item) => {
|
||||
{modelDirectionList && modelDirectionList.length > 0
|
||||
? modelDirectionList.map((item) => {
|
||||
return (
|
||||
<div>
|
||||
<div
|
||||
|
@ -282,9 +284,80 @@ const PublicData = () => {
|
|||
{datasetList && datasetList.length > 0
|
||||
? datasetList.map((item) => {
|
||||
return (
|
||||
<div className={Styles.dataItem} onClick={(e) => routeToIntro(e, item)}>
|
||||
<div
|
||||
className={Styles.dataItem}
|
||||
onClick={(e) => {
|
||||
routeToIntro(e, item);
|
||||
}}
|
||||
>
|
||||
<span className={Styles.itemText}>{item.name}</span>
|
||||
<div className={Styles.itemDescripition}>{item.description}</div>
|
||||
<img
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
modalConfirm({
|
||||
title: '确定删除该条模型实例吗?',
|
||||
onOk: () => {
|
||||
deleteModel(item.id).then((ret) => {
|
||||
if (ret.code === 200) {
|
||||
message.success('删除成功');
|
||||
getModelLists(queryFlow);
|
||||
} else {
|
||||
message.error(ret.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}}
|
||||
className={Styles.dropdown}
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
src={deleteIcon}
|
||||
alt=""
|
||||
/>
|
||||
{/* <Dropdown
|
||||
className={Styles.dropdown}
|
||||
key={item.name}
|
||||
menu={{
|
||||
items: [
|
||||
{
|
||||
label: '详情',
|
||||
key: 'detail',
|
||||
},
|
||||
{
|
||||
label: '删除',
|
||||
key: 'delete',
|
||||
},
|
||||
],
|
||||
onClick: (e) => {
|
||||
console.log(e);
|
||||
if (e.key === 'detail') {
|
||||
routeToIntro(e, item);
|
||||
} else if (e.key === 'delete') {
|
||||
modalConfirm({
|
||||
title: '确定删除该条模型实例吗?',
|
||||
onOk: () => {
|
||||
deleteModel(item.id).then((ret) => {
|
||||
if (ret.code === 200) {
|
||||
message.success('删除成功');
|
||||
getModelLists(queryFlow);
|
||||
} else {
|
||||
message.error(ret.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
}}
|
||||
>
|
||||
<div>
|
||||
<img
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
src={moreBack}
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
</Dropdown> */}
|
||||
,<div className={Styles.itemDescripition}>{item.description}</div>
|
||||
<div className={Styles.itemTime}>
|
||||
<img
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
|
@ -401,7 +474,13 @@ const PublicData = () => {
|
|||
]
|
||||
}
|
||||
>
|
||||
<Select allowClear placeholder="请选择模型类型" options={[]} />
|
||||
<Select
|
||||
allowClear
|
||||
placeholder="请选择模型类型"
|
||||
options={modelTypeList.map((item) => {
|
||||
return { value: item.id, label: item.name };
|
||||
})}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
label="模型能力"
|
||||
|
@ -415,7 +494,13 @@ const PublicData = () => {
|
|||
]
|
||||
}
|
||||
>
|
||||
<Select allowClear placeholder="请选择模型标签" options={[]} />
|
||||
<Select
|
||||
allowClear
|
||||
placeholder="请选择模型标签"
|
||||
options={modelDirectionList.map((item) => {
|
||||
return { value: item.id, label: item.name };
|
||||
})}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="模型文件" name="models_version_vos">
|
||||
<Upload {...props} data={{ uuid: uuid }} accept=".zip,.tgz">
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
import clock from '@/assets/img/clock.png';
|
||||
import creatByImg from '@/assets/img/creatBy.png';
|
||||
import { getAssetIcon, getModelList } from '@/services/dataset/index.js';
|
||||
import { Form, Input, Modal, Pagination, Radio } from 'antd';
|
||||
import deleteIcon from '@/assets/img/delete-icon.png';
|
||||
import { deleteModel, getAssetIcon, getModelList } from '@/services/dataset/index.js';
|
||||
import { modalConfirm } from '@/utils/ui';
|
||||
import { Form, Input, Modal, Pagination, Radio, message } from 'antd';
|
||||
import moment from 'moment';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
|
@ -224,8 +226,35 @@ const PublicData = () => {
|
|||
{datasetList && datasetList.length > 0
|
||||
? datasetList.map((item) => {
|
||||
return (
|
||||
<div className={Styles.dataItem} onClick={(e) => routeToIntro(e, item)}>
|
||||
<div
|
||||
className={Styles.dataItem}
|
||||
onClick={(e) => {
|
||||
routeToIntro(e, item);
|
||||
}}
|
||||
>
|
||||
<span className={Styles.itemText}>{item.name}</span>
|
||||
<img
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
modalConfirm({
|
||||
title: '确定删除该条模型实例吗?',
|
||||
onOk: () => {
|
||||
deleteModel(item.id).then((ret) => {
|
||||
if (ret.code === 200) {
|
||||
message.success('删除成功');
|
||||
getModelLists(queryFlow);
|
||||
} else {
|
||||
message.error(ret.msg);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
}}
|
||||
className={Styles.dropdown}
|
||||
style={{ width: '17px', marginRight: '6px' }}
|
||||
src={deleteIcon}
|
||||
alt=""
|
||||
/>
|
||||
<div className={Styles.itemDescripition}>{item.description}</div>
|
||||
<div className={Styles.itemTime}>
|
||||
<img
|
||||
|
|
|
@ -118,3 +118,15 @@ export function exportDataset(id) {
|
|||
method: 'GET',
|
||||
});
|
||||
}
|
||||
// 删除模型集
|
||||
export function deleteModel(id) {
|
||||
return request(`/api/mmp/models/${id}`, {
|
||||
method: 'DELETE',
|
||||
});
|
||||
}
|
||||
// 删除数据集
|
||||
export function deleteDataset(id) {
|
||||
return request(`/api/mmp/dataset/${id}`, {
|
||||
method: 'DELETE',
|
||||
});
|
||||
}
|
||||
|
|
|
@ -240,6 +240,7 @@ public class DatasetServiceImpl implements DatasetService {
|
|||
@Override
|
||||
public List<Map<String, String>> uploadDataset(MultipartFile[] files, String uuid) throws Exception {
|
||||
List<Map<String, String>> results = new ArrayList<>();
|
||||
|
||||
for (MultipartFile file:files){
|
||||
// 构建objectName
|
||||
String username = SecurityUtils.getLoginUser().getUsername();
|
||||
|
@ -259,7 +260,6 @@ public class DatasetServiceImpl implements DatasetService {
|
|||
if (dataset == null) {
|
||||
throw new Exception("数据集不存在,请检查数据集id");
|
||||
}
|
||||
|
||||
DatasetVersion version = datasetVersionService.queryByDatasetVersion(datasetVersion);
|
||||
String url = "";
|
||||
if (version == null) {
|
||||
|
|
Loading…
Reference in New Issue