@@ -4,8 +4,8 @@
<NotFound></NotFound>
</div>
<div v-else>
<ModelHeader :tab="'intro'" :repoOwnerName="repoOwnerName" :repoName="repoName" :modelName="modelName" v-if="JSON.stringify(modelData)!=='{}'"
:model="modelData">
<ModelHeader :tab="'intro'" :repoOwnerName="repoOwnerName" :repoName="repoName" :modelName="modelName"
v-if="JSON.stringify(modelData) !== '{}'" :model="modelData">
</ModelHeader>
<div class="ui container content">
<div class="content-l" v-loading="loading">
@@ -85,6 +85,13 @@
<span class="label add-btn" v-if="canEdit" @click="addLabel">{{ $t('modelManage.addLabels') }}</span>
</div>
<div class="summary">
<div class="row">
<div class="label">{{ $t('modelManage.license') }}:</div>
<div class="value">
<a v-if="licenseInfo.name" target="_blank" :href="licenseInfo.linkUrl">{{ licenseInfo.name }}</a>
<span v-else>--</span>
</div>
</div>
<div class="row">
<div class="label">{{ $t('modelManage.modelEngine') }}:</div>
<div class="value">{{ modelData.engineName }}</div>
@@ -116,34 +123,35 @@
<template v-if="onlineUrl">
<!-- <div class="divider-column-vertical"></div> -->
<div class="online-address">
<a :href="onlineUrl" target="_blank" style="width: 50%;background: rgb(255, 255, 255);">{{ $t('modelManage.onlineInference') }}</a>
<a :href="onlineUrl" target="_blank" style="width: 50%;background: rgb(255, 255, 255);">{{
$t('modelManage.onlineInference') }}</a>
</div>
</template>
<template v-if="onlineAddressList.length">
<!-- <div class="divider-column-vertical"></div> -->
<div class="summary" style="margin-left: 1rem;margin-top:1.5rem">
<div class="title">{{ $t('modelManage.otherOnline') }}:</div>
<div class="detail-address" v-for="item in onlineAddressList">
<div class="detail-address" v-for="( item, index) in onlineAddressList" :key="index ">
<li class="nowrap">
<a :href="item.onlineInferUrl">{{item.ownerName}}/{{item.repoDisplayName}}</a>
<a :href="item.onlineInferUrl">{{ item.ownerName }}/{{ item.repoDisplayName }}</a>
</li>
</div>
</div>
</template>
</div>
<template v-if="trainUsedDataList.length">
<div class="divider-column-vertical"></div>
<div class="summary" style="margin-left: 1rem;">
<div class="title">{{ $t('modelManage.trainUsedDataList') }}:</div>
<div class="detail-address" v-for="item in trainUsedDataList">
<div class="detail-address" v-for="item in trainUsedDataList" :key="item.dataset_name" >
<span style="display: flex;" v-if="!item.is_delete">
<i style="margin-right: 0.5rem;" class="ri-stack-line"></i>
<a class="nowrap" :href="item.repository_link" :title="item.dataset_name">{{item.dataset_name}}</a>
<a class="nowrap" :href="item.repository_link" :title="item.dataset_name">{{ item.dataset_name }}</a>
</span>
<span v-else style="display: flex;color:#888888" class="nowrap">
<span v-else style="display: flex;color:#888888" class="nowrap">
<i style="margin-right: 0.5rem;" class="ri-stack-line"></i>
<span style="width: 70%;" class="nowrap">{{item.dataset_name}}</span>
<span style="width: 70%;" class="nowrap">{{ item.dataset_name }}</span>
<span>{{ $t('modelManage.deleted') }}</span>
</span>
</div>
@@ -153,9 +161,9 @@
<div class="divider-column-vertical"></div>
<div class="summary" style="margin-left: 1rem;">
<div class="title">{{ $t('modelManage.modelUseTaskList') }}:</div>
<div class="detail-address" v-for="item in modelUseTaskList">
<div class="detail-address" v-for="item in modelUseTaskList" :key="item.jobName" >
<li class="nowrap">
<a :href="item.url" :title="item.jobName">{{item.jobName}}</a>
<a :href="item.url" :title="item.jobName">{{ item.jobName }}</a>
</li>
</div>
</div>
@@ -170,7 +178,7 @@
import ModelHeader from '../components/ModelHeader.vue';
import NotFound from '~/components/NotFound.vue';
import { getUrlSearchParams, setWebpackPublicPath, getListValueWithKey, transFileSize } from '~/utils';
import { getModelInfoByName, getMarkdownPreview, getModelIntroduce, setModelIntroduce } from '~/apis/modules/modelmanage';
import { getModelInfoByName, getMarkdownPreview, getModelIntroduce, setModelIntroduce, getModelLicenseList } from '~/apis/modules/modelmanage';
import { MODEL_ENGINES } from '~/const';
import { formatDate } from 'element-ui/lib/utils/date-util';
@@ -184,6 +192,7 @@ export default {
repoName: location.pathname.split('/')[2],
loading: false,
modelData: {},
licenseInfo: {},
labels: [],
introFileName: '',
@@ -209,7 +218,7 @@ export default {
onlineAddressList: [],
trainUsedDataList: [],
modelUseTaskList: [],
onlineUrl:'',
onlineUrl: '',
};
@@ -217,7 +226,7 @@ export default {
components: { ModelHeader, NotFound },
methods: {
createIntro() {
this.content = this.emptyDefaultContent;
this.content = this.emptyDefaultContent;
this.toggleEdit(true);
},
changeEditTab(tab) {
@@ -309,7 +318,7 @@ export default {
this.content = data.content;
this.htmlContent = data.htmlcontent;
const match = data.content.match(/(#+)(.*)在线体验地址\s+(http[s]?:\/\/\S+)/g);
if(match){
if (match) {
this.onlineUrl = 'http' + match[0].split('http')[1]
}
}
@@ -360,52 +369,52 @@ export default {
this.submitLoading = false;
});
},
getFullUrlForType(data){
getFullUrlForType(data) {
const result = []
data.forEach(element => {
const detailObj = {jobName:element.displayJobName}
const detailObj = { jobName: element.displayJobName }
const prefixRepoLink = `${element.ownerName}/${element.repoName}`
if(element.type === 0){
if(element.jobType==='DEBUG'){
if (element.type === 0) {
if (element.jobType === 'DEBUG') {
detailObj.url = `/${prefixRepoLink}/cloudbrain/${element.id}`
}else if(element.jobType==='TRAIN'){
} else if (element.jobType === 'TRAIN') {
detailObj.url = `/${prefixRepoLink}/cloudbrain/train-job/${element.jobId}`
}else if(element.jobType==='INFERENCE'){
} else if (element.jobType === 'INFERENCE') {
detailObj.url = `/${prefixRepoLink}/cloudbrain/inference-job/${element.jobId}`
}else if(element.jobType==='BENCHMARK' || element.jobType==='MODELSAFETY'){
} else if (element.jobType === 'BENCHMARK' || element.jobType === 'MODELSAFETY') {
detailObj.url = `/${prefixRepoLink}/cloudbrain/benchmark/${element.id}`
}else{
} else {
}
}
if(element.type === 1){
if(element.jobType==='DEBUG'){
if (element.type === 1) {
if (element.jobType === 'DEBUG') {
detailObj.url = `/${prefixRepoLink}/modelarts/notebook/${element.id}`
}else if(element.jobType==='TRAIN'){
} else if (element.jobType === 'TRAIN') {
detailObj.url = `/${prefixRepoLink}/modelarts/train-job/${element.id}`
}else if(element.jobType==='INFERENCE'){
} else if (element.jobType === 'INFERENCE') {
detailObj.url = `/${prefixRepoLink}/modelarts/inference-job/${element.id}`
}else if(element.jobType==='BENCHMARK' || element.jobType==='MODELSAFETY'){
} else if (element.jobType === 'BENCHMARK' || element.jobType === 'MODELSAFETY') {
detailObj.url = `/${prefixRepoLink}/cloudbrain/benchmark/${element.id}`
}else{
} else {
}
}
if(element.type === 2){
if(element.jobType==='DEBUG'){
if (element.type === 2) {
if (element.jobType === 'DEBUG') {
detailObj.url = `/${prefixRepoLink}/grampus/notebook/${element.id}`
}else if(element.jobType==='TRAIN'){
} else if (element.jobType === 'TRAIN') {
detailObj.url = `/${prefixRepoLink}/grampus/train-job/${element.jobId}`
}else if(element.jobType==='INFERENCE'){
} else if (element.jobType === 'INFERENCE') {
}else if(element.jobType==='BENCHMARK'){
} else if (element.jobType === 'BENCHMARK') {
}else{
} else {
detailObj.url = `/${prefixRepoLink}/grampus/onlineinfer/${element.id}`
}
}
result.push(detailObj)
});
return result
}
},
@@ -447,9 +456,23 @@ export default {
this.canEdit = model.isCanOper;
this.onlineAddressList = model.onlineInfo
this.trainUsedDataList = model.datasetInfo === null ? [] : model.datasetInfo
const modelUseTaskList = model.usedCloudbrain.length > 5 ? model.usedCloudbrain.slice(0,5) : model.usedCloudbrain
const modelUseTaskList = model.usedCloudbrain.length > 5 ? model.usedCloudbrain.slice(0, 5) : model.usedCloudbrain
this.modelUseTaskList = this.getFullUrlForType(modelUseTaskList)
this.getIntroInfo();
getModelLicenseList().then(res => {
res = res.data;
try {
const license = JSON.parse(res) || [];
const matchLicense = license.filter(item => item.id == this.modelData.license);
if (matchLicense.length) {
this.licenseInfo = matchLicense[0];
}
} catch (err) {
console.log(err);
}
}).catch(err => {
console.log(err);
});
} else {
this.emptyPage = true;
}
@@ -638,18 +661,21 @@ export default {
margin-bottom: 8px;
line-height: 20px;
}
.online-container{
background: linear-gradient(180deg, rgba(203,212,251,0.3) 0%,rgba(255,255,255,0) 100%);
.online-container {
background: linear-gradient(180deg, rgba(203, 212, 251, 0.3) 0%, rgba(255, 255, 255, 0) 100%);
border-color: rgb(225, 227, 230);
border-width: 1px 0px 0px;
border-style: solid;
margin-top: 1.5rem;
.online-address {
width: 100%;
display: flex;
justify-content: center;
margin-top: 1.5rem;
a{
a {
width: 50%;
background: rgb(255, 255, 255);
color: rgb(22, 132, 252);
@@ -662,7 +688,7 @@ export default {
}
}
}
.labels {
margin-top: 12px;
margin-bottom: 12px;
@@ -711,24 +737,27 @@ export default {
border-radius: 2px;
font-size: 12px;
}
.divider-column-vertical {
background-color: rgb(243 244 246);
height: 1px;
margin-bottom: 1.25rem;
margin-top: 1.25rem;
}
.detail-address{
.detail-address {
margin: 0.5rem 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
color: rgba(5, 127, 255, 1);
>a {
color: rgba(5, 127, 255, 1);
}
}
.summary {
.row {
display: flex;
@@ -737,19 +766,21 @@ export default {
.label {
color: rgb(136, 136, 136)
}
.value {
color: rgb(16, 16, 16);
flex: 1;
}
}
.title{
.title {
height: 20px;
color: rgba(136, 136, 136, 1);
font-size: 14px;
margin-bottom: 1.2rem;
}
}
}
}
</style>