tangjunhao před 7 měsíci
rodič
revize
51fe4f4ccf
3 změnil soubory, kde provedl 279 přidání a 65 odebrání
  1. 37 12
      src/views/home.vue
  2. 104 22
      src/views/titlecomponent/csts.vue
  3. 138 31
      src/views/titlecomponent/ffds.vue

+ 37 - 12
src/views/home.vue

@@ -1074,7 +1074,7 @@
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.XfAD = false">取消</el-button>
-                <el-button type="primary" @click="cstok()">
+                <el-button type="primary" @click="ok()">
                   确定
                 </el-button>
               </div>
@@ -1091,7 +1091,7 @@
                 <h4 :id="titleId" :class="titleClass">CST</h4>
               </div>
             </template>
-            <csts/>
+            <csts ref="Cstref"/>
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.CSTt = false">取消</el-button>
@@ -1112,11 +1112,11 @@
                 <h4 :id="titleId" :class="titleClass">FFD</h4>
               </div>
             </template>
-            <ffds/>
+            <ffds ref="Ffdref"/>
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.ffdt = false">取消</el-button>
-                <el-button type="primary" @click="cstok()">
+                <el-button type="primary" @click="ffdok()">
                   确定
                 </el-button>
               </div>
@@ -1134,10 +1134,10 @@
             </template>
             <div class="numberinput lefttext ">
               <el-form>
-                    <!-- CST -->
-                <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick">
+              <!-- CST -->
+              <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick">
               <el-tab-pane label="CST" name="CST">
-                <csts/>
+                <csts ref="Cstref"/>
               </el-tab-pane>
               <!-- FFD -->
               <el-tab-pane label="FFD" name="FFD">
@@ -1149,7 +1149,7 @@
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.cstffd = false">取消</el-button>
-                <el-button type="primary" @click="cstok()">
+                <el-button type="primary" @click="ok()">
                   确定
                 </el-button>
               </div>
@@ -1793,6 +1793,8 @@ class Branin(BaseSolver):
         # x[0] = xdict['x1']
         # x[1] = xdict['x2']`);
 
+let Cstref = ref();
+let Ffdref = ref();
 let Joptimizeref=ref();
 let Doptimizeref=ref();
 let Toptimizeref=ref();
@@ -2375,7 +2377,7 @@ const optimizerfalse = (val) => {
   console.log(val);
   if (val == '优化器') {
     // dialog.value.optimizer = true;
-    activeadf.value='代理优化器';
+    // activeadf.value='代理优化器';
     initoptimize();
     dialog.value.optgroup = true;
   } else if (val == '参数化') {
@@ -2421,12 +2423,24 @@ const optimizerfalse = (val) => {
     });
   }else if(val == 'CST'){
    /// dialog.value.CSTt = true;
-  //  activeadf.value='CST';
+    activeadf.value='CST';
     dialog.value.CSTt = true;
+    nextTick(() => {
+      // 确保 ref 已经初始化
+      if (Cstref.value) {
+        Cstref.value.getcst(pid.value);
+      }
+    });
   }else if(val == 'FFD'){
    /// dialog.value.CSTt = true;
-  //  activeadf.value='CST';
+    activeadf.value='FFD';
     dialog.value.ffdt = true;
+    nextTick(() => {
+      // 确保 ref 已经初始化
+      if (Ffdref.value) {
+        Ffdref.value.getffd(pid.value);
+      }
+    });
   }
   else if(val == 'ADflow'){
    // adfhandleClick();
@@ -2464,7 +2478,6 @@ const optimizerfalse = (val) => {
 
 // 优化器窗口初始化
 const initoptimize = () => {
-  console.log('优化器chushihua');
   const params1 = {
     transCode:'MDO0018',
     pid: pid.value,
@@ -3047,9 +3060,21 @@ const getmub = () => {
 }
 const cstok=()=>{
  // cstnum.value='';
+ if(Cstref.value){
+  Cstref.value.getcstsave();
+  }
   dialog.value.CSTt = false;
 
 }
+
+const ffdok=()=>{
+
+   if(Ffdref.value){
+    Ffdref.value.getffdsave();
+    }
+    dialog.value.ffdt = false;
+  
+  }
 //对象数组转化字符串
 const getarr = (name, arrays) => {
   console.log(arrays)

+ 104 - 22
src/views/titlecomponent/csts.vue

@@ -5,7 +5,7 @@
         <div>
           <el-form-item label="CST阶数:" :label-width="formLabelWidth200">
             <el-input-number
-              v-model="cstnum"
+              v-model="cstn"
               :step="1"
               :min="0"
               :max="20"
@@ -27,7 +27,7 @@
                 :max="1000"
                 controls-position="right"
               >
-                <template #prefix>N1</template>
+                <template #prefix>N1</template>
               </el-input>
             </el-form-item>
             <el-form-item
@@ -41,7 +41,7 @@
                 :max="1000"
                 controls-position="right"
               >
-                <template #prefix>N1</template>
+                <template #prefix>N1</template>
               </el-input>
             </el-form-item>
           </div>
@@ -57,7 +57,7 @@
                 :max="1000"
                 controls-position="right"
               >
-                <template #prefix>N2</template>
+                <template #prefix>N2</template>
               </el-input>
             </el-form-item>
             <el-form-item
@@ -71,7 +71,7 @@
                 :max="1000"
                 controls-position="right"
               >
-                <template #prefix>N2</template>
+                <template #prefix>N2</template>
               </el-input>
             </el-form-item>
           </div>
@@ -86,7 +86,7 @@
               :label="item.label"
             >
               <template #default="{ row }">
-                <el-input v-model="row[item.prop]" @change="handleEdit(row)" />
+                <el-input v-model="row[item.prop]" />
               </template>
             </el-table-column>
           </el-table>
@@ -102,13 +102,20 @@ import myheader from "@/components/header.vue"
 import { request, uploadFile } from "@/utils/request"
 import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
 import { Edit, CaretBottom } from "@element-plus/icons-vue"
-import { cs } from "element-plus/es/locale/index.mjs"
+import { cs, ta } from "element-plus/es/locale/index.mjs"
 let formLabelWidth3 = ref(100)
 let formLabelWidth200 = ref(200)
-let cstnum = ref("")
+let cstn = ref("")
+let pid = ref("")
+let cstid = ref("")
 let cstvalue = ref({
-  
+  uppern1: "",
+  lowern1: "",
+  uppern2: "",
+  lowern2: "",
 })
+let upperb = ref("")
+let lowerb = ref("")
 let tableDatacst = ref([{ date: "上表面CST参数" }, { date: "下表面CST参数" }])
 let tablecstHeaders = ref([])
 // cst时间
@@ -117,7 +124,7 @@ const clickblur = () => {
   tablecstHeaders.value = []
   let arrheader = []
   let tablearr = []
-  let num = Number(cstnum.value)
+  let num = Number(cstn.value)
   if (num == 0 || num == undefined || num == null) {
   } else {
     for (let i = 1; i <= num + 1; i++) {
@@ -141,9 +148,38 @@ const clickblur = () => {
   }
 }
 
+// 获取upperb和lowerb
+const getupperlower = () => {
+  const upperRow = tableDatacst.value[0];
+  const lowerRow = tableDatacst.value[1];
+  let upperbValues = [];
+  let lowerbValues = [];
+
+  // 处理第一行数据
+  for (let key in upperRow) {
+      if (key !== "date") {
+        upperbValues.push(upperRow[key]);
+      }
+  }
+  // 将拼接后的值存储在 upperb 中
+  upperb.value = upperbValues.join(",");
+
+  // 处理第二行数据
+  for (let key in lowerRow) {
+      if (key !== "date") {
+        lowerbValues.push(lowerRow[key]);
+      }
+    }
+  // 将拼接后的值存储在 lowerb 中
+  lowerb.value = lowerbValues.join(",");
+}
+
+
+
 //查询cst 
 const getcst = (id) => {
   pid.value=id;
+  console.log('getcst:',pid.value)
   const params = {
     transCode: 'MDO0040',
     pid: pid.value,
@@ -151,20 +187,38 @@ const getcst = (id) => {
   request(params)
     .then((res) => {
 
-      if (res.hasOwnProperty('eid')) {
+      if (res.hasOwnProperty('cstid')) {
 
-        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;
+        cstid.value = res.cstid;
+        cstn.value = res.cstn;
+        cstvalue.value.uppern1 = res.uppern1;
+        cstvalue.value.lowern1 = res.lowern1;
+        cstvalue.value.uppern2 = res.uppern2;
+        cstvalue.value.lowern2 = res.lowern2;
+        // upperb.value = res.upperb;
+        // lowerb.value = res.lowerb;
 
+        // 解析 upperb 和 lowerb
+        let upperbValues = res.upperb ? res.upperb.split(",") : [];
+        let lowerbValues = res.lowerb ? res.lowerb.split(",") : [];
+        
+        tableDatacst.value.forEach((row, rowIndex) => {
+          if (rowIndex === 0) {
+            // 第一行赋值 upperb
+            tablecstHeaders.value.forEach((header, index) => {
+              if (index < upperbValues.length) {
+                row[header.prop] = upperbValues[index]; // 赋值对应列
+              }
+            });
+          } else if (rowIndex === 1) {
+            // 第二行赋值 lowerb
+            tablecstHeaders.value.forEach((header, index) => {
+              if (index < lowerbValues.length) {
+                row[header.prop] = lowerbValues[index]; // 赋值对应列
+              }
+            });
+          }
+        });
         // youhua=res;
 
       } else {
@@ -177,6 +231,34 @@ const getcst = (id) => {
     })
 }
 
+//cst 保存
+const getcstsave = () => {
+  getupperlower();
+  const params = {
+    transCode: 'MDO0041',
+    pid: pid.value,
+    cstn: cstn.value,
+    uppern1: cstvalue.value.uppern1,
+    lowern1: cstvalue.value.lowern1,
+    uppern2: cstvalue.value.uppern2,
+    lowern2: cstvalue.value.lowern2,
+    upperb: upperb.value,
+    lowerb: lowerb.value,
+    checked:1
+  }
+  request(params)
+    .then((res) => {
+      ElMessage({
+        message: res.returnMsg,
+        type: 'success',
+      })
+    })
+    .catch((err) => {
+      ElMessage.error(err.returnMsg)
+    })
+}
+
+defineExpose({getcst,getcstsave});
 
 </script>
 

+ 138 - 31
src/views/titlecomponent/ffds.vue

@@ -1,16 +1,37 @@
 <template>
   <div class="XFpdding">
     <div>
-      <el-form-item label="FFD box:" :label-width="formLabelWidth1">
-        <el-input
-          v-model="cstnum"
-          :max="20"
-          controls-position="right"
-          @keydown.enter="keydownenter"
-        />
+      <el-form-item label="FFD包围盒:" :label-width="formLabelWidth1" style="align-items: center;">
+        <el-row align="middle" :gutter="20">
+          <el-col :span="22">
+            <el-input
+              v-model="ffdvalue.fname"
+              :max="20"
+              controls-position="right"
+              @keydown.enter="keydownenter"
+            />
+          </el-col>
+          <el-col :span="2">
+            <el-upload
+            class="upload-demo"
+            action="your-upload-api-endpoint"  
+            :on-success="handleUploadSuccess"
+            :on-error="handleUploadError"
+            :show-file-list="false"
+            >
+            <img 
+            src="" 
+            alt="Button Image" 
+            style="width: 40px; height: 40px; cursor: pointer;"
+            @click="handleUploadClick" 
+            />
+            </el-upload>
+          </el-col>
+        </el-row>
+        
       </el-form-item>
       <el-form-item label="参考坐标系:" :label-width="formLabelWidth1">
-        <el-radio-group v-model="radio1">
+        <el-radio-group v-model="order">
           <el-radio :value="0" :label="0">x-y-z</el-radio>
           <el-radio :value="1" :label="1">x-z-y</el-radio>
           <el-radio :value="2" :label="2">y-x-z</el-radio>
@@ -22,14 +43,14 @@
     </div>
     <el-form-item label="控制点数:" :label-width="formLabelWidth1">
       <div style="display: flex">
-        <el-input type="text" style="margin-right: 10px" v-model="cstnumX">
+        <el-input type="text" style="margin-right: 10px" v-model="ffdvalue.nx">
           <!-- <template #prepend>X方向</template> -->
           <template #prefix>X方向</template>
         </el-input>
-        <el-input type="text" style="margin-right: 10px" v-model="cstnumY">
+        <el-input type="text" style="margin-right: 10px" v-model="ffdvalue.ny">
           <template #prefix>Y方向</template>
         </el-input>
-        <el-input type="text" style="margin-right: 10px" v-model="cstnumZ">
+        <el-input type="text" style="margin-right: 10px" v-model="ffdvalue.nz">
           <template #prefix>Z方向</template>
         </el-input>
         <el-button @click="generateTable">应用</el-button>
@@ -45,7 +66,7 @@
           :label="item.label"
         >
           <template #default="{ row }">
-            <el-input v-model="row[item.prop]" @change="handleEdit(row)" />
+            <el-input v-model="row[item.prop]" />
           </template>
         </el-table-column>
       </el-table>
@@ -62,22 +83,17 @@ import { Edit, CaretBottom } from "@element-plus/icons-vue"
 let formLabelWidth3 = ref(100)
 let formLabelWidth200 = ref(200)
 let cstnum = ref("")
-let cstnumX = ref()
-let cstnumY = ref()
-let cstnumZ = ref()
-let youhua = ref({
-  algorithm: "GA",
-  popsize: 1,
-  epoch: 100,
-  probcrossover: 0.1,
-  probmut: 0.1,
-  proboperator: "SBX交叉",
-  probscale: 1,
-  strategy: "最佳保留策略",
-  operator: "倒位变异",
-  gpu: "YES"
+let pid = ref()
+let fid = ref()
+let ffdid = ref()
+let ffdvalue = ref({
+  fname: "",
+  nx: 0,
+  ny: 0,
+  nz: 0
 })
-let radio1 = ref(0)
+let order = ref(0)
+let vars = ref()
 let tableDatacst1 = ref([])
 let tablecstHeaders = ref([]) // 表格列头
 
@@ -85,15 +101,15 @@ const generateTable = () => {
   console.log("generateTable");
 
   // 获取X, Y, Z方向的数值
-  const xCount = Number(cstnumX.value);
-  const yCount = Number(cstnumY.value);
-  const zCount = Number(cstnumZ.value);
+  const xCount = Number(ffdvalue.value.nx);
+  const yCount = Number(ffdvalue.value.ny);
+  const zCount = Number(ffdvalue.value.nz);
 
   // 根据选中的参考坐标系来确定列名和行名
   let columns = [];
   let rows = [];
 
-  switch (radio1.value) {
+  switch (order.value) {
     case 0: // x-y-z
       columns = Array.from({ length: xCount }, (_, i) => ({ label: `x${i + 1}`, prop: `x${i + 1}` }));
       rows = Array.from({ length: yCount }, (_, i) => ({ label: `y${i + 1}`, prop: `y${i + 1}` }));
@@ -136,6 +152,97 @@ const generateTable = () => {
   }
 };
 
+// 用来生成 vars,存储表格中除了行名与列名的所有值
+const generateVars = () => {
+  let values = [];
+
+  tableDatacst1.value.forEach(row => {
+    tablecstHeaders.value.forEach(col => {
+      let value = row[col.prop];
+      if (value === null || value === undefined || value === '') {
+        value = ' ';
+      }
+      values.push(value);
+    });
+  });
+
+  // 将值拼接成用逗号分隔的字符串
+  vars.value = values.join(',');
+};
+
+const initializeTableFromVars = () => {
+  if (!vars.value) return; 
+
+  const values = vars.value.split(','); 
+
+  let index = 0; 
+
+  // 遍历 tableDatacst1 中的每一行
+  tableDatacst1.value.forEach(row => {
+    columns.forEach(col => {
+      if (index < values.length) {
+        // 将解析后的值赋给相应的单元格
+        row[col.prop] = values[index] === ' ' ? '' : values[index]; // 空格用空字符串代替
+        index++; 
+      }
+    });
+  });
+};
+
+
+// ffd查询
+const getffd = (id) => {
+  pid.value = id;
+  const params = {
+    transCode: "MDO0043",
+    pid: pid.value
+  };
+  request(params).then((res) => {
+    if (res.hasOwnProperty("ffdid")) {
+      ffdid.value = res.ffd;
+      ffdvalue.value.fname = res.fname;
+      ffdvalue.value.nx = res.nx;
+      ffdvalue.value.ny = res.ny;
+      ffdvalue.value.nz = res.nz;
+      order.value = Number(res.order);
+      vars.value = res.vars;
+      initializeTableFromVars();
+    }
+  })
+  .catch((err) => {
+      ElMessage.error(err.returnMsg)
+    })
+};
+
+// ffd保存
+const getffdsave = () => {
+  generateVars();
+  const params = {
+    transCode: "MDO0044",
+    pid: pid.value,
+    fid: fid.value,
+    fname: ffdvalue.value.fname,
+    nx: ffdvalue.value.nx,
+    ny: ffdvalue.value.ny,
+    nz: ffdvalue.value.nz,
+    order: order.value,
+    vars: vars.value,
+    checked:1
+  };
+  request(params)
+    .then((res) => {
+      ElMessage({
+        message: res.returnMsg,
+        type: 'success',
+      })
+    })
+    .catch((err) => {
+      ElMessage.error(err.returnMsg);
+    });
+};
+
+defineExpose({ getffd, getffdsave });
+
 </script>