|
@@ -20,7 +20,7 @@
|
|
|
>
|
|
|
<el-form label-position="left">
|
|
|
<el-form-item label="网格文件:" :label-width="formLabelWidth120">
|
|
|
- <el-input v-model="tacsFilename">
|
|
|
+ <el-input v-model="fname">
|
|
|
<template #append>
|
|
|
<fileUploads
|
|
|
:projectId="125"
|
|
@@ -47,7 +47,7 @@
|
|
|
>
|
|
|
<el-form-item label="分析对象名称:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.objname"
|
|
|
+ v-model="tacsvalue.proname"
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -61,7 +61,7 @@
|
|
|
</template>
|
|
|
<el-form-item label="材料密度:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.density"
|
|
|
+ v-model="tacsvalue.rho"
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -70,7 +70,7 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="杨氏模量:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.ysml"
|
|
|
+ v-model="tacsvalue.e"
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -79,7 +79,7 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="泊松比:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.ratio"
|
|
|
+ v-model="tacsvalue.nu"
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -88,7 +88,7 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="屈服应力:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.stress"
|
|
|
+ v-model="tacsvalue.ys"
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -96,9 +96,9 @@
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="启用FFD参数化:" :label-width="formLabelWidth1">
|
|
|
- <el-radio-group v-model="tacsvalue.radio">
|
|
|
- <el-radio label="1">是</el-radio>
|
|
|
- <el-radio label="0">否</el-radio>
|
|
|
+ <el-radio-group v-model="tacsvalue.useffd">
|
|
|
+ <el-radio :label='1'>是</el-radio>
|
|
|
+ <el-radio :label='0'>否</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
</el-collapse-item>
|
|
@@ -108,7 +108,7 @@
|
|
|
</template>
|
|
|
<el-form-item label="绝对收敛参数:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.absolute "
|
|
|
+ v-model="tacsvalue.l2convergence "
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -117,7 +117,7 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="相对收敛参数:" :label-width="formLabelWidth1">
|
|
|
<el-input
|
|
|
- v-model="tacsvalue.relative "
|
|
|
+ v-model="tacsvalue.l2convergencerel "
|
|
|
:step="100"
|
|
|
:min="0"
|
|
|
:max="1000"
|
|
@@ -131,7 +131,7 @@
|
|
|
<div v-show="currentTab2 == '1'">
|
|
|
<div class="eldesign classtable" style="margin-top: 10px">
|
|
|
<el-table
|
|
|
- :data="TACSlailiutable"
|
|
|
+ :data="inParams"
|
|
|
border
|
|
|
style="width: 100%; "
|
|
|
>
|
|
@@ -143,15 +143,15 @@
|
|
|
<template v-slot:header>
|
|
|
<!-- 表头显示复选框 -->
|
|
|
<el-checkbox
|
|
|
- :false-label="'-1'"
|
|
|
- :true-label="'1'"
|
|
|
+ :false-label="0"
|
|
|
+ :true-label="1"
|
|
|
:label="false"
|
|
|
- v-model="thcheckbox"
|
|
|
+ v-model="writesolution"
|
|
|
/>
|
|
|
</template>
|
|
|
- <el-table-column prop="data" label="厚度分布" width="100">
|
|
|
+ <el-table-column prop="value" label="厚度分布" width="100">
|
|
|
<template #default="{ row }">
|
|
|
- <el-input v-model.number="row.data" />
|
|
|
+ <el-input v-model.number="row.value" />
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table-column>
|
|
@@ -165,7 +165,7 @@
|
|
|
<div v-show="currentTab2 == '3'">
|
|
|
<div class="eldesign classtable" style="margin-top: 10px">
|
|
|
<el-table
|
|
|
- :data="TACSfenxitable"
|
|
|
+ :data="outParams"
|
|
|
border
|
|
|
style="width: 100%; "
|
|
|
:header-cell-class-name="headerCellClassName"
|
|
@@ -184,8 +184,8 @@
|
|
|
<el-table-column prop="flag" label="启用" width="100">
|
|
|
<template v-slot="scope">
|
|
|
<el-checkbox
|
|
|
- :false-label="'-1'"
|
|
|
- :true-label="'1'"
|
|
|
+ :false-label="0"
|
|
|
+ :true-label="1"
|
|
|
:label="false"
|
|
|
v-model="scope.row.flag"
|
|
|
/>
|
|
@@ -203,12 +203,18 @@ import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
|
|
|
import { Edit, CaretBottom } from "@element-plus/icons-vue"
|
|
|
import fileUploads from '../components/fileuploads.vue'
|
|
|
import cloudChart from "../threejsView/index.vue" // 云图
|
|
|
+import { request, uploadFile } from "@/utils/request"
|
|
|
|
|
|
let fid = ref()
|
|
|
let formLabelWidth1 = ref(170)
|
|
|
let formLabelWidth120 = ref(120)
|
|
|
let bdfData = ref()
|
|
|
let currentTab2=ref(0);
|
|
|
+
|
|
|
+let pid = ref();
|
|
|
+let wid = ref();
|
|
|
+let tacsid = ref();
|
|
|
+
|
|
|
let tabslist2= ref([
|
|
|
{ id: '0', name: '网格文件' },
|
|
|
{ id: '1', name: '结构参数' },
|
|
@@ -223,83 +229,119 @@ const tacsfileSrc = new URL('@/assets/flowimg/ffdFileSave.png', import.meta.url)
|
|
|
let TACSactiveNames = ref(['1','2']);
|
|
|
|
|
|
let tacsvalue = ref({
|
|
|
- objname:'CRM',
|
|
|
- density:'2780.0',
|
|
|
- ysml:'73.1e9',
|
|
|
- ratio:'0.33',
|
|
|
- stress:'262.0e6',
|
|
|
- radio:'1',
|
|
|
- absolute:'1e3',
|
|
|
- relative:'1e3'
|
|
|
+ proname:'CRM',
|
|
|
+ rho:'2780.0',
|
|
|
+ e:'73.1e9',
|
|
|
+ nu:'0.33',
|
|
|
+ ys:'262.0e6',
|
|
|
+ useffd: 1,
|
|
|
+ l2convergence:'1e3',
|
|
|
+ l2convergencerel:'1e3'
|
|
|
})
|
|
|
|
|
|
-let thcheckbox = ref('1')
|
|
|
+let writesolution = ref(1);
|
|
|
|
|
|
-let tacsFilename = ref('')
|
|
|
+let fname = ref('')
|
|
|
|
|
|
-let TACSlailiutable=ref([
|
|
|
+let inParams=ref([
|
|
|
{
|
|
|
- data: '0.995208',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.995208',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.992144',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.992144',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.988525',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.988525',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.984251',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.984251',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.979202',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.979202',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.973236',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.973236',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.966186',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.966186',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '0.957851',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '0.957851',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
{
|
|
|
- data: '',
|
|
|
+ code:'thickness',
|
|
|
+ name: '厚度分布',
|
|
|
+ value: '',
|
|
|
+ flag: 1,
|
|
|
con: ''
|
|
|
},
|
|
|
])
|
|
|
|
|
|
-let TACSfenxitable=ref([
|
|
|
+let outParams=ref([
|
|
|
{
|
|
|
+ code:'mass',
|
|
|
name: '结构质量',
|
|
|
value: 13972.2123,
|
|
|
flag:'1'
|
|
|
},
|
|
|
{
|
|
|
+ code:'ks_vmfailure',
|
|
|
name: 'KS聚合应力',
|
|
|
value: 0.3337,
|
|
|
flag:'1'
|
|
|
},
|
|
|
{
|
|
|
+ code:'maxdeform',
|
|
|
name: '最大变形',
|
|
|
value: 0.0,
|
|
|
flag: '1'
|
|
|
- }
|
|
|
+ },
|
|
|
])
|
|
|
|
|
|
const selectTab2=(index)=>{
|
|
@@ -319,8 +361,156 @@ const headerCellClassName = ({ column }) => {
|
|
|
return '';
|
|
|
};
|
|
|
|
|
|
+const gettacs = (id,nowid) => {
|
|
|
+ pid.value = id;
|
|
|
+ if(nowid){
|
|
|
+ wid.value = nowid;
|
|
|
+ }
|
|
|
+ // console.log('pid-1:',pid.value)
|
|
|
+ const params = {
|
|
|
+ transCode: "MDO0066",
|
|
|
+ pid: pid.value,
|
|
|
+ wid: wid.value
|
|
|
+ };
|
|
|
+ request(params).then((res) => {
|
|
|
+ if (res.hasOwnProperty("tacsid")) {
|
|
|
+ gettacsAssign(res);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log('TACS初始化失败err:',err)
|
|
|
+ ElMessage.error('TACS初始化失败')
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const gettacsAssign = (data) => {
|
|
|
+ // console.log('getfsiAssign-data:', data);
|
|
|
+ pid.value = data.pid;
|
|
|
+ tacsid.value = data.tacsid;
|
|
|
+ fid.value = data.fid;
|
|
|
+ fname.value = data.fname;
|
|
|
+ tacsvalue.value.proname = data.proname;
|
|
|
+ tacsvalue.value.rho = data.rho;
|
|
|
+ tacsvalue.value.e = data.e;
|
|
|
+ tacsvalue.value.nu = data.nu;
|
|
|
+ tacsvalue.value.ys = data.ys;
|
|
|
+ tacsvalue.value.useffd = data.useffd;
|
|
|
+ tacsvalue.value.l2convergence = data.l2convergence;
|
|
|
+ tacsvalue.value.l2convergencerel = data.l2convergencerel;
|
|
|
+ writesolution.value = data.writesolution;
|
|
|
+ inParams.value = parseStringToArray(data.inParams);
|
|
|
+ outParams.value = data.outParams;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const convertToStringArray = (result, Data) => {
|
|
|
+ console.log('Data:', Data);
|
|
|
+
|
|
|
+ // 安全检查 Data,确保它是一个数组
|
|
|
+ if (!Array.isArray(Data)) {
|
|
|
+ console.error('Data should be an array');
|
|
|
+ return result; // 返回原 result 或者根据需要返回其他默认值
|
|
|
+ }
|
|
|
+
|
|
|
+ result = Data.map(row => {
|
|
|
+ // 获取每一行的 `code`, `name`, `value` 和 `flag`
|
|
|
+ const code = row.code || ' ';
|
|
|
+ const name = row.name || ' ';
|
|
|
+ const value = (row.value === null || row.value === undefined || row.value === '') ? ' ' : row.value;
|
|
|
+ const flag = (row.value === null || row.flag === undefined || row.flag === '') ? ' ' : row.flag;
|
|
|
+
|
|
|
+ // 将字段连接为一个以逗号分隔的字符串
|
|
|
+ return `${code},${name},${value},${flag}`;
|
|
|
+ }).join(';'); // 每行之间用分号分隔
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+// "code,name,value#value#value,flag" 格式的字符串
|
|
|
+const convertToStringArray1 = (result, Data) => {
|
|
|
+ console.log('Data:', Data);
|
|
|
+
|
|
|
+ // 安全检查 Data,确保它是一个数组
|
|
|
+ if (!Array.isArray(Data)) {
|
|
|
+ console.error('Data should be an array');
|
|
|
+ return result; // 返回原 result 或者根据需要返回其他默认值
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Data.length === 0) {
|
|
|
+ return result; // 如果数组为空,直接返回原 result
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取第一行的 code, name 和 writesolution
|
|
|
+ const code = Data[0].code || ' ';
|
|
|
+ const name = Data[0].name || ' ';
|
|
|
+ const flag = writesolution.value !== undefined && writesolution.value !== null
|
|
|
+ ? writesolution.value
|
|
|
+ : ' ';
|
|
|
+
|
|
|
+ // 收集所有行的 value,用 # 拼接
|
|
|
+ const values = Data.map(row => {
|
|
|
+ return (row.value === null || row.value === undefined || row.value === '') ? ' ' : row.value;
|
|
|
+ }).join('#');
|
|
|
+
|
|
|
+ // 构建最终字符串
|
|
|
+ result = `${code},${name},${values},${flag}`;
|
|
|
+
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+// 将 "code,name,value#value#value,flag" 格式的字符串转回数组格式
|
|
|
+const parseStringToArray = (inParamsArray) => {
|
|
|
+ if (!Array.isArray(inParamsArray)) return [];
|
|
|
+
|
|
|
+ return inParamsArray.map(item => {
|
|
|
+ const values = item.value.split('#').map(v => v === ' ' ? '' : v);
|
|
|
+
|
|
|
+ return values.map(value => ({
|
|
|
+ ...item, // 保留原对象所有属性
|
|
|
+ value: value, // 覆盖为单个值
|
|
|
+ }));
|
|
|
+ }).flat(); // 将二维数组展平
|
|
|
+}
|
|
|
+
|
|
|
+const gettacssave = (id,nowid) => {
|
|
|
+ if(nowid){
|
|
|
+ wid.value = nowid
|
|
|
+ }
|
|
|
+ pid.value = id;
|
|
|
+ // console.log("pid:",pid.value);
|
|
|
+ const params = {
|
|
|
+ transCode: "MDO0067",
|
|
|
+ pid: pid.value,
|
|
|
+ wid: wid.value,
|
|
|
+ proname: tacsvalue.value.proname,
|
|
|
+ rho: tacsvalue.value.rho,
|
|
|
+ e: tacsvalue.value.e,
|
|
|
+ nu: tacsvalue.value.nu,
|
|
|
+ ys: tacsvalue.value.ys,
|
|
|
+ useffd: tacsvalue.value.useffd,
|
|
|
+ l2convergence: tacsvalue.value.l2convergence,
|
|
|
+ l2convergencerel: tacsvalue.value.l2convergencerel,
|
|
|
+ writesolution: writesolution.value,
|
|
|
+ fid: fid.value,
|
|
|
+ fname: fname.value,
|
|
|
+ inParams: convertToStringArray1([],inParams.value),
|
|
|
+ outParams: convertToStringArray([],outParams.value)
|
|
|
+ };
|
|
|
+ request(params).then((res) => {
|
|
|
+ ElMessage({
|
|
|
+ message: '保存成功',
|
|
|
+ type: 'success',
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ ElMessage.error('保存失败')
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+defineExpose({ gettacs, gettacsAssign, gettacssave })
|
|
|
+
|
|
|
const handleFileUploadSuccess = (data) => {
|
|
|
- tacsFilename.value = data.fname
|
|
|
+ fname.value = data.fname
|
|
|
fid.value = data.bfid
|
|
|
console.log("文件上传成功,bfid:", data.bfid, "fname:", data.fname)
|
|
|
bdfData.value = {
|