Merge branch 'main' of http://62.234.3.186:3000/sxyanzhu/AIManage
commit
be2bf491d9
|
@ -3,9 +3,9 @@ VITE_APP_PORT = 3000
|
||||||
|
|
||||||
# 代理前缀
|
# 代理前缀
|
||||||
VITE_APP_BASE_API = '/api'
|
VITE_APP_BASE_API = '/api'
|
||||||
# VITE_APP_API_URL = http://62.234.3.186/mk/ai/api
|
VITE_APP_API_URL = http://62.234.3.186/mk/ai/api
|
||||||
# 线上接口地址
|
# 线上接口地址
|
||||||
VITE_APP_API_URL = http://10.5.1.137:8800
|
#VITE_APP_API_URL = http://10.5.1.137:8800
|
||||||
# 开发接口地址
|
# 开发接口地址
|
||||||
# VITE_APP_API_URL = http://localhost:8989
|
# VITE_APP_API_URL = http://localhost:8989
|
||||||
|
|
||||||
|
|
|
@ -1 +1,57 @@
|
||||||
function init(){var s=location.search;var url="";var onnxModelName="";if(s.indexOf("=")>=0){url=s.substring(s.indexOf("=")+1);if(url.toLocaleLowerCase().indexOf(".onnx")>=0){onnxModelName=url.substring(url.lastIndexOf("/")+1)}else{console.error("使用方法:onnx.html?url=[onnx路径]");return}}else{console.error("使用方法:onnx.html?url=[onnx路径]");return}document.body.title=onnxModelName;var http=new XMLHttpRequest;http.responseType="arraybuffer";http.open("GET",url);http.onload=function(){if(http.status==200){var reader=proto.protobuf.Reader.create(new Uint8Array(http.response));var onnxProtoModel=window.proto.onnx.ModelProto.decode(reader);let{locations,graphs}=window.getExternalLocations(onnxProtoModel);let model=new window.onnx.Model(onnxProtoModel,graphs,new Map);let host=window;let view=new window.View(host);view.start().then(data=>{view.open(model,onnxModelName)}).catch(err=>{console.log(err)});window.mainView=view}};http.send()}function exportImg(file,blob){const element=this.document.createElement("a");element.download=file;element.href=URL.createObjectURL(blob);this.document.body.appendChild(element);element.click();this.document.body.removeChild(element)}function toggleMenu(){let el=document.getElementById("menu");if(el.style.display=="none"){el.style.display="block";updateState()}else{el.style.display="none"}}function doToggle(att){mainView.toggle(att);updateState()}function updateState(){var op=mainView.options;document.getElementById("opAtt").innerText=op.attributes?"Hide Attributes":"Show Attributes";document.getElementById("opWeight").innerText=op.weights?"Hide Weights":"Show Weights";document.getElementById("opName").innerText=op.names?"Hide Names":"Show Names";document.getElementById("opDir").innerText=op.direction=="vertical"?"Show Horizontal":"Show Vertical";document.getElementById("opMouse").innerText=op.mousewheel=="scroll"?"Mouse Wheel: Zoom":"Mouse Wheel: Scroll"}init();
|
function init() {
|
||||||
|
var s = location.search;
|
||||||
|
var url = "";
|
||||||
|
var onnxModelName = "";
|
||||||
|
if (s.indexOf("=") >= 0) {
|
||||||
|
url = s.substring(s.indexOf("=") + 1);
|
||||||
|
} else {
|
||||||
|
console.error("使用方法:onnx.html?id=[模型ID]")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.body.title = onnxModelName;
|
||||||
|
var accessToken = localStorage.getItem("accessToken");
|
||||||
|
var http = new XMLHttpRequest();
|
||||||
|
http.responseType = "json"
|
||||||
|
|
||||||
|
http.open('GET', MODELDOWNLOADAPI + `${url}/download`);
|
||||||
|
http.setRequestHeader("Authorization", accessToken);
|
||||||
|
http.onload = function () {
|
||||||
|
if (http.status == 200) {
|
||||||
|
var reader = proto.protobuf.Reader.create(base64ToUint8Array(http.response.data.file_content));
|
||||||
|
var onnxProtoModel = window.proto.onnx.ModelProto.decode(reader);
|
||||||
|
let { locations, graphs } = window.getExternalLocations(onnxProtoModel);
|
||||||
|
let model = new window.onnx.Model(onnxProtoModel, graphs, new Map());
|
||||||
|
|
||||||
|
let host = window;
|
||||||
|
let view = new window.View(host);
|
||||||
|
view.start().then((data) => {
|
||||||
|
view.open(model, onnxModelName);
|
||||||
|
}).catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
})
|
||||||
|
window.mainView = view;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
http.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
function base64ToUint8Array(base64String) {
|
||||||
|
try {
|
||||||
|
let padding = '='.repeat((4 - base64String.length % 4) % 4);
|
||||||
|
let base64 = (base64String + padding)
|
||||||
|
.replace(/\-/g, '+')
|
||||||
|
.replace(/_/g, '/');
|
||||||
|
let rawData = atob(base64);
|
||||||
|
let outputArray = new Uint8Array(rawData.length);
|
||||||
|
for (let i = 0; i < rawData.length; ++i) {
|
||||||
|
outputArray[i] = rawData.charCodeAt(i);
|
||||||
|
}
|
||||||
|
return outputArray;
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init();
|
File diff suppressed because it is too large
Load Diff
|
@ -7,10 +7,11 @@ const tasks=()=>{
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//获取可用的设备状态
|
//获取可用的设备状态
|
||||||
const availableDevices=()=>{
|
const availableDevices = (data) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/tasks/available_devices',
|
url: '/tasks/available_devices',
|
||||||
method:'get'
|
method: 'get',
|
||||||
|
params: data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//获取正在执行的任务
|
//获取正在执行的任务
|
||||||
|
|
|
@ -81,12 +81,11 @@
|
||||||
<span class="sp-label">输入参数:</span>
|
<span class="sp-label">输入参数:</span>
|
||||||
<div class="div-param">
|
<div class="div-param">
|
||||||
<div v-if="info.param.inputs.length > 1" class="div-navs">
|
<div v-if="info.param.inputs.length > 1" class="div-navs">
|
||||||
<span v-for="(it, idx) in info.param.inputs" @click="doInputSelected(idx)" :key="idx"
|
<span v-for="(it, idx) in info.param.inputs" @click="doInputSelected(idx)" :key="idx" class="sp-nav"
|
||||||
class="sp-nav" :class="it.selected ? 'active' : ''">{{ it.input_id }}</span>
|
:class="it.selected ? 'active' : ''">{{ it.input_id }}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="sp-text sp-paramter scroll">
|
<span class="sp-text sp-paramter scroll">
|
||||||
<span v-for="(it, idx) in info.param.inputs " :key="idx" v-show="it.selected"
|
<span v-for="(it, idx) in info.param.inputs " :key="idx" v-show="it.selected" class="param-item">
|
||||||
class="param-item">
|
|
||||||
<paramShow :paramInfo="it"></paramShow>
|
<paramShow :paramInfo="it"></paramShow>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -96,13 +95,12 @@
|
||||||
<span class="sp-label">输出参数:</span>
|
<span class="sp-label">输出参数:</span>
|
||||||
<div class="div-param">
|
<div class="div-param">
|
||||||
<div v-if="info.param.outputs.length > 1" class="div-navs">
|
<div v-if="info.param.outputs.length > 1" class="div-navs">
|
||||||
<span v-for="(it, idx) in info.param.outputs" @click="doOutputSelected(idx)"
|
<span v-for="(it, idx) in info.param.outputs" @click="doOutputSelected(idx)" :key="idx" class="sp-nav"
|
||||||
:key="idx" class="sp-nav" :class="it.selected ? 'active' : ''">{{ it.output_id
|
:class="it.selected ? 'active' : ''">{{ it.output_id
|
||||||
}}</span>
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="sp-text sp-paramter scroll">
|
<span class="sp-text sp-paramter scroll">
|
||||||
<span v-for="(it, idx) in info.param.outputs " :key="idx" v-show="it.selected"
|
<span v-for="(it, idx) in info.param.outputs " :key="idx" v-show="it.selected" class="param-item">
|
||||||
class="param-item">
|
|
||||||
<paramShow :paramInfo="it"></paramShow>
|
<paramShow :paramInfo="it"></paramShow>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -194,6 +192,7 @@ const doOutputSelected=idx=>{
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-paramter {
|
.sp-paramter {
|
||||||
height: 100px;
|
height: 100px;
|
||||||
border: solid 1px #409EFF;
|
border: solid 1px #409EFF;
|
||||||
|
|
|
@ -79,7 +79,8 @@
|
||||||
<span class="sp-label">输入参数:</span>
|
<span class="sp-label">输入参数:</span>
|
||||||
<div class="div-param">
|
<div class="div-param">
|
||||||
<div v-if="selNode.info.parameters.inputs.length > 1" class="div-navs">
|
<div v-if="selNode.info.parameters.inputs.length > 1" class="div-navs">
|
||||||
<span v-for="(it,idx) in selNode.info.parameters.inputs" @click="doInputSelected(idx)" :key="idx" class="sp-nav" :class="it.selected?'active':''">{{ it.input_id }}</span>
|
<span v-for="(it, idx) in selNode.info.parameters.inputs" @click="doInputSelected(idx)" :key="idx"
|
||||||
|
class="sp-nav" :class="it.selected ? 'active' : ''">{{ it.input_id }}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '输入参数', 'i')">
|
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '输入参数', 'i')">
|
||||||
<span v-for="(it, idx) in selNode.info.parameters.inputs " :key="idx" v-show="it.selected"
|
<span v-for="(it, idx) in selNode.info.parameters.inputs " :key="idx" v-show="it.selected"
|
||||||
|
@ -93,7 +94,8 @@
|
||||||
<span class="sp-label">输出参数:</span>
|
<span class="sp-label">输出参数:</span>
|
||||||
<div class="div-param">
|
<div class="div-param">
|
||||||
<div v-if="selNode.info.parameters.outputs.length > 1" class="div-navs">
|
<div v-if="selNode.info.parameters.outputs.length > 1" class="div-navs">
|
||||||
<span v-for="(it,idx) in selNode.info.parameters.outputs" @click="doOutputSelected(idx)" :key="idx" class="sp-nav" :class="it.selected?'active':''">{{ it.output_id }}</span>
|
<span v-for="(it, idx) in selNode.info.parameters.outputs" @click="doOutputSelected(idx)" :key="idx"
|
||||||
|
class="sp-nav" :class="it.selected ? 'active' : ''">{{ it.output_id }}</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '输出参数', 'o')">
|
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '输出参数', 'o')">
|
||||||
<span v-for="(it, idx) in selNode.info.parameters.outputs " :key="idx" v-show="it.selected"
|
<span v-for="(it, idx) in selNode.info.parameters.outputs " :key="idx" v-show="it.selected"
|
||||||
|
@ -105,7 +107,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row" style="margin-top:4px;" v-if="selNode.info.parameters && selNode.info.parameters.process">
|
<div class="row" style="margin-top:4px;" v-if="selNode.info.parameters && selNode.info.parameters.process">
|
||||||
<span class="sp-label">处理参数:</span>
|
<span class="sp-label">处理参数:</span>
|
||||||
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '处理参数', 'p')" v-if="selNode.info.parameters.process">
|
<span class="sp-text sp-paramter scroll" @click="doEdit(selNode.info, '处理参数', 'p')"
|
||||||
|
v-if="selNode.info.parameters.process">
|
||||||
<paramShow :paramInfo="selNode.info.parameters.process"></paramShow>
|
<paramShow :paramInfo="selNode.info.parameters.process"></paramShow>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -311,6 +314,16 @@ const doSave = () => {
|
||||||
end_oper_id: nodeObj[e.targetNodeId].id,
|
end_oper_id: nodeObj[e.targetNodeId].id,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
operator_list = flowData.nodes.map(it => it.properties.data);
|
||||||
|
operator_connection_list = flowData.edges.map(it => {
|
||||||
|
let obj = {
|
||||||
|
start_oper_id: nodeObj[it.sourceNodeId].id,
|
||||||
|
end_oper_id: nodeObj[it.targetNodeId].id,
|
||||||
|
start_oper_output_id: it.properties.sourceAnchorId,
|
||||||
|
end_oper_input_id: it.properties.targetAnchorId,
|
||||||
|
};
|
||||||
|
return obj;
|
||||||
|
})
|
||||||
editForm.value?.validate(valid => {
|
editForm.value?.validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
let postData = {
|
let postData = {
|
||||||
|
@ -463,6 +476,7 @@ onMounted(() => {
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.div-param {
|
.div-param {
|
||||||
.div-navs {
|
.div-navs {
|
||||||
.sp-nav {
|
.sp-nav {
|
||||||
|
@ -470,6 +484,7 @@ onMounted(() => {
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
padding: 0px 12px;
|
padding: 0px 12px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&.active {
|
&.active {
|
||||||
background-color: #409EFF;
|
background-color: #409EFF;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
|
|
@ -71,6 +71,9 @@ const initEvent=(lf)=>{
|
||||||
nodePropKey.value++
|
nodePropKey.value++
|
||||||
doUpdateState()
|
doUpdateState()
|
||||||
});
|
});
|
||||||
|
lf.on("anchor:dragend", (a, b, c) => {
|
||||||
|
updateEdges(a, b, c);
|
||||||
|
});
|
||||||
lf.on("connection:not-allowed", (a, b, c) => {
|
lf.on("connection:not-allowed", (a, b, c) => {
|
||||||
if (a.msg == "不允许添加连线") {
|
if (a.msg == "不允许添加连线") {
|
||||||
ElMessage.error("开始结点只能连接结束节点!");
|
ElMessage.error("开始结点只能连接结束节点!");
|
||||||
|
@ -96,6 +99,17 @@ const initEvent=(lf)=>{
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
const updateEdges = (a, b, c) => {
|
||||||
|
let edges = lf.value.getGraphData().edges.filter(d => d.sourceNodeId == a.edgeModel.sourceNodeId && d.targetNodeId == a.edgeModel.targetNodeId);
|
||||||
|
if (edges.length > 0) {
|
||||||
|
//edges[0].properties.edgeModel = a.edgeModel
|
||||||
|
lf.value.setProperties(edges[0].id, {
|
||||||
|
sourceAnchorId: a.edgeModel.sourceAnchorId.split("_")[0],
|
||||||
|
targetAnchorId: a.edgeModel.targetAnchorId.split("_")[0],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
const doEdit = (n) => {
|
const doEdit = (n) => {
|
||||||
}
|
}
|
||||||
const doUpdateState = () => {
|
const doUpdateState = () => {
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<el-table v-loading="loading" :data="info.data" stripe @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="info.data" stripe @selection-change="handleSelectionChange">
|
||||||
<el-table-column label="模型名称" align="left" prop="model_name" />
|
<el-table-column label="模型名称" align="left" prop="model_name" />
|
||||||
<el-table-column label="网络名称" align="left" prop="modl_net_type" width="120" />
|
<el-table-column label="网络名称" align="left" prop="modl_net_type" width="120" />
|
||||||
<el-table-column label="模型类型" align="left" prop="modl_main_type_name">
|
<el-table-column label="模型类型" align="left" prop="modl_net_type">
|
||||||
<template #default="{ row }">{{ row.modl_main_type_name }}/{{ row.modl_sub_type_name }}</template>
|
<template #default="{ row }">{{ row.modl_main_type_name }}/{{ row.modl_sub_type_name }}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="版本" align="left" prop="connection_version" />
|
<el-table-column label="版本" align="left" prop="connection_version" />
|
||||||
|
@ -38,15 +38,13 @@
|
||||||
<el-table-column label="操作" fixed="right" align="center" width="270">
|
<el-table-column label="操作" fixed="right" align="center" width="270">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<template v-if="scope.row.connection_created">
|
<template v-if="scope.row.connection_created">
|
||||||
<el-button text type="primary" size="small"
|
<el-button text type="primary" size="small" @click="doShowDetail(scope.row)"><i-ep-edit />查看</el-button>
|
||||||
@click="doShowDetail(scope.row)"><i-ep-edit />查看</el-button>
|
|
||||||
<el-button text type="primary" size="small"
|
<el-button text type="primary" size="small"
|
||||||
@click="doEdit(scope.row.connection_id)"><i-ep-link />修改互联</el-button>
|
@click="doEdit(scope.row.connection_id)"><i-ep-link />修改互联</el-button>
|
||||||
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"><i-ep-delete />删除</el-button>
|
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"><i-ep-delete />删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-button text type="primary" size="small"
|
<el-button text type="primary" size="small" @click="doAdd(scope.row)">新建互联</el-button>
|
||||||
@click="doAdd(scope.row)">新建互联</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
@ -92,8 +90,8 @@ function handleQuery() {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
ConnApi.list(queryParams).then(d => {
|
ConnApi.list(queryParams).then(d => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
info.total=d.data?.total||0;
|
info.total = d.data?.data?.total || 0;
|
||||||
info.data=d.data?.data||[];
|
info.data = d.data?.data?.connection_list || [];
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -156,16 +154,18 @@ onMounted(() => {
|
||||||
.search-container {
|
.search-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ defineExpose({
|
||||||
})
|
})
|
||||||
|
|
||||||
const initData = () => {
|
const initData = () => {
|
||||||
OperApi.list().then(d => {
|
OperApi.list({ page_num: 1, page_size: 100 }).then(d => {
|
||||||
let tmps = (d.data?.data?.operator_list || []).map(it => {
|
let tmps = (d.data?.data?.operator_list || []).map(it => {
|
||||||
it.show = true;
|
it.show = true;
|
||||||
it.text = it.operator_name;
|
it.text = it.operator_name;
|
||||||
|
@ -186,6 +186,7 @@ onMounted(() => {
|
||||||
&.item4 {
|
&.item4 {
|
||||||
background: #A7BEE7;
|
background: #A7BEE7;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.item5 {
|
&.item5 {
|
||||||
background: #4C8DD1;
|
background: #4C8DD1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
<span class="sp-title">模型网络:</span>
|
<span class="sp-title">模型网络:</span>
|
||||||
<span class="sp-text">
|
<span class="sp-text">
|
||||||
{{modelInfo.info.modl_net_type}}
|
{{ modelInfo.info.model_net_type }}
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
|
@ -67,7 +67,9 @@
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
<span class="sp-title">网络配置:</span>
|
<span class="sp-title">网络配置:</span>
|
||||||
<span class="sp-text sp-file">
|
<span class="sp-text sp-file">
|
||||||
<a style="line-height:24px;"ref="#"><el-icon><Document /></el-icon>查看配置文件</a>
|
<a style="line-height:24px;" ref="#"><el-icon>
|
||||||
|
<Document />
|
||||||
|
</el-icon>查看配置文件</a>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -76,7 +78,7 @@
|
||||||
<el-card style="margin-top: 12px;">
|
<el-card style="margin-top: 12px;">
|
||||||
<template #header>
|
<template #header>
|
||||||
<svg-icon icon-class="pause" style="width:20px;height:20px;" />可适配算子</template>
|
<svg-icon icon-class="pause" style="width:20px;height:20px;" />可适配算子</template>
|
||||||
<el-button v-for="(it,idx) in modelInfo.opers" :key="idx">{{ it.oper_type_name }}</el-button>
|
<el-button v-for="(it, idx) in modelInfo.opers" :key="idx">{{ it.operator_name }}</el-button>
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card style="margin-top: 12px;margin-bottom:60px;">
|
<el-card style="margin-top: 12px;margin-bottom:60px;">
|
||||||
|
@ -84,7 +86,8 @@
|
||||||
<svg-icon icon-class="pause" style="width:20px;height:20px;" />
|
<svg-icon icon-class="pause" style="width:20px;height:20px;" />
|
||||||
模型结构</template>
|
模型结构</template>
|
||||||
<div style="position: relative;min-height:50vh;" class="scroll">
|
<div style="position: relative;min-height:50vh;" class="scroll">
|
||||||
<iframe frameborder="0" scrolling="no" :src="url" style="width:100%;height:100%;position: absolute;top:0px;"></iframe>
|
<iframe frameborder="0" scrolling="no" :src="url"
|
||||||
|
style="width:100%;height:100%;position: absolute;top:0px;"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-card class="card-footer">
|
<el-card class="card-footer">
|
||||||
|
@ -114,7 +117,8 @@ const initData=()=>{
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
url.value="./onnx/onnx.html?url=/ai/siamRPN_192.onnx";
|
let id = route.query.id;
|
||||||
|
url.value = "./onnx/onnx.html?id=" + id;
|
||||||
initData();
|
initData();
|
||||||
});
|
});
|
||||||
const doBack = () => {
|
const doBack = () => {
|
||||||
|
@ -133,24 +137,31 @@ const doBack=()=>{
|
||||||
align-items: center
|
align-items: center
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.sp-file {
|
.sp-file {
|
||||||
color: #29d;
|
color: #29d;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tb-base-info {
|
.tb-base-info {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
|
|
||||||
:deep(span) {
|
:deep(span) {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.svg-icon) {
|
:deep(.svg-icon) {
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.card-footer {
|
.card-footer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
width: calc(100% - 215px);
|
width: calc(100% - 215px);
|
||||||
bottom: 0px;
|
bottom: 0px;
|
||||||
|
|
||||||
:deep(.el-card__body) {
|
:deep(.el-card__body) {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.el-pagination {
|
.el-pagination {
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,12 +54,13 @@ function handleQuery(a) {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
connApi.list(queryParams).then(d => {
|
connApi.list(queryParams).then(d => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
info.data=(d.data?.data||[]).map(it=>{
|
info.data = (d.data?.data?.connection_list || []).map(it => {
|
||||||
it.id=it.connection_id;
|
|
||||||
it.modelType=it.modl_main_type_name+"/"+it.modl_sub_type_name;
|
it.id = it.model_id;
|
||||||
|
it.modelType = it.modl_net_type;
|
||||||
return it;
|
return it;
|
||||||
});
|
});
|
||||||
total.value=d.data?.total||0;
|
total.value = d.data?.data?.total || 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6045,6 +6045,11 @@ js-base64@^2.1.9:
|
||||||
resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
|
resolved "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4"
|
||||||
integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
|
integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==
|
||||||
|
|
||||||
|
js-md5@^0.8.3:
|
||||||
|
version "0.8.3"
|
||||||
|
resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.8.3.tgz#921bab7efa95bfc9d62b87ee08a57f8fe4305b69"
|
||||||
|
integrity sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==
|
||||||
|
|
||||||
js-tokens@^4.0.0:
|
js-tokens@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
resolved "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
|
|
Loading…
Reference in New Issue