update code

main
lijun 2024-09-28 13:35:18 +08:00
parent c4ddbef147
commit 7987fb3de4
25 changed files with 824 additions and 205 deletions

View File

@ -4,9 +4,14 @@
<meta charset="UTF-8" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>算法测试验证软件平台</title>
<title>算法测试验证软件平台</title>
<!--
<link rel="stylesheet" data-for="result" href="css/v2.css?v=20240928"/>
<script>
window.isV2=true
</script>
-->
</head>
<body>
<div id="app">
<div class="loader"></div>

38
public/css/v2.css 100644
View File

@ -0,0 +1,38 @@
#app .el-header{
background: #3894FF;
color: #fff;
height: 84px;
}
#app .el-header *{
color: #fff !important;
}
#app .el-header .logo-title-small{
color: #003F88 !important;
text-shadow: 1px 1px 1px #ffffff;
}
#app .el-aside{
background-color: #98C3F5;
}
#app .el-aside .el-menu{
background-color: transparent;
}
#app .el-aside .el-menu .el-menu-item{
color: #fff;
}
#app .el-aside .el-menu .el-menu-item:hover{
color: #fff;
background-color:#3894FF88;
}
#app .el-aside .el-menu .el-sub-menu__title{
color: #fff;
}
#app .el-aside .el-menu .router-link-active .el-menu-item{
background-color: #3894FF;
color: #333;
border-right-color: #fff;
}
use[aria-labelledby="icon-web"] path{
fill:red !important;
}

View File

@ -5,7 +5,7 @@ class MenuAPI {
/**
*
*/
static getRoutes() {
static getRoutes() {
return new Promise((resolve) => {
resolve([
{
@ -615,6 +615,410 @@ class MenuAPI {
});*/
}
static getRoutesV2() {
return new Promise((resolve) => {
resolve([
{
path: "/modelMgr",
component: "Layout",
redirect: "/modelMgr/index",
name: "/modelMgr",
meta: {
title: "算法分割管理",
icon: "split",
hidden: false,
roles: ["GUEST", "ADMIN", "ADMIN6"],
alwaysShow: false,
},
children: [
{
path: "index",
component: "model/index",
name: "modelIndex",
meta: {
title: "模型管理",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "uploadModel",
component: "model/uploadModel",
name: "uploadModel",
meta: {
title: "上传模型",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "modelDetail",
component: "model/modelDetail",
name: "modelDetail",
meta: {
title: "模型详情",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
],
},
{
path: "/connection",
component: "Layout",
redirect: "/connection/index",
name: "/connection",
meta: {
title: "互联协议管理",
icon: "web",
hidden: false,
roles: ["GUEST", "ADMIN", "ADMIN6"],
alwaysShow: false,
},
children: [
{
path: "index",
component: "connection/index",
name: "connectionIndex",
meta: {
title: "互联协议",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "edit",
component: "connection/edit",
name: "connectionEdit",
meta: {
title: "互联协议修改",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "detail",
component: "connection/detail",
name: "connectionDetail",
meta: {
title: "互联协议详情",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
],
},
{
path: "/simulationEvaluation",
component: "Layout",
redirect: "/simulationEvaluation/index",
name: "/simulationEvaluation",
meta: {
title: "仿真评估",
icon: "simu",
hidden: false,
roles: ["GUEST", "ADMIN", "ADMIN6"],
alwaysShow: false,
},
children: [
{
path: "index",
component: "simulationEvaluation/index",
name: "simulationEvaluationIndex",
meta: {
title: "编译部署",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "reportList",
component: "simulationEvaluation/reportList",
name: "simulationEvaluationReportList",
meta: {
title: "评估报告",
icon: "user",
hidden: false,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "addReport",
component: "simulationEvaluation/addReport",
name: "simulationEvaluationAddReport",
meta: {
title: "新建评估报告",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "reportDesc",
component: "simulationEvaluation/reportDesc",
name: "simulationEvaluationReportDesc",
meta: {
title: "评估报告详情",
icon: "user",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "addTask",
component: "simulationEvaluation/addTask",
name: "simulationEvaluationAddTask",
meta: {
title: "新建推理任务",
icon: "oper",
hidden: false,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "execution",
component: "simulationEvaluation/execution",
name: "simulationEvaluationExecution",
meta: {
title: "执行中任务",
icon: "oper",
hidden: false,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "hisTaskList",
component: "simulationEvaluation/hisTaskList",
name: "simulationEvaluationHisTaskList",
meta: {
title: "历史任务列表",
icon: "oper",
hidden: false,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
],
},
{
path: "/dataMgr",
component: "Layout",
redirect: "/dataMgr/datas",
name: "/dataMgr",
meta: {
title: "数据集管理",
icon: "dict",
hidden: false,
roles: ["GUEST", "ADMIN", "ADMIN6"],
alwaysShow: false,
},
children: [
{
path: "datas",
component: "manage/datas/index",
name: "datas",
meta: {
title: "数据集管理",
icon: "dict",
hidden: false,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "datasAdd",
component: "manage/datas/add",
name: "datasAdd",
meta: {
title: "数据集新增",
hidden: true,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "datasEdit",
component: "manage/datas/edit",
name: "datasEdit",
meta: {
title: "数据集编辑",
hidden: true,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
],
},
{
path: "/tester",
component: "Layout",
redirect: "/tester/index",
name: "/tester",
meta: {
title: "算法测试仪管理",
icon: "test",
hidden: false,
roles: ["GUEST", "ADMIN", "ADMIN6"],
alwaysShow: false,
},
children: [
{
path: "equipment",
component: "manage/equipment/index",
name: "equipment",
meta: {
title: "计算设备管理",
icon: "setting",
hidden: false,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "equipmentEdit",
component: "manage/equipment/edit",
name: "equipmentEdit",
meta: {
title: "计算设备编辑",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "equipmentUpgrades",
component: "manage/equipment/upGrades",
name: "equipmentUpgrades",
meta: {
title: "计算设备升级",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "equipmentAddPcie",
component: "manage/equipment/addPcie",
name: "equipmentAddPcie",
meta: {
title: "计算PCIE设备新增",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "equipmentAddNet",
component: "manage/equipment/addNet",
name: "equipmentAddNet",
meta: {
title: "计算网络设备新增",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "equipmentDetail",
component: "manage/equipment/view",
name: "equipmentDetail",
meta: {
title: "计算设备查看",
hidden: true,
roles: ["ADMIN", "GUEST"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "otherTool",
component: "manage/otherTool/index",
name: "otherTool",
meta: {
title: "第三方工具管理",
icon: "setting",
hidden: false,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "otherToolAdd",
component: "manage/otherTool/add",
name: "otherToolAdd",
meta: {
title: "第三方工具编辑",
hidden: true,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
{
path: "otherToolDetail",
component: "manage/otherTool/view",
name: "otherToolDetail",
meta: {
title: "查看第三方工具",
hidden: true,
roles: ["ADMIN6", "GUEST", "ADMIN"],
keepAlive: true,
alwaysShow: false,
},
},
],
},
]);
});
/*
return request<any, RouteVO[]>({
url: "/api/v1/menus/routes",
method: "get",
});*/
}
/**
*
*

View File

@ -1 +1 @@
<svg class="icon" style="width: 1.0546875em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1080 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7741"><path d="M755.882667 460.231111a28.444444 28.444444 0 0 1 0 46.648889l-284.444445 199.111111A28.444444 28.444444 0 0 1 426.666667 682.666667V284.444444a28.444444 28.444444 0 0 1 44.771555-23.324444l284.444445 199.111111zM483.555556 339.057778v288.995555l206.392888-144.497777L483.555556 339.057778z" fill="#515151" p-id="7742"></path><path d="M983.324444 378.88a113.777778 113.777778 0 1 1-60.814222-7.964444 398.392889 398.392889 0 0 0-749.340444-41.528889 28.444444 28.444444 0 1 1-52.451556-22.072889A455.168 455.168 0 0 1 983.324444 378.88z m-17.009777-5.688889a23.153778 23.153778 0 0 0-7.964445-2.787555l-3.527111-0.568889a28.330667 28.330667 0 0 1 11.491556 3.356444z m-19.171556 54.101333a56.888889 56.888889 0 1 0 6.314667 1.308445 28.672 28.672 0 0 1-6.314667-1.308445zM105.244444 648.078222a113.777778 113.777778 0 1 1 61.155556 3.584 398.449778 398.449778 0 0 0 737.848889 25.201778 28.444444 28.444444 0 1 1 51.939555 23.210667 455.281778 455.281778 0 0 1-850.944-51.996445z m36.977778-50.744889a56.888889 56.888889 0 1 0 0-113.777777 56.888889 56.888889 0 0 0 0 113.777777z" fill="#515151" p-id="7743"></path></svg>
<svg class="icon" style="width: 1.0546875em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1080 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7741"><path d="M755.882667 460.231111a28.444444 28.444444 0 0 1 0 46.648889l-284.444445 199.111111A28.444444 28.444444 0 0 1 426.666667 682.666667V284.444444a28.444444 28.444444 0 0 1 44.771555-23.324444l284.444445 199.111111zM483.555556 339.057778v288.995555l206.392888-144.497777L483.555556 339.057778z" p-id="7742"></path><path d="M983.324444 378.88a113.777778 113.777778 0 1 1-60.814222-7.964444 398.392889 398.392889 0 0 0-749.340444-41.528889 28.444444 28.444444 0 1 1-52.451556-22.072889A455.168 455.168 0 0 1 983.324444 378.88z m-17.009777-5.688889a23.153778 23.153778 0 0 0-7.964445-2.787555l-3.527111-0.568889a28.330667 28.330667 0 0 1 11.491556 3.356444z m-19.171556 54.101333a56.888889 56.888889 0 1 0 6.314667 1.308445 28.672 28.672 0 0 1-6.314667-1.308445zM105.244444 648.078222a113.777778 113.777778 0 1 1 61.155556 3.584 398.449778 398.449778 0 0 0 737.848889 25.201778 28.444444 28.444444 0 1 1 51.939555 23.210667 455.281778 455.281778 0 0 1-850.944-51.996445z m36.977778-50.744889a56.888889 56.888889 0 1 0 0-113.777777 56.888889 56.888889 0 0 0 0 113.777777z" p-id="7743"></path></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1 +1 @@
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4529"><path d="M908.8 399.36H112A97.28 97.28 0 0 1 14.72 302.08V97.92a32.64 32.64 0 0 1 64 0v204.16a32 32 0 0 0 32 32H908.8a32 32 0 0 0 32-32V97.92a32.64 32.64 0 0 1 64 0v204.16a97.92 97.92 0 0 1-96 97.28zM973.44 942.08a32.64 32.64 0 0 1-32.64-32.64V704a32 32 0 0 0-32-32H112a32 32 0 0 0-32 32v204.16a32.64 32.64 0 0 1-64 0V704a97.28 97.28 0 0 1 96-96H908.8a97.92 97.92 0 0 1 97.28 96v204.16a32.64 32.64 0 0 1-32.64 33.92zM864.64 538.88L155.52 533.76a33.28 33.28 0 0 1-32-33.28 32 32 0 0 1 32.64-32l708.48 5.12a33.92 33.92 0 0 1 32.64 33.28 32 32 0 0 1-32.64 32z" fill="#323333" p-id="4530"></path></svg>
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4529"><path d="M908.8 399.36H112A97.28 97.28 0 0 1 14.72 302.08V97.92a32.64 32.64 0 0 1 64 0v204.16a32 32 0 0 0 32 32H908.8a32 32 0 0 0 32-32V97.92a32.64 32.64 0 0 1 64 0v204.16a97.92 97.92 0 0 1-96 97.28zM973.44 942.08a32.64 32.64 0 0 1-32.64-32.64V704a32 32 0 0 0-32-32H112a32 32 0 0 0-32 32v204.16a32.64 32.64 0 0 1-64 0V704a97.28 97.28 0 0 1 96-96H908.8a97.92 97.92 0 0 1 97.28 96v204.16a32.64 32.64 0 0 1-32.64 33.92zM864.64 538.88L155.52 533.76a33.28 33.28 0 0 1-32-33.28 32 32 0 0 1 32.64-32l708.48 5.12a33.92 33.92 0 0 1 32.64 33.28 32 32 0 0 1-32.64 32z" p-id="4530"></path></svg>

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 778 B

View File

@ -1 +1 @@
<svg class="icon" style="width: 1.142578125em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1170 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11717"><path d="M608.914177 179.748722V292.571559H969.142684a54.857133 54.857133 0 0 1 54.857133 54.857133v621.714175a54.857133 54.857133 0 0 1-54.857133 54.857133H201.142821a54.857133 54.857133 0 0 1-54.857133-54.857133V347.428692a54.857133 54.857133 0 0 1 54.857133-54.857133h362.057078V180.205865A91.465127 91.465127 0 0 1 585.142753 0.000183a91.428555 91.428555 0 0 1 23.771424 179.748539zM210.285677 338.285837a18.285711 18.285711 0 0 0-18.285711 18.285711v603.428463a18.285711 18.285711 0 0 0 18.285711 18.285711h749.714152a18.285711 18.285711 0 0 0 18.285711-18.285711v-603.428463a18.285711 18.285711 0 0 0-18.285711-18.285711h-749.714152zM585.142753 137.143016a45.714278 45.714278 0 1 0 0-91.428556 45.714278 45.714278 0 0 0 0 91.428556zM22.857139 566.857224c12.617141 0 22.857139 10.239998 22.857139 22.857139v137.142833a22.857139 22.857139 0 0 1-45.714278 0v-137.142833C0 577.097223 10.239998 566.857224 22.857139 566.857224z m73.142844-91.428555c12.617141 0 22.857139 10.239998 22.857139 22.857139v319.999943a22.857139 22.857139 0 0 1-45.714278 0v-319.999943c0-12.617141 10.239998-22.857139 22.857139-22.857139z m1051.428384 91.428555c12.617141 0 22.857139 10.239998 22.857138 22.857139v137.142833a22.857139 22.857139 0 0 1-45.714277 0v-137.142833c0-12.617141 10.239998-22.857139 22.857139-22.857139z m-73.142845-91.428555c12.617141 0 22.857139 10.239998 22.857139 22.857139v319.999943a22.857139 22.857139 0 0 1-45.714277 0v-319.999943c0-12.617141 10.239998-22.857139 22.857138-22.857139zM810.422712 781.952043c8.137141-0.365714 14.53714 1.462857 19.181711 5.558856 4.644571 4.077714 7.314284 8.722284 8.063999 13.897141 0.731428 5.211428-0.64 10.313141-4.169142 15.323426-3.529142 4.991999-9.362284 8.429713-17.535997 10.294855-19.291425 0.731428-38.473136 1.005714-57.59999 0.822857-19.090282-0.182857-38.290279-0.274286-57.581704-0.274286-8.155427-1.097143-14.189712-3.986285-18.084568-8.630855-3.894856-4.626285-5.741713-9.63657-5.558856-15.012569 0.182857-5.375999 2.413714-10.294855 6.674284-14.756569 4.278856-4.443428 10.477712-6.857142 18.651426-7.222856h16.402282c5.394285 0 10.861712 0.182857 16.420569 0.548572V539.337229h-35.053708c-8.155427-1.097143-14.189712-3.986285-18.084568-8.612569-3.894856-4.644571-5.741713-9.654855-5.558857-15.030855 0.182857-5.375999 2.413714-10.294855 6.674285-14.738283 4.260571-4.461713 10.477712-6.875427 18.651425-7.241142h114.614837c7.039999 2.230857 12.251426 5.558856 15.579426 10.02057 3.327999 4.443428 4.918856 8.99657 4.735999 13.622855-0.182857 4.644571-2.139428 9.087998-5.851428 13.348569-3.711999 4.278856-9.087998 7.149713-16.127997 8.630855h-33.956565v243.730243a376.393076 376.393076 0 0 0 29.494852-1.115429z m-261.68681 13.951998l-15.963426-41.965707h-135.935975l-15.963426 42.879992c-6.217142 16.71314-11.556569 28.013709-15.963426 33.865137-4.406856 5.851428-11.629712 8.777141-21.668567 8.777141-8.521141 0-11.812569-2.852571-17.023997-9.343998-5.211428-6.509713-6.217142-13.311998-6.217142-21.211425 0-4.571428 0.676571-9.270855 2.194285-14.134854 1.517714-4.863999 4.187428-11.647998 7.679999-20.29714l85.39427-217.124532c2.194285-5.66857 8.466284-21.650282 8.777142-22.473139a113.554265 113.554265 0 0 1 10.971426-21.759996c3.876571-5.79657 10.697141-12.543998 14.134855-14.829712 3.419428-2.285714 7.990856-4.571428 15.414854-4.571428 7.442284 0 9.50857-0.786286 16.58514 4.571428 2.889142 2.194285 9.234284 8.959998 13.110855 14.591998 3.876571 5.613713 7.20457 11.666284 9.874284 18.121139 2.669714 6.473142 5.942856 15.085712 10.057141 25.892567l87.405699 215.753104c6.838856 16.420568 10.239998 28.342852 10.239998 35.803422 0 7.753141-1.554285 14.40914-6.034285 21.32114-2.742857 4.205714-8.722284 9.691427-17.846854 9.691426-5.321142 0-9.874284-0.950857-13.677712-2.852571a28.031995 28.031995 0 0 1-9.581712-7.753141c-2.596571-3.273142-5.357713-8.283427-8.319999-15.04914-2.980571-6.765713-5.522285-12.726855-7.643427-17.901711z m-134.107405-92.818269h99.89484l-50.413706-137.983976-49.481134 137.983976z" fill="#000000" p-id="11718"></path></svg>
<svg class="icon" style="width: 1.142578125em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1170 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11717"><path d="M608.914177 179.748722V292.571559H969.142684a54.857133 54.857133 0 0 1 54.857133 54.857133v621.714175a54.857133 54.857133 0 0 1-54.857133 54.857133H201.142821a54.857133 54.857133 0 0 1-54.857133-54.857133V347.428692a54.857133 54.857133 0 0 1 54.857133-54.857133h362.057078V180.205865A91.465127 91.465127 0 0 1 585.142753 0.000183a91.428555 91.428555 0 0 1 23.771424 179.748539zM210.285677 338.285837a18.285711 18.285711 0 0 0-18.285711 18.285711v603.428463a18.285711 18.285711 0 0 0 18.285711 18.285711h749.714152a18.285711 18.285711 0 0 0 18.285711-18.285711v-603.428463a18.285711 18.285711 0 0 0-18.285711-18.285711h-749.714152zM585.142753 137.143016a45.714278 45.714278 0 1 0 0-91.428556 45.714278 45.714278 0 0 0 0 91.428556zM22.857139 566.857224c12.617141 0 22.857139 10.239998 22.857139 22.857139v137.142833a22.857139 22.857139 0 0 1-45.714278 0v-137.142833C0 577.097223 10.239998 566.857224 22.857139 566.857224z m73.142844-91.428555c12.617141 0 22.857139 10.239998 22.857139 22.857139v319.999943a22.857139 22.857139 0 0 1-45.714278 0v-319.999943c0-12.617141 10.239998-22.857139 22.857139-22.857139z m1051.428384 91.428555c12.617141 0 22.857139 10.239998 22.857138 22.857139v137.142833a22.857139 22.857139 0 0 1-45.714277 0v-137.142833c0-12.617141 10.239998-22.857139 22.857139-22.857139z m-73.142845-91.428555c12.617141 0 22.857139 10.239998 22.857139 22.857139v319.999943a22.857139 22.857139 0 0 1-45.714277 0v-319.999943c0-12.617141 10.239998-22.857139 22.857138-22.857139zM810.422712 781.952043c8.137141-0.365714 14.53714 1.462857 19.181711 5.558856 4.644571 4.077714 7.314284 8.722284 8.063999 13.897141 0.731428 5.211428-0.64 10.313141-4.169142 15.323426-3.529142 4.991999-9.362284 8.429713-17.535997 10.294855-19.291425 0.731428-38.473136 1.005714-57.59999 0.822857-19.090282-0.182857-38.290279-0.274286-57.581704-0.274286-8.155427-1.097143-14.189712-3.986285-18.084568-8.630855-3.894856-4.626285-5.741713-9.63657-5.558856-15.012569 0.182857-5.375999 2.413714-10.294855 6.674284-14.756569 4.278856-4.443428 10.477712-6.857142 18.651426-7.222856h16.402282c5.394285 0 10.861712 0.182857 16.420569 0.548572V539.337229h-35.053708c-8.155427-1.097143-14.189712-3.986285-18.084568-8.612569-3.894856-4.644571-5.741713-9.654855-5.558857-15.030855 0.182857-5.375999 2.413714-10.294855 6.674285-14.738283 4.260571-4.461713 10.477712-6.875427 18.651425-7.241142h114.614837c7.039999 2.230857 12.251426 5.558856 15.579426 10.02057 3.327999 4.443428 4.918856 8.99657 4.735999 13.622855-0.182857 4.644571-2.139428 9.087998-5.851428 13.348569-3.711999 4.278856-9.087998 7.149713-16.127997 8.630855h-33.956565v243.730243a376.393076 376.393076 0 0 0 29.494852-1.115429z m-261.68681 13.951998l-15.963426-41.965707h-135.935975l-15.963426 42.879992c-6.217142 16.71314-11.556569 28.013709-15.963426 33.865137-4.406856 5.851428-11.629712 8.777141-21.668567 8.777141-8.521141 0-11.812569-2.852571-17.023997-9.343998-5.211428-6.509713-6.217142-13.311998-6.217142-21.211425 0-4.571428 0.676571-9.270855 2.194285-14.134854 1.517714-4.863999 4.187428-11.647998 7.679999-20.29714l85.39427-217.124532c2.194285-5.66857 8.466284-21.650282 8.777142-22.473139a113.554265 113.554265 0 0 1 10.971426-21.759996c3.876571-5.79657 10.697141-12.543998 14.134855-14.829712 3.419428-2.285714 7.990856-4.571428 15.414854-4.571428 7.442284 0 9.50857-0.786286 16.58514 4.571428 2.889142 2.194285 9.234284 8.959998 13.110855 14.591998 3.876571 5.613713 7.20457 11.666284 9.874284 18.121139 2.669714 6.473142 5.942856 15.085712 10.057141 25.892567l87.405699 215.753104c6.838856 16.420568 10.239998 28.342852 10.239998 35.803422 0 7.753141-1.554285 14.40914-6.034285 21.32114-2.742857 4.205714-8.722284 9.691427-17.846854 9.691426-5.321142 0-9.874284-0.950857-13.677712-2.852571a28.031995 28.031995 0 0 1-9.581712-7.753141c-2.596571-3.273142-5.357713-8.283427-8.319999-15.04914-2.980571-6.765713-5.522285-12.726855-7.643427-17.901711z m-134.107405-92.818269h99.89484l-50.413706-137.983976-49.481134 137.983976z" p-id="11718"></path></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@ -1 +1 @@
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6501"><path d="M954.393689 486.469534l-0.686638 0c-12.847609-233.459123-206.825532-419.442978-443.425182-419.442978-244.88536 0-444.116937 199.2326-444.116937 444.11796 0 244.881267 199.230554 444.11182 444.116937 444.11182 244.87922 0 444.110797-199.230554 444.110797-444.11182 0-7.686053-0.196475-15.32708-0.584308-22.917966L954.393689 486.469534zM133.620253 670.664649c-20.203134-45.630247-31.872918-95.331205-32.783661-147.187247l149.923568 0c0.415462 52.483328 5.799076 102.237499 15.438621 148.039661L140.183739 671.517063 133.620253 670.664649zM522.615779 301.420981 522.615779 104.037495l-3.165086-1.36509c72.194252 9.844206 140.828422 89.218998 180.866301 198.748576L522.615779 301.420981zM712.405309 338.429873c13.33675 46.076408 21.698185 96.252181 23.50432 148.039661L522.615779 486.469534 522.615779 338.429873 712.405309 338.429873zM485.605863 103.310947l0 198.111057L319.439356 301.422004C355.426989 194.099696 416.442644 115.572202 485.605863 103.310947zM485.605863 338.429873l0 148.039661L285.99464 486.469534c2.227738-51.738361 10.053983-101.926414 22.338774-148.039661L485.605863 338.429873zM251.29535 486.469534 101.93767 486.469534c3.980661-52.02898 18.043958-102.143355 40.190351-148.039661l129.105427 0C260.119319 384.294456 253.228375 434.136631 251.29535 486.469534zM285.376563 523.477402l200.230324 0L485.606887 671.517063 304.672024 671.517063C292.826232 625.425306 285.915845 575.352887 285.376563 523.477402zM485.605863 708.524932l0 208.085222c-69.969585-18.518772-134.104277-99.099019-170.09191-208.085222L485.605863 708.524932zM522.615779 920.448576 522.615779 708.524932l184.212512 0C669.565619 829.42242 600.75851 915.840628 522.615779 920.448576zM522.615779 671.517063 522.615779 523.477402l213.471906 0c-1.218758 51.758828-7.944949 101.857852-19.11229 148.039661L522.615779 671.517063zM769.797437 523.477402l149.928684 0c-0.862647 52.178383-11.979846 102.176101-31.397081 148.039661l-133.971247 0C763.998361 625.714901 769.382998 575.960731 769.797437 523.477402zM769.262248 486.469534c-1.933025-52.331879-8.823969-102.175077-19.937075-148.039661L876.148627 338.429873c23.269983 45.896306 38.175461 96.009657 42.399669 148.039661L769.262248 486.469534zM855.012238 301.420981 739.183186 301.420981c-22.285562-72.507384-55.711859-132.844587-96.890724-174.137039C729.395262 160.310126 804.862048 222.909859 855.012238 301.420981zM384.27706 121.440863c-43.940768 41.34157-79.541591 103.97712-102.902648 179.981141L162.274874 301.422004C213.143425 218.003106 291.867394 152.545278 384.27706 121.440863zM152.848177 708.524932l122.2943 0c21.618367 78.83244 56.549947 143.574976 100.562347 186.930413C282.002722 861.058954 201.997574 793.811364 152.848177 708.524932zM639.005602 901.045667c46.76714-43.283806 83.842547-110.22645 106.408495-192.520735l124.977409 0C820.87065 798.700721 737.902006 868.711238 639.005602 901.045667z" fill="#2A2B2B" p-id="6502"></path></svg>
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6501"><path d="M954.393689 486.469534l-0.686638 0c-12.847609-233.459123-206.825532-419.442978-443.425182-419.442978-244.88536 0-444.116937 199.2326-444.116937 444.11796 0 244.881267 199.230554 444.11182 444.116937 444.11182 244.87922 0 444.110797-199.230554 444.110797-444.11182 0-7.686053-0.196475-15.32708-0.584308-22.917966L954.393689 486.469534zM133.620253 670.664649c-20.203134-45.630247-31.872918-95.331205-32.783661-147.187247l149.923568 0c0.415462 52.483328 5.799076 102.237499 15.438621 148.039661L140.183739 671.517063 133.620253 670.664649zM522.615779 301.420981 522.615779 104.037495l-3.165086-1.36509c72.194252 9.844206 140.828422 89.218998 180.866301 198.748576L522.615779 301.420981zM712.405309 338.429873c13.33675 46.076408 21.698185 96.252181 23.50432 148.039661L522.615779 486.469534 522.615779 338.429873 712.405309 338.429873zM485.605863 103.310947l0 198.111057L319.439356 301.422004C355.426989 194.099696 416.442644 115.572202 485.605863 103.310947zM485.605863 338.429873l0 148.039661L285.99464 486.469534c2.227738-51.738361 10.053983-101.926414 22.338774-148.039661L485.605863 338.429873zM251.29535 486.469534 101.93767 486.469534c3.980661-52.02898 18.043958-102.143355 40.190351-148.039661l129.105427 0C260.119319 384.294456 253.228375 434.136631 251.29535 486.469534zM285.376563 523.477402l200.230324 0L485.606887 671.517063 304.672024 671.517063C292.826232 625.425306 285.915845 575.352887 285.376563 523.477402zM485.605863 708.524932l0 208.085222c-69.969585-18.518772-134.104277-99.099019-170.09191-208.085222L485.605863 708.524932zM522.615779 920.448576 522.615779 708.524932l184.212512 0C669.565619 829.42242 600.75851 915.840628 522.615779 920.448576zM522.615779 671.517063 522.615779 523.477402l213.471906 0c-1.218758 51.758828-7.944949 101.857852-19.11229 148.039661L522.615779 671.517063zM769.797437 523.477402l149.928684 0c-0.862647 52.178383-11.979846 102.176101-31.397081 148.039661l-133.971247 0C763.998361 625.714901 769.382998 575.960731 769.797437 523.477402zM769.262248 486.469534c-1.933025-52.331879-8.823969-102.175077-19.937075-148.039661L876.148627 338.429873c23.269983 45.896306 38.175461 96.009657 42.399669 148.039661L769.262248 486.469534zM855.012238 301.420981 739.183186 301.420981c-22.285562-72.507384-55.711859-132.844587-96.890724-174.137039C729.395262 160.310126 804.862048 222.909859 855.012238 301.420981zM384.27706 121.440863c-43.940768 41.34157-79.541591 103.97712-102.902648 179.981141L162.274874 301.422004C213.143425 218.003106 291.867394 152.545278 384.27706 121.440863zM152.848177 708.524932l122.2943 0c21.618367 78.83244 56.549947 143.574976 100.562347 186.930413C282.002722 861.058954 201.997574 793.811364 152.848177 708.524932zM639.005602 901.045667c46.76714-43.283806 83.842547-110.22645 106.408495-192.520735l124.977409 0C820.87065 798.700721 737.902006 868.711238 639.005602 901.045667z" p-id="6502"></path></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -1,7 +1,7 @@
export default {
// 路由国际化
route: {
dashboard: "首页",
dashboard: "数据总览",
document: "项目文档",
},
// 登录页面国际化

View File

@ -3,7 +3,7 @@
<div style="flex-grow: 1;display: flex;align-items: center;padding-top: 3px;">
<span style="position: relative;">
<img src="@/assets/logo2.png" class="logo-image" />
<span style="position: absolute;font-weight: bold;font-size: 14px;color: #003F88;left: 0;bottom: -13px;white-space: nowrap;">中国航天</span>
<span class="logo-title" style="position: absolute;font-weight: bold;font-size: 14px;color: #003F88;left: 0;bottom: -13px;white-space: nowrap;">中国航天</span>
</span>
<span style="margin-left: 20px;margin-top: 10px;font-size: 12px;font-weight: bold;">
<div class="logo-title" style="font-weight: bold;font-size: 22px;color:#003F88"> {{ "中国航天某某某某研究院" }}</div>

View File

@ -12,7 +12,7 @@
:index="route.path"
>
<template #title>
<svg-icon
<svg-icon color="red"
v-if="route.meta && route.meta.icon"
:icon-class="route.meta.icon"
/>

View File

@ -15,7 +15,6 @@ import "vue3-json-viewer/dist/index.css"
import "@/styles/index.scss";
import "uno.css";
import "animate.css";
const app = createApp(App);
// 全局注册 自定义指令(directive)
setupDirective(app);

View File

@ -82,17 +82,31 @@ export const usePermissionStore = defineStore("permission", () => {
*/
function generateRoutes(roles: string[]) {
return new Promise<RouteRecordRaw[]>((resolve, reject) => {
// 接口获取所有路由
MenuAPI.getRoutes()
.then((data:any) => {
// 过滤有权限的动态路由
const accessedRoutes = filterAsyncRoutes(data, roles);
setRoutes(accessedRoutes);
resolve(accessedRoutes);
})
.catch((error) => {
reject(error);
});
if (window.isV2) {
// 接口获取所有路由
MenuAPI.getRoutesV2()
.then((data: any) => {
// 过滤有权限的动态路由
const accessedRoutes = filterAsyncRoutes(data, roles);
setRoutes(accessedRoutes);
resolve(accessedRoutes);
})
.catch((error) => {
reject(error);
});
} else {
// 接口获取所有路由
MenuAPI.getRoutes()
.then((data: any) => {
// 过滤有权限的动态路由
const accessedRoutes = filterAsyncRoutes(data, roles);
setRoutes(accessedRoutes);
resolve(accessedRoutes);
})
.catch((error) => {
reject(error);
});
}
});
}

View File

@ -16,6 +16,9 @@ declare global {
pageSize: number;
}
interface Window{
isV2?:any
}
/**
*
*/

View File

@ -2,7 +2,7 @@
<template>
<div class="app-container">
<div class="search-container" style="position: relative;">
<el-button type="primary" @click="doAddByModel"
<el-button type="primary" @click="doAddByModel" v-if="!isV2"
style="position: absolute;left:10px;"><i-ep-plus />新建互联</el-button>
<el-form ref="queryFormRef" :model="queryParams" :inline="true" style="flex-grow: 1;text-align: right;">
<el-form-item label="" prop="connection_name">
@ -35,12 +35,14 @@
<el-table-column label="操作" fixed="right" align="center" width="320">
<template #default="scope">
<el-button text type="primary" size="small" @click="doShowDetail(scope.row)"><i-ep-edit />查看</el-button>
<template v-if="!isV2">
<el-button text type="primary" size="small" style="margin:0px;"
@click="doEdit(scope.row)"><i-ep-link />修改互联</el-button>
<el-button text type="primary" size="small" @click="doAdd(scope.row)"
style="margin:0px;"><i-ep-plus />新建互联</el-button>
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"
style="margin:0px;"><i-ep-delete />删除</el-button>
</template>
</template>
</el-table-column>
</el-table>
@ -64,6 +66,7 @@ const router = useRouter();
const selModelDlg = ref();
const loading = ref(false); //
const removeIds = ref([]); // ID
const isV2=window.isV2;
const queryParams = reactive<any>({
page_num: 1,
page_size: 10,

View File

@ -1,43 +1,19 @@
<template>
<div class="model-flow">
<div class="model-flow2">
<el-row class="row-1">
<div class="card-item">
<div class="title-text">任务描述</div>
<el-badge :value="0" class="item">
<div class="div-img">
<img class="img-150" src="./flow/suanfashangchuan.png" />
</div>
</el-badge>
</div>
<div class="line line-right">
</div>
<div class="card-item is-active">
<div class="title-text">算子互联</div>
<el-badge :value="0" class="item">
<div class="div-img">
<img class="img-150" src="./flow/suanzijiancha.png" />
</div>
</el-badge>
</div>
<div class="line line-right">
</div>
<div class="card-item">
<div class="card-item" :class="info.cnt1 > 0 ? 'is-active' : ''">
<div class="title-text">编译部署</div>
<el-badge :value="0" class="item">
<el-badge :value="info.cnt1" class="item">
<div class="div-img">
<img class="img-150" src="./flow/bybs.png" />
</div>
</el-badge>
</div>
<div class="line line-right">
</div>
<div class="card-item">
<div class="title-text">性能采集</div>
<el-badge :value="0" class="item">
<div class="card-item" :class="info.cnt2 > 0 ? 'is-active' : ''">
<div class="title-text">推理评估</div>
<el-badge :value="info.cnt2" class="item">
<div class="div-img">
<img class="img-150" src="./flow/tlpg.png" />
</div>
@ -47,9 +23,9 @@
<div class="line line-right">
</div>
<div class="card-item">
<div class="card-item" :class="info.cnt3 > 0 ? 'is-active' : ''">
<div class="title-text">评估报告</div>
<el-badge :value="0" class="item">
<el-badge :value="info.cnt3" class="item">
<div class="div-img">
<img class="img-150" src="./flow/pgbg.png" />
</div>
@ -57,22 +33,7 @@
</div>
</el-row>
<el-row class="row-3">
<div class="card-item line-top">
<el-badge :value="0" class="item">
<div class="div-img">
<img class="img-120" src="./flow/szgl.png" />
</div>
</el-badge>
<div class="title-text">算子管理</div>
</div>
<div class="line"></div>
<div class="card-item">
</div>
<div class="line"></div>
<el-row class="row-3">
<div class="card-item card-center">
<div class="card-center-item">
<el-badge :value="0" class="item">
@ -100,7 +61,7 @@
<img class="img-120" src="./flow/sjjgl.png" />
</div>
</el-badge>
<div class="title-text">数据管理</div>
<div class="title-text">数据管理</div>
</div>
@ -109,22 +70,43 @@
</div>
</template>
<script lang='ts' setup>
<script setup>
import LogApi from '@/api/log'
let info = reactive({
cnt1: 0,
cnt2: 0,
cnt3: 0
})
const loadData = () => {
LogApi.userRunning().then(d => {
let tmps = d.data?.data?.running_operation_list || [];
const findCnt = t => {
let objs = tmps.filter(it => it.logs_operation_type == t);
return objs.length > 0 ? objs[0].operation_count : 0;
}
info.cnt1 = findCnt("model_compile");
info.cnt2 = findCnt("model_infer");
info.cnt3 = findCnt("model_report");
});
}
onMounted(() => {
loadData();
});
</script>
<style lang='scss'>
@media screen and (max-width:1440px) {
.model-flow {
.model-flow2 {
padding-left: 10px;
}
}
@media screen and (min-width:1440px) {
.model-flow {
.model-flow2 {
padding-left: 60px;
}
}
.model-flow {
.model-flow2 {
.row-1 {
.title-text {
margin-bottom: 10px;
@ -132,7 +114,7 @@
.line {
position: relative;
width: calc(20% - 120px);
width: calc(40% - 120px);
&::before {
display: inline-block;
@ -163,7 +145,7 @@
.line {
position: relative;
width: calc(20% - 120px);
width: calc(40% - 120px);
text-align: center;
img {

View File

@ -1,7 +1,20 @@
<template>
<div class="dashboard-container" :class="isSmallScreen ? 'is-small' : ''">
<!-- github角标 -->
<el-row :gutter="10" class="mt-3" style="margin-bottom: 12px;">
<el-row :gutter="100" class="mt-3 row-header is-v2" style="margin-bottom: 12px;" v-if="isV2">
<el-col :span="6" v-for="(it, idx) in topInfos" :key="idx">
<el-card shadow="always" class="top-row1 is-v2">
<img :src="it.icon" class="top-icon" />
<div class="top-row">
<div class="div-title">{{ it.title }}</div>
<div class="div-num">
<span style="color:dodgerblue;">{{ it.ucnt }} </span>/ <span style="font-size:14px;">{{ it.count }}</span>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="10" class="mt-3" style="margin-bottom: 12px;" v-else>
<el-col :span="4" v-for="(it, idx) in topInfos" :key="idx">
<el-card shadow="always" class="top-row1">
<img :src="it.icon" class="top-icon" />
@ -27,7 +40,28 @@
<el-row :gutter="20">
<el-col :span="isSmallScreen ? 8 : 6" v-for="it in devInfos" :key="it.id" class="dev-item"
style="margin-bottom: 20px;">
<el-card shadow="hover">
<el-card shadow="hover" v-if="isV2">
<template #header>
<div class="dev-title">{{ it.device_name }}
</div>
</template>
<div class="dev-row2">
<div>
网络类型:<span>{{ it.modl_net_type }}</span>
</div>
</div>
<div class="dev-row3 is-v2">
<div class="device-state">
<img style="position: relative;top: -10px;left:-10px;"
:src="'images/state/' + it.working_state + '.png'" />
<div
style="font-size:20px;color:#888;position: relative;top: -10px;padding-right:10px;text-align: center;">
{{ getState(it.working_state) }}</div>
</div>
</div>
</el-card>
<el-card shadow="hover" v-else>
<template #header>
<div class="dev-title">{{ it.device_name }}
<svg-icon icon-class="enlarge" color="#666" />
@ -88,7 +122,8 @@
<div style="color:#333;font-weight: bold;font-size:15px;">模型仿真评估流程</div>
</div>
</template>
<ModelFlow />
<ModelFlow2 v-if="isV2"/>
<ModelFlow v-else/>
</el-card>
</div>
<div style="" class="right-panel">
@ -103,7 +138,7 @@
</el-scrollbar>
</el-card>
<el-card shadow="never" class="proc-card server-status">
<el-card shadow="never" class="proc-card server-status" v-if="!isV2">
<template #header>
<div class="row2-top">
<div style="color:#333;font-weight: bold;font-size:15px;">服务器运行状态</div>
@ -118,11 +153,12 @@
<script setup lang="ts">
import ModelFlow from './components/ModelFlow.vue'
import ModelFlow2 from './components/ModelFlow2.vue'
import IndexNotice from './components/IndexNotice.vue'
import ServiceStatus from './components/ServiceStatus.vue'
import DeviceAPI from "@/api/device";
import InfoApi from '@/api/info'
const isV2 = window.isV2;
let svTemp = ref(55.5)
let rd = () => { return +("" + Math.random()).substring(3, 5) };
@ -177,6 +213,14 @@ const loadInfo = () => {
{ title: '互联总数', count: d.data.total_task_count, ucnt: d.data.user_task_count, clsName: 'c1', icon: "images/nav/nav5.png" },
{ title: '总访问量', count: d.data.total_visit_count, ucnt: d.data.user_visit_count, clsName: 'c1', icon: "images/nav/nav1.png" },
];
if (isV2) {
topInfos.value = [
{ title: '模型总数', count: d.data.total_model_count, ucnt: d.data.user_model_count, clsName: 'c1', icon: "images/nav/nav1.png" },
{ title: '数据集总数', count: d.data.total_dataset_count, ucnt: d.data.user_dataset_count, clsName: 'c1', icon: "images/nav/nav3.png" },
{ title: '评估报告总数', count: d.data.total_connection_count, ucnt: d.data.user_connection_count, clsName: 'c1', icon: "images/nav/nav4.png" },
{ title: '总访问量', count: d.data.total_visit_count, ucnt: d.data.user_visit_count, clsName: 'c1', icon: "images/nav/nav1.png" },
];
}
})
}
@ -239,7 +283,9 @@ onMounted(() => {
&.is-small {
.dev-row3 {
padding: 0px !important;
&.is-v2{
justify-content: center;
}
.device-state {
width: 80px !important;
}
@ -322,6 +368,35 @@ onMounted(() => {
.top-row1 {
position: relative;
&.is-v2 {
background-color: #6FADF5;
.el-card__body {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.top-icon {
position: static;
}
.top-row {
padding-top: 8px;
padding-left: 0px;
line-height: 20px;
.div-title {
color: #fff;
}
.div-num {
color: #816CB2;
}
}
}
}
.top-icon {
top: 20px;
position: absolute;
@ -435,7 +510,9 @@ onMounted(() => {
display: flex;
padding: 12px;
align-items: center;
&.is-v2{
justify-content: center;
}
.device-state {
width: 100px;
text-align: center;

View File

@ -5,40 +5,25 @@
<template #header>
<div class="flex justify-between">
<div>
<el-button type="primary" @click="handleAdd()"
><i-ep-plus />添加数据集</el-button
>
<el-button type="primary" @click="handleAdd()" v-if="!isV2"><i-ep-plus />添加数据集</el-button>
</div>
<div>
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="数据集名称" prop="dataset_name">
<el-input
v-model="queryParams.dataset_name"
placeholder="请输入数据集名称"
clearable
style="width: 200px"
@keyup.enter="handleQuery"
/>
<el-input v-model="queryParams.dataset_name" placeholder="请输入数据集名称" clearable style="width: 200px"
@keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery"
><i-ep-search />搜索</el-button
>
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
<el-button @click="resetQuery">
<i-ep-refresh />
重置</el-button
>
重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<el-table
v-loading="loading"
:data="pageData"
stripe
@selection-change="handleSelectionChange"
>
<el-table v-loading="loading" :data="pageData" stripe @selection-change="handleSelectionChange">
<el-table-column label="数据集名称" align="left" prop="dataset_name" width="250" />
<el-table-column label="版本" align="left" width="80" prop="dataset_version" />
<el-table-column label="数据集描述" align="left" prop="dataset_desc" />
@ -49,31 +34,14 @@
<el-table-column label="标注类型" width="180" align="left" prop="dats_label_type" />
<el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope">
<el-button
text
type="primary"
size="small"
@click="handleDetail(scope.row)"
><i-ep-edit />查看</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="handleDetail(scope.row)"><i-ep-edit />查看</el-button>
<el-button text type="primary" size="small" @click="handleDelete(scope.row)" v-if="!isV2"><i-ep-delete />删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.page_num"
v-model:limit="queryParams.page_size"
@pagination="handleQuery"
/>
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.page_num"
v-model:limit="queryParams.page_size" @pagination="handleQuery" />
</el-card>
</div>
</template>
@ -88,6 +56,7 @@ const total = ref(0); // 数据总数
const pageData = ref([]); //
const removeIds = ref([]); // ID
const queryFormRef = ref(ElForm); //
const isV2 = window.isV2;
const queryParams = reactive({
page_num: 1,
page_size: 10,

View File

@ -4,8 +4,8 @@
<el-card shadow="never" class="table-container">
<template #header>
<div class="flex justify-between">
<div>
<el-button type="primary" @click="handleAddPcie()"><i-ep-plus />添加设备</el-button>
<div v-if="!isV2">
<el-button type="primary" @click="handleAddPcie()" ><i-ep-plus />添加设备</el-button>
<!-- <el-button type="primary" @click="handleAddNet()"><i-ep-plus />网络设备</el-button> -->
</div>
<!-- <div>
@ -64,11 +64,13 @@
<el-table-column label="操作" fixed="right" width="320">
<template #default="scope">
<el-button text type="primary" size="small" @click="handleDetail(scope.row)"><i-ep-view />详细</el-button>
<template v-if="!isV2">
<el-button text type="primary" size="small" @click="handleUpdate(scope.row)"><i-ep-edit />修改</el-button>
<el-button v-if="scope.row.id != 2" text type="primary" size="small"
@click="openUpGrades(scope.row)"><i-ep-upload />升级</el-button>
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"><i-ep-delete />删除</el-button>
</template>
</template>
</el-table-column>
</el-table>
@ -87,7 +89,7 @@
import DeviceApi from "@/api/device";
const router = useRouter();
const isV2=window.isV2;
const loading = ref(false); //
const total = ref(0); //
const pageData = ref([]); //

View File

@ -4,45 +4,28 @@
<el-card shadow="never" class="table-container">
<template #header>
<div class="flex justify-between">
<div>
<div v-if="!isV2">
<el-button type="primary" @click="handleAdd()"><i-ep-plus />工具链</el-button>
</div>
<div>
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="工具类型" prop="tool_type">
<el-select
v-model="queryParams.tool_type"
placeholder="请选择工具类型"
style="width: 200px"
@change="handleQuery"
>
<el-option
v-for="item in listOpt.typeList"
:key="item.type"
:label="item.name"
:value="item.type"
/>
<el-select v-model="queryParams.tool_type" placeholder="请选择工具类型" style="width: 200px"
@change="handleQuery">
<el-option v-for="item in listOpt.typeList" :key="item.type" :label="item.name" :value="item.type" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery"
><i-ep-search />搜索</el-button
>
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
<el-button @click="resetQuery">
<i-ep-refresh />
重置</el-button
>
重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<el-table
v-loading="loading"
:data="pageData"
stripe
@selection-change="handleSelectionChange"
>
<el-table v-loading="loading" :data="pageData" stripe @selection-change="handleSelectionChange">
<el-table-column label="工具链名称" align="left" prop="tool_name" width="250" />
<el-table-column label="工具类型" align="left" prop="tool_type_name" />
<el-table-column label="匹配硬件" align="left" prop="cmpt_hardware_type" />
@ -50,12 +33,9 @@
<el-table-column label="连接状态" align="left" prop="connection_state" />
<el-table-column label="操作" align="center" fixed="right" width="280">
<template #default="scope">
<el-button text type="primary" size="small" @click="handleDetail(scope.row)"
><i-ep-edit />查看</el-button
>
<el-button text type="primary" size="small" @click="handleDetail(scope.row)"><i-ep-edit />查看</el-button>
<el-button text type="primary" size="small" @click="handleDelete(scope.row)"
><i-ep-delete />删除</el-button
>
v-if="!isV2"><i-ep-delete />删除</el-button>
</template>
</el-table-column>
</el-table>
@ -72,7 +52,7 @@
<script setup lang="ts">
import ToolChainshApi from "@/api/tool";
const isV2 = window.isV2;
const router = useRouter();
const loading = ref(false); //

View File

@ -2,7 +2,7 @@
<template>
<div class="app-container">
<div class="search-container">
<el-button type="primary" @click="doUploadModel"><i-ep-plus />上传模型</el-button>
<el-button type="primary" @click="doUploadModel" v-if="!isV2"><i-ep-plus />上传模型</el-button>
<el-form ref="queryFormRef" :model="queryParams" :inline="true" style="flex-grow: 1;text-align: right;">
<el-form-item label="" prop="keywords">
<el-input v-model="queryParams.model_name" placeholder="请输入模型名称" clearable style="width: 200px"
@ -31,8 +31,8 @@
<template #default="scope">
<el-button text type="primary" size="small"
@click="doShowModelDetail(scope.row)"><i-ep-edit />查看</el-button>
<el-button text type="primary" size="small" @click="doconnection()"><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="doconnection()" v-if="!isV2"><i-ep-link />互联</el-button>
<el-button text type="primary" size="small" @click="handleDelete(scope.row)" v-if="!isV2"><i-ep-delete />删除</el-button>
</template>
</el-table-column>
</el-table>
@ -61,6 +61,7 @@ let queryParams = reactive({
page_size: 10,
model_name: ''
});
const isV2=window.isV2;
const dateTimeRange = ref("");
let total = ref(100); //

View File

@ -241,15 +241,15 @@ function doChoiceSuccess(d) {
info.tableData = d || [];
info.modl_sub_type = info.tableData != null && info.tableData.length > 0 ? info.tableData[0].modl_sub_type || '' : '';
if (['tracking'].indexOf(info.modl_sub_type) >= 0) {
info.norm = {
lvl1: "1. IDSWID跳变,2. MT跟踪次数,3. ML丢失次数,4. FM打断次数,5. MOTA跟踪准确度,6. IDF1目标匹配F1分数".split(","),
info.norm = {
lvl1: "1.IDSW (ID跳变),2.MT跟踪轨迹,3.ML丢失轨迹,4.FM打断次数,5.MOTA跟踪准确度".split(","),
lvl2: "1. 平均推理时间,2. 系统延迟时间".split(",")
}
form.value.score_threshold = 0.5;
form.value.nms_threshold = 0.5;
} else if (['detection', 'classification'].indexOf(info.modl_sub_type) >= 0) {
info.norm = {
lvl1: "1. Accuracy准确度,2. Precision精确度,3. Recall召回率,4. F1-ScoreF1分数,5. Micro F1,6. Macro F1,7. 加权F1-Score,8. AP平均精度,9. mAP多类平均精度,10. ROC曲线,11. PR曲线".split(","),
lvl1: "1.Precision精确度,2.Recall (召回率),3.F1-Score (F1分数),4. Micro F1,5. Macro F1,6.加权F1-Score,7.AP平均精度,8.mAP(多类平均精度),9.PR曲线".split(","),
lvl2: "1. 平均推理时间,2. 系统延迟时间".split(",")
}
form.value.score_threshold = 0.5;
@ -293,6 +293,9 @@ function doChoiceSuccess(d) {
padding: 10px;
line-height: 20px;
font-weight: bold;
span{
margin-right:8px;
}
}
}

View File

@ -18,9 +18,9 @@
<el-table-column label="模型说明" align="left" prop="model_desc" width="120" v-if="1 == 2" />
<el-table-column label="版本" align="left" prop="connection_version" v-if="1 == 2" />
<el-table-column label="互联名称" align="left" prop="connection_name" width="120" />
<el-table-column label="互联名称" align="left" prop="connection_name" />
<el-table-column label="互联说明" align="left" prop="connection_desc" />
<el-table-column label="互联创建时间" width="120" align="left" prop="create_time" />
<el-table-column label="互联创建时间" width="180" align="left" prop="create_time" />
</el-table>
<pagination v-if="total > 0" v-model:total="total" v-model:page="queryParams.pageNum"

View File

@ -8,7 +8,7 @@
<el-input v-model="queryParams.dataset_name" placeholder="请输入数据集名称" clearable style="width: 250px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery"><i-ep-search />搜索</el-button>
<el-button type="primary" @click="handleQuery()"><i-ep-search />搜索</el-button>
</el-form-item>
</el-form>
</template>

View File

@ -43,8 +43,7 @@
<el-table :data="it.classes" stripe style="margin-top:10px;">
<el-table-column label="类别名称" align="left" prop="class_name" />
<el-table-column label="Accuracy(准确度)" align="left" prop="accuracy" />
<el-table-column label="Precision(精准度)" align="left" prop="precision" />
<el-table-column label="Precision(精确度)" align="left" prop="precision" />
<el-table-column label="Recall(召回率)" align="left" prop="recall" />
<el-table-column label="F1-score" align="left" prop="f1_score" />
<el-table-column label="AP" align="left" prop="ap" />
@ -59,13 +58,9 @@
<el-table-column label="系统延迟时间" align="left" prop="system_delay" />
</el-table>
<div class="print-page"></div>
<el-row class="report-chart1" style="margin-top:20px;" :key="info.elPrint" :style="info.isPrint?'width:18cm;':''">
<el-col :span="info.isPrint || it.classes.length>20 ? 24 : 12">
<charts :id="'reportChart1-' + idx" width="100%" :height="calcChartHeight(it)"
:render="opt => renderChart1(it, 'roc')"></charts>
</el-col>
<div :class=" info.isPrint && it.classes.length>20?'print-page':''"></div>
<el-col :span="info.isPrint || it.classes.length>20 ? 24 : 12">
<el-row class="report-chart1" style="margin-top:20px;" :key="info.elPrint"
:style="info.isPrint ? 'width:18cm;' : ''">
<el-col :span="info.isPrint || it.classes.length > 20 ? 24 : 24">
<charts :id="'reportChart2-' + idx" width="100%" :height="calcChartHeight(it)"
:render="opt => renderChart1(it, 'rp')"></charts>
</el-col>
@ -75,10 +70,9 @@
<el-table :data="it.targets" stripe style="margin-top:10px;">
<el-table-column label="目标序号" align="left" prop="index" />
<el-table-column label="IDSW" align="left" prop="idsw" />
<el-table-column label="TM(跟踪次数)" align="left" prop="mt" />
<el-table-column label="ML(丢失次数)" align="left" prop="ml" />
<el-table-column label="TM(跟踪轨迹)" align="left" prop="mt" />
<el-table-column label="ML(丢失轨迹)" align="left" prop="ml" />
<el-table-column label="FM(打断次数)" align="left" prop="fm" />
<el-table-column label="IDF1" align="left" prop="idf1" />
</el-table>
<div class="info-thresholds" style="margin-top: 10px;line-height: 24px;">
<div> <span>MOTA跟踪准确度</span>
@ -98,12 +92,46 @@
<template v-if="info.robustness && info.robustness.length > 0">
<div class="sub-title">鲁棒性评估报告</div>
<el-table :data="info.robustness" stripe style="margin-top:10px;">
<el-table-column label="数据集1名称" align="left" prop="data1" />
<el-table-column label="数据集1的mAP" align="left" prop="data1_map" />
<el-table-column label="数据集2名称" align="left" prop="data2" />
<el-table-column label="数据集2的mAP" align="left" prop="data2_map" />
<el-table-column label="mAP下降率" align="left" prop="map_decrease" />
<el-table-column type="index" width="80" label="序号" />
<el-table-column label="模型名称" align="left" prop="model_name" />
<el-table-column label="数据集名称" align="left" prop="database_name" />
<el-table-column label="Micro F1" align="left" prop="micro_f1" />
<el-table-column label="Macro F1" align="left" prop="macro_f1" />
<el-table-column label="加权F1-Score" align="left" prop="weight_f1" />
<el-table-column label="mAP" align="left" prop="map" />
<el-table-column label="平均推理时间" align="left" prop="inference_time" />
<el-table-column label="mAP变化率" align="left">
<template #default="scope">
{{ scope.$index == 0 ? '----' : info.robustnessMapDecrease + '%' }}
</template>
</el-table-column>
</el-table>
<div style="margin-top:20px;">
<charts id="reportChart3-robustness" width="100%" height="400px" :render="renderChar3">
</charts>
</div>
</template>
<template v-if="info.horizontal_comparison && info.horizontal_comparison.length>0">
<div class="sub-title">硬件横向对比评估报告</div>
<el-table :data="info.horizontal_comparison" stripe style="margin-top:10px;">
<el-table-column type="index" width="80" label="序号" />
<el-table-column label="设备名称" align="left" prop="model_name" />
<el-table-column label="设备处理器" align="left" prop="database_name" />
<el-table-column label="Micro F1" align="left" prop="micro_f1" />
<el-table-column label="Macro F1" align="left" prop="macro_f1" />
<el-table-column label="加权F1-Score" align="left" prop="weight_f1" />
<el-table-column label="mAP" align="left" prop="map" />
<el-table-column label="平均推理时间" align="left" prop="inference_time" />
<el-table-column label="mAP变化率" align="left">
<template #default="scope">
{{ scope.$index == 0 ? '----' : info.robustnessMapDecrease + '%' }}
</template>
</el-table-column>
</el-table>
<div style="margin-top:20px;">
<charts id="reportChart3-comparison" width="100%" height="400px" :render="renderChar4">
</charts>
</div>
</template>
</div>
@ -131,14 +159,16 @@ const info = reactive({
tasks: [],
reportType: '',
robustness: [],
robustnessMapDecrease: '',
horizontal_comparison:[],
isPrint: false,
elPrint: 0,
})
const loading=ref(false)
const calcChartHeight=it=>{
let tmp=it.classes.length<=20?'400px':((it.classes.length/10-2)*40+400+'px');
if(info.isPrint){
tmp=it.classes.length<=20?'400px':((it.classes.length/5-2)*30+400+'px');
const loading = ref(false)
const calcChartHeight = it => {
let tmp = it.classes.length <= 20 ? '400px' : ((it.classes.length / 10 - 2) * 40 + 400 + 'px');
if (info.isPrint) {
tmp = it.classes.length <= 20 ? '400px' : ((it.classes.length / 5 - 2) * 30 + 400 + 'px');
}
return tmp;
}
@ -162,19 +192,19 @@ const doExport = async () => {
function goBack() {
router.push({ path: "/simulationEvaluation/reportList" });
}
function doPrint() {
function doPrint() {
document.querySelector("html").classList.add("report-print");
info.isPrint = true;
info.elPrint++;
loading.value=true;
setTimeout(() => {
loading.value=false;
setTimeout(()=>{
loading.value = true;
setTimeout(() => {
loading.value = false;
setTimeout(() => {
window.print();
document.querySelector("html").classList.remove("report-print");
info.isPrint = false;
info.elPrint++;
},100);
}, 100);
}, 2000);
}
@ -196,10 +226,114 @@ const doDelete = () => {
});
}
//
function renderChar4(){
let datas = info.horizontal_comparison;
let maxTime = 0;
let seriesData = [];
datas.forEach(d => {
if (d.inference_time > maxTime) {
maxTime = d.inference_time;
}
seriesData.push({
name: d.database_name,
value: [d.micro_f1, d.macro_f1, d.weight_f1, d.map, d.inference_time]
})
});
let opt = {
title: {
text: '硬件横向对比评估图'
},
legend: {
x: 'center',
data: datas.map(d => d.database_name)
},
tooltip: {
trigger: 'axis'
},
calculable: true,
polar: [
{
indicator: [
{ text: 'Micro F1', max: 1 },
{ text: 'Macro F1', max: 1 },
{ text: '加权F1-Score', max: 1 },
{ text: 'mAP', max: 1 },
{ text: '平均推理时间', max: maxTime }
],
radius: 130
}
],
series: [{
type: 'radar',
itemStyle: {
normal: {
areaStyle: {
type: 'default'
}
}
},
data: seriesData
}]
}
return opt;
}
//
function renderChar3() {
let datas = info.robustness;
let maxTime = 0;
let seriesData = [];
datas.forEach(d => {
if (d.inference_time > maxTime) {
maxTime = d.inference_time;
}
seriesData.push({
name: d.database_name,
value: [d.micro_f1, d.macro_f1, d.weight_f1, d.map, d.inference_time]
})
});
let opt = {
title: {
text: '鲁棒性评估图'
},
legend: {
x: 'center',
data: datas.map(d => d.database_name)
},
tooltip: {
trigger: 'axis'
},
calculable: true,
polar: [
{
indicator: [
{ text: 'Micro F1', max: 1 },
{ text: 'Macro F1', max: 1 },
{ text: '加权F1-Score', max: 1 },
{ text: 'mAP', max: 1 },
{ text: '平均推理时间', max: maxTime }
],
radius: 130
}
],
series: [{
type: 'radar',
itemStyle: {
normal: {
areaStyle: {
type: 'default'
}
}
},
data: seriesData
}]
}
return opt;
}
function renderChart1(data, type) {
let chartInfo = data.chartsInfo
let gridTop=info.isPrint?20*(data.classes.length/5):20*(data.classes.length/10);
let gridTop = info.isPrint ? 20 * (data.classes.length / 5) : 20 * (data.classes.length / 10);
let opt = {
legend: {
left: '10%', right: '20%',
@ -208,7 +342,7 @@ function renderChart1(data, type) {
grid: { top: gridTop, },
xAxis: [{
type: 'category', // type
data: ['0.0', '0.1', '0.2', '0.3', '0.4', '0.5', '0.6', '0.7', "0.8", "0.9", "1.0"], // x
data: chartInfo.labels, // x
}],
yAxis: [{
type: 'value',
@ -235,18 +369,20 @@ function initTaskChart(it) {
let rocs = [];
let rps = [];
let names = [];
let labels = [];
let classes = it.classes || [];
classes.forEach(d => {
labels = classes.length > 0 ? classes[0].pr.map(it => it[0]) : [];
classes.forEach(d => {
rocs.push({
name: d.class_name, data: d.roc, type: 'line'
});
rps.push({
name: d.class_name, data: d.pr, type: 'line'
name: d.class_name, data: d.pr.map(it => it[1]), type: 'line'
});
names.push(d.class_name)
});
return {
rocs, rps, names
rocs, rps, names, labels
}
}
function loadData() {
@ -270,8 +406,11 @@ function loadData() {
}
return it;
});
let obj = info.report?.report_data?.robustness || null
info.robustness = obj ? [obj] : []
let obj = info.report?.report_data?.robustness?.tasks || null
info.robustness = (obj ? obj : []);
info.robustnessMapDecrease = info.report?.report_data?.robustness?.map_decrease;
info.horizontal_comparison=info.report?.report_data?.horizontal_comparison
});
}
onMounted(loadData);

View File

@ -40,7 +40,7 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
"@": pathSrc,
},
},
base: "/ai/",
base: "./",
css: {
// CSS 预处理器
preprocessorOptions: {