ffds.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <template>
  2. <div class="XFpdding" style="height: 463px;">
  3. <div>
  4. <el-form-item label="FFD包围盒:" :label-width="formLabelWidth1">
  5. <el-input
  6. v-model="ffdvalue.fname"
  7. :max="20"
  8. controls-position="right"
  9. @keydown.enter="keydownenter"
  10. >
  11. <template #append>
  12. <fileUploads
  13. :projectId="123"
  14. solverType="exampleSolver"
  15. accept=".xyz"
  16. upId="uniqueId1"
  17. name="点击选择文件"
  18. :imgSrc="imageSrc"
  19. @upload-success="handleFileUploadSuccess"
  20. />
  21. </template>
  22. </el-input>
  23. </el-form-item>
  24. <el-form-item label="参考坐标系:" :label-width="formLabelWidth1">
  25. <el-radio-group v-model="order">
  26. <el-radio :value="0" :label="0">x-y-z</el-radio>
  27. <el-radio :value="1" :label="1">x-z-y</el-radio>
  28. <el-radio :value="2" :label="2">y-x-z</el-radio>
  29. <el-radio :value="3" :label="3">y-z-x</el-radio>
  30. <el-radio :value="4" :label="4">z-x-y</el-radio>
  31. <el-radio :value="5" :label="5">z-y-x</el-radio>
  32. </el-radio-group>
  33. </el-form-item>
  34. </div>
  35. <el-form-item label="控制点数(X,Y,Z):" :label-width="formLabelWidth1">
  36. <el-row style="width: 100%;" :gutter="5">
  37. <el-col :span="6">
  38. <el-input-number style="width: 120px;" v-model="ffdvalue.nx" controls-position="right" />
  39. </el-col>
  40. <el-col :span="6">
  41. <el-input-number style="width: 120px;" v-model="ffdvalue.ny" controls-position="right" />
  42. </el-col>
  43. <el-col :span="6">
  44. <el-input-number style="width: 120px;" v-model="ffdvalue.nz" controls-position="right" />
  45. </el-col>
  46. <el-col :span="6">
  47. <el-button @click="generateTable" style="width: 100%;">应用</el-button>
  48. </el-col>
  49. </el-row>
  50. </el-form-item>
  51. <div class="classtable">
  52. <el-table :data="tableDatacst1" style="width: 100%" border :header-cell-class-name="headerCellClassName">
  53. <el-table-column prop="axis" label="" width="60" />
  54. <el-table-column
  55. v-for="(item, index) in tablecstHeaders"
  56. :key="index"
  57. :prop="item.prop"
  58. :label="item.label"
  59. >
  60. <template #default="{ row }">
  61. <el-input v-model="row[item.prop]" />
  62. </template>
  63. </el-table-column>
  64. </el-table>
  65. </div>
  66. </div>
  67. </template>
  68. <script setup>
  69. import { ref, onMounted, reactive, provide, nextTick } from "vue"
  70. import { RouterView, RouterLink, useRouter, useRoute } from "vue-router"
  71. import myheader from "@/components/header.vue"
  72. import fileUploads from '../components/fileuploads.vue'
  73. import { request, uploadFile } from "@/utils/request"
  74. import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
  75. import { Edit, CaretBottom } from "@element-plus/icons-vue"
  76. let formLabelWidth1 = ref('200')
  77. let pid = ref()
  78. let fid = ref()
  79. let ffdid = ref()
  80. let ffdvalue = ref({
  81. fname: "204",
  82. nx: 10,
  83. ny: 2,
  84. nz: 2
  85. })
  86. let order = ref(1)
  87. let vars = ref()
  88. let tableDatacst1 = ref([
  89. { axis: "Z1", X1: "1", X2: "2", X3: "3", X4: "4", X5: "5", X6: "6", X7: "7", X8: "8", X9: "9" },
  90. { axis: "Z2", X1: "1", X2: "2", X3: "3", X4: "4", X5: "5", X6: "6", X7: "7", X8: "8", X9: "9" }
  91. ])
  92. let tablecstHeaders = ref([
  93. {prop:"X1",label:"X1"},
  94. {prop:"X2",label:"X2"},
  95. {prop:"X3",label:"X3"},
  96. {prop:"X4",label:"X4"},
  97. {prop:"X5",label:"X5"},
  98. {prop:"X6",label:"X6"},
  99. {prop:"X7",label:"X7"},
  100. {prop:"X8",label:"X8"},
  101. {prop:"X9",label:"X9"},
  102. ])
  103. const imageSrc = new URL('@/assets/flowimg/ffdFileSave.png', import.meta.url).href;
  104. const headerCellClassName = ({columnIndex}) => {
  105. if( columnIndex !== 0 ) {
  106. return 'header-blue';
  107. }
  108. return '';
  109. }
  110. const generateTable = () => {
  111. console.log("generateTable");
  112. // 获取X, Y, Z方向的数值
  113. const xCount = Number(ffdvalue.value.nx);
  114. const yCount = Number(ffdvalue.value.ny);
  115. const zCount = Number(ffdvalue.value.nz);
  116. // 根据选中的参考坐标系来确定列名和行名
  117. let columns = [];
  118. let rows = [];
  119. switch (order.value) {
  120. case 0: // x-y-z
  121. columns = Array.from({ length: xCount }, (_, i) => ({ label: `X${i + 1}`, prop: `X${i + 1}` }));
  122. rows = Array.from({ length: yCount }, (_, i) => ({ label: `Y${i + 1}`, prop: `Y${i + 1}` }));
  123. break;
  124. case 1: // x-z-y
  125. columns = Array.from({ length: xCount }, (_, i) => ({ label: `X${i + 1}`, prop: `X${i + 1}` }));
  126. rows = Array.from({ length: zCount }, (_, i) => ({ label: `Z${i + 1}`, prop: `Z${i + 1}` }));
  127. break;
  128. case 2: // y-x-z
  129. columns = Array.from({ length: yCount }, (_, i) => ({ label: `Y${i + 1}`, prop: `Y${i + 1}` }));
  130. rows = Array.from({ length: xCount }, (_, i) => ({ label: `X${i + 1}`, prop: `X${i + 1}` }));
  131. break;
  132. case 3: // y-z-x
  133. columns = Array.from({ length: yCount }, (_, i) => ({ label: `Y${i + 1}`, prop: `Y${i + 1}` }));
  134. rows = Array.from({ length: zCount }, (_, i) => ({ label: `Z${i + 1}`, prop: `Z${i + 1}` }));
  135. break;
  136. case 4: // z-x-y
  137. columns = Array.from({ length: zCount }, (_, i) => ({ label: `Z${i + 1}`, prop: `Z${i + 1}` }));
  138. rows = Array.from({ length: xCount }, (_, i) => ({ label: `X${i + 1}`, prop: `X${i + 1}` }));
  139. break;
  140. case 5: // z-y-x
  141. columns = Array.from({ length: zCount }, (_, i) => ({ label: `Z${i + 1}`, prop: `Z${i + 1}` }));
  142. rows = Array.from({ length: yCount }, (_, i) => ({ label: `Y${i + 1}`, prop: `Y${i + 1}` }));
  143. break;
  144. default:
  145. break;
  146. }
  147. // 更新表格列头
  148. tablecstHeaders.value = columns;
  149. // 生成表格的数据行
  150. tableDatacst1.value = [];
  151. for (let i = 1; i <= rows.length; i++) {
  152. let row = { axis: rows[i - 1].label };
  153. columns.forEach((column) => {
  154. row[column.prop] = null; // 每个单元格初始化为空
  155. });
  156. tableDatacst1.value.push(row);
  157. }
  158. };
  159. const handleFileUploadSuccess = (data) =>{
  160. ffdvalue.value.fname = data.fname;
  161. fid.value = data.bfid;
  162. console.log('文件上传成功,bfid:', data.bfid, 'fname:', data.fname);
  163. }
  164. // 用来生成 vars,存储表格中除了行名与列名的所有值
  165. const generateVars = () => {
  166. let values = [];
  167. tableDatacst1.value.forEach(row => {
  168. tablecstHeaders.value.forEach(col => {
  169. let value = row[col.prop];
  170. if (value === null || value === undefined || value === '') {
  171. value = ' ';
  172. }
  173. values.push(value);
  174. });
  175. });
  176. // 将值拼接成用逗号分隔的字符串
  177. vars.value = values.join(',');
  178. };
  179. // 用来初始化表格,将 vars 中的值填充到表格中
  180. const initializeTableFromVars = () => {
  181. if (!vars.value) return;
  182. const values = vars.value.split(',');
  183. console.log('ffdchaxun',values);
  184. let index = 0;
  185. // 遍历 tableDatacst1 中的每一行
  186. tableDatacst1.value.forEach(row => {
  187. tablecstHeaders.value.forEach(col => {
  188. if (index < values.length) {
  189. // 将解析后的值赋给相应的单元格
  190. row[col.prop] = values[index] === ' ' ? '' : values[index]; // 空格用空字符串代替
  191. index++;
  192. }
  193. });
  194. });
  195. };
  196. // ffd查询
  197. const getffds = (id) => {
  198. pid.value = id;
  199. const params = {
  200. transCode: "MDO0043",
  201. pid: pid.value
  202. };
  203. request(params).then((res) => {
  204. if (res.hasOwnProperty("ffdid")) {
  205. // ffdid.value = res.ffdid;
  206. // ffdvalue.value.fname = res.fname;
  207. // ffdvalue.value.nx = res.nx;
  208. // ffdvalue.value.ny = res.ny;
  209. // ffdvalue.value.nz = res.nz;
  210. // order.value = Number(res.order);
  211. // vars.value = res.vars;
  212. // generateTable();
  213. // initializeTableFromVars();
  214. getffdsAssign(res);
  215. }
  216. })
  217. .catch((err) => {
  218. ElMessage.error(err.returnMsg)
  219. })
  220. };
  221. const getffdsAssign = (data) => {
  222. pid.value = data.pid
  223. ffdid.value = data.ffdid;
  224. ffdvalue.value.fname = data.fname;
  225. ffdvalue.value.nx = data.nx;
  226. ffdvalue.value.ny = data.ny;
  227. ffdvalue.value.nz = data.nz;
  228. order.value = Number(data.order);
  229. vars.value = data.vars;
  230. generateTable();
  231. initializeTableFromVars();
  232. };
  233. // ffd保存
  234. const getffdsave = () => {
  235. generateVars();
  236. const params = {
  237. transCode: "MDO0044",
  238. pid: pid.value,
  239. fid: fid.value,
  240. fname: ffdvalue.value.fname,
  241. nx: ffdvalue.value.nx,
  242. ny: ffdvalue.value.ny,
  243. nz: ffdvalue.value.nz,
  244. order: order.value,
  245. vars: vars.value,
  246. checked:1
  247. };
  248. request(params)
  249. .then((res) => {
  250. ElMessage({
  251. message: res.returnMsg,
  252. type: 'success',
  253. })
  254. })
  255. .catch((err) => {
  256. ElMessage.error(err.returnMsg);
  257. });
  258. };
  259. defineExpose({ getffds,getffdsAssign, getffdsave });
  260. </script>