liuqiao 11 mesiacov pred
rodič
commit
e5ba0c5f91
2 zmenil súbory, kde vykonal 351 pridanie a 96 odobranie
  1. 348 94
      src/views/home.vue
  2. 3 2
      vite.config.ts

+ 348 - 94
src/views/home.vue

@@ -389,7 +389,7 @@
                 <div>
                   <!-- <div class="title2">GA遗传算法</div> -->
                   <el-form-item label="优化算法" :label-width="formLabelWidth1">
-                    <el-select   v-model="ys" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in yslist"
                               :key="item.value"
@@ -399,19 +399,19 @@
                           </el-select>
                   </el-form-item>
                        <el-form-item label="种群规模:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                    <el-input-number v-model="youhua.popsize" :min="1" :max="10" controls-position="right" />
                   </el-form-item>
-                  <el-form-item label="最大进化代数:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                  <el-form-item label="进化代数:" :label-width="formLabelWidth1">
+                    <el-input-number v-model="youhua.epoch" :min="1" :max="10" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="交叉概率:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                    <el-input-number v-model="youhua.probcrossover" :min="1" :max="10" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="变异概率:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                    <el-input-number v-model="youhua.probmut" :min="1" :max="10" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="交叉算子:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval2" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.proboperator" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist2"
                               :key="item.value"
@@ -421,10 +421,10 @@
                           </el-select>
                   </el-form-item>
                   <el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                    <el-input-number v-model="youhua.probscale" :min="1" :max="10" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval3" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.strategy" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist3"
                               :key="item.value"
@@ -434,7 +434,7 @@
                           </el-select>
                   </el-form-item>
                   <el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval4" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.operator" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist4"
                               :key="item.value"
@@ -443,7 +443,7 @@
                             </el-option>
                           </el-select>
                   </el-form-item>
-                  <el-form-item label="precision:" :label-width="formLabelWidth1">
+                  <!-- <el-form-item label="precision:" :label-width="formLabelWidth1">
                     <el-select   v-model="addval7" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist7"
@@ -452,9 +452,9 @@
                               :value="item.value">
                             </el-option>
                           </el-select>
-                  </el-form-item>
+                  </el-form-item> -->
                   <el-form-item label="GPU" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval8" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.gpu" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist8"
                               :key="item.value"
@@ -805,7 +805,7 @@
               <div class="numberinput lefttext">
                 <el-form >
                   <el-form-item label="优化算法:" :label-width="formLabelWidth1">
-                    <el-select   v-model="ys" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.algorithm" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in yslist"
                               :key="item.value"
@@ -815,19 +815,19 @@
                           </el-select>
                   </el-form-item>
                        <el-form-item label="种群规模:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :step="100" :min="1" :max="1000" controls-position="right" />
+                    <el-input-number v-model="youhua.popsize" :step="100" :min="0" :max="1000" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="迭代次数:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :step="100" :min="1" :max="1000" controls-position="right" />
+                    <el-input-number v-model="youhua.epoch" :step="100" :min="0" :max="1000" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="交叉概率:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num"  :step="0.1" :min="1" :max="1000" controls-position="right" />
+                    <el-input-number v-model="youhua.probcrossover"  :step="0.1" :min="0" :max="1000" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="变异概率:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num"  :step="0.1" :min="1" :max="1000" controls-position="right" />
+                    <el-input-number v-model="youhua.probmut"  :step="0.1" :min="0" :max="1000" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="交叉算子:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval2" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.proboperator" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist2"
                               :key="item.value"
@@ -837,10 +837,10 @@
                           </el-select>
                   </el-form-item>
                   <el-form-item label="竞赛规模:" :label-width="formLabelWidth1">
-                    <el-input-number v-model="num" :min="1" :max="10" controls-position="right" />
+                    <el-input-number v-model="youhua.probscale" :min="0" :max="100" controls-position="right" />
                   </el-form-item>
                   <el-form-item label="保留优选策略:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval3" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.strategy" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist3"
                               :key="item.value"
@@ -850,7 +850,7 @@
                           </el-select>
                   </el-form-item>
                   <el-form-item label="变异算子选择:" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval4" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.operator" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist4"
                               :key="item.value"
@@ -860,7 +860,7 @@
                           </el-select>
                   </el-form-item>
                   <el-form-item label="GPU" :label-width="formLabelWidth1">
-                    <el-select   v-model="addval8" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select   v-model="youhua.gpu" :suffix-icon="CaretBottom" placeholder="请选择">
                             <el-option
                               v-for="item in addlist8"
                               :key="item.value"
@@ -874,7 +874,7 @@
               <template #footer>
                 <div class="dialog-footer">
                   <el-button @click="dialog.jboptimizer = false">取消</el-button>
-                  <el-button type="primary" @click="dialog.jboptimizer = false">
+                  <el-button type="primary" @click="getaddsave(); dialog.jboptimizer = false">
                     确定
                   </el-button>
                 </div>
@@ -1066,7 +1066,7 @@
                <div class="footerTitle   el-tag--primary">
                 <div >
                   <span   v-for="(tab, index) in tabs"  :key="index" :class="{ 'active': activeIndex === index }"
-                  @click="activeIndex = index">{{ tab }}</span>
+                  @click="xxclick(index)">{{ tab }}</span>
                 </div>
                 <div>
                   <!-- <li
@@ -1096,7 +1096,7 @@
               <div class="youhualog" v-if="activeIndex==1">
                 <ul>
                   <li v-for="(tab, index) in listli"  :key="index" :class="{ 'active2': activeIndex2 === index }"
-                  @click="activeIndex2 = index">{{ tab }}</li>
+                  @click="issueclick(index)">{{ tab }}</li>
                 </ul>
                 <div  class="footer-content">
                 <div class="eldesign classtable" v-if="activeIndex2==0">
@@ -1112,14 +1112,14 @@
                     <el-input v-model="row.date" @change="handleEdit(row)" />
                   </template>
                 </el-table-column> -->
-                  <el-table-column prop="s1" label="上限值">
+                  <el-table-column prop="upper" label="上限值">
                     <template #default="{ row }">
-                    <el-input v-model.Number="row.s1"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
+                    <el-input type="text" v-model="row.upper"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
                   </template>
                 </el-table-column>
-                <el-table-column prop="x1" label="下限值">
+                <el-table-column prop="lower" label="下限值">
                   <template #default="{ row }">
-                    <el-input v-model.Number="row.x1"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
+                    <el-input v-model.Number="row.lower"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
                   </template>
                 </el-table-column>
                   <!-- <el-table-column prop="q" label="权重系数">
@@ -1127,14 +1127,14 @@
                     <el-input v-model="row.q" @change="handleEdit(row)" />
                   </template>
                 </el-table-column> -->
-                  <el-table-column prop="f" label="基准值" width="100">
+                  <el-table-column prop="reference" label="基准值" width="100">
                   <template #default="{ row }">
-                    <el-input v-model.Number="row.f"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
+                    <el-input v-model.Number="row.reference"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
                   </template>
                 </el-table-column>
-                <el-table-column prop="d" label="说明">
+                <el-table-column prop="remark" label="说明">
                     <template #default="{ row }">
-                    <el-input v-model="row.d" @change="handleEdit(row)" />
+                    <el-input v-model="row.remark" @change="handleEdit(row)" />
                   </template>
                 </el-table-column>
                 </el-table>
@@ -1156,14 +1156,14 @@
 
                   </template>
                 </el-table-column> -->
-                <el-table-column prop="address" label="约束名称">
+                <el-table-column prop="name" label="约束名称">
                         <template #default="{ row }">
                           <el-input v-model="row.name" @change="handleEdit(row)" />
                         </template>
                       </el-table-column>
-                      <el-table-column prop="name" label="约束关系"  >
+                      <el-table-column prop="con" label="约束关系"  >
                         <template v-slot="scope">
-                        <el-select class="no-border " v-model="scope.row.da"  :suffix-icon="CaretBottom" placeholder="请选择">
+                        <el-select class="no-border " v-model.number="scope.row.con"  :suffix-icon="CaretBottom" placeholder="请选择">
                               <el-option
                                 v-for="item in options3"
                                 :key="item.value"
@@ -1174,9 +1174,9 @@
 
                       </template>
                     </el-table-column>
-                      <el-table-column prop="address" label="约束基准值">
+                      <el-table-column prop="reference" label="约束基准值">
                         <template #default="{ row }">
-                          <el-input v-model.Number="row.address"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
+                          <el-input v-model.Number="row.reference"    oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
                         </template>
                       </el-table-column>
                     </el-table>
@@ -1208,9 +1208,9 @@
                           <el-input v-model="row.name"  />
                         </template>
                   </el-table-column>
-                  <el-table-column prop="f" label="优化方向">
+                  <el-table-column prop="optdir" label="优化方向">
                     <template v-slot="scope">
-                    <el-select class="no-border "  v-model="scope.row.f" :suffix-icon="CaretBottom" placeholder="请选择">
+                    <el-select class="no-border "  v-model="scope.row.optdir" :suffix-icon="CaretBottom" placeholder="请选择">
                           <el-option
                             v-for="item in options1"
                             :key="item.value"
@@ -1221,26 +1221,26 @@
 
                   </template>
                 </el-table-column>
-                  <el-table-column prop="q" label="权重系数">
+                  <el-table-column prop="weight" label="权重系数">
                     <template #default="{ row }">
-                          <el-input v-model.number="row.q"   oninput ="value=value.replace(/^|[^0-9]/g,'')"   @change="handleEdit(row)" />
+                          <el-input v-model.number="row.weight"   oninput ="value=value.replace(/^|[^0-9]/g,'')"   @change="handleEdit(row)" />
                         </template>
                   </el-table-column>
-                  <el-table-column prop="s" label="数据缩放">
+                  <el-table-column prop="scaling" label="数据缩放">
                     <!-- :label="scope.row.s?'采用':'不采用'" -->
                     <template v-slot="scope">
-                    <el-checkbox  :false-label="0"  :true-label="1" :label="scope.row.s?'采用':'不采用'"  v-model="scope.row.s" />
+                    <el-checkbox  :false-label="0"  :true-label="1"  v-model="scope.row.scaling" />
 
                   </template>
                 </el-table-column>
-                  <el-table-column prop="yin" label="缩放因子">
+                  <el-table-column prop="factor" label="缩放因子">
                     <template #default="{ row }">
-                          <el-input v-model.number="row.yin" oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
+                          <el-input v-model.number="row.factor" oninput ="value=value.replace(/^|[^0-9]/g,'')"  @change="handleEdit(row)" />
                         </template>
                   </el-table-column>
-                  <el-table-column prop="d" label="说明" >
+                  <el-table-column prop="remark" label="说明" >
                     <template #default="{ row }">
-                          <el-input v-model="row.d" @change="handleEdit(row)" />
+                          <el-input v-model="row.remark" @change="handleEdit(row)" />
                         </template>
                   </el-table-column>
                 </el-table>
@@ -1303,6 +1303,27 @@
   import Sidebar from './vuetree/Sidebar.vue'
   const router = useRouter();
   const route = useRoute();
+  let youhua=ref({
+    algorithm:'GA',
+    popsize:100,
+    epoch:100,
+    probcrossover:0.1,
+    probmut:0.1,
+    proboperator:'SBX交叉',
+    probscale:1,
+    strategy:'最佳保留策略',
+    operator:'倒位变异',
+    gpu:'YES'
+  })
+  let websock=ref(null);
+  let times=ref({
+      lockReconnect: false, //是否真正建立连接
+      timeout: 28 * 1000, //30秒一次心跳
+      timeoutObj: null, //心跳倒计时
+      serverTimeout0bj: null, //
+      timeoutnum: null, //断开重连倒计时
+  })
+  let eid=ref('');//进步优化器的eid
   let logs=ref("");
   let pid=ref("");
   let fid=ref('');
@@ -1498,7 +1519,7 @@ let options3=ref([
   { label: 'SBX交叉', value: 'SBX交叉' },
   ])
   let addval3=ref("最佳保留策略")
-  let ys=ref("GA遗传算法")
+  let ys=ref("GA")
   let addlist3 = ref([
   { label: '最佳保留策略', value: '最佳保留策略' },
   ])
@@ -1576,34 +1597,9 @@ let options3=ref([
       ],
     },
   ]
-  const eloptimize = ref([
-  {
-          name:"f1",
-          f: 1,
-          q: 1,
-          s: 0,
-          yin:1,
-          d:'shuo',
-        }
-  ])
-  const tableData = ref([
-    {
-      name: 'g1',
-      da:-1,
-      address:''
-      
-    },
-  ])
-  const designtable = ref([
-  {
-          name:"x1",
-          s1:0,
-          x1:0,
-          f:0,
-          d:''
-      
-    }
-  ])
+  const eloptimize = ref([])
+  const tableData = ref([])
+  const designtable = ref([])
   const tasktable = ref([
   {
       id:"01",
@@ -1667,6 +1663,7 @@ let options3=ref([
   onMounted(() => {
   setTimeout(function() {
     init();
+    initWebSocket();
 }, 1500);
   // childfun();
 
@@ -1678,8 +1675,8 @@ pid.value=route.query.pid;
 console.log(route.query.pid);
 }
   const handleClick = (tab, event) => {
-  
     console.log(tab.props.name);
+ 
     tabactive.value=tab.props.name;
     if(tabactive.value=='User'){
         router.replace({ path: '/' })
@@ -1719,6 +1716,7 @@ console.log(route.query.pid);
   dialog.value.optimizer=true;
  }else if(val=='进化优化器'){
   dialog.value.jboptimizer=true;
+  getoptimize();
  }else if(val=='AirfoilAero'||val=='Rosenbrock'){
   importget();
   dialog.value.Xfiol=true;
@@ -1784,10 +1782,91 @@ console.log(route.query.pid);
         break;
         case "数据流连线":
         vuefval.value.linestrokeWidth(3);
-        console.log("数据流")
+        break;
+        case "开始":
+       runok();
+      
       default: 
     }
    }
+  //  求解
+  const runok= ()=>{
+    const params = {
+        transCode: 'MDO0020',
+        pid:pid.value,
+
+    }
+    request(params)
+        .then((res) => {
+          ElMessage({
+                  message: "开始运行",
+                  type: 'success',
+              })
+        })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+  }
+   //进化优化器
+   const getoptimize = () => {
+    const params = {
+        transCode: 'MDO0018',
+        pid:pid.value,
+    }
+    request(params)
+        .then((res) => {
+       
+         if(res.hasOwnProperty('eid')){
+         
+          eid.value=res.eid;
+          youhua.value.algorithm= res.algorithm
+          youhua.value.popsize = Number(res.popsize); // 将id属性转换为数字
+          youhua.value.epoch = Number(res.epoch); 
+          youhua.value.probcrossover = Number(res.probcrossover); 
+          youhua.value.probmut = Number(res.probmut); 
+          youhua.value.probscale = Number(res.probscale); 
+          youhua.value.proboperator= res.proboperator;
+          youhua.value.strategy= res.strategy;
+          youhua.value.operator= res.operator;
+          youhua.value.gpu= res.gpu;
+          
+         // youhua=res;
+         
+         }else{
+          youhua=res;
+         }
+        
+        })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+   }
+    //进化优化器 添加保存
+    const getaddsave = () => {
+    const params = {
+        transCode: 'MDO0019',
+        pid:pid.value,
+        eid:eid.value,
+        algorithm:youhua.value.algorithm,
+        popsize:youhua.value.popsize,
+        epoch:youhua.value.epoch,
+        probcrossover:youhua.value.probcrossover,
+        probmut:youhua.value.probmut,
+        proboperator:youhua.value.proboperator,
+        probscale:youhua.value.probscale,
+        strategy:youhua.value.strategy,
+        operator:youhua.value.operator,
+        gpu:youhua.value.gpu
+
+    }
+    request(params)
+        .then((res) => {
+         console.log(res);
+        })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+   }
    //选择颜色改变线的颜色
    const colorpicker = (e) => {
     vuefval.value.changeAllEdgesColor(color1.value);
@@ -1812,19 +1891,19 @@ console.log(route.query.pid);
       for (let i = 0; i < tablevalnum; i++) {
         designtable.value.push( {
           name:"x1",
-          s1:0,
-          x1:0,
-          f:0,
-          d:''
+          upper:null,
+          lower:null,
+          reference:null,
+          remark:''
       
     })
       }
     } else if(activeIndex2.value==1){
       for (let i = 0; i < tablevalnum; i++) {
-        tableData.value.push( {
+        tableData.value.push({
       name: 'g1',
-      da:-1,
-      address:''
+      con:-1,
+      reference:''
       
     })
       }
@@ -1832,21 +1911,109 @@ console.log(route.query.pid);
       for (let i = 0; i < tablevalnum; i++) {
         eloptimize.value.push({
           name:"",
-          f:1,
-          q:0,
-          s:0,
-          yin:0,
-          d:'',
+          optdir:1,
+          weight:0,
+          scaling:0,
+          factor:0,
+          remark:'',
         })
         
       }
     }
 
   }
+  const xxclick=(index)=>{
+    activeIndex.value=index
+    if(activeIndex.value==0){
+
+    }else if(activeIndex.value==1){
+      getissue();
+
+    }
+  }
+//底部优化问题
+const issueclick=(index)=>{
+   activeIndex2.value = index;
+  console.log(activeIndex2.value);
+  if(activeIndex2.value==0){
+    getissue();
+  }else if(activeIndex2.value==1){
+    getyueshu();
+
+  }else if(activeIndex2.value==2){
+    getmub();
+}
+}
+//变量设计查询
+const getissue=()=>{
+  const params = {
+        transCode: 'MDO0022',
+        pid:pid.value,
+    }
+    request(params)
+        .then((res) => {
+       
+          res.rows = res.rows.map(item => {
+          item.lower = Number(item.lower); // 将id属性转换为数字
+          item.upper = Number(item.upper); 
+          item.upper = Number(item.reference); 
+          return item;
+        })
+        designtable.value=res.rows;
+         })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+}
+//约束条件查询
+const getyueshu=()=>{
+  const params = {
+        transCode: 'MDO0023',
+        pid:pid.value,
+    }
+    request(params)
+        .then((res) => {
+          res.rows = res.rows.map(item => {
+          item.con = Number(item.con); // 将id属性转换为数字
+          item.reference = Number(item.reference); 
+        
+          return item;
+        })
+          tableData.value=res.rows;
+        
+        })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+}
+//目标函数查询
+const getmub=()=>{
+  const params = {
+        transCode: 'MDO0024',
+        pid:pid.value,
+    }
+    request(params)
+        .then((res) => {
+          res.rows = res.rows.map(item => {
+          item.optdir = Number(item.optdir); // 将id属性转换为数字
+          item.weight = Number(item.weight); 
+          item.scaling = Number(item.scaling);
+          item.factor = Number(item.factor);
+          return item;
+        })
+          eloptimize.value=res.rows;
+        
+        })
+        .catch((err) => {
+            ElMessage.error(err.returnMsg)
+        })
+}
 //对象数组转化字符串
 const getarr=(name,arrays)=>{
+  console.log(arrays)
   for (let i = 0; i < arrays.length; i++) {
     let arr=[];
+    let att=[];
       for (const key in arrays[i]) {
         if ( arrays[i].hasOwnProperty(key)) { 
           arr.push(arrays[i][key]);
@@ -1859,14 +2026,20 @@ for (let j = 0; j < arr.length; j++) {
                 arr[j]=" ";
               }
 }
-console.log(arr)
-  const valuesWithSemiColons = arr.join(',');
+if(arrays[i].hasOwnProperty('pid')==true){
+  att=arr.slice(1,-1);
+}else{
+  att=arr;
+}
+
+  const valuesWithSemiColons = att.join(',');
   name+= valuesWithSemiColons + ';';
 
  }
  console.log(name)
  return name;
 }
+//保存优化问题
 const onokItem=()=>{
 console.log(activeIndex2.value);
   if(activeIndex2.value==0){
@@ -2131,6 +2304,87 @@ const params = {
         })
       }
 }
+//websockct的连接
+function initWebSocket() {
+      //初始化weosocket
+
+      // const wsuri = "ws://192.168.0.43:8087//websocket?projectId="+this.pid; ws://192.168.0.131/diswebsocket?projectId=5
+       const wsurl = "ws://192.168.104:8188//websocket?projectId="+pid.value;
+      // const wsurl =
+      //   "ws://" +
+      //   process.env.VUE_APP_BASE_websokt +
+      //   "/diswebsocket?projectId=" +'5'
+        // aid.value;
+        websock = new WebSocket(wsurl);
+        websock.onopen = websocketonopen;
+        websock.onmessage = websocketonmessage;
+        websock.onerror = websocketonerror;
+        websock.onclose = websocketclose;
+    }
+
+ 	// Websoket连接成功事件
+   const websocketonopen = (res) => {
+      console.log("WebSocket连接成功", res);
+  console.log(res.data);
+      start();
+    };
+    // Websoket接收消息事件
+    const websocketonmessage = (res) => {
+     // console.log("数据", res);
+      //logs.value=res.data;
+    
+      
+      reset();
+    };
+    // Websoket连接错误事件
+    const websocketonerror = (res) => {
+      console.log("连接错误", res);
+      socket.close();
+      reconnect();
+    };
+    // Websoket断开事件
+    const websocketclose = (res) => {
+      console.log("断开连接", res);
+    };
+      // 创建 websocket 的实例
+
+     // 心跳包
+     const reconnect = () => {
+      if (times.value.lockReconnect) return;
+      times.value.lockReconnect = true;
+      //没连接上会一直重连,设置延迟避免请求过多
+      times.value.timeoutnum && clearTimeout(times.value.timeoutnum);
+      times.value.timeoutnum = setTimeout(function () {
+        //新连接
+     initWebSocket();
+        times.value.lockReconnect = false;
+      }, 10000);
+    }
+    const  reset = () => {
+      //重置心跳
+      clearTimeout(times.value.timeoutObj);
+      clearTimeout(times.value.serverTimeoutObj);
+    start();
+    }
+    const start = () => {
+      //开启心跳
+      times.value.timeoutObj && clearTimeout(times.value.timeoutObj);
+      times.value.serverTimeoutObj && clearTimeout(times.value.serverTimeoutObj);
+      times.value.timeoutObj = setTimeout(function () {
+        //这里发送一个心跳,后端收到后,返回一个心跳消息
+        if (websock.readyState == 1) {
+          //如果连接正常
+         websock.send("heartCheck");
+        } else {
+          //否则重连
+          reconnect();
+        }
+        times.value.serverTimeoutObj = setTimeout(function () {
+          // 超时关闭
+          websock.close(); //如果onclose会执行reconnect,我们执行ws.close()就行了.如果直接执行reconnect 会触发onclose导致重连两次
+        }, times.value.timeout);
+      }, times.value.timeout);
+    }
   // 日志框
      // 日志的文本框
      const  footerShows=(evt)=>{

+ 3 - 2
vite.config.ts

@@ -46,7 +46,8 @@ export default defineConfig(({ mode }) => {
         server: {
             proxy: {
                 '/api': {
-                    target: 'http://192.168.0.131:8188/TransServlet',//配置文件获取地址
+                    //target: 'http://192.168.0.131:8188/TransServlet',//配置文件获取地址
+                    target: 'http://192.168.0.104:8188/TransServlet',
                     secure: false, //接受使用https
                     changeOrigin: true, //允许跨域
                     ws: false, //使用websocket
@@ -63,7 +64,7 @@ export default defineConfig(({ mode }) => {
                         '^/file': ''
                     }
                 }, '/websokct': {
-                    target: 'http://192.168.0.131:8081/',
+                    target: 'http://192.168.0.104:8188',
                     // target: 'http://192.168.0.43:8081/',
                     // target: 'https://www.gzchain.org.cn/managersvc/', //后端接口地址
                     secure: false, //接受使用https