| @@ -19,7 +19,7 @@ const Settings: ProLayoutProps & { | |||||
| title: '智能软件开发平台', | title: '智能软件开发平台', | ||||
| pwa: true, | pwa: true, | ||||
| logo: '/assets/images/left-top-logo.png', | logo: '/assets/images/left-top-logo.png', | ||||
| iconfontUrl: '//at.alicdn.com/t/c/font_4511326_t634djsqobs.js', | |||||
| iconfontUrl: '//at.alicdn.com/t/c/font_4511326_a182r7rksx5.js', | |||||
| token: { | token: { | ||||
| // 参见ts声明,demo 见文档,通过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 | //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 | ||||
| @@ -17,14 +17,12 @@ | |||||
| margin-top: 40px; | margin-top: 40px; | ||||
| .ant-btn { | .ant-btn { | ||||
| height: 42px; | |||||
| height: 40px; | |||||
| padding: 0 30px; | padding: 0 30px; | ||||
| font-size: @font-size-content; | font-size: @font-size-content; | ||||
| border-radius: 10px; | border-radius: 10px; | ||||
| } | } | ||||
| .ant-btn-default { | .ant-btn-default { | ||||
| color: @text-color; | |||||
| background: rgba(22, 100, 255, 0.06); | |||||
| border-color: transparent; | border-color: transparent; | ||||
| } | } | ||||
| .ant-btn + .ant-btn { | .ant-btn + .ant-btn { | ||||
| @@ -129,8 +129,6 @@ | |||||
| border-radius: 10px; | border-radius: 10px; | ||||
| } | } | ||||
| .ant-btn-default { | .ant-btn-default { | ||||
| color: @text-color; | |||||
| background: rgba(22, 100, 255, 0.06); | |||||
| border-color: transparent; | border-color: transparent; | ||||
| } | } | ||||
| .ant-btn + .ant-btn { | .ant-btn + .ant-btn { | ||||
| @@ -139,6 +137,7 @@ | |||||
| } | } | ||||
| } | } | ||||
| // 表单类型为large时,font-size为15px | |||||
| .ant-form-large { | .ant-form-large { | ||||
| .ant-form-item-label { | .ant-form-item-label { | ||||
| label { | label { | ||||
| @@ -9,10 +9,10 @@ import { | |||||
| } from '@/services/dataset/index.js'; | } from '@/services/dataset/index.js'; | ||||
| import { downLoadZip } from '@/utils/downloadfile'; | import { downLoadZip } from '@/utils/downloadfile'; | ||||
| import { UploadOutlined } from '@ant-design/icons'; | import { UploadOutlined } from '@ant-design/icons'; | ||||
| import { useParams, useSearchParams } from '@umijs/max'; | |||||
| import { Button, Form, Input, Modal, Select, Table, Tabs, Upload, message } from 'antd'; | import { Button, Form, Input, Modal, Select, Table, Tabs, Upload, message } from 'antd'; | ||||
| import moment from 'moment'; | import moment from 'moment'; | ||||
| import { useEffect, useRef, useState } from 'react'; | import { useEffect, useRef, useState } from 'react'; | ||||
| import { useParams } from 'react-router-dom'; | |||||
| import Styles from './index.less'; | import Styles from './index.less'; | ||||
| const { Search } = Input; | const { Search } = Input; | ||||
| const { TabPane } = Tabs; | const { TabPane } = Tabs; | ||||
| @@ -53,9 +53,11 @@ const Dataset = () => { | |||||
| const [version, setVersion] = useState(null); | const [version, setVersion] = useState(null); | ||||
| const [versionList, setVersionList] = useState([]); | const [versionList, setVersionList] = useState([]); | ||||
| const locationParams = useParams(); //新版本获取路由参数接口 | const locationParams = useParams(); //新版本获取路由参数接口 | ||||
| const [searchParams] = useSearchParams(); | |||||
| const [wordList, setWordList] = useState([]); | const [wordList, setWordList] = useState([]); | ||||
| const [activeTabKey, setActiveTabKey] = useState('1'); | const [activeTabKey, setActiveTabKey] = useState('1'); | ||||
| const [uuid, setUuid] = useState(Date.now()); | const [uuid, setUuid] = useState(Date.now()); | ||||
| const isPublic = searchParams.get('isPublic') === 'true'; | |||||
| const getDatasetByDetail = () => { | const getDatasetByDetail = () => { | ||||
| getDatasetById(locationParams.id).then((ret) => { | getDatasetById(locationParams.id).then((ret) => { | ||||
| console.log(ret); | console.log(ret); | ||||
| @@ -264,15 +266,17 @@ const Dataset = () => { | |||||
| <div | <div | ||||
| style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }} | style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }} | ||||
| > | > | ||||
| <Button | |||||
| type="default" | |||||
| className={Styles.plusButton} | |||||
| style={{ margin: '0 20px 0 0' }} | |||||
| onClick={deleteDataset} | |||||
| icon={<KFIcon type="icon-shanchu" />} | |||||
| > | |||||
| 删除 | |||||
| </Button> | |||||
| {!isPublic && ( | |||||
| <Button | |||||
| type="default" | |||||
| className={Styles.plusButton} | |||||
| style={{ margin: '0 20px 0 0' }} | |||||
| onClick={deleteDataset} | |||||
| icon={<KFIcon type="icon-shanchu" />} | |||||
| > | |||||
| 删除 | |||||
| </Button> | |||||
| )} | |||||
| <Button | <Button | ||||
| type="default" | type="default" | ||||
| disabled={!version} | disabled={!version} | ||||
| @@ -155,7 +155,7 @@ const PublicData = (React.FC = () => { | |||||
| const routeToIntro = (e, record) => { | const routeToIntro = (e, record) => { | ||||
| e.stopPropagation(); | e.stopPropagation(); | ||||
| console.log(record); | console.log(record); | ||||
| navgite({ pathname: `/dataset/dataset/${record.id}` }); | |||||
| navgite({ pathname: `/dataset/dataset/${record.id}?isPublic=false` }); | |||||
| }; | }; | ||||
| const onFinishFailed = (errorInfo) => { | const onFinishFailed = (errorInfo) => { | ||||
| console.log('Failed:', errorInfo); | console.log('Failed:', errorInfo); | ||||
| @@ -1,8 +1,6 @@ | |||||
| import clock from '@/assets/img/clock.png'; | import clock from '@/assets/img/clock.png'; | ||||
| import creatByImg from '@/assets/img/creatBy.png'; | import creatByImg from '@/assets/img/creatBy.png'; | ||||
| import deleteIcon from '@/assets/img/delete-icon.png'; | |||||
| import { deleteDataset, getAssetIcon, getDatasetList } from '@/services/dataset/index.js'; | |||||
| import { modalConfirm } from '@/utils/ui'; | |||||
| import { getAssetIcon, getDatasetList } from '@/services/dataset/index.js'; | |||||
| import { Form, Input, Pagination } from 'antd'; | import { Form, Input, Pagination } from 'antd'; | ||||
| import moment from 'moment'; | import moment from 'moment'; | ||||
| import { useEffect, useState } from 'react'; | import { useEffect, useState } from 'react'; | ||||
| @@ -108,7 +106,7 @@ const PublicData = () => { | |||||
| const routeToIntro = (e, record) => { | const routeToIntro = (e, record) => { | ||||
| e.stopPropagation(); | e.stopPropagation(); | ||||
| console.log(record); | console.log(record); | ||||
| navgite({ pathname: `/dataset/dataset/${record.id}` }); | |||||
| navgite({ pathname: `/dataset/dataset/${record.id}?isPublic=true` }); | |||||
| }; | }; | ||||
| const onFinishFailed = (errorInfo) => { | const onFinishFailed = (errorInfo) => { | ||||
| console.log('Failed:', errorInfo); | console.log('Failed:', errorInfo); | ||||
| @@ -227,28 +225,6 @@ const PublicData = () => { | |||||
| return ( | 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> | <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.itemDescripition}>{item.description}</div> | ||||
| <div className={Styles.itemTime}> | <div className={Styles.itemTime}> | ||||
| <img | <img | ||||
| @@ -246,8 +246,8 @@ const Props = forwardRef(({ onParentChange }, ref) => { | |||||
| > | > | ||||
| 下载 | 下载 | ||||
| </a> | </a> | ||||
| <a style={{ marginRight: '10px' }}>导出到模型库</a> | |||||
| <a style={{ marginRight: '10px' }}>导出到数据集</a> | |||||
| {/* <a style={{ marginRight: '10px' }}>导出到模型库</a> | |||||
| <a style={{ marginRight: '10px' }}>导出到数据集</a> */} | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div style={{ margin: '15px 0' }} className={Styles.resultContent}> | <div style={{ margin: '15px 0' }} className={Styles.resultContent}> | ||||
| @@ -9,10 +9,10 @@ import { | |||||
| } from '@/services/dataset/index.js'; | } from '@/services/dataset/index.js'; | ||||
| import { downLoadZip } from '@/utils/downloadfile'; | import { downLoadZip } from '@/utils/downloadfile'; | ||||
| import { UploadOutlined } from '@ant-design/icons'; | import { UploadOutlined } from '@ant-design/icons'; | ||||
| import { useParams, useSearchParams } from '@umijs/max'; | |||||
| import { Button, Form, Input, Modal, Select, Table, Tabs, Upload, message } from 'antd'; | import { Button, Form, Input, Modal, Select, Table, Tabs, Upload, message } from 'antd'; | ||||
| import moment from 'moment'; | import moment from 'moment'; | ||||
| import { useEffect, useRef, useState } from 'react'; | import { useEffect, useRef, useState } from 'react'; | ||||
| import { useParams } from 'react-router-dom'; | |||||
| import Styles from './index.less'; | import Styles from './index.less'; | ||||
| const { Search } = Input; | const { Search } = Input; | ||||
| const { TabPane } = Tabs; | const { TabPane } = Tabs; | ||||
| @@ -53,9 +53,11 @@ const Dataset = () => { | |||||
| const [version, setVersion] = useState(null); | const [version, setVersion] = useState(null); | ||||
| const [versionList, setVersionList] = useState([]); | const [versionList, setVersionList] = useState([]); | ||||
| const locationParams = useParams(); //新版本获取路由参数接口 | const locationParams = useParams(); //新版本获取路由参数接口 | ||||
| const [searchParams] = useSearchParams(); | |||||
| console.log(locationParams); | console.log(locationParams); | ||||
| const [wordList, setWordList] = useState([]); | const [wordList, setWordList] = useState([]); | ||||
| const [uuid, setUuid] = useState(Date.now()); | const [uuid, setUuid] = useState(Date.now()); | ||||
| const isPublic = searchParams.get('isPublic') === 'true'; | |||||
| const getModelByDetail = () => { | const getModelByDetail = () => { | ||||
| getModelById(locationParams.id).then((ret) => { | getModelById(locationParams.id).then((ret) => { | ||||
| console.log(ret); | console.log(ret); | ||||
| @@ -262,15 +264,18 @@ const Dataset = () => { | |||||
| <div | <div | ||||
| style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }} | style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }} | ||||
| > | > | ||||
| <Button | |||||
| type="default" | |||||
| className={Styles.plusButton} | |||||
| style={{ margin: '0 20px 0 0' }} | |||||
| onClick={deleteDataset} | |||||
| icon={<KFIcon type="icon-shanchu" />} | |||||
| > | |||||
| 删除 | |||||
| </Button> | |||||
| {!isPublic && ( | |||||
| <Button | |||||
| type="default" | |||||
| className={Styles.plusButton} | |||||
| style={{ margin: '0 20px 0 0' }} | |||||
| onClick={deleteDataset} | |||||
| icon={<KFIcon type="icon-shanchu" />} | |||||
| > | |||||
| 删除 | |||||
| </Button> | |||||
| )} | |||||
| <Button | <Button | ||||
| type="default" | type="default" | ||||
| className={Styles.plusButton} | className={Styles.plusButton} | ||||
| @@ -152,7 +152,7 @@ const PublicData = () => { | |||||
| const routeToIntro = (e, record) => { | const routeToIntro = (e, record) => { | ||||
| e.stopPropagation(); | e.stopPropagation(); | ||||
| console.log(record); | console.log(record); | ||||
| navgite({ pathname: `/dataset/model/${record.id}` }); | |||||
| navgite({ pathname: `/dataset/model/${record.id}?isPublic=false` }); | |||||
| }; | }; | ||||
| const onFinishFailed = (errorInfo) => { | const onFinishFailed = (errorInfo) => { | ||||
| console.log('Failed:', errorInfo); | console.log('Failed:', errorInfo); | ||||
| @@ -357,7 +357,7 @@ const PublicData = () => { | |||||
| /> | /> | ||||
| </div> | </div> | ||||
| </Dropdown> */} | </Dropdown> */} | ||||
| ,<div className={Styles.itemDescripition}>{item.description}</div> | |||||
| <div className={Styles.itemDescripition}>{item.description}</div> | |||||
| <div className={Styles.itemTime}> | <div className={Styles.itemTime}> | ||||
| <img | <img | ||||
| style={{ width: '17px', marginRight: '6px' }} | style={{ width: '17px', marginRight: '6px' }} | ||||
| @@ -1,9 +1,7 @@ | |||||
| import clock from '@/assets/img/clock.png'; | import clock from '@/assets/img/clock.png'; | ||||
| import creatByImg from '@/assets/img/creatBy.png'; | import creatByImg from '@/assets/img/creatBy.png'; | ||||
| 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 { getAssetIcon, getModelList } from '@/services/dataset/index.js'; | |||||
| import { Form, Input, Modal, Pagination, Radio } from 'antd'; | |||||
| import moment from 'moment'; | import moment from 'moment'; | ||||
| import { useEffect, useState } from 'react'; | import { useEffect, useState } from 'react'; | ||||
| import { useNavigate } from 'react-router-dom'; | import { useNavigate } from 'react-router-dom'; | ||||
| @@ -109,7 +107,7 @@ const PublicData = () => { | |||||
| const routeToIntro = (e, record) => { | const routeToIntro = (e, record) => { | ||||
| e.stopPropagation(); | e.stopPropagation(); | ||||
| console.log(record); | console.log(record); | ||||
| navgite({ pathname: `/dataset/model/${record.id}` }); | |||||
| navgite({ pathname: `/dataset/model/${record.id}?isPublic=true` }); | |||||
| }; | }; | ||||
| const onFinishFailed = (errorInfo) => { | const onFinishFailed = (errorInfo) => { | ||||
| console.log('Failed:', errorInfo); | console.log('Failed:', errorInfo); | ||||
| @@ -233,28 +231,6 @@ const PublicData = () => { | |||||
| }} | }} | ||||
| > | > | ||||
| <span className={Styles.itemText}>{item.name}</span> | <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.itemDescripition}>{item.description}</div> | ||||
| <div className={Styles.itemTime}> | <div className={Styles.itemTime}> | ||||
| <img | <img | ||||
| @@ -1,4 +1,5 @@ | |||||
| import KFIcon from '@/components/KFIcon'; | import KFIcon from '@/components/KFIcon'; | ||||
| import KFModal from '@/components/KFModal'; | |||||
| import { | import { | ||||
| addWorkflow, | addWorkflow, | ||||
| cloneWorkflow, | cloneWorkflow, | ||||
| @@ -9,12 +10,13 @@ import { | |||||
| } from '@/services/pipeline/index.js'; | } from '@/services/pipeline/index.js'; | ||||
| import themes from '@/styles/theme.less'; | import themes from '@/styles/theme.less'; | ||||
| import { modalConfirm } from '@/utils/ui'; | import { modalConfirm } from '@/utils/ui'; | ||||
| import { Button, ConfigProvider, Form, Input, Modal, Space, Table, message } from 'antd'; | |||||
| import { Button, ConfigProvider, Form, Input, Space, Table, message } from 'antd'; | |||||
| import classNames from 'classnames'; | import classNames from 'classnames'; | ||||
| import momnet from 'moment'; | import momnet from 'moment'; | ||||
| import { useEffect, useRef, useState } from 'react'; | import { useEffect, useRef, useState } from 'react'; | ||||
| import { useNavigate } from 'react-router-dom'; | import { useNavigate } from 'react-router-dom'; | ||||
| import Styles from './index.less'; | import Styles from './index.less'; | ||||
| const { TextArea } = Input; | const { TextArea } = Input; | ||||
| const Pipeline = () => { | const Pipeline = () => { | ||||
| const [form] = Form.useForm(); | const [form] = Form.useForm(); | ||||
| @@ -254,17 +256,10 @@ const Pipeline = () => { | |||||
| scroll={{ y: 'calc(100% - 55px)' }} | scroll={{ y: 'calc(100% - 55px)' }} | ||||
| /> | /> | ||||
| </div> | </div> | ||||
| <Modal | |||||
| title={ | |||||
| <div style={{ display: 'flex', alignItems: 'center', fontWeight: 500 }}> | |||||
| <img | |||||
| style={{ width: '20px', marginRight: '10px' }} | |||||
| src={`/assets/images/pipeline-edit-icon.png`} | |||||
| alt="" | |||||
| /> | |||||
| {dialogTitle} | |||||
| </div> | |||||
| } | |||||
| <KFModal | |||||
| title={dialogTitle} | |||||
| image={require('@/assets/img/create-experiment.png')} | |||||
| width={825} | |||||
| open={isModalOpen} | open={isModalOpen} | ||||
| className={Styles.modal} | className={Styles.modal} | ||||
| okButtonProps={{ | okButtonProps={{ | ||||
| @@ -314,7 +309,7 @@ const Pipeline = () => { | |||||
| /> | /> | ||||
| </Form.Item> | </Form.Item> | ||||
| </Form> | </Form> | ||||
| </Modal> | |||||
| </KFModal> | |||||
| </div> | </div> | ||||
| ); | ); | ||||
| }; | }; | ||||
| @@ -8,60 +8,17 @@ | |||||
| padding-right: 30px; | padding-right: 30px; | ||||
| background-image: url(/assets/images/pipeline-back.png); | background-image: url(/assets/images/pipeline-back.png); | ||||
| background-size: 100% 100%; | background-size: 100% 100%; | ||||
| } | } | ||||
| .modal { | |||||
| :global { | |||||
| .ant-modal-content { | |||||
| width: 825px; | |||||
| padding: 20px 67px; | |||||
| background-image: url(/assets/images/modal-back.png); | |||||
| background-repeat: no-repeat; | |||||
| background-position: top center; | |||||
| background-size: 100%; | |||||
| border-radius: 21px; | |||||
| } | |||||
| .ant-modal-header { | |||||
| margin: 20px 0; | |||||
| background-color: transparent; | |||||
| } | |||||
| .ant-input { | |||||
| height: 40px; | |||||
| border-color: #e6e6e6; | |||||
| } | |||||
| .ant-form-item .ant-form-item-label > label { | |||||
| color: rgba(29, 29, 32, 0.8); | |||||
| } | |||||
| .ant-modal-footer { | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| margin: 40px 0 30px 0; | |||||
| } | |||||
| .ant-btn { | |||||
| width: 110px; | |||||
| height: 40px; | |||||
| font-size: 18px; | |||||
| background: rgba(22, 100, 255, 0.06); | |||||
| border-color: transparent; | |||||
| border-radius: 10px; | |||||
| } | |||||
| .ant-btn-primary { | |||||
| background: #1664ff; | |||||
| } | |||||
| } | |||||
| } | |||||
| .PipelineBox{ | |||||
| .PipelineBox { | |||||
| height: calc(100% - 20px); | height: calc(100% - 20px); | ||||
| .PipelineTable{ | |||||
| .PipelineTable { | |||||
| height: calc(100% - 60px); | height: calc(100% - 60px); | ||||
| :global{ | |||||
| .ant-table-wrapper .ant-table{ | |||||
| :global { | |||||
| .ant-table-wrapper .ant-table { | |||||
| // overflow-y: auto; | // overflow-y: auto; | ||||
| height: calc(100% - 48px); | height: calc(100% - 48px); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||