liuqiao il y a 10 mois
Parent
commit
648241b2f8

+ 17 - 3
src/views/echart/area.vue

@@ -1,13 +1,13 @@
 <template>
   <div>
-    
+    <!-- 面积图 -->
   <div class="echartitem">
     <div id="area"  style="width:1200px;height:500px;"></div>
   </div>
   </div>
 </template>
 <script setup>
-import { ref, onMounted, reactive, } from "vue";
+import { ref, onMounted, reactive,nextTick } from "vue";
 import { RouterView, RouterLink } from "vue-router"
 import { request, uploadFile } from "@/utils/request";
 import { ElMessage, ElButton, ElDialog, ElSelect } from 'element-plus'
@@ -30,9 +30,15 @@ instance: null,
 const getData = () => {
 };
 onMounted(() => {
+
 var chartDom = document.getElementById('area');
- myChart = echarts.init(chartDom);  
+ myChart = echarts.init(chartDom);
  setOptionfun()
+//  $nextTick(() => {
+//       // 假设你想定位到节点node1
+//       setOptionfun()
+//     });  
+
 })
   //初始化
   const echatinit=()=>{
@@ -138,6 +144,14 @@ const setOptionfun=()=>{
 
 option.value && myChart.setOption(option.value);
 }
+//   watch(() =>myChart, (newValue, oldValue) => {
+//         if (newValue) {
+//         myChart.resize(); // 当显示时,触发ECharts的resize方法
+//       }
+
+// });
+
+
 defineExpose({getsockechart,echatinit});
 </script>
 <style lang="scss" scoped>

+ 10 - 3
src/views/echart/optimize_monitor.vue

@@ -19,7 +19,7 @@ let vars=ref([]);
 let vals=ref([]);
 let series=ref([]);
 let xdata=ref([]);
-let chartContainer=ref(null);
+let chartContainer=ref();
 let myChart;
 let chartDom=ref()
 let option=ref(null);
@@ -38,11 +38,18 @@ curvedata:{
 })
   let emit = defineEmits(['',])
 onMounted(() => {
- chartContainer.value.style.width=window.innerWidth-220+'px';       
+ chartContainer.value.style.width=window.innerWidth-220+'px';
+ console.log( chartContainer.value.style)    ;   
     myChart = echarts.init(chartContainer.value);
     linechart();
       window.addEventListener("resize",function() {
-        chartContainer.value.style.width='';
+       // chartContainer.value.style.width='';
+       //chartContainer?.value?.style.width = '';
+       if (chartContainer && chartContainer.value) {
+       // console.log( chartContainer.value.style)    ; 
+    chartContainer.value.style.width = '';
+
+}
       myChart.resize();
 })
      })

+ 67 - 11
src/views/home.vue

@@ -60,8 +60,17 @@
                         <el-image :src="getImgPath(item.url)" fit="cover" />
                         <span>{{ item.titlie }}</span>
                       </div>
+                      <div class="item2 floatitem wentsd" v-for="(item, index) in Rolelist22" :key="'Role22' + index"
+                        :class="{ activeOrange: active == 'Role22' + index }"
+                        @click="clickgeometry($event, index, 'Role22' + index, item.titlie)">
+                        <el-image :src="getImgPath(item.url)" fit="cover" />
+                        <el-color-picker v-model="colortier"    color-format="rgba" show-alpha @change="colorpickertier()"
+                          :class="{ 'is-show-panel': showTrigger }" />
+                        <span>{{ item.titlie }}</span>
+                      </div>
                     </div>
                   </div>
+
                   <!--  -->
                   <div class="listitem lbg_color3 bkcolor3 ">
                     <div class="threelist">
@@ -73,6 +82,8 @@
                       </div>
                     </div>
                   </div>
+                 
+
                 </div>
               </el-tab-pane>
               <el-tab-pane label="优化运行" name="Three">
@@ -1281,6 +1292,7 @@ const activeIndex = ref(0);
 const activeIndex2 = ref(0);
 const activeIndex3 = ref(0);
 const color1 = ref('');
+const colortier = ref('rgba(16, 185, 129, 0.5)');
 let showTrigger = ref(false);
 const datatree = ref([
   {
@@ -1374,8 +1386,8 @@ let Rolelist11 = ref([{ url: 'w6.png', titlie: "选择连线颜色" }])
 let Rolelist2 = ref([
   { url: 'w7.png', titlie: "模块组合" },
   { url: 'w8.png', titlie: "模块拆分" },
-  { url: 'w9.png', titlie: "选择图框颜色" },
 ])
+let Rolelist22 = ref([{ url: 'w9.png', titlie: "选择图框颜色" }])
 let Rolelist3 = ref([
   { url: 'w10.png', titlie: "添加注释" },
 ])
@@ -1714,7 +1726,10 @@ const dialogbolen = () => {
       vuefval.value.linestrokeWidth(3);
       break;
       case "模块组合":
+      vuefval.value.bgcolorfunc(colortier.value);
       vuefval.value.onSelection();
+   
+
       break;
     case "开始":
       optmonitor1.value.echatinit();
@@ -1951,6 +1966,12 @@ const getaddsave = () => {
 const colorpicker = (e) => {
   vuefval.value.changeAllEdgesColor(color1.value);
 
+}
+//选择颜色改变tuceng的颜色
+const colorpickertier = (e) => {
+  //vuefval.value.changeAllEdgesColor(color1.value);
+  vuefval.value.bgcolorfunc(colortier.value);
+
 }
 const deviceSelectChange = () => {
 
@@ -2029,6 +2050,8 @@ const issueclick = (index) => {
 }
 //设计变量查询
 const getissue = () => {
+
+  //let  childernarr=[];
   const params = {
     transCode: 'MDO0022',
     pid: pid.value,
@@ -2045,11 +2068,16 @@ const getissue = () => {
         }
         let arr = Sidebarref.value.datatree[0].children[0].children;
         let result = arr.find(element => element.id === item1.id);
+        console.log(result);
         if (!result) {
           Sidebarref.value.datatree[0].children[0].children.push(item1);
         }
-
-        Sidebarref.value.datatree[0].children[0].children[0].children = [];
+        let  childernarr=Sidebarref.value.datatree[0].children[0].children
+     Sidebarref.value.datatree[0].children[0].children.forEach((item,index)=>{
+      if(item.label=='设计变量'){
+          Sidebarref.value.datatree[0].children[0].children[index].children=[];
+      }
+        })
         res.rows = res.rows.map((item, index) => {
           item.lower = Number(item.lower); // 将属性转换为数字
           item.upper = Number(item.upper);
@@ -2061,15 +2089,23 @@ const getissue = () => {
             label: item.name,
             img: f21,
           }
-          let addnode = Sidebarref.value.datatree[0].children[0].children[0].children.push(treeitem.value);
-          return item;
+          console.log(Sidebarref.value.datatree[0].children[0].children[0].children)
+         childernarr.forEach((item,index)=>{
+          if(item.label=='设计变量'){
+            let   addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem.value);
+          }
+         })
+         return item;
         })
         designtable.value = res.rows;
+    
       }
     })
     .catch((err) => {
       ElMessage.error(err.returnMsg)
     })
+  // }
+  //  })
 }
 //约束条件查询
 const getyueshu = () => {
@@ -2080,7 +2116,6 @@ const getyueshu = () => {
   }
   request(params)
     .then((res) => {
-      //  Sidebarref.value.datatree[0].children[0].children=[];
       if (res.rows.length === 0) {
       } else {
         let item2 = {
@@ -2094,7 +2129,12 @@ const getyueshu = () => {
         if (!result) {
           Sidebarref.value.datatree[0].children[0].children.push(item2);
         }
-        Sidebarref.value.datatree[0].children[0].children[1].children = [];
+        Sidebarref.value.datatree[0].children[0].children.forEach((item,index)=>{
+          if(item.label=='约束条件'){
+          Sidebarref.value.datatree[0].children[0].children[index].children=[];
+          }
+        })
+        let   childernarr=Sidebarref.value.datatree[0].children[0].children
         res.rows = res.rows.map((item, index) => {
           item.con = Number(item.con); // 将id属性转换为数字
           item.reference = Number(item.reference);
@@ -2103,7 +2143,12 @@ const getyueshu = () => {
             label: item.name,
             img: f21,
           }
-          let addnode = Sidebarref.value.datatree[0].children[0].children[1].children.push(treeitem2.value);
+    
+          childernarr.forEach((item,index)=>{
+          if(item.label=='约束条件'){
+            let addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem2.value);
+     }
+    })
           return item;
         })
         tableData.value = res.rows;
@@ -2134,7 +2179,12 @@ const getmub = () => {
         if (!result) {
           Sidebarref.value.datatree[0].children[0].children.push(item2);
         }
- Sidebarref.value.datatree[0].children[0].children[2].children = [];
+        Sidebarref.value.datatree[0].children[0].children.forEach((item,index)=>{
+          if(item.label=='目标函数'){
+          Sidebarref.value.datatree[0].children[0].children[index].children=[];
+          }
+        })
+ let   childernarr=Sidebarref.value.datatree[0].children[0].children
         res.rows = res.rows.map((item, index) => {
           item.optdir = Number(item.optdir); // 将id属性转换为数字
           item.weight = Number(item.weight);
@@ -2145,8 +2195,14 @@ const getmub = () => {
             label: item.name,
             img: f21,
           }
-          console.log(11111)
-          let addnode = Sidebarref.value.datatree[0].children[0].children[2].children.push(treeitem3.value);
+          childernarr.forEach((item,index)=>{
+          if(item.label=='目标函数'){
+            let addnode = Sidebarref.value.datatree[0].children[0].children[index].children.push(treeitem3.value);
+     }
+    })
+       
+          // console.log(11111)
+          // let addnode = Sidebarref.value.datatree[0].children[0].children[3].children.push(treeitem3.value);
           return item;
         })
         eloptimize.value = res.rows;

+ 10 - 1
src/views/vuetree/Sidebar.vue

@@ -4,6 +4,7 @@
   import gc1 from "@/assets/img/gc1.png"
   import gc2 from "@/assets/img/gc2.png"
   import gc3 from "@/assets/img/gc3.png"
+  import r2 from '@/assets/img/r2.png'
 import useDragAndDrop from './useDnD'
 const { onDragStart,onDragLeave,treeobj,onDrop} = useDragAndDrop()
 import emitter from "@/utils/emitter";
@@ -11,6 +12,8 @@ const datatree = ref([
     {
       id:1,
       label: '工程',
+      img:r2,
+      //children:[]
       children: [
         {
           id:'1-1',
@@ -23,7 +26,7 @@ const datatree = ref([
         
         {
           id:'1-3',
-          label: '分析流程',
+          label: '学科分析',
           img:gc2,
           Text:'3-',
           children:[]
@@ -242,6 +245,7 @@ onUnmounted(() => {
 .moban button{
   margin: 10px;
 }
+
 .moban .el-image{
   width: 40px;}
   .moban span{
@@ -250,4 +254,9 @@ onUnmounted(() => {
   .el-tree-node img{
     width: 24px;
   }
+</style>
+<style>
+.custom-tree1 .el-tree-node__content{
+  padding-left: 0 !important;
+}
 </style>

+ 12 - 8
src/views/vuetree/eltree.vue

@@ -17,18 +17,18 @@ onMounted(() => {
 });
 </script>
 <template>
-       <div v-if="props.node.data.label!='模块化'">
+  <!-- <div v-if="props.node.data.label!='模块化'"> -->
   <div v-if="props.node.data!=null">
-    <div class="custom-node icons" :id="`node-${node.id}`"  >
-    <img :src="props.node.data.image"/>
+    <div class="custom-node icons  " :id="`node-${node.id}`"  >
+    <img v-if="props.node.data.label!='模块化'" :src="props.node.data.image"/>
     <span>{{props.node.data.label }}</span>
   </div>
-  <Handle type="source" :position="Position.Right"  />
+  <Handle  v-if="props.node.data.label!='模块化'"  type="source" :position="Position.Right"  />
   <Handle id="target-c" type="source" :position="Position.Top"  /> 
-   <Handle 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>
+<!-- </div> -->
 </template>
 <style scoped> 
 
@@ -40,11 +40,15 @@ onMounted(() => {
   display: block;
   font-size: 8px;
 }
+
+
 </style>
 <style>
+.vue-flow__node-default, .vue-flow__node-input, .vue-flow__node-output{
+  width: 60px;
+  height: 58px;
+}
 .vue-flow__node.draggable {
-  /* width: 60px !important;
-    height: 58px !important; */
     background-color: rgba(0,0,0,0);
 }
 

+ 144 - 22
src/views/vuetree/index.vue

@@ -84,6 +84,7 @@ import DropzoneBackground from './DropzoneBackground.vue'
 import eltree from './eltree.vue'
 import useDragAndDrop from './useDnD';
 import f11 from '@/assets/img/f11.png'
+import r2 from '@/assets/img/r2.png'
 import html2canvas from 'html2canvas';
 import Icon from './Icon.vue'
 import { formatTime } from '@/js/lindex.js';
@@ -93,7 +94,7 @@ import emitter from "@/utils/emitter";
 const dark = ref(false)
 let datatree=ref();
 const route = useRoute();
-const { onInit, onNodeDragStop, onNodeContextMenu, onConnect, addEdges, setViewport, toObject } = useVueFlow()
+const { onInit, onNodeDragStop, onNodeContextMenu, onConnect, addEdges, setViewport, toObject,addNode } = useVueFlow()
 let vueFlowRef = ref();
 let emit = defineEmits(['optimizerfalse']);
 let mergedObj=ref();
@@ -118,7 +119,9 @@ let newobj=ref({
   name:'',
   description:'',
 })
+let nodesitem=ref([]);
 let linenum=ref(1);
+let bgcolor=ref();
 let linecolor=ref('#b1b1b7')
 let pid=ref('');
 let newroter=ref();
@@ -127,12 +130,15 @@ const shopShow = ref(false);
 let noid = ref([]);
 let Edgeid = ref();
 let seledge=ref(null);
+let djshow=ref(false);
 let node = ref();
 let contextMenu = ref({
   position: { x: 0, y: 0 },
   target: 'kong',
 })
 let Nested=ref([]);
+let Nested2=ref([]);
+let nnum=ref(0);
 const { onDragOver, onDrop, onDragLeave, isDragOver } = useDragAndDrop();
 const edges = ref([]);
 const nodes = ref([]);
@@ -140,6 +146,7 @@ onConnect((connection) => {
   console.log(connection);
   connection.type = 'smoothstep';//  smoothstep straight
   connection.markerEnd = MarkerType.ArrowClosed;
+  connection.color=linecolor.value;
   // connection.label = '这是一条注释';
   connection.style = { strokeWidth:linenum.value ,stroke:linecolor.value};
   addEdges(connection)
@@ -162,28 +169,111 @@ function onNodeClick(e) {
   noid.value = e.node;
   labelname.value=e.node.data.label;
   console.log(e.node);
+  djshow.value = !djshow.value;
+  // if(djshow.value){
+  //   console.log('选中');
+
+  // }else{
+  //   console.log('取消选中');
+  // }
 
 }
 //模块化
+const  bgcolorfunc= (color)=>{
+
+  bgcolor.value=color;
+if(noid.value.style!=undefined){
+  console.log(noid.value.style);
+  noid.value.style.backgroundColor=color;
+}
+
+}
+
 function onSelection(){
-  //onNodeDragStop();
-  let num=1;
-    num++;
-  let item= {
-    id: '1',
-    data: { label: '模块化' },
-    position: { x: 100, y: 100 },
-    style: { backgroundColor: 'rgba(16, 185, 129,0.1)', width: '200px',height: '200px' },
+  let positionX=[];
+  let positiony=[];
+  for(let i=0;i<Nested.value.length;i++){
+   // Nested2.value.push(Nested.value[i]);
+   positionX.push(Nested.value[i].position.x)
+   positiony.push(Nested.value[i].position.y)
   }
-  nodes.value = Nested.value.map(node => {
-    node.parentNode=item.id;
-    node.expandParent=true;
-    return node;
-  });
-  nodes.value.push(item);
-  console.log( nodes.value);
- 
+  let xmin=Math.min(...positionX);
+  let ymax=Math.max(...positiony);
+  console.log(positionX);
+  // console.log( positionX)
+  // console.log(44444)
+  // console.log( positiony)
+  nnum.value++;
+//  let x=Math.floor(Math.random() * 91) + 10;
+//  let y=Math.floor(Math.random() * 91) + 10;
+  let name='模块'+nnum.value
+   let item= {
+    id:nnum.value.toString(),
+    data: { label:name },
+    position:  { x:xmin , y:ymax},
+    style: { backgroundColor: bgcolor.value, width: '200px',height: '200px' },
+    //children: [],
+  }
+    
+ if(Nested.value.length!=0){
+  Nested2.value=[];
+  for(let i=0;i<Nested.value.length;i++){
+    Nested2.value.push(Nested.value[i]);
+  }
+  console.log(Nested2.value);
+  nodesitem.value= Nested2.value.map(node => {
+
+    if(node.parentNode==undefined){
+     
+      node.isParent=false;
+      node.parentNode=item.id;
+      console.log(  node.parentNode)
+      node.position.x= node.position.x /2;
+      node.position.y= node.position.y/2;
+      node.expandParent=true;
+       //positionxy=node.position;
+      // node.extent='parent';
+      // return node;
+    }
+      return node;
+      })
+    
+    }
+    nodes.value.push(item)
 
+    for(let i=0;i<nodesitem.value.length;i++){
+      console.log(nodesitem.value[i]);
+      nodes.value.push(nodesitem.value[i])
+    }
+console.log(1111)
+
+   console.log( nodes.value);
+//console.log(nodesitem.value);
+     //nodes.value.push( nodes.value)
+//  let item= {
+//     id:nnum.value.toString(),
+//     data: { label: '模块化' },
+//     position: positionxy,
+//     style: { backgroundColor: bgcolor.value, width: '200px',height: '200px' },
+//   }
+//  console.log(Nested2.value)
+//     nodes.value = Nested2.value.map(node => {
+//       positionxy=node.position;
+//       if(node.parentNode==undefined){
+//         node.parentNode=item.id;
+//       // node.expandParent=true;
+//       node.extent='parent';
+     
+//   }
+//   return node;
+//   });
+//   Nested2.value.push(item)
+//   nodes.value.push(item);
+//  console.log( nodes.value);
+ 
+// }else{
+// console.log(222)
+//  }
  
 }
 function onNodeDoubleClick(e) {
@@ -191,10 +281,10 @@ function onNodeDoubleClick(e) {
   console.log( e.node);
   if (e.node.data.label == '优化器') {
     emit('optimizerfalse','优化器');
-  }else if(e.node.data.image=="/src/assets/flowimg/xuek10.png"){
+  }else if(e.node.data.label=="进化优化器"){
     emit('optimizerfalse','进化优化器');
 
-  }else if(e.node.data.image=="/src/assets/flowimg/xuek8.png"){
+  }else if(e.node.data.label=="Rosenbrock"||e.node.data.label=="AirfoilAero"){
     emit('optimizerfalse','AirfoilAero');
   }
 
@@ -252,8 +342,26 @@ emitter.emit('doSomethingEvent');
 }
 function removeNode(id) {
   id = noid.value.id;
-  console.log(id);
-  console.log( datatree.value);
+if(datatree.value==undefined){
+  if(nodes.value.length>0){
+    for (let i = 0; i <nodes.value.length; i++) {
+        if(id==nodes.value[i].id){
+          console.log(44444)
+          console.log( nodes.value[i]);
+          nodes.value.splice(i, 1)
+        }
+}
+console.log( nodes.value);
+  }
+}else{
+  if(nodes.value.length>0){
+    for (let i = 0; i <nodes.value.length; i++) {
+        if(id==nodes.value[i].id){
+          console.log( nodes.value[i]);
+         nodes.value.splice(i, 1)
+        }
+}
+  }
   for (let i = 0; i <datatree.value[0].children.length; i++) {
     if(id.includes(datatree.value[0].children[i].Text)){
       for (let j = 0; j <datatree.value[0].children[i].children.length; j++) {
@@ -266,11 +374,15 @@ function removeNode(id) {
   }
     }
 
+}
 }
 }
 function removeall(){
   nodes.value=[];
   edges.value=[];
+  Nested2.value=[];
+  Nested.value=[];
+
   for (let i = 0; i <datatree.value[0].children.length; i++) {
       for (let j = 0; j <datatree.value[0].children[i].children.length; j++) {
         datatree.value[0].children[i].children=[];
@@ -348,6 +460,7 @@ onMounted(() => {
 });
 // 获取链接
 const getroter=()=>{
+  //datatree.value[0].children=[];
   let objlist=JSON.parse(sessionStorage.getItem("objlist"));
   if(objlist.flow!=''){
     let nodesflow=JSON.parse(objlist.flow)
@@ -357,6 +470,15 @@ const getroter=()=>{
   newobj.value.name=objlist.name;
   newobj.value.description=objlist.remark;
   pid.value=objlist.pid;
+
+  // let item={
+  //   id:'1-0',
+  //   label: objlist.name,
+  //   img:r2,
+  // }
+  // console.log(  datatree.value[0].children);
+  // datatree.value[0].children.push(item);
+
 }
 //改变线的粗
 const linestrokeWidth=(num)=>{
@@ -389,7 +511,7 @@ watch(() => seledge.value, (newItems, oldItems) => {
   //   //seledge.value.style.stroke =  linecolor.value;
   // }
     });
-defineExpose({changeAllEdgesColor,linestrokeWidth,getroter,onSelection});
+defineExpose({changeAllEdgesColor,linestrokeWidth,getroter,onSelection,bgcolorfunc});
 </script>
 
 <style>