liuqiao 3 yıl önce
ebeveyn
işleme
7199f83a08
53 değiştirilmiş dosya ile 15310 ekleme ve 41 silme
  1. 1 1
      public/static/black.css
  2. 6 2
      public/static/white.css
  3. BIN
      src/assets/3d_images/re.png
  4. BIN
      src/assets/3d_images/wg.png
  5. BIN
      src/assets/3d_images/xuz.png
  6. BIN
      src/assets/3d_images/y.png
  7. BIN
      src/assets/3d_images/y2.png
  8. BIN
      src/assets/icon/u10048.png
  9. BIN
      src/assets/icon/u10068.png
  10. BIN
      src/assets/icon/u10115.png
  11. BIN
      src/assets/icon/u10140.png
  12. BIN
      src/assets/icon/u10144.png
  13. BIN
      src/assets/icon/u10148.png
  14. BIN
      src/assets/icon/u10152.png
  15. BIN
      src/assets/icon/u10156.png
  16. BIN
      src/assets/icon/u10160.png
  17. BIN
      src/assets/icon/u9588.png
  18. BIN
      src/assets/icon/u9616.png
  19. BIN
      src/assets/icon/u9637.png
  20. BIN
      src/assets/icon/u9681.png
  21. BIN
      src/assets/icon/u9700.png
  22. BIN
      src/assets/icon/u9823.png
  23. BIN
      src/assets/icon/u9872.png
  24. BIN
      src/assets/icon/u9987.png
  25. 76 1
      src/components/language/en.js
  26. 89 14
      src/components/language/zh.js
  27. 4638 0
      src/views/index/HCFDLab/HCFD_OLD.vue
  28. 150 0
      src/views/index/HCFDLab/TFileStream.vue
  29. BIN
      src/views/index/HCFDLab/Uploader.swf
  30. 14 0
      src/views/index/HCFDLab/Util.js
  31. 0 0
      src/views/index/HCFDLab/chartSRS.vue
  32. 545 0
      src/views/index/HCFDLab/demo.vue
  33. 114 0
      src/views/index/HCFDLab/doem.vue
  34. 301 0
      src/views/index/HCFDLab/echartsHFCD.vue
  35. 102 0
      src/views/index/HCFDLab/echartstep.vue
  36. 127 0
      src/views/index/HCFDLab/filesload.vue
  37. 265 0
      src/views/index/HCFDLab/fileupload.vue
  38. 85 0
      src/views/index/HCFDLab/hcfdCalculator.vue
  39. 279 0
      src/views/index/HCFDLab/hcfdload/BoundaryLoad.js
  40. 202 0
      src/views/index/HCFDLab/hcfdload/UgridLoad.js
  41. 303 0
      src/views/index/HCFDLab/hcfdload/VolumLoad.js
  42. 97 0
      src/views/index/HCFDLab/hcfdsso.vue
  43. 164 0
      src/views/index/HCFDLab/highchartest.vue
  44. 4489 18
      src/views/index/HCFDLab/index.vue
  45. 304 0
      src/views/index/HCFDLab/index11.vue
  46. 231 0
      src/views/index/HCFDLab/index_old.vue
  47. 139 0
      src/views/index/HCFDLab/loading.vue
  48. 820 0
      src/views/index/HCFDLab/loads/BoundaryLoad.vue
  49. 404 0
      src/views/index/HCFDLab/loads/UgridLoad.vue
  50. 891 0
      src/views/index/HCFDLab/loads/VolumLoad.vue
  51. 363 0
      src/views/index/HCFDLab/loads/transformtool.vue
  52. 110 0
      src/views/index/HCFDLab/websocket.vue
  53. 1 5
      src/views/index/index.vue

+ 1 - 1
public/static/black.css

@@ -98,7 +98,7 @@ background-color: #757070;
       border-radius: 5px;
       box-sizing: border-box;
     }
-    .text_color{
+    .text_color,.liitem .formLabelWidth8{
       color: #d5d5d5;
     }
     .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{

+ 6 - 2
public/static/white.css

@@ -62,9 +62,13 @@
         border-radius: 5px;
         box-sizing: border-box;
       }
-      .text_color{
+      .text_color,.liitem .formLabelWidth8{
         color: #747474;
       }
       .el-tabs--card>.el-tabs__header .el-tabs__item.is-active{
         color: #000;
-      }
+      }
+      .el-input__inner {
+        color: #000; 
+         border: 1px solid #666;
+    }

BIN
src/assets/3d_images/re.png


BIN
src/assets/3d_images/wg.png


BIN
src/assets/3d_images/xuz.png


BIN
src/assets/3d_images/y.png


BIN
src/assets/3d_images/y2.png


BIN
src/assets/icon/u10048.png


BIN
src/assets/icon/u10068.png


BIN
src/assets/icon/u10115.png


BIN
src/assets/icon/u10140.png


BIN
src/assets/icon/u10144.png


BIN
src/assets/icon/u10148.png


BIN
src/assets/icon/u10152.png


BIN
src/assets/icon/u10156.png


BIN
src/assets/icon/u10160.png


BIN
src/assets/icon/u9588.png


BIN
src/assets/icon/u9616.png


BIN
src/assets/icon/u9637.png


BIN
src/assets/icon/u9681.png


BIN
src/assets/icon/u9700.png


BIN
src/assets/icon/u9823.png


BIN
src/assets/icon/u9872.png


BIN
src/assets/icon/u9987.png


+ 76 - 1
src/components/language/en.js

@@ -19,6 +19,14 @@ export const HCFD = {
     ascii: "ASCII",
     loadgrid: "Load Grid File",
     loadbc: "Load BC File",
+    cancel:"Cancel",
+    ok:"Ok",
+    updata:"Reupload",
+    save:"Save",
+    load:"Load",
+    projectid:"Project ID",
+    projectname:'Project Name',
+    create:"Project Create Time",
   },
   geneal: {
     geneal: 'General',
@@ -26,7 +34,19 @@ export const HCFD = {
     scale: 'Scale',
     factor: 'Factor',
     translation: 'Translation',
+    distance:"Distance",
+    translationx:"X-Component of Translation Unit Vector",
+    translationx:"X-Component of Translation Unit Vector",
+    translationy:"Y-Component of Translation Unit Vector",
+    translationz:"Z-Component of Translation Unit Vector",
     rotation: 'Rotation',
+    angle:'Angle(deg)',
+    rotationx:"X-Coordinate of Rotation Origin",
+    rotationy:"Y-Coordinate of Rotation Origin",
+    rotationz:"Z-Coordinate of Rotation Origin",
+    rotationx1:'X-Component of Rotation Axis Unit Vector',
+    rotationy1:'Y-Component of Rotation Axis Unit Vector',
+    rotationz1:'Z-Component of Rotation Axis Unit Vector',
     analysis: 'Analysis Type',
     steady: 'Steady',
     unsteady: 'Unsteady',
@@ -44,12 +64,27 @@ export const HCFD = {
     viscous: 'Viscous Model',
     inviscid: 'Inviscid',
     laminar: 'Laminar',
+    molecular:"Molecular Prandtl Number",
     turbulent: 'Turbulent',
+    Molecular:"Molecular Prandtl Number",
+    turbulents:'Turbulent Prandtl Number',
     boundary: 'Boundary Conditions',
     dynamic: 'Dynamic Mesh',
     reference: 'Reference Conditions',
     machNum: 'Mach Number',
     reyNum: 'Reynolds Number',
+    temperature:"Temperature",
+    kelvin:" Kelvin",
+    rankine:"Rankine",
+    attack:"Angle of Angle of Attack (deg)",
+    yaw:"Angle of Yaw (deg)",
+    area:"Reference Area",
+    yaxis:"Length In X About Moment of Y Axis",
+    zaxis:"Length In Y About Moment of X and Z Axis",
+    momentc:'Location of Moment Center',
+    xcoordinate:"X-Coordinate",
+    ycoordinate:"Y-Coordinate",
+    zcoordinate:"Z-Coordinate",
     nonitertial: 'Noninertial Reference Frame'
   },
   solution: {
@@ -61,7 +96,20 @@ export const HCFD = {
     muscl: 'MUSCL Re-Construction Scheme',
     firstOrderNum: 'Number Of First Order Iterations',
     timeAdvance: 'Time Advanced Scheme',
+    stepping:'Pseudo Time Stepping',
+    nondim:'Time Step Nondim',
+    subiterations:'Subiterations',
+    cfl:'Schedule Iteration For Ramped CFL',
+    Schedulecfl:'Schedule CFL',
+    cflturb:"Schedule CFL Turb",
     timeScheme: 'Time Scheme',
+    steady:"Steady",
+    torde:"1storder",
+    ndorder:"2ndorder",
+    ndorderOPT:"2ndorderOPT",
+    rdorder:"3rdorder",
+    thorderMEBDF:"4thorderMEBDF4",
+    thorderESDIRK:"4thorderESDIRK4",
     pseudo: 'Pseudo Time Stepping',
     timeStep: 'Time Step Nondim',
     subiterations: 'Subiterations',
@@ -75,16 +123,43 @@ export const HCFD = {
     run: 'Run Control',
     iterNum: 'Number Of Iterations',
     stopToler: 'Stopping Tolerance',
+    writeFreq:'Restart Write Freq',
+    evaluate:'Jacobian Evaluate Freq',
+    Restart:'Read Restart',
     outCon: 'Output Control',
     bounOut: 'Boundary Output',
+    outputfreq:'Output Freq',
+    Variables:' Output Variables',
+    all:"All",
+    Xcomponent:"X-component of velocity",
+    Ycomponent:"Y-component of velocity",
+    Zcomponent:"Z-component of velocity",
+    Press:"Press",
+    presscoefficient:"Press coefficient",
+    mnumber:"Mach Number",
+    magnitude:"Vorticity magnitude",
+    Xvorticity:"X-component of vorticity",
+    Yvorticity:"Y-component of vorticity",
+    Zvorticity:"Z-component of vorticity",
+    Criterion:"Q Criterion",
     volOut: 'Volume Output',
     advance: 'Advanced Option',
     specialPara: 'Special Parameters',
     swapYZ: 'Swap Y-Z Axes',
+    Resource:"Resource selection",
     monitor: 'Monitor'
   },
   results: {
-    results: 'Results'
+    results: 'Results',
+    Surfacegrid:'Surface Grid',
+    steps:'Steps',
+    scalar:'Scalar Selection',
+    contour:"Contour Level",
+    vector:"Vector Selection",
+    show:"Show Element",
+    Surface:'Show  Surface',
+    volume:'Volume Grid',
+    ShowVolume:'Show Volume'
   },
   tool: {
     tool: 'Tool',

+ 89 - 14
src/components/language/zh.js

@@ -19,6 +19,14 @@ export const HCFD = {
     ascii: "ASCII",
     loadgrid: "网格文件",
     loadbc: "BC文件",
+    cancel:"取消",
+    ok:"确认",
+    updata:"上传",
+    save:"保存",
+    load:'打开',
+    projectid:'项目ID',
+    projectname:"名称",
+    create:"创建时间"
   },
   geneal: {
     geneal: '通用设置',
@@ -26,7 +34,18 @@ export const HCFD = {
     scale: '比例尺',
     factor: '值',
     translation: '翻译',
+    distance:"距离",
+    translationx:"平移单位向量的X分量",
+    translationy:"平移单位向量的Y分量",
+    translationz:"平移单位向量的Z分量",
     rotation: '旋转',
+    angle:"角(deg)",
+    rotationx:"旋转原点的X坐标",
+    rotationy:"旋转原点的Y坐标",
+    rotationz:"旋转原点的Z坐标",
+    rotationx1:'旋转轴单位矢量的X分量',
+    rotationy1:'旋转轴单位矢量的Y分量',
+    rotationz1:'旋转轴单位矢量的Z分量',
     analysis: '分析类型',
     steady: '定常',
     unsteady: '非定常',
@@ -36,7 +55,7 @@ export const HCFD = {
     number: '处理器数',
   },
   physics: {
-    physics: '物理模',
+    physics: '物理模',
     gover: '控制方程',
     compress: '可压缩理想气体',
     incompress: '不可压缩理想气体',
@@ -44,16 +63,31 @@ export const HCFD = {
     viscous: '粘性模型',
     inviscid: '无粘',
     laminar: '层流',
+    molecular:"层流普朗特数",
     turbulent: '湍流',
+    Molecular:"层流普朗特数",
+    turbulents:'湍流普朗特数',
     boundary: '边界条件',
     dynamic: '运动网格',
     reference: '参考条件',
     machNum: '马赫数',
     reyNum: '雷诺数',
-    nonitertial: '非惯性参考系'
+    temperature:"温度",
+    kelvin:" 开尔文",
+    rankine:"兰金刻度",
+    attack:"攻角(度)",
+    yaw:"侧滑角(度)",
+    area:"参考面积",
+    yaxis:"Y轴力矩在X方向的力臂",
+    zaxis:"X和Z轴力矩在Y方向的力臂",
+    momentc:'力矩中心位置',
+    xcoordinate:"X坐标",
+    ycoordinate:"Y坐标",
+    zcoordinate:"Z坐标",
+    nonitertial: ' 非惯性参考系'
   },
   solution: {
-    solution: '求解控制',
+    solution: '求解设置',
     invis: '无粘通量方法',
     fluxResCon: '通量残差构造方法',
     flux: '通量限制器',
@@ -61,7 +95,20 @@ export const HCFD = {
     muscl: 'MUSCL 改造方案',
     firstOrderNum: '一阶空间精度迭代步数',
     timeAdvance: '时间推进格式',
+    stepping:'隐式时间步进',
+    nondim:'无量纲时间步长',
+    subiterations:'子迭代步数',
+    cfl:'指定CFL数的迭代数',
+    Schedulecfl:'层流CFL数',
+    cflturb:" 湍流CFL数",
     timeScheme: '时间格式',
+    steady:"定常",
+    torde:"1阶差分",
+    ndorder:"2阶差分",
+    ndorderOPT:"最优2阶差分",
+    rdorder:"3阶差分",
+    thorderMEBDF:"4阶差分",
+    thorderESDIRK:"4阶隐式RK",
     pseudo: '隐式时间步进',
     timeStep: '无量纲时间步长',
     subiterations: '子迭代步数',
@@ -72,19 +119,47 @@ export const HCFD = {
     initialization: "初始化",
     freestreams: '自由流',
     specified: 'Specified Initialize Region',
-    run: 'Run Control',
-    iterNum: 'Number Of Iterations',
-    stopToler: 'Stopping Tolerance',
-    outCon: 'Output Control',
-    bounOut: 'Boundary Output',
-    volOut: 'Volume Output',
-    advance: 'Advanced Option',
-    specialPara: 'Special Parameters',
-    swapYZ: 'Swap Y-Z Axres',
-    monitor: 'Monitor'
+    run: ' 运行控制',
+    iterNum: '迭代步数',
+    stopToler: ' 终止残差',
+    writeFreq:'续算文件输出频率',
+    evaluate:'雅可比矩阵计算频率',
+    Restart:'续算',
+    outCon: '输出控制',
+    bounOut: '物面输出',
+    outputfreq:'输出频率',
+    Variables:' 输出变量',
+    all:"全部",
+    Xcomponent:"X方向速度分量",
+    Ycomponent:"Y方向速度分量",
+    Zcomponent:"Z方向速度分量",
+    Press:"压力",
+    presscoefficient:"压力系数",
+    mnumber:"马赫数",
+    magnitude:"涡量幅值",
+    Xvorticity:"X方向涡量分量",
+    Yvorticity:"Y方向涡量分量",
+    Zvorticity:"Z方向涡量分量",
+    Criterion:"Q准则",
+
+    volOut: '流场输出',
+    advance: '高级选项',
+    specialPara: '特殊的参数',
+    swapYZ: '交换Y-Z轴',
+    monitor: 'Monitor',
+    Resource:'资源选择',
   },
   results: {
-    results: '结果'
+    results: '结果显示',
+    Surfacegrid:'表面网格',
+    steps:'步数',
+    scalar:'数量选择',
+    contour:"颜色控制",
+    vector:'向量的选择',
+    show:'显示元素',
+    Surface:"显示表面",
+    volume:'Volume Grid',
+    ShowVolume:' 显示流场'
   },
   tool: {
     tool: '工具',

+ 4638 - 0
src/views/index/HCFDLab/HCFD_OLD.vue

@@ -0,0 +1,4638 @@
+<template>
+  <div ref="all_w">
+    <transformtool ref="transform"></transformtool>
+    <el-container style="height: 100vh">
+      <el-header class="fixed-header">
+        <el-menu class="headMenu_1" mode="horizontal">
+          <div class="log">
+            <el-image :src="adilog"></el-image>
+          </div>
+          <div class="log logtitle">
+            <li>&nbsp;&nbsp;HCFDLab</li>
+          </div>
+          <el-submenu index="1" v-show="newload">
+            <template slot="title">{{ $t("HCFD.file.file") }}</template>
+            <div>
+              <el-menu-item
+                index="1-1"
+                v-if="missType"
+                @click="clickNew"
+                >{{ $t("HCFD.file.new") }}</el-menu-item
+              >
+              <el-menu-item
+                v-if="missType"
+                index="1-2"
+                @click="
+                  dialog.load_visiable = true;
+                  loadProjects();
+                "
+                >{{ $t("HCFD.file.load") }}</el-menu-item
+              >
+              <el-menu-item v-if="!missType" index="1-3" @click="dialog.upload_visiable = true"
+                >upLoad</el-menu-item
+              >
+            </div>
+          </el-submenu>
+          <el-menu-item index="2" @click="showHeadMenu('geneal')">{{
+            $t("HCFD.geneal.geneal")
+          }}</el-menu-item>
+          <el-menu-item index="3" @click="showHeadMenu('physics')">{{
+            $t("HCFD.physics.physics")
+          }}</el-menu-item>
+          <el-menu-item index="4" @click="showHeadMenu('solution')">{{
+            $t("HCFD.solution.solution")
+          }}</el-menu-item>
+          <el-menu-item index="5" @click="showHeadMenu('result')">{{
+            $t("HCFD.results.results")
+          }}</el-menu-item>
+          <el-submenu index="6">
+            <template slot="title">{{ $t("HCFD.tool.tool") }}</template>
+            <el-menu-item index="6-1" @click="unitConversion">{{
+              $t("HCFD.tool.unitConversion")
+            }}</el-menu-item>
+            <el-menu-item class="24" index="6-2" @click="yCalchange">{{
+              $t("HCFD.tool.yCal")
+            }}</el-menu-item>
+            <el-menu-item index="6-3" @click="reyCalchange">{{
+              $t("HCFD.tool.reyCal")
+            }}</el-menu-item>
+            <!-- <el-menu-item index="6-4" @click="atmoCalchange">{{
+              $t("HCFD.tool.atmoCal")
+            }}</el-menu-item> -->
+          </el-submenu>
+          <!-- <el-submenu index="7">
+            <template slot="title">{{ $t("HCFD.help.help") }}</template>
+            <el-menu-item index="7-1">{{ $t("HCFD.help.about") }}</el-menu-item>
+            <el-menu-item index="7-2">{{
+              $t("HCFD.help.theroy")
+            }}</el-menu-item>
+            <el-menu-item index="7-3">{{ $t("HCFD.help.user") }}</el-menu-item>
+            <el-menu-item index="7-4">{{ $t("HCFD.help.appli") }}</el-menu-item>
+          </el-submenu> -->
+        </el-menu>
+      </el-header>
+      <div v-show="headMenu_2Show" class="headMenu_2" id="head2">
+        <div v-show="gennealShow" class="lg_weiyi">
+          <div class="el-padding">
+            <el-row>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.geneal.mesh") }}</li>
+                <div class="title_content_1">
+                  <el-button size="mini" type="success" @click="dialog.scale_visiable = true">
+                    <el-image :src="scaleimage"></el-image
+                    >{{ $t("HCFD.geneal.scale") }}
+                  </el-button>
+                  <el-button size="mini" type="success" @click="dialog.translation_visiable = true">
+                    <el-image :src="transformimage"></el-image
+                    >{{ $t("HCFD.geneal.translation") }}
+                  </el-button>
+                  <el-button size="mini" type="success" @click="dialog.rotation_visiable = true">
+                    <el-image :src="rotationimage"></el-image
+                    >{{ $t("HCFD.geneal.rotation") }}
+                  </el-button>
+                </div>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.geneal.analysis") }}</li>
+                <el-radio
+                  v-model="parameterObj.nmlParam.analysis_Type"
+                  label="Steady"
+                  >{{ $t("HCFD.geneal.steady") }}</el-radio
+                >
+                <el-radio
+                  v-model="parameterObj.nmlParam.analysis_Type"
+                  label="Unsteady"
+                  >{{ $t("HCFD.geneal.unsteady") }}</el-radio
+                >
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="8">
+                <li class="title" id="lg-title">
+                  {{ $t("HCFD.geneal.parallel") }}
+                </li>
+                <el-radio-group
+                  v-model="parameterObj.nmlParam.parallel_Optional"
+                >
+                  <el-radio label="Serial">
+                    {{ $t("HCFD.geneal.serial") }}</el-radio
+                  >
+                  <el-radio label="MPI Parallel">{{
+                    $t("HCFD.geneal.mpi")
+                  }}</el-radio>
+                </el-radio-group>
+                <li
+                  class="disacent"
+                  style="padding: 6px 0 6px 3.125vw"
+                  v-if="
+                    parameterObj.nmlParam.parallel_Optional == 'MPI Parallel'
+                  "
+                >
+                  <span>{{ $t("HCFD.geneal.number") }}</span>
+                  <el-input
+                    size="mini"
+                    style="width:20%"
+                    v-model="parameterObj.nmlParam.number_of_Processors"
+                  ></el-input>
+                </li>
+              </el-col>
+            </el-row>
+          </div>
+        </div>
+        <!-- 第二的一个导航条点击事件 -->
+        <div v-show="physicsShow" class="lg-er">
+          <div class="el-padding">
+            <el-row>
+              <el-col :span="4">
+                <li class="title">{{ $t("HCFD.physics.gover") }}</li>
+                <el-radio-group
+                  v-model="parameterObj.nmlParam.eqn_type"
+                  size="mini"
+                >
+                  <el-radio label="cal_perf_compress">{{
+                    $t("HCFD.physics.compress")
+                  }}</el-radio>
+                  <el-radio label="cal_perf_incompress">{{
+                    $t("HCFD.physics.incompress")
+                  }}</el-radio>
+                </el-radio-group>
+                <!-- <table>
+                  <tr>
+                    <td>{{ $t("HCFD.physics.artifical") }}</td>
+                    <td>
+                      <el-input
+                        size="mini"
+                        v-model="parameterObj.nmlParam.artificial_compress"
+                      ></el-input>
+                    </td>
+                  </tr>
+                </table> -->
+                <li class="disflex">
+                  <span>{{ $t("HCFD.physics.artifical") }}</span>
+                  <el-input
+                        class='inpw75'
+                        size="mini"
+                        v-model="parameterObj.nmlParam.artificial_compress"
+                      ></el-input>
+                </li>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="2">
+                <li class="title">{{ $t("HCFD.physics.viscous") }}</li>
+                <el-radio-group
+                  v-model="parameterObj.nmlParam.viscous_terms"
+                  @change="viscouschange()"
+                  size="mini"
+                >
+                  <el-radio-button label="inviscid">
+                    <el-image :src="inviscid"></el-image
+                    >{{ $t("HCFD.physics.inviscid") }}
+                  </el-radio-button>
+                  <el-radio-button
+                    @click.native="physicslaminar()"
+                    label="laminar"
+                  >
+                    <el-image :src="laminar"></el-image
+                    >{{ $t("HCFD.physics.laminar") }}
+                  </el-radio-button>
+                  <el-radio-button
+                    @click.native="physicsturbulent()"
+                    label="turbulent"
+                  >
+                    <el-image :src="turbulent"></el-image>
+                    {{ $t("HCFD.physics.turbulent") }}
+                  </el-radio-button>
+                </el-radio-group>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.physics.boundary") }}</li>
+                <el-select
+                  class="inpw100"
+                  size="mini"
+                  @change="boundaryChange"
+                  v-model="Physics.Boundary.bquery"
+                  placeholder="select boundary"
+                >
+                  <el-option
+                    v-for="hcfdBoundary in parameterObj.hcfdBoundarys"
+                    :key="hcfdBoundary.id"
+                    :label="hcfdBoundary.name"
+                    :value="hcfdBoundary.id"
+                  >
+                  </el-option>
+                </el-select>
+                <el-select
+                  class="inpw100"
+                  size="mini"
+                  @change="conditionsChange"
+                  v-model="Physics.Boundary.cquery"
+                  placeholder="select Conditions"
+                >
+                  <el-option
+                    v-for="Condition in Physics.Boundary.Conditions"
+                    :key="Condition.conditionsCode"
+                    :label="Condition.name"
+                    :value="Condition.conditionsCode"
+                  >
+                  </el-option>
+                </el-select>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.physics.dynamic") }}</li>
+                <el-radio
+                  v-model="parameterObj.nmlParam.dynamic_Mesh"
+                  label="on"
+                  >on</el-radio
+                >
+                <el-radio
+                  v-model="parameterObj.nmlParam.dynamic_Mesh"
+                  label="off"
+                  >off</el-radio
+                >
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3" style="position:relative">
+                <li class="title">{{ $t("HCFD.physics.reference") }}</li>
+                <li class="disflex">
+                  <span>{{ $t("HCFD.physics.machNum") }}</span>
+                  <el-input
+                        class="inpw50"
+                        size="mini"
+                        v-model="parameterObj.nmlParam.mach_number"
+                      ></el-input>
+                </li>
+                <li class="disflex">
+                  <span>{{ $t("HCFD.physics.reyNum") }}</span>
+                  <el-input
+                        class="inpw50"
+                        size="mini"
+                        v-model="parameterObj.nmlParam.reynolds_number"
+                      ></el-input>
+                </li>
+                  <el-button
+                    size="mini"
+                    type="text"
+                    style="position:absolute;bottom:-15px;right:-10px"
+                    icon="el-icon-arrow-down"
+                    @click="dialog.reference_visiable = true"
+                    >more</el-button
+                  >
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="4">
+                <li class="title">{{ $t("HCFD.physics.nonitertial") }}</li>
+                <el-radio
+                  v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                  label="on"
+                  >on</el-radio
+                >
+                <el-radio
+                  v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                  label="off"
+                  >off</el-radio
+                >
+              </el-col>
+              <!-- <el-col :span="1">
+              <div class="line"></div>
+            </el-col> -->
+            </el-row>
+          </div>
+        </div>
+        <div v-show="solutionShow" class="lg-san">
+          <div class="el-padding">
+            <el-row>
+              <el-col :span="4" class="lg-bu">
+                <li class="title">{{ $t("HCFD.solution.invis") }}</li>
+                <el-button type="success" size="mini" @click="dialog.fluxrc_visiable = true">
+                  <el-image :src="fluxr"></el-image
+                  >{{ $t("HCFD.solution.fluxResCon") }}
+                </el-button>
+                <el-button type="success" size="mini" @click="dialog.fluxl_visiable = true">
+                  <el-image :src="fluxl"></el-image
+                  >{{ $t("HCFD.solution.flux") }}
+                </el-button>
+                <el-button type="success" size="mini" @click="dialog.fluxjc_visiable = true">
+                  <el-image :src="fluxj"></el-image
+                  >{{ $t("HCFD.solution.fluxJacCon") }}
+                </el-button>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.muscl") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.schedule"
+                  ></el-input>
+                </li>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.firstOrderNum") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.first_order_iterations"
+                  ></el-input>
+                </li>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="4">
+                <li class="title">{{ $t("HCFD.solution.timeAdvance") }}</li>
+                <el-button type="success" size="mini" @click="dialog.time_visiable = true">
+                  <el-image :src="times"></el-image
+                  >{{ $t("HCFD.solution.timeScheme") }}
+                </el-button>
+                <li class="disflex">
+                  <span class="marr30">
+                    {{ $t("HCFD.solution.pseudo") }}
+                  </span>
+                  <div class="disflex">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.pseudo_time_stepping"
+                      label="off"
+                      >Off</el-radio
+                    >
+                    <el-radio
+                      v-model="parameterObj.nmlParam.pseudo_time_stepping"
+                      label="on"
+                      >On</el-radio
+                    >
+                  </div>
+                </li>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.timeStep") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.time_step_nondim"
+                  ></el-input>
+                </li>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.subiterations") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.subiterations"
+                  ></el-input>
+                </li>
+                <li class="disrs">
+                  <el-button
+                    size="mini"
+                      type="text"
+                      class="move"
+                    icon="el-icon-arrow-down"
+                    @click="dialog.timeasm_visiable = true"
+                    >more</el-button
+                  >
+                </li>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="4" class="lg-ss">
+                <li class="title">{{ $t("HCFD.solution.linearSol") }}</li>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.meanflow") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.meanflow_sweeps"
+                  ></el-input>
+                </li>
+                <li class="disflex">
+                  <span>
+                    {{ $t("HCFD.solution.turbulence") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.turbulence_sweeps"
+                  ></el-input>
+                </li>
+                <li>
+                  <span class="marr30">
+                    {{ $t("HCFD.solution.gcr") }}
+                  </span>
+                  <el-radio-group v-model="parameterObj.nmlParam.line_implicit">
+                    <el-radio label="off">Off</el-radio>
+                    <el-radio label="on">On</el-radio>
+                  </el-radio-group>
+                </li>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.solution.initialization") }}</li>
+                <el-radio-group v-model="initialization" size="mini">
+                  <el-radio label="freestreams">{{
+                    $t("HCFD.solution.freestreams")
+                  }}</el-radio>
+                  <el-radio label="specified">{{
+                    $t("HCFD.solution.specified")
+                  }}</el-radio>
+                </el-radio-group>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="2" style="position:relative">
+                <li class="title">{{ $t("HCFD.solution.run") }}</li>
+                <li>{{ $t("HCFD.solution.iterNum")}}</li>
+                <li>
+                  <el-input
+                    size="mini"
+                    v-model="parameterObj.nmlParam.steps"
+                  ></el-input>
+                </li>
+                <li>{{ $t("HCFD.solution.stopToler")}}</li>
+                <li>
+                  <el-input
+                    size="mini"
+                    v-model="parameterObj.nmlParam.stopping_tolerance"
+                  ></el-input>
+                </li>
+                  <el-button
+                   type="text"
+                  size="mini"
+                  style="position:absolute;buttom:0;right:0"
+                  icon="el-icon-arrow-down"
+                  @click="dialog.runc_visiable = true"
+                  >more</el-button
+                >
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="3">
+                <li class="title">{{ $t("HCFD.solution.outCon") }}</li>
+                <el-button
+                  size="mini"
+                   type="success"
+                  @click="dialog.boundaryo_visiable = true"
+                >
+                  <el-image :src="boundary"></el-image
+                  >{{ $t("HCFD.solution.bounOut") }}
+                </el-button>
+                <el-button type="success" size="mini" @click="dialog.volumeo_visiable = true">
+                  <el-image :src="volume"> </el-image
+                  >{{ $t("HCFD.solution.volOut") }}
+                </el-button>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="2">
+                <li class="title">{{ $t("HCFD.solution.advance") }}</li>
+                <el-button type="success" size="mini" @click="dialog.specialp_visiable = true">
+                  <el-image :src="special"></el-image
+                  >{{ $t("HCFD.solution.specialPara") }}
+                </el-button>
+                <el-button type="success" size="mini" @click="dialog.swap_visiable = true">
+                  <el-image :src="swap"></el-image
+                  >{{ $t("HCFD.solution.swapYZ") }}
+                </el-button>
+                <div>
+                  <el-button
+                    size="mini"
+                     type="primary"
+                    v-show="runMonitor"
+                    @click="hcfdrun(true)"
+                  >
+                    <div class="disflex">
+                      <el-image :src="run" style="width:15px"></el-image>
+                      <span class="borun">Run</span>
+                    </div>
+                  </el-button>
+                  <el-button
+                    size="mini"
+                    type="primary"
+                    @click="showMonitor()"
+                    v-show="runMonitor"
+                    >Monitor</el-button
+                  >
+                   <el-button
+                    size="mini"
+                    type="primary"
+                    @click="showresource()"
+                    >资源选择</el-button
+                  >
+                </div>
+              </el-col>
+              <!-- <el-col :span="0">
+              <div class="line"></div> </el-col > -->
+            </el-row>
+          </div>
+        </div>
+        <div v-show="resultShow" class="lg-si">
+          <div class="el-padding">
+            <el-row>
+              <el-col :span="9" class="lisin">
+                <li class="title">Surface Grid</li>
+                <div class="flexpad30">
+                  <div>
+                    <li>
+                      <span class='span100'>Steps</span>
+                      <el-select size="mini" v-model="bStep" placeholder="请选择">
+                        <el-option
+                          v-for="setep in boundaryStep"
+                          :key="setep"
+                          :label="setep"
+                          :value="setep"
+                        >
+                        </el-option>
+                      </el-select>
+                    </li>
+                    <li class="disflex">
+                      <div>
+                        <span class='span100'>Scalar Selection</span>
+                        <el-select size="mini" v-model="bScalar" placeholder="请选择">
+                          <el-option
+                            v-for="scalar in boundaryScalars"
+                            :key="scalar"
+                            :label="scalar"
+                            :value="scalar"
+                          >
+                          </el-option>
+                        </el-select>
+                      </div>
+                    </li>
+                  </div>
+                  <div>
+                    <li class="disflex lheig34">
+                      <span class="span100 marb5">Vector Selection</span>
+                      <el-checkbox checked>Velocity</el-checkbox>
+                    </li>
+                    <li class="disflex lheig34">
+                      <span class='span100 marb5' style="width:111px">Show Element</span>
+                      <el-checkbox-group v-model="belementCheckeds" style="display:flex">
+                        <el-checkbox
+                          label="Mesh"
+                          @change="Contourval('Mesh')"
+                        ></el-checkbox>
+                        <el-checkbox
+                          label="Contour"
+                          @change="Contourval('Contour')"
+                        ></el-checkbox>
+                      </el-checkbox-group>
+                    </li>
+                  </div>
+                </div>
+                      <el-button
+                        size="mini"
+                        type="primary"
+                        style="margin:0 0 0 40%"
+                        @click="showSurface()"
+                        >Show Surface</el-button>
+              </el-col>
+              <el-col :span="1">
+                <div class="line"></div>
+              </el-col>
+              <el-col :span="11" class="lg-si-right lisin">
+                <li class="title">Volume Grid</li>
+                <div class="flexpad30">
+                  <div>
+                    <li>
+                      <span class='span100'>Steps</span>
+                      <el-select size="mini" v-model="vStep" placeholder="请选择">
+                        <el-option
+                          v-for="setep in volumStep"
+                          :key="setep"
+                          :label="setep"
+                          :value="setep"
+                        >
+                        </el-option>
+                      </el-select>
+                    </li>
+                    <li class="disflex">
+                      <div>
+                        <span class='span100'>Scalar Selection</span>
+                        <el-select size="mini" v-model="vSalar" placeholder="请选择">
+                          <el-option
+                            v-for="scalar in volumScalars"
+                            :key="scalar"
+                            :label="scalar"
+                            :value="scalar"
+                          >
+                          </el-option>
+                        </el-select>
+                      </div>
+                    </li>
+                  </div>
+                  <div>
+                    <li class="disflex lheig34">
+                      <span class="span100 marb5">Vector Selection</span>
+                      <el-checkbox checked>Velocity</el-checkbox>
+                    </li>
+                    <li class="disflex lheig34">
+                      <span class="span100 marb5" style="width:111px">Show Element</span>
+                      <el-checkbox-group v-model="velementCheckeds" style="display:flex">
+                        <el-checkbox
+                          label="Mesh"
+                          @change="ContourvalVolume('Mesh')"
+                        ></el-checkbox>
+                        <el-checkbox
+                          label="Contour"
+                          @change="ContourvalVolume('Contour')"
+                        ></el-checkbox>
+                      </el-checkbox-group>
+                    </li>
+                  </div>
+                </div>
+                  <el-button
+                     type="primary"
+                    size="mini"
+                    style="margin:0 0 0 34%"
+                    @click="showVolume()"
+                    >Show Volume</el-button
+                  >
+              </el-col>
+            </el-row>
+          </div>
+        </div>
+      </div>
+      <el-container>
+        <el-aside ref="leftMenu_1" class="leftMenu_1_1">
+          <li class="outline">{{ project.projectName }}</li>
+          <el-tree :data="menuList" @node-click="handleNodeClick"> </el-tree>
+        </el-aside>
+        <!-- Task Page的弹框  -->
+        <div class="lg-centent">
+          <div class="lg-modl" v-show="TaskGenealshow">
+            <div class="logs_title">
+              Task Page
+              <div class="x" @click="taskchangGeneal()">x</div>
+            </div>
+            <div class="el-padding Task-lg" :class="headMenu_2Show?'maxh290':'maxh100'">
+              <el-row>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.geneal.mesh") }}</li>
+                  <div>
+                    <li class="discenter padding0">
+                      <el-button size="mini" type="success" @click="dialog.scale_visiable = true">
+                        <el-image :src="scaleimage"></el-image
+                        >{{ $t("HCFD.geneal.scale") }}
+                      </el-button>
+                    </li>
+                    <li class="discenter padding0">
+                      <el-button size="mini" type="success" @click="dialog.translation_visiable = true">
+                        <el-image :src="transformimage"></el-image
+                        >{{ $t("HCFD.geneal.translation") }}
+                      </el-button>
+                    </li>
+                    <li class="discenter padding0">
+                      <el-button size="mini" type="success" @click="dialog.rotation_visiable = true">
+                        <el-image :src="rotationimage"></el-image
+                        >{{ $t("HCFD.geneal.rotation") }}
+                      </el-button>
+                    </li>
+                  </div>
+                </el-col>
+
+                <el-col>
+                  <li class="title">{{ $t("HCFD.geneal.analysis") }}</li>
+                  <div class="pdingf10">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.analysis_Type"
+                      label="Steady"
+                      >{{ $t("HCFD.geneal.steady") }}</el-radio
+                    >
+                    <el-radio
+                      v-model="parameterObj.nmlParam.analysis_Type"
+                      label="Unsteady"
+                      >{{ $t("HCFD.geneal.unsteady") }}</el-radio
+                    >
+                  </div>
+                </el-col>
+
+                <el-col>
+                  <li class="title">{{ $t("HCFD.geneal.parallel") }}</li>
+                  <el-radio-group
+                    v-model="parameterObj.nmlParam.parallel_Optional"
+                    class="pdingf10"
+                  >
+                    <el-radio label="Serial">
+                      {{ $t("HCFD.geneal.serial") }}</el-radio
+                    >
+                    <el-radio label="MPI Parallel">{{
+                      $t("HCFD.geneal.mpi")
+                    }}</el-radio>
+                  </el-radio-group>
+                  <li
+                    class="disacent pdingf10"
+                    v-if="
+                      parameterObj.nmlParam.parallel_Optional == 'MPI Parallel'
+                    "
+                  >
+                    <span class="disinblok" style="width:150px">{{ $t("HCFD.geneal.number") }}</span>
+                    <el-input
+                      size="mini"
+                      class="inpw35"
+                      v-model="parameterObj.nmlParam.number_of_Processors"
+                    ></el-input>
+                  </li>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+          <!-- task第二个 -->
+          <div class="lg-modl" v-show="TaskPhysicsshow">
+            <div class="logs_title">
+              Task Page
+              <div class="x" @click="taskchangPhysics()">x</div>
+            </div>
+            <div class="el-padding Task-lg" :class="headMenu_2Show?'maxh290':'maxh100'">
+              <el-row>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.gover") }}</li>
+                  <el-radio-group
+                    v-model="parameterObj.nmlParam.eqn_type"
+                    size="mini"
+                    class="pdingf10"
+                  >
+                    <el-radio label="cal_perf_compress">{{
+                      $t("HCFD.physics.compress")
+                    }}</el-radio>
+                    <el-radio label="cal_perf_incompress">{{
+                      $t("HCFD.physics.incompress")
+                    }}</el-radio>
+                  </el-radio-group>
+                  <li class="disflex pdingf10">
+                    <span>{{ $t("HCFD.physics.artifical") }}</span>
+                    <el-input
+                          size="mini"
+                          style="width:25%"
+                          v-model="parameterObj.nmlParam.artificial_compress"
+                        ></el-input>
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.viscous") }}</li>
+                  <el-radio-group
+                    v-model="parameterObj.nmlParam.viscous_terms"
+                    @change.native="viscouschange()"
+                    size="mini"
+                    class="pdingf10"
+                  >
+                    <el-radio-button label="inviscid">
+                      <el-image :src="inviscid"></el-image
+                      >{{ $t("HCFD.physics.inviscid") }}
+                    </el-radio-button>
+                    <el-radio-button
+                      label="laminar"
+                      @click.native="physicslaminar()"
+                    >
+                      <el-image :src="laminar"></el-image
+                      >{{ $t("HCFD.physics.laminar") }}
+                    </el-radio-button>
+                    <el-radio-button
+                      label="turbulent"
+                      @click.native="physicsturbulent()"
+                    >
+                      <el-image :src="turbulent"></el-image>
+                      {{ $t("HCFD.physics.turbulent") }}
+                    </el-radio-button>
+                  </el-radio-group>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.boundary") }}</li>
+                  <div class="pdingf10">
+                    <el-select
+                      size="mini"
+                      @change="boundaryChange"
+                      v-model="Physics.Boundary.bquery"
+                      placeholder="select boundary"
+                    >
+                      <el-option
+                        v-for="hcfdBoundary in parameterObj.hcfdBoundarys"
+                        :key="hcfdBoundary.id"
+                        :label="hcfdBoundary.name"
+                        :value="hcfdBoundary.id"
+                      >
+                      </el-option>
+                    </el-select>
+                    <el-select
+                      size="mini"
+                      @change="conditionsChange"
+                      v-model="Physics.Boundary.cquery"
+                      placeholder="select Conditions"
+                    >
+                      <el-option
+                        v-for="Condition in Physics.Boundary.Conditions"
+                        :key="Condition.conditionsCode"
+                        :label="Condition.name"
+                        :value="Condition.conditionsCode"
+                      >
+                      </el-option>
+                    </el-select>
+                  </div>
+                </el-col>
+
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.dynamic") }}</li>
+                  <div class="pdingf10">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.dynamic_Mesh"
+                      label="on"
+                      >on</el-radio
+                    >
+                    <el-radio
+                      v-model="parameterObj.nmlParam.dynamic_Mesh"
+                      label="off"
+                      >off</el-radio
+                    >
+                  </div>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.reference") }}</li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.physics.machNum") }}</span>
+                    <el-input
+                          size="mini"
+                          v-model="parameterObj.nmlParam.mach_number"
+                        ></el-input>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.physics.reyNum") }}</span>
+                    <el-input
+                          size="mini"
+                          v-model="parameterObj.nmlParam.reynolds_number"
+                        ></el-input>
+                  </li>
+                  <li class="discenter">
+                    <el-button
+                      size="mini"
+                      type="success"
+                      icon="el-icon-arrow-down"
+                      @click="dialog.reference_visiable = true"
+                      >more</el-button
+                    >
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.physics.nonitertial") }}</li>
+                  <div class="pdingf10">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                      label="on"
+                      >on</el-radio
+                    >
+                    <el-radio
+                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                      label="off"
+                      >off</el-radio
+                    >
+                  </div>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+          <!-- 第三 -->
+          <div class="lg-modl" v-show="TaskSolutionshow">
+            <div class="logs_title">
+              Task Page
+              <div class="x" @click="taskchangSolution()">x</div>
+            </div>
+            <div class="el-padding Task-lg" :class="headMenu_2Show?'maxh290':'maxh100'">
+              <el-row>
+                <el-col class="lg-bu">
+                  <li class="title">{{ $t("HCFD.solution.invis") }}</li>
+                  <li class="discenter padding0">
+                    <el-button type="success" size="mini" @click="dialog.fluxrc_visiable = true">
+                      <el-image :src="fluxr"></el-image
+                      >{{ $t("HCFD.solution.fluxResCon") }}
+                    </el-button>
+                  </li>
+                  <li class="discenter padding0">
+                    <el-button type="success" size="mini" @click="dialog.fluxl_visiable = true">
+                      <el-image :src="fluxl"></el-image
+                      >{{ $t("HCFD.solution.flux") }}
+                    </el-button>
+                  </li>
+                  <li class="discenter padding0">
+                    <el-button type="success" size="mini" @click="dialog.fluxjc_visiable = true">
+                      <el-image :src="fluxj"></el-image
+                      >{{ $t("HCFD.solution.fluxJacCon") }}
+                    </el-button>
+                  </li>
+                  <li class="pdingf10">
+                    {{ $t("HCFD.solution.muscl") }}
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.schedule"
+                    ></el-input>
+                  </li>
+                  <li class="pdingf10">
+                    {{ $t("HCFD.solution.firstOrderNum") }}
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.first_order_iterations"
+                    ></el-input>
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.solution.timeAdvance") }}</li>
+                  <li class="discenter">
+                    <el-button type="success" size="mini" @click="dialog.time_visiable = true">
+                      <el-image :src="times"></el-image
+                      >{{ $t("HCFD.solution.timeScheme") }}
+                    </el-button>
+                  </li>
+                  <li class="disflex pdingf10">
+                    <span>{{ $t("HCFD.solution.pseudo") }}</span>
+                    <div class="disflex" style="width:45%">
+                      <el-radio
+                        style="margin:0 20px 0 0"
+                        v-model="parameterObj.nmlParam.pseudo_time_stepping"
+                        label="off"
+                        >Off</el-radio
+                      >
+                      <el-radio
+                        v-model="parameterObj.nmlParam.pseudo_time_stepping"
+                        label="on"
+                        >On</el-radio
+                      >
+                    </div>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.solution.timeStep") }}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.time_step_nondim"
+                    ></el-input>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.solution.subiterations") }}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.subiterations"
+                    ></el-input>
+                  </li>
+                  <li class="discenter">
+                    <el-button
+                      size="mini"
+                      type="success"
+                      icon="el-icon-arrow-down"
+                      @click="dialog.timeasm_visiable = true"
+                      >more</el-button
+                    >
+                  </li>
+                  
+                </el-col>
+                <el-col class="lg-ss">
+                  <li class="title">{{ $t("HCFD.solution.linearSol") }}</li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.solution.meanflow") }}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.meanflow_sweeps"
+                    ></el-input>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>{{ $t("HCFD.solution.turbulence") }}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.turbulence_sweeps"
+                    ></el-input>
+                  </li>
+                  <li class="disflex pdingf10">
+                    <span>{{ $t("HCFD.solution.gcr") }}</span>
+                    <el-radio-group
+                      v-model="parameterObj.nmlParam.line_implicit"
+                      class="disflex"
+                    >
+                      <el-radio label="off" style="margin:0 10px 0 0">Off</el-radio>
+                      <el-radio label="on">On</el-radio>
+                    </el-radio-group>
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">
+                    {{ $t("HCFD.solution.initialization") }}
+                  </li>
+                  <el-radio-group v-model="initialization" size="mini" class="pdingf10">
+                    <el-radio label="freestreams">{{
+                      $t("HCFD.solution.freestreams")
+                    }}</el-radio>
+                    <el-radio label="specified">{{
+                      $t("HCFD.solution.specified")
+                    }}</el-radio>
+                  </el-radio-group>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.solution.run") }}</li>
+                  <li class="disflex55 pdingf10">
+                    <span style="width:51%">{{ $t("HCFD.solution.iterNum")}}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.steps"
+                    ></el-input>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span style="width:51%">{{ $t("HCFD.solution.stopToler")}}</span>
+                    <el-input
+                      size="mini"
+                      v-model="parameterObj.nmlParam.stopping_tolerance"
+                    ></el-input>
+                  </li>
+                  <li class="discenter">
+                    <el-button
+                      size="mini"
+                       type="success"
+                      icon="el-icon-arrow-down"
+                      @click="dialog.runc_visiable = true"
+                      >more</el-button
+                    >
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.solution.outCon") }}</li>
+                  <li class="discenter padding0">
+                    <el-button
+                      size="mini"
+                       type="success"
+                      @click="dialog.boundaryo_visiable = true"
+                    >
+                      <el-image :src="boundary"></el-image
+                      >{{ $t("HCFD.solution.bounOut") }}
+                    </el-button></li>
+                  <li class="discenter padding0">
+                    <el-button
+                      size="mini"
+                       type="success"
+                      @click="dialog.volumeo_visiable = true"
+                    >
+                      <el-image :src="volume"> </el-image
+                      >{{ $t("HCFD.solution.volOut") }}
+                    </el-button>
+                  </li>
+                </el-col>
+                <el-col>
+                  <li class="title">{{ $t("HCFD.solution.advance") }}</li>
+                  <li class="discenter padding0">
+                    <el-button
+                    size="mini"
+                     type="success"
+                    @click="dialog.specialp_visiable = true"
+                  >
+                    <el-image :src="special"></el-image
+                    >{{ $t("HCFD.solution.specialPara") }}
+                  </el-button>
+                  </li>
+                  <li class="discenter padding0">
+                    <el-button type="success" size="mini" @click="dialog.swap_visiable = true">
+                    <el-image :src="swap"></el-image
+                    >{{ $t("HCFD.solution.swapYZ") }}
+                  </el-button>
+                  </li>
+                  <div class="discenter padding0">
+                    <div>
+                      <el-button
+                        size="mini"
+                         type="primary"
+                        v-show="runMonitor"
+                        @click="hcfdrun(true)"
+                      >
+                        <div class="disflex">
+                          <el-image :src="run" style="width:15px"></el-image>
+                          <span class="borun">Run</span>
+                        </div>
+                      </el-button>
+                      <el-button
+                        size="mini"
+                         type="primary"
+                        @click="showMonitor()"
+                        v-show="runMonitor"
+                        >Monitor</el-button
+                      >
+                    </div>
+                  </div>
+                </el-col>
+                <!-- <el-col :span="0">
+              <div class="line"></div> </el-col > -->
+              </el-row>
+            </div>
+          </div>
+          <!-- 第四个 -->
+          <div class="lg-modl" v-show="TaskSurfaceshow">
+            <div class="logs_title">
+              Task Page
+              <div class="x" @click="taskchangSurface()">x</div>
+            </div>
+            <div class="el-padding Task-lg task-si" :class="headMenu_2Show?'maxh290':'maxh100'">
+              <el-row
+                ><el-col>
+                  <li class="title">Surface Grid</li>
+                  <li class="disflex55 pdingf10">
+                    <span>Steps</span>
+                    <el-select size="mini" v-model="bStep" placeholder="请选择">
+                      <el-option
+                        v-for="setep in boundaryStep"
+                        :key="setep"
+                        :label="setep"
+                        :value="setep"
+                      >
+                      </el-option>
+                    </el-select>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>Scalar Selection</span>
+                    <el-select
+                      size="mini"
+                      v-model="bScalar"
+                      placeholder="请选择"
+                    >
+                      <el-option
+                        v-for="scalar in boundaryScalars"
+                        :key="scalar"
+                        :label="scalar"
+                        :value="scalar"
+                      >
+                      </el-option>
+                    </el-select>
+                  </li>
+                  <li class="disflex55 lheig34 pdingf10">
+                    <span>Vector Selection</span>
+                    <el-checkbox checked>Velocity</el-checkbox>
+                  </li>
+                  <li class="disflex55 lheig34 pdingf10">
+                    <span>Show Element</span>
+                    <el-checkbox-group v-model="belementCheckeds" class="discenter">
+                      <el-checkbox
+                        label="Mesh"
+                        style="margin:0 8px 0 0"
+                        @change="Contourval('Mesh')"
+                      ></el-checkbox>
+                      <el-checkbox
+                        label="Contour"
+                        @change="Contourval('Contour')"
+                      ></el-checkbox>
+                    </el-checkbox-group>
+                  </li>
+                  <li class="discenter">
+                    <el-button
+                      size="mini"
+                      type="primary"
+                      @click="showSurface()"
+                      >Show Surface</el-button
+                    >
+                  </li>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+          <!-- 第五个 -->
+          <div class="lg-modl" v-show="TaskVolumeshow">
+            <div class="logs_title">
+              Task Page
+              <div class="x" @click="taskchangVolume()">x</div>
+            </div>
+            <div class="el-padding Task-lg task-si" :class="headMenu_2Show?'maxh290':'maxh100'">
+              <el-row>
+                <el-col class="lg-si-right">
+                  <li class="title">Volume Grid</li>
+                  <li class="disflex55 pdingf10">
+                    <span>Steps</span>
+                    <el-select size="mini" v-model="vStep" placeholder="请选择">
+                      <el-option
+                        v-for="setep in volumStep"
+                        :key="setep"
+                        :label="setep"
+                        :value="setep"
+                      >
+                      </el-option>
+                    </el-select>
+                  </li>
+                  <li class="disflex55 pdingf10">
+                    <span>Scalar Selection</span>
+                    <el-select
+                      size="mini"
+                      v-model="vSalar"
+                      placeholder="请选择"
+                    >
+                      <el-option
+                        v-for="scalar in volumScalars"
+                        :key="scalar"
+                        :label="scalar"
+                        :value="scalar"
+                      >
+                      </el-option>
+                    </el-select>
+                  </li>
+                  <li class="disflex55 lheig34 pdingf10">
+                    <span>Vector Selection</span>
+                     <el-checkbox checked>Velocity</el-checkbox>
+                  </li>
+                  <li class="disflex55 lheig34 pdingf10">
+                    <span>Show Element</span>
+                    <el-checkbox-group v-model="velementCheckeds" class="discenter">
+                      <el-checkbox
+                        label="Mesh"
+                        style="margin:0 8px 0 0"
+                        @change="ContourvalVolume('Mesh')"
+                      ></el-checkbox>
+                      <el-checkbox
+                        label="Contour"
+                        @change="ContourvalVolume('Contour')"
+                      ></el-checkbox>
+                    </el-checkbox-group>
+                  </li>
+                  <li class="discenter">
+                    <el-button type="primary" size="mini" @click="showVolume()"
+                      >Show Volume</el-button
+                    >
+                  </li>
+                </el-col>
+              </el-row>
+            </div>
+          </div>
+        </div>
+
+        <!-- Task Page的弹框的结束-->
+        <el-container class="beij-container">
+          <el-aside v-if="leftMenu_2Show" class="leftMenu_1_1">Aside</el-aside>
+          <el-container>
+            <el-main ref="main3d" :class="headMenu_2Show?'maxh400':'maxh221'">
+              <echartsHFCD ref="monitor" :name="project.projectName"></echartsHFCD>
+              <ugrid-load
+                ref="ugridLoad"
+                :renderer_hight="renderer_hight"
+                :renderer_width="renderer_width"
+              ></ugrid-load>
+              <volum-load
+                ref="volumLoad"
+                @showVolume="showVolume"
+                :renderer_hight="renderer_hight"
+                :renderer_width="renderer_width"
+                @setVolumScalars="setVolumScalars($event)"
+              ></volum-load>
+              <boundary-load
+                ref="boundaryLoad"
+                @showSurface="showSurface"
+                :bScalar="bScalar"
+                :contourLevel="contourLevel"
+                :renderer_hight="renderer_hight"
+                :renderer_width="renderer_width"
+                @setBoundaryScalars="setBoundaryScalars($event)"
+              ></boundary-load>
+              <!-- 颜色条 -->
+              <!-- <div class="colortiao"></div>
+               <vtkLoad ref="vtkLoad" :bScalar='bScalar' :contourLevel="contourLevel">
+            </vtkLoad>  -->
+            </el-main>
+            <!-- <div class="x" @click="change">==</div> -->
+            <el-footer style="height: 160px" v-show="Consoleshow">
+              <div class="logs_title">
+                Console
+                <div class="x">x</div>
+                <div class="exloadbox" :style="{ visibility: exLoading}">
+                  <span>正在求解中</span>
+                  <i class="el-icon-loading"></i>
+                </div>
+              </div>
+              <div class="logs_console">
+                <textarea v-model="logs" style="width: 100%;height:120px">
+                  "欢迎来到HCFD!"
+                </textarea>
+              </div>
+            </el-footer>
+          </el-container>
+        </el-container>
+      </el-container>
+    </el-container>
+
+    <el-dialog
+      :close-on-click-modal="false"
+      title="New"
+      :visible.sync="dialog.new_visiable"
+      class="dialog lg-dialog-2"
+    >
+      <el-form>
+        <el-form-item>
+          <span>Project Name</span>
+          <el-input v-model="project.projectName"></el-input>
+          <span>Project description</span>
+          <el-input v-model="project.projectDesc"></el-input>
+        </el-form-item>
+        <el-form-item label="File Type">
+          <el-radio disabled v-model="project.fileType" label="binary"
+            >Binary</el-radio
+          >
+          <el-radio v-model="project.fileType" label="ascii">ASCII</el-radio>
+        </el-form-item>
+        <vue-uploader
+          ref="ugrid"
+          :projectId="project.projectId"
+          :solverType="'hcfd'"
+          :accept="'.ugrid'"
+          :name="'Load Grid File'"
+          :upId="'2'"
+        ></vue-uploader>
+        <vue-uploader
+          ref="mapbc"
+          :projectId="project.projectId"
+          :solverType="'hcfd'"
+          :accept="'.mapbc'"
+          :name="'Load BC File'"
+          :upId="'1'"
+        ></vue-uploader>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info" @click="dialog.new_visiable = false">Cancel</el-button>
+        <el-button type="danger" @click="reUpload">Reupload</el-button>
+        <el-button type="warning" @click="saveProject('newProject')">Save</el-button>
+        <el-button type="primary" @click="ugridShow">OK</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog
+      :close-on-click-modal="false"
+      title="Load"
+      :visible.sync="dialog.load_visiable"
+      width="45%"
+      class="dialog"
+    >
+      <el-form>
+        <el-table
+          v-loading="loading"
+          :data="projects"
+          border
+          height="250"
+          ref="projectsTable"
+          @selection-change="projectsSelectionChange"
+          @select="projectsSelectionSelect"
+        >
+          <el-table-column type="selection" />
+          <el-table-column property="projectId" label="Project ID" />
+          <el-table-column property="projectName" label="Project Name" />
+          <el-table-column property="createTime" label="Project Create Time" />
+        </el-table>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.load_visiable = false">Cancel</el-button>
+        <el-button type="primary" @click="selectProjectOK()">OK</el-button>
+      </div>
+    </el-dialog>
+ <el-dialog
+      :close-on-click-modal="false"
+      title="资源选择"
+      :visible.sync="dialog.ziyuan"
+      width="45%"
+      class="dialog"
+    >
+      <el-form>
+        <el-table
+          v-loading="loading"
+          :data="ziyprojects"
+          border
+          :row-key="getRowKeys"
+          height="250"
+          ref="multipleTable"
+          @selection-change="ziySelectionChange"
+          @select="ziySelectionSelect"
+        > 
+          <el-table-column type="selection"  label="选择" :reserve-selection="true"/>
+          <el-table-column property="id" label="ID" />
+          <el-table-column property="resIp" label="资源内网IP" />
+          <el-table-column property="resShortname" label="资源简称" />
+        </el-table>
+      </el-form>
+        <div class="pagination">
+      <Pagination
+        :pagination-config="paginationConfig"
+        @putPagination="getPagination"
+      ></Pagination>
+    </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.ziyuan = false">Cancel</el-button>
+        <el-button type="primary"  @click='resourceOK()'>OK</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Scale"
+      :visible.sync="dialog.scale_visiable"
+      :close-on-click-modal="false"
+      width="20%"
+    >
+      <el-form>
+        <div class="disflex">
+          <span class="sblock">Factor</span>
+          <el-input class="inpwidth" v-model="geneal.MeshTransform.Scale.Factor"></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.scale_visiable = false">Cancel</el-button>
+        <el-button type="primary" @click="dialog.scale_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Translation"
+      :visible.sync="dialog.translation_visiable"
+      :close-on-click-modal="false"
+      width="511px"
+    >
+      <el-form class="div64">
+        <div>
+          <span>Distance</span>
+          <el-input
+            v-model="geneal.MeshTransform.Translation.Distance"
+          ></el-input>
+        </div>
+        <div>
+          <span>X-Component of Translation Unit Vector</span>
+          <el-input v-model="geneal.MeshTransform.Translation.X"></el-input>
+        </div>
+        <div>
+          <span>Y-Component of Translation Unit Vector&nbsp;&nbsp;&nbsp;</span>
+          <el-input v-model="geneal.MeshTransform.Translation.Y"></el-input>
+        </div>
+        <div>
+          <span>Z-Component of Translation Unit Vector&nbsp;&nbsp;&nbsp;</span>
+          <el-input v-model="geneal.MeshTransform.Translation.Z"></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.translation_visiable = false"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.translation_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      :close-on-click-modal="false"
+      title="Rotation"
+      :visible.sync="dialog.rotation_visiable"
+      width="500px"
+    >
+      <el-form class="div64">
+        <div>
+          <span>Angle(deg)</span>
+          <el-input v-model="geneal.MeshTransform.Rotation.Angle"></el-input>
+        </div>
+
+        <div>
+          <span>X-Coordinate of Rotation Origin</span>
+          <el-input
+            class="lg-Rotation"
+            v-model="geneal.MeshTransform.Rotation.X"
+          ></el-input>
+        </div>
+        <div>
+          <span>Y-Coordinate of Rotation Origin</span>
+          <el-input
+            class="lg-Rotation"
+            v-model="geneal.MeshTransform.Rotation.Y"
+          ></el-input>
+        </div>
+        <div>
+          <span>Z-Coordinate of Rotation Origin</span>
+          <el-input
+            class="lg-Rotation"
+            v-model="geneal.MeshTransform.Rotation.Z"
+          ></el-input>
+        </div>
+
+        <div>
+          <span>X-Component of Rotation Axis Unit Vector</span>
+          <el-input
+            class="lg-Rotation2"
+            v-model="geneal.MeshTransform.Rotation.X1"
+          ></el-input>
+        </div>
+        <div>
+          <span>Y-Component of Rotation Axis Unit Vector</span>
+          <el-input
+            class="lg-Rotation2"
+            v-model="geneal.MeshTransform.Rotation.Y1"
+          ></el-input>
+        </div>
+        <div>
+          <span>Z-Component of Rotation Axis Unit Vector</span>
+          <el-input
+            class="lg-Rotation2"
+            v-model="geneal.MeshTransform.Rotation.Z1"
+          ></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.rotation_visiable = false">Cancel</el-button>
+        <el-button type="primary" @click="dialog.rotation_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Upload File"
+      :visible.sync="dialog.upload_visiable"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      :show-close="false"
+      width="535px"
+      center
+    >
+      <div>
+        <div>
+          <h4>upLoader File</h4>
+          <p>
+            <span
+              v-for="(item, i) in fileNames"
+              :key="i"
+              style="padding: 0 5px"
+              >{{ item }}</span
+            >
+          </p>
+        </div>
+        <vue-uploader
+          ref="ugrid"
+          :projectId="project.projectId"
+          :solverType="'hcfd'"
+          :accept="'.ugrid'"
+          :name="'Load Grid File'"
+          :upfileName="this.fileNames"
+          :upId="'2'"
+        ></vue-uploader>
+        <vue-uploader
+          ref="mapbc"
+          :projectId="project.projectId"
+          :solverType="'hcfd'"
+          :accept="'.mapbc'"
+          :name="'Load BC File'"
+          :upfileName="this.fileNames"
+          :upId="'1'"
+        ></vue-uploader>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialog.upload_visiable = false">Cancel</el-button>
+        <!-- <el-button  @click="reUpload">Reupload</el-button> -->
+        <el-button type="info"  @click="reUpload">Save</el-button>
+        <el-button type="primary" @click="ugridShow(), (dialog.upload_visiable = false)"
+          >OK</el-button
+        >
+      </span>
+    </el-dialog>
+
+    <el-dialog
+      :close-on-click-modal="false"
+      title="Laminar"
+      :visible.sync="dialog.laminar_visiable"
+      width="23%"
+    >
+      <el-form class="div64">
+        <div>
+          <span>Molecular Prandtl Number</span>
+          <el-input
+            v-model="parameterObj.nmlParam.prandtlnumber_molecular"
+          ></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.laminar_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.laminar_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="dialog-block"
+      title="Turbulent"
+      :visible.sync="dialog.turbulent_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.turb_model">
+          <el-radio :label="'sa'">SA</el-radio>
+          <el-radio :label="'menter-sst'">Menter-SST</el-radio>
+          <el-radio :label="'k-omega-sst'">k-omega-SST</el-radio>
+          <el-radio :label="'sa-des'">SA-DES</el-radio>
+          <el-radio :label="'k-omega-des'">k-omega-DES</el-radio>
+          <el-radio :label="'linear-k-epsilon'">Linear-k-epsilon</el-radio>
+          <el-radio :label="'abid-k-epsilon'">Abid-k-epsilon</el-radio>
+          <el-radio :label="'menter-sst-les'">Menter-SST-LES</el-radio>
+          <el-radio :label="'Wilcox-les'">Wilcox-LES</el-radio>
+        </el-radio-group>
+        <div class="disflex55">
+          <span>Molecular Prandtl Number</span>
+          <el-input
+            class="lg-Rotation"
+            v-model="parameterObj.nmlParam.prandtlnumber_molecular"
+          ></el-input>
+        </div>
+        <div class="disflex55">
+          <span>Turbulent Prandtl Number</span>
+          <el-input
+            class="lg-Rotation"
+            v-model="Physics.Turbulent.TurbulentPrandtlNumber"
+          ></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.turbulent_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.turbulent_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="Conditions"
+      title="Reference Conditions"
+      :visible.sync="dialog.reference_visiable"
+      :close-on-click-modal="false"
+      width="500px"
+
+    >
+      <el-form class="lg-form">
+        <li>
+          <span>Mach Number</span>
+          <el-input v-model="parameterObj.nmlParam.mach_number"></el-input>
+        </li>
+        <li>
+          <span>Reynolds Number</span>
+          <el-input v-model="parameterObj.nmlParam.reynolds_number"></el-input>
+        </li>
+        <li>
+          <span>Temperature</span>
+        </li>
+        <li>
+          <el-radio-group v-model="parameterObj.nmlParam.temperature_units">
+            <el-radio :label="'Kelvin'">Kelvin</el-radio>
+            <el-radio :label="'Rankine'">Rankine</el-radio>
+          </el-radio-group>
+          <el-input v-model="parameterObj.nmlParam.temperature"></el-input>
+        </li>
+        <li>
+          <span>Angle of Attack (deg)</span>
+          <el-input v-model="parameterObj.nmlParam.angle_of_attack"></el-input>
+        </li>
+        <li>
+          <span>Angle of Yaw (deg) </span>
+          <el-input v-model="parameterObj.nmlParam.angle_of_yaw"></el-input>
+        </li>
+        <li>
+          <span>Reference Area </span>
+          <el-input v-model="parameterObj.nmlParam.area_reference"></el-input>
+        </li>
+        <li>
+          <span>Length In X About Moment of Y Axis</span>
+          <el-input v-model="parameterObj.nmlParam.x_moment_length"></el-input>
+        </li>
+        <li>
+          <span>Length In Y About Moment of X and Z Axis</span>
+          <el-input v-model="parameterObj.nmlParam.y_moment_length"></el-input>
+        </li>
+        <li>
+          <span>Location of Moment Center</span>
+        </li>
+        <li>
+          <span>X-Coordinate</span>
+          <el-input v-model="parameterObj.nmlParam.x_moment_center"></el-input>
+        </li>
+        <li>
+          <span>Y-Coordinate</span>
+          <el-input v-model="parameterObj.nmlParam.y_moment_center"></el-input>
+        </li>
+        <li>
+          <span>Z-Coordinate</span>
+          <el-input v-model="parameterObj.nmlParam.z_moment_center"></el-input>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.reference_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.reference_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="lg-Solution"
+      title="Flux Residual Construction"
+      :visible.sync="dialog.fluxrc_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group columns='2' v-model="parameterObj.nmlParam.flux_construction">
+          <el-radio :label="'roe'">Roe</el-radio>
+          <el-radio :label="'vanleer'">vanleer</el-radio>
+          <el-radio :label="'hllc'">HLLC</el-radio>
+          <el-radio :label="'aufs'">AUFS</el-radio>
+          <el-radio :label="'central_diss'">Central_Diss</el-radio>
+          <el-radio :label="'dlfss'">LDFSS</el-radio>
+          <el-radio :label="'stvd'">STVD</el-radio>
+          <el-radio :label="'stvd_modified'">STVD_modified</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxrc_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.fluxrc_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Flux Limiter"
+      :visible.sync="dialog.fluxl_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group
+          v-model="parameterObj.nmlParam.flux_limiter"
+          size="small"
+        >
+          <el-radio :label="'none'">none</el-radio>
+          <el-radio :label="'barth'">barth</el-radio>
+          <el-radio :label="'venkat'">venkat</el-radio>
+          <el-radio :label="'minmod'">minmod</el-radio>
+          <el-radio :label="'vanleer'">vanleer</el-radio>
+          <el-radio :label="'vanalbada'">vanalbada</el-radio>
+          <el-radio :label="'smooth'">smooth</el-radio>
+          <el-radio :label="'hminmod'">hminmod</el-radio>
+          <el-radio :label="'hvanleer'">hvanleer</el-radio>
+          <el-radio :label="'hvanalbada'">hvanalbada</el-radio>
+          <el-radio :label="'hsmooth'">hsmooth</el-radio>
+          <el-radio :label="'hvenkat'">hvenkat</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxl_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.fluxl_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Flux Jacobian Construction"
+      :visible.sync="dialog.fluxjc_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group
+          v-model="parameterObj.nmlParam.flux_construction_lhs"
+          size="small"
+        >
+          <el-radio :label="'roe'">Roe</el-radio><br />
+          <el-radio :label="'vanleer'">vanleer</el-radio><br />
+          <el-radio :label="'hllc'">HLLC</el-radio><br />
+          <el-radio :label="'aufs'">AUFS</el-radio><br />
+          <el-radio :label="'central-diss'">Central-Diss</el-radio><br />
+          <el-radio :label="'ldfss'">LDFSS</el-radio><br />
+          <el-radio :label="'stvd'">STVD</el-radio><br />
+          <el-radio :label="'stvd_modified'">STVD_modified</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxjc_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.fluxjc_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Flux Jacobian Construction"
+      :visible.sync="dialog.flujc_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.flux_limiter">
+          <el-radio :label="'roe'">Roe</el-radio>
+          <el-radio :label="'hllc'">HLLC</el-radio>
+          <el-radio :label="'aufs'">AUFS</el-radio>
+          <el-radio :label="'ldfss'">LDFSS</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.flujc_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.flujc_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Time Scheme"
+      :visible.sync="dialog.time_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.time_accuracy">
+          <el-radio :label="'steady'">Steady</el-radio>
+          <el-radio :label="'1storder'">1storder</el-radio>
+          <el-radio :label="'2ndorder'">2ndorder</el-radio>
+          <el-radio :label="'2ndorderOPT'">2ndorderOPT</el-radio>
+          <el-radio :label="'3rdorder'">3rdorder</el-radio>
+          <el-radio :label="'4thorderMEBDF4'">4thorderMEBDF4</el-radio>
+          <el-radio :label="'4thorderESDIRK4'">4thorderESDIRK4</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.time_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.time_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Time Advanced Scheme"
+      :visible.sync="dialog.timeasm_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form class="lg-form">
+        <li class="lheig34" style="padding:5px 0">
+          <span>Pseudo Time Stepping</span>
+          <el-radio-group class="inpw35" style="display:flex" v-model="parameterObj.nmlParam.pseudo_time_stepping">
+            <el-radio :label="'on'">On</el-radio>
+            <el-radio :label="'off'">Off</el-radio>
+          </el-radio-group>
+        </li>
+        <li>
+          <span>Time Step Nondim</span>
+          <el-input v-model="parameterObj.nmlParam.time_step_nondim"></el-input>
+        </li>
+        <li>
+          <span>Subiterations</span>
+          <el-input v-model="parameterObj.nmlParam.subiterations"></el-input>
+        </li>
+        <li>
+          <span>Schedule Iteration For Ramped CFL</span>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_iteration[0]"
+          ></el-input>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_iteration[1]"
+          ></el-input>
+        </li>
+        <li>
+          <span>Schedule CFL</span>
+          <el-input v-model="parameterObj.nmlParam.schedule_cfl[0]"></el-input>
+          <el-input v-model="parameterObj.nmlParam.schedule_cfl[1]"></el-input>
+        </li>
+        <li>
+          <span>Schedule CFL Turb</span>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_cflturb[0]"
+          ></el-input>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_cflturb[1]"
+          ></el-input>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="timeasmvisiable">Cancel</el-button>
+        <el-button type="primary" @click="dialog.timeasm_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Run Control"
+      :visible.sync="dialog.runc_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form class="lg-form">
+        <li>
+          Number of Iterations<el-input
+            v-model="parameterObj.nmlParam.steps"
+          ></el-input>
+        </li>
+        <li>
+          Stopping Tolerance<el-input
+            v-model="parameterObj.nmlParam.stopping_tolerance"
+          ></el-input>
+        </li>
+        <li>
+          Restart Write Freq<el-input
+            v-model="parameterObj.nmlParam.restart_write_freq"
+          ></el-input>
+        </li>
+        <li>
+          Jacobian Evaluate Freq<el-input
+            v-model="parameterObj.nmlParam.jacobian_eval_freq"
+          ></el-input>
+        </li>
+        <li class="lheig34" style="padding:5px 0">
+          Read Restart
+          <el-radio-group class="inpw35" v-model="parameterObj.nmlParam.restart_read">
+            <el-radio label="off">Off</el-radio>
+            <el-radio label="on">On</el-radio>
+          </el-radio-group>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="runcvisiable">Cancel</el-button>
+        <el-button type="primary" @click="dialog.runc_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Boundary Output"
+      :visible.sync="dialog.boundaryo_visiable"
+      :close-on-click-modal="false"
+      class="Conditions lg-out-h"
+    >
+      <el-form>
+        <li class="disflex">
+          Output Freq<el-input
+            v-model="parameterObj.nmlParam.animation_freq"
+          class="inpw50"></el-input>
+        </li>
+        <li>Output Variables</li>
+        <el-checkbox
+          :indeterminate="Solution.boundaryout.isIndeterminate"
+          v-model="Solution.boundaryout.checkAll"
+          @change="solutionbCheckAllChange"
+          >All</el-checkbox
+        >
+          <div>
+           <el-checkbox  
+                v-model="parameterObj.nmlParam.a_u">X-component of velocity</el-checkbox>
+             <el-checkbox   
+                v-model="parameterObj.nmlParam.a_v"
+              >Y-component of velocity</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_w"
+              >Z-component of velocity</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_p"
+              >Press</el-checkbox>
+               <el-checkbox   
+                v-model="parameterObj.nmlParam.a_cp"
+              >Press coefficient</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_mach"
+              >Mach Number</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_vort_mag"
+              >Vorticity magnitude</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_x "
+              >X-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_y"
+              >Y-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_z "
+              >Z-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_q_criterion"
+              >Q Criterion</el-checkbox>
+                </div>
+        <!-- </el-checkbox-group> -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.boundaryo_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.boundaryo_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      title="Volume Output"
+      :visible.sync="dialog.volumeo_visiable"
+      class="Conditions lg-out-h"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <li class="disflex">
+          Output Freq<el-input
+            v-model="parameterObj.nmlParam.volume_animation_freq"
+          class="inpw50"></el-input>
+        </li>
+        <li>Output Variables</li>
+        <el-checkbox
+          :indeterminate="Solution.volumout.isIndeterminate"
+          v-model="Solution.volumout.checkAll"
+          @change="solutionvCheckAllChange"
+          >All</el-checkbox
+        >
+        <!-- <el-checkbox-group
+          v-model="Solution.volumout.checkeds"
+          @change="solutionvCheckedCitiesChange"
+        >
+          <el-checkbox
+            v-for="cell in Solution.volumout.lists"
+            :label="cell"
+            :key="cell"
+            >{{ cell }}</el-checkbox
+          >
+        </el-checkbox-group> -->
+        <div>
+        <el-checkbox  
+                v-model="parameterObj.nmlParam.v_u">X-component of velocity</el-checkbox>
+             <el-checkbox   
+                v-model="parameterObj.nmlParam.v_v "
+              >Y-component of velocity</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_w"
+              >Z-component of velocity</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_p "
+              >Press</el-checkbox>
+               <el-checkbox   
+                v-model="parameterObj.nmlParam.v_cp"
+              >Press coefficient</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_mach"
+              >Mach Number</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_vort_mag"
+              >Vorticity magnitude</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_x "
+              >X-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_y"
+              >Y-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_z "
+              >Z-component of vorticity</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_q_criterion"
+              >Q Criterion</el-checkbox>
+               </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.volumeo_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.volumeo_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="lg-y-z"
+      title="Special Parameters"
+      :visible.sync="dialog.specialp_visiable"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.large_angle_fix">
+          <el-radio label="off">Off</el-radio>
+          <el-radio label="on">On</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.specialp_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.specialp_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Swap Y-Z Axres"
+      :visible.sync="dialog.swap_visiable"
+      class="lg-y-z"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.swap_yz_axes">
+          <el-radio label="false">Off</el-radio>
+          <el-radio label="true">On</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.swap_visiable = false))"
+          >Cancel</el-button
+        >
+        <el-button type="primary" @click="dialog.swap_visiable = false"
+          >OK</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 单位计算开始 -->
+    <!-- Y+ Calculator -->
+    <el-dialog
+      title="Y+值计算"
+      :visible.sync="Yvisiable"
+      :close-on-click-modal="false"
+    >
+      <el-form :model="form" class="gongju">
+        <!-- Freestream velocity流速度U∞ -->
+        <el-form-item label="自由流速度U∞(m/s):">
+          <el-input v-model="form.u_freestream" autocomplete="off"></el-input>
+        </el-form-item>
+        <!--Density 自由氣流密度ρ  -->
+        <el-form-item label="自由氣流密度ρ(kg/m^3):">
+          <el-input v-model="form.rho" autocomplete="off"></el-input>
+        </el-form-item>
+
+        <!-- Characteristic length 特征长度L-->
+        <el-form-item label="特征长度L:(m):">
+          <el-input
+            v-model="form.L"
+            type="number"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+
+        <!-- Dynamic viscosity表流运动粘贴系数μ: -->
+        <el-form-item label="表流运动粘贴系数μ(Pa·s):">
+          <el-input v-model="form.mu" autocomplete="off"></el-input>
+        </el-form-item>
+        <!-- Desired Y+ value: -->
+        <el-form-item label="Y+:">
+          <el-input
+            v-model="form.y_plus_desired"
+            type="number"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+        <!-- Reynolds number -->
+        <h3 class="Rex">雷诺数:&nbsp;&nbsp;&nbsp;&nbsp;{{ form.Rex }}</h3>
+        <!-- Estimated wall distance: -->
+        <h3 class="Rex">估计墙距:&nbsp;&nbsp;&nbsp;&nbsp;{{ form.dtc }}</h3>
+        <el-form-item style="margin-left: 0">
+          <!-- <el-input v-model="form.lys" type="number" autocomplete="off"></el-input> -->
+          
+            <el-button type="primary" @click="dialogbtny" style="margin:0 0 0 55px">计算</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <!-- r雷诺数计算 -->
+    <el-dialog
+      title="雷诺数计算"
+      :visible.sync="llsvisiable"
+      :close-on-click-modal="false"
+    >
+      <el-form :model="form" class="leiluoshu">
+        <el-form-item label="流速v(m/s):">
+          <el-input v-model="form.lls" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="密度ρ(kg/m^3)">
+          <el-input v-model="form.lmi" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="动力黏性系数η(Pa·s)">
+          <el-input v-model="form.ldlzxxs" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="特征长度(内径)d(m):">
+          <el-input v-model="form.lld" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="">
+          <!-- <el-input v-model="form.lys" type="number" autocomplete="off"></el-input> -->
+          <h3 class="Rex">雷诺数Re:{{ form.Re }}</h3>
+          <el-button type="primary" style="margin:0 0 0 60px" @click="leinsdialogbtny">计算</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <!-- 单位计算结束 -->
+    <filesload
+      ref="filesload"
+      :fileurls="fileurls"
+      @fileLoadeState="fileLoadeState($event)"
+    ></filesload>
+    <loading ref="loading" :loadObjs="loadObjs"></loading>
+    <hcfd-Calculator ref="Calculator"></hcfd-Calculator>
+  </div>
+</template>
+<script>
+import adilog from "@/assets/hcfd_images/adilog.png";
+import Pagination from '@/components/Pagination'
+import scaleimage from "@/assets/hcfd_images/scaleimage.png";
+import transformimage from "@/assets/hcfd_images/transformimage.png";
+import rotationimage from "@/assets/hcfd_images/rotationimage.png";
+import inviscid from "@/assets/hcfd_images/inviscid.png";
+import laminar from "@/assets/hcfd_images/laminar.png";
+import turbulent from "@/assets/hcfd_images/turbulent.png";
+import times from "@/assets/hcfd_images/times.png";
+import fluxr from "@/assets/hcfd_images/fluxr.png";
+import fluxl from "@/assets/hcfd_images/fluxl.png";
+import fluxj from "@/assets/hcfd_images/fluxj.png";
+import boundary from "@/assets/hcfd_images/boundary.png";
+import volume from "@/assets/hcfd_images/volume.png";
+import special from "@/assets/hcfd_images/special.png";
+import swap from "@/assets/hcfd_images/swap.png";
+import run from "@/assets/hcfd_images/run.png";
+import { Message, MessageBox } from "element-ui";
+import store from "@/store";
+import UgridLoad from "./loads/UgridLoad.vue";
+import VolumLoad from "./loads/VolumLoad.vue";
+import BoundaryLoad from "./loads/BoundaryLoad.vue";
+import { request, uploadFile } from "@/utils/request";
+import vueUploader from "./fileupload.vue";
+import filesload from "./filesload.vue";
+import { Caegw_ProUrl } from "@/settings"; // 引入settings.js
+import loading from "./loading.vue";
+import transformtool from "../common/transformtool.vue";
+import echartsHFCD from "./echartsHFCD.vue";
+import Calculator from "./hcfdCalculator.vue";
+
+export default {
+  data() {
+    return {
+      ziyprojects:[],
+      paginationConfig: {
+        hideSinglePage: false,
+        page: 1,
+        size: 15,
+        sizeList: [10, 15, 30, 50],
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+      },
+      getRowKeys(row) {
+            return row.id;
+        },
+      selsectid:[],
+      missType:true,
+      initialization: "",
+      upVisible: false,
+      Yvisiable: false,
+      llsvisiable: false,
+      newload: true,
+      runMonitor: true,
+      contourLevel: 3,
+      exLoading:"hidden",
+
+      form: {
+        u_freestream: "",
+        rho: "",
+        L: "",
+        mu: "",
+        y_plus_desired: "",
+
+        dtc: "",
+        md: "",
+        ls: "",
+        cd: "",
+        Rex: "",
+        Re: "",
+        lys: "",
+        lmi: "",
+        ldlzxxs: "",
+        lld: "",
+        Re: "",
+        dtc: "",
+        lls: "",
+      },
+      uploadlist: [
+        {
+          name: "mapbc",
+          percentage: 0,
+        },
+        {
+          name: "ugrid",
+          percentage: 0,
+        },
+      ],
+      ContourSurface: false,
+      adilog: adilog,
+      loading: loading,
+      scaleimage: scaleimage,
+      transformimage: transformimage,
+      rotationimage: rotationimage,
+      inviscid: inviscid,
+      laminar: laminar,
+      turbulent: turbulent,
+      times: times,
+      fluxr: fluxr,
+      fluxj: fluxj,
+      fluxl: fluxl,
+      boundary: boundary,
+      volume: volume,
+      special: special,
+      run: run,
+      swap: swap,
+      headMenu_2Show: false,
+      leftMenu_2Show: false,
+      gennealShow: false,
+      physicsShow: false,
+      solutionShow: false,
+      resultShow: false,
+      Consoleshow: true,
+      TaskGenealshow: false,
+      TaskPhysicsshow: false,
+      TaskSolutionshow: false,
+      TaskSurfaceshow: false,
+      TaskVolumeshow: false,
+      ugridUrl: "",
+      bload: null,
+      websock: null,
+      logs: "欢迎来到HCFD!",
+      islogload: true, //控制log请求(ture 发起 false 不发起)
+      outline: "OutLine",
+      fileNames: [],
+
+      belementCheckeds: ["Mesh"],
+      boundaryStep: [],
+      bStep: 100,
+      boundaryScalars: [],
+      bScalar: "p",
+
+      velementCheckeds: ["Mesh"],
+      vStep: 100,
+      volumStep: [],
+      volumScalars: [],
+      vSalar: "p",
+
+      isSolverEnd: false, //判断是否求解完成
+      solverState: "0", //求解状态(0-未求解 1-求解中 2-求解完成)
+
+      menuList: [
+        {
+          id: "1",
+          label: "Setup",
+          children: [
+            {
+              id: "2",
+              label: "General",
+            },
+            {
+              id: "3",
+              label: "Physics",
+            },
+            {
+              id: "4",
+              label: "Solution",
+            },
+          ],
+        },
+        {
+          id: "5",
+          label: "Results",
+          children: [
+            {
+              id: "6",
+              label: "Monitor",
+            },
+            {
+              id: "7",
+              label: "Surface Grid",
+            },
+            {
+              id: "8",
+              label: "Volume Grid",
+            },
+            {
+              id: "9",
+              label: "Ugrid",
+            },
+          ],
+        },
+      ],
+
+      dialog: {
+        //弹出框 控制
+        new_visiable: false,
+        load_visiable: false,
+        ziyuan:false,
+        upload_visiable: false,
+        scale_visiable: false,
+        translation_visiable: false,
+        rotation_visiable: false,
+        laminar_visiable: false,
+        turbulent_visiable: false,
+        reference_visiable: false,
+        fluxrc_visiable: false,
+        fluxl_visiable: false,
+        fluxjc_visiable: false,
+        time_visiable: false,
+        timeasm_visiable: false,
+        specified_visiable: false, //未完成
+        runc_visiable: false,
+        boundaryo_visiable: false,
+        volumeo_visiable: false,
+        specialp_visiable: false,
+        swap_visiable: false,
+      },
+      geneal: {
+        //数据存储
+        MeshTransform: {
+          Scale: {
+            Factor: 1,
+          },
+          Translation: {
+            Distance: 0,
+            X: 1,
+            Y: 0,
+            Z: 0,
+          },
+          Rotation: {
+            Angle: 0,
+            X: 0,
+            Y: 0,
+            Z: 0,
+            X1: 1,
+            Y1: 0,
+            Z1: 0,
+          },
+        },
+      },
+      Physics: {
+        Turbulent: {
+          TurbulentPrandtlNumber: 0.9,
+        },
+        Boundary: {
+          bquery: null, //hcfdBoundary 选中数据 id
+          hcfdBoundaryquery: null, //hcfdBoundary 选中数据
+          cquery: null,
+          /* 黎曼远场边界(Farfield) 5000
+           * 自由来流边界(Freestream)5050
+           * 无粘壁面(Inviscous Wall) 3000
+           * 粘性壁面(Viscous Wall)4000
+           * X-对称平面(X-symmetry Plane)6661
+           * Y-对称平面(Y-symmetry Plane ) 6662
+           * Z-对称平面Z-symmetry Plane) 6663
+           * 周期边界(Periodic) 6100*/
+          Conditions: [
+            { conditionsCode: 5000, name: "Farfield" },
+            { conditionsCode: 5050, name: "Freestream" },
+            { conditionsCode: 3000, name: "Inviscous Wall" },
+            { conditionsCode: 4000, name: "Viscous Wall" },
+            { conditionsCode: 6661, name: "X-symmetry Plane" },
+            { conditionsCode: 6662, name: "Y-symmetry Plane" },
+            { conditionsCode: 6663, name: "Z-symmetry Plane" },
+            { conditionsCode: 6100, name: "Periodic" },
+          ],
+        },
+      },
+      Solution: {
+        boundaryout: {
+          checkAll: false,
+          checkeds: [],
+          lists: [
+            "X-component of velocity",
+            "Y-component of velocity",
+            "Z-component of velocity",
+            "Press",
+            "Press coefficient",
+            "Mach Number",
+            "Vorticity magnitude",
+            "X-component of vorticity",
+            "Y-component of vorticity",
+            "Z-component of vorticity",
+            "Q Criterion",
+          ],
+          isIndeterminate: true,
+        },
+        volumout: {
+          checkAll: false,
+          checkeds: [],
+          lists: [
+            "X-component of velocity",
+            "Y-component of velocity",
+            "Z-component of velocity",
+            "Press",
+            "Press coefficient",
+            "Mach Number",
+            "Vorticity magnitude",
+            "X-component of vorticity",
+            "Y-component of vorticity",
+            "Z-component of vorticity",
+            "Q Criterion",
+          ],
+          isIndeterminate: true,
+        },
+      },
+      //state -1,0 ,1
+      //message
+      //type 1 一般 2 下载
+      loadObjs: [],
+      loadVVisiable: false,
+      loading: false,
+      fileurls: [],
+      project: {
+        projectId: "",
+        lesseeId:'',
+        projectName: "",
+        projectType: "hcfd",
+        projectDesc: "",
+        fileType: "ascii",
+        solverfiles: [],
+        solverVolumUrls: [],
+        solverBoundaryUrls: [],
+        loadfils: [],
+        converge: "",
+        uid: "",
+      },
+      projects: [],
+      parameterObjclone: [],
+      parameterObj: {
+        hcfdBoundarys: [
+          {
+            name: "WING1",
+            id: 1,
+            conditionsCode: 3000,
+          },
+        ],
+        nmlParam: {
+          a_vort_mag: "false",
+          case_title: "case_name",
+          angle_of_yaw: 0,
+          x_moment_center: 0,
+          eqn_type: "cal_perf_incompress",
+          schedule_cfl: [200, 200],
+          swap_yz_axes: "false",
+          v_vort_mag: "false",
+          pseudo_time_stepping: "on",
+          meanflow_sweeps: 15,
+          a_p: "true",
+          a_u: true,
+          a_w: "true",
+          a_v: "true",
+          dynamic_Mesh: "off",
+          jacobian_eval_freq: 10,
+          turb_model: "sa",
+          grid_format: "aflr3",
+          turbulence_sweeps: 10,
+          mach_number: 0.5,
+          y_moment_length: 1,
+          area_reference: 1,
+          flux_limiter: "none",
+          a_cp: "true",
+         viscous_terms : "inviscid",
+          volume_animation_freq: 100,
+          steps: 1500,
+          flux_construction_lhs: "roe",
+          stopping_tolerance: 1.0e-15,
+          prandtlnumber_molecular: 0.72,
+          restart_write_freq: 250,
+          v_vort_x: "false",
+          schedule_iteration: [1, 50],
+          v_vort_y: "false",
+          v_vort_z: "false",
+          line_implicit: "off",
+          temperature_units: "Rankine",
+          number_of_Processors: 2,
+          x_moment_length: 1,
+          time_accuracy: "steady",
+          angle_of_attack: 0,
+          subiterations: 0,
+          artificial_compress: 15,
+          a_q_criterion: "false",
+          schedule_cflturb: [50, 50],
+          schedule: 1,
+          first_order_iterations: 0,
+          restart_read: "off",
+          temperature: 491.4,
+          input_version: 2.2,
+          namelist_verbosity: "off",
+          ignore_euler_number: "false",
+          data_format: "ascii",
+          v_cp: "true",
+          time_step_nondim: 0,
+          a_mach: "true",
+          large_angle_fix: "off",
+          v_p: "true",
+          animation_freq: 100,
+          v_mach: "true",
+          project_rootname: "tf",
+          v_v: "true",
+          v_q_criterion: "false",
+          v_u: "true",
+          y_moment_center: 0,
+          v_w: true,
+          z_moment_center: 0,
+          parallel_Optional: "Serial",
+          analysis_Type: "Steady",
+          noninertial_Reference_Frame: "off",
+          flux_construction: "roe",
+          a_vort_z: "false",
+          a_vort_y: "false",
+          a_vort_x: "false",
+          reynolds_number: 1000000,
+        },
+      },
+
+      renderer_hight: 500,
+      renderer_width: 500,
+      showUgridflag: false, //ugrid 是否显示过
+      showSurfaceflag: false, //surface 是否显示过
+      showVolumeflage: false, //Volume 是否显示过
+      showMonitorflage: false, //Monitor是否显示过
+    };
+  },
+  mounted() {
+    // this.project.projectId=this.$route.query.projectId;//获取url 参数
+     this.init();
+  },
+  components: {
+    vueUploader,
+    filesload,
+    loading,
+    UgridLoad,
+    VolumLoad,
+    BoundaryLoad,
+    transformtool,
+    Pagination,
+    // vtkLoad,
+    echartsHFCD,
+    "hcfd-Calculator": Calculator,
+  },
+    
+//  watch: {
+//   docData: {
+//    handler(newVal) {
+//    let arrboundaryout=[];
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_u);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_v);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_w);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_p);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_cp);
+//      arrboundaryout.push(this.parameterObj.nmlParam.a_mach);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_vort_mag );
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_vort_x);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_vort_y);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_vort_z);
+//     arrboundaryout.push(this.parameterObj.nmlParam.a_q_criterion);
+//    },
+//    deep: true,
+//   immediate: false,
+
+//   }
+// },
+  methods: {
+    //清除相关信息
+    clearAll() {
+      this.showUgridflag = false; //ugrid 是否显示过
+      this.showSurfaceflag = false; //surface 是否显示过
+      this.showVolumeflage = false; //Volume 是否显示过
+      this.showMonitorflage = false;
+
+      this.$refs.ugridLoad.clear();
+      this.$refs.volumLoad.clear();
+      this.$refs.boundaryLoad.clear();
+
+      this.$refs.ugridLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.islogload = true;
+
+      this.logs = "";
+      this.project = {
+        projectId: "",
+        projectName: "",
+        projectType: "hcfd",
+        projectDesc: "",
+        fileType: "ascii",
+        solverfiles: [],
+        solverVolumUrls: [],
+        solverBoundaryUrls: [],
+        loadfils: [],
+        converge: "",
+      };
+    },
+    init() {
+      this.project.projectId = this.$route.query.projectId; //获取url 参数
+      this.project.lesseeId = this.$store.getters.lesseeId; //获取url 参数
+    // this.project.projectId = '86d0d4a3f85c40bea218936b6bad59ca';
+    //    this.project.lesseeId = '1'; //获取url 参数
+      
+      if (
+        this.project.projectId != undefined &&
+        this.project.projectId != null
+      ) {
+        this.selectProjectOK();
+      }
+      this.missType=true
+      // console.log( this.project.projectId);
+      this.changeRendererSize();
+      this.logtime()
+    },
+    logtime(){
+      let self = this;
+      let projectId = self.project.projectId;
+        if (projectId != null && projectId != "" && self.islogload) {
+          self.islogload = false;
+          let params = {
+            transCode: "A00112",
+            projectId: projectId,
+            page: 0,
+            count: 30,
+          };
+          request(params)
+            .then((res) => {
+              let rows = res.rows;
+              self.logs = ""; //只显示最新的数据
+              rows.forEach((row) => {
+                self.logs = row.log + "\n" + self.logs;
+                if (row.log.indexOf("Solver end") > 0) {
+                  self.isSolverEnd = true;
+                }
+              });
+              self.islogload = true;
+            })
+            .catch((err) => {
+              self.islogload = true;
+            });
+        }
+    },
+    getlogs(){
+      var self = this;
+      let logtime=setInterval(getLog, 10000);
+      function getLog() {
+        let projectId = self.project.projectId;
+        if (projectId != null && projectId != "" && self.islogload) {
+          self.islogload = false;
+          let params = {
+            transCode: "A00112",
+            projectId: projectId,
+            page: 0,
+            count: 30,
+          };
+          request(params)
+            .then((res) => {
+              let rows = res.rows;
+              self.logs = ""; //只显示最新的数据
+              rows.forEach((row) => {
+                self.logs = row.log + "\n" + self.logs;
+                if (row.log.indexOf("Solver end") >= 0) {
+                  // console.log(row.log)
+                  self.exLoading='hidden';
+                  clearInterval(logtime)
+                  self.isSolverEnd = true;
+                }
+              });
+              self.islogload = true;
+            })
+            .catch((err) => {
+              self.islogload = true;
+              // self.exLoading='hidden';
+              clearInterval(logtime)
+            });
+        }
+      }
+      getLog();
+    },
+    setBoundaryScalars(scalars) {
+      this.boundaryScalars = scalars;
+    },
+    setVolumScalars(scalars) {
+      console.log(scalars)
+      this.volumScalars = scalars;
+    },
+    changeRendererSize() {
+      let allHight = this.$refs.all_w.offsetHeight;
+      let allwidth = this.$refs.all_w.offsetWidth;
+      this.$nextTick(() => {
+        if (!this.headMenu_2Show) {
+          this.renderer_hight = allHight - 61 - 149 - 13;
+          this.renderer_width = allwidth - 300;
+          this.$refs.transform.changeCssBig();
+        } else if (this.headMenu_2Show) {
+          this.renderer_hight = allHight - 61 - 207 - 149 - 6;
+          this.renderer_width = allwidth - 300;
+          this.$refs.transform.changeCssSmall();
+        }
+      });
+    },
+    change() {
+      this.Consoleshow = !this.Consoleshow;
+    },
+    // 工具栏的点击事件
+    yCalchange() {
+      this.Yvisiable = true;
+    },
+    reyCalchange() {
+      this.llsvisiable = true;
+    },
+    atmoCalchange() {},
+    // 弹框执行事件
+    referencevisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      // this.dialog.scale_visiable = false;
+    },
+    // referencevisiable(){
+    // this.parameterObjclone=JSON.parse(sessionStorage.getItem('res'));
+    //   this.parameterObj.nmlParam= this.parameterObjclone.nmlParam;
+    // this.dialog.reference_visiable = false;
+    // },
+    timeasmvisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      this.dialog.timeasm_visiable = false;
+    },
+    runcvisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      this.dialog.runc_visiable = false;
+    },
+    dialogbtny() {
+      let u_freestream = eval(this.form.u_freestream);
+      if (u_freestream <= 0.0) {
+        alert("Free stream velocity must be greater than zero");
+        return;
+      }
+
+      let rho = eval(this.form.rho);
+      if (rho <= 0.0) {
+        alert("Density must be greater than zero");
+        return;
+      }
+      let L = eval(this.form.L);
+      if (L <= 0.0) {
+        alert("Boundary layer reference length must be greater than zero");
+        return;
+      }
+      let mu = eval(this.form.mu);
+      if (mu <= 0.0) {
+        alert("Dynamic viscosity must be greater than zero");
+        return;
+      }
+      let y_plus_desired = eval(this.form.y_plus_desired);
+      if (y_plus_desired <= 0.0) {
+        alert("Desired y+ value must be greater than zero");
+        return;
+      }
+      let Re = (rho * u_freestream * L) / mu;
+      let C_f = 0.026 * Math.pow(Re, -(1.0 / 7.0));
+      C_f = 0.0576 * Math.pow(Re, -1.0 / 5.0);
+      C_f = 0.37 * Math.pow(Math.log(Re) / Math.log(10), -2.584);
+      C_f = Math.pow((2 * Math.log(Re)) / Math.log(10) - 0.65, -2.3);
+      let tau_w = C_f * 0.5 * rho * u_freestream * u_freestream;
+      let U_f = Math.sqrt(tau_w / rho);
+      let wall_distance_estimation = (y_plus_desired * mu) / (U_f * rho);
+      this.form.Rex = Re.toExponential(1);
+      this.form.dtc = wall_distance_estimation.toExponential(1);
+    },
+    leinsdialogbtny() {
+      this.form.Re =
+        (this.form.lmi * this.form.lls * this.form.lld) / this.form.ldlzxxs;
+      // console.log(this.form.Re);
+    },
+    unitConversion() {
+      this.$refs.Calculator.visiable = true;
+    },
+    taskchangGeneal() {
+      this.TaskGenealshow = false;
+    },
+    taskchangPhysics() {
+      this.TaskPhysicsshow = false;
+    },
+    taskchangSolution() {
+      this.TaskSolutionshow = false;
+    },
+    taskchangSurface() {
+      this.TaskSurfaceshow = false;
+    },
+    taskchangVolume() {
+      this.TaskVolumeshow = false;
+ 
+    },
+    //  Contour
+
+    Contourval(val) {
+      switch (val) {
+        case "Mesh":
+          this.showSurface();
+          break;
+        case "Contour":
+          // this.$refs.boundaryLoad.divb=false;
+          this.showSurface();
+      }
+    },
+    ContourvalVolume(val) {
+      switch (val) {
+        case "Mesh":
+          this.showVolume();
+          break;
+        case "Contour":
+          this.showVolume();
+      }
+    },
+    physicslaminar() {
+      this.dialog.laminar_visiable = true;
+    },
+    physicsturbulent() {
+      this.dialog.turbulent_visiable = true;
+    },
+    viscouschange() {
+      if (this.parameterObj.nmlParam.viscous_terms == "laminar") {
+        this.dialog.laminar_visiable = true;
+      } else if (this.parameterObj.nmlParam.viscous_terms == "turbulent") {
+        this.dialog.turbulent_visiable = true;
+      }
+    },
+    showHeadMenu(emt) {
+      if (
+        (emt == "geneal" && this.gennealShow && this.headMenu_2Show) ||
+        (emt == "physics" && this.physicsShow && this.headMenu_2Show) ||
+        (emt == "solution" && this.solutionShow && this.headMenu_2Show) ||
+        (emt == "result" && this.resultShow && this.headMenu_2Show)
+      ) {
+        this.headMenu_2Show = false;
+        this.changeRendererSize();
+        
+        return;
+      }
+      this.headMenu_2Show = true;
+
+      if (emt == "geneal") {
+        this.gennealShow = true;
+        this.physicsShow = false;
+        this.solutionShow = false;
+        this.resultShow = false;
+      }
+      if (emt == "physics") {
+        this.gennealShow = false;
+        this.physicsShow = true;
+        this.solutionShow = false;
+        this.resultShow = false;
+      }
+      if (emt == "solution") {
+        this.gennealShow = false;
+        this.physicsShow = false;
+        this.solutionShow = true;
+        this.resultShow = false;
+      }
+      if (emt == "result") {
+        this.gennealShow = false;
+        this.physicsShow = false;
+        this.solutionShow = false;
+        this.resultShow = true;
+        //  console.log(this.$refs.boundaryLoad.container_show)
+        //   console.log(this.$refs.volumLoad.container_show)
+        if (
+          this.$refs.boundaryLoad.container_show == false &&
+          this.$refs.volumLoad.container_show == false
+        ) {
+          this.showSurface()
+          this.showVolumers()
+        } else {
+        }
+      }
+      this.changeRendererSize();
+    },
+    showLeftMenu(emt) {
+      this.leftMenu_2Show = true;
+    },
+    uploadRequest1(params) {
+      let param = new FormData();
+      param.append("transCode", "A00102");
+      param.append("file", params.file);
+      param.append("projectId", this.project.projectId);
+      uploadFile(param)
+        .then((res) => {
+          // console.log(res);
+          // this.fileId = res.fileId
+          this.findParam();
+          this.getHCFDLoadFiles();
+        })
+        .catch((err) => {});
+    },
+    uploadRequest2(params) {
+      let param = new FormData();
+      param.append("transCode", "A00102");
+      param.append("file", params.file);
+      param.append("projectId", this.project.projectId);
+      uploadFile(param)
+        .then((res) => {
+          // console.log(res);
+          // this.fileId = res.fileId
+          this.findParam();
+        })
+        .catch((err) => {});
+    },
+    //获取上传文件
+    async getHCFDLoadFiles() {
+      let params = {
+        transCode: "A00110",
+        projectId: this.project.projectId,
+      };
+      await request(params)
+        .then((res) => {
+          this.project.loadfils = res.files;
+          this.fileNames = [];
+          res.files.forEach((url) => {
+            let names = url.filepath.split("/");
+            let name = names[names.length - 1];
+            this.fileNames.push(name);
+          });
+        })
+        .catch((err) => {});
+    },
+    //获取计算结果文件 并缓存
+    async gethcfdsolverfiles() {
+      let params = {
+        transCode: "A00109",
+        projectId: this.project.projectId,
+      };
+      await request(params)
+        .then((res) => {
+          this.project.solverfiles = res.files;
+        })
+        .catch((err) => {});
+      this.project.solverfiles.forEach((solverfile) => {
+        let url = solverfile.filepath;
+        if (
+          url.indexOf("volume_timestep") > 1 ||
+          url.indexOf("boundary_timestep") > 1 ||
+          url.indexOf("converge.dat") > 1
+        ) {
+          let names = url.split("/");
+          let name = names[names.length - 1];
+          let loadOj3 = {
+            type: 2,
+            filename: name,
+            percentage: 0,
+          };
+          this.loadObjs.push(loadOj3);
+          this.$refs.filesload.load(url);
+        }
+        if (url.indexOf("volume_timestep") > 1) {
+          this.project.solverVolumUrls.push(url);
+        }
+        if (url.indexOf("boundary_timestep") > 1) {
+          this.project.solverBoundaryUrls.push(url);
+        }
+        if (url.indexOf("converge.dat") > 1) {
+          this.project.converge = url;
+        }
+      });
+      this.project.solverVolumUrls.forEach((url) => {
+        let step = url.split("volume_timestep")[1].split(".da")[0];
+        this.bStep=step;
+        this.volumStep.push(step);
+        let newArr = [...new Set(this.volumStep)]; //去重
+        this.volumStep = newArr;
+      });
+      this.project.solverBoundaryUrls.forEach((url) => {
+        let step = url.split("boundary_timestep")[1].split(".da")[0];
+        this.vStep=step;
+        this.boundaryStep.push(step);
+        let newArr = [...new Set(this.boundaryStep)]; //去重
+        this.boundaryStep = newArr;
+      });
+    },
+    /**
+     * 更新配置 并求解
+     */
+    async hcfdrun() {
+      // this.clearAll();
+      this.showUgridflag = false; //ugrid 是否显示过
+      this.showSurfaceflag = false; //surface 是否显示过
+      this.showVolumeflage = false; //Volume 是否显示过
+      this.showMonitorflage = false;
+
+      this.$refs.ugridLoad.clear();
+      this.$refs.volumLoad.clear();
+      this.$refs.boundaryLoad.clear();
+
+      this.$refs.ugridLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.islogload = true;
+
+      // this.loadObjs = [];
+      
+      // let loadOj1 = {
+      //   type: 1,
+      //   message: "参数更新",
+      //   state: -1,
+      // };
+      // this.loadObjs.push(loadOj1);
+      // let loadOj2 = {
+      //   type: 1,
+      //   message: "求解",
+      //   state: -1,
+      // };
+      // this.loadObjs.push(loadOj2);
+      await this.updateParam();
+      // loadOj1.state = 1;
+
+      if (this.solverState == "2") {
+        //上次求解完成
+        MessageBox.confirm(
+          "已完成计算,是否放弃上次计算结果,重新计算? 如果不放弃请自行下载上次结果文件!",
+          "提示",
+          {
+            confirmButtonText: "重新计算",
+            cancelButtonText: "取消",
+            type: "warning",
+          }
+        )
+          .then(() => {
+            MessageBox.close();
+            this.exLoading='visible';
+            this.isSolverEnd = false;
+            this.hcfdExe();
+            let _this = this;
+            let isStop = false;
+            setInterval(function () {
+              if (!isStop && _this.isSolverEnd) {
+                isStop = true;
+                // loadOj2.state = 1;
+                _this.showHeadMenu("result");
+                
+              }
+            }, 500);
+            //  let logUrl = window.location.protocol+"//"+window.location.host+"/"+Caegw_LogUrl;
+            //  // console.log(logUrl);
+            //  window.location.href=logUrl
+          })
+          .catch(() => {
+            Message.info("已取消!");
+            loadOj2.state = 1;
+            MessageBox.close();
+          });
+      } else {
+        this.exLoading='visible';
+        this.isSolverEnd = false;
+        this.hcfdExe();
+        let _this = this;
+        let isStop = false;
+        setInterval(function () {
+          if (!isStop && _this.isSolverEnd) {
+            isStop = true;
+            // loadOj2.state = 1;
+            // _this.gethcfdsolverfiles();
+            _this.showHeadMenu("result");
+          }
+        }, 500);
+      }
+    },
+    //求解
+    hcfdExe() {
+      var _this = this;
+      let params = {
+        transCode: "A00105",
+        projectId: this.project.projectId,
+        lesseeId:this.$store.getters.lesseeId,
+        userName:this.$store.getters.name
+      };
+      request(params)
+        .then((res) => {
+          // console.log("hcfdExe" + res);
+          this.getlogs()
+        })
+        .catch((err) => {
+          //  console.log("hcfdExe" + err);
+          setTimeout(function () {
+            _this.$refs.loading.visiable = false;
+          }, 4000);
+
+          if (err.returnCode == "EB8100017") {
+            //资源未分配
+            // _this.loading=false;
+            //_this.$refs.loading.visiable=false
+            // console.log(1111);
+            MessageBox.confirm("你还未分配资源?", "提示", {
+              confirmButtonText: "分配资源",
+              cancelButtonText: "取消",
+              type: "warning",
+            })
+              .then(() => {
+                // const errUril = Caegw_ProUrl +"?projectId="+_this.project.projectId;
+                let errUril =
+                  // window.location.protocol +
+                  // "//" +
+                  // window.location.host +
+                  // "/" +
+                  _this.$store.getters.proUrl +
+                  "?projectId=" +
+                  _this.project.projectId;
+                let params2 = {
+                  transCode: "A00118",
+                  lesseeId: _this.$store.getters.lesseeId
+                };
+                request(params2)
+                  .then((res) => {
+                    window.location.href =
+                      errUril + "&authCode=" + res.authCode;
+                  })
+                  .catch((err) => {});
+              })
+              .catch(() => {
+                _this.$refs.loading.visiable = false;
+                Message({
+                  type: "info",
+                  message: "已取消",
+                });
+              });
+          }
+        });
+    },
+    async reUpload() {
+      this.$refs.mapbc.uploader.upload();
+      this.$refs.ugrid.uploader.upload();
+    },
+
+    async saveProject(formName) {
+      //  this.$refs[formName].validate((valid) => {
+      //         if (valid && this.files.length != 0) {
+      //         }else{
+      //           console.log(2222);
+      //         }
+      //     })
+      const params = {
+        transCode: "A00100",
+        projectName: this.project.projectName,
+        projectDesc: this.project.projectDesc,
+        parameterObj: null,
+        projectType: "hcfd",
+        fileType: this.project.fileType,
+        lesseeId: this.$store.getters.lesseeId
+      };
+
+      if (
+        params.projectName == "" ||
+        params.projectName == undefined ||
+        params.projectName == null
+      ) {
+        Message({
+          type: "error",
+          message: "项目名称不能为空",
+        });
+      } else if (
+        params.projectDesc == "" ||
+        params.projectDesc == undefined ||
+        params.projectDesc == null
+      ) {
+        Message({
+          type: "error",
+          message: "描述信息不能为空",
+        });
+      } else if (
+        this.$refs.mapbc.files.length == 0 ||
+        this.$refs.ugrid.files.length == 0
+      ) {
+        Message({
+          type: "error",
+          message: "项目文件不能为空",
+        });
+      } else {
+        await request(params)
+          .then((res) => {
+            this.clearAll();
+            // console.log(res);
+            this.project.projectId = res.projectId;
+            this.project.projectName=res.projectName;
+            this.project.projectDesc=res.projectDesc;
+            this.project.fileType=res.fileType;
+          })
+          .catch((err) => {
+            return;
+          });
+        await this.reUpload();
+      }
+    },
+    async ugridShow() {
+      if (
+        this.project.projectId == "" ||
+        this.project.projectId == undefined ||
+        this.project.projectId == null
+      ) {
+        Message({
+          type: "error",
+          message: "缺少文件,请检查修改",
+        });
+      } else {
+        this.dialog.new_visiable = false;
+
+        // await this.getHCFDLoadFiles();
+        this.loadObjs = [];
+        let loadOj1 = {
+          type: 1,
+          message: "获取参数",
+          state: -1,
+        };
+        this.loadObjs.push(loadOj1);
+
+        let loadOj2 = {
+          type: 1,
+          message: "获取上传文件URL",
+          state: -1,
+        };
+        this.loadObjs.push(loadOj2);
+        await this.findParam();
+        loadOj1.state = 1;
+        await this.getHCFDLoadFiles();
+        loadOj2.state = 1;
+        this.project.loadfils.forEach((url) => {
+          let names = url.filepath.split("/");
+          let name = names[names.length - 1];
+          let loadOj3 = {
+            type: 2,
+            filename: name,
+            percentage: 0,
+          };
+          this.loadObjs.push(loadOj3);
+          this.$refs.filesload.load(url.filepath);
+          this.$refs.filesload.load(url.filepath);
+          if (url.filepath.indexOf(".ugrid") > 0) {
+            this.ugridUrl = url.filepath;
+          }
+        });
+        this.$refs.ugridLoad.loadUgrid(this.ugridUrl, 1);
+      }
+    },
+    async findParam() {
+      let params = {
+        transCode: "A00107",
+        projectId: this.project.projectId,
+      };
+      // console.log(params);
+      await request(params)
+        .then((res) => {
+          // console.log("findParam:" + res);
+          
+          this.project.projectName = res.projectName;
+          this.project.uid = res.uid;
+          let cjuserid = this.$route.query.cjuserid;
+          if(res.missionType==='3'||res.missionType==='4'){
+            this.missType=false
+          }else{
+            this.missType=true
+          }
+          // console.log("A00107:",res);
+          // console.log("cjuserid:",cjuserid);
+          // if(cjuserid&&cjuserid==this.project.uid){
+          //     this.newload  = true;
+          //     this.runMonitor=true;
+          // }else{
+          //     this.newload  = false;
+          //     this.runMonitor=false;
+          // }
+          console.log(this.parameterObj)
+          this.parameterObj = JSON.parse(res.parameterObj);
+          sessionStorage.setItem("res", res.parameterObj);
+          //  this.parameterObjclone=JSON.parse(res.parameterObj);
+          // console.log(res);
+        })
+        .catch((err) => {});
+    },
+    //上传配置参数
+    async updateParam() {
+      delete this.parameterObj.nmlParam.initialization;
+      let params = {
+        transCode: "A00104",
+        parameterObj: JSON.stringify(this.parameterObj),
+        projectId: this.project.projectId,
+        lesseeId: this.$store.getters.lesseeId
+      };
+        console.log(this.parameterObj.nmlParam.a_u);
+      console.log(this.parameterObj);
+      await request(params)
+        .then((res) => {
+          // console.log("updateParam" + res);
+          // this.parameterObj = JSON.parse(res.parameterObj);
+          this.solverState = res.solverState;
+        })
+        .catch((err) => {});
+    },
+    loadProjects() {
+      let params = {
+        transCode: "A00101",
+        page: 1,
+        size: 1,
+        projectType: "hcfd",
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+          // console.log("项目:" + res.rows);
+          this.projects = res.rows;
+          this.loading = false;
+        })
+        .catch((err) => {});
+    },
+    projectsSelectionChange(val) {
+      this.clearAll();
+      if (val.length > 0) {
+        this.project.projectId = val[0].projectId;
+        this.project.projectName = val[0].projectName;
+        this.project.projectDesc = val[0].projectDesc;
+      }
+    },
+    projectsSelectionSelect(selection, row) {
+      if (selection.length <= 1) return;
+      this.$refs.projectsTable.clearSelection();
+      this.$refs.projectsTable.toggleRowSelection(row, true);
+    },
+    //load状态回调
+    fileLoadeState(files) {
+      files.forEach((file) => {
+        this.loadObjs.forEach((obj) => {
+          if (obj.type == 2) {
+            if (obj.filename === file.name) {
+              obj.percentage = file.percentage;
+            }
+          }
+          if (obj.type == 1) {
+            //  obj.message=file.message;
+          }
+        });
+      });
+    },
+    // 选择项目
+    async selectProjectOK() {
+      this.dialog.load_visiable = false;
+      this.loadObjs = [];
+      let loadOj1 = {
+        type: 1,
+        message: "获取参数",
+        state: -1,
+      };
+      this.loadObjs.push(loadOj1);
+
+      let loadOj2 = {
+        type: 1,
+        message: "获取上传文件URL",
+        state: -1,
+      };
+      this.loadObjs.push(loadOj2);
+
+      //结束
+      await this.findParam();
+      loadOj1.state = 1;
+      await this.getHCFDLoadFiles();
+      loadOj2.state = 1;
+      this.project.loadfils.forEach((url) => {
+        let names = url.filepath.split("/");
+        let name = names[names.length - 1];
+        let loadOj3 = {
+          type: 2,
+          filename: name,
+          percentage: 0,
+        };
+        this.loadObjs.push(loadOj3);
+        this.$refs.filesload.load(url.filepath);
+        if (url.filepath.indexOf(".ugrid") > 0) {
+          this.ugridUrl = url.filepath;
+        }
+      });
+      this.showUgrid();
+      this.logtime()
+    },
+
+    boundaryChange(boundaryid) {
+      this.parameterObj.hcfdBoundarys.forEach((hcfdBoundary) => {
+        if (hcfdBoundary.id === boundaryid) {
+          this.Physics.hcfdBoundaryquery = hcfdBoundary;
+          this.Physics.Boundary.cquery = hcfdBoundary.conditionsCode;
+          return;
+        }
+      });
+    },
+    conditionsChange(conditionsCode) {
+      this.Physics.hcfdBoundaryquery.conditionsCode = conditionsCode;
+    },
+    // solutionbCheckAllChange(val) {
+    //   this.Solution.boundaryout.checkeds = val
+    //     ? this.Solution.boundaryout.lists
+    //     : [];
+    //   this.Solution.boundaryout.isIndeterminate = false;
+    //   this.solutionbSetParam();
+    // },
+ 
+     solutionbCheckAllChange(val) {
+if(val==true){
+   this.parameterObj.nmlParam.a_u = true;
+      this.parameterObj.nmlParam.a_v = true;
+       this.parameterObj.nmlParam.a_w = true;
+      this.parameterObj.nmlParam.a_p = true;
+      this.parameterObj.nmlParam.a_cp = true;
+      this.parameterObj.nmlParam.a_mach = true;
+      this.parameterObj.nmlParam.a_vort_mag = true;
+      this.parameterObj.nmlParam.a_vort_x = true;
+      this.parameterObj.nmlParam.a_vort_y = true;
+      this.parameterObj.nmlParam.a_vort_z = true;
+      this.parameterObj.nmlParam.a_q_criterion = true;
+      this.Solution.boundaryout.isIndeterminate = false;
+      //this.solutionbSetParam();
+}else {
+   
+     this.parameterObj.nmlParam.a_u = false;
+      this.parameterObj.nmlParam.a_v = false;
+       this.parameterObj.nmlParam.a_w = false;
+      this.parameterObj.nmlParam.a_p = false;
+      this.parameterObj.nmlParam.a_cp = false;
+      this.parameterObj.nmlParam.a_mach = false;
+      this.parameterObj.nmlParam.a_vort_mag = false;
+      this.parameterObj.nmlParam.a_vort_x = false;
+      this.parameterObj.nmlParam.a_vort_y = false;
+      this.parameterObj.nmlParam.a_vort_z = false;
+      this.parameterObj.nmlParam.a_q_criterion = false;
+       this.Solution.boundaryout.isIndeterminate = false;
+} 
+        
+  
+    },
+    solutionbCheckedCitiesChange(value) {
+      let checkedCount = value.length;
+      this.Solution.boundaryout.checkAll =
+        checkedCount === this.Solution.boundaryout.lists.length;
+      this.Solution.boundaryout.isIndeterminate =
+        checkedCount > 0 &&
+        checkedCount < this.Solution.boundaryout.lists.length;
+      this.solutionbSetParam();
+    },
+    solutionbSetParam() {
+      this.Solution.boundaryout.checkeds.forEach((cell) => {
+        switch (cell) {
+          case "X-component of velocity":
+            console.log( this.parameterObj.nmlParam.a_u);
+            this.parameterObj.nmlParam.a_u = true;
+            break;
+          case "Y-component of velocity":
+            this.parameterObj.nmlParam.a_v = true;
+            break;
+          case "Z-component of velocity":
+            this.parameterObj.nmlParam.a_w = true;
+            break;
+          case "Press":
+            this.parameterObj.nmlParam.a_p = true;
+            break;
+          case "Press coefficient":
+            this.parameterObj.nmlParam.a_cp = true;
+            break;
+          case "Mach Number":
+            this.parameterObj.nmlParam.a_mach = true;
+            break;
+          case "Vorticity magnitude":
+            this.parameterObj.nmlParam.a_vort_mag = true;
+            break;
+          case "X-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_x = true;
+            break;
+          case "Y-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_y = true;
+            break;
+          case "Z-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_z = true;
+            break;
+          case "Q Criterion":
+            this.parameterObj.nmlParam.a_q_criterion = true;
+            break;
+          default:   
+            break;
+        }
+               
+      });
+     
+    },
+    clickNew(){
+      this.project.projectName='';
+      this.dialog.new_visiable = true;
+      this.$refs.mapbc.$emit('childmethods');
+      this.$refs.ugrid.$emit('childmethods');
+    },
+    solutionvCheckAllChange(val) {
+      // this.Solution.volumout.checkeds = val ? this.Solution.volumout.lists : [];
+      // this.Solution.volumout.isIndeterminate = false;
+      // this.solutionbSetParam();
+      if(val==true){
+     this.parameterObj.nmlParam.v_u = true;
+      this.parameterObj.nmlParam.v_v = true;
+       this.parameterObj.nmlParam.v_w = true;
+      this.parameterObj.nmlParam.v_p = true;
+      this.parameterObj.nmlParam.v_cp = true;
+      this.parameterObj.nmlParam.v_mach = true;
+      this.parameterObj.nmlParam.v_vort_mag = true;
+      this.parameterObj.nmlParam.v_vort_x = true;
+      this.parameterObj.nmlParam.v_vort_y = true;
+      this.parameterObj.nmlParam.v_vort_z = true;
+      this.parameterObj.nmlParam.v_q_criterion = true;
+}else{
+     this.parameterObj.nmlParam.v_u = false;
+      this.parameterObj.nmlParam.v_v = false;
+       this.parameterObj.nmlParam.v_w = false;
+      this.parameterObj.nmlParam.v_p = false;
+      this.parameterObj.nmlParam.v_cp = false;
+      this.parameterObj.nmlParam.v_mach = false;
+      this.parameterObj.nmlParam.v_vort_mag = false;
+      this.parameterObj.nmlParam.v_vort_x = false;
+      this.parameterObj.nmlParam.v_vort_y = false;
+      this.parameterObj.nmlParam.v_vort_z = false;
+      this.parameterObj.nmlParam.v_q_criterion = false;
+   this.Solution.volumout.isIndeterminate = false;
+} 
+    },
+    solutionvCheckedCitiesChange(value) {
+      let checkedCount = value.length;
+      console.log(value);
+      this.Solution.volumout.checkAll =
+        checkedCount === this.Solution.volumout.lists.length;
+      this.Solution.volumout.isIndeterminate =
+        checkedCount > 0 && checkedCount < this.Solution.volumout.lists.length;
+      this.solutionvSetParam();
+    },
+    solutionvSetParam() {
+      this.Solution.volumout.checkeds.forEach((cell) => {
+        switch (cell) {
+          case "X-component of velocity":
+            this.parameterObj.nmlParam.v_u = true;
+            break;
+          case "Y-component of velocity":
+            this.parameterObj.nmlParam.v_v = true;
+            break;
+          case "Z-component of velocity":
+            this.parameterObj.nmlParam.v_w = true;
+            break;
+          case "Press":
+            this.parameterObj.nmlParam.v_p = true;
+            break;
+          case "Press coefficient":
+            this.parameterObj.nmlParam.v_cp = true;
+            break;
+          case "Mach Number":
+            this.parameterObj.nmlParam.v_mach = true;
+            break;
+          case "Vorticity magnitude":
+            this.parameterObj.nmlParam.v_vort_mag = true;
+            break;
+          case "X-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_x = true;
+            break;
+          case "Y-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_y = true;
+            break;
+          case "Z-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_z = true;
+            break;
+          case "Q Criterion":
+            this.parameterObj.nmlParam.v_q_criterion = true;
+            break;
+          default:
+            break;
+        }
+      });
+    },
+    //显示 UgridLoad
+    async showUgrid() {
+      console.log(this.showUgridflag);
+      this.$refs.volumLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.$refs.monitor.hiden();
+      if (!this.showUgridflag) {
+        //是否显示过
+        this.$refs.ugridLoad.clear();
+        if (this.project.loadfils.length == 0) {
+          await this.getHCFDLoadFiles();
+        }
+        this.project.loadfils.forEach((url) => {
+          if (url.filepath.indexOf(".ugrid") > 0) {
+            this.ugridUrl = url.filepath;
+          }
+        });
+
+        this.$refs.ugridLoad.loadUgrid(this.ugridUrl, 1);
+        this.showUgridflag = true;
+      } else {
+        this.$refs.ugridLoad.nhiden();
+      }
+    },
+    // Task Page
+    handleNodeClick(data) {
+      let treeid = data.id;
+      if (treeid == "2") {
+        this.TaskGenealshow = true;
+        this.TaskPhysicsshow = false;
+        this.TaskSolutionshow = false;
+        this.TaskSurfaceshow = false;
+        this.TaskVolumeshow = false;
+      } else if (treeid == "3") {
+        this.TaskGenealshow = false;
+        this.TaskPhysicsshow = true;
+        this.TaskSolutionshow = false;
+        this.TaskSurfaceshow = false;
+        this.TaskVolumeshow = false;
+      } else if (treeid == "4") {
+        this.TaskGenealshow = false;
+        this.TaskPhysicsshow = false;
+        this.TaskSolutionshow = true;
+        this.TaskSurfaceshow = false;
+        this.TaskVolumeshow = false;
+      } else if (treeid == "7") {
+        this.TaskGenealshow = false;
+        this.TaskPhysicsshow = false;
+        this.TaskSolutionshow = false;
+        this.TaskSurfaceshow = true;
+        this.TaskVolumeshow = false;
+      } else if (treeid == "8") {
+        this.TaskGenealshow = false;
+        this.TaskPhysicsshow = false;
+        this.TaskSolutionshow = false;
+        this.TaskSurfaceshow = false;
+        this.TaskVolumeshow = true;
+      } else if (treeid == "6") {
+        this.showMonitor();
+      } else if (treeid == "9") {
+        this.showUgrid();
+      } else {
+        this.TaskGenealshow = false;
+        this.TaskPhysicsshow = false;
+        this.TaskSolutionshow = false;
+        this.TaskSurfaceshow = false;
+        this.TaskVolumeshow = false;
+      }
+      this.changeRendererSize();
+    },
+    //显示 Surface
+    async showSurface() {
+      let mesh = false;
+      let contour = false;
+      this.belementCheckeds.forEach((ele) => {
+        if ("Mesh" == ele) {
+          mesh = true;
+        } else if ("Contour" == ele) {
+          contour = true;
+        }
+      });
+      this.$refs.ugridLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      this.$refs.monitor.hiden();
+      if (!this.showSurfaceflag) {
+        this.$refs.boundaryLoad.clear();
+        if (this.project.solverfiles.length == 0) {
+          await this.gethcfdsolverfiles();
+        }
+        let burl;
+       
+        this.project.solverBoundaryUrls.forEach((url) => {
+          if (url.indexOf(this.bStep + ".dat") > 0) {
+            burl = url;
+          }
+        });
+        if (mesh) {
+          this.$refs.boundaryLoad.loadBoundary(burl, 1, this.bScalar);
+        }
+        if (contour) {
+          this.$refs.boundaryLoad.loadBoundary(burl, 2, this.bScalar);
+        }
+        this.showSurfaceflag = true;
+      } else {
+        this.$refs.boundaryLoad.clear();
+        this.$refs.boundaryLoad.nhiden();
+        if (mesh) {
+          this.$refs.boundaryLoad.mesh(this.bScalar);
+        }
+        if (contour) {
+          //  console.log(222);
+          this.$refs.volumLoad.vdivb = false;
+          this.$refs.boundaryLoad.divb = true;
+          this.$refs.boundaryLoad.contour(this.bScalar);
+        }
+      }
+    },
+
+    //通过 volume 解析文件,不显示图像
+    async showVolumers() {
+      let mesh = false;
+      let contour = false;
+      this.velementCheckeds.forEach((ele) => {
+        if ("Mesh" == ele) {
+          mesh = true;
+        } else if ("Contour" == ele) {
+          contour = true;
+        }
+      });
+      if (!this.showVolumeflage) {
+        this.$refs.volumLoad.clear();
+        if (this.project.solverfiles.length == 0) {
+          await this.gethcfdsolverfiles();
+        }
+        let urls = [];
+        this.project.solverVolumUrls.forEach((url) => {
+          if (url.indexOf(this.bStep + ".dat") > 0) {
+            urls.push(url);
+          }
+        });
+        if (mesh) {
+          this.$refs.volumLoad.loadVolumHiden(urls, 1, this.vSalar);
+        }
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.loadVolumHiden(urls, 2, this.vSalar);
+        }
+      } else {
+        this.$refs.volumLoad.clear();
+        this.$refs.volumLoad.nhiden();
+        if (mesh) {
+          this.$refs.volumLoad.mesh(this.vSalar);
+        }
+
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.contour(this.vSalar);
+        }
+      }
+    },
+    async showVolume() {
+      let mesh = false;
+      let contour = false;
+      this.velementCheckeds.forEach((ele) => {
+        if ("Mesh" == ele) {
+          mesh = true;
+        } else if ("Contour" == ele) {
+          contour = true;
+        }
+      });
+
+      this.$refs.ugridLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.$refs.monitor.hiden();
+
+      if (!this.showVolumeflage) {
+        this.$refs.volumLoad.clear();
+        if (this.project.solverfiles.length == 0) {
+          await this.gethcfdsolverfiles();
+        }
+        let urls = [];
+        this.project.solverVolumUrls.forEach((url) => {
+          if (url.indexOf(this.bStep + ".dat") > 0) {
+            urls.push(url);
+          }
+        });
+        if (mesh) {
+          this.$refs.volumLoad.loadVolum(urls, 1, this.vSalar);
+        }
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.loadVolum(urls, 2, this.vSalar);
+        }
+        this.showVolumeflage = true;
+      } else {
+        this.$refs.volumLoad.clear();
+        this.$refs.volumLoad.nhiden();
+        if (mesh) {
+          this.$refs.volumLoad.mesh(this.vSalar);
+        }
+
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.contour(this.vSalar);
+        }
+      }
+    },
+    async showMonitor() {
+      this.$refs.ugridLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      if (!this.showMonitorflage) {
+        if (this.project.converge == "") {
+          await this.gethcfdsolverfiles();
+        }
+        let convergeUrl = this.project.converge;
+        this.$refs.monitor.loadConverge(convergeUrl);
+      } else {
+        this.$refs.monitor.nhiden();
+      }
+      this.showMonitorflage = true;
+    },
+    large() {
+      this.$refs.ugridLoad.large();
+      this.$refs.boundaryLoad.large();
+      this.$refs.volumLoad.large();
+    },
+    small() {
+      this.$refs.ugridLoad.small();
+      this.$refs.boundaryLoad.small();
+      this.$refs.volumLoad.small();
+    },
+    positive(axis) {
+      this.$refs.ugridLoad.positive(axis);
+      this.$refs.boundaryLoad.positive(axis);
+      this.$refs.volumLoad.positive(axis);
+    },
+    negative(axis) {
+      this.$refs.ugridLoad.negative(axis);
+      this.$refs.boundaryLoad.negative(axis);
+      this.$refs.volumLoad.negative(axis);
+    },
+    // 资源选择代码
+    showresource(){
+      this.dialog.ziyuan=true;
+      this.getresource();
+    },
+    //获取资源代码
+    getresource(){
+      const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)',
+      })
+      setTimeout(() => {
+        const params = {
+          transCode: 'HG00000',
+        page: this.paginationConfig.page,
+        count: this.paginationConfig.size,
+          lesseeId:this.$store.getters.lesseeId,
+  
+        }
+        request(params)
+          .then((res) => { 
+             loading.close()
+            this.ziyprojects = res.rows;
+           this.paginationConfig.total = res.total
+           this.resourcelook();
+          })
+          .catch((err) => {
+            loading.close()
+          })
+      }, 500)
+    },
+     getPagination(data) {
+      this.paginationConfig = data
+      this.getresource()
+    },
+    //选中
+    ziySelectionChange (val) {
+   
+    let id= []
+     val.map((item)=> {
+    id.push(item.id)
+      })
+  this.selsectid= id.join(',')    
+    },
+     ziySelectionSelect(selection, row) {
+    },
+    //保存
+    resourceOK(){
+     
+       const params = {
+          transCode: 'HG00002',
+          otherId:this.project.projectId,
+          type:'1',
+           resourceIds:this.selsectid,
+          lesseeId:this.$store.getters.lesseeId,
+        }
+        request(params)
+          .then((res) => { 
+              Message({
+          type: "success",
+          message: "保存成功",
+        });
+       this.dialog.ziyuan=false;
+          })
+          .catch((err) => {
+         
+          })
+    },
+    // 查看已经中的
+        resourcelook(){
+           const params = {
+          transCode: 'HG00001',
+          otherId:  this.project.projectId,
+          type:'1',
+          lesseeId:this.$store.getters.lesseeId,
+        }
+        request(params)
+          .then((res) => { 
+          let rst=res.rows;
+            this.$refs.multipleTable.clearSelection();
+          if (rst.length > 0) {
+            for (var i = 0; i < rst.length; i++) { 
+              for ( let j = 0 ; j < this.ziyprojects.length; j++ ){
+                  if (this.ziyprojects[j].id === rst[i].resourceId) {
+                    this.$refs.multipleTable.toggleRowSelection(this.ziyprojects[j],true);
+                  } 
+              }
+            }
+          }
+          })
+  
+          .catch((err) => {
+         
+          })
+        }
+  },
+};
+</script>
+<style lang="scss">
+@media screen and (max-width:1650px){
+  .headMenu_2 .el-col{
+    transform:scale(0.9);
+    transform-origin: 0 0;
+  }
+  .headMenu_2{
+    height: 175px !important;
+  }
+}
+@media screen and (max-width:1330px){
+  .headMenu_2 .el-col{
+    transform:scale(0.8);
+    transform-origin: 0 0;
+  }
+  .headMenu_2{
+    height: 150px !important;
+  }
+  .asideTag2,.asideTag {
+    transform:scale(0.7);
+    transform-origin: 0 0;
+  }
+}
+@media screen and (max-width:1160px){
+  .headMenu_2 .el-col{
+    transform:scale(0.7);
+    transform-origin: 0 0;
+  }
+  .asideTag2{
+    left: 91%;
+  }
+  .el-aside{
+    width:170px !important;
+  }
+  .headMenu_2{
+    height: 135px !important;
+  }
+}
+body {
+  font-size: 62.5%;
+  position: relative;
+}
+.el-padding {
+  padding: 5px 20px;
+}
+.headMenu_1 {
+  background: #232426;
+}
+.logtitle {
+  color: #fff;
+}
+.el-header {
+  padding: 0;
+}
+.logs_console {
+  overflow: hidden;
+}
+.el-menu {
+  padding-left: 13px;
+}
+.el-menu .el-menu-item:hover {
+  background-color: #bfc5cb;
+  color: #333333;
+}
+// .el-menu--horizontal>.el-submenu:focus .el-submenu__title, .el-menu--horizontal>.el-submenu:hover .el-submenu__title{
+//  color: #e4e4e4;
+// }
+.el-menu--horizontal > .el-menu-item {
+  color: #e4e4e4;
+}
+.el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
+  color: #e4e4e4;
+}
+.el-menu--horizontal > .el-menu-item.is-active {
+  color: #e4e4e4;
+}
+.el-menu--horizontal > .el-submenu .el-submenu__title {
+  color: #e4e4e4;
+  font-size: 16px;
+}
+.el-menu--horizontal {
+  -webkit-box-pack: inherit;
+  justify-content: flex-start;
+}
+.logtitle li:nth-child(1) {
+  margin-right: 100px;
+}
+.el-menu-item {
+  font-size: 16px;
+  padding: 0 35px;
+}
+#head2 {
+  background-color: #f9f9f9;
+}
+#lg-title {
+  text-align: left;
+  padding: 6px 0px 6px 3.125vw;
+}
+.Task-lg {
+  width: 100%;
+}
+.el-col-1 {
+  width: 0; //重点修改了宽度
+}
+.title_content_1 {
+  padding-left: 2.96875vw;
+}
+.el-col-3 li {
+  padding: 6px 0;
+}
+.lg-er .el-col-3 li {
+  padding-top: 0;
+}
+.el-image {
+  padding-right: 4px;
+}
+.lg_weiyi .el-radio {
+  display: block;
+  padding: 6px 0 6px 3.125vw;
+}
+.el-dialog .el-input__inner {
+  height: 34px;
+  line-height: 34px;
+}
+.el-input--mini {
+  display: inline;
+}
+.lg-centent {
+  background-color: #f4f4f4;
+}
+.leiluoshu .el-form-item__content {
+  margin-left: 180px;
+}
+.lg-centent .el-row {
+  height: 100%;
+}
+.lg-modl {
+  width: 300px;
+  background: #f4f4f4;
+}
+.lg-centent .lg-modl .Task-lg {
+  // max-height: calc(100vh - 300px);
+  overflow-y: auto;
+}
+// .tasklg1{
+//   height: 100%;
+//   overflow-y: auto;
+// }
+// .tasklg2{
+//   height: calc(100%-225px);
+//   overflow-y: auto;
+// }
+.lg-san .el-col-3 li {
+  padding: 0;
+}
+
+.el-input--mini .el-input__inner {
+  width: 100%;
+}
+.el-radio__input.is-checked .el-radio__inner {
+  border-color: #333;
+  background: #333;
+}
+.beij-container {
+  width: 100%;
+  height: 100%;
+  background: linear-gradient(180deg, #ccd3e2 0%, rgba(255, 255, 255, 0) 100%);
+}
+.el-footer {
+  padding: 0;
+  height: 149px;
+  overflow-y: auto;
+}
+
+.el-input__inner {
+  height: 30px;
+  // text-align: center;
+}
+.el-input--mini {
+  display: inline;
+}
+.movieControlTitle {
+  font-weight: 700;
+  position: relative;
+  top: -8px;
+  background-color: #d7dce7;
+  padding: 0 10px;
+  font-size: 16px;
+}
+
+.el-main {
+  position: relative;
+  background-repeat: no-repeat;
+  
+}
+.maxh221{
+  max-height: calc(100vh - 221px);
+}
+.maxh400{
+  max-height: calc(100vh - 410px);
+}
+body {
+  position: relative;
+  background-color: #eceef0;
+}
+.el-loading-mask {
+  background: none;
+}
+.el-tree {
+  background-color: #eceef0;
+  padding: 13px;
+}
+// 第二个点击事件
+.lg-er .el-col {
+  padding: 0 12px;
+}
+.el-radio-button:first-child .el-radio-button__inner {
+  border-radius: 4px;
+}
+.el-radio-button:last-child .el-radio-button__inner {
+  border-radius: 4px;
+}
+.lg-er label {
+  padding: 5px 0;
+}
+.el-radio-button__inner {
+  border: none;
+}
+.lg-er label {
+  display: block;
+}
+.lg-form li {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.lg-form>li>span{
+  display:inline-block;
+  width:65%
+}
+.lg-form>li>.el-input{
+  width:35%
+}
+.lg-form {
+  padding-bottom: 5px;
+}
+.lg-san .el-col {
+  padding: 5px 0.5vw;
+}
+.lg-san label {
+  padding: 10px 0;
+}
+#head2 .lg-san input {
+  margin: 3px 0px;
+}
+.lg-san .el-padding {
+  padding: 0 20px;
+}
+// #head2 input
+
+.el-button + .el-button {
+  margin-left: 0;
+}
+.maxh100{
+  max-height: calc(100vh - 100px);
+}
+.maxh290{
+  max-height: calc(100vh - 290px);
+}
+.el-button{
+  margin-bottom: 2px;
+}
+.lg-si .el-input__inner {
+  padding: 0 0 0 0;
+}
+.lg-si-right {
+  padding-left: 30px;
+}
+.lg-button {
+  background-color: #4c4f54;
+  color: #fff;
+  border-radius: 10px;
+}
+.el-button--mini,
+.el-button--mini.is-round {
+  padding: 5px 15px;
+}
+.lg-san {
+  height: 189px;
+  overflow: auto;
+}
+.lg-si li {
+  padding: 2px 0;
+}
+.el-dialog__body .el-input {
+  padding: 5px 0;
+}
+.el-dialog__body .el-form li:first {
+  padding: 10px 0;
+}
+.logs_title {
+  background: #bfc5cb;
+  padding: 10px;
+  font-size: 16px;
+}
+.el-col-4,
+.el-col-3 {
+  position: relative;
+}
+.lg-more {
+  position: absolute;
+  right: 0;
+  bottom: 15px;
+}
+//  弹框
+.lg-bg .el-dialog__header {
+  background: #efefef;
+  border-color: #82848a;
+   text-align: center;
+   font-weight: 600;
+}
+.dialog-block label {
+  display: block;
+  font-size: 20px;
+}
+.el-dialog__footer {
+  padding: 0px 20px 20px;
+}
+.dialog-block .el-dialog {
+  width: 23%;
+}
+.Conditions .el-dialog {
+  width: 26%;
+}
+.el-dialog__body {
+  padding: 20px 20px;
+}
+.el-dialog {
+  max-width: 600px;
+  min-width: 452px;
+}
+.lg-Solution .el-dialog {
+  width: 16%;
+}
+.lg-Solution label {
+  display: block;
+  padding: 5px 0;
+}
+.lg-out-h .el-checkbox {
+  width: 40%;
+}
+
+.showright {
+  float: right;
+  margin-right: 20px;
+}
+.Task-lg li {
+  padding: 5px 0;
+}
+.Task-lg .el-radio {
+  display: block;
+  padding: 3px 0;
+}
+.tack-btn .el-button {
+  padding: 8px 16px;
+  display: block;
+}
+
+.outline {
+  font-size: 20px;
+  padding: 10px 20px;
+  font-weight: 600;
+}
+.pagination {
+  margin-top: 10px;
+}
+.pagination  .el-input{
+  padding: 0;
+}
+#head2 input {
+  padding-left: 5px;
+}
+.lg-modl .el-radio-button {
+  display: block;
+  padding: 5px 0;
+}
+.lg-modl .el-select {
+  display: block;
+  padding: 3px 0;
+}
+.lg-modl .lg-si-right {
+  padding: 0;
+}
+.lg-modl .task-si li label {
+  display: block;
+}
+.el-col-24 {
+  margin-bottom: 10px;
+}
+.x {
+  // display: inline-block;
+  cursor: default;
+  float: right;
+}
+.lg-y-z .el-dialog {
+  width: 16%;
+}
+.gongju .el-form-item__content {
+  margin-left: 185px;
+}
+.gongju .el-form-item {
+  margin-bottom: 0;
+}
+.exloadbox{
+  float: right;
+  margin-right: 100px;
+}
+
+// background: linear-gradient(180deg, #CCD3E2 0%, rgba(255, 255, 255, 0) 100%);
+//lq结束
+#head2 input {
+  margin: 3px 5px;
+}
+// #head2 button{
+//    margin: 3px 5px;
+//   //  width: 50%;
+// }
+.contour .el-input-number__decrease,
+.el-input-number__increase {
+  top: 5px;
+  width: 40px;
+  cursor: pointer;
+  font-size: 13px;
+  height: 28px;
+  line-height: 28px;
+}
+.line {
+  width: 0px;
+  height: 167px;
+  border: 1px solid #d4d3d1;
+
+  // background: #D4D3D1;
+  // box-shadow: 0px 1px 0px 0px #FFFFFF;
+  float: right;
+}
+.lg_weiyi .title {
+  text-align: center;
+}
+.title {
+  font-size: 0.8vw !important;
+  margin: 6px 0px !important;
+  font-weight: 600;
+}
+.headMenu_2 {
+  height: 189px;
+  overflow: hidden;
+  font-size: 12px;
+  width: 100%;
+}
+.headMenu_2 span{
+  font-size: 12px !important;
+}
+.headMenu_2 .el-input__inner{
+  padding:0 2px
+}
+.lisin>li{
+  display: flex;
+  align-items: center;
+}
+.lisin>li>span{
+  display: inline-block;
+  width:100px
+}
+.lisin>li>.el-input{
+  width:120px
+}
+.sblock{
+  display: inline-block;
+  width:40%
+}
+.disinblok{
+  display: inline-block;
+}
+.inpw50{
+  width:50%
+}
+.inpw100{
+  width:100%
+}
+.inpw35{
+  width:25%
+}
+.inpw75{
+  width:75px
+}
+.inpwidth{
+  flex:1
+}
+.lheig34{
+  line-height: 34px;
+}
+.pdingf10{
+  padding-left: 10px !important;
+}
+.move{
+  position: relative;
+  top: -8px;
+  right:-30px
+}
+.discenter{
+  display: flex;
+  justify-content: center;
+}
+.disrs{
+  display: flex;
+  flex-direction: row-reverse;
+}
+.padding0{
+  padding: 0 !important;
+}
+.marr30{
+  margin-right: 30px;
+}
+.marb5{
+  margin-bottom:5px
+}
+.disacent{
+  display: flex;
+  align-items: center;
+}
+.div64>div,
+.disflex,
+.disflex55{
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.div64>div>span{
+  display: inline-block;
+  width:65%
+}
+.span100{
+  display: inline-block;
+  width: 100px;
+}
+.div64>div>.el-input{
+  width: 35%;
+}
+.disflex55>span{
+  display: inline-block;
+  width:50%
+}
+.disflex55>.el-input{
+  width:50%
+}
+.el-dialog__header{
+  font-size: 16px;
+  font-weight: 700;
+  background: #ccc;
+  padding: 0 10px;
+  line-height: 45px;
+}
+.flexpad30{
+  display: flex;
+}
+.flexpad30>div{
+  padding-right: 30px;
+}
+
+
+</style>
+<style lang="scss"
+font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
+</style>

+ 150 - 0
src/views/index/HCFDLab/TFileStream.vue

@@ -0,0 +1,150 @@
+<template>
+<div v-show="imgtupian">
+    <div class="imgs" v-if="imgsrc!='' " v-cloak >
+       <el-image  style='height: 480px;' v-loading="loading" :src="'data:image/png;base64,' +  imgsrc" ></el-image> 
+        <!-- <div class="controls">
+            <el-button type="danger" icon="el-icon-refresh"  circle @click="inthetaclick()"></el-button>
+        <el-button type="danger" icon="el-icon-refresh-right" circle @click="inphiclick()"></el-button>
+        </div> -->
+
+    </div>
+    </div>
+</template>
+
+<script>
+import Vue from 'vue' // 引入vue
+import $ from 'jquery' ;
+import store from "@/store";
+import { request } from "@/utils/request";
+import { ElMessage } from '@/utils/message.js'
+import { log } from 'three';
+let Message = new ElMessage()
+export default {
+    name: "VideoPlayer",
+     props:{
+      projectId:String,
+        servertype:String,
+       srsurl:String,
+       wstep:String,
+       bStep:Number,
+       vStep:Number,
+     },
+    data() {
+        return {
+            imgsrc:'',
+        loading:false,
+              intheta:0,
+            inphi:0,
+            imgtupian:false,
+    }
+    },
+    mounted(){
+    },
+    methods:{
+      fetchData(imgs) {
+        
+      this.loadingend(this.loadingopen());
+     this.imgsrc = imgs;
+     
+      },
+      //开起loading
+loadingopen(){
+ const loading = this.$loading({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+        return loading;
+},
+   // 关闭lodind
+    loadingend(loading){
+      loading.close()
+      },
+        inthetaclick(){
+        console.log( this.intheta);
+        if(this.intheta>=360||  this.inphi>=360){
+          this.intheta=0;
+      
+        }else{
+          this.intheta+=30;
+        }
+     this.rotateclick( this.intheta,0);
+     
+      },
+        inphiclick(){
+          if(this.intheta>=360||  this.inphi>=360){
+           this.inphi=0;
+        }else{
+           this.inphi+=30;
+        }
+     this.rotateclick(0,this.inphi);
+     
+      },
+      rotateclick(X,Y){
+      if(this.servertype=='boundary'){
+        this.step=this.bStep;
+      }else if(this.servertype=='volume'){
+            this.step=this.vStep;
+      }
+      else{
+        this.step=0;
+      }
+             let params = {
+        transCode: "VDT0001",
+        projectId: this.projectId,
+        projectType: "hcfd",
+         fileType:this.servertype,
+        step:this.step,
+        intheta:X,
+         inphi:Y,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+        // this.$$emit("loadRendering",this.projectId)
+        })
+        .catch((err) => {
+            console.log(err);
+        }); 
+      }
+    },
+    watch:{
+      
+         
+    },
+  
+
+}
+
+</script>
+<style scoped>
+.imgs{
+position: relative;
+
+}
+[v-cloak]{
+  display: none;
+}
+.el-image{
+    width: 100%;
+    height: calc(100vh - 112px) !important;
+     overflow: hidden;
+     position:relative ;
+}
+ img{
+   width: 100%;
+    height: 90vh;
+object-fit: fill;
+   
+   /* height: calc(100% - 110px); */
+ }
+
+ .controls{
+   position: absolute;
+   bottom:20px;
+   z-index: 200;
+ }
+</style>

BIN
src/views/index/HCFDLab/Uploader.swf


+ 14 - 0
src/views/index/HCFDLab/Util.js

@@ -0,0 +1,14 @@
+const  kgReplace=(line)=> {
+    while (line.indexOf("  ") > 0) {
+        line = line.replace("  ", " ");
+    }
+    return line;
+}
+const ugread=(lines, strsp, beginfx, endfx, sve)=> {
+    for (var i = beginfx; i < endfx; i++) {
+        sve.push(kgReplace(lines[i].trim()).split(strsp).map((str) => Number(str)));
+    }
+    return sve;
+}
+/// 导出
+export {kgReplace,ugread}

+ 0 - 0
src/views/index/HCFDLab/chartSRS.vue


+ 545 - 0
src/views/index/HCFDLab/demo.vue

@@ -0,0 +1,545 @@
+<template>
+<div>
+    <div ref="container_vtk" v-show="container_show"></div>
+    <!-- <el-button @click="load()">Load</el-button>
+    <el-progress :percentage="percentage"></el-progress>
+    <el-button @click="moveReStart()">Restart</el-button>
+    <el-progress :percentage="movetage"></el-progress>
+    <el-button @click="moveStop()">Stop</el-button>
+    <el-button @click="moveStart()">Start</el-button> -->
+      <div class="divb">
+          <h1>cp</h1>
+    <!-- <el-tag :color="'#0000ff'">#0000ff</el-tag> -->
+    <el-tag v-for="(colort,key) in baseColors" :key="key" 
+    :color="colort">
+    </el-tag>
+     <vtkLoad ref="vtkLoad" :urls="urls" :vectorFactor="vectorFactor" :contourLevel="contourLevel">
+    </vtkLoad>
+     <el-input-number v-model="contourLevel"  :min="1" :max="20" label="contour level"></el-input-number>
+</div>
+</div>
+</template>
+<script>
+import * as THREE from 'three'
+import { VTKLoader } from 'three/examples/jsm/loaders/VTKLoader.js'
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+import { log } from 'three';
+export default {
+    data(){
+        return {
+            contourLevel:3,
+            container_show:true,
+            scene:null,//场景
+            renderer:null,//渲染器
+            camera:null,
+            controls:null,// 相机 控制器
+            maxX:0,//存储 物体 最大坐标 x
+            maxY:0,
+            maxZ:0,
+            minX:0,
+            minY:0,
+            minZ:0,
+            camerahight:5,//存储 相机 高度
+            mufactor:0.2,//放大系数
+            meshs:[],
+            zones:[],
+            percentage:0,
+            movetage:0,
+            nowIndex:0,
+            moveflag:false,
+            clock:null,
+            baseColors:[],
+        }
+    },
+    props:{//传入参数
+        urls:Array,
+        vectorFactor:Number,
+     
+    },
+    mounted(){
+       this.initScene();
+       this.initBaseColors();
+    },
+    watch:{
+        contourLevel:{
+            handler(newVal) {
+                this.initBaseColors();
+            },
+            deep: true,
+          immediate: false,
+        }
+    },
+    methods:{
+        
+        getColor(minScalar,maxScalar,scalar){
+            let a_scalar =(maxScalar-minScalar)/this.contourLevel;
+            for (let index = 0; index < this.contourLevel; index++) {
+                let ten=minScalar+index*a_scalar;
+                if(Math.max(ten,scalar)==ten){
+                    let col= this.baseColors[index];
+                    return col;
+                }                
+            }
+            return this.baseColors[this.contourLevel-1];
+
+        },
+        initBaseColors(){
+            this.baseColors=[];
+            let minColor = 0;
+            let maxColor = 240;
+            this.baseColors.push(this.colorHex(this.hsltorgb(minColor,100.0,50.0)));
+             let a_color=Math.round((maxColor-minColor)/this.contourLevel);
+
+            for (let index = 1; index < this.contourLevel-1; index++) {
+                this.baseColors.push(this.colorHex(this.hsltorgb(minColor+a_color*index,100.0,50.0)));
+            }
+            this.baseColors.push(this.colorHex(this.hsltorgb(maxColor,100.0,50.0)));
+        },
+        hsltorgb(h,s,l){
+	        var h=h/360;
+            var s=s/100;
+            var l=l/100;
+            var rgb=[];
+
+            if(s==0){
+                rgb=[Math.round(l*255),Math.round(l*255),Math.round(l*255)];
+            }else{
+                var q=l>=0.5?(l+s-l*s):(l*(1+s));
+                var p=2*l-q;
+                var tr=rgb[0]=h+1/3;
+                var tg=rgb[1]=h;
+                var tb=rgb[2]=h-1/3;
+                for(var i=0; i<rgb.length;i++){
+                    var tc=rgb[i];
+                   // console.log(tc);
+                    if(tc<0){
+                        tc=tc+1;
+                    }else if(tc>1){
+                        tc=tc-1;
+                    }
+                    switch(true){
+                        case (tc<(1/6)):
+                            tc=p+(q-p)*6*tc;
+                            break;
+                        case ((1/6)<=tc && tc<0.5):
+                            tc=q;
+                            break;
+                        case (0.5<=tc && tc<(2/3)):
+                            tc=p+(q-p)*(4-6*tc);
+                            break;
+                        default:
+                            tc=p;
+                            break;
+                    }
+                    rgb[i]=Math.round(tc*255);
+                }
+            }
+            return this.colorHex("rgb("+rgb[0]+","+rgb[1]+","+rgb[2]+")")
+        },
+        colorHex(color){
+            // RGB颜色值的正则
+            var reg = /^(rgb|RGB)/;
+            if (reg.test(color)) {
+                var strHex = "#";
+                // 把RGB的3个数值变成数组
+                var colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
+                // 转成16进制
+                for (var i = 0; i < colorArr.length; i++) {
+                var hex = Number(colorArr[i]).toString(16);
+                if (hex === "0") {
+                    hex += hex;
+                }
+                strHex += hex;
+                }
+                return strHex;
+            } else {
+                return String(color);
+            }
+        },
+        init(){
+            this.clock =new THREE.Clock();
+            this.scene=new THREE.Scene();//场景
+            this.renderer=new THREE.WebGLRenderer( { antialias: true,alpha:true });//渲染器
+            this.camera=new THREE.PerspectiveCamera(20, 1, 0.2, 10000);
+            this.controls=new OrbitControls(this.camera, this.renderer.domElement);// 相机 控制器
+        },
+        initScene(){
+            if(this.scene==null){
+                this.init();
+            }
+            this.renderer.setSize(500, 500);//渲染器大小
+            this.$refs.container_vtk.appendChild(this.renderer.domElement);
+        },
+
+        load(){
+            let _this =this;
+            let i=0;
+            _this.urls.forEach(url=>{
+                _this.loadone(url,function(){
+                  i++;
+                  _this.percentage=Math.round(i/_this.urls.length*100)
+                })
+               ;
+            })
+            
+        },
+        
+        show(ik){
+                this.movetage=Math.round(ik/this.zones.length*100)
+                let cells =this.zones[ik].cells;
+                let positions =this.zones[ik].positions;
+                let colorMap =this.zones[ik].colorMap;
+                let vectors =this.zones[ik].vectors;
+                
+                var geometry = new THREE.BufferGeometry();
+                geometry.setIndex(cells);
+                geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( positions, 3 ) );
+                var wf = new THREE.WireframeGeometry(geometry);//几何网格 只显示线
+                var mesh = new THREE.LineSegments(wf, new THREE.LineBasicMaterial({ color: 0x00ff00 }));//设置线颜色             
+                mesh.position.x = -1*(this.maxX+this.minX) / 2;//设置网格模型几何中心y坐标
+                mesh.position.y = -1*(this.maxY+this.minY)  / 2;//设置网格模型几何中心y坐标
+                mesh.position.z = -1*(this.maxZ+this.minZ) / 2;//设置网格模型几何中心y坐标
+                this.meshs.push(mesh);
+                this.scene.add(mesh);
+
+                var positions2 =positions.slice(0);
+                for(var i =0;i<positions2.length;i++){
+                    positions2[i] = positions2[i]+vectors[i]*this.vectorFactor;
+                }
+                var geometry3 = new THREE.BufferGeometry();
+           
+                var colors =[];
+                var color = new THREE.Color();
+                if (colorMap.get("Displacement-magnitude")){
+                    let scalarsf =colorMap.get("Displacement-magnitude").scalars;
+                    let scalMax = 0.0;
+                    let scalMin = 0.0;
+                    scalarsf.forEach(scalar=>{
+                        scalMax= Math.max(scalar,scalMax)
+                        scalMin= Math.min(scalar,scalMin)
+                    })
+                    var ambient = new THREE.AmbientLight(0x444444);
+                    this.scene.add(ambient);
+                    
+                    var h,s,l
+                   
+                    scalarsf.forEach(scalar=>{
+                        let hexColor =this.getColor(scalMin,scalMax,scalar);
+                        color.setHex(hexColor);
+                        colors.push(color.r);
+                        colors.push(color.g);
+                        colors.push(color.b);
+
+                    })
+                    geometry3.setIndex(cells);
+                    geometry3.setAttribute('position', new THREE.Float32BufferAttribute( positions2, 3 ) );
+                   
+
+                    if(this.meshType===1){//网格
+                        var wf2 = new THREE.WireframeGeometry(geometry3);//几何网格 只显示线
+                        var mesh2 = new THREE.LineSegments(wf2, new THREE.LineBasicMaterial({ color: 0x00ff00 }));//设置线颜色             
+                        mesh2.position.x = -1*(this.maxX+this.minX) / 2;//设置网格模型几何中心y坐标
+                        mesh2.position.y = -1*(this.maxY+this.minY)  / 2;//设置网格模型几何中心y坐标
+                        mesh2.position.z = -1*(this.maxZ+this.minZ) / 2;//设置网格模型几何中心y坐标
+                        this.meshs.push(mesh2);
+                        this.scene.add(mesh2);
+                    }else if(this.meshType===2){//
+                        geometry3.setAttribute('color', new THREE.Float32BufferAttribute(colors,3));
+                        var material3 = new THREE.MeshBasicMaterial({
+                                // vertexShader: document.getElementById('vertexShader').textContent,
+                                // fragmentShader: document.getElementById('fragment_shader').textContent
+                                vertexColors: THREE.VertexColors, side: THREE.DoubleSide 
+                            });
+
+                        var mesh3 = new THREE.Mesh(geometry3, material3);     
+                        mesh3.position.x = -1*(this.maxX+this.minX) / 2;//设置网格模型几何中心y坐标
+                        mesh3.position.y = -1*(this.maxY+this.minY)  / 2;//设置网格模型几何中心y坐标
+                        mesh3.position.z = -1*(this.maxZ+this.minZ) / 2;//设置网格模型几何中心y坐标
+                        this.meshs.push(mesh3);
+                        this.scene.add(mesh3);
+                    }
+                }
+                
+        },
+        clear(){
+            this.meshs.forEach(mesh=>{
+                this.scene.remove(mesh)
+            });
+            this.meshs=[];
+        },
+        
+        loadone(url,change){
+            let _this=this;
+            const loader = new THREE.FileLoader();
+            loader.load(
+                    url,
+                    function (data) {
+                        _this.vtk(data);
+                        change();
+                    },
+                    // onProgress回调
+                    function (xhr) {
+                        // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+                    },
+                    // onError回调
+                    function (err) {
+                        console.error('An error happened');
+                    }
+                );
+        },
+        vtk(data){
+            // indicates start of vertex data section
+			var patPOINTS = /^POINTS /;
+			// CELLS number_of_polys
+            var patCELLs_DATA = /^CELLS[ ]+(\d+)/;
+            var patVECTORS=/^VECTORS /
+            // CELLS number_of_polys
+            var patCELL_TYPES = /^CELL_TYPES[ ]+(\d+)/;
+            // pattern for reading vertices, 3 floats or integers
+            var pat3Floats = /(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)/g;
+            var pat3FloatsE = /(\-?\d+\.?[\d\-\+E]*)\s+(\-?\d+\.?[\d\-\+E]*)\s+(\-?\d+\.?[\d\-\+E]*)/g;
+            // pattern for detecting the end of a number sequence
+            var patWord = /^[^\d.\s-]+/;
+            // pattern for connectivity, an integer followed by any number of ints
+			// the first integer is the number of polygon nodes
+            var patConnectivity = /(\-?\d+)\s+([\s\d]*)/;
+            var patFloatE = /(\-?\d+\.?[\d\-\+E]*)\s/;
+            var patSCALARS=/^SCALARS /
+            var inPointsSection =false;
+            var inCellDataSection =false;
+            var inCellTypesSection =false;
+            var inVectorsSection=false;
+            var result;
+            var positions=[]
+            var cells=[];
+            var vectors=[]
+            var colorMap =new Map();
+            const lines = data.split('\n');
+            lines.forEach(line => {
+                if ( line.indexOf( 'SCALARS' ) === 0 ) {
+                    var scalarskey = line.split( ' ' )[ 1 ];                     
+                    if(typeof(colorMap.get(scalarskey)) == "undefined"){
+                        colorMap.set(scalarskey,{
+                            inSection:true,
+                            scalars:[]
+                        })
+                    }
+                    inPointsSection =false;
+                    inCellDataSection =false;
+                    inCellTypesSection =false;
+                    inVectorsSection=false;
+                    colorMap.forEach(function(value,key){
+                        if(key!==scalarskey){
+                            value.inSection=false
+                        }
+            });
+                }
+                colorMap.forEach(function(value,key){
+                    if(value.inSection){
+                        if((result = patFloatE.exec( line ) ) !== null ){
+                            value.scalars.push( parseFloat( result[0] ))
+                        }
+                    }
+         });
+
+                if(inPointsSection){
+                        // get the vertices
+                    while ( ( result = pat3Floats.exec( line ) ) !== null ) {
+                        if ( patWord.exec( line ) !== null ) break;
+                        var x = parseFloat( result[ 1 ] );
+                        var y = parseFloat( result[ 2 ] );
+                        var z = parseFloat( result[ 3 ] );
+
+                        this.maxX = x> this.maxX? x : this.maxX
+                        this.maxY = y> this.maxY? y : this.maxY
+                        this.maxZ = z> this.maxZ? z : this.maxZ                  
+                        this.minX = x< this.minX? x : this.minX
+                        this.minY = y< this.minY? y : this.minY
+                        this.minZ = z< this.minZ? z : this.minZ
+                        
+                        positions.push( x, y, z );
+                    }
+                }
+                if(inCellDataSection){
+                        // get the vertices
+                    if ( ( result = patConnectivity.exec( line ) ) !== null ) {
+						// numVertices i0 i1 i2 ...
+						var numVertices = parseInt( result[ 1 ] );
+                        var inds = result[ 2 ].split( /\s+/ );
+						if ( numVertices >= 3 ) {
+							var i0 = parseInt( inds[ 0 ] );
+							var i1, i2;
+							var k = 1;
+							// split the polygon in numVertices - 2 triangles
+							for ( var j = 0; j < numVertices - 2; ++ j ) {
+								i1 = parseInt( inds[ k ] );
+								i2 = parseInt( inds[ k + 1 ] );
+								cells.push( i0, i1, i2 );
+								k ++;
+							}
+						}
+                    }
+
+                }
+                if(inVectorsSection){
+                         // get the Vectors
+                    while ( ( result = pat3FloatsE.exec(line) ) !== null ) {
+                        if ( patWord.exec( line ) !== null ) break;
+                        var x = parseFloat( result[ 1 ] );
+                        var y = parseFloat( result[ 2 ] );
+                        var z = parseFloat( result[ 3 ] );
+                        vectors.push( x, y, z );
+                    }
+                }
+                if ( patPOINTS.exec( line ) !== null ) {
+                    inPointsSection =true;
+                    inCellDataSection =false;
+                    inCellTypesSection =false;
+                    inVectorsSection=false;
+                    colorMap.forEach(function(value,key){
+                        value.inSection=false
+            });
+                }
+                if ( patCELLs_DATA.exec( line ) !== null) {
+                    inPointsSection =false;
+                    inCellDataSection =true;
+                    inCellTypesSection =false;
+                    inVectorsSection=false;
+                    colorMap.forEach(function(value,key){
+                        value.inSection=false
+            });
+                }
+                if (patCELL_TYPES.exec( line ) !== null ) {
+                    inPointsSection =false;
+                    inCellDataSection =false;
+                    inCellTypesSection =true;
+                    inVectorsSection=false;
+                    colorMap.forEach(function(value,key){
+                        value.inSection=false
+            });
+                } 
+                if(patVECTORS.exec( line ) !== null ) {
+                    inPointsSection =false;
+                    inCellDataSection =false;
+                    inCellTypesSection =false;
+                    inVectorsSection=true;
+                    colorMap.forEach(function(value,key){
+                        value.inSection=false
+            });
+
+                }
+            });
+            this.zones.push({
+                cells:cells,
+                positions:positions,
+                colorMap:colorMap,
+                vectors:vectors
+            })
+            this.initShow();
+        },
+        initShow(){
+            let _this =this;
+            _this.camerahight=Math.max(
+                Math.abs(_this.maxX),
+                Math.abs(_this.maxY),
+                Math.abs(_this.maxZ),
+                Math.abs(_this.minX),
+                Math.abs(_this.minY),
+                Math.abs(_this.minZ),
+            )
+            _this.controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+            _this.controls.update();
+            _this.camera.position.set(-1,3*_this.camerahight , 4*_this.camerahight);//
+            _this.camera.lookAt(_this.scene.position);
+            _this.camera.updateMatrix();
+            _this.renderer.render(_this.scene, _this.camera)
+            var animate = function () {//动画
+                    _this.renderer.render(_this.scene, _this.camera)
+                    requestAnimationFrame(animate)
+            }
+            animate();
+            var timer = setInterval(function(){ //动画
+                if(_this.moveflag && _this.nowIndex<_this.zones.length){
+                    _this.clear();
+                    _this.show(_this.nowIndex)
+                    _this.nowIndex++;
+                    _this.renderer.render(_this.scene, _this.camera)
+                }
+            },1000);
+        },
+        moveReStart(){
+            this.moveflag=true;
+            this.nowIndex=0;
+        },
+        moveStart(){
+            this.moveflag=true;
+        },
+        moveStop(){
+            this.moveflag=false;
+        },
+        
+        /**
+         *  正面
+         */
+        positive(axis) {
+            if (axis == 'x') this.camera.position.set(4*this.camerahight, 0, 0);
+            if (axis == 'y') this.camera.position.set(0, 4*this.camerahight, 0);
+            if (axis == 'z') this.camera.position.set(0, 0, 4*this.camerahight);
+            this.camera.lookAt(scene.position);
+            this.camera.updateMatrix();
+        },
+        /**
+         * 反面
+         */
+        negative(axis) {
+            if (axis == 'x') this.camera.position.set(-4*this.camerahight, 0, 0);
+            if (axis == 'y') this.camera.position.set(0, -4*this.camerahight, 0);
+            if (axis == 'z') this.camera.position.set(0, 0, -4*this.camerahight);
+            this.camera.lookAt(scene.position);
+            this.camera.updateMatrix();
+        },
+        /**
+         * 放大
+         */
+        large() {
+            this.meshs.forEach(mesh => {
+                const sx = mesh.scale.x * (1 + this.mufactor)
+                const sy = mesh.scale.y * (1 + this.mufactor)
+                const sz = mesh.scale.z * (1 + this.mufactor)
+                mesh.scale.set(sx, sy, sz);
+            })
+        },
+        /**
+         * 缩小
+         */
+        small() {
+            this.meshs.forEach(mesh => {
+                const sx = mesh.scale.x * (1 - this.mufactor)
+                const sy = mesh.scale.y * (1 - this.mufactor)
+                const sz = mesh.scale.z * (1 - this.mufactor)
+                mesh.scale.set(sx, sy, sz);
+            })
+        },
+
+    },
+
+}
+</script>
+<style scoped>
+.el-tag{
+    width: 25px;
+    height: 35px;
+    display:block;
+border: none;
+border-radius: 0%;
+}
+.el-tag--light{
+    color: #333;
+}
+.divb{
+    position: absolute;
+    right: 100px;
+    top: 30%;
+ 
+}
+</style>

+ 114 - 0
src/views/index/HCFDLab/doem.vue

@@ -0,0 +1,114 @@
+<template>
+  <div class="hello">
+   <h1 @click="changetitle">{{title}}</h1>
+   <div class="content" v-show="contentshow">{{massge}}</div>
+
+
+  <div class="block">
+
+  <el-color-picker v-model="color1" style="width:120px"></el-color-picker>
+</div>
+<el-progress :percentage="movetage"></el-progress>
+    <el-button @click="moveStop()">Stop</el-button>
+    <el-button @click="moveStart()">Start</el-button>
+    <el-tag :color="'#0000ff'">#0000ff</el-tag>
+    <el-tag v-for="(colort,key) in baseColors" :key="key" :color="'#'+colort.toString(16)">{{'#0000'+colort.toString(16)}}</el-tag>
+</div>
+  
+</template>
+<script>
+import * as THREE from 'three'
+import { VTKLoader } from 'three/examples/jsm/loaders/VTKLoader.js'
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+let loader = new THREE.FileLoader();
+export default {
+    data(){
+        return {
+          title:'vue.js demo',
+          massge:'我是要点击才会显示的',
+          contentshow:false,
+          color1: '#409EFF',
+          color2: null
+        }
+        
+    },
+    props:{
+      futitle:{
+      type:String,
+      required:true
+     
+    },
+    
+  },
+    mounted(){
+
+    },
+    methods:{
+        changetitle(){
+          // this.contentshow=!this.contentshow;
+          // this.title=this.futitle;
+         
+          this.$emit("titlechange",this.contentshow);
+        },
+          moveReStart(){
+            this.moveflag=true;
+            this.nowIndex=0;
+        },
+        moveStart(){
+            this.moveflag=true;
+        },
+        moveStop(){
+            this.moveflag=false;
+        },
+        initShow(){
+            let _this =this;
+            _this.camerahight=Math.max(
+                Math.abs(_this.maxX),
+                Math.abs(_this.maxY),
+                Math.abs(_this.maxZ),
+                Math.abs(_this.minX),
+                Math.abs(_this.minY),
+                Math.abs(_this.minZ),
+            )
+            _this.controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+            _this.controls.update();
+            _this.camera.position.set(-1,3*_this.camerahight , 4*_this.camerahight);//
+            _this.camera.lookAt(_this.scene.position);
+            _this.camera.updateMatrix();
+            _this.renderer.render(_this.scene, _this.camera)
+            var animate = function () {//动画
+                    _this.renderer.render(_this.scene, _this.camera)
+                    requestAnimationFrame(animate)
+            }
+            animate();
+            var timer = setInterval(function(){ //动画
+                if(_this.moveflag && _this.nowIndex<_this.zones.length){
+                    _this.clear();
+                    _this.show(_this.nowIndex)
+                    _this.nowIndex++;
+                    _this.renderer.render(_this.scene, _this.camera)
+                }
+            },1000);
+        },
+        
+    },
+    watch:{
+      
+         
+    },
+  
+
+}
+
+</script>
+<style scoped>
+.hello {
+  padding: 100px;
+}
+.content{
+  width: 400px;
+  height: 200px;
+  background-color: #345678;
+  color: white;
+}
+</style>

+ 301 - 0
src/views/index/HCFDLab/echartsHFCD.vue

@@ -0,0 +1,301 @@
+<template>
+<div>
+  <div class="x-bar" v-show="container_show">
+    <div id="container"></div>
+  </div>
+  </div>
+
+</template>
+<script>
+import Highcharts from "highcharts"; //必须引入
+import { kgReplace, ugread } from "./Util.js";
+import { options } from 'runjs';
+import { request } from "@/utils/request";
+
+export default {
+  data() {
+    return {
+       container_show:false,
+      chart: null,
+      convergeDate: { title: "hcfd", VARIABLES: [], value: [] },
+    numlist:[],
+    s1:'',
+    };
+  },
+  components:{
+ 
+  },
+    props:{
+    name:String,
+    projectId:String,
+    lsolverState:String,
+    numzhexian:String,
+    nmlsteps:Number,
+   
+
+  },
+  mounted: function () {
+   // this.oldlog()
+    Highcharts.setOptions({
+      global: {
+        useUTC: false,
+      },
+    });
+    let _this = this;
+   // this.getwebsocket();
+
+  },
+  methods: {
+      hiden(){
+      this.container_show=false;
+    },
+    nhiden(){
+      this.container_show=true;
+    },
+
+  // 时间换算
+  timedata(d1, d2,s1){
+    
+ var date1 = new Date(d1);   //开始时间  
+            var date2 = new Date(d2);    //结束时间  
+             var cydata=(date2.getTime() - new Date(date1).getTime())/s1*(Number(this.nmlsteps)-s1);
+           // var Milliseconds = date2.getTime() - new Date(date1).getTime();   //时间差的毫秒数       
+            var Milliseconds = cydata;
+            //计算出相差天数  
+            var days = Math.floor(Milliseconds / (24 * 3600 * 1000))
+            //计算出小时数   
+            var leave1 = Milliseconds % (24 * 3600 * 1000)    //计算天数后剩余的毫秒数  
+            var hours = Math.floor(leave1 / (3600 * 1000))
+            //计算相差分钟数  
+            var leave2 = leave1 % (3600 * 1000)        //计算小时数后剩余的毫秒数  
+            var minutes = Math.floor(leave2 / (60 * 1000))
+            //计算相差秒数  
+            var leave3 = leave2 % (60 * 1000)      //计算分钟数后剩余的毫秒数  
+        
+            var seconds = Math.round(leave3 / 1000)
+            var ResultJson = {
+                days: {
+                    days: days >= 0 ? days : days + 1,
+                    hours: hours >= 0 ? hours: hours + 1,
+                    minutes: minutes >= 0 ? minutes : minutes + 1,
+                    seconds: seconds >= 0 ? seconds: seconds + 1
+                },
+                Milliseconds: Milliseconds
+            }; 
+          //console.log(ResultJson)
+            let year=ResultJson.days.days+'天'+ this.p(ResultJson.days.hours)+':'+ this.p(ResultJson.days.minutes)+':'+ this.p(ResultJson.days.seconds)
+           this.$emit('restimeyear',year);
+            return year;
+
+  },
+   p(s) {
+		return s < 10 ? '0' + s: s;
+	},
+    // 获取所有日志
+  newlog(){
+         let params = {
+            transCode: "A001121",
+            projectId: this.projectId,
+                    lesseeId: this.$store.getters.lesseeId
+         
+          };
+           request(params)
+        .then((res) => {
+          console.log(res);
+            })
+  },
+
+  //获取历史数据每一条
+  historydata(){
+ let params = {
+            transCode: "A001122",
+            projectId: this.projectId,
+             lesseeId: this.$store.getters.lesseeId
+         
+          };
+           request(params)
+        .then((res) => {
+          console.log(res)
+            })
+  },
+    // websocket
+    getwebsocket() {
+     // 初始化weosocket
+     this.numlist=[];
+      const wsuri = "ws://192.168.0.43:8031/websocket?projectId="+this.projectId;
+      this.websock = new WebSocket(wsuri);
+      this.websock.onmessage = this.websocketonmessage;
+      this.websock.onopen = this.websocketonopen;
+      this.websock.onerror = this.websocketonerror;
+      this.websock.onclose = this.websocketclose;
+   
+    },
+    websocketonopen(e) {
+          
+      //连接建立之后执行send方法发送数据this.newlog();
+      if(this.lsolverState=='1'||this.numzhexian=='1'){
+           this.newlog();
+              this.historydata()
+            }
+    },
+    websocketonerror() {
+      //连接建立失败重连
+      this.websock.close();
+    },
+    websocketonmessage(e) {
+      //数据接收
+   try{
+            const redata = JSON.parse(e.data);
+            
+            if(typeof redata==='object'&& redata){
+              if(redata.type == "log"){
+                 this.$emit('getthislog',redata.stats+redata.value);
+              }
+            if (redata.type == "iter") {
+       
+               this.convergeDateLoad(redata.value);
+               //获取运行多少步了
+                const lines = redata.value;
+                 var patiter = /^ iter /;
+                  if (patiter.exec(lines) !== null) {
+              const onelines = kgReplace(lines.trim()).split(" ")
+                .map((str) => str.trim());
+              this.s1= onelines.slice(1,2).map((str) => Number(str));
+          
+            }
+               this.timedata(redata.startTime,redata.time,this.s1[0]);
+            
+            }
+              }
+            }catch(error){
+                return false;
+            }
+    },
+    websocketsend(Data) {
+      //数据发送
+      this.websock.send(Data);
+    },
+    websocketclose(e) {
+      //关闭
+      Message({
+        type: "error",
+        message: "websock断开连接",
+      });
+
+      this.websock.close();
+      
+    },
+    convergeDateLoad(data) {
+      const lines = data;
+      if(this.numlist.includes(lines)){
+      }else{
+        this.numlist.push(lines);
+          var patIter = /^ Iter /;
+      var patiter = /^ iter /;
+     if (patIter.exec(lines) !== null) {
+        const onelines = kgReplace(lines.trim())
+          .split(" ")
+          .map((str) => str.trim());
+        let VARIABLES = onelines.slice(1);
+        this.convergeDate.VARIABLES=VARIABLES;
+        this.HighchartsData();
+      }
+      if (patiter.exec(lines) !== null) {
+        const onelines = kgReplace(lines.trim()).split(" ")
+          .map((str) => str.trim());
+        let data = onelines.slice(2).map((str) => Number(str));
+        let num= onelines.slice(1,2).map((str) => Number(str));
+        this.convergeDate.value.push(
+          onelines.slice(2).map((str) => Number(str))
+        );
+        
+        for (var i in this.convergeDate.VARIABLES) {
+            var series = this.chart.series[i];
+            series.addPoint([Number(onelines[1]),data[i]]);
+        }
+      }
+     
+     
+      }
+    
+    
+     
+    },
+
+    activeLastPointToolip(chart) {
+      var points = chart.series[0].points;
+      chart.tooltip.refresh(points[points.length - 1]);
+    },
+    HighchartsData() {
+      let _this = this;
+      let option={
+        title: {
+          text: "HCFD",
+        },
+        credits:{
+          enabled:false,
+        },
+        chart: {
+          plotBackgroundColor: "rgba(0,0,0,0)",
+          // borderWidth: 1,
+          backgroundColor: "rgba(0,0,0,0)",
+        },
+        yAxis: {},
+        xAxis: {},
+        plotOptions: {
+          series: {
+            lineWidth: 2,
+            label: {
+              connectorAllowed: false,
+            },
+            marker: {
+              radius: 5,
+            },
+            pointStart: 1,
+          },
+        },
+        tooltip: {},
+       
+                
+        legend: {
+                  layout: "horizontal",
+                  align: "center",
+                  verticalAlign: "bottom",
+                },
+        series: [
+        //   {
+           // name: "随机数据",
+            // data: (function () {
+            //   // 生成随机值
+            //   var data = [],
+            //     time = new Date().getTime(),
+            //     i;
+            //   for (i = -19; i <= 0; i += 1) {
+            //     data.push({
+            //       x: time + i * 1000,
+            //       y: Math.random(),
+            //     });
+            //   }
+            //   return data;
+            // })(),
+        //   },
+        ],
+      }
+       for (var i in _this.convergeDate.VARIABLES) {
+          var obj = {
+            name: "",
+            data: [0, 0],
+            color: "",
+            display: true,
+          };
+          obj.name = _this.convergeDate.VARIABLES[i];
+          option.series.push(obj);
+      
+        }
+      option.title.text=this.name;
+      _this.chart = Highcharts.chart("container", option);
+      // console.log(_this.chart.series)
+    },
+  },
+};
+</script>

+ 102 - 0
src/views/index/HCFDLab/echartstep.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <h1>我是Echats</h1>
+
+
+<div class="high" >
+
+  <div id="myChart" ref="chart" :style="{width: '100%', height: '400px'}"></div>
+</div>
+  </div>
+</template>
+<script>
+import Vue from 'vue' // 引入vue
+import echarts from 'echarts' // echart
+// import XChart from "@/components/chart";
+import dataJson from '@/assets/data.json'
+Vue.prototype.$echarts = echarts
+export default {
+  name: 'hello',
+  data () {
+    return {
+      msg: 'Welcome to Your Vue.js App',
+         option: {
+        title: {
+          text: "Iter",
+        },
+        subtitle: {
+          text: "数据来源:converge",
+        },
+        yAxis: {
+          title: {
+            text: "值得大小",
+          },
+        },
+        legend: {
+          layout: "vertical",
+          align: "right",
+          verticalAlign: "middle",
+        },
+        plotOptions: {
+          series: {
+            label: {
+              connectorAllowed: false,
+            },
+            pointStart: 1,
+          },
+        },
+      series: [{type: 'line',name:'density_RMS',data:[]},{type: 'line',name:'density_MAX',data:[]},{type: 'line',name:'X-location',data:[]},{type: 'line',name:'Y-location',data:[]},{type: 'line',name:'Z-location',data:[]},{type: 'line',name:'Lift',data:[]},{type: 'line',name:'Drag',data:[]}],
+
+        responsive: {
+          rules: [
+            {
+              condition: {
+                maxWidth: 500,
+              },
+              chartOptions: {
+                legend: {
+                  layout: "horizontal",
+                  align: "center",
+                  verticalAlign: "bottom",
+                },
+              },
+            },
+          ],
+        },
+      },
+    }
+  },
+  mounted(){
+
+         this.drawLine();
+        },
+    methods: {
+            drawLine() {
+             var jsonStr = dataJson;
+                console.log(jsonStr);
+            // jsonData = JSON.parse(jsonStr);   
+                    for(var i in jsonStr){
+                        this.option.series[0].data.push(jsonStr[i][1])
+                        this.option.series[1].data.push(jsonStr[i][2])
+                        this.option.series[2].data.push(jsonStr[i][3])
+                        this.option.series[3].data.push(jsonStr[i][4])
+                        this.option.series[4].data.push(jsonStr[i][5])
+                        this.option.series[5].data.push(jsonStr[i][6])
+                        this.option.series[6].data.push(jsonStr[i][7])
+            }
+               let myChart = echarts.init(document.getElementById('myChart'))
+                myChart.setOption(this.option);
+                console.log(this.option.series)
+                
+            }
+  },
+   
+    }
+</script>
+<style scoped>
+.high{
+  width: 100%;
+  height: 400px;
+  background-color: rgba(0,0,0,0.4);
+}
+</style>

+ 127 - 0
src/views/index/HCFDLab/filesload.vue

@@ -0,0 +1,127 @@
+<template>
+     <div></div>
+     <!-- <el-dialog  :visible.sync="visiable"  @close="handleClose">
+      <el-row class="lgcoent">
+        <el-col  class="lgleft" :span="8"> 
+            <div  class="lodingimg">
+              <el-image :src="imggifs" class="img"></el-image></div>
+            <h1 class="loding">Loading... </h1>
+        </el-col> 
+          <el-col :span="16" class="lodgright">
+            <el-row v-for="(fileObj,key) in files" :key="key">
+            <el-col :span="6">{{fileObj.name}} </el-col>
+            <el-col :span="18"><el-progress :percentage="fileObj.percentage"></el-progress></el-col>
+       </el-row>
+          </el-col>     
+        </el-row>
+     </el-dialog> -->
+
+</template>
+<script>
+import { Message, MessageBox } from 'element-ui'
+import imggifs from "@/assets/hcfd_images/loding.gif";
+import * as THREE from 'three'
+let loader = new THREE.FileLoader();
+export default {
+    data(){
+        return {
+            imggifs:imggifs,
+            visiable:false,
+            files:[],
+        }
+    },
+    props:{//传入参数
+        fileurls:Array,
+    },
+    mounted(){
+        this.init();
+    },
+    watch:{
+        files:{
+            handler(newVal) {
+                this.$emit("fileLoadeState",newVal);
+            },
+            deep: true,
+          immediate: false,
+        }     
+           
+    },
+    methods:{
+        init(){
+            let _this =this;
+            if( _this.fileurls === undefined)  return;
+            _this.files=[];
+            _this.fileurls.forEach(url=>{
+                let names =url.split("/");
+                let name =names[names.length-1];
+                let file={
+                    url:url,
+                    name:name,
+                    percentage:0,
+                }
+                _this.files.push(file);
+                loader.load(
+                    url,
+                    _this.loadsucess,
+                    function(xhr){
+                        _this.visiable=true
+                        file.percentage=Math.floor(xhr.loaded / xhr.total * 100)
+                    },
+                )
+            })
+        },
+        handleClose(){
+    
+        },
+        loadsucess(data){
+            
+        },
+        loaderror(err){
+            console.error('An error happened');
+        },
+        load(url){
+            if(!this.fileurls.includes(url)){
+                this.fileurls.push(url);
+            }
+            this.init();
+        }
+    }
+}
+
+</script>
+<style scoped>
+.lodingimg{
+    width: 200px;
+    height: 150px;
+  
+}
+.img{
+    width: 100%;
+    height: 100%;
+    margin-top: -40px;
+}
+.loding{
+     width: 100%;
+    text-align: center;
+   
+    position: absolute;
+    bottom: 0;
+    text-align: center;
+}
+.lodgright .el-col{
+    padding: 10px 0;
+
+} 
+.lgleft{
+    position: relative;
+    overflow: hidden;
+  
+}
+.lodgright{
+    padding: 10px 5px;
+
+}
+.lgcoent{
+    padding-bottom: 10px;
+}
+</style>

+ 265 - 0
src/views/index/HCFDLab/fileupload.vue

@@ -0,0 +1,265 @@
+<template>
+    <div class="webuploader-container">
+        <div :id="'uploader'+upId">
+                <el-row>
+                    <el-col :span="6"> {{name}}  </el-col>                   
+                    <el-col :span="6"> <div :id="'picker'+upId" class="text_color" >选择文件</div>  </el-col>
+                </el-row>
+
+                <el-row v-for="(fileObj,key) in files" :key="key" class="disflex">
+                    <el-col :span="6">{{fileObj.name}} </el-col>
+                    <el-col :span="8"><el-progress :percentage="fileObj.percentage"></el-progress></el-col>
+                    <el-col :span="5">{{fileObj.msg}}</el-col>
+                    <el-col :span="5"><el-button size="mini" type="danger" @click="fileDel(fileObj.id)" icon="el-icon-delete" circle></el-button></el-col>
+                </el-row>
+                <!-- <el-button size="mini" @click="uploader.upload()">开始上传</el-button> -->
+        </div>
+    </div>
+
+</template>
+<script>
+import $ from 'jquery' ;
+import WebUploader from 'webuploader';
+import store from "@/store";
+import { request } from "@/utils/request";
+import { ElMessage } from '@/utils/message.js'
+import { log } from 'three';
+let Message = new ElMessage()
+export default {
+    data(){
+        return {
+            uploader:undefined,
+            fileName:undefined,
+            md5:"1212",
+            files:[]
+        }
+    },
+    mounted(){
+        this.initWebUploader();
+        this.$nextTick(function() {
+            this.$on('childmethods', function() {
+                this.uploaderClear()
+            });
+        });
+    },
+    props:{//传入参数
+        projectId: String,
+        solverType: String,
+        accept:String,
+        upId:String,
+        name:String,
+        upfileName:Array
+    },
+    methods:{
+        initWebUploader(){
+            var v_this=this;
+            this.uploader=WebUploader.create({
+                // swf文件路径
+                swf: './Uploader.swf',
+                // 文件接收服务端。
+                server: process.env.VUE_APP_BASE_API+'/TransServlet',
+                //文件上传请求的参数表,每次发送都会发送此对象中的参数。
+                formData: {
+                
+                },
+                // 选择文件的按钮。可选。
+                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
+                pick: {
+                        id:'#picker'+v_this.upId,
+                        multiple:true
+                      },
+                // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
+                resize: false,
+                // 开起分片上传。
+                chunked: true,
+                chunkSize: 1024 * 1024,
+                threads :4,
+
+            })
+            // 当有文件被添加进队列的时候
+            this.uploader.on( 'fileQueued', file=> {
+                v_this.fileName=file.name;
+                const fax=v_this.fileName.split(".")[1];
+                if(this.upfileName&&this.upfileName.length===1&&this.upfileName[0].includes(`.${file.ext}`)&&this.upfileName[0]!==file.name){
+                    v_this.uploader.reset();
+                    Message.error("请检查上传文件名!");
+                    return
+                }
+                  // 判断名字是否包含特殊字符
+                 var flag = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\] _ <>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、? ]")
+                    console.log(flag.test(file.name))
+                        if(flag.test(file.name)){
+                               v_this.uploader.reset();
+                             Message.error("上传文件名不能包含特殊字符");
+                                 return
+                        }
+                if(this.upfileName&&this.upfileName.length===2&&!this.upfileName.includes(file.name)){
+                    v_this.uploader.reset();
+                    Message.error("请检查上传文件名!");
+                    return
+                }
+                if(v_this.accept.indexOf(fax)<0){//判断上传支持文件类型
+                    v_this.uploader.reset();
+                    Message.error("只支持" +v_this.accept+"格式文件!");
+                    return;
+                }
+                v_this.uploader.md5File(file)
+                .progress(percentage=> {//显示加密进度
+                     console.log('Percentage:', percentage);
+                     })
+                .then(md5 =>{ // 完成
+                     v_this.md5=md5;
+             });
+                if(v_this.files.length>0){
+                    v_this.uploader.removeFile(v_this.files[0].id);
+                    v_this.files=[];
+                }
+              
+                v_this.files.push({
+                    id:file.id,
+                    name:file.name,
+                    msg:"等待上传...",
+                    percentage:0
+                })
+            });
+            
+            /**文件发送前
+             *  object {Object}
+                data {Object}默认的上传参数,可以扩展此对象来控制上传参数。
+                headers {Object}可以扩展此对象来控制上传头部
+             */
+            this.uploader.on('uploadBeforeSend', (file,data,headers)=> {
+               data.chunk=file.chunk;
+               data.chunks=file.chunks;
+               data.pid=v_this.projectId;
+               data.solverType=v_this.solverType;
+               data.md5=v_this.md5;
+               data.fileName=v_this.fileName;
+               data.uploadFlag=2;//1 普通 2覆盖 3续传
+               data.channelNo ='service';
+               data.clientToken=store.getters.token;
+               data.transCode='A00113';
+               data.userId=store.getters.userId;
+               headers.Content='multipart';
+               headers.Type='form-data';
+            })
+           // 文件上传过程中创建进度条实时显示。
+            this.uploader.on( 'uploadProgress', ( file, percentage ) =>{
+                let prage= Math.floor(percentage*100);
+                // v_this.$emit('childFn',{name:v_this.name,percentage:prage})
+                v_this.files.forEach(fileObj=>{
+                    if(fileObj.id=file.id)
+                    fileObj.msg='上传中';
+                    fileObj.percentage=prage;
+                })
+            });
+            this.uploader.on( 'uploadSuccess', ( file ,response) =>{
+                 
+                let params = {
+                            transCode: "A00117",
+                            pid: v_this.projectId,
+                            fileName:this.fileName,
+                            solverType:v_this.solverType,
+                            };
+                      
+                request(params)
+                    .then((res) => {
+                     v_this.files.forEach(fileObj=>{
+                    if(fileObj.id=file.id)
+                    fileObj.msg='已上传'
+                    })
+                    let rows= res.rows;
+                    rows.forEach(row=>{
+                        self.logs += "\n" + row.log;
+                    })
+                    
+                })
+                .catch((err) => {});
+                
+            });
+            /**
+             * 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为false, 则此文件将派送server类型的uploadError事件。
+             * object {Object}
+                ret {Object}服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析
+             */
+            this.uploader.on('uploadAccept',(object,res)=>{
+               if(res.returnCode=="000000000"){
+                   if(res.code=="3"){
+                       return true;
+                   }else{
+                       v_this.uploader.stop(true);//失败暂停当前上传的文件
+                       return false;
+                   }
+               }else{
+                   Message.error(res.returnMsg);
+                   return false;
+               }
+            });
+            this.uploader.on( 'uploadError', ( file ,reason)=> {
+                $( '#'+file.id ).text(file.name+'上传出错');
+            });
+
+            this.uploader.on('uploadComplete', file => {
+                // $( '#'+file.id ).find('.progress').fadeOut();
+            });
+            
+        },
+        uploaderClear(){
+             this.uploader.reset();
+             this.percentage=0;
+             this.files=[];
+            //  this.$emit('childFn',{name:v_this.name,percentage:v_this.percentage})
+        },
+        fileDel(fileId){
+            this.files=this.files.filter(fileObj=>{
+                if( fileObj.id == fileId){
+                    this.uploader.removeFile(fileId);
+                }
+               return  fileObj.id != fileId
+            })
+        },
+        
+    },
+    watch:{//数据监听
+    },
+}
+
+</script>
+<style>
+.webuploader-container {
+	position: relative;
+}
+.webuploader-element-invisible {
+	position: absolute !important;
+	clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
+    clip: rect(1px,1px,1px,1px);
+}
+.webuploader-pick {
+	position: relative;
+	display: inline-block;
+	cursor: pointer;
+    padding: 1px 2px;
+    font-size: 12px;
+	color: #606266;
+	text-align: center;
+	border-radius: 3px;
+	overflow: hidden;
+}
+.webuploader-pick-hover {
+	background: #00a2d4;
+}
+
+.webuploader-pick-disable {
+	opacity: 0.6;
+	pointer-events:none;
+}
+.disflex{
+    display: flex;
+    align-items: center;
+}
+.text_color  .webuploader-pick{
+   color: #d5d5d5;
+
+    
+}
+</style>

+ 85 - 0
src/views/index/HCFDLab/hcfdCalculator.vue

@@ -0,0 +1,85 @@
+
+<template>
+     <el-dialog title="单位换算" :visible.sync="visiable" >
+  <el-form :model="form">
+    <el-form-item label="kelvin" :label-width="formLabelWidth">
+      <el-input v-model="form.kelvins" type="number" autocomplete="off"></el-input>
+        
+    </el-form-item>
+     <el-form-item label="℃" :label-width="formLabelWidth">
+      <el-input v-model="form.ssd" type="number" autocomplete="off"></el-input>
+          <el-button @click="dialogbtnkew" style="margin:0 0 0 65px">摄氏度</el-button>
+            <el-button @click="dialogbtnssd">开尔文</el-button>
+    </el-form-item>
+  </el-form>
+</el-dialog>
+</template>
+<script>
+
+import * as THREE from 'three'
+import { number } from 'echarts/lib/export';
+let loader = new THREE.FileLoader();
+export default {
+    data(){
+      return {
+        visiable:false,
+        dialogFormVisible: false,
+        form: {
+          ssd: '',
+          kelvins:'',
+          delivery: false,
+          type: [],
+          resource: '',
+          desc: ''
+        },
+        sum:"",
+        formLabelWidth: '120px'
+      };
+        
+    },
+     props:{//传入参数
+  
+    },
+    mounted(){
+
+    },
+    methods:{
+        //  this.$emit("visiable",this.visiable);
+       dialogbtnkew(){
+            this.form.ssd="";
+            var kelvins=parseFloat(this.form.kelvins) 
+           this.form.ssd =  this.accAdd(kelvins,273.15);
+            //  this.form.ssd = Math.floor((parseInt(this.form.kelvins) * 100) / 100)-273.15
+                if( this.form.ssd <0){
+                this.form.ssd =0;
+            }
+     
+        },
+        accAdd(arg1,arg2){ 
+            var r1,r2,m; 
+            try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
+            try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
+            m=Math.pow(10,Math.max(r1,r2)) 
+            return (arg1*m-arg2*m)/m 
+            },
+            
+        dialogbtnssd(){
+              this.form.kelvins="";
+              var ssd=parseFloat(this.form.ssd) 
+              this.form.kelvins= this.accAdd(ssd ,-273.15);
+            //this.form.kelvins = Math.floor((parseInt(this.form.ssd) * 100) / 100) +273.15
+        },
+    },
+    watch:{
+       
+    },
+  
+
+}
+
+</script>
+<style scoped>
+.el-dialog{
+    width: 24%;
+}
+</style>

+ 279 - 0
src/views/index/HCFDLab/hcfdload/BoundaryLoad.js

@@ -0,0 +1,279 @@
+import * as THREE from 'three'
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+import { kgReplace, ugread } from '../Util.js'
+export const BoundaryLoad = (
+    function () {
+        let _url = ''
+        let _docdiv
+        let scene = new THREE.Scene();//场景
+        let renderer = new THREE.WebGLRenderer( { antialias: true,alpha:true });//渲染器
+        let camera = new THREE.PerspectiveCamera(20, 1, 0.2, 10000);//相机
+        let controls = new OrbitControls(camera, renderer.domElement);// 相机 控制器
+        let model = {}
+        let materials = [];
+        let meshs = [];
+        let geometrys=[];
+        let maxX = 0; //存储 物体 最大坐标 x
+        let maxY = 0;//存储 物体 最大坐标 y
+        let maxZ = 0;//存储 物体 最大坐标 z
+        // let max = 0;
+        let minX = 0; //存储 物体 最小坐标 x
+        let minY = 0;//存储 物体 最小坐标 y
+        let minZ = 0;//存储 物体 最小坐标 z
+        
+        let camerahight = 5 //存储 相机 高度
+        let mufactor = 0.2 //放大系数
+        class BoundaryLoad {
+            constructor(url, docdiv) {
+                _url = url
+                _docdiv = docdiv
+            }
+            loadUgrid() {
+                const loader = new THREE.FileLoader();
+                const _this = this
+                loader.load(
+                    _url,
+                    function (data) {
+                        _this.initScene();
+                        _this.boundary(data);
+                        _this.initGeometry()
+                        _this.mesh()
+                        
+                    },
+                    // onProgress回调
+                    function (xhr) {
+                        // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+                    },
+                    // onError回调
+                    function (err) {
+                        console.error('An error happened');
+                    }
+                );
+            }
+            initScene() {
+                // scene.background = new THREE.Color(0xffff99);//TODO 设置颜色 后期需改为渐变色
+                renderer.setSize(500, 500);//渲染器大小
+                _docdiv.appendChild(renderer.domElement);
+                var animate = function () {//动画
+                    requestAnimationFrame(animate)
+                    renderer.render(scene, camera)
+                }
+                animate();
+                var helpers = new THREE.Group();//实例化辅助对象组
+                helpers.add(new THREE.AxesHelper(5));//添加坐标系控件长度为200
+                scene.add(helpers);//添加到场景
+            }
+            boundary(data) {
+                const lines = data.split('\n');
+                model.title = "";
+                model.variables = [];
+                model.zones = [];
+                lines.forEach(line => {
+                    if (line.indexOf("title") == 0) {//title
+                        model.title = line.replace(/title/, "").replace(/=/, "").replace(/\"/, "");
+                    } else
+                        if (line.indexOf("variables") == 0) {//variables
+                            model.variables = line.replace(/variables/, "").replace(/=/, "").trim().split(" ");
+                        } else
+                            if (line.indexOf("zone") == 0) {//zone
+                                let zone = {};
+                                model.zones.push(zone);
+                                let vs = line.replace(/zone/, "").replace(/\"/, "").trim().split(",");
+                                zone.t = vs[0].split("=")[1];
+                                zone.solutiontime = Number(vs[1].split("=")[1]);
+                                zone.strandid = Number(vs[2].split("=")[1]);
+                                zone.i = Number(vs[3].split("=")[1]);
+                                zone.j = Number(vs[4].split("=")[1]);
+                                zone.f = vs[5].split("=")[1];
+                                zone.datais = [];
+                                zone.datajs = [];
+                            } else {
+                                //当前的zone
+                                let zone = model.zones[model.zones.length - 1];
+                                let datais = zone.datais;
+                                if (datais.length == 0) {
+                                    datais.push([]);
+                                }
+                                let datai = zone.datais[zone.datais.length - 1];
+                                let datas = kgReplace(line.trim()).split(" ").map((i) => Number(i));
+                                if (datai.length < model.variables.length) {//i 单条数据没有封装完整
+                                    datas.forEach(date => {
+                                        datai.push(date);
+                                    })
+                                } else if (datais.length < zone.i) {//i 数据没有封装完成
+                                    let m = [];
+                                    datas.forEach(date => {
+                                        m.push(date);
+                                    })
+                                    datais.push(m);
+                                } else {//j 数据封装
+                                    let dataj = [];
+                                    datas.forEach(date => {
+                                        dataj.push(date);
+                                    })
+                                    if (dataj.length > 1) zone.datajs.push(dataj);//排除最后一条
+                                }
+                            }
+
+                });
+            }
+             /**
+             * 删除模型
+             */
+            clear(){
+                meshs.forEach(mesh=>{
+                    scene.remove(mesh)
+                    this._docdiv.removeChild(_this.renderer.domElement);
+                });
+            }
+            mesh(){
+                geometrys.forEach(geometry=>{
+                    var wf = new THREE.WireframeGeometry(geometry);//几何网格 只显示线
+                    var mesh = new THREE.LineSegments(wf, new THREE.LineBasicMaterial({ color: 0x00ff00 }));//设置线颜色             
+                    meshs.push(mesh)
+                    scene.add(mesh);     
+                });       
+                this.show(); 
+            }
+              /**
+             * contour 显示
+             */
+            contour(){
+                geometrys.forEach(geometry=>{
+                var material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors, side: THREE.DoubleSide });
+                var mesh = new THREE.Mesh(geometry, material);     
+                meshs.push(mesh)
+                scene.add(mesh);
+                });
+                this.show(); 
+            }
+            initGeometry() {
+                model.zones.forEach(zone => {
+                    this.createGeometryByzone(zone);
+                })
+            }
+            show(){
+                meshs.forEach(mesh=>{
+                    mesh.position.x = -1*(maxX+minX) / 2;//设置网格模型几何中心y坐标
+                    mesh.position.y = -1*(maxY+minY)  / 2;//设置网格模型几何中心y坐标
+                    mesh.position.z = -1*(maxZ+minZ) / 2;//设置网格模型几何中心y坐标
+                });
+                camerahight=Math.max(
+                    Math.abs(maxX),
+                    Math.abs(maxY),
+                    Math.abs(maxZ),
+                    Math.abs(minX),
+                    Math.abs(minY),
+                    Math.abs(minZ),
+                )
+                controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+                controls.update();
+                camera.position.set(4*camerahight, 0, 0);//
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+
+            /**
+             *  正面
+             */
+            positive(axis) {
+                if (axis == 'x') camera.position.set(4*camerahight, 0, 0);
+                if (axis == 'y') camera.position.set(0, 4*camerahight, 0);
+                if (axis == 'z') camera.position.set(0, 0, 4*camerahight);
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 反面
+             */
+            negative(axis) {
+                if (axis == 'x') this.camera.position.set(-4*camerahight, 0, 0);
+                if (axis == 'y') this.camera.position.set(0, -4*camerahight, 0);
+                if (axis == 'z') this.camera.position.set(0, 0, -4*camerahight);
+               camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 放大
+             */
+            large() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 + mufactor)
+                    const sy = mesh.scale.y * (1 + mufactor)
+                    const sz = mesh.scale.z * (1 + mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+            /**
+             * 缩小
+             */
+            small() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 - mufactor)
+                    const sy = mesh.scale.y * (1 - mufactor)
+                    const sz = mesh.scale.z * (1 - mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+
+            createGeometryByzone(zone) {
+                var geometry = new THREE.Geometry()
+                this.redzone(geometry, zone)
+                geometrys.push(geometry);
+            }
+            redzone(geometry, zone) {
+                var cellDataValues = { x: [], y: [], z: [], u: [], v: [], w: [], cp: [], mach: [] };
+                zone.datais.forEach(datai => {
+                    var rho = datai[3]; //optional
+                    var vector = new THREE.Vector3(datai[0], datai[1], datai[2]);
+                    geometry.vertices.push(vector);
+
+                    maxX = datai[0]> maxX? datai[0] : maxX
+                    maxY = datai[1]> maxY? datai[1] : maxY
+                    maxZ = datai[2]> maxZ? datai[2] : maxZ
+
+                    
+                    minX = datai[0]< minX? datai[0] : minX
+                    minY = datai[1]< minY? datai[1] : minY
+                    minZ = datai[2]< minZ? datai[2] : minZ
+
+                    cellDataValues.x.push(datai[0])
+                    cellDataValues.y.push(datai[1])
+                    cellDataValues.z.push(datai[2])
+                    cellDataValues.u.push(datai[3])
+                    cellDataValues.v.push(datai[4])
+                    cellDataValues.w.push(datai[5])
+                    cellDataValues.cp.push(datai[6])
+                    cellDataValues.mach.push(datai[7])
+
+                });
+                zone.datajs.forEach(p => {
+                    const v0 = p[0] - 1;
+                    const v1 = p[1] ? p[1] - 1 : v0;
+                    const v2 = p[2] ? p[2] - 1 : v0;
+                    const v3 = p[3] ? p[3] - 1 : v0;
+                    var colos = [];
+                    var color = new THREE.Color()
+                    // color.setHex( cellDataValues.v[v0]/10 *  0xCD6839 );
+                    var g = Math.cos(cellDataValues.cp[v0] * 10);
+                    color.setRGB(g, 1, 0)
+                    var color1 = new THREE.Color()
+                    // color1.setHex( cellDataValues.v[v1]/10 * 0xCD6839 );
+                    var g1 = Math.cos(cellDataValues.cp[v1] * 10);
+                    color1.setRGB(g1, 1, 0)
+                    var color2 = new THREE.Color()
+                    var g2 = Math.cos(cellDataValues.cp[v2] * 10);
+                    // color2.setHex( cellDataValues.v[v2]/10 * 0xCD6839 );
+                    color2.setRGB(g2, 1, 0)
+                    colos.push(color);
+                    colos.push(color1);
+                    colos.push(color2);
+                    var materialIndex = 1; //optional
+                    var face = new THREE.Face3(v0, v1, v2, null, colos, materialIndex)
+                    geometry.faces.push(face);
+                });
+
+            }
+        }
+        return BoundaryLoad
+    })()

+ 202 - 0
src/views/index/HCFDLab/hcfdload/UgridLoad.js

@@ -0,0 +1,202 @@
+import * as THREE from 'three'
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+import { kgReplace, ugread } from '../Util.js'
+export const UgridLoad = (
+    function () {
+        let _url = ''
+        let _docdiv
+        let scene = new THREE.Scene();//场景
+        let renderer = new THREE.WebGLRenderer( { antialias: true,alpha:true } );//渲染器 底色透明
+        let camera = new THREE.PerspectiveCamera(50, 1, 1, 10000);//相机
+        let controls = new OrbitControls(camera, renderer.domElement);// 相机 控制器
+        let model = {}
+        let maxX = 0; //存储 物体 最大坐标 x
+        let maxY = 0;//存储 物体 最大坐标 y
+        let maxZ = 0;//存储 物体 最大坐标 z
+        let minX = 0; //存储 物体 最小坐标 x
+        let minY = 0;//存储 物体 最小坐标 y
+        let minZ = 0;//存储 物体 最小坐标 z
+        let camerahight = 5 //存储 相机 高度
+        let mufactor = 0.2 //放大系数
+        let meshs = []
+        let geometrys=[]
+        class UgridLoad {
+            constructor(url, docdiv) {
+                _url = url
+                _docdiv = docdiv
+            }
+            loadUgrid() {
+                var loader = new THREE.FileLoader();
+                var _this = this
+                loader.load(
+                    _url,
+                    function (data) {
+                        _this.ugrid(data);
+                        _this.initScene();
+                        _this.initGeometry();
+                        _this.mesh();
+                    },
+                    // onProgress回调
+                    function (xhr) {
+                        // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+                    },
+                    // onError回调
+                    function (err) {
+                        console.error('An error happened');
+                    }
+                );
+            }
+
+            initScene() {
+                // scene.background = new THREE.Color(0xff0000);//TODO 设置颜色 后期需改为渐变色
+                
+                renderer.setSize(500, 500);//渲染器大小
+                _docdiv.appendChild(renderer.domElement);
+                controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+                controls.update();
+                var animate = function () {//动画
+                    requestAnimationFrame(animate)
+                    renderer.render(scene, camera)
+                }
+                animate();
+            }
+            initGeometry() {
+                var geometry = new THREE.Geometry();
+                model.node.forEach(datai => {
+                    maxX = datai[0]> maxX? datai[0] : maxX
+                    maxY = datai[1]> maxY? datai[1] : maxY
+                    maxZ = datai[2]> maxZ? datai[2] : maxZ                  
+                    minX = datai[0]< minX? datai[0] : minX
+                    minY = datai[1]< minY? datai[1] : minY
+                    minZ = datai[2]< minZ? datai[2] : minZ
+                    geometry.vertices.push(new THREE.Vector3(datai[0], datai[1], datai[2]));
+                });
+                model.tri.forEach(p => {
+                    const v0 = p[0] - 1;
+                    const v1 = p[1] ? p[1] - 1 : v0;
+                    const v2 = p[2] ? p[2] - 1 : v0;
+                    var face = new THREE.Face3(v0, v1, v2)
+                    geometry.faces.push(face);
+                });
+                geometrys.push(geometry)
+                camerahight=Math.max(
+                    Math.abs(maxX),
+                    Math.abs(maxY),
+                    Math.abs(maxZ),
+                    Math.abs(minX),
+                    Math.abs(minY),
+                    Math.abs(minZ),
+                )
+                controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+                controls.update();
+                camera.position.set(4*camerahight, 0, 0);//
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            show(){
+                meshs.forEach(mesh=>{
+                    mesh.scale.set(1,1,1)
+                    mesh.position.x = -1*(maxX+minX) / 2;//设置网格模型几何中心y坐标
+                    mesh.position.y = -1*(maxY+minY)  / 2;//设置网格模型几何中心y坐标
+                    mesh.position.z = -1*(maxZ+minZ) / 2;//设置网格模型几何中心y坐标  
+                });
+            }
+            /**
+             * 删除模型
+             */
+            clear(){
+                meshs.forEach(mesh=>{
+                    scene.remove(mesh)
+                });
+            }
+            mesh(){
+                geometrys.forEach(geometry=>{
+                    var wf = new THREE.WireframeGeometry(geometry);//几何网格 只显示线
+                    var mesh = new THREE.LineSegments(wf, new THREE.LineBasicMaterial({ color: 0x00ff00 }));//设置线颜色             
+                    meshs.push(mesh)
+                    scene.add(mesh);     
+                });     
+                this.show()   
+            }
+            /**
+             * contour 显示
+             */
+            contour(){
+                geometrys.forEach(geometry=>{
+                var material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors, side: THREE.DoubleSide });
+                var mesh = new THREE.Mesh(geometry, material);     
+                meshs.push(mesh)
+                scene.add(mesh);
+                });
+                this.show()
+            }
+             /**
+             *  正面
+             */
+            positive(axis) {
+                if (axis == 'x') camera.position.set(4*camerahight, 0, 0);
+                if (axis == 'y') camera.position.set(0, 4*camerahight, 0);
+                if (axis == 'z') camera.position.set(0, 0, 4*camerahight);
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 反面
+             */
+            negative(axis) {
+                if (axis == 'x') camera.position.set(-4*camerahight, 0, 0);
+                if (axis == 'y') camera.position.set(0, -4*camerahight, 0);
+                if (axis == 'z') camera.position.set(0, 0, -4*camerahight);
+               camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 放大
+             */
+            large() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 + mufactor)
+                    const sy = mesh.scale.y * (1 + mufactor)
+                    const sz = mesh.scale.z * (1 + mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+            /**
+             * 缩小
+             */
+            small() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 - mufactor)
+                    const sy = mesh.scale.y * (1 - mufactor)
+                    const sz = mesh.scale.z * (1 - mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+            ugrid(data) {
+                const lines = data.split('\n');
+                const onelines = kgReplace(lines[0].trim()).split(" ").map((str) => Number(str.trim()));
+                const nnode = onelines[0];
+                const n_tri = onelines[1];
+                const n_quad = onelines[2];
+                const n_tet = onelines[3];
+                const n_pyr = onelines[4];
+                const n_prism = onelines[5];
+                const n_hex = onelines[6];
+                model.node = [];
+                ugread(lines, " ", 1, nnode + 1, model.node);
+                model.tri = [];
+                ugread(lines, " ", nnode + 1, nnode + n_tri + 1, model.tri);
+                model.quad = [];
+                ugread(lines, " ", nnode + n_tri + 1, nnode + n_tri + n_quad + 1, model.quad);
+                model.tet = [];
+                ugread(lines, " ", nnode + n_tri + n_quad + 1, nnode + n_tri + n_quad + n_tet + 1, model.tet);
+                model.pyr = [];
+                ugread(lines, " ", nnode + n_tri + n_quad + n_tet + 1, nnode + n_tri + n_quad + n_tet + n_pyr + 1, model.pyr);
+                model.prism = [];
+                ugread(lines, " ", nnode + n_tri + n_quad + n_tet + n_pyr + 1, nnode + n_tri + n_quad + n_tet + n_pyr + n_prism + 1, model.prism);
+                model.hex = [];
+                ugread(lines, " ", nnode + n_tri + n_quad + n_tet + n_pyr + n_prism + 1, nnode + n_tri + n_quad + n_tet + n_pyr + n_prism + n_hex + 1, model.hex);
+            }
+        }
+        return UgridLoad
+    })()

+ 303 - 0
src/views/index/HCFDLab/hcfdload/VolumLoad.js

@@ -0,0 +1,303 @@
+import * as THREE from 'three'
+import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
+import { kgReplace, ugread } from '../Util.js'
+export const VolumLoad = (
+    function () {
+        let _urls = []
+        let _docdiv
+        let scene = new THREE.Scene();//场景
+        let renderer = new THREE.WebGLRenderer( { antialias: true,alpha:true });//渲染器
+        let camera = new THREE.PerspectiveCamera(50, 1, 1, 10000);//相机
+        let controls = new OrbitControls(camera, renderer.domElement);// 相机 控制器
+        let model = {}
+
+        let meshs = [];
+        let maxX = 0; //存储 物体 最大坐标 x
+        let maxY = 0;//存储 物体 最大坐标 y
+        let maxZ = 0;//存储 物体 最大坐标 z
+        // let max = 0;
+        let minX = 0; //存储 物体 最小坐标 x
+        let minY = 0;//存储 物体 最小坐标 y
+        let minZ = 0;//存储 物体 最小坐标 z
+        let camerahight = 5 //存储 相机 高度
+        let mufactor = 0.2 //放大系数
+        let geometrys=[]
+
+        class VolumLoad {
+            constructor(urls, docdiv) {
+                _urls = urls
+                _docdiv = docdiv
+            }
+            loadUgrid() {
+                var _this = this
+                _urls.forEach(url => {
+                    var loader = new THREE.FileLoader();
+                    loader.load(
+                        url,
+                        // onLoad回调
+                        function (data) {
+                            _this.initScene()
+                            _this.intiGeometry(_this.volum(data));
+                            _this.mesh()
+                          
+                        },
+                        // onProgress回调
+                        function (xhr) {
+                            // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+                        },
+                        // onError回调
+                        function (err) {
+                            console.error('An error happened');
+                        }
+                    );
+                })
+            }
+            initScene() {
+                // scene.background = new THREE.Color(0xffff99);//TODO 设置颜色 后期需改为渐变色
+                renderer.setSize(500, 500);//渲染器大小
+                // renderer.setClearColorHex(0xFFFFFF,1.0);
+                _docdiv.appendChild(renderer.domElement);
+                camera.position.set(0, 0, 80);
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+                controls.target.set(0, 1, 0);//鼠标拖动  已0,0,0 点旋转
+                controls.update();
+                var animate = function () {//动画
+                    requestAnimationFrame(animate)
+                    renderer.render(scene, camera)
+                }
+                animate();
+            }
+            show(){
+                meshs.forEach(mesh=>{
+                    mesh.position.x = -1*(maxX+minX) / 2;//设置网格模型几何中心y坐标
+                    mesh.position.y = -1*(maxY+minY)  / 2;//设置网格模型几何中心y坐标
+                    mesh.position.z = -1*(maxZ+minZ) / 2;//设置网格模型几何中心y坐标
+                });
+                camerahight=Math.max(
+                    Math.abs(maxX),
+                    Math.abs(maxY),
+                    Math.abs(maxZ),
+                    Math.abs(minX),
+                    Math.abs(minY),
+                    Math.abs(minZ),
+                )
+                controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+                controls.update();
+                camera.position.set(4*camerahight, 0, 0);//
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+             /**
+             *  正面
+             */
+            positive(axis) {
+                if (axis == 'x') camera.position.set(4*camerahight, 0, 0);
+                if (axis == 'y') camera.position.set(0, 4*camerahight, 0);
+                if (axis == 'z') camera.position.set(0, 0, 4*camerahight);
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 反面
+             */
+            negative(axis) {
+                if (axis == 'x') camera.position.set(-4*camerahight, 0, 0);
+                if (axis == 'y') camera.position.set(0, -4*camerahight, 0);
+                if (axis == 'z') camera.position.set(0, 0, -4*camerahight);
+                camera.lookAt(scene.position);
+                camera.updateMatrix();
+            }
+            /**
+             * 放大
+             */
+            large() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 + mufactor)
+                    const sy = mesh.scale.y * (1 + mufactor)
+                    const sz = mesh.scale.z * (1 + mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+            /**
+             * 缩小
+             */
+            small() {
+                meshs.forEach(mesh => {
+                    const sx = mesh.scale.x * (1 - mufactor)
+                    const sy = mesh.scale.y * (1 - mufactor)
+                    const sz = mesh.scale.z * (1 - mufactor)
+                    mesh.scale.set(sx, sy, sz);
+                })
+            }
+
+            volumezone(geometry, zone) {
+                for (let i = 0; i < zone.n; i++) {
+   
+                    maxX = zone.cellDataValues.x[i]> maxX? zone.cellDataValues.x[i] : maxX
+                    maxY = zone.cellDataValues.y[i]> maxY? zone.cellDataValues.y[i] : maxY
+                    maxZ = zone.cellDataValues.z[i]> maxZ? zone.cellDataValues.z[i] : maxZ
+                    minX = zone.cellDataValues.x[i]< minX? zone.cellDataValues.x[i] : minX
+                    minY = zone.cellDataValues.y[i]< minY? zone.cellDataValues.y[i] : minY
+                    minZ = zone.cellDataValues.z[i]< minZ? zone.cellDataValues.z[i] : minZ
+                    var vector = new THREE.Vector3(zone.cellDataValues.x[i],  zone.cellDataValues.y[i], zone.cellDataValues.z[i]);
+                    
+                    geometry.vertices.push(vector);
+                }
+                zone.datajs.forEach(p => {
+                    const v0 = p[0] - 1
+                    const v1 = p[1] - 1
+                    const v2 = p[2] - 1
+                    const v3 = p[3] - 1
+                    var face1 = this.createFace(zone,v0,v1,v2)
+                    var face2 = this.createFace(zone,v0,v1,v3)
+                    var face3 = this.createFace(zone,v0,v2,v3)
+                    var face4 = this.createFace(zone,v1,v2,v3)
+                    geometry.faces.push(face1);                  
+                    geometry.faces.push(face2);
+                    geometry.faces.push(face4);
+                    geometry.faces.push(face3);
+                });
+
+            }
+            createFace(zone,v0,v1,v2){
+                var colos=[];
+                var color = new THREE.Color()
+                var g= Math.cos(zone.cellDataValues.p[v0]*100);
+                color.setRGB(g,1,0)
+                var color1 = new THREE.Color()
+                var g1= Math.cos(zone.cellDataValues.p[v1]*100);
+                color1.setRGB(g1,1,0)
+                var color2 = new THREE.Color()
+                var g2= Math.cos(zone.cellDataValues.p[v2]*100);
+                color2.setRGB(g2,1,0)
+                colos.push(color);
+                colos.push(color1);
+                colos.push(color2);
+                return new THREE.Face3(v0, v1, v2,null,colos)
+            }
+
+            /**
+             * 网格显示
+             */
+            mesh(){
+                geometrys.forEach(geometry=>{
+                    var wireframe = new THREE.WireframeGeometry(geometry);//几何网格 只显示线
+                    var mesh = new THREE.LineSegments(wireframe, new THREE.LineBasicMaterial({ color: 0x00ff00 }));//设置线颜色
+                    mesh.material.opacity = 1;
+                    // var material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors, side: THREE.DoubleSide });
+                    // var mesh = new THREE.Mesh(this.geometryvolum(zone), material);     
+                    meshs.push(mesh)
+                    scene.add(mesh);
+                });
+                this.show()
+            }
+
+            /**
+             * contour 显示
+             */
+            contour(){
+                geometrys.forEach(geometry=>{
+                var material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors, side: THREE.DoubleSide });
+                var mesh = new THREE.Mesh(geometry, material);     
+                meshs.push(mesh)
+                scene.add(mesh);
+            });
+                this.show()
+            }
+            /**
+             * 删除模型
+             */
+            clear(){
+                meshs.forEach(mesh=>{
+                    scene.remove(mesh)
+                });
+            }
+            /** */
+            volum(data) {
+                const lines = data.split('\n');
+                model.title = "";
+                model.variables = [];
+                model.zones = [];
+                lines.forEach(line => {
+                    if (line.indexOf("title") == 0) {//title
+                        model.title = line.replace(/title/, "").replace(/=/, "").replace(/\"/, "");
+                    } else
+                        if (line.indexOf("variables") == 0) {//variables
+                            model.variables = line.replace(/variables/, "").replace(/=/, "").trim().split(" ");
+                        } else
+                            if (line.indexOf("zone") == 0) {//zone
+                                let zone = {};
+                                zone.cellDataValues = {
+                                    x: [],
+                                    y: [],
+                                    z: [],
+                                    rho: [],
+                                    u: [],
+                                    v: [],
+                                    w: [],
+                                    p: [],
+                                    cp: [],
+                                    mach: []
+                                };
+                                model.zones.push(zone);
+                                let vs = line.replace(/zone/, "").replace(/\"/, "").trim().split(",");
+                                zone.t = vs[0].split("=")[1];
+                                zone.solutiontime = Number(vs[1].split("=")[1]);
+                                zone.strandid = Number(vs[2].split("=")[1]);
+                                zone.n = Number(vs[3].split("=")[1]);
+                                zone.e = Number(vs[4].split("=")[1]);
+                                zone.f = vs[5].split("=")[1];
+                                zone.et = vs[6].split("=")[1];
+                                zone.datais = [];
+                                zone.datajs = [];
+                            } else {
+                                //当前的zone
+                                let zone = model.zones[model.zones.length - 1];
+                                let datas = kgReplace(line.trim()).split(" ").map((i) => Number(i));
+                                let dataj = [];
+                                datas.forEach(date => {
+                                    if (zone.cellDataValues.x.length < zone.n) {
+                                        zone.cellDataValues.x.push(date)
+                                    } else if (zone.cellDataValues.y.length < zone.n) {
+                                        zone.cellDataValues.y.push(date)
+                                    } else if (zone.cellDataValues.z.length < zone.n) {
+                                        zone.cellDataValues.z.push(date)
+                                    }
+                                    // else if(zone.cellDataValues.rho.length<zone.n){
+                                    //   zone.cellDataValues.rho.push(date)
+                                    // }
+                                    else if (zone.cellDataValues.u.length < zone.n) {
+                                        zone.cellDataValues.u.push(date)
+                                    } else if (zone.cellDataValues.v.length < zone.n) {
+                                        zone.cellDataValues.v.push(date)
+                                    } else if (zone.cellDataValues.w.length < zone.n) {
+                                        zone.cellDataValues.w.push(date)
+                                    } else if (zone.cellDataValues.p.length < zone.n) {
+                                        zone.cellDataValues.p.push(date)
+                                    }
+                                    // else if(zone.cellDataValues.cp.length<zone.n){
+                                    //   zone.cellDataValues.cp.push(date)
+                                    // }else if(zone.cellDataValues.mach.length<zone.n){
+                                    //   zone.cellDataValues.mach.push(date)
+                                    // }
+                                    else if (zone.datajs.length < zone.e) {
+                                        dataj.push(date);
+                                    }
+                                })
+                                if (dataj.length > 1) {
+                                    zone.datajs.push(dataj);
+                                }
+                            }
+                });
+                return model.zones[0];
+            }
+            intiGeometry(zone) {
+                var geometry = new THREE.Geometry();
+                this.volumezone(geometry, zone)
+                geometrys.push(geometry)
+            };
+
+        }
+        return VolumLoad
+    })()

+ 97 - 0
src/views/index/HCFDLab/hcfdsso.vue

@@ -0,0 +1,97 @@
+<template>
+    
+</template>
+<script>
+import store from "@/store";
+import { setToken } from '@/utils/token'
+import { request} from "@/utils/request";
+import { Caegw_ProUrl,Caegw_LogUrl } from '@/settings' ;// 引入settings.js
+import { log } from 'three';
+
+export default {
+    data(){
+        return {
+            authCode:undefined,
+            projectId:undefined,
+            cjuserid:undefined,
+            token:undefined
+        }
+    },
+    mounted(){
+        this.init();
+        this.enterWorkbench();
+    },
+    methods:{
+        init(){
+            this.authCode = this.$route.query.authCode;//获取url 参数
+            this.projectId = this.$route.query.projectId;//获取url 参数
+            this.cjuserid = this.$route.query.cjuserid;
+            this.token=this.$route.query.token;
+        },
+        //进入工作台
+        enterWorkbench() {
+              let params = {
+                transCode: "A00114",
+                authCode: this.authCode
+            };
+            request(params)
+                .then((res) => {
+                    console.log("gethcfdsolverfiles" + res);
+                    this.$store.dispatch('user/changeState', {
+                        key: 'userId',
+                        value: res.authUserId
+                    })
+                    this.$store.dispatch('user/changeState', {
+                        key: 'token',
+                        value: res.authToken
+                    })
+                    this.$store.dispatch('user/changeState', {
+                        key: 'loginStatus',
+                        value: true
+                    })
+                    setToken(res.authToken)
+                    this.getToHcfd();
+
+                })
+                .catch((err) => {
+                     this.getToHcfd();
+                }) ;
+        },
+        getToHcfd(){
+            let loginStatus = this.$store.getters.loginStatus
+            if (loginStatus) {
+                this.$message.success('恭喜你,成功进入工作台!')
+                this.projectId=1;
+                if(this.projectId!=undefined&&this.projectId!=null){
+                    console.log(1111)
+                    // this.$router.replace('/HCFD/HCFD?projectId='+this.projectId)
+                     this.$router.replace('/HCFD/HCFD?projectId='+this.projectId+'&token='+this.token+'&cjuserid='+this.cjuserid)
+                }else{
+                     console.log(2222)
+                     this.$router.replace('/HCFD/HCFD')
+                   
+                }
+                
+
+            } else {
+                this.$confirm('你还未登录,请登录后再操作, 是否登录?', '提示', {
+                confirmButtonText: '登录',
+                cancelButtonText: '取消',
+                type: 'warning'
+                })
+                .then(() => {
+                    // this.$router.replace('/login/index')
+                    let logUrl = window.location.protocol+"//"+window.location.host+"/"+this.$store.getters.logUrl;
+                    // console.log(logUrl);
+                    window.location.href=this.logUrl
+                })
+                .catch(() => {
+                    this.$message.info('已取消!')
+                })
+            }
+
+        },
+    },
+    
+}
+</script>

+ 164 - 0
src/views/index/HCFDLab/highchartest.vue

@@ -0,0 +1,164 @@
+<template>
+  <div class="x-bar">
+    <div id="container"></div>
+  </div>
+</template>
+<script>
+import Highcharts from "highcharts"; //必须引入
+import { kgReplace, ugread } from "./Util.js";
+import { options } from 'runjs';
+export default {
+  data() {
+    return {
+      chart: null,
+      convergeDate: { title: "hcfd", VARIABLES: [], value: [] },
+    };
+  },
+  mounted: function () {
+    Highcharts.setOptions({
+      global: {
+        useUTC: false,
+      },
+    });
+    let _this = this;
+    this.getwebsocket();
+  },
+  methods: {
+    // websocket
+    getwebsocket() {
+      //初始化weosocket
+      const wsuri =
+        "ws://192.168.0.43:8031/websocket?projectId=5e510d20f17a446a81f5893fb875f79e";
+      this.websock = new WebSocket(wsuri);
+      this.websock.onmessage = this.websocketonmessage;
+      this.websock.onopen = this.websocketonopen;
+      this.websock.onerror = this.websocketonerror;
+      this.websock.onclose = this.websocketclose;
+    },
+    websocketonopen(e) {
+      //连接建立之后执行send方法发送数据
+    },
+    websocketonerror() {
+      //连接建立失败重连
+      this.websock.close();
+    },
+    websocketonmessage(e) {
+      //数据接收
+      console.log(e.data);
+      const redata = JSON.parse(e.data);
+      if (redata.type == "iter") {
+       
+        this.convergeDateLoad(redata.value);
+      }
+    },
+    websocketsend(Data) {
+      //数据发送
+      this.websock.send(Data);
+    },
+    websocketclose(e) {
+      //关闭
+      Message({
+        type: "error",
+        message: "websock断开连接",
+      });
+
+      this.websock.close();
+    },
+    convergeDateLoad(data) {
+      const lines = data;
+       console.log(lines);
+      var patIter = /^ Iter /;
+      var patiter = /^ iter /;
+      if (patIter.exec(lines) !== null) {
+        const onelines = kgReplace(lines.trim())
+          .split(" ")
+          .map((str) => str.trim());
+        let VARIABLES = onelines.slice(1);
+        this.convergeDate.VARIABLES=VARIABLES;
+        this.HighchartsData();
+      }
+      if (patiter.exec(lines) !== null) {
+        const onelines = kgReplace(lines.trim()).split(" ")
+          .map((str) => str.trim());
+        let data = onelines.slice(2).map((str) => Number(str));
+
+        this.convergeDate.value.push(
+          onelines.slice(2).map((str) => Number(str))
+        );
+        
+        for (var i in this.convergeDate.VARIABLES) {
+            var series = this.chart.series[i];
+            series.addPoint([Number(onelines[1]),data[i]]);
+        }
+      }
+     
+    },
+
+    activeLastPointToolip(chart) {
+      var points = chart.series[0].points;
+      chart.tooltip.refresh(points[points.length - 1]);
+    },
+    HighchartsData() {
+      let _this = this;
+      let option={
+        title: {
+          text: "HCFD",
+        },
+        chart: {
+          plotBackgroundColor: "rgba(0,0,0,0)",
+          // borderWidth: 1,
+          backgroundColor: "rgba(0,0,0,0)",
+        },
+        yAxis: {},
+        xAxis: {},
+        plotOptions: {
+          series: {
+            lineWidth: 1,
+            label: {
+              connectorAllowed: false,
+            },
+            marker: {
+              radius: 5,
+            },
+            pointStart: 1,
+          },
+        },
+        tooltip: {},
+        legend: {
+          enabled: false,
+        },
+        series: [
+        //   {
+           // name: "随机数据",
+            // data: (function () {
+            //   // 生成随机值
+            //   var data = [],
+            //     time = new Date().getTime(),
+            //     i;
+            //   for (i = -19; i <= 0; i += 1) {
+            //     data.push({
+            //       x: time + i * 1000,
+            //       y: Math.random(),
+            //     });
+            //   }
+            //   return data;
+            // })(),
+        //   },
+        ],
+      }
+       for (var i in _this.convergeDate.VARIABLES) {
+          var obj = {
+            name: "",
+            data: [0, 0],
+            color: "",
+            display: true,
+          };
+          obj.name = _this.convergeDate.VARIABLES[i];
+          option.series.push(obj);
+        }
+      _this.chart = Highcharts.chart("container", option);
+      console.log(_this.chart.series)
+    },
+  },
+};
+</script>

+ 4489 - 18
src/views/index/HCFDLab/index.vue

@@ -1,36 +1,4507 @@
 <template>
 <div class="hcfdlab">
-  <el-tabs  :tab-position="tabPosition" v-model="activeName" type="card" @tab-click="handleClick">
-          <el-tab-pane label="几何建模" name="one"><geometry></geometry></el-tab-pane>
-          <el-tab-pane label="网格划分" name="two"> <meshindex></meshindex></el-tab-pane>
-          <el-tab-pane label="通用设置" name="three"> 通用设置</el-tab-pane>
-          <el-tab-pane label="物理模型" name="four">物理模型 </el-tab-pane>
-           <el-tab-pane label="求解控制" name="five">求解控制</el-tab-pane>
-          <el-tab-pane label="结果查看" name="six"> 结果查看 </el-tab-pane>
-          <el-tab-pane label="工具箱" name="twelve">工具箱</el-tab-pane>
+  <div class="scal">
+     
+      <div class="toolbar-part-detail lbg_color1 ">
+         <!-- 工具栏 -->
+      <!-- <transformtool ref="transform" :servertype="servertype" :projectId='project.projectId'  :wstep='wstep' :bStep='bStep' :vStep='vStep'></transformtool> -->
+          <el-tabs   v-model="activeName" type="card" @tab-click="handleClick">
 
-           
-    </el-tabs>
-</div>
+            <el-tab-pane label="几何建模" name="one"><geometry></geometry></el-tab-pane>
+          <el-tab-pane label="网格划分" name="twos"> <meshindex></meshindex></el-tab-pane>
+          <!-- 通用设置 -->
+          <el-tab-pane :label="$t('HCFD.geneal.geneal')" name="two">
+              <div class="imgzong">
+             <div class="item1"  v-for="(itemcj,index) in twolist"  :key="'two-'+ index" :class="{activeOrange:active=='two-'+ index}" @click="clickgeometry($event,index,'two-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="itemcj.titlie" placement="bottom">
+                             <el-image :src="itemcj.icon" fit="cover" /> 
+            </el-tooltip>
+            </div>
+           </div>
+          </el-tab-pane>
+          <!-- 物理模型 -->
+          <el-tab-pane :label="$t('HCFD.physics.physics')" name="three">
+             <div class="imgzong">
+             <div class="item1"  v-for="(item,index) in physicslist"  :key="'three-'+ index" :class="{activeOrange:active=='three-'+ index}" @click="clickgeometry($event,index,'three-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                        <el-image :src="item.icon" fit="cover" />   
+            </el-tooltip>
+             </div>
+               <span class="shu">|</span>
+                 <div class="item1"  v-for="(item,index) in physicslist2"  :key="'three2-'+ index" :class="{activeOrange:active=='three2-'+ index}" @click="clickgeometry($event,index,'three2-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                       <el-image :src="item.icon" fit="cover" /> 
+            </el-tooltip>
+             </div>
+              <span class="shu">|</span>
+                <div class="item1"  v-for="(item,index) in physicslist1"  :key="'three1-'+ index" :class="{activeOrange:active=='three1-'+ index}" @click="clickgeometry($event,index,'three1-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                       <el-image :src="item.icon" fit="cover" />  
+            </el-tooltip>
+             </div>
+            </div>
+            
+          </el-tab-pane>
+          <!-- 求解控制 -->
+          <el-tab-pane :label="$t('HCFD.solution.solution')" name="four">
+            <div class="imgzong">
+              <div class="item1"  v-for="(item,index) in  solutionlist"  :key="'four-'+ index" :class="{activeOrange:active=='four-'+ index}" @click="clickgeometry($event,index,'four-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+                  <span class="shu">|</span>
+                  <div class="item1"  v-for="(item,index) in  solutionlist1"  :key="'four1-'+ index" :class="{activeOrange:active=='four1-'+ index}" @click="clickgeometry($event,index,'four1-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+                  <span class="shu">|</span>
+                     <div class="item1"  v-for="(item,index) in  solutionlist2"  :key="'four2-'+ index" :class="{activeOrange:active=='four2-'+ index}" @click="clickgeometry($event,index,'four2-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+                   
+                  <span class="shu">|</span>
+                      <div class="item1"  v-for="(item,index) in  solutionlist3"  :key="'four3-'+ index" :class="{activeOrange:active=='four3-'+ index}" @click="clickgeometry($event,index,'four3-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+                  <span class="shu">|</span>
+                      <div class="item1"  v-for="(item,index) in  solutionlist4"  :key="'four4-'+ index" :class="{activeOrange:active=='four4-'+ index}" @click="clickgeometry($event,index,'four4-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+              
+            </div>
+            <!-- 结果 -->
+          </el-tab-pane>
+           <el-tab-pane :label=" $t('HCFD.results.results')" name="five">
+              <div class="imgzong" v-if="lsolverState=='2'">
+                        <div class="item1 "    v-for="(item,index) in  resultslist"  :key="'five-'+ index" :class="{activeOrange:active=='five-'+ index}" @click="clickgeometry($event,index,'five-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                    <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#${item.icon}`" />
+                  </svg>
+            </el-tooltip>
+             </div>
+               </div>
+           </el-tab-pane>
+           <!-- 工具 -->
+          <el-tab-pane :label="$t('HCFD.tool.unitConversion')" name="six"> 
+               <div class="imgzong">
+                        <div class="item1"  v-for="(item,index) in  unitlist "  :key="'six-'+ index" :class="{activeOrange:active=='six-'+ index}" @click="clickgeometry($event,index,'six-'+ index)">
+                <el-tooltip class="item" effect="dark" :content="item.titlie" placement="bottom">
+                      <el-image :src="item.icon" fit="cover" /> 
+            </el-tooltip>
+             </div>
+               </div>
+          </el-tab-pane>
+        </el-tabs>
+         </div> 
+          </div> 
+<!-- 缩放 -->
+   <el-dialog
+     v-if="active=='two-0'"
+      :visible.sync="dialog.scale_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      class="dialog"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="t1" fit="cover" />
+     <span class="text-color">{{$t('HCFD.geneal.scale')}}</span>
+  </div>
+      <el-form>
+             <el-form-item label="名称" :label-width="formLabelWidth2" >
+        <el-input v-model="mcnames" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="类型" :label-width="formLabelWidth2" >
+      <el-input value="suofang" autocomplete="off"></el-input>
+      </el-form-item>
+       <div class="line">
+      <div class="linetext">相交/延长</div>
+    </div> 
+         <el-form-item :label="$t('HCFD.geneal.factor')" :label-width="formLabelWidth2" >
+      <el-input  v-model="geneal.MeshTransform.Scale.Factor" autocomplete="off"></el-input>
+      </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.scale_visiable = false">{{ $t("HCFD.file.cancel")}}</el-button>
+        <el-button type="primary" @click="dialog.scale_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 翻译 -->
+  <el-dialog
+     v-if="active=='two-1'"
+      :visible.sync="dialog.translation_visiable"
+          :close-on-click-modal="false"
+          @close='activecleer()'
+       :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+       <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="t2" fit="cover" />
+     <span class="text-color">{{$t('HCFD.geneal.translation')}}</span>
+  </div>
+      <el-form class="div64">
+            <el-form-item label="名称" :label-width="formLabelWidth2" >
+        <el-input v-model="mcnames" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="类型" :label-width="formLabelWidth2" >
+      <el-input value="PingYi" autocomplete="off"></el-input>
+      </el-form-item>
+       <div class="line">
+      <div class="linetext">属性</div>
+    </div> 
+        <div  class="liitem">
+              <el-form-item :label="$t('HCFD.geneal.distance')" :label-width="formLabelWidth7">
+              <el-input    v-model="geneal.MeshTransform.Translation.Distance" autocomplete="off"></el-input>
+            </el-form-item>
+        </div>
+        <div class="liitem">
+            <el-form-item :label="$t('HCFD.geneal.translationx')" :label-width="formLabelWidth7">
+              <el-input    v-model="geneal.MeshTransform.Translation.X" autocomplete="off"></el-input>
+            </el-form-item>
+        </div>
+        <div  class="liitem">
+            <el-form-item :label=" $t('HCFD.geneal.translationy')" :label-width="formLabelWidth7">
+              <el-input    v-model="geneal.MeshTransform.Translation.Y" autocomplete="off"></el-input>
+            </el-form-item>
+        </div>
+        <div  class="liitem">
+             <el-form-item :label="$t('HCFD.geneal.translationz')" :label-width="formLabelWidth7">
+              <el-input    v-model="geneal.MeshTransform.Translation.Z" autocomplete="off"></el-input>
+            </el-form-item>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.translation_visiable = false"
+          > {{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.translation_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+<!-- 旋转 -->
+ <el-dialog
+    v-if="active=='two-2'"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+       :modal='false'
+    custom-class='dialoglocation dialog_color'
+      :visible.sync="dialog.rotation_visiable"
+       width="385px"
+      :style="styX"
+    >
+     <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="t3" fit="cover" />
+     <span class="text-color">{{$t('HCFD.geneal.rotation')}}</span>
+  </div>
+      <el-form class="div64">
+           <el-form-item label="名称" :label-width="formLabelWidth2" >
+        <el-input v-model="mcnames" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item label="类型" :label-width="formLabelWidth2" >
+      <el-input value="xuanzuan" autocomplete="off"></el-input>
+      </el-form-item>
+       <div class="line">
+      <div class="linetext">属性</div>
+    </div> 
+     <el-form-item :label="$t('HCFD.geneal.angle')" :label-width="formLabelWidth7" >
+      <el-input v-model="geneal.MeshTransform.Rotation.Angle" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item :label="$t('HCFD.geneal.rotationx')" :label-width="formLabelWidth7" >
+      <el-input   v-model="geneal.MeshTransform.Rotation.X" autocomplete="off"></el-input>
+      </el-form-item>
+       <el-form-item :label="$t('HCFD.geneal.rotationy')" :label-width="formLabelWidth7" >
+      <el-input      v-model="geneal.MeshTransform.Rotation.Y" autocomplete="off"></el-input>
+      </el-form-item>
+      <el-form-item :label="$t('HCFD.geneal.rotationz')" :label-width="formLabelWidth7" >
+      <el-input          v-model="geneal.MeshTransform.Rotation.Z" autocomplete="off"></el-input>
+      </el-form-item>
+         <el-form-item :label="$t('HCFD.geneal.rotationx1')" :label-width="formLabelWidth7" >
+      <el-input            v-model="geneal.MeshTransform.Rotation.X1" autocomplete="off"></el-input>
+      </el-form-item>  
+        <el-form-item :label="$t('HCFD.geneal.rotationy1')" :label-width="formLabelWidth7" >
+      <el-input              v-model="geneal.MeshTransform.Rotation.Y1" autocomplete="off"></el-input>
+      </el-form-item>  
+       <el-form-item :label="$t('HCFD.geneal.rotationz1')" :label-width="formLabelWidth7" >
+      <el-input   v-model="geneal.MeshTransform.Rotation.Z1" autocomplete="off"></el-input>
+      </el-form-item>  
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.rotation_visiable = false">{{ $t("HCFD.file.cancel")}}</el-button>
+        <el-button type="primary" @click="dialog.rotation_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 分析类型 -->
+     <el-dialog
+      class="lg-y-z"
+      :visible.sync="dialog.type_visiable "
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='two-3'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+     <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="t4" fit="cover" />
+     <span class="text-color">{{$t('HCFD.geneal.analysis')}}</span>
+  </div>
+      <el-form>
+        <div class="radio_text text_color  liangf">
+          <div class="classfelx">
+               <el-tooltip class="item" effect="dark" content="分析类型" placement="bottom">
+                <el-radio
+                  v-model="parameterObj.nmlParam.analysis_Type"
+                  label="Steady"
+                  >{{ $t("HCFD.geneal.steady") }}</el-radio
+                >
+                  </el-tooltip>
+            </div>
+            <div class="classfelx">
+                  <el-tooltip class="item" effect="dark" content="分析类型" placement="bottom">
+                <el-radio
+                  v-model="parameterObj.nmlParam.analysis_Type"
+                  label="Unsteady"
+                  >{{ $t("HCFD.geneal.unsteady") }}</el-radio
+                >
+                    </el-tooltip>
+              </div>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.type_visiable  = false))"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.type_visiable  = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 并行类型 -->
+     <el-dialog
+      class="lg-y-z"
+      :visible.sync="dialog.parallel_visiable "
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='two-4'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+     <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="t5" fit="cover" />
+     <span class="text-color">{{$t('HCFD.geneal.parallel')}}</span>
+  </div>
+      <el-form>
+             <div class="radio_text text_color">
+                <el-radio-group
+                  v-model="parameterObj.nmlParam.parallel_Optional"
+                >
+                <div>
+                   <el-tooltip class="item" effect="dark" content="并行类型" placement="bottom">
+                  <el-radio label="Serial">
+                    {{ $t("HCFD.geneal.serial") }}</el-radio
+                  >
+                   </el-tooltip>
+                   </div>
+                      <div>
+                     <el-tooltip class="item" effect="dark" content="并行类型" placement="bottom">
+                  <el-radio label="MPI Parallel">{{
+                    $t("HCFD.geneal.mpi")
+                  }}</el-radio>
+                   </el-tooltip>
+                     </div>
+                </el-radio-group>
+                   <el-form-item :label="$t('HCFD.geneal.number')" :label-width="formLabelWidth2"    v-if="
+                    parameterObj.nmlParam.parallel_Optional == 'MPI Parallel'
+                  ">
+                    <el-input      v-model="parameterObj.nmlParam.number_of_Processors"  autocomplete="off"></el-input>
+                    </el-form-item>  
+                </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.parallel_visiable  = false))"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.parallel_visiable  = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+<!-- 控制方程 -->
+   <el-dialog
+     v-if="active=='three-0'"
+      :visible.sync="dialog.equation_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      class="dialog"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="w1" fit="cover" />
+     <span class="text-color">{{$t('HCFD.physics.gover')}}</span>
+  </div>
+      <el-form>
+         <el-radio-group
+                  v-model="parameterObj.nmlParam.eqn_type"
+                  size="mini"
+                >
+                  <el-radio label="cal_perf_compress" style="display: block; padding:15px 0;">{{
+                    $t("HCFD.physics.compress")
+                  }}</el-radio>
+                  <el-radio label="cal_perf_incompress">{{
+                    $t("HCFD.physics.incompress")
+                  }}</el-radio>
+                </el-radio-group>
+        <div class="disflex text_color" v-if="parameterObj.nmlParam.eqn_type=='cal_perf_incompress'">
+            <span class="text_color formLabelWidth8">{{ $t("HCFD.physics.artifical") }}</span>
+                  <el-input
+                        class='inpw75'
+                        size="mini"
+                        v-model="parameterObj.nmlParam.artificial_compress"
+             ></el-input>
+        </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog. equation_visiable = false"> {{ $t("HCFD.file.cancel")}}  </el-button>
+        <el-button type="primary" @click="dialog.equation_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 粘性模型 -->
+     <el-dialog
+      class="lg-y-z"
+      :visible.sync="dialog.inviscid_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='three2-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     heigth="385px"
+     :style="styX"
+    >
+       <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="w2" fit="cover" />
+     <span class="text-color">{{$t('HCFD.physics.viscous')}}</span>
+  </div>
+      <el-form>
+          <div class="selecr">
+            <el-form-item label="模型类型" :label-width="formLabelWidth5">
+      <el-select   v-model="parameterObj.nmlParam.viscous_terms" placeholder="请选择">
+    <el-option
+      v-for="item in selectlist1"
+      :key="item.value"
+      :label="item.name"
+      :value="item.value"
+      >
+    </el-option>
+  </el-select>
+ </el-form-item>
+ <div class="line">
+      <div class="linetext">属性</div>
+    </div> 
+       <div v-if="parameterObj.nmlParam.viscous_terms=='laminar'">
+        <el-form-item :label="$t('HCFD.physics.molecular')" :label-width="formLabelWidth5" >
+      <el-input      v-model="parameterObj.nmlParam.prandtlnumber_molecular" autocomplete="off"></el-input>
+      </el-form-item>  
+        </div>          
+       <div v-if="parameterObj.nmlParam.viscous_terms=='turbulent'">
+              <el-form-item label="湍流模型" :label-width="formLabelWidth5">
+      <el-select  v-model="parameterObj.nmlParam.turb_model" placeholder="请选择">
+    <el-option
+      v-for="item in selectlist2"
+      :key="item.value"
+      :label="item.name"
+      :value="item.value"
+      >
+    </el-option>
+  </el-select>
+ </el-form-item>
+      <el-form-item :label="$t('HCFD.physics.Molecular')" :label-width="formLabelWidth5" >
+      <el-input      v-model="parameterObj.nmlParam.prandtlnumber_molecular" autocomplete="off"></el-input>
+      </el-form-item>  
+           <el-form-item :label="$t('HCFD.physics.turbulents')" :label-width="formLabelWidth5" >
+      <el-input    v-model="Physics.Turbulent.TurbulentPrandtlNumber" autocomplete="off"></el-input>
+      </el-form-item>  
+      </div>
+      </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="dialog.inviscid_visiable= false"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.inviscid_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 运动网格  -->
+     <el-dialog
+      class="lg-y-z"
+      :title="$t('HCFD.physics.dynamic')"
+      :visible.sync="dialog.dynamic_visiable "
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='three2-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form>
+               <div class="radio_text text_color">
+                    <el-radio
+                      v-model="parameterObj.nmlParam.dynamic_Mesh"
+                      label="on"
+                      >on</el-radio
+                    >
+                    <el-radio
+                      v-model="parameterObj.nmlParam.dynamic_Mesh"
+                      label="off"
+                      >off</el-radio
+                    >
+                  </div>
+               
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="dialog.dynamic_visiable  = false"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.dynamic_visiable   = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!--非惯性参考系  -->
+     <el-dialog
+      class="lg-y-z"
+      :title="$t('HCFD.physics.nonitertial')"
+      :visible.sync="dialog.nonitertial_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='three1-2'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form>
+        <div class="radio_text text_color">
+            <el-radio
+                  v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                  label="on"
+                  >on</el-radio>
+                <el-radio
+                  v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                  label="off"
+                  >off</el-radio
+                >
+                </div>
+               
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="dialog.nonitertial_visiable  = false"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.nonitertial_visiable   = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 通量残差构造方法 -->
+    <el-dialog
+      class="lg-Solution"
+      :title="$t('HCFD.solution.fluxResCon')"
+      :visible.sync="dialog.fluxrc_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form   class="groupradio">
+        <el-radio-group columns='2' v-model="parameterObj.nmlParam.flux_construction">
+          <el-radio :label="'roe'">Roe</el-radio>
+          <el-radio :label="'vanleer'">vanleer</el-radio>
+          <el-radio :label="'hllc'">HLLC</el-radio>
+          <el-radio :label="'aufs'">AUFS</el-radio>
+          <el-radio :label="'central_diss'">Central_Diss</el-radio>
+          <el-radio :label="'dlfss'">LDFSS</el-radio>
+          <el-radio :label="'stvd'">STVD</el-radio>
+          <el-radio :label="'stvd_modified'">STVD_modified</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxrc_visiable = false))"
+          > {{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.fluxrc_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 通量限制 -->
+       <el-dialog
+      :title="$t('HCFD.solution.flux')"
+      :visible.sync="dialog.fluxl_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+
+    >
+      <el-form   class="groupradio">
+        <el-radio-group
+          v-model="parameterObj.nmlParam.flux_limiter"
+          size="small"
+        >
+          <el-radio :label="'none'">none</el-radio>
+          <el-radio :label="'barth'">barth</el-radio>
+          <el-radio :label="'venkat'">venkat</el-radio>
+          <el-radio :label="'minmod'">minmod</el-radio>
+          <el-radio :label="'vanleer'">vanleer</el-radio>
+          <el-radio :label="'vanalbada'">vanalbada</el-radio>
+          <el-radio :label="'smooth'">smooth</el-radio>
+          <el-radio :label="'hminmod'">hminmod</el-radio>
+          <el-radio :label="'hvanleer'">hvanleer</el-radio>
+          <el-radio :label="'hvanalbada'">hvanalbada</el-radio>
+          <el-radio :label="'hsmooth'">hsmooth</el-radio>
+          <el-radio :label="'hvenkat'">hvenkat</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxl_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}}  </el-button
+        >
+        <el-button type="primary" @click="dialog.fluxl_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+     <el-dialog
+      :title="$t('HCFD.solution.fluxJacCon')"
+      :visible.sync="dialog.fluxjc_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      v-if="active=='four-2'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+      :style="styX"
+    >
+      <el-form class="groupradio">
+        <el-radio-group
+          v-model="parameterObj.nmlParam.flux_construction_lhs"
+          size="small"
+        >
+          <el-radio :label="'roe'">Roe</el-radio><br />
+          <el-radio :label="'vanleer'">vanleer</el-radio><br />
+          <el-radio :label="'hllc'">HLLC</el-radio><br />
+          <el-radio :label="'aufs'">AUFS</el-radio><br />
+          <el-radio :label="'central-diss'">Central-Diss</el-radio><br />
+          <el-radio :label="'ldfss'">LDFSS</el-radio><br />
+          <el-radio :label="'stvd'">STVD</el-radio><br />
+          <el-radio :label="'stvd_modified'">STVD_modified</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.fluxjc_visiable = false))"
+          > {{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.fluxjc_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 无粘通量 -->
+    <el-dialog
+      :title="$t('HCFD.physics.inviscid') "
+      :visible.sync="dialog.fluxwz_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      v-if="active=='four-3'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form >
+        <!-- <li class="disflex liitem liangf">
+                  <span class="formLabelWidth8">
+                    {{ $t("HCFD.solution.muscl") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.schedule"
+                  ></el-input>
+                </li> -->
+                <li class="disflex liitem liangf">
+                  <span class="formLabelWidth8">
+                    {{ $t("HCFD.solution.firstOrderNum") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.first_order_iterations"
+                  ></el-input>
+                </li>
+         
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable(dialog.fluxwz_visiable = false)"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.fluxwz_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 时间格式 -->
+    
+    <el-dialog
+      :title="$t('HCFD.solution.timeScheme')"
+      :visible.sync="dialog.time_visiable"
+      class="lg-Solution"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+    v-if="active=='four1-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form  class="groupradio">
+        <el-radio-group v-model="parameterObj.nmlParam.time_accuracy">
+          <el-radio :label="'steady'">{{$t('HCFD.solution.steady')}}</el-radio>
+          <el-radio :label="'1storder'">{{$t('HCFD.solution.torde')}}</el-radio>
+          <el-radio :label="'2ndorder'">{{$t('HCFD.solution.ndorder')}}</el-radio>
+          <el-radio :label="'2ndorderOPT'">{{$t('HCFD.solution.ndorderOPT')}}</el-radio>
+          <el-radio :label="'3rdorder'">{{$t('HCFD.solution.rdorder')}}</el-radio>
+          <el-radio :label="'4thorderMEBDF4'">{{$t('HCFD.solution.thorderMEBDF')}}</el-radio>
+          <el-radio :label="'4thorderESDIRK4'">{{$t('HCFD.solution.thorderESDIRK')}}</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.time_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}}  </el-button
+        >
+        <el-button type="primary" @click="dialog.time_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 时间推进格式 -->
+    <el-dialog
+      :title="$t('HCFD.solution.timeAdvance')"
+      :visible.sync="dialog.timeasm_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+       v-if="active=='four1-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form class="lg-form">
+        <li class="lheig34 disflex liitem liangf" style="padding:5px 0">
+          <span class="formLabelWidth8">{{$t('HCFD.solution.stepping')}}</span>
+          <el-radio-group class="inpw35" style="display:flex" v-model="parameterObj.nmlParam.pseudo_time_stepping">
+            <el-radio :label="'on'">On</el-radio>
+            <el-radio :label="'off'">Off</el-radio>
+          </el-radio-group>
+        </li>
+        <li class="disflex liitem liangf">
+          <span  class="formLabelWidth8">{{$t('HCFD.solution.nondim')}}</span>
+          <el-input v-model="parameterObj.nmlParam.time_step_nondim"></el-input>
+        </li>
+        <li class="disflex liitem liangf">
+          <span  class="formLabelWidth8">{{$t('HCFD.solution.subiterations')}}</span>
+          <el-input v-model="parameterObj.nmlParam.subiterations"></el-input>
+        </li>
+        <li class="disflex liitem liangf">
+          <span  class="formLabelWidth8">{{$t('HCFD.solution.cfl')}}</span>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_iteration[0]"
+          ></el-input>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_iteration[1]"
+          ></el-input>
+        </li>
+        <li class="disflex liitem liangf">
+          <span  class="formLabelWidth8">{{$t('HCFD.solution.Schedulecfl')}}</span>
+          <el-input v-model="parameterObj.nmlParam.schedule_cfl[0]"></el-input>
+          <el-input v-model="parameterObj.nmlParam.schedule_cfl[1]"></el-input>
+        </li>
+        <li class="disflex liitem liangf">
+          <span class="formLabelWidth8">{{$t('HCFD.solution.cflturb')}}</span>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_cflturb[0]"
+          ></el-input>
+          <el-input
+            v-model="parameterObj.nmlParam.schedule_cflturb[1]"
+          ></el-input>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="timeasmvisiable"> {{ $t("HCFD.file.cancel")}} </el-button>
+        <el-button type="primary" @click="dialog.timeasm_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 边界条件 -->
+     <el-dialog
+      class="dialog-block"
+      :title="$t('HCFD.physics.boundary')"
+      :visible.sync="dialog.border_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='three1-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="250px"
+    :style="styX"
+    >
+      <el-form  class="groupradio">
+        <p class="text_color">边界条件</p>
+      <el-select
+                  class="inpw100 juli"
+                  size="mini"
+                  @change="boundaryChange"
+                  v-model="Physics.Boundary.bquery"
+                  placeholder="select boundary"
+                >
+                  <el-option
+                    v-for="hcfdBoundary in parameterObj.hcfdBoundarys"
+                    :key="hcfdBoundary.id"
+                    :label="hcfdBoundary.name"
+                    :value="hcfdBoundary.id"
+                  >
+                  </el-option>
+                </el-select>
+                <el-select
+                  class="inpw100 juli"
+                  size="mini"
+                  @change="conditionsChange"
+                  v-model="Physics.Boundary.cquery"
+                  placeholder="select Conditions"
+                >
+                  <el-option
+                    v-for="Condition in Physics.Boundary.Conditions"
+                    :key="Condition.conditionsCode"
+                    :label="Condition.name"
+                    :value="Condition.conditionsCode"
+                  >
+                  </el-option>
+                </el-select>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+         @click="dialog.border_visiable = false"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.border_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 参考条件 -->
+    <el-dialog
+      class="dialog-block"
+      :visible.sync="dialog.reference_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='three1-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color heightclass'
+     width="385px"
+    height="400px"
+    :style="styX"
+    >
+       <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="w5" fit="cover" />
+     <span class="text-color">{{$t('HCFD.physics.reference')}}</span>
+  </div>
+      <el-form  class="groupradio">
+         <div class="line">
+      <div class="linetext">属性</div>
+    </div> 
+       <li class="disflex liitem liangf">
+                  <span class="formLabelWidth8">{{ $t("HCFD.physics.machNum") }}</span>
+                  <el-input
+                        class="inpw50"
+                        size="mini"
+                        v-model="parameterObj.nmlParam.mach_number"
+                      ></el-input>
+                </li>
+                <li class=" liitem liangf">
+                  <span class="formLabelWidth8">{{ $t("HCFD.physics.reyNum") }}</span>
+                  <el-input
+                        class="inpw50"
+                        size="mini"
+                        v-model="parameterObj.nmlParam.reynolds_number"
+                      ></el-input>
+                </li>
+             
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.temperature") }}</span>
+        </li>
+        <li class=" liitem liangf">
+          <el-radio-group v-model="parameterObj.nmlParam.temperature_units" style=" width: 100%;">
+            <el-radio :label="'Kelvin'">{{ $t("HCFD.physics.kelvin") }}</el-radio>
+            <el-radio :label="'Rankine'">{{ $t("HCFD.physics.rankine") }}</el-radio>
+          </el-radio-group>
+          <el-input v-model="parameterObj.nmlParam.temperature"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.attack") }}</span>
+          <el-input v-model="parameterObj.nmlParam.angle_of_attack"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.yaw") }} </span>
+          <el-input v-model="parameterObj.nmlParam.angle_of_yaw"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.area") }}</span>
+          <el-input v-model="parameterObj.nmlParam.area_reference"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.yaxis") }}</span>
+          <el-input v-model="parameterObj.nmlParam.x_moment_length"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.zaxis") }}</span>
+          <el-input v-model="parameterObj.nmlParam.y_moment_length"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.momentc") }}</span>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.xcoordinate") }}</span>
+          <el-input v-model="parameterObj.nmlParam.x_moment_center"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.ycoordinate") }}</span>
+          <el-input v-model="parameterObj.nmlParam.y_moment_center"></el-input>
+        </li>
+        <li class=" liitem liangf">
+          <span class="formLabelWidth8">{{ $t("HCFD.physics.zcoordinate") }}</span>
+          <el-input v-model="parameterObj.nmlParam.z_moment_center"></el-input>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+         @click="dialog.reference_visiable = false"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.reference_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 线性方向 -->
+        <el-dialog
+      class="lg-Solution"
+      :title=" $t('HCFD.solution.linearSol')"
+      :visible.sync="dialog.xian_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four2-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form >
+       <li class="disflex  liitem liangf ">
+                  <span class="formLabelWidth8">
+                    {{ $t("HCFD.solution.meanflow") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.meanflow_sweeps"
+                  ></el-input>
+                </li>
+                <li class="disflex  liitem liangf ">
+                  <span class="formLabelWidth8">
+                    {{ $t("HCFD.solution.turbulence") }}
+                  </span>
+                  <el-input
+                    class="inpw75"
+                    size="mini"
+                    v-model="parameterObj.nmlParam.turbulence_sweeps"
+                  ></el-input>
+                </li>
+                <li class="disflex  liitem liangf ">
+                  <span class="formLabelWidth5">
+                    {{ $t("HCFD.solution.gcr") }}
+                  </span>
+                  <el-radio-group v-model="parameterObj.nmlParam.line_implicit">
+                    <el-radio label="off">Off</el-radio>
+                    <el-radio label="on">On</el-radio>
+                  </el-radio-group>
+                </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.xian_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.xian_visiable = false"
+          >{{ $t("HCFD.file.ok")}} </el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 初始化 -->
+     <el-dialog
+      class="lg-y-z"
+      :title="$t('HCFD.solution.initialization')"
+      :visible.sync="dialog.initialization_visiable "
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four2-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form>
+               <div class="radio_text text_color"  >
+             <el-radio-group v-model="initialization" size="mini">
+                <el-tooltip class="item" effect="dark" :content="$t('HCFD.solution.initialization')" placement="bottom">
+
+                  <el-radio label="freestreams">{{
+                    $t("HCFD.solution.freestreams")
+                  }}</el-radio>
+                  </el-tooltip>
+                    <el-tooltip class="item" effect="dark" :content=" $t('HCFD.solution.initialization')" placement="bottom">
+                  <el-radio label="specified">{{
+                    $t("HCFD.solution.specified")
+                  }}</el-radio>
+                   </el-tooltip>
+                </el-radio-group>
+             </div>
+               
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.initialization_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.initialization_visiable  = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 运行控制Run  Control -->
+    
+    <el-dialog
+      :title="$t('HCFD.solution.run')"
+      :visible.sync="dialog.runc_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four3-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form class="lg-form text_color">
+        <li>
+         {{ $t("HCFD.solution.iterNum")}}<el-input
+            v-model="parameterObj.nmlParam.steps"
+          ></el-input>
+        </li>
+        <li>
+          {{ $t("HCFD.solution.stopToler")}}<el-input
+            v-model="parameterObj.nmlParam.stopping_tolerance"
+          ></el-input>
+        </li>
+        <li>
+         {{ $t("HCFD.solution.writeFreq")}}<el-input
+            v-model="parameterObj.nmlParam.restart_write_freq"
+          ></el-input>
+        </li>
+        <li>
+         {{ $t("HCFD.solution.evaluate")}}<el-input
+            v-model="parameterObj.nmlParam.jacobian_eval_freq"
+          ></el-input>
+        </li>
+        <li class="lheig34" style="padding:5px 0">
+              {{ $t("HCFD.solution.Restart")}}
+          <el-radio-group class="inpw35" v-model="parameterObj.nmlParam.restart_read">
+            <el-radio label="off">Off</el-radio>
+            <el-radio label="on">On</el-radio>
+          </el-radio-group>
+        </li>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="runcvisiable()"> {{ $t("HCFD.file.cancel")}} </el-button>
+        <el-button type="primary" @click="dialog.runc_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+      <el-dialog
+      :title="$t('HCFD.solution.bounOut')"
+      :visible.sync="dialog.boundaryo_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      class="Conditions lg-out-h"
+       v-if="active=='four3-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form>
+        <li class="disflex">
+         <span class="formLabelWidth8"> {{ $t("HCFD.solution.outputfreq")}} </span>
+          <el-input
+            v-model="parameterObj.nmlParam.animation_freq"
+          class="inpw50"></el-input>
+        </li>
+        <li class="text_color">{{ $t("HCFD.solution.Variables")}}</li>
+        <el-checkbox
+          :indeterminate="Solution.boundaryout.isIndeterminate"
+          v-model="Solution.boundaryout.checkAll"
+          @change="solutionbCheckAllChange"
+          >{{ $t("HCFD.solution.all")}}</el-checkbox
+        >
+          <div  class="displanblock">
+           <el-checkbox  
+                v-model="parameterObj.nmlParam.a_u">
+               {{ $t("HCFD.solution.Xcomponent")}}</el-checkbox>
+             <el-checkbox   
+                v-model="parameterObj.nmlParam.a_v"
+              >{{ $t("HCFD.solution.Ycomponent")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_w"
+              >{{ $t("HCFD.solution.Zcomponent")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_p"
+              >{{ $t("HCFD.solution.Press")}}</el-checkbox>
+               <el-checkbox   
+                v-model="parameterObj.nmlParam.a_cp"
+              >{{ $t("HCFD.solution.presscoefficient")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_mach"
+              >{{ $t("HCFD.solution.mnumber")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.a_vort_mag"
+              >{{ $t("HCFD.solution.magnitude")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_x "
+              >{{ $t("HCFD.solution.Xvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_y"
+              >{{ $t("HCFD.solution.Yvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_vort_z "
+              >{{ $t("HCFD.solution.Zvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.a_q_criterion"
+              >{{ $t("HCFD.solution.Criterion")}}</el-checkbox>
+                </div>
+        <!-- </el-checkbox-group> -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable(dialog.boundaryo_visiable = false)"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.boundaryo_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      :title="$t('HCFD.solution.volOut')"
+      :visible.sync="dialog.volumeo_visiable"
+      class="Conditions lg-out-h"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+           v-if="active=='four3-2'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form>
+        <li class="disflex">
+            <span class="formLabelWidth8"> {{ $t("HCFD.solution.outputfreq")}}</span>
+          <el-input
+            v-model="parameterObj.nmlParam.volume_animation_freq"
+          class="inpw50"></el-input>
+        </li>
+        <li class="text_color">{{ $t("HCFD.solution.Variables")}}</li>
+        <el-checkbox
+          :indeterminate="Solution.volumout.isIndeterminate"
+          v-model="Solution.volumout.checkAll"
+          @change="solutionvCheckAllChange"
+          >{{ $t("HCFD.solution.all")}}</el-checkbox
+        >
+        <!-- <el-checkbox-group
+          v-model="Solution.volumout.checkeds"
+          @change="solutionvCheckedCitiesChange"
+        >
+          <el-checkbox
+            v-for="cell in Solution.volumout.lists"
+            :label="cell"
+            :key="cell"
+            >{{ cell }}</el-checkbox
+          >
+        </el-checkbox-group> -->
+        <div class="displanblock">
+        <el-checkbox  
+                v-model="parameterObj.nmlParam.v_u">{{ $t("HCFD.solution.Xcomponent")}}</el-checkbox>
+             <el-checkbox   
+                v-model="parameterObj.nmlParam.v_v "
+              >{{ $t("HCFD.solution.Ycomponent")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_w"
+              >{{ $t("HCFD.solution.Zcomponent")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_p "
+              >{{ $t("HCFD.solution.Press")}}</el-checkbox>
+               <el-checkbox   
+                v-model="parameterObj.nmlParam.v_cp"
+              >{{ $t("HCFD.solution.presscoefficient")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_mach"
+              >{{ $t("HCFD.solution.mnumber")}}</el-checkbox>
+               <el-checkbox  
+                v-model="parameterObj.nmlParam.v_vort_mag"
+              >{{ $t("HCFD.solution.magnitude")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_x "
+              >{{ $t("HCFD.solution.Xvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_y"
+              >{{ $t("HCFD.solution.Yvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_vort_z "
+              >{{ $t("HCFD.solution.Zvorticity")}}</el-checkbox>
+                <el-checkbox   
+                v-model="parameterObj.nmlParam.v_q_criterion"
+              >{{ $t("HCFD.solution.Criterion")}}</el-checkbox>
+               </div>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.volumeo_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}}  </el-button
+        >
+        <el-button type="primary" @click="dialog.volumeo_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+
+    <el-dialog
+      class="lg-y-z"
+      :title="$t('HCFD.solution.specialPara')"
+      :visible.sync="dialog.specialp_visiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four4-0'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.large_angle_fix">
+          <el-radio label="off">Off</el-radio>
+          <el-radio label="on">On</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button
+           type="info" 
+          @click="referencevisiable((dialog.specialp_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.specialp_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      title="Swap Y-Z Axres"
+      :visible.sync="dialog.swap_visiable"
+      class="lg-y-z"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+     v-if="active=='four4-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    :style="styX"
+    >
+      <el-form>
+        <el-radio-group v-model="parameterObj.nmlParam.swap_yz_axes">
+          <el-radio label="false">Off</el-radio>
+          <el-radio label="true">On</el-radio>
+        </el-radio-group>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.swap_visiable = false))"
+          > {{ $t("HCFD.file.cancel")}} </el-button
+        >
+        <el-button type="primary" @click="dialog.swap_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <!-- 资源选择 -->
+     <el-dialog
+      :close-on-click-modal="false"
+      @close='activecleer()'
+      :title="$t('HCFD.solution.Resource')"
+      :visible.sync="dialog.ziyuan"
+      width="45%"
+      class="dialog"
+        custom-class='dialog_color'
+    >
+      <el-form>
+        <el-table
+    
+          :data="ziyprojects"
+          border
+          :row-key="getRowKeys"
+          height="250"
+          row-class-name='table-color'
+          ref="multipleTable"
+          @selection-change="ziySelectionChange"
+          @select="ziySelectionSelect"
+            size="mini"
+          :fit="true"
+        > 
+          <el-table-column type="selection"  label="选择" :reserve-selection="true"/>
+          <el-table-column property="id" label="ID" />
+          <el-table-column property="resIp" label="资源内网IP" />
+          <el-table-column property="resShortname" label="资源简称" />
+        </el-table>
+      </el-form>
+        <div class="pagination">
+      <Pagination
+        :pagination-config="paginationConfig"
+        @putPagination="getPagination"
+      ></Pagination>
+    </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="dialog.ziyuan = false"> {{ $t("HCFD.file.cancel")}} </el-button>
+        <el-button type="primary"  @click='resourceOK()'>{{ $t("HCFD.file.ok")}} </el-button>
+      </div>
+    </el-dialog>
+    <!-- 求解表面 -->
+     <el-dialog
+      :title="$t('HCFD.results.Surfacegrid')"
+      :visible.sync="dialog.SurfaceGrid_visiable"
+      class="lg-y-z"
+      :close-on-click-modal="false"
+      :modal-append-to-body="false"
+       :append-to-body="false"
+      @close='activecleer()'
+        v-if="active=='five-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+    >
+      <el-form>
+           <el-col>
+                <div class="flexpad30">
+                  <div>
+                    <li class="disflex liitem">
+                      <span class='span100 formLabelWidth5'> {{ $t("HCFD.results.steps")}}  </span>
+                      <el-select size="mini" v-model="bStep" @change="bStepChange" placeholder="请选择">
+                        <el-option
+                          label="请选择"
+                          :value="0"
+                        >
+                        </el-option>
+                        <el-option
+                          v-for="setep in boundaryStep"
+                          :key="setep"
+                          :label="setep"
+                          :value="setep"
+                        >
+                        </el-option>
+                      </el-select>
+                    </li>
+                    <li class="disflex liitem">
+                      <span class='span100 formLabelWidth5'>{{ $t("HCFD.results.scalar")}} </span>
+                        <el-select size="mini" v-model="bScalar" placeholder="请选择">
+                          <el-option
+                            v-for="scalar in boundaryScalars"
+                            :key="scalar"
+                            :label="scalar"
+                            :value="scalar"
+                          >
+                          </el-option>
+                        </el-select>
+                      
+                    </li>
+                  </div>
+                  <div>
+                      <li class="disflex lheig34 liitem">
+                      <span class="span100 marb5 formLabelWidth5">{{ $t("HCFD.results.contour")}} </span>
+                      <el-input-number v-model="Surfacenum" @change="SurfaceChange" :min="1" :max="10" label="描述文字"></el-input-number>
+                    </li>
+                    <li class="disflex lheig34 liitem">
+                      <span class="span100 marb5 formLabelWidth5">{{ $t("HCFD.results.vector")}} </span>
+                      <el-checkbox checked>Velocity</el-checkbox>
+                    </li>
+                    <li class="disflex lheig34 liitem">
+                      <span class='span100 marb5 formLabelWidth5' >{{ $t("HCFD.results.show")}} </span>
+                      <el-checkbox-group v-model="belementCheckeds" style="display:flex">
+                        <el-checkbox label="Mesh"  @change="Contourval('Mesh')"
+                        ></el-checkbox>
+                        <el-checkbox label="Contour"    @change="Contourval('Contour')"
+                        ></el-checkbox>
+                      </el-checkbox-group>
+                    </li>
+                  </div>
+                </div>
+                      <el-button
+                        size="mini"
+                        type="primary"
+                        style="margin:30px 0 30px 40%"
+                        @click="boundaryShow()"
+
+                        > {{ $t("HCFD.results.Surface")}} </el-button>
+              </el-col>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.SurfaceGrid_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}}  </el-button
+        >
+        <el-button type="primary" @click="dialog.SurfaceGrid_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+    <el-dialog
+      :title="$t('HCFD.results.volume')"
+      :visible.sync="dialog.VolumeGrid_visiable"
+      class="lg-y-z"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+    v-if="active=='five-2'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+    >
+      <el-form>
+        <el-col  class="lg-si-right lisin">
+                <div class="flexpad30">
+                  <div>
+                    <li class="disflex liitem ">
+                      <span class='span100 formLabelWidth5'> {{ $t("HCFD.results.steps")}}  </span>
+                      <el-select size="mini" v-model="vStep"  @change="vStepChange" placeholder="请选择">
+                           <el-option
+                          label="请选择"
+                          :value="0"
+                        >
+                        </el-option>
+                        <el-option
+                          v-for="setep in volumStep"
+                          :key="setep"
+                          :label="setep"
+                          :value="setep"
+                        >
+                        </el-option>
+                      </el-select>
+                    </li>
+                    <li class="disflex liitem">
+                        <span class='span100 formLabelWidth5'> {{ $t("HCFD.results.scalar")}}  </span>
+                        <el-select size="mini" v-model="vSalar" placeholder="请选择">
+                          <el-option
+                            v-for="scalar in volumScalars"
+                            :key="scalar"
+                            :label="scalar"
+                            :value="scalar"
+                          >
+                          </el-option>
+                        </el-select>
+                     
+                    </li>
+                  </div>
+                  <div>
+                    <li class="disflex lheig34 liitem">
+                      <span class="span100 marb5 formLabelWidth5">{{ $t("HCFD.results.vector")}} </span>
+                      <el-checkbox checked>Velocity</el-checkbox>
+                    </li>
+                      <li class="disflex lheig34 liitem">
+                      <span class="span100 marb5 formLabelWidth5">{{ $t("HCFD.results.contour")}}</span>
+                      <el-input-number v-model="Volumenum" @change="VolumenumChange" :min="1" :max="10" label="描述文字"></el-input-number>
+                    </li>
+                    <li class="disflex lheig34 liitem">
+                      <span class="span100 marb5 formLabelWidth5">{{ $t("HCFD.results.show")}}</span>
+                      <el-checkbox-group v-model="velementCheckeds" style="display:flex">
+                        <el-checkbox
+                          label="Mesh"
+                          @change="ContourvalVolume('Mesh')"
+                        ></el-checkbox>
+                        <el-checkbox
+                          label="Contour"
+                          @change="ContourvalVolume('Contour')"
+                        ></el-checkbox>
+                      </el-checkbox-group>
+                    </li>
+
+                  </div>
+                </div>
+                  <el-button
+                     type="primary"
+                    size="mini"
+                   style="margin:30px 0 30px 40%"
+                    @click="showVolume()"
+                    >{{ $t("HCFD.results.ShowVolume")}}</el-button
+                  >
+              </el-col>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="info"  @click="referencevisiable((dialog.VolumeGrid_visiable = false))"
+          >{{ $t("HCFD.file.cancel")}}</el-button
+        >
+        <el-button type="primary" @click="dialog.VolumeGrid_visiable = false"
+          >{{ $t("HCFD.file.ok")}}</el-button
+        >
+      </div>
+    </el-dialog>
+     <!-- 单位计算开始 -->
+       <el-dialog  :visible.sync="visiable" 
+     v-if="active=='six-0'"
+    :modal='false'
+    :close-on-click-modal="false"
+    @close='activecleer()'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+     :style="styX"
+       >
+            <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="d1" fit="cover" />
+     <span class="text-color">单位换算</span>
+  </div>
+  <el-form :model="form1">
+    <el-form-item label="kelvin"  :label-width="formLabelWidth1">
+      <el-input v-model="form1.kelvins" type="number" autocomplete="off"></el-input>
+        
+    </el-form-item>
+     <el-form-item label="℃"  :label-width="formLabelWidth1">
+      <el-input v-model="form1.ssd" type="number" autocomplete="off"></el-input>
+        </el-form-item>
+      <div>
+          <el-button @click="dialogbtnkew" style="margin:10px 0 0 65px" size="mini">摄氏度</el-button>
+            <el-button @click="dialogbtnssd" size="mini">开尔文</el-button>
+            </div>
+  
+  </el-form>
+</el-dialog>
+    <!-- Y+ Calculator -->
+    <el-dialog
+      :visible.sync="Yvisiable"
+      :close-on-click-modal="false"
+      @close='activecleer()'
+       v-if="active=='six-1'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+       :style="styX"
+    >
+              <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="d2" fit="cover" />
+     <span class="text-color">Y+值计算</span>
+  </div>
+      <el-form :model="form" class="gongju">
+        <!-- Freestream velocity流速度U∞ -->
+        <el-form-item label="自由流速度U∞(m/s):" :label-width="formLabelWidth3">
+          <el-input v-model="form.u_freestream" autocomplete="off"></el-input>
+        </el-form-item>
+        <!--Density 自由氣流密度ρ  -->
+        <el-form-item label="自由氣流密度ρ(kg/m^3):" :label-width="formLabelWidth3">
+          <el-input v-model="form.rho" autocomplete="off"></el-input>
+        </el-form-item>
+
+        <!-- Characteristic length 特征长度L-->
+        <el-form-item label="特征长度L:(m):" :label-width="formLabelWidth3">
+          <el-input
+            v-model="form.L"
+            type="number"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+
+        <!-- Dynamic viscosity表流运动粘贴系数μ: -->
+        <el-form-item label="表流运动粘贴系数μ(Pa·s):" :label-width="formLabelWidth3"> 
+          <el-input v-model="form.mu" autocomplete="off"></el-input>
+        </el-form-item>
+        <!-- Desired Y+ value: -->
+        <el-form-item label="Y+:" :label-width="formLabelWidth3">
+          <el-input
+            v-model="form.y_plus_desired"
+            type="number"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+        <!-- Reynolds number -->
+        <h3 class="Rex">雷诺数:&nbsp;&nbsp;&nbsp;&nbsp;{{ form.Rex }}</h3>
+        <!-- Estimated wall distance: -->
+        <h3 class="Rex">估计墙距:&nbsp;&nbsp;&nbsp;&nbsp;{{ form.dtc }}</h3>
+        <el-form-item style="margin-left: 0">
+          <!-- <el-input v-model="form.lys" type="number" autocomplete="off"></el-input> -->
+          
+            <el-button type="primary" @click="dialogbtny" style="margin:0 0 0 55px">计算</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <!-- r雷诺数计算 -->
+    <el-dialog
+      :visible.sync="llsvisiable"
+      :close-on-click-modal="false"
+          v-if="active=='six-2'"
+    :modal='false'
+    custom-class='dialoglocation dialog_color'
+     width="385px"
+       :style="styX"
+    >
+           <div slot="title" class=dialog_header>
+     <el-image class="imge" :src="d3" fit="cover" />
+     <span class="text-color">雷诺数计算</span>
+  </div>
+      <el-form :model="form" class="leiluoshu">
+        <el-form-item label="流速v(m/s):"  :label-width="formLabelWidth3">
+          <el-input v-model="form.lls" autocomplete="off" ></el-input>
+        </el-form-item>
+        <el-form-item label="密度ρ(kg/m^3)"  :label-width="formLabelWidth3">
+          <el-input v-model="form.lmi" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="动力黏性系数η(Pa·s)"  :label-width="formLabelWidth3">
+          <el-input v-model="form.ldlzxxs" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="特征长度(内径)d(m):"  :label-width="formLabelWidth3">
+          <el-input v-model="form.lld" autocomplete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="">
+          <!-- <el-input v-model="form.lys" type="number" autocomplete="off"></el-input> -->
+          <h3 class="Rex">雷诺数Re:{{ form.Re }}</h3>
+          <el-button type="primary" style="margin:0 0 0 60px" @click="leinsdialogbtny">计算</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+    <!-- 组件 -->
+    <filesload
+      ref="filesload"
+      :fileurls="fileurls"
+      @fileLoadeState="fileLoadeState($event)"
+    ></filesload>
+    <loading ref="loading" :loadObjs="loadObjs"></loading>
+    <!-- <hcfd-Calculator ref="Calculator"></hcfd-Calculator> -->
+  </div>
 </template>
 <script>
+
+
+
+
+
+
 // 引入组件
 import geometry from '../geometry/index.vue'
 import meshindex from '../meshindex/index.vue'
+import t1 from '@/assets/icon/u9588.png'
+import t2 from '@/assets/icon/u9616.png'
+import t3 from '@/assets/icon/u9637.png'
+import t4 from '@/assets/icon/u212.png'
+import t5 from '@/assets/icon/u3284.png'
+import w1 from '@/assets/icon/u3250.png'
+import w2 from '@/assets/icon/u9700.png'
+import w3 from '@/assets/icon/u9872.png'
+import w4 from '@/assets/icon/u3877.png'
+import w5 from '@/assets/icon/u9823.png'
+import w6 from '@/assets/icon/u3742.png'
+import d1 from '@/assets/icon/u10148.png'
+import d2 from '@/assets/icon/u10152.png'
+import d3 from '@/assets/icon/u10156.png'
+import d4 from '@/assets/icon/u10160.png'
+
+import adilog from "@/assets/hcfd_images/adilog.png";
+import Pagination from '@/components/Pagination'
+import scaleimage from "@/assets/hcfd_images/scaleimage.png";
+import transformimage from "@/assets/hcfd_images/transformimage.png";
+import rotationimage from "@/assets/hcfd_images/rotationimage.png";
+import inviscid from "@/assets/hcfd_images/inviscid.png";
+import laminar from "@/assets/hcfd_images/laminar.png";
+import turbulent from "@/assets/hcfd_images/turbulent.png";
+import times from "@/assets/hcfd_images/times.png";
+import fluxr from "@/assets/hcfd_images/fluxr.png";
+import fluxl from "@/assets/hcfd_images/fluxl.png";
+import fluxj from "@/assets/hcfd_images/fluxj.png";
+import boundary from "@/assets/hcfd_images/boundary.png";
+import volume from "@/assets/hcfd_images/volume.png";
+import special from "@/assets/hcfd_images/special.png";
+import swap from "@/assets/hcfd_images/swap.png";
+import run from "@/assets/hcfd_images/run.png";
+import { Message, MessageBox } from "element-ui";
+import store from "@/store";
+import UgridLoad from "./loads/UgridLoad.vue";
+import VolumLoad from "./loads/VolumLoad.vue";
+import BoundaryLoad from "./loads/BoundaryLoad.vue";
+import { request, uploadFile } from "@/utils/request";
+import vueUploader from "./fileupload.vue";
+import filesload from "./filesload.vue";
+import { Caegw_ProUrl } from "@/settings"; // 引入settings.js
+import loading from "./loading.vue";
+import transformtool from "./loads/transformtool.vue";
+import echartsHFCD from "./echartsHFCD.vue";
+import TFileStream from "./TFileStream.vue";
+
 export default {
-  components:{geometry,meshindex},
+    components:{geometry,meshindex,  vueUploader,
+    filesload,
+    loading,
+    UgridLoad,
+    VolumLoad,
+    BoundaryLoad,
+    transformtool,
+    Pagination,
+    // vtkLoad,
+    echartsHFCD,
+    TFileStream,},
+    // websocket,},
   data() {
-    return { 
-        tabPosition: 'top',
-        activeName: 'one',
+    return {
+      mcnames:'apply1',
+         formLabelWidth: '60px',
+        formLabelWidth2:'73px',
+        formLabelWidth4:'37px',
+        formLabelWidth5:'100px',
+         formLabelWidth6:'120px',
+         formLabelWidth7:'170px',
+      switchvalue: '1',
+      styX:{
+        left:''
+      },
+          t1,
+        t2,
+        t3,
+        t4,
+        t5,
+        w1,
+        w2,
+        w3,
+        w4,
+        w5,
+        w6,
+         d1,
+        d2,
+        d3,
+       d4,
+      visibles:false,
+      restime:'',
+      numzhexian:'',
+      newlog:'',
+      luobj:{
+        projectName:'',
+        projectId:'',
+        projectDesc:'',
+      },
+        // current:0,
+        lsolverState:"",
+        footerShow:true,
+        bMesh:0,
+        bContour:1,
+           vMesh:0,
+        vContour:1,
+        name:"New",
+      xiugai:{},
+        Surfacenum: 3,
+        Volumenum:3,
+        clearobj:{
+         projectId:'',
+         fileType:'',
+        step:Number
+        },
+        servertype:'ugrid',
+        tstep:Number,
+        wstep:'0',
+        step:'0',
+        srsurl:'ugrid',
+        footerval:'on',
+        top:'50px',
+        formLabelWidth1:'70px',
+        formLabelWidth3:'180px',
+         visiable:false,
+        dialogFormVisible: false,
+        form1: {
+          ssd: '',
+          kelvins:'',
+          delivery: false,
+          type: [],
+          resource: '',
+          desc: ''
+        },
+        sum:"",
+        formLabelWidth: '120px',
+   adilog: adilog,
+      activeName: 'one',
+        tabPosition: 'bottom',
+        showtrue:true,
+           drawer: true,
+        direction: 'rtl',
+         twolist:[
+            { icon:t1, titlie:'缩放'},
+            {icon:t2, titlie:'平移'},  
+            {icon:t3, titlie:'旋转'}, 
+            {icon:t4, titlie:'分析类型'},  
+            {icon:t5, titlie:'并行类型'}, 
+        ],
+        physicslist:[
+            { icon:w1, titlie:'控制方程'},
+        ],
+        physicslist2:[
+            { icon:w2, titlie:'粘性模型'},
+            // {icon:"icon-d-glassware", titlie:'层流'},  
+            // {icon:"icon-xunhuanbofang", titlie:'湍流'}, 
+            {icon:w3, titlie:'运动网格'},
+        ],
+          physicslist1:[
+            { icon:w4, titlie:'边界条件'},
+            { icon:w5, titlie:'参考条件'}, 
+            { icon:w6, titlie:'非惯性参考系'} 
+        ],
+        solutionlist:[
+            { icon:"icon-chanpinleibie-02", titlie:'通量残差构造方法'},
+            { icon:"icon-xianzhixiaofeiling", titlie:'通量限制器'},
+            { icon:"icon-shengchenggouzaozhu", titlie:'通量雅可比构造方法'},
+            { icon:"icon-tijikongjian", titlie:'无粘通量方法'}
+
+        ],
+         solutionlist1:[
+            { icon:"icon-shijian4", titlie:'时间格式'},
+            { icon:"icon-a-jisuanjidiannaofenxishujuzoushiqushi", titlie:'时间推进'},
+        ],
+         solutionlist2:[
+            { icon:"icon-icon_duyoudemoshiyuleixing", titlie:'线性方程组求解参数'},
+             { icon:"icon-jiqunchushihua", titlie:'初始化'},
+        ],
+        solutionlist3:[
+            { icon:"icon-zhengzaiyunhangliebiao", titlie:'运行控制'},
+            { icon:"icon-3D", titlie:'边界输出'},
+            { icon:"icon-ziyuan1252", titlie:'体积输出'},
+        ],
+         solutionlist4:[
+            { icon:"icon-xitongcanshupeizhi", titlie:'Advanced Option_特殊的参数'},
+            { icon:"icon-icon", titlie:'Advanced Option_Swap Y-Z Axres'},
+            { icon:"icon-yunhang", titlie:'运行'},
+            { icon:"icon-quxiantu", titlie:'Monitor'},
+            { icon:"icon-tuxingtuxiangchuli", titlie:'资源选择'},
+        ],
+        resultslist:[
+           { icon:"icon-cankaowenjian", titlie:'下载求解结果'},
+            { icon:"icon-d-printer", titlie:'Surface Grid'},
+            { icon:"icon-3dtouchshangpinliebiao", titlie:'Volume Grid'},
+        ],
+        unitlist:[
+            { icon:d1, titlie:'单位换算'},
+            { icon:d2, titlie:'Y+计算器'},
+            { icon:d3, titlie:'雷诺数计算'},
+        ],
+        selectlist1:[
+             {value:'inviscid',name:'无粘'},
+            {value:'laminar',name:'层流'},
+            {value:'turbulent',name:'湍流'},
+          ],
+          selectlist2:[
+             {value:'sa',name:'SA'},
+            {value:'k-omega-sst',name:'Menter-SST'},
+            {value:'sa-des',name:'SA-DES'},
+            {value:'k-omega-des',name:'k-omega-DES'},
+            {value:'linear-k-epsilon',name:'Linear-k-epsilon'},
+            {value:'abid-k-epsilon',name:'Abid-k-epsilon'},
+            {value:'menter-sst-les',name:'Menter-SST-LES'},
+            {value:'Wilcox-les',name:'Wilcox-LES'},
+          ],
+           active:'',
+          //大对象
+          ziyprojects:[],
+      paginationConfig: {
+        hideSinglePage: false,
+        page: 1,
+        size: 15,
+        sizeList: [10, 15, 30, 50],
+        layout: 'total, sizes, prev, pager, next, jumper',
+        total: 0,
+      },
+      getRowKeys(row) {
+            return row.id;
+        },
+      selsectid:[],
+      missType:true,
+      initialization: "",
+      upVisible: false,
+      Yvisiable: false,
+      llsvisiable: false,
+      newload: true,
+      runMonitor: true,
+      contourLevel: 3,
+      exLoading:"hidden",
+
+      form: {
+        u_freestream: "",
+        rho: "",
+        L: "",
+        mu: "",
+        y_plus_desired: "",
+
+        dtc: "",
+        md: "",
+        ls: "",
+        cd: "",
+        Rex: "",
+        Re: "",
+        lys: "",
+        lmi: "",
+        ldlzxxs: "",
+        lld: "",
+        Re: "",
+        dtc: "",
+        lls: "",
+      },
+      uploadlist: [
+        {
+          name: "mapbc",
+          percentage: 0,
+        },
+        {
+          name: "ugrid",
+          percentage: 0,
+        },
+      ],
+      ContourSurface: false,
+      adilog: adilog,
+      loading: loading,
+      scaleimage: scaleimage,
+      transformimage: transformimage,
+      rotationimage: rotationimage,
+      inviscid: inviscid,
+      laminar: laminar,
+      turbulent: turbulent,
+      times: times,
+      fluxr: fluxr,
+      fluxj: fluxj,
+      fluxl: fluxl,
+      boundary: boundary,
+      volume: volume,
+      special: special,
+      run: run,
+      swap: swap,
+      headMenu_2Show: false,
+      leftMenu_2Show: false,
+      gennealShow: false,
+      physicsShow: false,
+      solutionShow: false,
+      resultShow: false,
+      Consoleshow: true,
+      openshow:false,
+      TaskGenealshow: false,
+      TaskPhysicsshow: false,
+      TaskSolutionshow: false,
+      TaskSurfaceshow: false,
+      TaskVolumeshow: false,
+      ugridUrl: "",
+      bload: null,
+      websock: null,
+      logs: "欢迎来到HCFD",
+      islogload: true, //控制log请求(ture 发起 false 不发起)
+      outline: "OutLine",
+      fileNames: [],
+
+      belementCheckeds: ["Contour"],
+      boundaryStep: [],
+      bStep: 0,
+      boundaryScalars: [],
+      bScalar: "cp",
+
+      velementCheckeds: ["Contour"],
+      vStep: 0,
+      volumStep: [],
+      volumScalars: [],
+      vSalar: "p",
+
+      isSolverEnd: false, //判断是否求解完成
+      solverState: "0", //求解状态(0-未求解 1-求解中 2-求解完成)
+
+      menuList: [
+        {
+          id: "1",
+          label: "Setup",
+          children: [
+            {
+              id: "2",
+              label: "General",
+            },
+            {
+              id: "3",
+              label: "Physics",
+            },
+            {
+              id: "4",
+              label: "Solution",
+            },
+          ],
+        },
+        {
+          id: "5",
+          label: "Results",
+          children: [
+            {
+              id: "6",
+              label: "Monitor",
+            },
+            {
+              id: "7",
+              label: "Surface Grid",
+            },
+            {
+              id: "8",
+              label: "Volume Grid",
+            },
+            {
+              id: "9",
+              label: "Ugrid",
+            },
+          ],
+        },
+      ],
+
+      dialog: {
+        //弹出框 控制
+        new_visiable: false,
+        load_visiable: false,
+        ziyuan:false,
+        upload_visiable: false,
+        scale_visiable: false,
+        translation_visiable: false,
+        rotation_visiable: false,
+        type_visiable:false, 
+         parallel_visiable:false, 
+       equation_visiable:false,
+       inviscid_visiable:false,
+        laminar_visiable: false,
+        turbulent_visiable: false,
+        dynamic_visiable:false,
+        nonitertial_visiable:false,
+        border_visiable:false,
+        reference_visiable: false,
+        fluxrc_visiable: false,
+        fluxl_visiable: false,
+        fluxjc_visiable: false,
+        fluxwz_visiable:false,
+        time_visiable: false,
+        timeasm_visiable: false,
+        xian_visiable:false,
+        initialization_visiable:false,
+        specified_visiable: false, //未完成
+        runc_visiable: false,
+        boundaryo_visiable: false,
+        volumeo_visiable: false,
+        specialp_visiable: false,
+        swap_visiable: false,
+        SurfaceGrid_visiable:false,
+        VolumeGrid_visiable:false,
+      },
+      geneal: {
+        //数据存储
+        MeshTransform: {
+          Scale: {
+            Factor: 1,
+          },
+          Translation: {
+            Distance: 0,
+            X: 1,
+            Y: 0,
+            Z: 0,
+          },
+          Rotation: {
+            Angle: 0,
+            X: 0,
+            Y: 0,
+            Z: 0,
+            X1: 1,
+            Y1: 0,
+            Z1: 0,
+          },
+        },
+      },
+      Physics: {
+        Turbulent: {
+          TurbulentPrandtlNumber: 0.9,
+        },
+        Boundary: {
+          bquery: null, //hcfdBoundary 选中数据 id
+          hcfdBoundaryquery: null, //hcfdBoundary 选中数据
+          cquery: null,
+          /* 黎曼远场边界(Farfield) 5000
+           * 自由来流边界(Freestream)5050
+           * 无粘壁面(Inviscous Wall) 3000
+           * 粘性壁面(Viscous Wall)4000
+           * X-对称平面(X-symmetry Plane)6661
+           * Y-对称平面(Y-symmetry Plane ) 6662
+           * Z-对称平面Z-symmetry Plane) 6663
+           * 周期边界(Periodic) 6100*/
+          Conditions: [
+            { conditionsCode: 5000, name: "Farfield" },
+            { conditionsCode: 5050, name: "Freestream" },
+            { conditionsCode: 3000, name: "Inviscous Wall" },
+            { conditionsCode: 4000, name: "Viscous Wall" },
+            { conditionsCode: 6661, name: "X-symmetry Plane" },
+            { conditionsCode: 6662, name: "Y-symmetry Plane" },
+            { conditionsCode: 6663, name: "Z-symmetry Plane" },
+            { conditionsCode: 6100, name: "Periodic" },
+          ],
+        },
+      },
+      Solution: {
+        boundaryout: {
+          checkAll: false,
+          checkeds: [],
+          lists: [
+            "X-component of velocity",
+            "Y-component of velocity",
+            "Z-component of velocity",
+            "Press",
+            "Press coefficient",
+            "Mach Number",
+            "Vorticity magnitude",
+            "X-component of vorticity",
+            "Y-component of vorticity",
+            "Z-component of vorticity",
+            "Q Criterion",
+          ],
+          isIndeterminate: true,
+        },
+        volumout: {
+          checkAll: false,
+          checkeds: [],
+          lists: [
+            "X-component of velocity",
+            "Y-component of velocity",
+            "Z-component of velocity",
+            "Press",
+            "Press coefficient",
+            "Mach Number",
+            "Vorticity magnitude",
+            "X-component of vorticity",
+            "Y-component of vorticity",
+            "Z-component of vorticity",
+            "Q Criterion",
+          ],
+          isIndeterminate: true,
+        },
+      },
+      //state -1,0 ,1
+      //message
+      //type 1 一般 2 下载
+      loadObjs: [],
+      loadVVisiable: false,
+      loading: false,
+      fileurls: [],
+      project: {
+        projectId: "",
+        lesseeId:'',
+        projectName: "",
+        projectType: "hcfd",
+        projectDesc: "",
+        fileType: "ascii",
+        solverfiles: [],
+        solverVolumUrls: [],
+        solverBoundaryUrls: [],
+        loadfils: [],
+        converge: "",
+        uid: "",
+      },
+      projects: [],
+      parameterObjclone: [],
+      parameterObj: {
+        hcfdBoundarys: [
+          {
+            name: "WING1",
+            id: 1,
+            conditionsCode: 3000,
+          },
+        ],
+        nmlParam: {
+          a_vort_mag: "false",
+          case_title: "case_name",
+          angle_of_yaw: 0,
+          x_moment_center: 0,
+          eqn_type: "cal_perf_incompress",
+          schedule_cfl: [200, 200],
+          swap_yz_axes: "false",
+          v_vort_mag: "false",
+          pseudo_time_stepping: "on",
+          meanflow_sweeps: 15,
+          a_p: "true",
+          a_u: true,
+          a_w: "true",
+          a_v: "true",
+          dynamic_Mesh: "off",
+          jacobian_eval_freq: 10,
+          turb_model: "sa",
+          grid_format: "aflr3",
+          turbulence_sweeps: 10,
+          mach_number: 0.5,
+          y_moment_length: 1,
+          area_reference: 1,
+          flux_limiter: "none",
+          a_cp: "true",
+          viscous_terms: "inviscid",
+          volume_animation_freq: 100,
+          steps: 1500,
+          flux_construction_lhs: "roe",
+          stopping_tolerance: 1.0e-15,
+          prandtlnumber_molecular: 0.72,
+          restart_write_freq: 250,
+          v_vort_x: "false",
+          schedule_iteration: [1, 50],
+          v_vort_y: "false",
+          v_vort_z: "false",
+          line_implicit: "off",
+          temperature_units: "Rankine",
+          number_of_Processors: 2,
+          x_moment_length: 1,
+          time_accuracy: "steady",
+          angle_of_attack: 0,
+          subiterations: 0,
+          artificial_compress: 15,
+          a_q_criterion: "false",
+          schedule_cflturb: [50, 50],
+          schedule: 1,
+          first_order_iterations: 0,
+          restart_read: "off",
+          temperature: 491.4,
+          input_version: 2.2,
+          namelist_verbosity: "off",
+          ignore_euler_number: "false",
+          data_format: "ascii",
+          v_cp: "true",
+          time_step_nondim: 0,
+          a_mach: "true",
+          large_angle_fix: "off",
+          v_p: "true",
+          animation_freq: 100,
+          v_mach: "true",
+          project_rootname: "tf",
+          v_v: "true",
+          v_q_criterion: "false",
+          v_u: "true",
+          y_moment_center: 0,
+          v_w: true,
+          z_moment_center: 0,
+          parallel_Optional: "Serial",
+          analysis_Type: "Steady",
+          noninertial_Reference_Frame: "off",
+          flux_construction: "roe",
+          a_vort_z: "false",
+          a_vort_y: "false",
+          a_vort_x: "false",
+          reynolds_number: 1000000,
+        },
+      },
+
+      renderer_hight: 500,
+      renderer_width: 500,
+      showUgridflag: false, //ugrid 是否显示过
+      showSurfaceflag: false, //surface 是否显示过
+      showVolumeflage: false, //Volume 是否显示过
+      showMonitorflage: false, //Monitor是否显示过
+    };
+},
+
+   created(){
+   },
+ mounted() {
+
+     this.init();
+  },    
+   destroyed() {
+      this.websock.close() //离开路由之后断开websocket连接
+    },
+methods:{
+    //清除相关信息
+
+    clearAll() {
+      this.showUgridflag = false; //ugrid 是否显示过
+      this.showSurfaceflag = false; //surface 是否显示过
+      this.showVolumeflage = false; //Volume 是否显示过
+      this.showMonitorflage = false;
+      this.islogload = true;
+
+      this.logs = "";
+      this.project = {
+        projectId: "",
+        projectName: "",
+        projectType: "hcfd",
+        projectDesc: "",
+        fileType: "ascii",
+        solverfiles: [],
+        solverVolumUrls: [],
+        solverBoundaryUrls: [],
+        loadfils: [],
+        converge: "",
+      };
+    },
+   
+   handleClick(tab, event) {
+    if(this.activeName=='five'){
+      let params = {
+        transCode: "A00107",
+        projectId: this.project.projectId,
+      };
+      // console.log(params);clickgeometry
+       request(params)
+        .then((res) => {
+            this.lsolverState=res.solverState;
+        } )
+          if(this.lsolverState=='2'){
+              this.resultdata();
+          }else{
+        Message({
+                    type: "warning",
+                    message: "求解未完成,请完成求解",
+                  });
+          }
+    }else{
+
     }
+   this.activecleer();
+        },
+        activecleer(){
+          this.active=11;
+        },
+ //模块选择
+  clickgeometry(e,index,key){
+var e=e||window.Event
+this.styX.left=e.clientX+'px';
+    this.active=key;
+   console.log(key);
+  switch(key){
+    case 'info1-0':
+      this.name="New"
+      this.clickNew();
+      break;
+    case 'info1-1':
+      this.loadProjects();
+      break; 
+        case 'info1-2':
+           this.name="amend"
+          this.clickNew();
+      break; 
+     case 'two-0':
+       this.dialog.scale_visiable = true;
+       break; 
+       case 'two-1':
+       this.dialog.translation_visiable= true;
+       break; 
+      case 'two-2':
+       this.dialog.rotation_visiable= true;
+        case 'two-3':
+       this.dialog.type_visiable= true;
+       break; 
+      case 'two-4':
+       this.dialog.parallel_visiable= true;
+       break; 
+       case 'three-0':
+       this.dialog.equation_visiable= true;
+       break; 
+       case 'three2-0':
+       this.dialog.inviscid_visiable= true;
+        break; 
+        case 'three2-1':
+       this.dialog.dynamic_visiable= true;
+       break;
+         case 'three1-0':
+       this.dialog.border_visiable= true;
+       break;
+         case 'three1-1':
+       this.dialog.reference_visiable = true;
+       break; 
+         case 'three1-2':
+       this.dialog.nonitertial_visiable = true;
+      break;
+      case 'four-0':
+       this.dialog.fluxrc_visiable = true;
+       break; 
+          case 'four-1':
+       this.dialog. fluxl_visiable = true;
+       break; 
+         case 'four-2':
+       this.dialog.fluxjc_visiable = true;
+       break;
+         case 'four-3':
+       this.dialog.fluxwz_visiable = true;
+       break;
+          case 'four1-0':
+       this.dialog.time_visiable = true;
+       break;
+        case 'four1-1':
+       this.dialog.timeasm_visiable = true;
+       break;
+        case 'four2-0':
+       this.dialog.xian_visiable = true;
+       break;
+         case 'four2-1':
+       this.dialog.initialization_visiable = true;
+       break;
+         case 'four3-0':
+       this.dialog.runc_visiable = true;
+       break;
+        case 'four3-1':
+       this.dialog.boundaryo_visiable = true;
+       break;
+        case 'four3-2':
+       this.dialog.volumeo_visiable = true;
+       break;
+       case 'four4-0':
+       this.dialog.specialp_visiable = true;
+       break;
+        case 'four4-1':
+       this.dialog.swap_visiable = true;
+       break;
+        case 'four4-2':
+       this.hcfdrun(true);
+       break;
+        case 'four4-3':
+        this.getbtnmonitor();
+       break;
+        case 'four4-4':
+      this.showresource();
+       break;
+      case 'five-0':
+       break;
+       case 'five-1':
+         this.dialog.SurfaceGrid_visiable = true;
+       break;
+     case 'five-2':
+         this.dialog.VolumeGrid_visiable = true;
+       break;
+        case 'six-0':
+         this.visiable=true;
+       break;
+     case 'six-1':
+         this.Yvisiable= true;
+       break;
+          case 'six-2':
+         this.llsvisiable = true;
+       break;
+  }
+
   },
-  methods:{
+    //清除相关信息
+    clearAll() {
+      this.showUgridflag = false; //ugrid 是否显示过
+      this.showSurfaceflag = false; //surface 是否显示过
+      this.showVolumeflage = false; //Volume 是否显示过
+      this.showMonitorflage = false;
+
+      this.$refs.ugridLoad.clear();
+      this.$refs.volumLoad.clear();
+      this.$refs.boundaryLoad.clear();
+
+      this.$refs.ugridLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.islogload = true;
+
+      this.logs = "";
+      this.project = {
+        projectId: "",
+        projectName: "",
+        projectType: "hcfd",
+        projectDesc: "",
+        fileType: "ascii",
+        solverfiles: [],
+        solverVolumUrls: [],
+        solverBoundaryUrls: [],
+        loadfils: [],
+        converge: "",
+      };
+    },
+    init() {
+     // this.project.projectId ='81797100f859485e8aad9492a18904a7'
+      this.project.projectId = this.$route.query.projectId; //获取url 参数
+      this.project.lesseeId = this.$store.getters.lesseeId; //获取url 参数
+    // this.project.projectId = '86d0d4a3f85c40bea218936b6bad59ca';
       
-        handleClick(tab, event) {
+      if (
+        this.project.projectId != undefined &&
+        this.project.projectId != null
+      ) {
+       // this.selectProjectOK();
+      }
+      this.missType=true
+      // this.changeRendererSize();
+    },
+    logtime(){
+      let self = this;
+      let projectId = self.project.projectId;
+        if (projectId != null && projectId != "" && self.islogload) {
+          self.islogload = false;
+          let params = {
+            transCode: "A00112",
+            projectId: projectId,
+             page: 0,
+             count: 30,
+          };
+          request(params)
+            .then((res) => {
+               console.log(res)
+              let rows = res.rows;
+              self.logs = ""; //只显示最新的数据
+              rows.forEach((row) => {
+                self.logs = row.log + "\n" + self.logs;
+                if (row.log.indexOf("Solver end") > 0) {
+                  self.isSolverEnd = true;
+                }
+              });
+              self.islogload = true;
+            })
+            .catch((err) => {
+              self.islogload = true;
+            });
+        }
+    },
+    getlogs(){
+      var self = this;
+      let logtime=setInterval(getLog, 10000);
+      function getLog() {
+        let projectId = self.project.projectId;
+        if (projectId != null && projectId != "" && self.islogload) {
+          self.islogload = false;
+          let params = {
+            transCode: "A00112",
+            projectId: projectId,
+            page: 0,
+            count: 30,
+          };
+          request(params)
+            .then((res) => {
+              let rows = res.rows;
+              console.log(rows);
+              self.logs = ""; //只显示最新的数据
+              rows.forEach((row) => {
+                self.logs = row.log + "\n" + self.logs;
+                if (row.log.indexOf("Solver end") >= 0) {
+                  // console.log(row.log)
+                  self.exLoading='hidden';
+                  clearInterval(logtime)
+                  self.isSolverEnd = true;
+                }
+              });
+              self.islogload = true;
+            })
+            .catch((err) => {
+              self.islogload = true;
+               self.exLoading='hidden';
+              clearInterval(logtime)
+            });
+        }
+      }
+      getLog();
+    },
+    // setBoundaryScalars(scalars) {
+    //   this.boundaryScalars = scalars;
+    // },
+    setVolumScalars(scalars) {
+      console.log(scalars)
+      this.volumScalars = scalars;
+    },
+    changeRendererSize() {
+      let allHight = this.$refs.all_w.offsetHeight;
+      let allwidth = this.$refs.all_w.offsetWidth;
+      this.$nextTick(() => {
+        if (!this.headMenu_2Show) {
+          this.renderer_hight = allHight - 61 - 149 - 13;
+          this.renderer_width = allwidth - 300;
+          this.$refs.transform.changeCssBig();
+        } else if (this.headMenu_2Show) {
+          this.renderer_hight = allHight - 61 - 207 - 149 - 6;
+          this.renderer_width = allwidth - 300;
+          this.$refs.transform.changeCssSmall();
+        }
+      });
+    },
+
+    // 工具栏的点击事件
+    yCalchange() {
+      this.Yvisiable = true;
+    },
+    reyCalchange() {
+      this.llsvisiable = true;
+    },
+    atmoCalchange() {},
+    // 弹框执行事件
+    // 弹框执行事件
+    referencevisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      // this.dialog.scale_visiable = false;
+    },
+  
+    timeasmvisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      this.dialog.timeasm_visiable = false;
+    },
+    runcvisiable() {
+      this.parameterObjclone = JSON.parse(sessionStorage.getItem("res"));
+      this.parameterObj.nmlParam = this.parameterObjclone.nmlParam;
+      this.dialog.runc_visiable = false;
+    },
+       //  this.$emit("visiable",this.visiable);
+       dialogbtnkew(){
+            this.form1.ssd="";
+            var kelvins=parseFloat(this.form1.kelvins) 
+           this.form1.ssd =  this.accAdd(kelvins,273.15);
+            //  this.form.ssd = Math.floor((parseInt(this.form.kelvins) * 100) / 100)-273.15
+                if( this.form1.ssd <0){
+                this.form1.ssd =0;
+            }
+     
+        },
+        accAdd(arg1,arg2){ 
+            var r1,r2,m; 
+            try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
+            try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
+            m=Math.pow(10,Math.max(r1,r2)) 
+            return (arg1*m-arg2*m)/m 
+            },
+            
+        dialogbtnssd(){
+              this.form1.kelvins="";
+              var ssd=parseFloat(this.form1.ssd) 
+              this.form1.kelvins= this.accAdd(ssd ,-273.15);
+            //this.form.kelvins = Math.floor((parseInt(this.form.ssd) * 100) / 100) +273.15
+        },
+    dialogbtny() {
+      let u_freestream = eval(this.form.u_freestream);
+      if (u_freestream <= 0.0) {
+        alert("Free stream velocity must be greater than zero");
+        return;
+      }
 
+      let rho = eval(this.form.rho);
+      if (rho <= 0.0) {
+        alert("Density must be greater than zero");
+        return;
+      }
+      let L = eval(this.form.L);
+      if (L <= 0.0) {
+        alert("Boundary layer reference length must be greater than zero");
+        return;
+      }
+      let mu = eval(this.form.mu);
+      if (mu <= 0.0) {
+        alert("Dynamic viscosity must be greater than zero");
+        return;
+      }
+      let y_plus_desired = eval(this.form.y_plus_desired);
+      if (y_plus_desired <= 0.0) {
+        alert("Desired y+ value must be greater than zero");
+        return;
+      }
+      let Re = (rho * u_freestream * L) / mu;
+      let C_f = 0.026 * Math.pow(Re, -(1.0 / 7.0));
+      C_f = 0.0576 * Math.pow(Re, -1.0 / 5.0);
+      C_f = 0.37 * Math.pow(Math.log(Re) / Math.log(10), -2.584);
+      C_f = Math.pow((2 * Math.log(Re)) / Math.log(10) - 0.65, -2.3);
+      let tau_w = C_f * 0.5 * rho * u_freestream * u_freestream;
+      let U_f = Math.sqrt(tau_w / rho);
+      let wall_distance_estimation = (y_plus_desired * mu) / (U_f * rho);
+      this.form.Rex = Re.toExponential(1);
+      this.form.dtc = wall_distance_estimation.toExponential(1);
+    },
+    leinsdialogbtny() {
+      this.form.Re =
+        (this.form.lmi * this.form.lls * this.form.lld) / this.form.ldlzxxs;
+      // console.log(this.form.Re);
+    }, 
+    unitConversion() {
+      this.$refs.Calculator.visiable = true;
+    },
+    taskchangGeneal() {
+      this.TaskGenealshow = false;
+    },
+    taskchangPhysics() {
+      this.TaskPhysicsshow = false;
+    },
+    taskchangSolution() {
+      this.TaskSolutionshow = false;
+    },
+    taskchangSurface() {
+      this.TaskSurfaceshow = false;
+    },
+    taskchangVolume() {
+      this.TaskVolumeshow = false;
+ 
+    },
+    //  Contour
+    showLeftMenu(emt) {
+      this.leftMenu_2Show = true;
+    },
+    uploadRequest1(params) {
+      let param = new FormData();
+      param.append("transCode", "A00102");
+      param.append("file", params.file);
+      param.append("projectId", this.project.projectId);
+      uploadFile(param)
+        .then((res) => {
+          // console.log(res);
+          // this.fileId = res.fileId
+          this.findParam();
+          this.getHCFDLoadFiles();
+        })
+        .catch((err) => {});
+    },
+    uploadRequest2(params) {
+      let param = new FormData();
+      param.append("transCode", "A00102");
+      param.append("file", params.file);
+      param.append("projectId", this.project.projectId);
+      uploadFile(param)
+        .then((res) => {
+          // console.log(res);
+          // this.fileId = res.fileId
+          this.findParam();
+        })
+        .catch((err) => {});
+    },
+    //获取上传文件
+    async getHCFDLoadFiles() {
+      let params = {
+        transCode: "A00110",
+        projectId: this.project.projectId,
+      };
+      await request(params)
+        .then((res) => {
+          this.project.loadfils = res.files;
+          this.fileNames = [];
+          res.files.forEach((url) => {
+            let names = url.filepath.split("/");
+            let name = names[names.length - 1];
+            this.fileNames.push(name);
+          });
+        })
+        .catch((err) => {});
+    },
+    //获取计算结果文件 并缓存
+    async gethcfdsolverfiles() {
+      let params = {
+        transCode: "A00109",
+        projectId: this.project.projectId,
+      };
+      await request(params)
+        .then((res) => {
+          this.project.solverfiles = res.files;
+        })
+        .catch((err) => {});
+      this.project.solverfiles.forEach((solverfile) => {
+        let url = solverfile.filepath;
+        if (
+          url.indexOf("volume_timestep") > 1 ||
+          url.indexOf("boundary_timestep") > 1 ||
+          url.indexOf("converge.dat") > 1
+        ) {
+          let names = url.split("/");
+          let name = names[names.length - 1];
+          let loadOj3 = {
+            type: 2,
+            filename: name,
+            percentage: 0,
+          };
+          this.loadObjs.push(loadOj3);
+          this.$refs.filesload.load(url);
+        }
+        if (url.indexOf("volume_timestep") > 1) {
+          this.project.solverVolumUrls.push(url);
         }
+        if (url.indexOf("boundary_timestep") > 1) {
+          this.project.solverBoundaryUrls.push(url);
+        }
+        if (url.indexOf("converge.dat") > 1) {
+          this.project.converge = url;
+        }
+      });
+      this.project.solverVolumUrls.forEach((url) => {
+        let step = url.split("volume_timestep")[1].split(".da")[0];
+        this.bStep=step;
+        this.volumStep.push(step);
+        let newArr = [...new Set(this.volumStep)]; //去重
+        this.volumStep = newArr;
+      });
+      this.project.solverBoundaryUrls.forEach((url) => {
+        let step = url.split("boundary_timestep")[1].split(".da")[0];
+        this.vStep=step;
+        this.boundaryStep.push(step);
+        let newArr = [...new Set(this.boundaryStep)]; //去重
+        this.boundaryStep = newArr;
+      });
+    },
+    /**
+     * 更新配置 并求解
+     */
+    //日志
+    getthislog(log){
+   this.newlog = log+"\n"+this.newlog;
+    this.logs=this.newlog;
+     if ( this.logs.indexOf("Solver end") >= 0) {
+               this.exLoading='hidden';
+                  this.isSolverEnd = true;
+      }
+    },
+    // 剩余时间
+    restimeyear(time){
+      this.restime=time;
+    },
+    //求解
+    hcfdExe() {
+      var _this = this;
+      let params = {
+        transCode: "A00105",
+        projectId: this.project.projectId,
+        lesseeId:this.$store.getters.lesseeId,
+        userName:this.$store.getters.name
+      };
+      request(params)
+        .then((res) => {
+        })
+        .catch((err) => {
+          //  console.log("hcfdExe" + err);
+          setTimeout(function () {
+            _this.$refs.loading.visiable = false;
+          }, 4000);
+
+          if (err.returnCode == "EB8100017") {
+            //资源未分配
+        
+            MessageBox.confirm("你还未分配资源?", "提示", {
+              confirmButtonText: "分配资源",
+              cancelButtonText: "取消",
+              type: "warning",
+            })
+              .then(() => {
+                // const errUril = Caegw_ProUrl +"?projectId="+_this.project.projectId;
+                let errUril =
+                  // window.location.protocol +
+                  // "//" +
+                  // window.location.host +
+                  // "/" +
+                  _this.$store.getters.proUrl +
+                  "?projectId=" +
+                  _this.project.projectId;
+                let params2 = {
+                  transCode: "A00118",
+                  lesseeId: _this.$store.getters.lesseeId
+                };
+                request(params2)
+                  .then((res) => {
+                    window.location.href =
+                      errUril + "&authCode=" + res.authCode;
+                  })
+                  .catch((err) => {});
+              })
+              .catch(() => {
+                _this.$refs.loading.visiable = false;
+                Message({
+                  type: "info",
+                  message: "已取消",
+                });
+              });
+          }
+        });
+    },
+    async reUpload() {
+      this.$refs.mapbc.uploader.upload();
+      this.$refs.ugrid.uploader.upload();
+    },
+    async ugridShow() {
+      if (
+        this.project.projectId == "" ||
+        this.project.projectId == undefined ||
+        this.project.projectId == null
+      ) {
+        Message({
+          type: "error",
+          message: "缺少文件,请检查修改",
+        });
+      } else {
+        this.dialog.new_visiable = false;
+              this.tstep=0;
+                this.clearserver();
+           this.initWebSocket();
+      }
+    },
+    async findParam() {
+      let params = {
+        transCode: "A00107",
+        projectId: this.project.projectId,
+      };
+      // console.log(params);
+      await request(params)
+        .then((res) => {
+          // console.log("findParam:" + res);
+          this.project.projectName = res.projectName;
+          this.project.uid = res.uid;
+          let cjuserid = this.$route.query.cjuserid;
+          sessionStorage.setItem('projectName',res.projectName)
+          if(res.missionType==='3'||res.missionType==='4'){
+            this.missType=false
+          }else{
+            this.missType=true
+          }
+      
+          console.log(this.parameterObj)
+          this.parameterObj = JSON.parse(res.parameterObj);
+          sessionStorage.setItem("res", res.parameterObj);
+               this.lsolverState=res.solverState;
+
+        })
+        .catch((err) => {});
+    },
+    //上传配置参数
+    async updateParam() {
+      delete this.parameterObj.nmlParam.initialization;
+      let params = {
+        transCode: "A00104",
+        parameterObj: JSON.stringify(this.parameterObj),
+        projectId: this.project.projectId,
+        lesseeId: this.$store.getters.lesseeId
+      };
+        console.log(this.parameterObj.nmlParam.a_u);
+      console.log(this.parameterObj);
+      await request(params)
+        .then((res) => {
+          this.solverState = res.solverState;
+        })
+        .catch((err) => {});
+    },
+    loadProjects() {
+      this.dialog.load_visiable=true;
+      let params = {
+        transCode: "A00101",
+        page: 1,
+        size: 1,
+        projectType: "hcfd",
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+          this.projects = res.rows;
+          this.loading = false;
+        })
+        .catch((err) => {});
+    },
+    projectsSelectionChange(val) {
+      this.clearAll();
+       if (val.length == 1) {
+
+       this.project.projectId = val[0].projectId;;
+         this.project.projectName =val[0].projectName;
+        this.project.projectDesc = val[0].projectDesc;
+      
+        this.xiugai=val[0];
+      } else if (val.length > 1) {
+          this.project.projectId = val[1].projectId;;
+         this.project.projectName =val[1].projectName;
+        this.project.projectDesc = val[1].projectDesc;
+         this.xiugai=val[1];
+      }
+    
+    },
+    projectsSelectionSelect(selection, row) {
+      if (selection.length <= 1) return;
+      this.$refs.projectsTable.clearSelection();
+      this.$refs.projectsTable.toggleRowSelection(row, true);
+
+    },
+    //load状态回调
+    fileLoadeState(files) {
+      files.forEach((file) => {
+        this.loadObjs.forEach((obj) => {
+          if (obj.type == 2) {
+            if (obj.filename === file.name) {
+              obj.percentage = file.percentage;
+            }
+          }
+          if (obj.type == 1) {
+            //  obj.message=file.message;
+          }
+        });
+      });
+    },
+   
+  // 文件渲染websoket
+    initWebSocket(){ //初始化weosocket
+    this.newlog='';
+        const wsuri = "ws://192.168.0.44:8082/websocket?vdioId="+this.project.projectId+this.servertype+this.tstep;
+        this.websock = new WebSocket(wsuri);
+        this.websock.onmessage = this.websocketonmessage;
+        this.websock.onopen = this.websocketonopen;
+        this.websock.onerror = this.websocketonerror;
+        this.websock.onclose = this.websocketclose;
+      },
+      websocketonopen(e){ //连接建立之后执行send方法发送数据
+      this.loadingopen()
+      let params = {
+        transCode: "VD0001",// 服务器渲染实例接口创建推流
+        projectId:this.project.projectId,
+        projectType: "hcfd",
+        fileType:this.servertype,
+        step:this.tstep,
+        flagDown:'1',
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+           
+        })
+        .catch((err) => {
+            console.log(err);
+               this.loadingend(this.loadingopen());
+
+        }); 
+      },
+      websocketonerror(){//连接建立失败重连
+              this.websock.close() 
+      },
+      websocketonmessage(e){ //数据接收
+        try{
+              const redata = JSON.parse(e.data); 
+                   if(typeof redata==='object'&& redata){
+            const redata = JSON.parse(e.data);              
+            if(redata.hasOwnProperty("data")){          
+            }else{
+           
+                this.newlog =this.newlog+"\n" +JSON.stringify(redata);
+                  this.logs=this.newlog;
+            }
+           if(redata.data!=undefined){
+                this.$refs.monitor.hiden();
+              this.$refs.TFileStream.imgtupian=true;
+              this.$refs.TFileStream.fetchData(redata.data);
+           }
+          var state=redata.state;
+          if(state=='success'){
+            let params = { // 服务器 boundary 渲染
+        transCode: "VD0002",
+        projectId: this.project.projectId,
+        projectType: "hcfd",
+         fileType:this.servertype,
+        step:this.tstep,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);   
+
+        })
+        .catch((err) => {});
+          }else if(state=='fail'){
+              Message({
+            type: "error",
+            message: "返回错误请重试",
+          });
+               this.loadingend(this.loadingopen());
+          }
       }
+        return true;       
+        }catch(error){
+          return false;
+        }
+       
+ 
+      },
+      websocketsend(Data){//数据发送
+        this.websock.send(Data);
+      },
+      websocketclose(e){  //关闭
+        Message({
+            type: "error",
+            message: "websock断开连接",
+          });
+       
+      this.websock.close() 
+           this.loadingend(this.loadingopen());
+      },
+      // 新建完成后的OK
+  async ugridShowOK(){
+             await this.findParam();
+     this.dialog.new_visiable = false;
+       this.servertype='ugrid'
+      this.tstep=0;
+      this.initWebSocket();
+  },
+  //调状态求解状态(0-未求解 1-求解中 2-求解完成)
+ getstatus(){
+    let params = {
+            transCode: "A00107",
+            projectId: this.project.projectId,
+          };
+        request(params)
+            .then((res) => {
+            console.log(res);
+            this.lsolverState=res.solverState;
+
+      
+            })
+            .catch((err) => {});
+      },
+      // 折线图按钮选择
+     getbtnmonitor(){
+       this.activecleer()
+       this.$refs.TFileStream.imgtupian=false;  
+       this.getstatus()
+       if(this.lsolverState=='2'){
+         this.numzhexian='1'
+       }else{
+              this.numzhexian='';
+
+       }
+        this.$refs.monitor.nhiden();
+       this.$refs.monitor.getwebsocket();
+     },
+//开起loading
+loadingopen(){
+ const loading = this.$loading({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+        return loading;
+},
+   // 关闭lodind
+loadingend(loading){
+  loading.close()
+
+},
+showboundary(){//表面加载
+
+if(this.lsolverState=='2'){
+    this.$refs.monitor.container_show=false;
+   this.clearserver();
+  this.servertype='boundary'
+   // this.project.projectId='81797100f859485e8aad9492a18904a7';
+      this.project.projectId= this.project.projectId;
+    this.tstep= this.bStep;
+    this.initWebSocket();
+   }else{
+       Message({
+            type: "warning",
+            message: "请先求解",
+          });
+   }
+
+},
+//anniu
+btnshowboundary(){
+ this.getstatus();
+ this.resultdata();
+ if(this.lsolverState=='2'){
+   this.active='five-1';
+     this.dialog.SurfaceGrid_visiable = true;
+    this.$refs.monitor.container_show=false;
+   }else{
+       Message({
+            type: "warning",
+            message: "请先求解",
+          });
+   }
+
+},
+btnVolumeshow(){
+   this.getstatus();
+    this.resultdata();
+  if(this.lsolverState=='2'){
+        this.active='five-2';
+  this.$refs.monitor.hiden();
+   this.dialog.VolumeGrid_visiable = true;
+   }else{
+       Message({
+            type: "warning",
+            message: "请先求解",
+          });
+   }
+  
+},
+//表面 色条插值
+boundaryShow(){
+  if( this.project.projectId==''){
+       Message({
+            type: "warning",
+            message: "请选择项目",
+          });
+  }
+  if(this.bStep==0){
+    Message({
+            type: "warning",
+            message: "请选择setp有效值",
+          });
+  }else{
+    this.loadingopen()
+this.boundaryval(this.bMesh,this.bContour,this.bStep,this.Surfacenum,this.bScalar,this.servertype);
+    }
+},
+ boundaryval(Mesh,Contour,Step,num,Scalar, servertype){
+ let params = { 
+        transCode: "VDT0004",
+        projectId: this.project.projectId,
+        projectType: "hcfd",
+        fileType:servertype,
+        isMesh:Mesh,
+        isContour:Contour,
+        step:Step,
+        colorSize:num ,
+        tmp:Scalar,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      console.log(params);
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+              
+        })
+        .catch((err) => {});
+},
+
+ Contourval(val) {
+if(this.belementCheckeds.length==2){
+      this.bMesh=1;
+      this.bContour=1;
+      console.log(222)
+} else if(this.belementCheckeds.length==0){
+    this.bMesh=0;
+      this.bContour=0;
+}
+else{
+    this.belementCheckeds.forEach((ele) => {
+            if ("Mesh" == ele) {
+         this.bMesh=1;
+      this.bContour=0;
+            }
+            if ("Contour" == ele) {
+             this.bMesh=0;
+      this.bContour=1;
+            }
+          });
 }
+  
+    },
+    ContourvalVolume(val) {
+      if(this.velementCheckeds.length==2){
+      this.vMesh=1;
+      this.vContour=1;
+      console.log(222)
+} else if(this.velementCheckeds.length==0){
+    this.vMesh=0;
+      this.vContour=0;
+}
+else{
+    this.velementCheckeds.forEach((ele) => {
+            if ("Mesh" == ele) {
+         this.vMesh=1;
+      this.vContour=0;
+            }
+            if ("Contour" == ele) {
+             this.vMesh=0;
+      this.vContour=1;
+            }
+          });
+}
+    },
+    // 体积加载
+Volumeshow(){
+
+if(this.lsolverState=='2'){
+
+  this.$refs.monitor.hiden();
+ this.clearserver();
+  this.servertype='volume'
+     this.project.projectId= this.project.projectId;
+    this.tstep= this.vStep;
+   this.initWebSocket();
+   }else{
+       Message({
+            type: "warning",
+            message: "请先求解",
+          });
+   }
+ },   
+showVolume(){//体积加载
 
-      </script>
+if(this.vStep==0){
+    Message({
+            type: "warning",
+            message: "setp为零没有,请选择有效值",
+          });
+  }else{
+    this.loadingopen()
+   this.boundaryval(this.vMesh,this.vContour,this.vStep,this.Volumenum,this.vSalar,this.servertype);
+}
+},
+//选择step
+bStepChange(val){
+  this.bStep=val;
+   if(this.bStep==0){
+    Message({
+            type: "warning",
+            message: "请选择setp有效值",
+          });
+  }else{
+      this.showboundary();
+  }
+
+},
+//选择step
+vStepChange(val){
+  this.vStep=val;
+    if(val==0){
+    Message({
+            type: "warning",
+            message: "请选择setp有效值",
+          });
+  }else{
+this.Volumeshow();
+}
+},
+// 表面加载
+SurfaceChange(value){// 选择色条个数
+  this.Surfacenum=value;
+
+},
+// 体积
+VolumenumChange(value){// 选择色条个数
+  this.Volumenum=value;
+
+},
+
+// 获取求解结果下拉数据
+resultdata(){
+   let params = { 
+        transCode: "VDT0005",
+        projectId: this.project.projectId,
+        //projectId: '81797100f859485e8aad9492a18904a7',
+        projectType: "hcfd",
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+             this.boundaryStep=(res.steps.split(" ")).map(Number);
+            let boundaryVars=res.boundaryVars.split(" ");
+             this.boundaryScalars=boundaryVars;
+             this.volumStep=(res.steps.split(" ")).map(Number);
+             this.volumScalars=res.volumeVars.split(" ");
+            console.log(   this.boundaryStep);
+        })
+        .catch((err) => {});
+},
+// 清除接口
+clearserver(){
+  if(this.servertype=='boundary'){
+        this.tstep=this.bStep;
+      }else if(this.servertype=='volume'){
+            this.tstep=this.vStep;
+      }
+      else{
+        this.tstep=0;
+      }
+        console.log( this.project.projectId);
+ let params = {
+        transCode: "VD0003",
+        projectId: this.project.projectId,
+        projectType: "hcfd",
+        fileType:this.servertype,
+        step:this.tstep,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+        })
+        .catch((err) => {});
+},
+    boundaryChange(boundaryid) {
+      this.parameterObj.hcfdBoundarys.forEach((hcfdBoundary) => {
+        if (hcfdBoundary.id === boundaryid) {
+          this.Physics.hcfdBoundaryquery = hcfdBoundary;
+          this.Physics.Boundary.cquery = hcfdBoundary.conditionsCode;
+          return;
+        }
+      });
+    },
+    conditionsChange(conditionsCode) {
+      this.Physics.hcfdBoundaryquery.conditionsCode = conditionsCode;
+    },
+ 
+     solutionbCheckAllChange(val) {
+if(val==true){
+   this.parameterObj.nmlParam.a_u = true;
+      this.parameterObj.nmlParam.a_v = true;
+       this.parameterObj.nmlParam.a_w = true;
+      this.parameterObj.nmlParam.a_p = true;
+      this.parameterObj.nmlParam.a_cp = true;
+      this.parameterObj.nmlParam.a_mach = true;
+      this.parameterObj.nmlParam.a_vort_mag = true;
+      this.parameterObj.nmlParam.a_vort_x = true;
+      this.parameterObj.nmlParam.a_vort_y = true;
+      this.parameterObj.nmlParam.a_vort_z = true;
+      this.parameterObj.nmlParam.a_q_criterion = true;
+      this.Solution.boundaryout.isIndeterminate = false;
+      //this.solutionbSetParam();
+}else {
+   
+     this.parameterObj.nmlParam.a_u = false;
+      this.parameterObj.nmlParam.a_v = false;
+       this.parameterObj.nmlParam.a_w = false;
+      this.parameterObj.nmlParam.a_p = false;
+      this.parameterObj.nmlParam.a_cp = false;
+      this.parameterObj.nmlParam.a_mach = false;
+      this.parameterObj.nmlParam.a_vort_mag = false;
+      this.parameterObj.nmlParam.a_vort_x = false;
+      this.parameterObj.nmlParam.a_vort_y = false;
+      this.parameterObj.nmlParam.a_vort_z = false;
+      this.parameterObj.nmlParam.a_q_criterion = false;
+       this.Solution.boundaryout.isIndeterminate = false;
+} 
+        
+  
+    },
+    solutionbCheckedCitiesChange(value) {
+      let checkedCount = value.length;
+      this.Solution.boundaryout.checkAll =
+        checkedCount === this.Solution.boundaryout.lists.length;
+      this.Solution.boundaryout.isIndeterminate =
+        checkedCount > 0 &&
+        checkedCount < this.Solution.boundaryout.lists.length;
+      this.solutionbSetParam();
+    },
+    solutionbSetParam() {
+      this.Solution.boundaryout.checkeds.forEach((cell) => {
+        switch (cell) {
+          case "X-component of velocity":
+            console.log( this.parameterObj.nmlParam.a_u);
+            this.parameterObj.nmlParam.a_u = true;
+            break;
+          case "Y-component of velocity":
+            this.parameterObj.nmlParam.a_v = true;
+            break;
+          case "Z-component of velocity":
+            this.parameterObj.nmlParam.a_w = true;
+            break;
+          case "Press":
+            this.parameterObj.nmlParam.a_p = true;
+            break;
+          case "Press coefficient":
+            this.parameterObj.nmlParam.a_cp = true;
+            break;
+          case "Mach Number":
+            this.parameterObj.nmlParam.a_mach = true;
+            break;
+          case "Vorticity magnitude":
+            this.parameterObj.nmlParam.a_vort_mag = true;
+            break;
+          case "X-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_x = true;
+            break;
+          case "Y-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_y = true;
+            break;
+          case "Z-component of vorticity":
+            this.parameterObj.nmlParam.a_vort_z = true;
+            break;
+          case "Q Criterion":
+            this.parameterObj.nmlParam.a_q_criterion = true;
+            break;
+          default:   
+            break;
+        }
+               
+      });
+     
+    },
+    clickNew(){
+      if(this.name=='amend'){
+                 let rse=this.xiugai;
+                 console.log(rse.projectId);
+        if( rse.projectId ==""|| rse.projectId ==undefined){
+            Message({
+          type: "info",
+          message: "请选择你要修改的项目",
+        });
+        }else{
+             this.project.projectId = rse.projectId;
+            this.project.projectName = rse.projectName;
+            this.project.projectDesc = rse.projectDesc;
+             this.dialog.new_visiable = true;
+}     
+         
+      }else{
+            this.project.projectId = '';
+         this.project.projectName ='';
+        this.project.projectDesc = '';
+      this.dialog.new_visiable = true;
+      }
+     
+    },
+    solutionvCheckAllChange(val) {
+      // this.Solution.volumout.checkeds = val ? this.Solution.volumout.lists : [];
+      // this.Solution.volumout.isIndeterminate = false;
+      // this.solutionbSetParam();
+      if(val==true){
+     this.parameterObj.nmlParam.v_u = true;
+      this.parameterObj.nmlParam.v_v = true;
+       this.parameterObj.nmlParam.v_w = true;
+      this.parameterObj.nmlParam.v_p = true;
+      this.parameterObj.nmlParam.v_cp = true;
+      this.parameterObj.nmlParam.v_mach = true;
+      this.parameterObj.nmlParam.v_vort_mag = true;
+      this.parameterObj.nmlParam.v_vort_x = true;
+      this.parameterObj.nmlParam.v_vort_y = true;
+      this.parameterObj.nmlParam.v_vort_z = true;
+      this.parameterObj.nmlParam.v_q_criterion = true;
+}else{
+     this.parameterObj.nmlParam.v_u = false;
+      this.parameterObj.nmlParam.v_v = false;
+       this.parameterObj.nmlParam.v_w = false;
+      this.parameterObj.nmlParam.v_p = false;
+      this.parameterObj.nmlParam.v_cp = false;
+      this.parameterObj.nmlParam.v_mach = false;
+      this.parameterObj.nmlParam.v_vort_mag = false;
+      this.parameterObj.nmlParam.v_vort_x = false;
+      this.parameterObj.nmlParam.v_vort_y = false;
+      this.parameterObj.nmlParam.v_vort_z = false;
+      this.parameterObj.nmlParam.v_q_criterion = false;
+   this.Solution.volumout.isIndeterminate = false;
+} 
+    },
+    solutionvCheckedCitiesChange(value) {
+      let checkedCount = value.length;
+      console.log(value);
+      this.Solution.volumout.checkAll =
+        checkedCount === this.Solution.volumout.lists.length;
+      this.Solution.volumout.isIndeterminate =
+        checkedCount > 0 && checkedCount < this.Solution.volumout.lists.length;
+      this.solutionvSetParam();
+    },
+    solutionvSetParam() {
+      this.Solution.volumout.checkeds.forEach((cell) => {
+        switch (cell) {
+          case "X-component of velocity":
+            this.parameterObj.nmlParam.v_u = true;
+            break;
+          case "Y-component of velocity":
+            this.parameterObj.nmlParam.v_v = true;
+            break;
+          case "Z-component of velocity":
+            this.parameterObj.nmlParam.v_w = true;
+            break;
+          case "Press":
+            this.parameterObj.nmlParam.v_p = true;
+            break;
+          case "Press coefficient":
+            this.parameterObj.nmlParam.v_cp = true;
+            break;
+          case "Mach Number":
+            this.parameterObj.nmlParam.v_mach = true;
+            break;
+          case "Vorticity magnitude":
+            this.parameterObj.nmlParam.v_vort_mag = true;
+            break;
+          case "X-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_x = true;
+            break;
+          case "Y-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_y = true;
+            break;
+          case "Z-component of vorticity":
+            this.parameterObj.nmlParam.v_vort_z = true;
+            break;
+          case "Q Criterion":
+            this.parameterObj.nmlParam.v_q_criterion = true;
+            break;
+          default:
+            break;
+        }
+      });
+    },
+    //显示 UgridLoad
+    async showUgrid() {
+      console.log(this.showUgridflag);
+      this.$refs.volumLoad.hiden();
+      this.$refs.boundaryLoad.hiden();
+      this.$refs.monitor.hiden();
+      if (!this.showUgridflag) {
+        //是否显示过
+        this.$refs.ugridLoad.clear();
+        if (this.project.loadfils.length == 0) {
+          await this.getHCFDLoadFiles();
+        }
+        this.project.loadfils.forEach((url) => {
+          if (url.filepath.indexOf(".ugrid") > 0) {
+            this.ugridUrl = url.filepath;
+          }
+        });
+
+        this.$refs.ugridLoad.loadUgrid(this.ugridUrl, 1);
+        this.showUgridflag = true;
+      } else {
+        this.$refs.ugridLoad.nhiden();
+      }
+    },
+    //显示 Surface
+    async showSurface() {
+      let mesh = false;
+      let contour = false;
+      this.belementCheckeds.forEach((ele) => {
+        if ("Mesh" == ele) {
+          mesh = true;
+        } else if ("Contour" == ele) {
+          contour = true;
+        }
+      });
+      this.$refs.ugridLoad.hiden();
+      this.$refs.volumLoad.hiden();
+      this.$refs.monitor.hiden();
+      if (!this.showSurfaceflag) {
+        this.$refs.boundaryLoad.clear();
+        if (this.project.solverfiles.length == 0) {
+          await this.gethcfdsolverfiles();
+        }
+        let burl;
+       
+        this.project.solverBoundaryUrls.forEach((url) => {
+          if (url.indexOf(this.bStep + ".dat") > 0) {
+            burl = url;
+          }
+        });
+        if (mesh) {
+          this.$refs.boundaryLoad.loadBoundary(burl, 1, this.bScalar);
+        }
+        if (contour) {
+          this.$refs.boundaryLoad.loadBoundary(burl, 2, this.bScalar);
+        }
+        this.showSurfaceflag = true;
+      } else {
+        this.$refs.boundaryLoad.clear();
+        this.$refs.boundaryLoad.nhiden();
+        if (mesh) {
+          this.$refs.boundaryLoad.mesh(this.bScalar);
+        }
+        if (contour) {
+          //  console.log(222);
+          this.$refs.volumLoad.vdivb = false;
+          this.$refs.boundaryLoad.divb = true;
+          this.$refs.boundaryLoad.contour(this.bScalar);
+        }
+      }
+    },
+
+    //通过 volume 解析文件,不显示图像
+    async showVolumers() {
+      let mesh = false;
+      let contour = false;
+      this.velementCheckeds.forEach((ele) => {
+        if ("Mesh" == ele) {
+          mesh = true;
+        } else if ("Contour" == ele) {
+          contour = true;
+        }
+      });
+      if (!this.showVolumeflage) {
+        this.$refs.volumLoad.clear();
+        if (this.project.solverfiles.length == 0) {
+          await this.gethcfdsolverfiles();
+        }
+        let urls = [];
+        this.project.solverVolumUrls.forEach((url) => {
+          if (url.indexOf(this.bStep + ".dat") > 0) {
+            urls.push(url);
+          }
+        });
+        if (mesh) {
+          this.$refs.volumLoad.loadVolumHiden(urls, 1, this.vSalar);
+        }
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.loadVolumHiden(urls, 2, this.vSalar);
+        }
+      } else {
+        this.$refs.volumLoad.clear();
+        this.$refs.volumLoad.nhiden();
+        if (mesh) {
+          this.$refs.volumLoad.mesh(this.vSalar);
+        }
+
+        if (contour) {
+          this.$refs.boundaryLoad.divb = false;
+          this.$refs.volumLoad.vdivb = true;
+          this.$refs.volumLoad.contour(this.vSalar);
+        }
+      }
+    },
+  
+    async showMonitor() {
+      if (!this.showMonitorflage) {
+        let convergeUrl = this.project.converge;
+        this.$refs.monitor.loadConverge("http://192.168.0.43:6868/8525e93c277749e7a54dde92fc31405d/tf/test/data_out/converge.dat");
+      } else {
+        this.$refs.monitor.nhiden();
+      }
+      this.showMonitorflage = true;
+    },
+    large() {
+      this.$refs.ugridLoad.large();
+      this.$refs.boundaryLoad.large();
+      this.$refs.volumLoad.large();
+    },
+    small() {
+      this.$refs.ugridLoad.small();
+      this.$refs.boundaryLoad.small();
+      this.$refs.volumLoad.small();
+    },
+    positive(axis) {
+      this.$refs.ugridLoad.positive(axis);
+      this.$refs.boundaryLoad.positive(axis);
+      this.$refs.volumLoad.positive(axis);
+    },
+    negative(axis) {
+      this.$refs.ugridLoad.negative(axis);
+      this.$refs.boundaryLoad.negative(axis);
+      this.$refs.volumLoad.negative(axis);
+    },
+    // 资源选择代码
+    showresource(){
+      this.dialog.ziyuan=true;
+       this.getresource();
+    },
+    //获取资源代码
+    getresource(){
+    const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)',
+      })
+      setTimeout(() => {
+        const params = {
+          transCode: 'HG00000',
+        page: this.paginationConfig.page,
+        count: this.paginationConfig.size,
+          lesseeId:this.$store.getters.lesseeId,
+  
+        }
+        request(params)
+          .then((res) => { 
+    
+         loading.close()
+            this.ziyprojects = res.rows;
+           this.paginationConfig.total = res.total
+           this.resourcelook();
+          })
+          .catch((err) => {
+           loading.close()
+          })
+      }, 500)
+    },
+     getPagination(data) {
+      this.paginationConfig = data
+      this.getresource()
+    },
+    //选中
+    ziySelectionChange (val) {
+   
+    let id= []
+     val.map((item)=> {
+    id.push(item.id)
+      })
+  this.selsectid= id.join(',')    
+    },
+     ziySelectionSelect(selection, row) {
+    },
+    // 日志的文本框
+       footerShows(evt) {
+         if(evt=='claer'){
+          this.logs='';
+
+         }else{
+        this.footerShow=!this.footerShow
+         }
+           
+    },
+    //保存
+    resourceOK(){
+     
+       const params = {
+          transCode: 'HG00002',
+          otherId:this.project.projectId,
+          type:'1',
+           resourceIds:this.selsectid,
+          lesseeId:this.$store.getters.lesseeId,
+        }
+        request(params)
+          .then((res) => { 
+              Message({
+          type: "success",
+          message: "保存成功",
+        });
+       this.dialog.ziyuan=false;
+          })
+          .catch((err) => {
+         
+          })
+    },
+    // 查看已经中的
+        resourcelook(){
+           const loading = this.$loading({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)',
+      })
+           const params = {
+          transCode: 'HG00001',
+          otherId:  this.project.projectId,
+          type:'1',
+          lesseeId:this.$store.getters.lesseeId,
+        }
+        request(params)
+          .then((res) => { 
+                  loading.close()
+          let rst=res.rows;
+           console.log(res)
+            this.$refs.multipleTable.clearSelection();
+          if (rst.length > 0) {
+                
+            for (var i = 0; i < rst.length; i++) { 
+              for ( let j = 0 ; j < this.ziyprojects.length; j++ ){
+                  if (this.ziyprojects[j].id === rst[i].resourceId) {
+                    this.$refs.multipleTable.toggleRowSelection(this.ziyprojects[j],true);
+                  } 
+              }
+            }
+          }else{
+            consolog.log(2222)
+          }
+          })
+          .catch((err) => {
+                  loading.close()
+          })
+        },
+        closeOff(val){
+          if(val=='on'){
+          this.Consoleshow=true;
+          this.openshow=false;
+
+        }else{
+        console.log(val);
+          this.Consoleshow=false;
+          this.openshow=true;
+        }
+        }
+        
+ 
+
+      }
+}
+</script>
+<style lang="scss" >
+@import '@/styles/variables.scss';
+@import '@/styles/mixin.scss';
+.hcfdlab{
+.el-input__inner{
+  line-height: 30px;
+  height: 30px;
+}
+}
+html,body{
+    width: 100%;
+    height: 100%;
+}
+.el-tabs__content{
+  padding: 0 5px;
+}
+.content{
+    display: flex;
+    height: 100%;
+    position: relative;
+    .left{
+    width: 200px;
+    height: 100%;
+    flex-direction: column;
+    padding: 15px;
+    position: relative;
+    height: 88vh;
+  //  box-shadow:   2px 0 15px 0 rgb(232, 232, 232);
+  //   -webkit-box-shadow:   2px 0 15px 0 rgb(232, 232, 232);
+  //   -moz-box-shadow:  2px 0 15px 0 rgb(232, 232, 232);
+             
+    }
+     .part-panel-collapse-handle {
+    position: absolute;
+    // right: -56px;
+    left: -38px;
+    top: 44%;
+    width: 94px;
+    height: 0;
+    cursor: pointer;
+    text-align: center;
+    border-width: 0 20px 18px;
+    line-height: 18px;
+    border-style: none solid solid;
+    transform: rotateZ(
+90deg);
+    font-size: 19px;
+}
+.lbg_color3 i:before{
+  transform: rotateZ(
+0);
+}
+    .right{
+        flex: 1;
+         height: 100%;
+          height: 88vh;
+          position: relative;
+        
+    }
+.imgcontent img{
+    font-size: 16px;
+}
+    .slide-fade-enter-active {
+  transition: all .3s ease;
+}
+}
+.tablist{
+      border-bottom:1px solid #999;
+      padding: 3px 0;
+}
+.tablist .tabitem{
+    color: #b6b6b6;
+    font-size: 16px;
+    padding-right: 5px;
+    cursor: pointer;
+   &.current{
+       color: #Fff ;
+   }
+}
+
+.imgzong{
+    display: flex;
+    padding-top: 4px;
+      flex-wrap:wrap;
+  .el-image{
+      width: 24px;
+
+  }  
+}
+
+.imgzong .item1{
+    padding-right: 4px;
+    padding: 4px 4px ;
+ 
+}
+.shu{
+    padding: 4px 10px;
+    color: #666;
+
+}
+.el-tabs__item{
+    color:#b6b6b6;
+    font-size: 16px;
+}
+.textlab{
+    display: inline-block;
+    vertical-align: middle;
+    margin-top: -28px;
+}
+</style>
+<style>
+.el-input-number__decrease, .el-input-number__increase{
+  position: absolute;
+    z-index: 1;
+    top: 4px;
+    width: 31px;
+    height: 30px;
+    text-align: center;
+    background: #F5F7FA;
+    color: #606266;
+    cursor: pointer;
+    font-size: 13px;
+}
+.el-tabs--bottom .el-tabs__header.is-bottom{
+  margin: 0;
+}
+.el-tabs__header{
+  margin: 0;
+}
+.imgcontent{
+      padding: 0 15px;
+    }
+    .el-tabs__item{
+      height: 30px;
+      line-height: 30px;
+      padding: 0 8px;
+      font-size: 12px;
+    }
+  .item1 .el-image{
+    width: 24px;
+    cursor: pointer;
+  }
+.el-tabs--border-card{
+    background-color: none;
+}
+.baoshi{
+    margin-top: 4px;
+    color: #b6b6b6;
+}
+
+.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{
+  background-color: #757070;
+
+}
+
+.el-dialog__header{
+      padding: 15px 20px 10px;
+}
+
+.textselsect{
+      position: absolute;
+    z-index: 9;
+    bottom: 1px;
+    right: 7px;
+    z-index: 9;
+}
+ .dialoglocation{
+    position: absolute;
+    top: -15vh;
+    left: 10px;
+  }
+  .el-dialog__wrapper{
+          top: 15vh;
+  }
+</style>
+// 样式大全
+<style lang="scss" scoped>
+.diyi i{
+  font-size: 14px;
+  color: #C0C4CC;
+}
+ 
+.tupian{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+ .red{
+  color: red;
+ }
+ .dialog_header{
+   align-items: center;
+    display: flex;
+}
+.juli{
+  margin-top: 15px;
+  width: 100%
+}
+
+</style>
+<style lang="scss">
+@import '@/styles/variables.scss';
+@import '@/styles/mixin.scss';
+.heigeinput 
+{
+ .el-form-item{
+  margin-bottom: 5px;
+}
+}
+.el-dialog__body{
+  padding: 10px 20px 10px 20px;
+} 
+.line{
+  width: 100%;
+  height: 1px;
+  background-color: #999;
+  position: relative;
+  margin: 30px 0;
+  .linetext{
+    position: absolute;
+    left: 50%;
+    transform: translateX(-50%);
+    background-color: #ffff;
+    padding: 5px;
+    font-size: 12px;
+    top: -10px;
+    font-weight: 700;
+    
+  }
+ 
+}
+.ulist ul{
+  display: flex;
+  margin: 0;
+  padding: 0;
+  li{
+    flex: 1;
+    border: 1px solid #666;
+  }
+  
+}
+
+.liitem{
+  margin-bottom: 5px;
+}
+.inputwithd  .el-input__inner{
+  width: 74px;
+}
+.inputtext .el-input{
+  margin-top: 5px;
+}
+.dancentent{
+  display: flex;
+  justify-content:center;
+  align-items: center;
+}
+ .titleinput .el-input{
+    width: 100px;
+  }
+  
+  .itemlist{
+    display: flex;
+  
+  }
+  .listbtn{
+  display: flex;
+  margin-bottom: 5px;
+  .anniu{
+    flex: 1;
+  }
+  .el-checkbox{
+      flex: 1;
+  }
+  }
+  .anniu{
+    padding: 5px 28px;
+    font-size: 12px;
+      margin: 0;
+    
+  }
+ .titleinput{
+  .el-row{
+      padding-left: 10px;
+   }
+     .el-button{
+    padding: 5px 28px;
+    font-size: 12px;
+    }
+    .el-button+.el-button{
+      margin: 0;
+    }
+    }
+ .el-dialog__wrapper{
+  z-index: 2300;
+ }
+    .tiele{
+      width: 324px;
+      background-color: #fff;
+      position: fixed;
+      top: 50%;
+       left: 50%;
+      z-index: 2049;
+      padding: 20px;
+      .heder{
+        width: 100%;
+        height: 40px;
+        line-height: 40px;
+        font-size: 14px;
+        padding: 0 20px;
+        border-bottom: 1px solid #eee;
+      }
+      .tiele_content{
+        padding: 20px 20px;
+        .el-checkbox{
+          display: block;
+        }
+      }
+      p{
+        text-align: center;
+      }
+      
+      
+    }
+    .el-form-item{
+      margin: 0;
+    }
+  .btntext{
+    text-align: center;
+    background-color: #757070;
+    color:#d5d5d5 ;
+    font-size: 12px;
+    padding: 4px 0;
+    margin: 5px 0;
+    border-radius: 5px;
+  }
+  .btnyiban{
+    width: 50%;
+    background-color: #757070;
+    color:#d5d5d5 ;
+  }
+  .fangxiang .el-row{
+    display: flex;
+    padding-bottom: 10px;
+  }
+
+  .input3{
+    display: flex;
+     flex-wrap:nowrap;
+     justify-content: space-around;
+     padding-bottom: 5px;
+
+    .el-input{
+    width: 30%;
+    }
+  }
+.yiinpu .el-form-item__content{
+display:flex;
+.el-input{
+  margin-right: 5px;
+}
+}
+
+  .saninput{
+   display: flex;
+     flex-wrap:nowrap;
+     justify-content: space-around;
+    .el-input{
+   margin-right: 5px;
+    }
+    .el-form-item__label{
+        text-align: left;
+    }  
+  }
+  // select样式
+  .selecr{
+    font-size: 12px;
+    .el-select{
+      width: 100%;
+    }
+    
+  }
+  .btnringth{
+    text-align: right;
+  }
+  .juli .el-input__inner{
+    margin-bottom: 5px;
+    width:100%;
+  }
+</style>
+<style lang="scss" scoped>
+ /deep/.toolbar-part-detail{
+  position: relative;
+}
+/deep/ .el-form-item__label{
+  font-size: 12px;
+   line-height: 30px;
+}
+/deep/.el-form-item__content{
+      line-height: 30px;
+        font-size: 12px;
+}
+.el-form-item{
+      margin-bottom: 5px;
+}
+</style>
+<style lang="scss" scoped>
+.femFooter {
+  height: 135px !important;
+  padding: 0;
+  position: relative;
+}
+.footerTitle {
+  display: flex;
+  justify-content: space-between;
+  padding: 5px 20px;
+  font-size: 20px;
+  height: 30px !important;
+  background-color: #bbb;
+}
+.footerTitle div {
+
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.footerTitle p {
+  margin: 0;
+}
+.footerTitle span {
+  padding: 5px 10px;
+  cursor: default;
+}
+
+ /deep/.footerText .el-textarea__inner{
+  width: 100%;
+  height: 135px !important;
+  border: 0;
+  font-size: 12px;
+  color: #333;
+  padding: 2px;
+}
+
+ .radio_text{
+  line-height: 28px;
+   .el-radio__label{
+    color: #d5d5d5;
+  }
+  .disacent{
+    padding: 6px 0 6px 3.125vw;
+     font-size:12px;
+  }
+}
+.el-table th, .el-table tr{
+   background-color: #535353;
+}
+.beij-container {
+  width: 100%;
+  height: 100%;
+  background: linear-gradient(180deg, #ccd3e2 0%, rgba(255, 255, 255, 0) 100%);
+}
+.el-footer {
+  padding: 0;
+  height: 149px;
+  overflow-y: auto;
+}
+
+.logs_title {
+    background: #bfc5cb;
+    padding: 10px;
+    font-size: 16px;
+}
+.x {
+    cursor: default;
+    float: right;
+}
+.exloadbox {
+    float: right;
+    margin-right: 100px;
+    display: flex;
+}
+.maxh221{
+  max-height: calc(100vh - 10px);
+}
+.maxh400{
+  max-height: calc(100vh - 410px);
+}
+body {
+  position: relative;
+  background-color: #eceef0;
+ 
+}
+.el-loading-mask {
+  background: none;
+}
+.sblock{
+  width: 100px;
+  display: inline-block;
+}
+.groupradio .el-radio{
+  display: block;
+  padding: 5px;
+
+}
+.radiogroup{
+  display:flex;
+}
+.radiogroup label{
+  flex: 1;
+}
+/deep/ .radiogroup .el-radio-button--mini .el-radio-button__inner{
+    border-radius: 5px;
+}
+/deep/ .radiogroup .el-radio-button:last-child .el-radio-button__inner{
+  border-radius: 4px ;
+}
+/deep/  .heightclass{
+  height: 450px;
+  overflow-y: auto;
+  
+}
+/deep/  .heightclass .el-dialog__header{
+  position: fixed;
+  z-index: 99;
+  width: 385px;
+}
+/deep/  .heightclass  .el-dialog__body{
+  margin-top: 60px;
+}
+.displanblock .el-checkbox{
+display: block;
+}
+.outline{
+  margin-left: 50px;
+  font-size: 20px;
+}
+/deep/.el-dialog__wrapper{
+ pointer-events:none;
+}
+/deep/.el-dialog{
+ pointer-events:auto; 
+}
+/deep/ .asideTag2{
+      left: auto;
+  right: 10px;
+ top: 21px;
+  ul{
+      display: flex; 
+      li{
+      
+ margin-left: 4px;
+     width: 28px;
+    height: 28px;
+      }
+  }
+}
+ .asideTag{
+
+ top: 30px;
+}
+/deep/ .asideTag  ul{
+  display: flex;   
+      li{
+ margin-left: 4px;
+     width: 28px;
+    height: 28px;
+      }
+}
+@media screen and (max-width:1330px){
+  .headMenu_2 .el-col{
+    transform:scale(0.8);
+    transform-origin: 0 0;
+  }
+  .headMenu_2{
+    height: 150px !important;
+  }
+  .asideTag2,.asideTag {
+    transform:scale(0.7);
+    transform-origin: 0 0;
+  }
+}
+@media screen and (max-width:1160px){
+  .headMenu_2 .el-col{
+    transform:scale(0.7);
+    transform-origin: 0 0;
+  }
+  .asideTag2{
+    left: 91%;
+  }
+  .el-aside{
+    width:170px !important;
+  }
+  .headMenu_2{
+    height: 135px !important;
+  }
+}
+.text{
+  color: #fff;
+  font-size:14px;
+      margin: 0;
+}
+.y{
+  width:100%;
+  height:100%;
+  background-image: url('../../../assets/3d_images/y.png') center 100%;
+}
+.y2{
+     background-image: url('../../../assets/3d_images/y2.png');
+}
+body{
+  font-family:'微软雅黑'
+}
+.imge{
+width:25px;
+}
+.classfelx{
+  flex:1;
+}
+.liitem .formLabelWidth8{
+     width: 343px;
+}
+</style>

+ 304 - 0
src/views/index/HCFDLab/index11.vue

@@ -0,0 +1,304 @@
+<template>
+  <div>
+    <div style="width:800px">
+      <x-chart ref="child" id="highcharts" class="high" :option="option"></x-chart>
+    </div>
+    <div class="control">
+      <div ref="box" style="width:50%;border:1px solid lightgrey;float:left">
+        <div>
+          <span class="text">Curve Display:</span>
+          <el-select
+            size="mini"
+            multiple
+            collapse-tags
+            style="margin-top:10px"
+            v-model="CurveValue"
+            placeholder="请选择显示项"
+            @change="showCurve"
+          >
+            <el-option :label="'All'" :value="'All'"></el-option>
+            <el-option
+              v-for="(item,index) in option.series "
+              :key="index"
+              :label="item.name"
+              :value="item.name"
+            ></el-option>
+          </el-select>
+        </div>
+        <br />
+        <div>
+          <span class="text">Line Width:</span>
+          <el-select
+            size="mini"
+            style="margin-left:15px"
+            v-model="linevalue"
+            placeholder="请选择线宽"
+            @change="changeLine"
+          >
+            <el-option
+              v-for="item in lineWdith "
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </div>
+        <div>
+          <span class="text">BackGroundColor:</span>
+          <el-color-picker
+            size="mini"
+            style="margin-top:10px"
+            v-model="back_color"
+            @change="changeBackColor"
+          ></el-color-picker>
+        </div>
+      </div>
+      <div style="width:50%;border:1px solid lightgrey;float:right">
+        <div>
+          <span class="text">Curve Display:</span>
+          <el-select size="mini" v-model="displayLine" style="margin-top:10px" placeholder="请选择隐藏项">
+            <el-option
+              v-for="(item,index) in option.series "
+              :key="index"
+              :label="item.name"
+              :value="item.name"
+              :disabled="item.display"
+            ></el-option>
+          </el-select>
+        </div>
+        <br />
+        <div>
+          <span class="text">Line Type:</span>
+          <el-select size="mini" v-model="lineType" style="margin-left:15px" placeholder="请选择线的类型">
+            <el-option
+              v-for="item in lineStyle "
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </div>
+        <div>
+          <span class="text">Line Color:</span>
+          <el-color-picker
+            size="mini"
+            v-model="lineColor"
+            style="margin-top:10px"
+            @change="changeLineColor"
+          ></el-color-picker>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+// 导入chart组件
+import XChart from "@/components/chart";
+import dataJson from "@/assets/data.json";
+export default {
+  data() {
+    return {
+      lineWdith: [
+        {
+          value: "1",
+          label: "1",
+        },
+        {
+          value: "2",
+          label: "2",
+        },
+        {
+          value: "3",
+          label: "3",
+        },
+        {
+          value: "4",
+          label: "4",
+        },
+      ],
+      lineStyle: [
+        {
+          value: "Line",
+          label: "Line",
+        },
+        {
+          value: "point",
+          label: "point",
+        },
+        {
+          value: "Square",
+          label: "Square",
+        },
+        {
+          value: "Triangle",
+          label: "Triangle",
+        },
+      ],
+      displayLine: "",
+      back_color: "#778899",
+      lineType: "",
+      lineColor: "",
+      linevalue: "1",
+      CurveValue: ["All"],
+      newOption: [],
+      option: {
+        title: {
+          text: dataJson.title,
+        },
+        chart: {
+          plotBackgroundColor: "#778899",
+          borderWidth: 1,
+        },
+        subtitle: {
+          text: "数据来源:converge",
+        },
+        yAxis: {
+          title: {
+            text: "值得大小",
+          },
+        },
+        xAxis: {},
+        plotOptions: {
+          series: {
+            lineWidth: 1,
+            label: {
+              connectorAllowed: false,
+            },
+            marker: {
+              radius: 5,
+            },
+            pointStart: 1,
+          },
+        },
+        series: [],
+        credits: {
+          enabled: false,
+        },
+        responsive: {
+          rules: [
+            {
+              condition: {
+                maxWidth: 500,
+              },
+              chartOptions: {
+                legend: {
+                  layout: "horizontal",
+                  align: "center",
+                  verticalAlign: "bottom",
+                },
+              },
+            },
+          ],
+        },
+      },
+    };
+  },
+  created() {
+    var jsonStr = dataJson;
+    for (var i in jsonStr.VARIABLES) {
+      var obj = {
+        name: "",
+        data: [],
+        color: "",
+        display: true,
+      };
+      obj.name = jsonStr.VARIABLES[i];
+      this.option.series.push(obj);
+    }
+    for (var i in jsonStr.VARIABLES) {
+      for (var j in jsonStr.value) {
+        this.option.series[i].data.push(
+          Number(jsonStr.value[j][i].toFixed(10))
+        );
+      }
+    }
+    let oldoption = this.option;
+    this.newOption = { ...oldoption };
+  },
+  watch: {
+    "option.plotOptions.series.lineWidth": {
+      handler(oleVal, newVal) {
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    showCurve() {
+      console.log(this.option.series);
+      var nameArr = [];
+      let val = this.CurveValue;
+      for (var i in val) {
+        if (val[i] == "All") {
+          this.CurveValue = ["All"];
+          this.newOption.series = this.option.series;
+          this.$refs.child.showChart("highcharts", this.newOption);
+          return;
+        } else {
+          var arr = this.option.series.filter((ele) => {
+            return ele.name == val[i];
+          });
+          nameArr.push(arr[0]);
+        }
+      }
+      this.changeDisplay();
+      this.newOption.series = nameArr;
+      this.$refs.child.showChart("highcharts", this.newOption);
+    },
+    changeDisplay() {
+      let val = this.CurveValue;
+      for (var i in val) {
+        for (var j in this.option.series)
+          if (val[i] == this.option.series[j].name) {
+            this.option.series[j].display = false;
+          }
+      }
+    },
+    changeBackColor() {
+      let val = this.back_color;
+      this.$set(this.newOption.chart, "plotBackgroundColor", val);
+      this.$refs.child.showChart("highcharts", this.newOption);
+    },
+    changeLine() {
+      let val = this.linevalue;
+      this.$set(this.option.plotOptions.series, "lineWidth", Number(val));
+      // console.log(this.option.plotOptions.series.lineWidth);
+      this.$refs.child.showChart("highcharts", this.newOption);
+    },
+    changeLineColor() {
+      let val = this.lineColor;
+      let lineVal = this.displayLine;
+      if (lineVal == "") {
+        this.$message.error("请先选择线条");
+        return;
+      }
+      for (var i in this.newOption.series) {
+        if (this.newOption.series[i].name == lineVal) {
+          this.newOption.series[i].color = val;
+        }
+      }
+      this.$refs.child.showChart("highcharts", this.newOption);
+    },
+  },
+  components: {
+    XChart,
+  },
+};
+</script>
+
+<style>
+.chart {
+  width: 200px;
+  height: 100px;
+}
+.control {
+  position: relative;
+  width: 800px;
+  height: 200px;
+  border: 1px solid burlywood;
+}
+.text {
+  font-size: 12px;
+  margin-left: 10px;
+}
+</style>

+ 231 - 0
src/views/index/HCFDLab/index_old.vue

@@ -0,0 +1,231 @@
+/*HCFD*/
+<template>
+  <div>
+    <!-- 中英转换测试-->
+     <div class="content">
+     <div id="info">
+        <h1>{{ $t("HCFD.file.file") }}</h1>
+        <h1>{{ $t("HCFD.file.name") }}</h1>
+        <h1>{{ $t("HCFD.file.desc") }}</h1>
+      </div>
+    </div>
+    <div>
+      <el-button size="mini" round @click="bload.large()">放大</el-button>
+      <el-button size="mini" round @click="bload.small()">缩小</el-button>
+      <el-button size="mini" round @click="bload.positive('x')">X+</el-button>
+      <el-button size="mini" round @click="bload.negative('x')">X-</el-button>
+      <el-button size="mini" round @click="bload.positive('y')">Y+</el-button>
+      <el-button size="mini" round @click="bload.negative('y')">Y-</el-button>
+      <el-button size="mini" round @click="bload.positive('z')">Z+</el-button>
+      <el-button size="mini" round @click="bload.negative('z')">Z-</el-button>
+    </div>
+    <div>
+      <el-button size="mini" round @click="bload.clear()">clear</el-button>
+      <el-button size="mini" round @click="bload.contour()">contour</el-button>
+      <el-button size="mini" round @click="bload.mesh()">mesh</el-button>
+    </div>
+    <div id="container"></div>
+    <div>
+      <el-button size="mini" round @click="saveProject()">保存项目</el-button>
+      <el-button size="mini" round @click="getProject()">获取项目</el-button>
+    </div>
+    <div>
+      <el-upload
+        ref="upload"
+        action="Fake Action"
+        accept="*.mpbc,*.ugrid"
+        :auto-upload="false"
+        :multiple="false"
+        :limit="1"
+        :http-request="uploadRequest"
+        >选取文件</el-upload
+      >
+        <el-button size="mini" @click="submitUpload">上传1</el-button>
+    </div>
+    <div>
+      <el-button size="mini" round @click="findParam()">获取计算参数</el-button>
+      <el-button size="mini" round @click="updateParam()">保存计算参数</el-button>
+      <el-button size="mini" round @click="hcfdExe()">执行求解</el-button>
+    </div>
+
+    <div>
+      <el-button size="mini" round @click="getPs()">获取项目列表</el-button>
+       <el-button size="mini" round @click="getSloverFiles()">获取求解结果</el-button>
+    </div>
+    <textarea rows="20" cols="2000" v-model="logs" >
+      "欢迎来到HCFD!"
+    </textarea> 
+
+ <vue-uploader :projectId='undefined' :refId='undefined' :systemTime="this.systemTime"></vue-uploader>
+  </div>
+</template>
+
+<script>
+import store from '@/store'
+import { UgridLoad } from "./hcfdload/UgridLoad.js";
+import { VolumLoad } from "./hcfdload/VolumLoad.js";
+import { BoundaryLoad } from "./hcfdload/BoundaryLoad.js";
+import { request, uploadFile } from "@/utils/request";
+import vueUploader from './file_upload.vue'
+
+export default {
+  name: "HCFDLab",
+  data() {
+    return {
+      bload: null,
+      websock: null,
+      projectId: "f0077d656cda43d88db02b146292ed83",
+      paramObj:null,
+      logs:"欢迎来到HCFD!",
+    }
+  },
+  created() {
+    this.initWebSocket();
+  },
+  destroyed() {
+    this.websock.close(); 
+    //离开路由之后断开websocket连接
+  },
+  mounted() {
+    this.loadfile();
+  },
+  components:{
+    vueUploader
+  },
+  methods: {
+
+    hcfdExe(){
+       let params = {
+        transCode: "A00105",
+        projectId: this.projectId,
+      };
+      request(params)
+        .then((res) => {
+          console.log("hcfdExe" + res);
+        })
+        .catch((err) => {});
+    },
+    findParam(){
+      let params = {
+        transCode: "A00107",
+        projectId: this.projectId,
+      };
+      request(params)
+        .then((res) => {
+          console.log("findParam:" + res);
+          this.paramObj =JSON.parse(res.parameterObj);
+        })
+        .catch((err) => {});
+    },
+    updateParam(){
+       let params = {
+        transCode: "A00104",
+        parameterObj:JSON.stringify(this.paramObj),
+        projectId: this.projectId,
+      };
+      request(params)
+        .then((res) => {
+          console.log("findParam:" + res);
+          this.paramObj =res
+        })
+        .catch((err) => {});
+    },   
+    uploadRequest(params) {
+      let param = new FormData();
+      param.append("transCode", "A00102");
+      param.append("file", params.file);
+      param.append("projectId", this.projectId);
+      uploadFile(param)
+        .then((res) => {
+          console.log(res);
+          // this.fileId = res.fileId
+        })
+        .catch((err) => {});
+    },
+    submitUpload() {
+      this.$refs.upload.submit();
+    },
+    saveProject() {
+      const params = {
+        transCode: "A00100",
+        projectName: "mavricdev",
+        parameterObj: null,
+        projectType: "hcfd",
+        fileType: "ascii",
+      };
+      request(params)
+        .then((res) => {
+          console.log("项目保存:" + res);
+          this.projectId =res.projectId
+        })
+        .catch((err) => {});
+    },
+    getProject() {
+      let params = {
+        transCode: "A00101",
+        page: 1,
+        size: 5,
+        projectType: "hcfd",
+      };
+      request(params)
+        .then((res) => {
+          console.log("项目:" + res);
+        })
+        .catch((err) => {});
+    },
+    loadfile() {
+      // this.bload= new UgridLoad(
+      //   "http://192.168.0.43:6868/47d6dbd4f5cf45ec9f2d50f9fb01cb02/mavricf/tf/data_in/tf.ugrid",
+      //   document.getElementById('container')
+      // );
+      // this.bload.loadUgrid();
+      this.bload = new VolumLoad(
+        [
+         "http://192.168.0.43:6868/1932f7311ef0490bbc15a5deac579eb4/test1/tf/test/data_out/tf_part1_tec_volume_timestep100.dat",
+"http://192.168.0.43:6868/1932f7311ef0490bbc15a5deac579eb4/test1/tf/test/data_out/tf_part2_tec_volume_timestep100.dat"
+        ],
+        document.getElementById('container')
+      );
+      // this.bload.loadUgrid();
+      // this.bload = new BoundaryLoad(
+      //   "http://192.168.0.43:6868/47d6dbd4f5cf45ec9f2d50f9fb01cb02/mavricf/tf/test/data_out/tf_tec_boundary_timestep100.dat",
+      //   document.getElementById("container")
+      // );
+      this.bload.loadUgrid();
+    },
+    initWebSocket() {
+      //初始化weosocket
+      const wsuri = "ws://192.168.0.43:8081/"+store.getters.userId;
+      this.websock = new WebSocket(wsuri);
+      this.websock.onmessage = this.websocketonmessage;
+      this.websock.onopen = this.websocketonopen;
+      this.websock.onerror = this.websocketonerror;
+      this.websock.onclose = this.websocketclose;
+    },
+    websocketonopen() {
+      //连接建立之后执行send方法发送数据
+      let actions = { test: "12345" };
+      console.log("发送数据", actions);
+      this.websocketsend(JSON.stringify(actions));
+    },
+    websocketonerror() {
+      //连接建立失败重连
+      this.initWebSocket();
+    },
+    websocketonmessage(e) {
+      //数据接收
+      const redata = e.data;
+      this.logs += '\n'+redata;
+      console.log("接收数据", redata);
+    },
+    websocketsend(Data) {
+      //数据发送
+      this.websock.send(Data);
+    },
+    websocketclose(e) {
+      //关闭
+      console.log("断开连接", e);
+    },
+  },
+};
+</script>

+ 139 - 0
src/views/index/HCFDLab/loading.vue

@@ -0,0 +1,139 @@
+fileLoadeState
+<template>
+     <el-dialog  class="diolog"  :visible.sync="visiable" :close-on-click-modal="false" :close-on-press-escape	="false" :show-close="false" >
+        <el-row class="lgcoent">
+        <el-col  class="lgleft" :span="8"> 
+            <div  class="lodingimg">
+              <el-image :src="imggif" class="img">
+                  </el-image>
+                       <h1 class="loding">Loading...</h1>
+                  </div>
+            
+        </el-col>     
+             
+        <el-col :span="16" class="lodgright">
+        
+        <el-row v-for="(loadObj,key) in loadObjs" :key="key"> 
+            <div>
+            <li v-if="loadObj.type ==1">
+                <el-col :span="14" >{{key+1}}.{{loadObj.message}}</el-col>
+                <el-col :span="10" v-if="loadObj.state==-1"> ...等待</el-col>    
+                <el-col :span="10" v-if="loadObj.state==0"> ...进行中</el-col>    
+                <el-col :span="10" v-if="loadObj.state==1"> 完成</el-col>    
+            </li>
+            <li v-if="loadObj.type ==2">
+                <el-col :span="14">{{key+1}}.{{loadObj.filename}}</el-col>
+                <el-col :span="10"><el-progress :percentage="loadObj.percentage"></el-progress></el-col>
+            </li>
+            </div>
+        </el-row>  
+        </el-col>       
+        </el-row>
+     </el-dialog> 
+</template>
+<script>
+import imggif from "@/assets/hcfd_images/loding.gif";
+import * as THREE from 'three'
+let loader = new THREE.FileLoader();
+export default {
+    data(){
+        return {
+           imggif: imggif,
+           visiable:false,
+           loading: true,
+        }
+        
+    },
+     props:{//传入参数
+        loadObjs:Array,
+    },
+    mounted(){
+
+    },
+    methods:{
+
+    },
+    watch:{
+        loadObjs:{
+            handler(newVal) {
+               let show =true;
+               newVal.forEach(obj=>{ 
+                   if(obj.type==1 && obj.state != 1){
+                       show=false
+                   }else if(obj.type ==2 && obj.percentage!=100){
+                       show=false
+                   }
+               })
+               if(show){
+                   this.visiable=false;
+               }else{
+                   this.visiable=true; 
+               }
+            },
+            deep: true,
+          immediate: false,
+        }
+    },
+  
+
+}
+
+</script>
+<style scoped>
+/* .lgleft{
+    padding: 100px;
+} */
+.lgcoent{
+    max-height: 500px;
+    min-height: 250px;
+    overflow: hidden;
+        display: flex;
+  
+}
+.lgleft{
+  display: flex;
+    justify-content: center;
+    align-items: center;  
+}
+
+.lodingimg{
+    width: 200px;
+    height: 150px;
+    position: relative;
+  
+}
+.img{
+    width: 100%;
+    height: 100%;
+    margin-top: -40px;
+}
+.loding{
+     width: 100%;
+    text-align: center;
+   
+    position: absolute;
+    bottom: 0;
+    text-align: center;
+}
+.lodgright .el-col{
+    padding: 10px 0;
+
+} 
+
+.lgleft{
+    position: relative;
+    overflow: hidden;
+    /* top:50%;
+  transform:translateY(-50%); */
+  
+}
+.lodgright{
+    padding: 10px 5px;
+    max-height: 500px;
+    overflow-y: auto; 
+
+}
+.lgcoent{
+    padding-bottom: 10px;
+}
+</style>

+ 820 - 0
src/views/index/HCFDLab/loads/BoundaryLoad.vue

@@ -0,0 +1,820 @@
+<template>
+  <div>
+    <div
+      ref="container_boundary"
+      v-show="container_show"
+      style="text-align: center"
+    ></div>
+
+    <!-- contour -->
+    <div class="contour" v-show="divb">
+      <span class="movieControlTitle">Contour</span>
+      <form class="el-form">
+        <div class="el-form-item">
+          <label class="el-form-item__label" style="width: 120px"
+            >Contour Level</label
+          >
+          <div class="el-form-item__content" style="margin-left: 120px">
+            <div class="el-input">
+              <el-input-number
+                v-model="contourLevel"
+                :min="3"
+                :max="20"
+                label="contour level"
+              ></el-input-number>
+            </div>
+          </div>
+        </div>
+      </form>
+      <div class="divb" v-show="divb">
+        <h1>{{ bScalar }}</h1>
+        <div class="colorBlock" ref="colorBlock">
+          <li
+            v-for="(item, i) in coloras"
+            :key="i"
+            :style="{ height: height, background: item }"
+          >
+            <span>{{ nucolor[i] }}</span>
+          </li>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import * as THREE from "three";
+import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
+import { kgReplace, ugread } from "../Util.js";
+import { Loading } from 'element-ui';
+let loader = new THREE.FileLoader();
+export default {
+  data() {
+    return {
+      divb: false,
+      contourLevel: 3,
+      container_show: false,
+      scene: null, //场景
+      renderer: null, //渲染器
+      camera: null,
+      controls: null, // 相机 控制器
+      model: {},
+      meshs: [],
+      geometrys: [],
+      maxX: 0, //存储 物体 最大坐标 x
+      maxY: 0,
+      maxZ: 0,
+      minX: 0,
+      minY: 0,
+      minZ: 0,
+      camerahight: 5, //存储 相机 高度
+      camerahight_ele: 5, //相机高度放大倍数
+      mufactor: 0.2, //放大系数
+      url: "",
+      baseColors: [],
+      coloras: [], //颜色条
+      height: "30px", //颜色条初始高度
+      nucolor: [], //颜色条最值
+      scalMax: 0,
+      scalMin: 0,
+      worker: null,
+    };
+  },
+  watch: {
+    renderer_hight: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+    renderer_width: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+    contourLevel: {
+      handler(newVal) {
+        this.initBaseColors();
+        this.offHeight();
+        this.getmax(this.scalMin, this.scalMax);
+        //this.showSurface();
+        this.$emit("showSurface");
+        // this.endhidden('contour')
+        // this.endContour(this.endUrlps,this.scalarRadio)
+      },
+      deep: true,
+      immediate: false,
+    },
+  },
+  props: {
+    //传入参数
+    renderer_hight: Number,
+    renderer_width: Number,
+    vectorFactor: Number,
+    meshType: Number, //1-mesh 2-countor,
+    bScalar: String,
+  },
+  mounted() {
+    this.initScene();
+    this.initBaseColors();
+  },
+  created() {
+    this.worker = this.$worker.create([
+      {
+        message: "boundary",
+        func(data, model) {
+          const kgReplace = (line) => {
+            while (line.indexOf("  ") > 0) {
+              line = line.replace("  ", " ");
+            }
+            return line;
+          };
+          const ugread = (lines, strsp, beginfx, endfx, sve) => {
+            for (var i = beginfx; i < endfx; i++) {
+              sve.push(
+                kgReplace(lines[i].trim())
+                  .split(strsp)
+                  .map((str) => Number(str))
+              );
+            }
+            return sve;
+          };
+          const lines = data.split("\n");
+          model.title = "";
+          model.variables = [];
+          model.zones = [];
+          lines.forEach((line) => {
+            if (line.indexOf("title") == 0) {
+              //title
+              model.title = line
+                .replace(/title/, "")
+                .replace(/=/, "")
+                .replace(/\"/, "");
+            } else if (line.indexOf("variables") == 0) {
+              //variables
+              model.variables = line
+                .replace(/variables/, "")
+                .replace(/=/, "")
+                .trim()
+                .split(" ");
+            } else if (line.indexOf("zone") == 0) {
+              //zone
+              let zone = {};
+              model.zones.push(zone);
+              zone.variablesMap = new Map();
+              model.variables.forEach((variable) => {
+                zone.variablesMap.set(variable, []);
+              });
+              let vs = line
+                .replace(/zone/, "")
+                .replace(/\"/, "")
+                .trim()
+                .split(",");
+              zone.t = vs[0].split("=")[1];
+              zone.solutiontime = Number(vs[1].split("=")[1]);
+              zone.strandid = Number(vs[2].split("=")[1]);
+              zone.i = Number(vs[3].split("=")[1]);
+              zone.j = Number(vs[4].split("=")[1]);
+              zone.f = vs[5].split("=")[1];
+              zone.datais = [];
+              zone.datajs = [];
+            } else {
+              //当前的zone
+              let zone = model.zones[model.zones.length - 1];
+              if (zone == undefined || zone == null) {
+              } else {
+                let datais = zone.datais;
+                if (datais.length == 0) {
+                  datais.push([]);
+                }
+                let datai = zone.datais[zone.datais.length - 1];
+                let datas = kgReplace(line.trim())
+                  .split(" ")
+                  .map((i) => Number(i));
+                if (datai.length < model.variables.length) {
+                  //i 单条数据没有封装完整
+                  datas.forEach((date) => {
+                    datai.push(date);
+                  });
+                } else if (datais.length < zone.i) {
+                  //i 数据没有封装完成
+                  let m = [];
+                  datas.forEach((date) => {
+                    m.push(date);
+                  });
+                  datais.push(m);
+                } else {
+                  //j 数据封装
+                  let dataj = [];
+                  datas.forEach((date) => {
+                    dataj.push(date);
+                  });
+                  if (dataj.length > 1) zone.datajs.push(dataj); //排除最后一条
+                }
+              }
+            }
+          });
+          return model;
+        },
+      },
+      {
+        message: "initGeometry",
+        func(model) {
+          model.zones.forEach((zone) => {
+            var colors = [];
+            let position=[];
+            var indexes = [];
+            zone.datais.forEach((datai) => {
+              // this.maxX = datai[0]> this.maxX? datai[0] : this.maxX
+              // this.maxY = datai[1]> this.maxY? datai[1] : this.maxY
+              // this.maxZ = datai[2]> this.maxZ? datai[2] : this.maxZ
+              // this.minX = datai[0]< this.minX? datai[0] : this.minX
+              // this.minY = datai[1]< this.minY? datai[1] : this.minY
+              // this.minZ = datai[2]< this.minZ? datai[2] : this.minZ
+              for (let i = 0; i < datai.length; i++) {
+                zone.variablesMap.get(model.variables[i]).push(datai[i]);
+              }
+              position.push(datai[0]);
+              position.push(datai[1]);
+              position.push(datai[2]);
+            });
+
+            zone.datajs.forEach((p) => {
+              const v0 = p[0] - 1;
+              const v1 = p[1] ? p[1] - 1 : v0;
+              const v2 = p[2] ? p[2] - 1 : v0;
+              const v3 = p[3] ? p[3] - 1 : v0;
+              indexes.push(v0);
+              indexes.push(v1);
+              indexes.push(v2);
+            });
+            zone.cells = indexes;
+            zone.position = position;
+          });
+          return model;
+        },
+      },
+    ]);
+  },
+  destroyed() {
+    this.worker = null;
+    this.loadingClose();
+  },
+  methods: {
+    loadingOpen() {
+        let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+    },
+    loadingClose() {
+      let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+      loadingInstance.close();
+    },
+    //     open3() {
+    //     this.$message({
+    //    message: "恭喜你,这是一条成功消息",
+    //     type: "success"
+    //  });
+    //   },
+    isShow() {
+      return this.container_show;
+    },
+    offHeight() {
+      //let offheig=this.$refs.colorBlock.offsetHeight;
+      let offheig = 296;
+      //console.log(offheig);
+      this.height = offheig / this.coloras.length + "px";
+      console.log(this.coloras.length);
+      console.log(this.height);
+    },
+    getmax(minScalar, maxScalar) {
+      this.nucolor = [];
+      let ascalar = (maxScalar - minScalar) / this.contourLevel;
+      for (let index = 1; index <= this.contourLevel; index++) {
+        let maxten = (minScalar + index * ascalar).toExponential(2);
+        this.nucolor.unshift(maxten);
+      }
+      this.nucolor.push(minScalar.toExponential(2));
+      //   console.log(this.nucolor);
+    },
+    getColor(minScalar, maxScalar, scalar) {
+      let a_scalar = (maxScalar - minScalar) / this.contourLevel;
+      for (let index = 0; index < this.contourLevel; index++) {
+        let ten = minScalar + index * a_scalar;
+        if (Math.max(ten, scalar) == ten) {
+          let col = this.baseColors[index];
+          return col;
+        }
+      }
+      return this.baseColors[this.contourLevel - 1];
+    },
+    initBaseColors() {
+      this.coloras = [];
+      this.baseColors = [];
+      let minColor = 0;
+      let maxColor = 240;
+      this.baseColors.push(this.colorHex(this.hsltorgb(minColor, 100.0, 50.0)));
+      let a_color = Math.round((maxColor - minColor) / this.contourLevel);
+      for (let index = 1; index < this.contourLevel - 1; index++) {
+        this.baseColors.push(
+          this.colorHex(this.hsltorgb(minColor + a_color * index, 100.0, 50.0))
+        );
+      }
+      this.baseColors.push(this.colorHex(this.hsltorgb(maxColor, 100.0, 50.0)));
+      this.baseColors = this.baseColors.reverse();
+      this.coloras.push("#D7DCE7");
+    },
+    hsltorgb(h, s, l) {
+      var h = h / 360;
+      var s = s / 100;
+      var l = l / 100;
+      var rgb = [];
+
+      if (s == 0) {
+        rgb = [Math.round(l * 255), Math.round(l * 255), Math.round(l * 255)];
+      } else {
+        var q = l >= 0.5 ? l + s - l * s : l * (1 + s);
+        var p = 2 * l - q;
+        var tr = (rgb[0] = h + 1 / 3);
+        var tg = (rgb[1] = h);
+        var tb = (rgb[2] = h - 1 / 3);
+        for (var i = 0; i < rgb.length; i++) {
+          var tc = rgb[i];
+          if (tc < 0) {
+            tc = tc + 1;
+          } else if (tc > 1) {
+            tc = tc - 1;
+          }
+          switch (true) {
+            case tc < 1 / 6:
+              tc = p + (q - p) * 6 * tc;
+              break;
+            case 1 / 6 <= tc && tc < 0.5:
+              tc = q;
+              break;
+            case 0.5 <= tc && tc < 2 / 3:
+              tc = p + (q - p) * (4 - 6 * tc);
+              break;
+            default:
+              tc = p;
+              break;
+          }
+          rgb[i] = Math.round(tc * 255);
+        }
+      }
+      return this.colorHex("rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")");
+    },
+    colorHex(color) {
+      // RGB颜色值的正则
+      var reg = /^(rgb|RGB)/;
+      if (reg.test(color)) {
+        var strHex = "0x";
+        var strHex2 = "#";
+        // 把RGB的3个数值变成数组
+        var colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
+        // 转成16进制
+        for (var i = 0; i < colorArr.length; i++) {
+          var hex = Number(colorArr[i]).toString(16);
+          if (hex === "0") {
+            hex += hex;
+          }
+          strHex += hex.toUpperCase();
+          strHex2 += hex;
+        }
+        this.coloras.push(strHex2);
+
+        return Number(strHex);
+      } else {
+        return Number(color);
+      }
+    },
+    init() {
+      this.scene = new THREE.Scene(); //场景
+      this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); //渲染器
+      this.camera = new THREE.PerspectiveCamera(20, this.renderer_width/this.renderer_hight, 0.2, 10000);
+      this.controls = new OrbitControls(this.camera, this.renderer.domElement); // 相机 控制器
+    },
+    initScene() {
+      if (this.scene == null) {
+        this.init();
+      }
+      // let wi = Math.min(this.renderer_width, this.renderer_hight);
+      this.renderer.setSize(this.renderer_width, this.renderer_hight); //渲染器大小
+      this.$refs.container_boundary.appendChild(this.renderer.domElement);
+      let _this = this;
+      var animate = function () {
+        //动画
+        requestAnimationFrame(animate);
+        _this.renderer.render(_this.scene, _this.camera);
+      };
+      animate();
+      // var helpers = new THREE.Group();//实例化辅助对象组
+      // helpers.add(new THREE.AxesHelper(5));//添加坐标系控件长度为200
+      // this.scene.add(helpers);//添加到场景
+    },
+
+    loadBoundary(_url, type, contourtype) {
+      const loader = new THREE.FileLoader();
+      const _this = this;
+      _this.loadingOpen();
+      _this.meshs = [];
+      _this.geometrys = [];
+      _this.url = _url;
+      loader.load(
+        _this.url,
+        function (data) {
+          _this.worker
+            .postAll([
+              {
+                message: "boundary",
+                args: [data, _this.model],
+              },
+            ])
+            .then((res) => {
+              _this.model = res[0];
+              // console.log(_this.model);
+              _this.$emit("setBoundaryScalars", _this.model.variables);
+              _this.worker
+                .postAll([
+                  {
+                    message: "initGeometry",
+                    args: [_this.model],
+                  },
+                ])
+                .then((res) => {
+                  _this.model = res[0];
+                  // console.log(_this.model);
+                   if (type == 1) {
+                    //mesh
+                    _this.mesh(contourtype);
+                  } else if (type == 2) {
+                    //countor
+                    _this.contour(contourtype);
+                  }
+                });
+            });
+          // _this.boundary(data);
+          // _this.$emit("setBoundaryScalars", _this.model.variables);
+          // _this.initGeometry();
+          // if (type == 1) {
+          //   //mesh
+          //   _this.mesh(contourtype);
+          // } else if (type == 2) {
+          //   //countor
+          //   _this.contour(contourtype);
+          // }
+        },
+        // onProgress回调
+        function (xhr) {
+          // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+        },
+        // onError回调
+        function (err) {
+          console.error("An error happened");
+          this.loadingClose();
+        }
+      );
+    },
+
+    boundary(data) {
+      const lines = data.split("\n");
+      this.model.title = "";
+      this.model.variables = [];
+      this.model.zones = [];
+      lines.forEach((line) => {
+        if (line.indexOf("title") == 0) {
+          //title
+          this.model.title = line
+            .replace(/title/, "")
+            .replace(/=/, "")
+            .replace(/\"/, "");
+        } else if (line.indexOf("variables") == 0) {
+          //variables
+          this.model.variables = line
+            .replace(/variables/, "")
+            .replace(/=/, "")
+            .trim()
+            .split(" ");
+        } else if (line.indexOf("zone") == 0) {
+          //zone
+          let zone = {};
+          this.model.zones.push(zone);
+          zone.variablesMap = new Map();
+          this.model.variables.forEach((variable) => {
+            zone.variablesMap.set(variable, []);
+          });
+          let vs = line.replace(/zone/, "").replace(/\"/, "").trim().split(",");
+          zone.t = vs[0].split("=")[1];
+          zone.solutiontime = Number(vs[1].split("=")[1]);
+          zone.strandid = Number(vs[2].split("=")[1]);
+          zone.i = Number(vs[3].split("=")[1]);
+          zone.j = Number(vs[4].split("=")[1]);
+          zone.f = vs[5].split("=")[1];
+          zone.datais = [];
+          zone.datajs = [];
+        } else {
+          //当前的zone
+          let zone = this.model.zones[this.model.zones.length - 1];
+          if (zone == undefined || zone == null) {
+          } else {
+            let datais = zone.datais;
+            if (datais.length == 0) {
+              datais.push([]);
+            }
+            let datai = zone.datais[zone.datais.length - 1];
+            let datas = kgReplace(line.trim())
+              .split(" ")
+              .map((i) => Number(i));
+            if (datai.length < this.model.variables.length) {
+              //i 单条数据没有封装完整
+              datas.forEach((date) => {
+                datai.push(date);
+              });
+            } else if (datais.length < zone.i) {
+              //i 数据没有封装完成
+              let m = [];
+              datas.forEach((date) => {
+                m.push(date);
+              });
+              datais.push(m);
+            } else {
+              //j 数据封装
+              let dataj = [];
+              datas.forEach((date) => {
+                dataj.push(date);
+              });
+              if (dataj.length > 1) zone.datajs.push(dataj); //排除最后一条
+            }
+          }
+        }
+      });
+    },
+
+    initGeometry() {
+      this.model.zones.forEach((zone) => {
+        var colors = [];
+        let position=[];
+        let indexes = [];
+        zone.datais.forEach((datai) => {
+          // this.maxX = datai[0]> this.maxX? datai[0] : this.maxX
+          // this.maxY = datai[1]> this.maxY? datai[1] : this.maxY
+          // this.maxZ = datai[2]> this.maxZ? datai[2] : this.maxZ
+          // this.minX = datai[0]< this.minX? datai[0] : this.minX
+          // this.minY = datai[1]< this.minY? datai[1] : this.minY
+          // this.minZ = datai[2]< this.minZ? datai[2] : this.minZ
+          for (let i = 0; i < datai.length; i++) {
+            zone.variablesMap.get(this.model.variables[i]).push(datai[i]);
+          }
+          position.push(datai[0]);
+          position.push(datai[1]);
+          position.push(datai[2]);
+        });
+
+        zone.datajs.forEach((p) => {
+          const v0 = p[0] - 1;
+          const v1 = p[1] ? p[1] - 1 : v0;
+          const v2 = p[2] ? p[2] - 1 : v0;
+          const v3 = p[3] ? p[3] - 1 : v0;
+          indexes.push(v0);
+          indexes.push(v1);
+          indexes.push(v2);
+        });
+        zone.cells = indexes;
+        zone.position = position;
+      });
+    },
+    nhiden() {
+      this.container_show = true;
+      this.divb = false;
+    },
+    hiden() {
+      this.container_show = false;
+      this.divb = false;
+    },
+    show() {
+      this.container_show = true;
+      // this.meshs.forEach(mesh=>{
+      //     mesh.position.x = -1*(this.maxX+this.minX) / 2;//设置网格模型几何中心y坐标
+      //     mesh.position.y = -1*(this.maxY+this.minY)  / 2;//设置网格模型几何中心y坐标
+      //     mesh.position.z = -1*(this.maxZ+this.minZ) / 2;//设置网格模型几何中心y坐标
+      // });
+      // this.camerahight=Math.max(
+      //     Math.abs(this.maxX),
+      //     Math.abs(this.maxY),
+      //     Math.abs(this.maxZ),
+      //     Math.abs(this.minX),
+      //     Math.abs(this.minY),
+      //     Math.abs(this.minZ),
+      // )
+      // this.controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+      // this.controls.update();
+      // this.camera.position.set(this.camerahight_ele*this.camerahight, 0, 0);//
+      // this.camera.lookAt(this.scene.position);
+      // this.camera.updateMatrix();
+      var bBox = new THREE.Box3().setFromObject(this.scene);
+      var height = bBox.size().y;
+      var dist = height / (2 * Math.tan((this.camera.fov * Math.PI) / 360));
+      var pos = this.scene.position;
+
+      // fudge factor so the object doesn't take up the whole view
+      this.camera.position.set(pos.x, pos.y, dist * 1.5);
+      this.camera.lookAt(pos);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 删除模型
+     */
+    clear() {
+      this.meshs.forEach((mesh) => {
+        this.scene.remove(mesh);
+        // this._docdiv.removeChild(_this.renderer.domElement);
+      });
+      this.meshs = [];
+      this.geometrys = [];
+    },
+    contour(elem) {
+      this.loadingOpen();
+      let scalarsfTemp = [];
+      this.model.zones.forEach((zone) => {
+        if (scalarsfTemp.length == 0) {
+          scalarsfTemp = zone.variablesMap.get(elem);
+        } else {
+          scalarsfTemp.concat(zone.variablesMap.get(elem));
+        }
+      });
+      this.scalMax = Math.max.apply(null, scalarsfTemp);
+      this.scalMin = Math.min.apply(null, scalarsfTemp);
+      this.getmax(this.scalMin, this.scalMax);
+      this.model.zones.forEach(zone => {
+        var colors = [];
+        let scalarsf = zone.variablesMap.get(elem);
+
+        let i = 0;
+        zone.datais.forEach((datai) => {
+          let scalar = zone.variablesMap.get(elem)[i];
+          let hexColor = this.getColor(this.scalMin, this.scalMax, scalar);
+          let color = new THREE.Color();
+          color.setHex(hexColor);
+          colors.push(color.r);
+          colors.push(color.g);
+          colors.push(color.b);
+          i++;
+        });
+        var geometry = new THREE.BufferGeometry();
+        geometry.setAttribute( "color", new THREE.Float32BufferAttribute(colors, 3)
+        );
+        geometry.setIndex(zone.cells);
+        geometry.setAttribute("position", new THREE.Float32BufferAttribute(zone.position, 3));
+        var material = new THREE.MeshBasicMaterial({
+          vertexColors: THREE.VertexColors,
+          side: THREE.DoubleSide,
+        });
+        var mesh = new THREE.Mesh(geometry, material);
+        this.meshs.push(mesh);
+        this.scene.add(mesh);
+      });
+
+      this.show();
+      this.loadingClose();
+    },
+
+    /**
+     * 网格
+     */
+    mesh() {
+      this.loadingOpen();
+      if (this.model.zones == undefined || this.model.zones == undefined) {
+      } else {
+        this.model.zones.forEach((zone) => {
+          var geometry = new THREE.BufferGeometry();
+          geometry.setIndex(zone.cells);
+          geometry.setAttribute("position", new THREE.Float32BufferAttribute(zone.position, 3));
+          var wf = new THREE.WireframeGeometry(geometry); //几何网格 只显示线
+          var mesh = new THREE.LineSegments(
+            wf,
+            new THREE.LineBasicMaterial({ color: 0x00ff00 })
+          ); //设置线颜色
+          this.meshs.push(mesh);
+          this.scene.add(mesh);
+        });
+        this.show();
+      }
+      this.loadingClose()
+    },
+    /**
+     *  正面
+     */
+    positive(axis) {
+      if (axis == "x")
+        this.camera.position.set(this.camerahight_ele * this.camerahight, 0, 0);
+      if (axis == "y")
+        this.camera.position.set(0, this.camerahight_ele * this.camerahight, 0);
+      if (axis == "z")
+        this.camera.position.set(0, 0, this.camerahight_ele * this.camerahight);
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 反面
+     */
+    negative(axis) {
+      if (axis == "x")
+        this.camera.position.set(
+          -1 * this.camerahight_ele * this.camerahight,
+          0,
+          0
+        );
+      if (axis == "y")
+        this.camera.position.set(
+          0,
+          -1 * this.camerahight_ele * this.camerahight,
+          0
+        );
+      if (axis == "z")
+        this.camera.position.set(
+          0,
+          0,
+          -1 * this.camerahight_ele * this.camerahight
+        );
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 放大
+     */
+    large() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 + this.mufactor);
+        const sy = mesh.scale.y * (1 + this.mufactor);
+        const sz = mesh.scale.z * (1 + this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+    /**
+     * 缩小
+     */
+    small() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 - this.mufactor);
+        const sy = mesh.scale.y * (1 - this.mufactor);
+        const sz = mesh.scale.z * (1 - this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+  },
+};
+</script>
+<style scoped>
+.el-tag {
+  width: 25px;
+  height: 35px;
+  display: block;
+  border: none;
+  border-radius: 0%;
+}
+.el-tag--light {
+  color: #333;
+}
+.divb {
+  padding: 15px;
+}
+.colorStrip {
+  width: 120px;
+  height: 100%;
+}
+
+.colorBlock {
+  height: 90%;
+  width: 100%;
+}
+.colorBlock li {
+  width: 30px;
+  white-space: nowrap;
+  text-indent: 35px;
+}
+.colorBlock span {
+  position: relative;
+  top: -5px;
+}
+.contour {
+  position: absolute;
+  top: 30px;
+ left: 10px;
+}
+.contour .el-input__inner {
+  height: 30px;
+  text-align: center;
+}
+</style>

+ 404 - 0
src/views/index/HCFDLab/loads/UgridLoad.vue

@@ -0,0 +1,404 @@
+<template>
+  <div
+    ref="volume_boundary"
+    v-show="container_show"
+    style="text-align: center"
+  ></div>
+</template>
+<script>
+import * as THREE from "three";
+import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
+import { kgReplace, ugread } from "../Util.js";
+import { Loading } from 'element-ui';
+let loader = new THREE.FileLoader();
+export default {
+  data() {
+    return {
+      container_show: false,
+      scene: null, //场景
+      renderer: null, //渲染器
+      camera: null,
+      controls: null, // 相机 控制器
+      model: {},
+      meshs: [],
+      geometrys: [],
+      maxX: 0, //存储 物体 最大坐标 x
+      maxY: 0,
+      maxZ: 0,
+      minX: 0,
+      minY: 0,
+      minZ: 0,
+      camerahight: 5, //存储 相机 高度
+      mufactor: 0.2, //放大系数
+      url: "",
+      camerahight_ele: 10, //相机高度放大倍数
+      worker: null,
+    };
+  },
+  watch: {
+    renderer_hight: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+    renderer_width: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+  },
+  props: {
+    //传入参数
+    renderer_hight: Number,
+    renderer_width: Number,
+  },
+  created() {
+    this.worker = this.$worker.create([
+      {
+        message: "read-ugrid",
+        func(data, model) {
+          const lines = data.split("\n");
+          const kgReplace = (line) => {
+            while (line.indexOf("  ") > 0) {
+              line = line.replace("  ", " ");
+            }
+            return line;
+          };
+          const ugread = (lines, strsp, beginfx, endfx, sve) => {
+            for (var i = beginfx; i < endfx; i++) {
+              sve.push(
+                kgReplace(lines[i].trim())
+                  .split(strsp)
+                  .map((str) => Number(str))
+              );
+            }
+            return sve;
+          };
+          const onelines = kgReplace(lines[0].trim())
+            .split(" ")
+            .map((str) => Number(str.trim()));
+          const nnode = onelines[0];
+          const n_tri = onelines[1];
+          const n_quad = onelines[2];
+          const n_tet = onelines[3];
+          const n_pyr = onelines[4];
+          const n_prism = onelines[5];
+          const n_hex = onelines[6];
+          model.node = [];
+          ugread(lines, " ", 1, nnode + 1, model.node);
+          model.tri = [];
+          ugread(lines, " ", nnode + 1, nnode + n_tri + 1, model.tri);
+          return model;
+        },
+      },
+      {
+        message: "initGeometry",
+        func(model, geometry) {
+          let position = new Float32Array(model.node.length * 3);
+          let position_j = 0;
+          model.node.forEach((datai) => {
+            position[position_j++] = datai[0];
+            position[position_j++] = datai[1];
+            position[position_j++] = datai[2];
+          });
+          var indexs = new Float32Array(model.tri.length * 3);
+          let index_j = 0;
+          model.tri.forEach((p) => {
+            const v0 = p[0] - 1;
+            const v1 = p[1] ? p[1] - 1 : v0;
+            const v2 = p[2] ? p[2] - 1 : v0;
+            indexs[index_j++] = v0;
+            indexs[index_j++] = v1;
+            indexs[index_j++] = v2;
+          });
+          let back = { position: [], indexs: [] };
+          back.position = position;
+          back.indexs = indexs;
+          return back;
+        },
+      },
+    ]);
+  },
+  destroyed() {
+    this.worker = null;
+  },
+  mounted() {
+    this.initScene();
+  },
+  methods: {
+    loadingOpen() {
+        let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+    },
+    loadingClose() {
+      let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+      loadingInstance.close();
+    },
+    isShow() {
+      return this.container_show;
+    },
+    init() {
+      this.scene = new THREE.Scene(); //场景
+      this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); //渲染器
+      this.camera = new THREE.PerspectiveCamera(20, this.renderer_width/this.renderer_hight, 0.2, 10000);
+      this.controls = new OrbitControls(this.camera, this.renderer.domElement); // 相机 控制器
+    },
+    initScene() {
+      this.init();
+      // let wi = Math.min(this.renderer_width, this.renderer_hight);
+      this.renderer.setSize(this.renderer_width, this.renderer_hight); //渲染器大小
+      this.$refs.volume_boundary.appendChild(this.renderer.domElement);
+      let _this = this;
+      var animate = function () {
+        //动画
+        requestAnimationFrame(animate);
+        _this.renderer.render(_this.scene, _this.camera);
+      };
+      animate();
+      // var helpers = new THREE.Group();//实例化辅助对象组
+      // helpers.add(new THREE.AxesHelper(5));//添加坐标系控件长度为200
+      // this.scene.add(helpers);//添加到场景
+    },
+    loadUgrid(_url, type) {
+      const _this = this;
+      _this.loadingOpen();
+      _this.meshs = [];
+      _this.url = _url;
+      loader.load(
+        _this.url,
+        function (data) {
+          _this.worker
+            .postAll([
+              {
+                message: "read-ugrid",
+                args: [data, _this.model],
+              },
+            ])
+            .then((res) => {
+              _this.model = res[0];
+              //    console.log(_this.model);
+              //    _this.initGeometry()
+              //     if(type==1){//mesh
+              //         _this.mesh()
+              //     }else if(type ==2){//countor
+              //         _this.contour()
+              //     }
+
+              _this.worker.postAll([
+                  {
+                    message: "initGeometry",
+                    args: [_this.model],
+                  },
+                ])
+                .then((res) => {
+                  console.log(res[0]);
+                  var geometry = new THREE.BufferGeometry();
+                  geometry.setIndex(
+                    new THREE.Float32BufferAttribute(res[0].indexs, 1)
+                  );
+                  geometry.setAttribute(
+                    "position",
+                    new THREE.Float32BufferAttribute(res[0].position, 3)
+                  );
+                  _this.geometrys.push(geometry);
+                  if (type == 1) {
+                    //mesh
+                    _this.mesh();
+                  } else if (type == 2) {
+                    //countor
+                    _this.contour();
+                  }
+                });
+            });
+          // _this.ugrid(data);
+        },
+        // onProgress回调
+        function (xhr) {
+          // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+        },
+        // onError回调
+        function (err) {
+          console.error("An error happened");
+          this.loadingClose();
+        }
+      );
+    },
+
+    initGeometry() {
+      var geometry = new THREE.Geometry();
+      let position = new Float32Array(this.model.node.length * 3);
+      let position_j = 0;
+      this.model.node.forEach((datai) => {
+        position[position_j++] = datai[0];
+        position[position_j++] = datai[1];
+        position[position_j++] = datai[2];
+        geometry.vertices.push(new THREE.Vector3(datai[0], datai[1], datai[2]));
+      });
+      var indexs = new Uint16Array(this.model.tri.length * 3);
+      let index_j = 0;
+      this.model.tri.forEach((p) => {
+        const v0 = p[0] - 1;
+        const v1 = p[1] - 1;
+        const v2 = p[2] - 1;
+        indexs[index_j++] = v0;
+        indexs[index_j++] = v1;
+        indexs[index_j++] = v2;
+
+        var face = new THREE.Face3(v0, v1, v2);
+        geometry.faces.push(face);
+      });
+      // geometry.setIndex(new THREE.BufferAttribute(indexs, 1));
+      // geometry.setAttribute('position', new THREE.Float32BufferAttribute( position, 3 ));
+      this.geometrys.push(geometry);
+    },
+    /**
+     * 删除模型
+     */
+    clear() {
+      this.meshs.forEach((mesh) => {
+        this.scene.remove(mesh);
+      });
+      this.meshs = [];
+    },
+    /**
+     * 网格
+     */
+    mesh() {
+      this.loadingOpen();
+      this.geometrys.forEach((geometry) => {
+        var wf = new THREE.WireframeGeometry(geometry); //几何网格 只显示线
+        var mesh = new THREE.LineSegments(
+          wf,
+          new THREE.LineBasicMaterial({ color: 0x00ff00 })
+        ); //设置线颜色
+        this.meshs.push(mesh);
+        this.scene.add(mesh);
+      });
+      this.show();
+      this.loadingClose();
+    },
+    contour() {
+      this.loadingOpen();
+      this.geometrys.forEach((geometry) => {
+        var material = new THREE.MeshBasicMaterial({
+          vertexColors: THREE.VertexColors,
+          side: THREE.DoubleSide,
+        });
+        var mesh = new THREE.Mesh(geometry, material);
+        this.meshs.push(mesh);
+        this.scene.add(mesh);
+      });
+      this.show();
+      this.loadingClose();
+    },
+    hiden() {
+      this.container_show = false;
+    },
+    nhiden() {
+      this.container_show = true;
+    },
+    show() {
+      this.container_show = true;
+
+      var bBox = new THREE.Box3().setFromObject(this.scene);
+      var height = bBox.size().y;
+      var dist = height / (2 * Math.tan((this.camera.fov * Math.PI) / 360));
+      var pos = this.scene.position;
+
+      // fudge factor so the object doesn't take up the whole view
+      this.camera.position.set(pos.x, pos.y, dist * 1.5);
+      this.camera.lookAt(pos);
+      this.camera.updateMatrix();
+    },
+    /**
+     *  正面
+     */
+    positive(axis) {
+      if (axis == "x")
+        this.camera.position.set(this.camerahight_ele * this.camerahight, 0, 0);
+      if (axis == "y")
+        this.camera.position.set(0, this.camerahight_ele * this.camerahight, 0);
+      if (axis == "z")
+        this.camera.position.set(0, 0, this.camerahight_ele * this.camerahight);
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 反面
+     */
+    negative(axis) {
+      if (axis == "x")
+        this.camera.position.set(
+          -1 * this.camerahight_ele * this.camerahight,
+          0,
+          0
+        );
+      if (axis == "y")
+        this.camera.position.set(
+          0,
+          -1 * this.camerahight_ele * this.camerahight,
+          0
+        );
+      if (axis == "z")
+        this.camera.position.set(
+          0,
+          0,
+          -1 * this.camerahight_ele * this.camerahight
+        );
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 放大
+     */
+    large() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 + this.mufactor);
+        const sy = mesh.scale.y * (1 + this.mufactor);
+        const sz = mesh.scale.z * (1 + this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+    /**
+     * 缩小
+     */
+    small() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 - this.mufactor);
+        const sy = mesh.scale.y * (1 - this.mufactor);
+        const sz = mesh.scale.z * (1 - this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+    timedChunk(items, process, context, callback) {
+      var todo = items.concat(); //create a clone of the original
+      setTimeout(function () {
+        var start = +new Date();
+        do {
+          process.call(context, todo.shift());
+        } while (todo.length > 0 && +new Date() - start < 50);
+        if (todo.length > 0) {
+          setTimeout(arguments.callee, 25);
+        } else {
+          callback(items);
+        }
+      }, 25);
+    },
+  },
+};
+</script>

+ 891 - 0
src/views/index/HCFDLab/loads/VolumLoad.vue

@@ -0,0 +1,891 @@
+<template>
+  <div>
+    <div
+      ref="volume_boundary"
+      v-show="container_show"
+      style="text-align: center"
+    ></div>
+    <!-- contour -->
+    <div class="contour" v-show="vdivb">
+      <span class="movieControlTitle">Contour</span>
+      <form class="el-form">
+        <div class="el-form-item">
+          <label class="el-form-item__label" style="width: 120px"
+            >Contour Level</label
+          >
+          <div class="el-form-item__content" style="margin-left: 120px">
+            <div class="el-input">
+              <el-input-number
+                v-model="contourLevel"
+                :min="3"
+                :max="20"
+                label="contour level"
+              ></el-input-number>
+            </div>
+          </div>
+        </div>
+      </form>
+      <div class="divb" v-show="vdivb">
+        <h1>{{ bScalar }}</h1>
+        <div class="colorBlock" ref="colorBlock">
+          <li
+            v-for="(item, i) in coloras"
+            :key="i"
+            :style="{ height: height, background: item }"
+          >
+            <span>{{ nucolor[i] }}</span>
+          </li>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import * as THREE from "three";
+import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
+import { kgReplace, ugread } from "../Util.js";
+import { Loading } from 'element-ui';
+let loader = new THREE.FileLoader();
+export default {
+  data() {
+    return {
+      vdivb: false,
+      contourLevel: 3,
+      container_show: false,
+      scene: null, //场景
+      renderer: null, //渲染器
+      camera: null,
+      controls: null, // 相机 控制器
+      model: {},
+      meshs: [],
+      geometrys: [],
+      maxX: 0, //存储 物体 最大坐标 x
+      maxY: 0,
+      maxZ: 0,
+      minX: 0,
+      minY: 0,
+      minZ: 0,
+      camerahight: 5, //存储 相机 高度
+      camerahight_ele: 10, //相机高度放大倍数
+      mufactor: 0.2, //放大系数
+      urls: [],
+      contourLevel: 7,
+      baseColors: [],
+      urlLoadingstp: 0,
+      urlLoadings: [],
+      contourtype: "",
+      type: "",
+      clipPlanes: [new THREE.Plane(new THREE.Vector3(1, 0, 0), -3.72)],
+      pointsOfIntersection: new THREE.Geometry(),
+      pointMesh: null,
+      coloras: [], //颜色条
+      height: "30px", //颜色条初始高度
+      nucolor: [], //颜色条最值
+      scalMax: 0,
+      scalMin: 0,
+      bScalar: "p",
+      worker: null,
+      // loadingInstance,
+    };
+  },
+  created() {
+    this.worker = this.$worker.create([
+      {
+        message: "volum",
+        func(data, model) {
+          const lines = data.split("\n");
+          var pat3FloatsE = /(\-?\d+\.?[\d\-\+E]*)/g;
+          lines.forEach((line) => {
+            if (line.indexOf("title") == 0) {
+              //title
+              model.title = line
+                .replace(/title/, "")
+                .replace(/=/, "")
+                .replace(/\"/, "");
+            } else if (line.indexOf("variables") == 0) {
+              //variables
+              model.variables = line
+                .replace(/variables/, "")
+                .replace(/=/, "")
+                .trim()
+                .split(" ");
+            } else if (line.indexOf("zone") == 0) {
+              //zone
+              let zone = {};
+              zone.variablesMap = new Map();
+              model.variables.forEach((variable) => {
+                zone.variablesMap.set(variable, []);
+              });
+              model.zones.push(zone);
+              let vs = line
+                .replace(/zone/, "")
+                .replace(/\"/, "")
+                .trim()
+                .split(",");
+              zone.t = vs[0].split("=")[1];
+              zone.solutiontime = Number(vs[1].split("=")[1]);
+              zone.strandid = Number(vs[2].split("=")[1]);
+              zone.n = Number(vs[3].split("=")[1]);
+              zone.e = Number(vs[4].split("=")[1]);
+              zone.f = vs[5].split("=")[1];
+              zone.et = vs[6].split("=")[1];
+              zone.datajs = [];
+              zone.cells = [];
+            } else {
+              //当前的zone
+              let zone = model.zones[model.zones.length - 1];
+              let result;
+              let datas = [];
+              while ((result = pat3FloatsE.exec(line)) != null) {
+                datas.push(Number(result[1]));
+              }
+              let dataj = [];
+              datas.forEach((date) => {
+                let flag = false;
+                for (let j = 0; j < model.variables.length; j++) {
+                  let variable = model.variables[j];
+                  let cellData = zone.variablesMap.get(variable);
+                  if (cellData.length < zone.n) {
+                    cellData.push(date);
+                    flag = true;
+                    break;
+                  }
+                }
+                if (!flag && zone.datajs.length < zone.e) {
+                  dataj.push(date);
+                }
+              });
+              if (dataj.length > 1) {
+                zone.datajs.push(dataj);
+              }
+            }
+          });
+          return model;
+        },
+      },
+      {
+        message: "initGeometry",
+        func(model) {
+          model.zones.forEach((zone) => {
+            var cells = [];
+            let position = [];
+            for (let i = 0; i < zone.n; i++) {
+              position.push(zone.variablesMap.get("x")[i]);
+              position.push(zone.variablesMap.get("y")[i]);
+              position.push(zone.variablesMap.get("z")[i]);
+            }
+            zone.datajs.forEach((inds) => {
+              var i0, i1, i2;
+              for (let i = 0; i < inds.length - 2; i++) {
+                i0 = parseInt(inds[i] - 1);
+                for (var j = i + 1; j < inds.length - 1; j++) {
+                  i1 = parseInt(inds[j] - 1);
+                  for (var k = j + 1; k < inds.length; k++) {
+                    i2 = parseInt(inds[k] - 1);
+                    cells.push(i0, i1, i2);
+                  }
+                }
+              }
+            });
+            zone.cells = cells;
+            zone.points = position;
+            zone.position = position;
+          });
+          return model;
+        },
+      },
+       {
+        message: "countorColor",
+        func(elem,model) {
+          let scalarsfTemp = [];
+          model.zones.forEach((zone) => {
+            if (scalarsfTemp.length == 0) {
+              scalarsfTemp = zone.variablesMap.get(elem);
+            } else {
+              scalarsfTemp.concat(zone.variablesMap.get(elem));
+            }
+          });
+          let scalMax = Math.max.apply(null,scalarsfTemp);
+          let scalMin = Math.min.apply(null,scalarsfTemp);
+          return {
+              scalMin:scalMin,
+              scalMax:scalMax
+          };
+        },
+      },
+    ]);
+  },
+  destroyed() {
+    this.worker = null;
+    this.loadingClose();
+  },
+  watch: {
+    renderer_hight: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+    renderer_width: {
+      handler(newVal) {
+        let wi = Math.min(this.renderer_width, this.renderer_hight);
+        this.renderer.setSize(wi, wi); //渲染器大小
+      },
+      deep: true,
+      immediate: false,
+    },
+    urlLoadingstp: {
+      //文件全部解析完成显示
+      handler(newVal) {
+        // console.log(this.urlLoadings);
+        let allFlag = true;
+        for (let i = 0; i < this.urlLoadings.length; i++) {
+          if (!this.urlLoadings[i]) {
+            allFlag = false;
+            break;
+          }
+        }
+        if (allFlag) {
+            this.worker
+                .postAll([
+                  {
+                    message: "initGeometry",
+                    args: [this.model],
+                  },
+                ])
+                .then((res) => {
+                  this.model = res[0];
+                if (this.type == 1) {
+                    //mesh
+                    this.mesh(this.contourtype);
+                } else if (this.type == 2) {
+                    //countor
+                    this.contour(this.contourtype);
+                }
+                this.loadingClose();
+                });
+        //   this.intiGeometry();
+          
+        }
+      },
+      deep: true,
+    },
+  contourLevel: {
+    handler(newVal) {
+      this.initBaseColors();
+      this.getmax(this.scalMin, this.scalMax);
+      this.$emit("showVolume");
+    },
+    deep: true,
+    immediate: false,
+  },
+  },
+  props: {
+    //传入参数
+    renderer_hight: Number,
+    renderer_width: Number,
+  },
+  mounted() {
+    this.initScene();
+    this.initBaseColors();
+    // this.loadingOpen();
+  },
+  methods: {
+    loadingOpen() {
+        let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+    },
+    loadingClose() {
+      let loadingInstance = Loading.service({
+          lock: true,
+          text: 'Loading',
+          spinner: 'el-icon-loading',
+          background: 'rgba(0, 0, 0, 0.7)'
+        });
+      loadingInstance.close();
+    },
+    addz() {
+      this.clipPlanes[0].constant = this.clipPlanes[0].constant + 0.5;
+      this.scene.remove(this.pointMesh);
+      this.slice("p");
+      this.renderer.render(this.scene, this.camera);
+    },
+    lessz() {
+      this.clipPlanes[0].constant = this.clipPlanes[0].constant - 0.5;
+      this.scene.remove(this.pointMesh);
+      this.slice("p");
+      this.renderer.render(this.scene, this.camera);
+    },
+    isShow() {
+      return this.container_show;
+    },
+    getmax(minScalar, maxScalar) {
+      this.nucolor = [];
+      let ascalar = (maxScalar - minScalar) / this.contourLevel;
+      for (let index = 1; index <= this.contourLevel; index++) {
+        let maxten = (minScalar + index * ascalar).toExponential(2);
+        this.nucolor.unshift(maxten);
+      }
+      this.nucolor.push(minScalar.toExponential(2));
+      //   console.log(this.nucolor);
+    },
+    getColor(minScalar, maxScalar, scalar) {
+      let a_scalar = (maxScalar - minScalar) / this.contourLevel;
+      for (let index = 0; index < this.contourLevel; index++) {
+        let ten = minScalar + index * a_scalar;
+        if (Math.max(ten, scalar) == ten) {
+          let col = this.baseColors[index];
+          return col;
+        }
+      }
+
+      return this.baseColors[this.contourLevel - 1];
+    },
+    initBaseColors() {
+      this.coloras = [];
+      this.baseColors = [];
+      let minColor = 0;
+      let maxColor = 240;
+      this.baseColors.push(this.colorHex(this.hsltorgb(minColor, 100.0, 50.0)));
+      let a_color = Math.round((maxColor - minColor) / this.contourLevel);
+      for (let index = 1; index < this.contourLevel - 1; index++) {
+        this.baseColors.push(
+          this.colorHex(this.hsltorgb(minColor + a_color * index, 100.0, 50.0))
+        );
+      }
+      this.baseColors.push(this.colorHex(this.hsltorgb(maxColor, 100.0, 50.0)));
+      this.baseColors = this.baseColors.reverse();
+      this.coloras.push("#D7DCE7");
+    },
+    hsltorgb(h, s, l) {
+      var h = h / 360;
+      var s = s / 100;
+      var l = l / 100;
+      var rgb = [];
+
+      if (s == 0) {
+        rgb = [Math.round(l * 255), Math.round(l * 255), Math.round(l * 255)];
+      } else {
+        var q = l >= 0.5 ? l + s - l * s : l * (1 + s);
+        var p = 2 * l - q;
+        var tr = (rgb[0] = h + 1 / 3);
+        var tg = (rgb[1] = h);
+        var tb = (rgb[2] = h - 1 / 3);
+        for (var i = 0; i < rgb.length; i++) {
+          var tc = rgb[i];
+          if (tc < 0) {
+            tc = tc + 1;
+          } else if (tc > 1) {
+            tc = tc - 1;
+          }
+          switch (true) {
+            case tc < 1 / 6:
+              tc = p + (q - p) * 6 * tc;
+              break;
+            case 1 / 6 <= tc && tc < 0.5:
+              tc = q;
+              break;
+            case 0.5 <= tc && tc < 2 / 3:
+              tc = p + (q - p) * (4 - 6 * tc);
+              break;
+            default:
+              tc = p;
+              break;
+          }
+          rgb[i] = Math.round(tc * 255);
+        }
+      }
+      return this.colorHex("rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")");
+    },
+    colorHex(color) {
+      // RGB颜色值的正则
+      var reg = /^(rgb|RGB)/;
+      if (reg.test(color)) {
+        var strHex = "0x";
+        var strHex2 = "#";
+        // 把RGB的3个数值变成数组
+        var colorArr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
+        // 转成16进制
+        for (var i = 0; i < colorArr.length; i++) {
+          var hex = Number(colorArr[i]).toString(16);
+          if (hex === "0") {
+            hex += hex;
+          }
+          strHex += hex.toUpperCase();
+          strHex2 += hex;
+        }
+        this.coloras.push(strHex2);
+
+        return Number(strHex);
+      } else {
+        return Number(color);
+      }
+    },
+    init() {
+      this.scene = new THREE.Scene(); //场景
+      this.renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); //渲染器
+      this.camera = new THREE.PerspectiveCamera(20, this.renderer_width/this.renderer_hight, 0.2, 10000);
+      this.controls = new OrbitControls(this.camera, this.renderer.domElement); // 相机 控制器
+    },
+    initScene() {
+      if (this.scene == null) {
+        this.init();
+      }
+      // let wi = Math.min(this.renderer_width, this.renderer_hight);
+      this.renderer.setSize(this.renderer_width, this.renderer_hight); //渲染器大小
+      this.$refs.volume_boundary.appendChild(this.renderer.domElement);
+      let _this = this;
+      var animate = function () {
+        //动画
+        requestAnimationFrame(animate);
+        _this.renderer.render(_this.scene, _this.camera);
+      };
+      animate();
+      // var helpers = new THREE.Group();//实例化辅助对象组
+      // helpers.add(new THREE.AxesHelper(5));//添加坐标系控件长度为200
+      // this.scene.add(helpers);//添加到场景
+    },
+    loadVolum(_urls, type, contourtype) {
+     
+      var loader = new THREE.FileLoader();
+      var _this = this;
+       _this.loadingOpen();
+      _this.meshs = [];
+      _this.geometrys = [];
+      _this.urlLoadings = [];
+      _this.urlLoadingstp = 1;
+      _this.urls = _urls;
+      _this.contourtype = contourtype;
+      _this.type = type;
+      _this.model.title = "";
+      _this.model.variables = [];
+      _this.model.zones = [];
+      _this.urls.forEach((url) => {
+      _this.urlLoadings.push(false);
+      });
+      let i = 0;
+      _this.urls.forEach((url) => {
+        loader.load(
+          url,
+          // onLoad回调
+          function (data) {
+            // _this.volum(data);
+          _this.worker
+          .postAll([
+            {
+              message: "volum",
+              args: [data, _this.model],
+            },
+          ])
+          .then((res) => {
+            // _this.model = res[0];
+            _this.model.title=res[0].title;
+            _this.model.variables=res[0].variables;
+            if(_this.model.zones){
+              _this.model.zones.push(res[0].zones[0]);
+            }else{
+              _this.model.zones=[]
+            }
+            
+            // console.log(_this.model)
+            _this.$emit("setVolumScalars", _this.model.variables);
+             _this.urlLoadings[i]=true;
+            _this.urlLoadingstp++;
+            i++;
+          });
+          },
+          // onProgress回调
+          function (xhr) {
+            // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+          },
+          // onError回调
+          function (err) {
+            console.error("An error happened");
+            this.loadingClose();
+          }
+        );
+      });
+    },
+    
+
+    /**
+     * 只加载不显示
+     */
+    loadVolumHiden(_urls, type, contourtype) {
+      var _this = this;
+      _this.meshs = [];
+      _this.geometrys = [];
+      _this.urlLoadings = [];
+      _this.urlLoadingstp = 1;
+      _this.urls = _urls;
+      _this.contourtype = contourtype;
+      _this.type = type;
+      _this.model.title = "";
+      _this.model.variables = [];
+      _this.model.zones = [];
+      _this.urls.forEach((url) => {
+        _this.urlLoadings.push(false);
+      });
+      let i = 0;
+      _this.urls.forEach((url) => {
+        var loader = new THREE.FileLoader();
+        loader.load(
+          url,
+          // onLoad回调
+          function (data) {
+       
+            // _this.volum(data)
+            // _this.$emit("setVolumScalars",_this.model.variables);
+            // // if(!showOr){
+            // //     _this.urlLoadings[i]=true;
+            // // }
+            // _this.urlLoadingstp++;
+            // i++;
+          },
+          // onProgress回调
+          function (xhr) {
+            // console.log((xhr.loaded / xhr.total * 100) + '% loaded');
+          },
+          // onError回调
+          function (err) {
+            console.error("An error happened");
+          }
+        );
+      });
+    },
+    
+    intiGeometry() {
+      let _this = this;
+      _this.model.zones.forEach((zone) => {
+        var cells = [];
+        let position = [];
+        for (let i = 0; i < zone.n; i++) {
+          // _this.maxX = zone.variablesMap.get("x")[i]> _this.maxX? zone.variablesMap.get("x")[i] : _this.maxX
+          // _this.maxY = zone.variablesMap.get("y")[i]> _this.maxY? zone.variablesMap.get("y")[i] : _this.maxY
+          // _this.maxZ = zone.variablesMap.get("z")[i]> _this.maxZ? zone.variablesMap.get("z")[i] : _this.maxZ
+          // _this.minX = zone.variablesMap.get("x")[i]< _this.minX? zone.variablesMap.get("x")[i] : _this.minX
+          // _this.minY = zone.variablesMap.get("y")[i]< _this.minY? zone.variablesMap.get("y")[i] : _this.minY
+          // _this.minZ = zone.variablesMap.get("z")[i]< _this.minZ? zone.variablesMap.get("z")[i] : _this.minZ
+          position.push(zone.variablesMap.get("x")[i]);
+          position.push(zone.variablesMap.get("y")[i]);
+          position.push(zone.variablesMap.get("z")[i]);
+        }
+        zone.datajs.forEach((inds) => {
+          var i0, i1, i2;
+          for (let i = 0; i < inds.length - 2; i++) {
+            i0 = parseInt(inds[i] - 1);
+            for (var j = i + 1; j < inds.length - 1; j++) {
+              i1 = parseInt(inds[j] - 1);
+              for (var k = j + 1; k < inds.length; k++) {
+                i2 = parseInt(inds[k] - 1);
+                cells.push(i0, i1, i2);
+              }
+            }
+          }
+        });
+        zone.cells = cells;
+        zone.points = position;
+        zone.position = new THREE.Float32BufferAttribute(position, 3);
+      });
+    },
+    //截面
+    slice(elem) {
+      this.bScalar = elem;
+      this.pointsOfIntersection = new THREE.Geometry();
+      let colors = [];
+      let pointScalar = [];
+
+      this.model.zones.forEach((zone) => {
+        let scalarsf = zone.variablesMap.get(elem);
+        for (let i = 0; i < zone.cells.length; i++) {
+          let a, b, c, lineAB, lineBC, lineCA;
+          a = new THREE.Vector3(
+            zone.points[zone.cells[i] * 3],
+            zone.points[zone.cells[i] * 3 + 1],
+            zone.points[zone.cells[i] * 3 + 2]
+          );
+          b = new THREE.Vector3(
+            zone.points[zone.cells[i + 1] * 3],
+            zone.points[zone.cells[i + 1] * 3 + 1],
+            zone.points[zone.cells[i + 1] * 3 + 2]
+          );
+          c = new THREE.Vector3(
+            zone.points[zone.cells[i + 2] * 3],
+            zone.points[zone.cells[i + 2] * 3 + 1],
+            zone.points[zone.cells[i + 2] * 3 + 2]
+          );
+          lineAB = new THREE.Line3(a, b);
+          lineBC = new THREE.Line3(b, c);
+          lineCA = new THREE.Line3(c, a);
+          let scalarAB = scalarsf[zone.cells[i]];
+          let scalarBC = scalarsf[zone.cells[i + 1]];
+          let scalarCA = scalarsf[zone.cells[i + 2]];
+          this.setPointOfIntersection(
+            scalarAB,
+            lineAB,
+            this.clipPlanes[0],
+            pointScalar
+          );
+          this.setPointOfIntersection(
+            scalarBC,
+            lineBC,
+            this.clipPlanes[0],
+            pointScalar
+          );
+          this.setPointOfIntersection(
+            scalarCA,
+            lineCA,
+            this.clipPlanes[0],
+            pointScalar
+          );
+          i = i + 2;
+        }
+      });
+      this.scalMax = Math.max(pointScalar);
+      this.scalMin = Math.min(pointScalar);
+      this.getmax(this.scalMin, this.scalMax);
+
+      pointScalar.forEach((scalar) => {
+        let hexColor = this.getColor(this.scalMin, this.scalMax, scalar);
+        let color = new THREE.Color();
+        color.setHex(hexColor);
+        this.pointsOfIntersection.colors.push(color);
+      });
+      var pointsMaterial = new THREE.PointsMaterial({
+        size: 0.5,
+        vertexColors: THREE.VertexColors,
+      });
+      var points = new THREE.Points(this.pointsOfIntersection, pointsMaterial);
+      this.pointMesh = points;
+      this.scene.add(points);
+      this.meshs.push(points);
+      this.show();
+    },
+    setPointOfIntersection(scalar, line, plane, pointScalar) {
+      var pointOfIntersection = new THREE.Vector3();
+      pointOfIntersection = plane.intersectLine(line, pointOfIntersection);
+      if (pointOfIntersection) {
+        pointScalar.push(scalar);
+        this.pointsOfIntersection.vertices.push(pointOfIntersection.clone());
+      }
+    },
+    /**
+     * 删除模型
+     */
+    clear() {
+      this.meshs.forEach((mesh) => {
+        this.scene.remove(mesh);
+      });
+      this.meshs = [];
+      this.geometrys = [];
+    },
+    /**
+     * 网格
+     */
+    mesh() {
+      this.loadingOpen();
+      this.model.zones.forEach((zone) => {
+        var geometry = new THREE.BufferGeometry();
+        geometry.setIndex(zone.cells);
+        geometry.setAttribute("position", new THREE.Float32BufferAttribute(zone.position, 3));
+        var wf = new THREE.WireframeGeometry(geometry); //几何网格 只显示线
+        var mesh = new THREE.LineSegments(
+          wf,
+          new THREE.LineBasicMaterial({ color: 0x00ff00 })
+        ); //设置线颜色
+        this.meshs.push(mesh);
+        this.scene.add(mesh);
+      });
+      this.show();
+      this.loadingClose();
+    },
+    contour(elem) {
+      this.loadingOpen();
+      this.bScalar = elem;
+      this.worker
+          .postAll([
+            {
+              message: "countorColor",
+              args: [elem,this.model],
+            },
+          ])
+          .then((res) => {
+            this.scalMin=res[0].scalMin;
+            this.scalMin=res[0].scalMax;
+            this.getmax(this.scalMin, this.scalMax);
+            this.model.zones.forEach((zone) => {
+              let colors = [];
+              let scalarsf = zone.variablesMap.get(elem);
+              for (let i = 0; i < zone.n; i++) {
+                let scalar = zone.variablesMap.get(elem)[i];
+                let hexColor = this.getColor(this.scalMin, this.scalMax, scalar);
+                let color = new THREE.Color();
+                color.setHex(hexColor);
+                colors.push(color.r);
+                colors.push(color.g);
+                colors.push(color.b);
+              }
+              var geometry = new THREE.BufferGeometry();
+              geometry.setAttribute(
+                "color",
+                new THREE.Float32BufferAttribute(colors, 3)
+              );
+              geometry.setIndex(zone.cells);
+              geometry.setAttribute("position", new THREE.Float32BufferAttribute(zone.position, 3));
+              var material = new THREE.MeshBasicMaterial({
+                vertexColors: THREE.VertexColors,
+                side: THREE.DoubleSide,
+              });
+              var mesh = new THREE.Mesh(geometry, material);
+              this.meshs.push(mesh);
+
+              this.scene.add(mesh);
+            });
+            this.show();
+            this.loadingClose();
+          });
+    
+    },
+    hiden() {
+      this.container_show = false;
+      this.vdivb = false;
+    },
+    nhiden() {
+      this.container_show = true;
+      this.vdivb = false;
+    },
+    show() {
+     
+      this.container_show = true;
+      this.renderer.localClippingEnabled = true;
+      // this.meshs.forEach(mesh=>{
+      //     mesh.position.x = -1*(this.maxX+this.minX) / 2;//设置网格模型几何中心y坐标
+      //     mesh.position.y = -1*(this.maxY+this.minY)  / 2;//设置网格模型几何中心y坐标
+      //     mesh.position.z = -1*(this.maxZ+this.minZ) / 2;//设置网格模型几何中心y坐标
+      // });
+      // this.camerahight=Math.max(
+      //     Math.abs(this.maxX),
+      //     Math.abs(this.maxY),
+      //     Math.abs(this.maxZ),
+      //     Math.abs(this.minX),
+      //     Math.abs(this.minY),
+      //     Math.abs(this.minZ),
+      // )
+      // this.controls.target.set(0, 0, 0);//鼠标拖动  已0,0,0 点旋转
+      // this.controls.update();
+      // this.camera.position.set(this.camerahight_ele*this.camerahight, 0, 0);//
+      // this.camera.lookAt(this.scene.position);
+      // this.camera.updateMatrix();
+      var bBox = new THREE.Box3().setFromObject(this.scene);
+      var height = bBox.size().y;
+      var dist = height / (2 * Math.tan((this.camera.fov * Math.PI) / 360));
+      var pos = this.scene.position;
+
+      // fudge factor so the object doesn't take up the whole view
+      this.camera.position.set(pos.x, pos.y, dist * 1.5);
+      this.camera.lookAt(pos);
+      this.camera.updateMatrix();
+    },
+
+    /**
+     *  正面
+     */
+    positive(axis) {
+      if (axis == "x")
+        this.camera.position.set(this.camerahight_ele * this.camerahight, 0, 0);
+      if (axis == "y")
+        this.camera.position.set(0, this.camerahight_ele * this.camerahight, 0);
+      if (axis == "z")
+        this.camera.position.set(0, 0, this.camerahight_ele * this.camerahight);
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 反面
+     */
+    negative(axis) {
+      if (axis == "x")
+        this.camera.position.set(
+          -1 * this.camerahight_ele * this.camerahight,
+          0,
+          0
+        );
+      if (axis == "y")
+        this.camera.position.set(
+          0,
+          -1 * this.camerahight_ele * this.camerahight,
+          0
+        );
+      if (axis == "z")
+        this.camera.position.set(
+          0,
+          0,
+          -1 * this.camerahight_ele * this.camerahight
+        );
+      this.camera.lookAt(this.scene.position);
+      this.camera.updateMatrix();
+    },
+    /**
+     * 放大
+     */
+    large() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 + this.mufactor);
+        const sy = mesh.scale.y * (1 + this.mufactor);
+        const sz = mesh.scale.z * (1 + this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+    /**
+     * 缩小
+     */
+    small() {
+      this.meshs.forEach((mesh) => {
+        const sx = mesh.scale.x * (1 - this.mufactor);
+        const sy = mesh.scale.y * (1 - this.mufactor);
+        const sz = mesh.scale.z * (1 - this.mufactor);
+        mesh.scale.set(sx, sy, sz);
+      });
+    },
+  },
+};
+</script>
+<style scoped>
+.el-tag {
+  width: 25px;
+  height: 35px;
+  display: block;
+  border: none;
+  border-radius: 0%;
+}
+.el-tag--light {
+  color: #333;
+}
+.divb {
+  padding: 15px;
+}
+.colorBlock li {
+  width: 30px;
+  white-space: nowrap;
+  text-indent: 35px;
+}
+.colorBlock span {
+  position: relative;
+  top: -5px;
+}
+.contour {
+  position: absolute;
+  top: 30px;
+  left: 10px;
+}
+.contour .el-input__inner {
+  height: 30px;
+  text-align: center;
+}
+</style>

+ 363 - 0
src/views/index/HCFDLab/loads/transformtool.vue

@@ -0,0 +1,363 @@
+<template>
+<div>
+
+    <div :class="tcss" v-show="isVShow">
+              <ul>
+                  <li class="btnicon"> <span class="ison colort" @click="inthetaclick()"><i class="el-icon-refresh" ></i></span></li>
+                <li class="btnicon"> <span class="ison colort"  @click="inphiclick()"><i class="el-icon-refresh-right" ></i></span></li>
+                    <!-- <li> 
+                    <el-image  class="img14"  :src="r_e "  @click="inthetaclick()"></el-image> 
+                 </li>  -->
+                    <!-- <li> 
+                    <el-image  class="img13"  :src="x_z "  @click="inphiclick()"></el-image> 
+                 </li>  -->
+              
+                <li >
+                    <el-image v-if ="xyzsIsN==true" :src="n_x"></el-image>
+                    <el-image class="img1" v-else :src="x" @click="XYZclick('X+')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_x_"></el-image>
+                    <el-image class="img2" v-else :src="x_" @click="XYZclick('X-')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_y"></el-image>
+                    <el-image  class="img3" v-else :src="y" @click="XYZclick('Y+')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_y_"></el-image>
+                    <el-image class="img4" v-else :src="y_" @click="XYZclick('Y-')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_z"></el-image>
+                    <el-image class="img5" v-else :src="z" @click="XYZclick('Z+')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_z_"></el-image>
+                    <el-image  class="img6" v-else :src="z_" @click="XYZclick('Z-')"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_search"></el-image>
+                    <el-image class="img7" v-else :src="search"></el-image>
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_max"></el-image>
+                    <el-image class="img8" v-else :src="max" @click="scaleclick(1.1)"></el-image>                   
+                </li>
+                <li>
+                    <el-image v-if ="xyzsIsN==true" :src="n_min"></el-image>
+                    <el-image  class="img9" v-else :src="min" @click="scaleclick(0.9)"></el-image>
+                </li>
+                <li>
+                     <el-image v-if ="monitorIsN==true" :src="n_monitor"></el-image>
+                    <el-image  class="img10" v-else :src="monitor" @click="$parent.getbtnmonitor"></el-image>
+                </li>
+                <li>
+                     <el-image v-if ="boundaryIsN==true" :src="n_boundary" ></el-image>
+                    <el-image class="img11" v-else :src="boundary" @click="$parent.btnshowboundary"></el-image>
+                </li>
+                <li>
+                     <el-image v-if ="volumIsN==true" :src="n_volum"></el-image>
+                    <el-image  class="img12" v-else :src="volum" @click="$parent.btnVolumeshow"></el-image>
+                </li>
+                    <!-- <li class="btnicon"> <span class="ison colort2" @click="$parent.selectProjectOK"><i class="el-icon-menu" ></i></span></li> -->
+                   <li> 
+                    <el-image  class="img13"  :src="w_g " @click="$parent.selectProjectOK"></el-image> 
+                 </li>
+               <!-- <li class="btnicon"> <span class="ison"  @click="$parent.selectProjectOK"> 
+                  <svg class="icon" aria-hidden="true">
+                    <use :xlink:href="`#icon-changfangti`" />
+                  </svg>
+                  </span></li> -->
+              </ul>
+               <div class="controls">
+         
+        </div>
+    </div>
+    </div>
+</template>
+<script>
+import n_min from "@/assets/3d_images/-b-.png";//不可点击缩小
+import min from "@/assets/3d_images/b-.png";//可点击缩小
+
+import n_max from "@/assets/3d_images/-b+.png";//不可点击放大
+import max from "@/assets/3d_images/b+.png";//可点击放大
+
+import n_boundary from "@/assets/3d_images/-boundary.png";//不可点boundary
+import boundary from "@/assets/3d_images/boundary.png";//可点boundary
+
+import n_volum from "@/assets/3d_images/-volum.png";//不可点volum
+import volum from "@/assets/3d_images/volum.png";//可点volum
+
+import n_monitor from "@/assets/3d_images/-monitor.png";//不可点volum
+import monitor from "@/assets/3d_images/monitor.png";//可点volum
+
+import n_search from "@/assets/3d_images/-s.png";//不可点查询
+import search from "@/assets/3d_images/s.png";//可点查询
+
+import n_x_ from "@/assets/3d_images/-x-.png";//x不可点负向旋转
+import x_ from "@/assets/3d_images/x-.png";//x可点负向旋转
+import n_x from "@/assets/3d_images/-x+.png";//x不可点正向旋转
+import x from "@/assets/3d_images/x+.png";//x可点正向旋转
+
+import n_y_ from "@/assets/3d_images/-y-.png";//y不可点负向旋转
+import y_ from "@/assets/3d_images/y-.png";//y可点负向旋转
+import n_y from "@/assets/3d_images/-y+.png";//y不可点正向旋转
+import y from "@/assets/3d_images/y+.png";//y可点正向旋转
+
+import n_z_ from "@/assets/3d_images/-z-.png";//z不可点负向旋转
+import z_ from "@/assets/3d_images/z-.png";//z可点负向旋转
+import n_z from "@/assets/3d_images/-z+.png";//z不可点正向旋转
+import z from "@/assets/3d_images/z+.png";//z可点正向旋转
+import w_g from "@/assets/3d_images/wg.png";
+import r_e from "@/assets/3d_images/re.png";
+import x_z from "@/assets/3d_images/xuz.png";
+import { request } from "@/utils/request";
+
+export default {
+    props:{
+      projectId:String,
+        servertype:String,
+       srsurl:String,
+       wstep:String,
+       bStep:Number,
+       vStep:Number,
+
+     },
+    data(){
+        return {
+             intheta:0,
+            inphi:0,
+           step:'0',
+           //id:'81797100f859485e8aad9492a18904a7',
+           r_e,
+           x_z ,
+             w_g,
+            n_min:n_min,
+            min:min,
+            n_max:n_max,
+            max:max,
+            n_boundary:n_boundary,
+            boundary:boundary,
+            n_volum:n_volum,
+            volum:volum,
+            n_monitor:n_monitor,
+            monitor:monitor,
+            n_search:n_search,
+            search:search,
+            n_x_:n_x_,
+            x_:x_,
+            n_x:n_x,
+            x:x,
+            n_y_:n_y_,
+            y_:y_,
+            n_y:n_y,
+            y:y,
+            n_z_:n_z_,
+            z_:z_,
+            n_z:n_z,
+            z:z,
+            xyzsIsN:false,//3d控制是否关闭
+            boundaryIsN:false,
+            monitorIsN:false,
+            volumIsN:false,            
+            isVShow:true,
+            tcss:"asideTag2"
+        }
+    },
+    methods:{
+        changeCssBig(){
+            this.tcss="asideTag"
+        },
+        // 图片切换
+        iconshow(val){
+          console.log(val)
+        
+        },
+// xu
+  inthetaclick(){
+    this.$parent.activecleer();
+        if(this.intheta>=360||  this.inphi>=360){
+          this.intheta=0;
+      
+        }else{
+          this.intheta+=30;
+        }
+     this.rotateclick( this.intheta,0);
+     
+      },
+        inphiclick(){
+          this.$parent.activecleer();
+          if(this.intheta>=360||  this.inphi>=360){
+           this.inphi=0;
+        }else{
+           this.inphi+=30;
+        }
+     this.rotateclick(0,this.inphi);
+     
+      },
+      rotateclick(X,Y){
+      if(this.servertype=='boundary'){
+        this.step=this.bStep;
+      }else if(this.servertype=='volume'){
+            this.step=this.vStep;
+      }
+      else{
+        this.step=0;
+      }
+             let params = {
+        transCode: "VDT0001",
+        projectId: this.projectId,
+        projectType: "hcfd",
+         fileType:this.servertype,
+        step:this.step,
+        intheta:X,
+         inphi:Y,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+        // this.$$emit("loadRendering",this.projectId)
+        })
+        .catch((err) => {
+            console.log(err);
+        }); 
+      },
+        // 旋转接口
+XYZclick(typexyz){
+this.$parent.activecleer();
+if(this.servertype=='boundary'){
+        this.step=this.bStep;
+      }else if(this.servertype=='volume'){
+            this.step=this.vStep;
+      }
+      else{
+        this.step=0;
+      }
+          let params = {
+        transCode: "VDT0002",
+        projectId:this.projectId,
+      //projectId:'81797100f859485e8aad9492a18904a7',
+        projectType: "hcfd",
+        fileType:this.servertype,
+        step:this.step,
+       type:typexyz,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+        })
+        .catch((err) => {
+            console.log(err);
+
+        }); 
+      },
+        changeCssSmall(){
+            this.tcss="asideTag2"
+        },
+          changeCssSmall(){
+            this.tcss="asideTag2"
+        },
+    // 缩放接口
+     scaleclick(val){
+      // this.$parent.clearserver();
+      if(this.servertype=='boundary'){
+        this.step=this.bStep;
+      }else if(this.servertype=='volume'){
+            this.step=this.vStep;
+      }
+      else{
+        this.step=0;
+      }
+        let params = {
+        transCode: "VDT0003",
+        projectId:this.projectId,
+        projectType: "hcfd",
+        fileType:this.servertype,
+        step:this.step,
+       zoom:val,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+        })
+        .catch((err) => {
+            console.log(err);
+
+        }); 
+      },
+    }
+}
+// 
+</script>
+<style lang="scss">
+.asideTag {
+    position: absolute;
+    right: 10px;
+    top: -14px;
+     z-index: 2000;
+    height: 30px;
+}
+.asideTag li {
+ width: 32px;
+    height: 32px;
+  border-radius: 1px;
+  margin-bottom: 1px;
+  overflow: hidden;
+  // border:2px solid transparent;
+  // box-sizing:border-box;
+}
+.btnicon .el-button.is-circle{
+  border-radius: 5px;
+    padding: 6px;
+    margin-top: 1px;
+}
+.asideTag2 {
+  position: absolute;
+  left: 94%;
+  float: right;
+  top:28%;
+    z-index: 2000;
+}
+.img13{
+      margin-top: -1px;
+    border-radius: 6px;
+}
+.asideTag2 li {
+  width: 40px;
+  height: 40px;
+  border-radius: 1px;
+  margin-bottom: 1px;
+  
+}
+.asideTag li:hover{
+   border: 2px solid #fff;
+}
+.ison{
+    width: 28px;
+    height: 28px;
+    line-height: 28px;
+  text-align: center;
+
+  display: inline-block;
+  border-radius: 5px;
+}
+.colort{
+    background-color: #F56C6C;
+    border-color: #F56C6C;
+}
+.colort2{
+    background-color: #393939;
+    border-color: #393939;
+}
+.ison i{
+color: #FFF;
+}
+
+</style>

+ 110 - 0
src/views/index/HCFDLab/websocket.vue

@@ -0,0 +1,110 @@
+<template>
+    <div>
+
+  <div class="test">
+  </div>
+    </div>
+</template>
+
+<script>
+import Vue from 'vue' // 引入vue
+import $ from 'jquery' ;
+import store from "@/store";
+import { request } from "@/utils/request";
+import { ElMessage } from '@/utils/message.js'
+import { log } from 'three';
+let Message = new ElMessage()
+export default {
+     props:{
+        projectId:String,
+        servertype:String,
+       srsurl:String,
+       wstep:String,
+       bStep:Number,
+     },
+    data() {
+        return {
+                  websock: null,
+                  state:'',
+                  SRSUrl:''
+        }
+    },
+    created() {
+      // this.initWebSocket();
+    },
+    destroyed() {
+      this.websock.close() //离开路由之后断开websocket连接
+    },
+    methods: {
+    initWebSocket(){ //初始化weosocket
+        const wsuri = "ws://192.168.0.44:8082/websocket?vdioId="+this.projectId+this.servertype+this.bStep;
+        this.websock = new WebSocket(wsuri);
+        this.websock.onmessage = this.websocketonmessage;
+        this.websock.onopen = this.websocketonopen;
+        this.websock.onerror = this.websocketonerror;
+        this.websock.onclose = this.websocketclose;
+      },
+      websocketonopen(e){ //连接建立之后执行send方法发送数据
+      let params = {
+        transCode: "VD0001",
+        projectId:this.project.projectId,
+        projectType: "hcfd",
+        fileType:this.servertype,
+        step:this.bStep,
+        flagDown:'1',
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+      this.$refs.childSRS.playVideo(res.SRSUrl+'.flv')
+           
+        })
+        .catch((err) => {
+            console.log(err);
+        }); 
+      },
+      websocketonerror(){//连接建立失败重连
+        this.initWebSocket();
+        console.log("连接错误")
+      },
+      websocketonmessage(e){ //数据接收
+         const redata = JSON.parse(e.data);
+          var state=redata.state;
+          console.log( state)
+          if(state=='success'){
+            let params = { 
+        transCode: "VD0002",
+        projectId: this.project.projectId,
+        projectType: "hcfd",
+         fileType:this.servertype,
+        step:this.bStep,
+        lesseeId: this.$store.getters.lesseeId
+      };
+      this.loading = true;
+      request(params)
+        .then((res) => {
+            console.log(res);
+           
+        })
+        .catch((err) => {});
+          }else{
+            console.log(22222)
+          }
+         
+      },
+      websocketsend(Data){//数据发送
+        this.websock.send(Data);
+      },
+      websocketclose(e){  //关闭
+        console.log('断开连接',e);
+      },
+ },
+  
+
+}
+
+</script>
+<style scoped>
+</style>

+ 1 - 5
src/views/index/index.vue

@@ -213,11 +213,7 @@ html,body{
     padding: 15px;
     position: relative;
     height: 88vh;
-    z-index: 10;
-  //  box-shadow:   2px 0 15px 0 rgb(232, 232, 232);
-  //   -webkit-box-shadow:   2px 0 15px 0 rgb(232, 232, 232);
-  //   -moz-box-shadow:  2px 0 15px 0 rgb(232, 232, 232);
-             
+    z-index: 10;         
     }
      .part-panel-collapse-handle {
     position: absolute;