Procházet zdrojové kódy

[bug] 前端相关名称修改

zishang před 1 týdnem
rodič
revize
2a784fb49b

+ 5 - 5
src/views/modules/alg/alg-update.vue

@@ -1,9 +1,9 @@
 <template>
-  <el-dialog :title=" '修改算法信息'" :close-on-click-modal="false" :visible.sync="visible" :before-close="cleanFileList">
+  <el-dialog :title=" '修改策略信息'" :close-on-click-modal="false" :visible.sync="visible" :before-close="cleanFileList">
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
       label-width="80px" >
-      <el-form-item label="算法名称" prop="algorithmName">
-        <el-input v-model="dataForm.algorithmName" placeholder="请输入算法名称"></el-input>
+      <el-form-item label="策略名称" prop="algorithmName">
+        <el-input v-model="dataForm.algorithmName" placeholder="请输入策略名称"></el-input>
       </el-form-item>
       <el-form-item label="类别" size="mini" prop="categoryId">
         <el-radio-group v-model="dataForm.categoryId">
@@ -45,7 +45,7 @@ export default {
       fileList: [],
       dataRule: {
         algorithmName: [
-          { required: true, message: "算法名不能为空", trigger: "blur" },
+          { required: true, message: "策略名不能为空", trigger: "blur" },
         ],
 
       },
@@ -102,7 +102,7 @@ export default {
       this.$refs["dataForm"].validate((valid) => {
         if (valid) {
           this.visible=false;
-          MessageBox.confirm(`是否修改算法信息?`, '提示', {
+          MessageBox.confirm(`是否修改策略信息?`, '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'

+ 3 - 3
src/views/modules/alg/alg-watch.vue

@@ -1,9 +1,9 @@
 <template>
-  <el-dialog :title=" '查看算法'" :close-on-click-modal="false" :visible.sync="visible" :before-close="cleanFileList">
+  <el-dialog :title=" '查看策略'" :close-on-click-modal="false" :visible.sync="visible" :before-close="cleanFileList">
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
       label-width="80px" :disabled=true>
-      <el-form-item label="算法名称" prop="algorithmName">
-        <el-input v-model="dataForm.algorithmName" placeholder="请输入算法名称"></el-input>
+      <el-form-item label="策略名称" prop="algorithmName">
+        <el-input v-model="dataForm.algorithmName" placeholder="请输入策略名称"></el-input>
       </el-form-item>
       <el-form-item label="类别" size="mini" prop="categoryId">
         <el-radio-group v-model="dataForm.categoryId">

+ 23 - 23
src/views/modules/alg/algcreate2.vue

@@ -3,8 +3,8 @@
   <div class=''>
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/alg-algs'}">算法管理</el-breadcrumb-item>
-      <el-breadcrumb-item>新建算法</el-breadcrumb-item>
+      <el-breadcrumb-item :to="{ path: '/alg-algs'}">策略配置</el-breadcrumb-item>
+      <el-breadcrumb-item>新建策略</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>
 
@@ -12,8 +12,8 @@
       <el-tab-pane label="基本信息" name="first">
 
         <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="180px">
-          <el-form-item label="算法名称" prop="algorithmName">
-            <el-input v-model="dataForm.algorithmName" placeholder="请输入算法名称"></el-input>
+          <el-form-item label="策略名称" prop="algorithmName">
+            <el-input v-model="dataForm.algorithmName" placeholder="请输入策略名称"></el-input>
           </el-form-item>
 
           <el-form-item label="类别" prop="categoryId">
@@ -82,16 +82,16 @@
               </el-upload>
             </el-form-item>
           </div>
-<!--          <el-form-item>-->
-<!--            <el-link :underline="false" @click="importAlg" type="primary">引入算法与算法模板</el-link>-->
-<!--          </el-form-item>-->
-<!--          <div class="block" v-if="importVisible">-->
-<!--            <el-form-item label="选择算法:">-->
-<!--              <el-select v-model="value2" multiple placeholder="选择算法">-->
-<!--                <el-option v-for="item in algOptions" :key="item.modelId" :label="item.modelName" :value="item.modelId">-->
-<!--                </el-option>-->
-<!--              </el-select>-->
-<!--            </el-form-item>-->
+          <el-form-item>
+            <el-link :underline="false" @click="importAlg" type="primary">引入算法</el-link>
+          </el-form-item>
+          <div class="block" v-if="importVisible">
+            <el-form-item label="选择算法:">
+              <el-select v-model="value2" multiple placeholder="选择算法">
+                <el-option v-for="item in algOptions" :key="item.modelId" :label="item.modelName" :value="item.modelId">
+                </el-option>
+              </el-select>
+            </el-form-item>
 
 <!--            <el-form-item label="选择模板:">-->
 <!--              <el-select v-model="value3" multiple placeholder="选择模板">-->
@@ -99,7 +99,7 @@
 <!--                </el-option>-->
 <!--              </el-select>-->
 <!--            </el-form-item>-->
-<!--          </div>-->
+          </div>
 
 
 
@@ -113,8 +113,8 @@
       <el-tab-pane label="完成" name="fourth">
 
         <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="180px" :disabled="true">
-          <el-form-item label="算法名称" prop="algorithmName">
-            <el-input v-model="dataForm.algorithmName" placeholder="请输入传统算法名称"></el-input>
+          <el-form-item label="策略名称" prop="algorithmName">
+            <el-input v-model="dataForm.algorithmName" placeholder="请输入策略名称"></el-input>
           </el-form-item>
 
           <el-form-item label="类别" prop="categoryId">
@@ -166,12 +166,12 @@
             </el-upload>
           </el-form-item>
 
-<!--          <el-form-item label="选择算法:">-->
-<!--            <el-select v-model="value2" multiple placeholder="选择算法">-->
-<!--              <el-option v-for="item in algOptions" :key="item.modelId" :label="item.modelName" :value="item.modelId">-->
-<!--              </el-option>-->
-<!--            </el-select>-->
-<!--          </el-form-item>-->
+          <el-form-item label="选择算法:">
+            <el-select v-model="value2" multiple placeholder="选择算法">
+              <el-option v-for="item in algOptions" :key="item.modelId" :label="item.modelName" :value="item.modelId">
+              </el-option>
+            </el-select>
+          </el-form-item>
 
 <!--          <el-form-item label="选择模板:">-->
 <!--            <el-select v-model="value3" multiple placeholder="选择模板">-->

+ 6 - 6
src/views/modules/alg/algs.vue

@@ -3,18 +3,18 @@
   <div class=''>
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>算法部署</el-breadcrumb-item>
+      <el-breadcrumb-item>策略配置</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>
 
     <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
       <el-form-item>
-        <el-button v-if="isAuth('algs:save')" type="primary" @click="addHandle()">新建算法</el-button>
+        <el-button v-if="isAuth('algs:save')" type="primary" @click="addHandle()">新建策略</el-button>
         <el-button v-if="isAuth('algs:delete')" type="danger" @click="deleteHandle()"
           :disabled="dataListSelections.length <= 0">批量删除</el-button>
       </el-form-item>
       <el-form-item>
-        <el-input v-model="dataForm.algorithmName" placeholder="请输入算法名称" clearable
+        <el-input v-model="dataForm.algorithmName" placeholder="请输入策略名称" clearable
           @keyup.enter.native="pageIndex = 1;getDataList()"></el-input>
       </el-form-item>
       <el-form-item>
@@ -38,7 +38,7 @@
       </el-table-column> -->
       <el-table-column label="序号" header-align="center" align="center" width="80" type="index" :index='(index)=>{return (index+1) + (this.pageIndex-1)*this.pageSize}'> </el-table-column>
 
-      <el-table-column  prop="algorithmName" header-align="center" align="center" label="算法名称">
+      <el-table-column  prop="algorithmName" header-align="center" align="center" label="策略名称">
       </el-table-column>
       <el-table-column prop="categoryName" header-align="center" align="center" label="分类">
       </el-table-column>
@@ -50,7 +50,7 @@
         <template slot-scope="scope">
           <el-button v-if="isAuth('algs:list')" type="text" size="small" @click="userwatch(scope.row.algorithmId)">查看</el-button>
 <!--          <el-button v-if="scope.row.frameId !== -1" type="text" size="small" @click="versionsList(scope.row.algorithmId)">版本列表</el-button>-->
-          <el-button v-if="scope.row.frameId === -1" type="text" size="small" @click="traFileList(scope.row.algorithmId)">编辑传统算法文件</el-button>
+          <el-button v-if="scope.row.frameId === -1" type="text" size="small" @click="traFileList(scope.row.algorithmId)">编辑传统策略文件</el-button>
           <!-- <el-button v-if="scope.row.frameId === -1" type="text" size="small" @click="getAlgParameter(scope.row.algorithmId)">参数
           </el-button> -->
           <el-button v-if="isAuth('algs:update')" type="text" size="small" @click="updateHandle(scope.row.algorithmId)">修改</el-button>
@@ -245,7 +245,7 @@ export default {
             return item.algorithmId;
           });
       MessageBox.confirm(
-        `确定对[id=${algorithmId.join(",")}]的算法进行[${id ? "删除" : "批量删除"}]操作?`,
+        `确定对[id=${algorithmId.join(",")}]的策略进行[${id ? "删除" : "批量删除"}]操作?`,
         "提示",
         {
           confirmButtonText: "确定",

+ 15 - 3
src/views/modules/alg/models-add-or-update.vue

@@ -1,9 +1,9 @@
 <template>
-  <el-dialog :title="!dataForm.id ? '新增模板' : '修改模板'" :close-on-click-modal="false" :visible.sync="visible">
+  <el-dialog :title="!dataForm.id ? '新增算法' : '修改算法'" :close-on-click-modal="false" :visible.sync="visible">
     <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
       label-width="100px">
-      <el-form-item label="模板名称" prop="modelName">
-        <el-input v-model="dataForm.modelName" placeholder="请输入模板名称"></el-input>
+      <el-form-item label="算法名称" prop="modelName">
+        <el-input v-model="dataForm.modelName" placeholder="请输入算法名称"></el-input>
       </el-form-item>
       <el-form-item label="类别" size="mini" prop="categoryId">
         <el-radio-group v-model="dataForm.categoryId">
@@ -82,6 +82,18 @@ export default {
         {
           label:"抗干扰算法",
           value:2
+        },
+        {
+          label:"评估算法",
+          value:3
+        },
+        {
+          label:"深度学习算法",
+          value:4
+        },
+        {
+          label:"强化学习算法",
+          value:5
         }
       ],
       dataRule: {

+ 2 - 2
src/views/modules/alg/models.vue

@@ -3,7 +3,7 @@
   <div class=''>
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>算法库管理</el-breadcrumb-item>
+      <el-breadcrumb-item>算法部署</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>
 
@@ -50,7 +50,7 @@
       </el-table-column> -->
       <el-table-column label="序号" header-align="center" align="center" width="80" type="index" :index='(index)=>{return (index+1) + (this.pageIndex-1)*this.pageSize}'> </el-table-column>
 
-      <el-table-column prop="modelName" header-align="center" align="center" label="模型名称">
+      <el-table-column prop="modelName" header-align="center" align="center" label="算法名称">
       </el-table-column>
       <el-table-column prop="categoryName" header-align="center" align="center" label="分类">
       </el-table-column>

+ 35 - 17
src/views/modules/alg/train-create.vue

@@ -3,8 +3,8 @@
   <div class='' v-loading="loading" element-loading-text="正在创建策略">
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/alg-train'}">策略配置</el-breadcrumb-item>
-      <el-breadcrumb-item>新建策略</el-breadcrumb-item>
+      <el-breadcrumb-item :to="{ path: '/alg-train'}">算法调用</el-breadcrumb-item>
+      <el-breadcrumb-item>新建算法任务</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>
 
@@ -13,19 +13,23 @@
 
         <el-form :model="dataForm" ref="dataForm" label-width="180px">
 
-          <el-form-item label="策略名称" prop="missName">
-            <el-input v-model="dataForm.missName" placeholder="请输入策略名称" @change="missNameChange()"></el-input>
+          <el-form-item label="平台id" prop="platformId">
+            <el-input v-model="dataForm.platformId" placeholder="请输入平台id" @change="platformIdChange()"></el-input>
           </el-form-item>
 
-          <el-form-item label="选择类别" prop="calssSelected">
+          <el-form-item label="算法任务名称" prop="missName">
+            <el-input v-model="dataForm.missName" placeholder="请输入算法任务名称" @change="missNameChange()"></el-input>
+          </el-form-item>
+
+          <el-form-item label="选择策略类别" prop="calssSelected">
             <el-select v-model="dataForm.calssSelected" placeholder="选择类别" @change="getAlgs()">
               <el-option v-for="data in classification" :key="data.categoryName" :label="data.categoryName" :value="data.categoryName">
               </el-option>
             </el-select>
           </el-form-item>
 
-          <el-form-item label="选择算法" prop="algSelected">
-            <el-select v-model="dataForm.algSelected" placeholder="选择算法" @change="getVersions()">
+          <el-form-item label="选择策略" prop="algSelected">
+            <el-select v-model="dataForm.algSelected" placeholder="选择策略" @change="getVersions()">
               <el-option v-for="data in algs" :key="data.algorithmId" :label="data.algorithmName" :value="data.algorithmId">
               </el-option>
             </el-select>
@@ -86,19 +90,23 @@
 
         <el-form :model="dataForm" :rules="dataRule" ref="dataForm" label-width="180px" :disabled="true">
 
-          <el-form-item label="策略任务名称" prop="missName">
-            <el-input v-model="dataForm.missName" placeholder="请输入策略任务名称"></el-input>
+          <el-form-item label="平台id" prop="platformId">
+            <el-input v-model="dataForm.platformId" placeholder="请输入平台id"></el-input>
+          </el-form-item>
+
+          <el-form-item label="算法任务名称" prop="missName">
+            <el-input v-model="dataForm.missName" placeholder="请输入算法任务名称"></el-input>
           </el-form-item>
 
-          <el-form-item label="选择类别" prop="calssSelected">
-            <el-select v-model="dataForm.calssSelected" placeholder="选择类别">
+          <el-form-item label="选择策略类别" prop="calssSelected">
+            <el-select v-model="dataForm.calssSelected" placeholder="选择策略类别">
               <el-option v-for="data in classification" :key="data.categoryName" :label="data.categoryName" :value="data.categoryName">
               </el-option>
             </el-select>
           </el-form-item>
 
-          <el-form-item label="选择算法" prop="algSelected">
-            <el-select v-model="dataForm.algSelected" placeholder="选择算法">
+          <el-form-item label="选择策略" prop="algSelected">
+            <el-select v-model="dataForm.algSelected" placeholder="选择策略">
               <el-option v-for="data in algs" :key="data.algorithmId" :label="data.algorithmName" :value="data.algorithmId">
               </el-option>
             </el-select>
@@ -224,6 +232,7 @@ export default {
         algSelected: null,
         versionSelected:null,
         memorySelected:null,
+        platformId: null,
       },
       textarea2: "",
       dataRule: {
@@ -245,6 +254,9 @@ export default {
         fileSelected: [
           { required: true, message: "主运行文件不能为空", trigger: "blur" },
         ],
+        platformId: [
+          { required: true, message: "平台id不能为空", trigger: "blur" },
+        ],
       },
 
     };
@@ -253,6 +265,7 @@ export default {
     init() {
       this.activeName="first";
       this.dataForm.missName='';
+      this.dataForm.platformId = null;
       this.dataForm.algSelected=null;
       this.dataForm.versionSelected=null;
       this.dataForm.calssSelected=null,
@@ -308,7 +321,8 @@ export default {
               versionId:this.dataForm.versionSelected,
               fileSelected:this.dataForm.fileSelected,
               memory:this.dataForm.memorySelected,
-              setCpus:cpus
+              setCpus:cpus,
+              platformId:this.dataForm.platformId,
             }),
           }).then(({ data }) => {
             if (data && data.code === 0) {
@@ -318,13 +332,13 @@ export default {
                 duration: 1500,
                 onClose: () => {
                   this.visible = false;
-                },
+                }
               });
-              this.loading=false;
-              this.$router.replace({ path: "/alg-train" });
             } else {
               Message.error(data.msg);
             }
+            this.loading=false;
+            this.$router.replace({ path: "/alg-train" });
           });
         }
       });
@@ -406,6 +420,10 @@ export default {
     missNameChange(){
       this.$refs["dataForm"].validate();
     },
+    //当平台id改变时,对表单进行验证
+    platformIdChange(){
+      this.$refs["dataForm"].validate();
+    },
     //当选择的文件改变时,对表单进行验证
     fileChange(){
       this.$refs["dataForm"].validate();

+ 1 - 1
src/views/modules/alg/train-watch.vue

@@ -3,7 +3,7 @@
   <div class=''>
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/alg-train'}">策略配置</el-breadcrumb-item>
+      <el-breadcrumb-item :to="{ path: '/alg-train'}">算法调用</el-breadcrumb-item>
       <el-breadcrumb-item>查看算法调用结果</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>

+ 22 - 18
src/views/modules/alg/train.vue

@@ -3,16 +3,16 @@
   <div class='' v-loading="loading" element-loading-text="正在处理">
     <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-      <el-breadcrumb-item>策略配置</el-breadcrumb-item>
+      <el-breadcrumb-item>算法调用</el-breadcrumb-item>
     </el-breadcrumb>
     <el-divider class="divi"></el-divider>
 
-    <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList2()">
       <el-form-item>
-        <el-button v-if="isAuth('train:save')" type="primary" @click="addHandle()">新建策略</el-button>
+        <el-button v-if="isAuth('train:save')" type="primary" @click="addHandle()">新建算法任务</el-button>
       </el-form-item>
       <el-form-item>
-        <el-input v-model="dataForm.missName" placeholder="请输入策略名称" clearable
+        <el-input v-model="dataForm.missName" placeholder="请输入算法任务名称" clearable
           @keyup.enter.native="pageIndex = 1;getDataList()"></el-input>
       </el-form-item>
       <el-form-item>
@@ -21,7 +21,7 @@
       <el-form-item>
         <el-tag>筛选:</el-tag>
         <el-select v-model="classificationtag" clearable placeholder="类别" size="mini" style="width: 130px;"
-          @change="pageIndex = 1;getDataList2()">
+          @change="pageIndex = 1;getDataList()">
           <el-option v-for="data in classification" :key="data" :label="data" :value="data">
           </el-option>
         </el-select>
@@ -41,13 +41,15 @@
       <!-- <el-table-column prop="algorithmTrainingId" header-align="center" align="center" width="80" label="任务ID">
       </el-table-column> -->
       <el-table-column label="序号" header-align="center" align="center" width="80" type="index" :index='(index)=>{return (index+1) + (this.pageIndex-1)*this.pageSize}'> </el-table-column>
-
-      <el-table-column prop="missName" header-align="center" align="center" label="策略名称"></el-table-column>
-      <el-table-column prop="algFrameId" header-align="center" align="center" label="算法类别">
+      <el-table-column prop="platformId" header-align="center" align="center" label="平台名称"></el-table-column>
+      <el-table-column prop="missName" header-align="center" align="center" label="任务名称"></el-table-column>
+      <el-table-column prop="algFrameId" header-align="center" align="center" label="策略类别">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.categoryId === 1" size="small">抗干扰算法</el-tag>
           <el-tag v-if="scope.row.categoryId === 2" size="small">干扰算法</el-tag>
           <el-tag v-if="scope.row.categoryId === 3" size="small">评估算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 4" size="small">深度学习算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 5" size="small">强化学习算法</el-tag>
         </template>
       </el-table-column>
 <!--      <el-table-column prop="categoryName" header-align="center" align="center" label="分类"></el-table-column>-->
@@ -164,10 +166,11 @@ export default {
     Publish,
     SelectAlgPara
   },
-
   activated() {
+    this.getDataList2();
     this.getDataList();
-    this.startPolling(); // 进入页面时启动轮询
+    this.startPolling();
+
     //定时器
     /* this.timer=window.setInterval(()=>{
       setTimeout(()=>{
@@ -179,14 +182,14 @@ export default {
   },
   //切换路由时,清除定时器
   beforeRouteLeave(to, from, next){
-    next();
     if (this.timer) {
       clearInterval(this.timer);
       this.timer = null;
     }
+    next(); // 一定要在最后调用 next()
   },
   deactivated() {
-    this.stopPolling(); // 离开页面时停止轮询
+    this.stopPolling();
   },
   methods: {
     // startInterval() {
@@ -209,7 +212,7 @@ export default {
     // },
     startPolling() {
       this.pollingInterval = setInterval(() => {
-        this.getDataList();
+        this.getDataList2();
       }, 5000); // 每 5 秒请求一次
     },
 
@@ -242,6 +245,7 @@ export default {
       }).then(({ data }) => {
         if (data && data.code === 0) {
           this.dataList = data.page.list;
+          this.dataList = data.page.list.filter(item => item.missStatus === 3);
           this.totalPage = data.page.totalCount;
           this.statusunique = this.unique(data.page.list);
         } else {
@@ -265,7 +269,7 @@ export default {
           limit: this.pageSize,
           missName: this.dataForm.missName,
           classificationtag: this.classificationtag,
-          missStatus: this.missStatus
+          missStatus: 3
         }),
       }).then(({ data }) => {
         if (data && data.code === 0) {
@@ -372,12 +376,12 @@ export default {
     sizeChangeHandle(val) {
       this.pageSize = val;
       this.pageIndex = 1;
-      this.getDataList();
+      this.getDataList2();
     },
     // 当前页
     currentChangeHandle(val) {
       this.pageIndex = val;
-      this.getDataList();
+      this.getDataList2();
     },
     // 多选
     selectionChangeHandle(val) {
@@ -632,7 +636,7 @@ export default {
                 },
               });
               this.pageIndex = 1;
-              getDataList();
+              this.getDataList();
             } else {
               Message.error(data.msg);
             }
@@ -642,7 +646,7 @@ export default {
     },
     //处理删除任务
     deleteMissHandle(id) {
-      MessageBox.confirm('此操作将删除该策略, 是否继续?', '提示', {
+      MessageBox.confirm('此操作将删除该算法任务, 是否继续?', '提示', {
           confirmButtonText: '确定',
           cancelButtonText: '取消',
           type: 'warning'

+ 706 - 0
src/views/modules/alg/train2.vue

@@ -0,0 +1,706 @@
+<!--  -->
+<template>
+  <div class='' v-loading="loading" element-loading-text="正在处理">
+    <el-breadcrumb class="divi2" separator-class="el-icon-arrow-right">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>算法调用</el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider class="divi"></el-divider>
+
+    <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
+      <el-form-item>
+        <el-button v-if="isAuth('train:save')" type="primary" @click="addHandle()">新建算法任务</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-input v-model="dataForm.missName" placeholder="请输入算法任务名称" clearable
+                  @keyup.enter.native="pageIndex = 1;getDataList()"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="pageIndex = 1;getDataList()">查询</el-button>
+      </el-form-item>
+      <el-form-item>
+        <el-tag>筛选:</el-tag>
+        <el-select v-model="classificationtag" clearable placeholder="类别" size="mini" style="width: 130px;"
+                   @change="pageIndex = 1;getDataList2()">
+          <el-option v-for="data in classification" :key="data" :label="data" :value="data">
+          </el-option>
+        </el-select>
+
+      </el-form-item>
+      <el-form-item>
+        <!--        <el-button @click="algorithmTrainCompare()">任务对比</el-button>-->
+      </el-form-item>
+
+
+    </el-form>
+
+    <el-table :data="dataList" border v-loading="dataListLoading" @selection-change="selectionChangeHandle"
+              style="width: 100%;">
+      <!-- 不允许多选 -->
+      <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
+      <!-- <el-table-column prop="algorithmTrainingId" header-align="center" align="center" width="80" label="任务ID">
+      </el-table-column> -->
+      <el-table-column label="序号" header-align="center" align="center" width="80" type="index" :index='(index)=>{return (index+1) + (this.pageIndex-1)*this.pageSize}'> </el-table-column>
+      <el-table-column prop="platformId" header-align="center" align="center" label="平台名称"></el-table-column>
+      <el-table-column prop="missName" header-align="center" align="center" label="任务名称"></el-table-column>
+      <el-table-column prop="algFrameId" header-align="center" align="center" label="策略类别">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.categoryId === 1" size="small">抗干扰算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 2" size="small">干扰算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 3" size="small">评估算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 4" size="small">深度学习算法</el-tag>
+          <el-tag v-if="scope.row.categoryId === 5" size="small">强化学习算法</el-tag>
+        </template>
+      </el-table-column>
+      <!--      <el-table-column prop="categoryName" header-align="center" align="center" label="分类"></el-table-column>-->
+      <el-table-column prop="username" header-align="center" align="center" label="创建人"></el-table-column>
+      <el-table-column prop="missStatus" header-align="center" align="center" label="状态">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.missStatus === 0" size="small" type="danger">停止</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 1" size="small">待开始</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 2" size="small" type="success">运行中</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 4" size="small" type="success">已发布</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 5" size="small">已申请发布</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 6" size="small" type="danger">申请被驳回</el-tag>
+          <el-tag v-else-if="scope.row.missStatus === 7" size="small">暂停中</el-tag>
+          <el-tag v-else size="small" type="success">已结束</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column prop="missCreationTime" header-align="center" align="center" width="180" label="开始时间"
+                       :formatter="missCreationTimeFormat">
+      </el-table-column>
+      <el-table-column prop="missStopTime" header-align="center" align="center" width="180" label="停止时间"
+                       :formatter="missStopTimeFormat">
+      </el-table-column>
+      <el-table-column id="shua" prop="" header-align="center" align="center" width="300" label="用时"
+                       :formatter="timeUsedHandle">
+      </el-table-column>
+      <el-table-column prop="remark" header-align="center" align="center" width="180" label="备注">
+      </el-table-column>
+      <el-table-column fixed="right" header-align="center" align="center" width="300" label="操作">
+        <template slot-scope="scope">
+          <el-button v-if="isAuth('train:list')" type="text" size="small" :disabled="scope.row.missStatus==7?true:false"
+                     @click="watch(scope.row.algorithmTrainingId,scope.row.missStatus,scope.row.logFile)">
+            查看
+          </el-button>
+
+          <!-- <el-button type="text" size="small"
+            @click="install(scope.row.algorithmTrainingId)">安装</el-button> -->
+
+          <el-button v-if="isAuth('train:run')" type="text" size="small"
+                     @click="runtrain(scope.row.algorithmTrainingId,scope.row.algFrameId,scope.row.algorithmId)">{{ scope.row.hasRun !==null ? '再次运行' : '运行' }}</el-button>
+
+          <el-button v-if="isAuth('train:stop')" type="text" size="small" :disabled="scope.row.missStatus==2?false:true"
+                     @click="pauseHandle(scope.row.algorithmTrainingId)">暂停</el-button>
+
+          <el-button v-if="isAuth('train:rerun')" type="text" size="small" :disabled="scope.row.missStatus==7?false:true"
+                     @click="unpauseHandle(scope.row.algorithmTrainingId)">继续</el-button>
+
+          <el-button v-if="isAuth('train:publish')" type="text" size="small" :disabled="scope.row.missStatus==3?false:true"
+                     @click="publish(scope.row.algorithmTrainingId)">发布</el-button>
+
+          <el-button type="text" size="small" class="warningButton"
+                     @click="deleteMissHandle(scope.row.algorithmTrainingId)">删除</el-button>
+
+
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex"
+                   :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalPage"
+                   layout="total, sizes, prev, pager, next, jumper">
+    </el-pagination>
+    <!-- 弹窗, 新增 / 修改 -->
+    <TrainAdd v-if="addVisible" ref="addS"></TrainAdd>
+    <Publish v-if="publishVisible" ref="algPublish"></Publish>
+    <SelectAlgPara v-if="selectAlgParaVisibel" ref="selectAlgPara"></SelectAlgPara>
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+//例如:import 《组件名称》 from '《组件路径》';
+// import AddOrUpdate from "./dataset-add-or-update";
+// import Watch from "./dataset-watch";
+// import Add from "./dataset-add";
+
+// import Add from "./train-add";
+// import Add from "./train-add";
+// import TrainAdd from './train-add.vue';
+import TrainAdd from './train-add.vue';
+import Publish from "./alg-publish.vue"
+import SelectAlgPara from "./select-algpara.vue"
+import { MessageBox } from 'element-ui'
+import { Message } from "element-ui"
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  data() {
+    return {
+      loading:false,
+      timer:null,
+      logFile: "",
+      dataForm: {
+        missName: "",
+      },
+      // flag: 0,
+      // tempList: [],
+      dataList: [],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPage: 0,
+      dataListLoading: false,
+      dataListSelections: [],
+      addOrUpdateVisible: false,
+      newWatchVisible: false,
+      addVisible: false,
+      classificationtag: "",
+      missStatus: null,
+      classification: [],
+      publishVisible:false,
+      selectAlgParaVisibel:false,
+      pollingInterval: null, // 存储轮询的定时器
+    };
+  },
+  components: {
+    TrainAdd,
+    Publish,
+    SelectAlgPara
+  },
+  activated() {
+    this.getDataList();
+    this.startPolling();
+
+    //定时器
+    /* this.timer=window.setInterval(()=>{
+      setTimeout(()=>{
+        console.log("执行定时任务");
+        this.getDataList();
+      },0)
+    },1000); */
+
+  },
+  //切换路由时,清除定时器
+  beforeRouteLeave(to, from, next){
+    if (this.timer) {
+      clearInterval(this.timer);
+      this.timer = null;
+    }
+    next(); // 一定要在最后调用 next()
+  },
+  deactivated() {
+    this.stopPolling();
+  },
+  methods: {
+    // startInterval() {
+    //   setInterval(() => {
+
+    //     if(this.flag % 2){
+    //        this.dataList = [];
+    //       console.log(this.tempList);
+    //       console.log(this.dataList);
+    //       console.log("ok");
+    //     }else{
+    //       this.dataList = this.tempList;
+    //       console.log(this.tempList);
+    //       // this.dataListLoading = true;
+    //       console.log(this.dataList);
+    //       console.log("no");
+    //     }
+    //     this.flag = this.flag + 1;
+    //   }, 1000);
+    // },
+    startPolling() {
+      this.pollingInterval = setInterval(() => {
+        this.getDataList();
+      }, 5000); // 每 5 秒请求一次
+    },
+
+    stopPolling() {
+      if (this.pollingInterval) {
+        clearInterval(this.pollingInterval);
+        this.pollingInterval = null;
+      }
+    },
+    // 获取数据列表
+    getDataList() {
+      this.dataListLoading = true;
+      this.classificationtag = '';
+      this.missStatus = null;
+      this.$http({
+        url: this.$http.adornUrl("/category/select"),
+        method: "get",
+      }).then(({ data }) => {
+        this.classification = this.unique(data.list);
+      });
+
+      this.$http({
+        url: this.$http.adornUrl("/algstrain/list"),
+        method: "get",
+        params: this.$http.adornParams({
+          page: this.pageIndex,
+          limit: this.pageSize,
+          missName: this.dataForm.missName,
+        }),
+      }).then(({ data }) => {
+        if (data && data.code === 0) {
+          this.dataList = data.page.list;
+          this.totalPage = data.page.totalCount;
+          this.statusunique = this.unique(data.page.list);
+        } else {
+          this.dataList = [];
+          this.totalPage = 0;
+        }
+        this.dataListLoading = false;
+      });
+    },
+    //筛选查询
+    getDataList2() {
+      this.dataListLoading = true;
+      if(this.classificationtag===''){
+        this.classificationtag=null;
+      }
+      this.$http({
+        url: this.$http.adornUrl("/algstrain/list"),
+        method: "get",
+        params: this.$http.adornParams({
+          page: this.pageIndex,
+          limit: this.pageSize,
+          missName: this.dataForm.missName,
+          classificationtag: this.classificationtag,
+          missStatus: this.missStatus
+        }),
+      }).then(({ data }) => {
+        if (data && data.code === 0) {
+          this.dataList = data.page.list;
+          this.totalPage = data.page.totalCount;
+        } else {
+          this.dataList = [];
+          this.totalPage = 0;
+        }
+        this.dataListLoading = false;
+      });
+    },
+    timeFn(d1) {
+      //di作为一个变量传进来
+      //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
+      var dateBegin = new Date(d1.replace(/-/g, "/")); //将-转化为/,使用new Date
+      var dateEnd = new Date(); //获取当前时间
+      var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
+      var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
+      var leave1 = dateDiff % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
+      var hours = Math.floor(leave1 / (3600 * 1000)); //计算出小时数
+      //计算相差分钟数
+      var leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
+      var minutes = Math.floor(leave2 / (60 * 1000)); //计算相差分钟数
+      //计算相差秒数
+      var leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
+      var seconds = Math.round(leave3 / 1000);
+      console.log(
+        " 相差 " +
+        dayDiff +
+        "天 " +
+        hours +
+        "小时 " +
+        minutes +
+        " 分钟" +
+        seconds +
+        " 秒"
+      );
+      console.log(
+        dateDiff + "时间差的毫秒数",
+        dayDiff + "计算出相差天数",
+        leave1 + "计算天数后剩余的毫秒数",
+        hours + "计算出小时数",
+        minutes + "计算相差分钟数",
+        seconds + "计算相差秒数"
+      );
+      return (
+        dayDiff + "计算出相差天数",
+        hours + "计算出小时数",
+        minutes + "计算相差分钟数",
+        seconds + "计算相差秒数"
+      );
+    },
+
+    //通过开始时间计算用时
+    timeUsedHandle(row, column) {
+      if (row.missCreationTime === null || row.missStopTime === null) {
+        return "-";
+      } else {
+        const missCreationTime = new Date(row.missCreationTime);
+        const missStopTime = new Date(row.missStopTime);
+        const timeDifference = missStopTime - missCreationTime; // 差值为毫秒
+        if (!isNaN(timeDifference)) {
+          const seconds = Math.floor((timeDifference / 1000) % 60);
+          const minutes = Math.floor((timeDifference / (1000 * 60)) % 60);
+          const hours = Math.floor((timeDifference / (1000 * 60 * 60)) % 24);
+          const displayTime = `${hours}小时 ${minutes}分钟 ${seconds}秒`;
+          return displayTime;
+        } else {
+          return "时间差计算出错";
+        }
+      }
+    },
+    missCreationTimeFormat(row, column){
+      if (row.missCreationTime === null) {
+        return "-";
+      } else{
+        return row.missCreationTime;
+      }
+    },
+    missStopTimeFormat(row, column){
+      if (row.missStopTime === null) {
+        return "-";
+      } else{
+        return row.missStopTime;
+      }
+    },
+    missStatusHandle(row, column) {
+      if (row.missStatus === 0) {
+        return "停止";
+      } else {
+        return "正在运行";
+      }
+    },
+    //去重
+    unique(arr) {
+      var ss = [];
+      for (var i = 0; i < arr.length; i++) {
+        ss[i] = arr[i].categoryName;
+      }
+      return Array.from(new Set(ss));
+    },
+    // 每页数
+    sizeChangeHandle(val) {
+      this.pageSize = val;
+      this.pageIndex = 1;
+      this.getDataList();
+    },
+    // 当前页
+    currentChangeHandle(val) {
+      this.pageIndex = val;
+      this.getDataList();
+    },
+    // 多选
+    selectionChangeHandle(val) {
+      this.dataListSelections = val;
+    },
+    // 查看
+    watch(id,missStatus,logFile) {
+      /* this.newWatchVisible = true;
+      this.$nextTick(() => {
+        this.$refs.newWatch.init(id);
+      }); */
+      console.log("logFile",logFile);
+      this.$router.replace({ path: "/train-watch" ,query:{algorithmTrainingId:id,missStatus:missStatus,logFile:logFile} });
+
+    },
+    //保存tensorboard文件
+    saveTensorboardFile(id){
+      this.$http({
+        url:this.$http.adornUrl('/algstrain/saveTensorboardFile'),
+        method:'get',
+        params:this.$http.adornParams({
+          algorithmTrainingId:id
+        }),
+      }).then(({data})=>{
+
+
+      });
+    },
+    //对比两个训练任务的tensorboard图像
+    algorithmTrainCompare(){
+      if(this.dataListSelections.length<2){
+        Message.error('请选择两个算法任务进行对比');
+        return;
+      }
+      this.loading=true;
+      var algTrainIds=new Array();
+      for(var i=0;i<this.dataListSelections.length;i++){
+        algTrainIds[i]=this.dataListSelections[i].algorithmTrainingId;
+      }
+      console.log(algTrainIds);
+      this.$http({
+        url:this.$http.adornUrl('/algstrain/algorithmTrainCompare'),
+        method:'post',
+        data: this.$http.adornData(algTrainIds,false),
+      }).then(({data})=>{
+        if(data&&data.code===0){
+          this.loading=false;
+          this.$router.replace({ name: 'traincompare',query:{port:data.port,containerId:data.containerId} });
+        }else{
+          this.loading=false;
+          Message.error('对比失败');
+        }
+      });
+    },
+
+    //安装所上传的依赖包----------------------仅做测试,后续合并到其他方法后,需删除该方法
+    install(id){
+      this.$http({
+        url:this.$http.adornUrl('/algstrain/installWhl'),
+        method:'get',
+        params:this.$http.adornParams({
+          algorithmTrainingId:id
+        }),
+      }).then(({data})=>{
+        console.log("安装成功");
+      });
+    },
+
+    // 运行任务
+    runtrain(id,algFrameId,algorithmId) {
+      /* if(algFrameId!=-1){
+        this.$http({
+            url:this.$http.adornUrl('/algstrain/changeMissStatus'),
+            method:'get',
+            params:this.$http.adornParams({
+              algorithmTrainingId:id
+            }),
+          }).then(({data})=>{
+            this.getDataList();
+
+        });
+
+        this.$http({
+            url:this.$http.adornUrl('/algstrain/startTraining'),
+            method:'get',
+            params:this.$http.adornParams({
+              algorithmTrainingId:id
+            }),
+          }).then(({data})=>{
+              console.
+              this.logFile = data.logFile;
+        });
+      }else{
+        this.selectAlgParaVisibel=true;
+          this.$nextTick(() => {
+            this.$refs.selectAlgPara.init(id,algorithmId);
+          });
+      } */
+      MessageBox.confirm(`是否运行该算法任务?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$http({
+          url:this.$http.adornUrl('/algstrain/changeMissStatus'),
+          method:'get',
+          params:this.$http.adornParams({
+            algorithmTrainingId:id
+          }),
+        }).then(({data})=>{
+          this.getDataList();
+          console.log("this.dataList1111", this.dataList);
+          // this.dataList.forEach(item=>{
+          //   if (item.algorithmTrainingId === id) {
+          //     this.$set(item, 'missStopTime', '-'); // 确保 Vue 能捕捉到这个变化
+          //   }
+          // })
+          this.$http({
+            url:this.$http.adornUrl('/algstrain/startTraining'),
+            method:'get',
+            params:this.$http.adornParams({
+              algorithmTrainingId:id
+            }),
+          }).then(({data})=>{
+            if(data && data.code === 0){
+              console.log("data",data)
+              this.logFile = data.logFile;
+              Message({
+                type: 'success',
+                message: '运行成功',
+              });
+            } else {
+              Message.error(data.msg);
+            }
+            this.getDataList();
+          });
+        });
+      }).catch(() => {})
+
+
+
+
+
+
+    },
+    // 重新运行任务
+    reruntrain(id) {},
+    //算法发布
+    publish(id){
+      this.publishVisible=true;
+      this.$nextTick(()=>{
+        this.$refs.algPublish.init(id);
+      });
+    },
+
+    // 这里处理新建任务
+    addHandle() {
+      // this.addVisible = true;
+      this.$nextTick(() => {
+        this.$router.replace({ path: "/mission-create" });
+      });
+    },
+    //暂停训练任务
+    pauseHandle(id){
+      MessageBox.confirm('此操作将暂停该算法任务, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading=true;
+        this.$http({
+          url:this.$http.adornUrl('/algstrain/pauseMiss'),
+          method:'get',
+          params:this.$http.adornParams({
+            algorithmTrainingId:id
+          }),
+        }).then(({data})=>{
+          this.getDataList();
+          Message({
+            type: 'success',
+            message: '暂停成功'
+          });
+          this.loading=false;
+        });
+      }).catch(() => {
+        Message({
+          type: 'info',
+          message: '已取消暂停'
+        });
+      });
+    },
+
+    //恢复已暂停的训练任务
+    unpauseHandle(id){
+      MessageBox.confirm(`是否继续运行该算法任务?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading=true;
+        this.$http({
+          url:this.$http.adornUrl('/algstrain/unpauseMiss'),
+          method:'get',
+          params:this.$http.adornParams({
+            algorithmTrainingId:id
+          }),
+        }).then(({data})=>{
+          this.getDataList();
+          Message({
+            type: 'success',
+            message: '已继续运行'
+          });
+          this.loading=false;
+        });
+      }).catch(() => {})
+
+
+
+    },
+
+    // 处理停止任务
+    deleteHandle(id) {
+      var deleteHandle = id
+        ? [id]
+        : this.dataListSelections.map((item) => {
+          return item.deleteHandle;
+        });
+      MessageBox.confirm(
+        `确定对[id=${deleteHandle.join(",")}]进行[${
+          id ? "停止" : "批量停止"
+        }]操作?`,
+        "提示",
+        {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        }
+      )
+        .then(() => {
+          this.$http({
+            url: this.$http.adornUrl("/algs/delete"),
+            method: "post",
+            data: this.$http.adornData(deleteHandle, false),
+          }).then(({ data }) => {
+            if (data && data.code === 0) {
+              Message({
+                message: "操作成功",
+                type: "success",
+                duration: 1500,
+                onClose: () => {
+                  this.getDataList();
+                },
+              });
+              this.pageIndex = 1;
+              getDataList();
+            } else {
+              Message.error(data.msg);
+            }
+          });
+        })
+        .catch(() => {});
+    },
+    //处理删除任务
+    deleteMissHandle(id) {
+      MessageBox.confirm('此操作将删除该算法任务, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading=true;
+        this.$http({
+          url:this.$http.adornUrl('/algstrain/deleteById'),
+          method:'get',
+          params:this.$http.adornParams({
+            algorithmTrainingId:id
+          }),
+        }).then(({data})=>{
+          this.getDataList();
+          Message({
+            type: 'success',
+            message: '删除成功!'
+          });
+          this.loading=false;
+        });
+
+
+      }).catch(() => {
+        Message({
+          type: 'info',
+          message: '已取消删除'
+        });
+      });
+    },
+
+  },
+};
+</script>
+
+<style scoped>
+.divi {
+  display: block;
+  height: 1px;
+  width: 100%;
+  margin: 24px 0;
+  background-color: #dcdfe6;
+  position: relative;
+}
+.divi2 {
+  display: block;
+  height: 1px;
+  width: 100%;
+  position: relative;
+}
+.sele {
+  border: 1px solid #409eff;
+  border-radius: 5px;
+  box-sizing: border-box;
+  padding: 5px 0px;
+  margin: 10px;
+}
+.warningButton{
+  color: #F56C6C;
+}
+</style>