This commit is contained in:
fanshuai 2024-04-24 17:25:39 +08:00
commit 2e89060b94
19 changed files with 104 additions and 42 deletions

View File

@ -76,7 +76,7 @@ export default defineConfig({
* @name layout * @name layout
* @doc https://umijs.org/docs/max/layout-menu * @doc https://umijs.org/docs/max/layout-menu
*/ */
title: '复杂智能软件', title: '智能软件开发平台',
layout: { layout: {
locale: true, locale: true,
...defaultSettings, ...defaultSettings,

View File

@ -16,7 +16,7 @@ const Settings: ProLayoutProps & {
fixSiderbar: false, fixSiderbar: false,
splitMenus: false, splitMenus: false,
colorWeak: false, colorWeak: false,
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_ndnvm4elll.js', iconfontUrl: '//at.alicdn.com/t/c/font_4511326_ndnvm4elll.js',

View File

@ -193,6 +193,7 @@ export const antd: RuntimeAntdConfig = (memo) => {
colorSuccess: themes['successColor'], colorSuccess: themes['successColor'],
colorError: themes['errorColor'], colorError: themes['errorColor'],
colorWarning: themes['warningColor'], colorWarning: themes['warningColor'],
colorLink: themes['primaryColor'],
}; };
memo.theme.components ??= {}; memo.theme.components ??= {};
memo.theme.components.Tabs = {}; memo.theme.components.Tabs = {};

View File

@ -98,7 +98,7 @@ body {
} }
.ant-table-wrapper .ant-table-pagination.ant-pagination { .ant-table-wrapper .ant-table-pagination.ant-pagination {
margin: 0; margin: 0;
padding: 21px 16px; padding: 20px 16px;
background-color: #fff; background-color: #fff;
} }
// .ant-table-wrapper .ant-table { // .ant-table-wrapper .ant-table {
@ -190,32 +190,21 @@ body {
.ant-modal .ant-modal-footer > .ant-btn + .ant-btn { .ant-modal .ant-modal-footer > .ant-btn + .ant-btn {
margin-left: 20px; margin-left: 20px;
} }
.ant-pagination .ant-pagination-item-active a { .ant-pagination .ant-pagination-item.ant-pagination-item-active {
color: #fff; background: @primary-color;
background: rgba(22, 100, 255, 0.8); border-width: 0;
// color: #fff;
border-radius: 6px; a {
color: #fff;
}
} }
.ant-pagination .ant-pagination-item-active:hover { .ant-pagination .ant-pagination-item-active:hover {
// color: #fff; color: #fff;
// background: rgba(22, 100, 255, 0.8); background: rgba(22, 100, 255, 0.8);
// border-color: rgba(22, 100, 255, 0.8); border-color: rgba(22, 100, 255, 0.8);
border-radius: 6px;
} }
.ant-pagination .ant-pagination-item { .ant-pagination .ant-pagination-item {
border: 1px solid #e6e6e6; border: 1px solid #e6e6e6;
border-radius: 6px;
}
.ant-tabs {
.ant-tabs-nav::before,
div > .ant-tabs-nav::before {
border: none;
}
.ant-tabs-nav {
margin-bottom: 0;
}
} }
// ::-webkit-scrollbar-button { // ::-webkit-scrollbar-button {

View File

@ -4,7 +4,7 @@ import creatByImg from '@/assets/img/creatBy.png';
import KFIcon from '@/components/KFIcon'; import KFIcon from '@/components/KFIcon';
import { addModel, getAssetIcon, getModelList } from '@/services/dataset/index.js'; import { addModel, getAssetIcon, getModelList } from '@/services/dataset/index.js';
import { UploadOutlined } from '@ant-design/icons'; import { UploadOutlined } from '@ant-design/icons';
import { Button, Form, Input, Modal, Pagination, Radio, Select, Upload } from 'antd'; import { Button, Form, Input, Modal, Pagination, Select, Upload } 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';
@ -106,6 +106,10 @@ const PublicData = () => {
setIsModalOpen(false); setIsModalOpen(false);
}; };
const onFinish = (values) => { const onFinish = (values) => {
const params = {
...values,
available_range: 0,
};
addModel(values).then((ret) => { addModel(values).then((ret) => {
console.log(ret); console.log(ret);
getModelLists(queryFlow); getModelLists(queryFlow);
@ -379,12 +383,12 @@ const PublicData = () => {
> >
<Input placeholder="请输入模型描述" showCount maxLength={256} /> <Input placeholder="请输入模型描述" showCount maxLength={256} />
</Form.Item> </Form.Item>
<Form.Item label="可见范围" name="available_range"> {/* <Form.Item label="" name="available_range">
<Radio.Group> <Radio.Group>
<Radio value="0">仅自己可见</Radio> <Radio value="0">仅自己可见</Radio>
<Radio value="1">工作空间可见</Radio> <Radio value="1">工作空间可见</Radio>
</Radio.Group> </Radio.Group>
</Form.Item> </Form.Item> */}
<Form.Item <Form.Item
label="模型框架" label="模型框架"
name="model_type" name="model_type"

View File

@ -19,7 +19,7 @@ const items = [
children: [1, 2, 3, 4, 5], children: [1, 2, 3, 4, 5],
}, },
]; ];
const modelMenus = ({ onParDragEnd }) => { const ModelMenus = ({ onParDragEnd }) => {
const [modelMenusList, setModelMenusList] = useState([]); const [modelMenusList, setModelMenusList] = useState([]);
useEffect(() => { useEffect(() => {
getComponentAll().then((ret) => { getComponentAll().then((ret) => {
@ -55,6 +55,7 @@ const modelMenus = ({ onParDragEnd }) => {
{item.value && item.value.length > 0 {item.value && item.value.length > 0
? item.value.map((ele) => ( ? item.value.map((ele) => (
<div <div
key={ele.id}
draggable="true" draggable="true"
onDragEnd={(e) => { onDragEnd={(e) => {
dragEnd(e, ele); dragEnd(e, ele);
@ -78,4 +79,4 @@ const modelMenus = ({ onParDragEnd }) => {
</div> </div>
); );
}; };
export default modelMenus; export default ModelMenus;

View File

@ -246,10 +246,10 @@ const Login: React.FC = () => {
style={{ height: '42px', marginRight: '10px' }} style={{ height: '42px', marginRight: '10px' }}
alt="" alt=""
/> />
</div> </div>
<div className={centerTitleBoX}> <div className={centerTitleBoX}>
<span style={{ whiteSpace: 'nowrap' }}></span> <span style={{ whiteSpace: 'nowrap' }}></span>
<img <img
src="/assets/images/ai-logo.png" src="/assets/images/ai-logo.png"
@ -276,7 +276,7 @@ const Login: React.FC = () => {
<div className={rightTopTitle}> <div className={rightTopTitle}>
<span style={{ color: '#111111', fontSize: '36px' }}>hello~</span> <span style={{ color: '#111111', fontSize: '36px' }}>hello~</span>
<span style={{ color: '#606b7a', fontSize: '32px', marginLeft: '10px' }}></span> <span style={{ color: '#606b7a', fontSize: '32px', marginLeft: '10px' }}></span>
<span style={{ color: '#1664ff', fontSize: '32px' }}></span> <span style={{ color: '#1664ff', fontSize: '32px' }}></span>
</div> </div>
<div className={containerLoginForm}> <div className={containerLoginForm}>
<div <div

View File

@ -17,7 +17,9 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableRyFeignClients @EnableRyFeignClients
@SpringBootApplication @SpringBootApplication
@EnableScheduling @EnableScheduling
public class RuoYiManagementPlatformApplication { public class
RuoYiManagementPlatformApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(RuoYiManagementPlatformApplication.class, args); SpringApplication.run(RuoYiManagementPlatformApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 复杂智能软件管理平台启动成功 ლ(´ڡ`ლ)゙ \n" + System.out.println("(♥◠‿◠)ノ゙ 复杂智能软件管理平台启动成功 ლ(´ڡ`ლ)゙ \n" +

View File

@ -19,8 +19,8 @@ public class AssetIcon implements Serializable {
/** /**
* 主键 * 主键
*/ */
@ApiModelProperty(value = "资产ID") @ApiModelProperty(value = "资产ID")
private Integer id; private Integer id;
@ApiModelProperty(value = "资产图标名称") @ApiModelProperty(value = "资产图标名称")
private String name; private String name;

View File

@ -76,6 +76,13 @@ public class Dataset implements Serializable {
@ApiModelProperty(value = "状态0失效1生效") @ApiModelProperty(value = "状态0失效1生效")
private Integer state; private Integer state;
@ApiModelProperty(value = "数据集类型名字")
private String datasetTypeName;
@ApiModelProperty(value = "数据集tag名字")
private String datasetTagName;
public Integer getId() { public Integer getId() {
return id; return id;
@ -165,5 +172,21 @@ public class Dataset implements Serializable {
this.state = state; this.state = state;
} }
public String getDatasetTypeName() {
return datasetTypeName;
}
public String getDatasetTagName() {
return datasetTagName;
}
public void setDatasetTagName(String datasetTagName) {
this.datasetTagName = datasetTagName;
}
public void setDatasetTypeName(String datasetTypeName) {
this.datasetTypeName = datasetTypeName;
}
} }

View File

@ -118,7 +118,7 @@ public class Image implements Serializable {
this.updateTime = updateTime; this.updateTime = updateTime;
} }
// Getter Setter
public Integer getVersionCount() { public Integer getVersionCount() {
return versionCount; return versionCount;
} }

View File

@ -84,5 +84,6 @@ public interface AssetIconDao {
List<AssetIcon> queryByCategoryId(Integer categoryId); List<AssetIcon> queryByCategoryId(Integer categoryId);
AssetIcon queryByPath(String path);
} }

View File

@ -22,6 +22,15 @@ public interface AssetIconService {
*/ */
AssetIcon queryById(Integer id); AssetIcon queryById(Integer id);
/**
* 通过path查询单条数据
*
* @param path 路径
* @return 实例对象
*/
AssetIcon queryByPath(String path);
/** /**
* 分页查询 * 分页查询
* *

View File

@ -2,7 +2,6 @@ package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.domain.AssetIcon; import com.ruoyi.platform.domain.AssetIcon;
import com.ruoyi.platform.domain.Models;
import com.ruoyi.platform.mapper.AssetIconDao; import com.ruoyi.platform.mapper.AssetIconDao;
import com.ruoyi.platform.service.AssetIconService; import com.ruoyi.platform.service.AssetIconService;
import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUser;
@ -38,6 +37,12 @@ public class AssetIconServiceImpl implements AssetIconService {
return this.assetIconDao.queryById(id); return this.assetIconDao.queryById(id);
} }
@Override
public AssetIcon queryByPath(String path) {
return this.assetIconDao.queryByPath(path);
}
/** /**
* 分页查询 * 分页查询
* *
@ -125,4 +130,6 @@ public class AssetIconServiceImpl implements AssetIconService {
public List<AssetIcon> queryByCategoryId(Integer categoryId) { public List<AssetIcon> queryByCategoryId(Integer categoryId) {
return this.assetIconDao.queryByCategoryId(categoryId); return this.assetIconDao.queryByCategoryId(categoryId);
} }
} }

View File

@ -3,10 +3,12 @@ package com.ruoyi.platform.service.impl;
import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.platform.annotations.CheckDuplicate; import com.ruoyi.platform.annotations.CheckDuplicate;
import com.ruoyi.platform.domain.AssetIcon;
import com.ruoyi.platform.domain.Dataset; import com.ruoyi.platform.domain.Dataset;
import com.ruoyi.platform.domain.DatasetVersion; import com.ruoyi.platform.domain.DatasetVersion;
import com.ruoyi.platform.mapper.DatasetDao; import com.ruoyi.platform.mapper.DatasetDao;
import com.ruoyi.platform.mapper.DatasetVersionDao; import com.ruoyi.platform.mapper.DatasetVersionDao;
import com.ruoyi.platform.service.AssetIconService;
import com.ruoyi.platform.service.DatasetService; import com.ruoyi.platform.service.DatasetService;
import com.ruoyi.platform.service.DatasetVersionService; import com.ruoyi.platform.service.DatasetVersionService;
import com.ruoyi.platform.service.MinioService; import com.ruoyi.platform.service.MinioService;
@ -59,6 +61,9 @@ public class DatasetServiceImpl implements DatasetService {
@Resource @Resource
private DatasetVersionService datasetVersionService; private DatasetVersionService datasetVersionService;
@Resource
private AssetIconService assetIconService;
@Resource @Resource
private MinioService minioService; private MinioService minioService;
@ -79,7 +84,17 @@ public class DatasetServiceImpl implements DatasetService {
*/ */
@Override @Override
public Dataset queryById(Integer id) { public Dataset queryById(Integer id) {
return this.datasetDao.queryById(id);
Dataset dataset = this.datasetDao.queryById(id);
String dataType = dataset.getDataType();
String dataTag = dataset.getDataTag();
//去资产管理表中查询对应的图标名
AssetIcon dataTypeAssetIcon = assetIconService.queryByPath(dataType);
AssetIcon dataTagAssetIcon = assetIconService.queryByPath(dataTag);
dataset.setDatasetTypeName(dataTypeAssetIcon.getName());
dataset.setDatasetTagName(dataTagAssetIcon.getName());
return dataset;
} }
/** /**

View File

@ -316,6 +316,7 @@ public class ImageServiceImpl implements ImageService {
String filePath = "/data/argo-workflow/" + bucketName + "/" +path; String filePath = "/data/argo-workflow/" + bucketName + "/" +path;
String logs2 = k8sClientUtil.executeCommand(pod,"docker load -i "+filePath); String logs2 = k8sClientUtil.executeCommand(pod,"docker load -i "+filePath);
// 在容器里执行 docker tag name:tag nexus3.kube-system.svc:8083/imageName:imageTag // 在容器里执行 docker tag name:tag nexus3.kube-system.svc:8083/imageName:imageTag
if (StringUtils.isNoneBlank(logs2)){ if (StringUtils.isNoneBlank(logs2)){
String substring = logs2.substring(logs2.indexOf(":")+1).trim(); String substring = logs2.substring(logs2.indexOf(":")+1).trim();
String tagCmd = "docker tag " + substring + " " + harborUrl + "/" + repository + "/" + username + "/" + imageName + ":" + imageTag; String tagCmd = "docker tag " + substring + " " + harborUrl + "/" + repository + "/" + username + "/" + imageName + ":" + imageTag;

View File

@ -43,6 +43,13 @@
</where> </where>
</select> </select>
<select id="queryByPath" resultMap="AssetIconMap" >
select
id, name,category_id, path, description, create_by, create_time, update_by, update_time, state
from asset_icon
where path = #{path} and state = 1
</select>
<select id="queryAllByLimit" resultMap="AssetIconMap"> <select id="queryAllByLimit" resultMap="AssetIconMap">
select select
id, name, category_id, path, description, create_by, create_time, update_by, update_time, state id, name, category_id, path, description, create_by, create_time, update_by, update_time, state
@ -123,6 +130,7 @@
</where> </where>
</select> </select>
<insert id="insert" keyProperty="id" useGeneratedKeys="true"> <insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into asset_icon(name, category_id, path, description, create_by, create_time, update_by, update_time, state) insert into asset_icon(name, category_id, path, description, create_by, create_time, update_by, update_time, state)
values (#{assetIcon.name}, #{assetIcon.categoryId}, #{assetIcon.path}, #{assetIcon.description}, #{assetIcon.createBy}, #{assetIcon.createTime}, #{assetIcon.updateBy}, #{assetIcon.updateTime}, #{assetIcon.state}) values (#{assetIcon.name}, #{assetIcon.categoryId}, #{assetIcon.path}, #{assetIcon.description}, #{assetIcon.createBy}, #{assetIcon.createTime}, #{assetIcon.updateBy}, #{assetIcon.updateTime}, #{assetIcon.state})

View File

@ -152,13 +152,13 @@
description = #{dataset.description}, description = #{dataset.description},
</if> </if>
<if test="dataset.availableRange != null and dataset.availableRange != ''"> <if test="dataset.availableRange != null and dataset.availableRange != ''">
available_range = #{dataset.availableRange} available_range = #{dataset.availableRange},
</if>, </if>
<if test="dataset.dataType != null"> <if test="dataset.dataType != null">
data_type = #{dataset.dataType}, data_type = #{dataset.dataType},
</if> </if>
<if test="dataset.dataTag != null"> <if test="dataset.dataTag != null">
data_tag = #{dataset.dataTag} data_tag = #{dataset.dataTag},
</if> </if>
<if test="dataset.createBy != null and dataset.createBy != ''"> <if test="dataset.createBy != null and dataset.createBy != ''">
create_by = #{dataset.createBy}, create_by = #{dataset.createBy},
@ -179,6 +179,7 @@
where id = #{dataset.id} where id = #{dataset.id}
</update> </update>
<!--通过主键删除--> <!--通过主键删除-->
<delete id="deleteById"> <delete id="deleteById">
delete from dataset where id = #{id} delete from dataset where id = #{id}

View File

@ -154,7 +154,7 @@
description = #{models.description}, description = #{models.description},
</if> </if>
<if test="models.availableRange != null and models.availableRange != ''"> <if test="models.availableRange != null and models.availableRange != ''">
available_range = #{models.availableRange} available_range = #{models.availableRange},
</if> </if>
<if test="models.modelType != null"> <if test="models.modelType != null">
model_type = #{models.modelType}, model_type = #{models.modelType},