tangjunhao 6 months ago
parent
commit
d0efafd8b8

+ 14 - 14
src/views/components/fileuploads.vue

@@ -120,22 +120,22 @@ const initWebUploader = () => {
     console.log('fileName.value',fileName.value)
      emit('update-fileName', fileName.value)
      // 文件上传类型
-    const fax = fileName.value.split(".")[1]
-    if (props.accept.indexOf(fax) < 0) {
-      //判断上传支持文件类型
-      uploader.value.reset()
-      ElMessage.error("只支持" + props.accept + "格式文件!")
-      return
-    }
+      const ext = fileName.value.split('.').pop().toLowerCase();  // 获取扩展名
+      const acceptList = props.accept.split(',').map(e => e.trim().toLowerCase());
+      if (!acceptList.includes('.' + ext)) {
+      uploader.value.reset();
+      ElMessage.error(`只支持 ${props.accept} 格式文件!`);
+      return;
+      }
     uploader.value
       .md5File(file)
       .progress((percentage) => {
         //显示加密进度
         console.log("Percentage:", percentage)
       })
-      .then((md5) => {
+      .then((hash) => {
         // 完成
-        md5.value = md5
+        md5.value = hash
       })
     if (files.value.length > 0) {
       uploader.value.removeFile(files.value[0].id)
@@ -176,7 +176,7 @@ const initWebUploader = () => {
   uploader.value.on("uploadProgress", (file, percentage) => {
     let prage = Math.floor(percentage * 100)
     files.value.forEach((fileObj) => {
-      if ((fileObj.id = file.id)) {
+      if ((fileObj.id === file.id)) {
         fileObj.msg = "上传中"
         emit('upload-status', "上传中")
         }
@@ -246,10 +246,10 @@ const initWebUploader = () => {
   })
 }
 const uploaderClear = () => {
-  uploader.value.reset()
-  percentage.value = 0
-  files.value = []
-}
+  uploader.value.reset();
+  files.value = [];
+  files.value.forEach(file => file.percentage = 0);
+};
 const fileDel = (fileId) => {
   console.log(fileId)
   getUUID()

+ 27 - 25
src/views/home.vue

@@ -1157,7 +1157,7 @@
                 <!-- 单独的代理优化器 -->
           <el-dialog v-model="dialog.dboptimizer" align-center :modal="false" :close-on-click-modal="false"
             :append-to-body="true" draggable :fullscreen="false" :modal-append-to-body="false" modal-class="summary-dlg"
-            :before-close="handleClose" width="430" class="dialog_class bgcolor tianjia sel colortext">
+            :before-close="handleClose" width="530" class="dialog_class bgcolor tianjia sel colortext">
 
             <template #header="{ titleId, titleClass }">
               <div class="my-header ">
@@ -1502,24 +1502,7 @@
                           <div class="eloptimize classtable" v-if="activeIndex2 == 2">
                             <el-table :data="eloptimize" border style="width: 100%" height="100">
                               <el-table-column type="index" label="编号" width="70" />
-                              <!-- <el-table-column prop="qi" label="启用" width="70">
-                  <template v-slot="scope">
-                    <el-checkbox :label="false" v-model="scope.row.qi" />
-                  </template>
-                </el-table-column> -->
-                              <!-- <el-table-column prop="data" label="目标类型" width="120">
-                  <template v-slot="scope">
-                    <el-select v-model="scope.row.device"  class="no-border " :suffix-icon="CaretBottom"  placeholder="请选择">
-                          <el-option
-                            v-for="item in options"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value">
-                          </el-option>
-                        </el-select>
-
-                  </template>
-            </el-table-column> -->
+                              
                               <el-table-column prop="name" label="目标名称">
                                 <template #default="{ row }">
                                   <el-input v-model="row.name" />
@@ -1578,13 +1561,14 @@
                         <div class="dibu">
                           <div class="footer-add">
                             <div class="sev_ruwu">
-                              <div class="disflex ">
-                                <el-form-item label="新增变量数:">
+                              <div class="disflex flexend">
+                                <el-form-item label="新增变量数:" v-if="activeIndex2 === 0">
                                   <el-input v-model="tableval" maxlength="18"
                                     oninput="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2"
-                                     /> </el-form-item>
-                                <el-button class="btncolor">导入</el-button>
-                                <el-button class="btncolor" @click="onAddItem">新增</el-button>
+                                  /> 
+                                </el-form-item>
+                                <el-button class="btncolor" v-if="activeIndex2 === 0">导入</el-button>
+                                <el-button class="btncolor" @click="onAddItem">新建</el-button>
                                 <el-button class="btncolor" @click="onokItem">确认</el-button>
                               </div>
                             </div>
@@ -2281,6 +2265,18 @@ const handleClick = (tab, event) => {
     echartzongshow.value = false;
   }
 }
+
+const handleInput = (value, row) => {
+  // 如果输入是 'none',允许通过
+  if (value === 'none') {
+    row.lower = 'none';
+  } else {
+    // 否则只允许数字、小数点和负号
+    const sanitizedValue = value.replace(/[^0-9.-]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/^-(?=\.)/, '');
+    row.lower = sanitizedValue;
+  }
+};
+
 //表格点击事件
 const handleEdit = (row) => {
   // console.log('编辑后的数据:', row);
@@ -4104,7 +4100,12 @@ color: #2267B1;
 }
 
 .footer-add {
-  width: 530px;
+  width: 600px;
+}
+
+.flexend {
+  display: flex;
+  justify-content: flex-end;
 }
 
 .dibu {
@@ -4128,6 +4129,7 @@ color: #2267B1;
 .dibu .btncolor {
   margin-top: 2px;
   height: 27px;
+  width: 70px;
   background: #FFFFFF;
   box-shadow: 0px 2px 2px 0px #B3B3B3;
   border-radius: 0px 0px 0px 0px;

+ 1 - 1
src/views/titlecomponent/ADflow.vue

@@ -38,7 +38,7 @@
                 :projectId="124" 
                 solverType="exampleSolver" 
                 accept=".cgns"
-                upId="uniqueId1" 
+                upId="adflow" 
                 name="点击选择文件"
                 :imgSrc="meshFileImgSrc"
                 @upload-success="handleFileUploadSuccess"

+ 9 - 38
src/views/titlecomponent/Doptimize.vue

@@ -20,7 +20,7 @@
                     </el-option>
                 </el-select>
                 </el-form-item>
-                <el-form-item label="代理模型:" :label-width="formLabelWidth200">
+                <el-form-item label="选择代理模型:" :label-width="formLabelWidth200">
                   <el-select v-model="youhua.surromod" :suffix-icon="CaretBottom" placeholder="请选择">
                     <el-option v-for="item in daililist" :key="item.value" :label="item.label" :value="item.value">
                     </el-option>
@@ -40,9 +40,9 @@
               <el-form-item label="优化进程数:"  :label-width="formLabelWidth200">
                 <el-input v-model="youhua.proscount" :step="100" :min="0" :max="1000" controls-position="right" />
               </el-form-item>
-              <el-form-item label="屏幕输出等级:"  :label-width="formLabelWidth200">
+              <!-- <el-form-item label="屏幕输出等级:"  :label-width="formLabelWidth200">
                 <el-input v-model="youhua.iout" :step="100" :min="0" :max="1000" controls-position="right" />
-                </el-form-item>
+                </el-form-item> -->
               <!-- <el-form-item label="低可信度样本点数:"  :label-width="formLabelWidth200">
                   <div style="display: flex;">
                 <el-input type="text" style="margin-right: 10px;" v-model="youhua.nslf">
@@ -153,20 +153,20 @@ import { ElMessage, ElButton, ElDialog, ElSelect } from 'element-plus'
 import { Edit, CaretBottom } from '@element-plus/icons-vue'
 import { request } from "@/utils/request";
 let formLabelWidth3=ref(100)
-let formLabelWidth200=ref(200)
+let formLabelWidth200=ref(180)
 let youhua = ref({
   algorithm: 'SurroOpt',
   iout: 19,
   proscount:'1',
   irestart: '0',
-  ndoe: '拉丁超立方LHS',
+  ndoe: '0',
   ns: 10,
   nsmax: 100,
   nslf: 20,
   nsmaxlf: 200,
   nsmk: 10,
   nsmaxmk: 100,
-  xtol: -1e-8,
+  xtol: 1e-8,
   feasibilitytolreal: -1e-6,
   feasibilitytolsurro: -1e-6,
   surromod: 'Kriging',
@@ -176,10 +176,10 @@ let youhua = ref({
   dcmp: '0',
   paraopt: '1',
   regular: '0',
-  infill: 'EI+MSP',
+  infill: '0',
   nparallel: 1,
-  iopt: '当前最优+局部优化',
-  icstr: '概率相乘法',
+  iopt: '0',
+  icstr: '0',
   ipopsize: 50,
   maxgen: 100,
   pc: 0.9,
@@ -281,35 +281,6 @@ const getDoptimize = (id) => {
   request(params).then((res) => {
     console.log('chushihua')
     if (res.hasOwnProperty('suid')) {
-      // suid.value = res.suid;
-      // youhua.value.algorithm = res.algorithm;
-      // youhua.value.iout = res.iout;
-      // youhua.value.irestart = res.irestart;
-      // youhua.value.ndoe = res.ndoe;
-      // youhua.value.ns = res.ns;
-      // youhua.value.nsmax = res.nsmax;
-      // youhua.value.nslf = res.nslf;
-      // youhua.value.nsmaxlf = res.nsmaxlf;
-      // youhua.value.nsmk = res.nsmk;
-      // youhua.value.nsmaxmk = res.nsmaxmk;
-      // youhua.value.xtol = res.xtol;
-      // youhua.value.feasibilitytolreal = res.feasibilitytolreal;
-      // youhua.value.feasibilitytolsurro = res.feasibilitytolsurro;
-      // youhua.value.surromod = res.surromod;
-      // youhua.value.corr = res.corr;
-      // youhua.value.consttheta = res.consttheta;
-      // youhua.value.porder = res.porder;
-      // youhua.value.dcmp = res.dcmp;
-      // youhua.value.paraopt = res.paraopt;
-      // youhua.value.regular = res.regular;
-      // youhua.value.infill = res.infill;
-      // youhua.value.nparallel = res.nparallel;
-      // youhua.value.iopt = res.iopt;
-      // youhua.value.icstr = res.icstr;
-      // youhua.value.ipopsize = res.ipopsize;
-      // youhua.value.maxgen = res.maxgen;
-      // youhua.value.pc = res.pc;
-      // youhua.value.pm = res.pm;
 
       getDoptimizeAssign(res);
 

+ 1 - 1
src/views/titlecomponent/Toptimize.vue

@@ -94,7 +94,7 @@ const getToptimize = (id) => {
 }
 
 const getToptimizeAssign = (data) => {
-  pid.value = data.pid;
+  // pid.value = data.pid;
   grid.value = data.grid;
   youhua.value.algorithm = data.algorithm;
   youhua.value.majoriterationslimit = data.majoriterationslimit;

+ 13 - 0
src/views/titlecomponent/Xfoil.vue

@@ -160,6 +160,7 @@ import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
 import { Edit, CaretBottom } from "@element-plus/icons-vue"
 import { tr } from "element-plus/es/locale/index.mjs"
 import { request, uploadFile } from "@/utils/request"
+import emitter from "@/utils/emitter"
 import inputParams from "@/assets/img/inputParams.png"
 import configParams from "@/assets/img/configParams.png"
 import analysisParams from "@/assets/img/analysisParams.png"
@@ -326,6 +327,7 @@ const getxfoil = (id) => {
   request(params).then((res) => {
     if (res.hasOwnProperty("xfid")) {
       getxfoilAssign(res);
+      emitter.emit("xfidFromxfoil", xfid);
     }
   })
   .catch((err) => {
@@ -373,6 +375,17 @@ const getxfoilsave = () => {
     })
 }
 
+
+onMounted(() => {
+  mitts.on("requestGetxfid", getxfoil); // 监听事件
+});
+
+onUnmounted(() => {
+  mitts.off("requestGetxfoil", getxfoil); // 解绑事件
+});
+
+
+
 defineExpose({
   getxfoil,
   getxfoilAssign,

+ 1 - 1
src/views/titlecomponent/ffds.vue

@@ -13,7 +13,7 @@
           :projectId="123" 
           solverType="exampleSolver" 
           accept=".xyz" 
-          upId="uniqueId1" 
+          upId="ffds" 
           name="点击选择文件"
           :imgSrc="imageSrc"
           @upload-success="handleFileUploadSuccess"

+ 1 - 1
src/views/vuetree/eltree.vue

@@ -25,7 +25,7 @@ onMounted(() => {
   </div>
   <Handle  v-if="props.node.data.label!='模块化'"  type="source" :position="Position.Right"  />
   <Handle id="target-c" type="source" :position="Position.Top"  /> 
-   <Handle  v-if="props.node.data.label!='模块化'"  id="target-b" type="target"  :position="Position.Left" /> 
+  <Handle  v-if="props.node.data.label!='模块化'"  id="target-b" type="target"  :position="Position.Left" /> 
   <Handle id="target-d" type="target" :position="Position.Bottom"  /> 
   </div>
 <!-- </div> -->

+ 255 - 52
src/views/vuetree/index.vue

@@ -9,14 +9,6 @@
     <template  #node-default="props">
       <eltree :node="props" />
     </template>
-
-    <template #edge-default="props">
-      <custom-edge :sourceX="props.sourceX" 
-                  :sourceY="props.sourceY" 
-                  :targetX="props.targetX" 
-                  :targetY="props.targetY"
-                  :label="props.data.label" />
-    </template>
  
     <Background pattern-color="#aaa" :gap="16" />
 
@@ -97,30 +89,131 @@
         </div>
       </template>
       <div style="margin-top: 5px;padding: 10px 35px;">
-        <el-card>
+        <div v-if="datacontent === '1'">
+          <el-card :shadow="none" style="min-height: 240px; max-height: 480px;">
           <el-checkbox v-model="checkAll" 
           :indeterminate="isIndeterminate"
           @change="handlecheckAllchange">全选</el-checkbox>
           <div class="eldesign classtable">
-            <el-table :data="shujuliutable" border>
+            <el-table :data="youhuaFFDtable" border :show-header="false">
             <el-table-column
               type="index"
               label=""
-              :header-cell-style="{ display: 'none' }"
             ></el-table-column>
-            <el-table-column prop="flag" width="55">
+            <el-table-column prop="steamflag" width="55">
               <template #default="{ row }">
                 <el-checkbox
                 :false-label="0"
                 :true-label="1" 
-                v-model="row.flag" 
+                v-model="row.steamflag" 
                 @change="handlecheckFlagchange"></el-checkbox>
               </template>
             </el-table-column>
-            <el-table-column prop="data" label="" ></el-table-column>
+            <el-table-column prop="name" label="" ></el-table-column>
             </el-table>
           </div>
-        </el-card>
+          </el-card>
+        </div>
+        <div v-if="datacontent === '2'">
+          <el-card :shadow="none" style="min-height: 240px; max-height: 480px;">
+          <el-checkbox v-model="checkAll" 
+          :indeterminate="isIndeterminate"
+          @change="handlecheckAllchange">全选</el-checkbox>
+          <div class="eldesign classtable">
+            <el-table :data="youhuaCSTtable" border :show-header="false">
+            <el-table-column
+              type="index"
+              label=""
+            ></el-table-column>
+            <el-table-column prop="steamflag" width="55">
+              <template #default="{ row }">
+                <el-checkbox
+                :false-label="0"
+                :true-label="1" 
+                v-model="row.steamflag" 
+                @change="handlecheckFlagchange"></el-checkbox>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="" ></el-table-column>
+            </el-table>
+          </div>
+          </el-card>
+        </div>
+        <div v-if="datacontent === '3'">
+          <el-card :shadow="none" style="min-height: 240px; max-height: 480px;">
+          <el-checkbox v-model="checkAll" 
+          :indeterminate="isIndeterminate"
+          @change="handlecheckAllchange">全选</el-checkbox>
+          <div class="eldesign classtable">
+            <el-table :data="ADflowyouhuatable" border :show-header="false">
+            <el-table-column
+              type="index"
+              label=""
+            ></el-table-column>
+            <el-table-column prop="steamflag" width="55">
+              <template #default="{ row }">
+                <el-checkbox
+                :false-label="0"
+                :true-label="1" 
+                v-model="row.steamflag" 
+                @change="handlecheckFlagchange"></el-checkbox>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="" ></el-table-column>
+            <el-table-column prop="steamtype">
+              <template #default="{ row }">
+                <el-select v-model="row.steamtype">
+                  <el-option 
+                  v-for="item in steamtypeoptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            </el-table>
+          </div>
+          </el-card>
+        </div>
+        <div v-if="datacontent === '4'">
+          <el-card :shadow="none" style="min-height: 240px; max-height: 480px;">
+          <el-checkbox v-model="checkAll" 
+          :indeterminate="isIndeterminate"
+          @change="handlecheckAllchange">全选</el-checkbox>
+          <div class="eldesign classtable">
+            <el-table :data="Xfoilyouhuatable" border :show-header="false">
+            <el-table-column
+              type="index"
+              label=""
+            ></el-table-column>
+            <el-table-column prop="steamflag" width="55">
+              <template #default="{ row }">
+                <el-checkbox
+                :false-label="0"
+                :true-label="1" 
+                v-model="row.steamflag" 
+                @change="handlecheckFlagchange"></el-checkbox>
+              </template>
+            </el-table-column>
+            <el-table-column prop="name" label="" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="steamtype">
+              <template #default="{ row }">
+                <el-select v-model="row.steamtype">
+                  <el-option 
+                  v-for="item in steamtypeoptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                  />
+                </el-select>
+              </template>
+            </el-table-column>
+            </el-table>
+          </div>
+          </el-card>
+        </div>
+        
       </div>
       <template #footer>
         <div class="dialog-footer">
@@ -227,6 +320,7 @@ const changeName = ref({
   
 })
 
+
 onNodeContextMenu((e) => {
   noid.value = e.node;
   changeName.value.name = e.node.data.label;
@@ -258,9 +352,7 @@ emitter.on('child2Data', data => {
   datatree.value = data;
   console.log(datatree.value);
 })
-onUnmounted(() => {
-  emitter.off('child2Data');
-});
+
 function onNodeClick(e) {
   noid.value = e.node;
   changeName.value.name=e.node.data.label;
@@ -367,8 +459,6 @@ function onNodeDoubleClick(e) {
     emit('optimizerfalse','CST');
   }else if(e.node.data.name=="ADflow"){
     emit('optimizerfalse','ADflow');
-  }else if(e.node.data.name=="CST"){
-    emit('optimizerfalse','CST');
   }else if(e.node.data.name=="FFD"){
     emit('optimizerfalse','FFD');
   }else if(e.node.data.name=="TACS"){
@@ -402,7 +492,7 @@ function onEdgeClick(e) {
       previousEdge.style = {
         ...previousEdge.style,
         stroke: previousEdge.originalColor,  // 恢复原始颜色
-        strokeWidth: 1,                      // 恢复原始宽度
+        strokeWidth: previousEdge.originalWidth,// 恢复原始宽度
       };
     }
   }
@@ -413,6 +503,7 @@ function onEdgeClick(e) {
 
   // 暂时更改当前选中边缘的样式
   seledge.value.originalColor = seledge.value.style.stroke;  // 保存当前边缘的原始颜色
+  seledge.value.originalWidth = seledge.value.style.strokeWidth; // 保存当前边缘的原始宽度
   seledge.value.style = {
     ...seledge.value.style,
     stroke: '#2267B1',       // 设置选中边缘的颜色
@@ -421,38 +512,72 @@ function onEdgeClick(e) {
 
   // 保存当前选中的边缘作为上一个选中边缘
   previousEdge = seledge.value;
+
 }
 
 
 let dataflowshow=ref(false);
 
-let shujuliutable = ref([
-  {data: '升力系数Cl',flag:1},
-  {data: '阻力系数Cd',flag:1},
-  {data: '压阻力系数Cdp',flag:1},
-  {data: '上表面转换点位置xtr-upper',flag:1},
-  {data: '下表面转换点位置xtr-lower',flag:1},
+let youhuaFFDtable = ref([
+  { name:'FFD参数(sample)', steamflag:1 }
+])
+
+let youhuaCSTtable = ref([
+  { name:"上表面CST参数(upper)", steamflag:1 },
+  { name:'下表面CST参数(lower)', steamflag:1 }
+])
+
+let steamtypeoptions = ref([
+  { label:'约束条件', value:1 },
+  { label:'优化目标', value:1 }
 ])
 
+let ADflowyouhuatable = ref([
+  { code: "cl", name:'升力系数Cl', comtype:2 , steamflag:1, steamtype:1 },
+  { code: "cd", name:'阻力系数Cd', comtype:2 , steamflag:1, steamtype:1 },
+  { code: "cm", name:'力矩系数Cm', comtype:2 , steamflag:1, steamtype:1 },
+  { code: " ", name:'体积', comtype:2 , steamflag:1, steamtype:1 },
+])
+
+let Xfoilyouhuatable = ref([
+  { code:'', name:'升力系数Cl', comtype:2 , steamflag:1, steamtype:1 },
+  { code:'', name:'阻力系数Cd', comtype:2 , steamflag:1, steamtype:1 },
+  { code:'', name:'压阻力系数Cdp', comtype:2 , steamflag:1, steamtype:1 },
+  { code:'', name:'力矩系数Cm', comtype:2 , steamflag:1, steamtype:1 },
+  { code:'', name:'上表面转换点位置xtr-upper', comtype:2 , steamflag:1, steamtype:1 },
+  { code:'', name:'下表面转换点位置xtr-lower', comtype:2 , steamflag:1, steamtype:1 },
+])
 
 let checkAll = ref(false);
 let isIndeterminate = ref(false);
-const handlecheckAllchange = (val) => {
-  shujuliutable.value.forEach((item) => {
-    item.flag = val;
-  });
-  isIndeterminate.value = false;
+const dataTables = {
+  '1': youhuaFFDtable,
+  '2': youhuaCSTtable,
+  '3': ADflowyouhuatable,
+  '4': Xfoilyouhuatable
 };
 
 const handlecheckFlagchange = () => {
-  let checkedCount = shujuliutable.value.filter((item) => item.flag).length;
-  checkAll.value = checkedCount === shujuliutable.value.length;
-  isIndeterminate.value = checkedCount > 0 && checkedCount < shujuliutable.value.length;
+  const table = dataTables[datacontent.value];
+  if (!table) return;
+
+  let checkedCount = table.value.filter(item => Boolean(item.steamflag)).length;
+  checkAll.value = checkedCount === table.value.length;
+  isIndeterminate.value = checkedCount > 0 && checkedCount < table.value.length;
+};
+
+const handlecheckAllchange = (val) => {
+  const table = dataTables[datacontent.value];
+  if (!table) return;
+
+  table.value.forEach(item => item.steamflag = val ? 1 : 0);
+  isIndeterminate.value = false;
 };
 
 
 const confirmselection=()=>{
-  let checkedData = shujuliutable.value.filter((item) => item.flag).map((item) => item.data);
+  const table = dataTables[datacontent.value];
+  let checkedData = table.value.filter((item) => item.steamflag).map((item) => item.name);
   console.log('xuanzhongshuju:',checkedData);
   console.log('seledge:',seledge.value);
   seledge.value.label=checkedData.join('\n');
@@ -460,14 +585,68 @@ const confirmselection=()=>{
 }
 
 
+
+const xfid = ref('')
+// 监听组件xfoil返回的xfid
+const handleXfid = (xfidFromB) => {
+  xfid.value = xfidFromB.value;
+};
+
+
+let datacontent = ref('')
 function onEdgeDoubleClick(e) {
-  handlecheckFlagchange();
+  
   console.log('Edge Double Click', e)
   seledge.value = e.edge;
   dataflowshow.value = true
+  console.log('qidian:',e.edge.sourceNode.data.name);
+  console.log('zhongdian:',e.edge.targetNode.data.name);
+  let qidian = e.edge.sourceNode.data.name;
+  let zhongdian = e.edge.targetNode.data.name;
+  let youhualist = ['优化器','代理优化器','进化优化器','梯度优化器'];
+  if( youhualist.includes(qidian) && zhongdian ==='FFD' ){
+    datacontent.value = '1';
+  }else if( youhualist.includes(qidian) && zhongdian ==='CST') {
+    datacontent.value = '2';
+  }else if( qidian === 'ADflow' && youhualist.includes(zhongdian) ) {
+    datacontent.value = '3';
+  }else if ( qidian === 'Xfoil' && youhualist.includes(zhongdian) ) {
+    datacontent.value = '4';
+    emitter.emit('requestGetxfid',pid.value);
+    console.log('xfid:',xfid.value)
+    if(xfid.value) {
+      querydataFlow(xfid);
+    }else{
+      ElMessage.error('Xfoil未初始化!')
+    }
+  }
+  console.log('leixing:',datacontent.value);
+
+  nextTick(() => {
+    handlecheckFlagchange();
+  });
+}
+
+const querydataFlow = (comid) => {
+  const params = {
+    transCode: "MDO0052",
+    pid: pid.value,
+    comid: comid.value
+  }
+  request(params).then((res) => {
+    ElMessage({
+        message: res.returnMsg,
+        type: 'success',
+      })
+  })
+  .catch((err) => {
+      ElMessage.error(err.returnMsg)
+  })
 }
 
 
+
+
 function logEvent(name, event) {
   console.log(2222)
 }
@@ -649,10 +828,39 @@ function toggleDarkMode() {
 onMounted(() => {
   setTimeout(function() {
     getroter();
-}, 1500);
+  }, 1500);
   // childfun();
 
+  if (vueFlowRef.value) {
+    vueFlowRef.value.$el.addEventListener('click', (event) => {
+      // 确保点击的不是边缘
+      if (seledge.value && !event.target.closest('.vue-flow__edge')) {
+        // 恢复选中边缘的原始样式
+        seledge.value.style = {
+          ...seledge.value.style,
+          stroke: seledge.value.originalColor,
+          strokeWidth: previousEdge?.originalWidth || 1, // 恢复原始宽度
+        };
+
+        // 清空选中的边缘
+        seledge.value = null;
+        Edgeid.value = null;
+        previousEdge = null;
+      }
+    });
+  }
+
+  emitter.on("xfidFromxfoil", handleXfid);
 });
+
+
+onUnmounted(() => {
+  emitter.off('child2Data');
+
+  emitter.off("xfidFromxfoil", handleXfid);
+});
+
+
 // 获取链接
 const getroter=()=>{
   //datatree.value[0].children=[];
@@ -736,18 +944,16 @@ defineExpose({changeAllEdgesColor,linestrokeWidth,getroter,onSelection,bgcolorfu
   /* 设置edges的左对齐 */
 }
 
-.edge-label {
-  position: absolute;
-  background-color: rgba(0, 0, 0, 0.6);
-  color: white;
-  padding: 5px;
-  border-radius: 4px;
-  font-size: 14px;
-  white-space: pre-line;  /* 保证文本支持换行 */
+.vue-flow__edge-text {
+  transform:  translateY(-10px); /* 将 label 向上偏移 */
+  background: transparent !important;
+  font-size: 8px;
+  font-family: 'Source Sans Pro-Regular';
+  color: #333333;
 }
 
-.edge-label-line {
-  margin-bottom: 4px; /* 控制每行的间距 */
+.vue-flow__edge-textbg {
+  fill: transparent !important; /* 将背景设置为透明 */
 }
 
 #contextMenu {
@@ -817,8 +1023,5 @@ panel {
 .field{
   display: flex;
 }
-.node-label, .edge-label,.custom-node span {
-    text-transform: none; /* 确保文本不转换为大写 */
-    font-family: 'Inter-Regular';
-}
+
 </style>