test.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. <template>
  2. <hc-body split class="hc-tentative-collect-test-body">
  3. <template #left>
  4. <hc-card scrollbar>
  5. <template #header>
  6. <div class="text-18px">汇总分类</div>
  7. </template>
  8. <div
  9. v-for="(item) in testOpt" :key="item.id" class="mb-4"
  10. :class="item.id === curItem?.id ? 'bg-slate-200' : ''" @click="handleItem(item)"
  11. >
  12. <i class="ri-circle-fill" />
  13. {{ item.className }}
  14. </div>
  15. </hc-card>
  16. </template>
  17. <hc-card>
  18. <template #header>
  19. <div class="w-50">
  20. <el-select v-model="searchForm.contractId" placeholder="请选择" @change="changeContract">
  21. <el-option
  22. v-for="item in contractOptions" :key="item.id" :label="item.contractName"
  23. :value="item.id"
  24. />
  25. </el-select>
  26. </div>
  27. <div class="ml-2 w-40">
  28. <el-select
  29. v-model="searchForm.detectionType" clearable block placeholder="检测类别"
  30. @change="changeType"
  31. >
  32. <el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
  33. </el-select>
  34. </div>
  35. <div class="ml-2 w-40">
  36. <el-select v-model="searchForm.key1" clearable block placeholder="单位类型">
  37. <el-option label="无接口1" value="1" />
  38. <el-option label="无接口2" value="2" />
  39. </el-select>
  40. </div>
  41. <div class="ml-2 w-64">
  42. <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
  43. </div>
  44. </template>
  45. <template #extra>
  46. <HcTooltip keys="tentative_collect_test_print">
  47. <el-button hc-btn color="#567722" @click="addClick">
  48. <HcIcon name="add" />
  49. <span>新增</span>
  50. </el-button>
  51. </HcTooltip>
  52. <HcTooltip keys="tentative_collect_test_download">
  53. <el-button
  54. hc-btn color="#A16222" :loading="downLoading" :disabled="tableCheckedKeys.length === 0"
  55. @click="downClick"
  56. >
  57. <HcIcon name="download" />
  58. <span>下载</span>
  59. </el-button>
  60. </HcTooltip>
  61. <HcTooltip keys="tentative_collect_test_del">
  62. <el-button hc-btn color="#e03997" :disabled="tableCheckedKeys.length === 0" @click="delModalClick">
  63. <HcIcon name="delete-bin-2" />
  64. <span>删除</span>
  65. </el-button>
  66. </HcTooltip>
  67. </template>
  68. <HcTable
  69. ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading"
  70. is-new :index-style="{ width: 60 }" is-check :check-style="{ width: 29 }"
  71. @selection-change="tableSelection"
  72. >
  73. <template #action="{ row }">
  74. <el-link type="primary" @click="viewPdf(row)">查看</el-link>
  75. <!-- <el-link type="primary" @click="relatedSearchClick(row)">查阅关联</el-link> -->
  76. </template>
  77. </HcTable>
  78. <template #action>
  79. <HcPages :pages="searchForm" @change="pageChange" />
  80. </template>
  81. </hc-card>
  82. <!-- 新增/编辑 -->
  83. <hc-new-dialog
  84. v-model="addFormShow" :loading="addFormLoading" title="新增分类" widths="30rem"
  85. @close="addModalClose" @save="addModalSave"
  86. >
  87. <el-form
  88. ref="addFormRef" :model="addFormModal" :rules="addFormRules" label-position="left"
  89. label-width="auto" size="large"
  90. >
  91. <el-form-item class="mb-0" label="合同段:" prop="contractId">
  92. <el-select v-model="addFormModal.contractId" placeholder="请选择">
  93. <el-option
  94. v-for="item in contractOptions" :key="item.id" :label="item.contractName"
  95. :value="item.id"
  96. />
  97. </el-select>
  98. </el-form-item>
  99. <el-form-item class="mb-0 mt-4" label="汇总类别:" prop="classId">
  100. <el-select v-model="addFormModal.classId" placeholder="请选择">
  101. <el-option v-for="item in testOpt" :key="item.id" :label="item.className" :value="item.id" />
  102. </el-select>
  103. </el-form-item>
  104. <el-form-item class="mb-0 mt-4" label="报告时间:">
  105. <HcDatePicker :dates="addbetweenTime" clearable @change="addbetweenTimeUpdate" />
  106. </el-form-item>
  107. </el-form>
  108. <el-form-item class="mb-0 mt-4" label="单位类型:" prop="unitType ">
  109. <el-select v-model="addFormModal.unitType " placeholder="请选择">
  110. <el-option v-for="item in unitOpt" :key="item.id" :label="item.name" :value="item.id" />
  111. </el-select>
  112. </el-form-item>
  113. <el-form-item class="mb-0 mt-4" label="检测类型:" prop="detectionType">
  114. <el-select v-model="addFormModal.detectionType" placeholder="请选择">
  115. <el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
  116. </el-select>
  117. </el-form-item>
  118. </hc-new-dialog>
  119. <!-- 查阅关联 -->
  120. <hc-dialog
  121. v-model="isRelatedSearch" :footer="false" is-table title="查阅关联" widths="80%" :padding="false"
  122. @close="relatedSearchModalClose"
  123. >
  124. <div class="hc-related-search-box relative mt-10px">
  125. <hc-card-item title="样品信息">
  126. <hc-table :column="relatedColumn1" :datas="relatedData1" :is-index="false" />
  127. </hc-card-item>
  128. <hc-card-item title="委托单信息" class="mt-14px">
  129. <hc-table :column="relatedColumn2" :datas="relatedData2" :is-index="false">
  130. <template #status="{ row }">
  131. <el-tag v-if="row.status === 1" type="info" effect="dark">未上报</el-tag>
  132. <el-tag v-if="row.status === 2" type="warning" effect="dark">已上报-待审批</el-tag>
  133. <el-tag v-if="row.status === 3" type="primary" effect="dark">待试验</el-tag>
  134. <el-tag v-if="row.status === 4" type="success" effect="dark">委托完成</el-tag>
  135. </template>
  136. </hc-table>
  137. </hc-card-item>
  138. <hc-card-item title="设备采集信息" class="mt-14px">
  139. <hc-table :column="relatedColumn3" :datas="relatedData3" :is-index="false" />
  140. </hc-card-item>
  141. </div>
  142. </hc-dialog>
  143. </hc-body>
  144. </template>
  145. <script setup>
  146. import { onMounted, ref, watch } from 'vue'
  147. import { useAppStore } from '~src/store'
  148. import { arrToId, getArrValue, getObjVal, isNullES, isString } from 'js-fast-way'
  149. import { HcDelMsg } from 'hc-vue3-ui'
  150. import { getDictionary } from '~api/other'
  151. import { toPdfPage } from '~uti/btn-auth'
  152. import dataApi from '~api/tentative/detect/test'
  153. import testSampleApi from '~api/tentative/material/testSample'
  154. import commissionApi from '~api/tentative/detect/commission'
  155. import acquisitionApi from '~api/tentative/acquisition/data'
  156. import { download, getContractList, getPage, getSummaryList, removeByIds, save } from '~api/tentative/collect/test'
  157. //变量
  158. const useAppState = useAppStore()
  159. const projectId = ref(useAppState.getProjectId)
  160. const contractId = ref(useAppState.getContractId)
  161. const isCollapse = ref(useAppState.getCollapse)
  162. const contractOptions = ref([])
  163. //监听
  164. watch(() => [
  165. useAppState.getCollapse,
  166. ], ([Collapse]) => {
  167. isCollapse.value = Collapse
  168. })
  169. //渲染完成
  170. onMounted(async () => {
  171. await gettypeData()
  172. await getContractOpt()
  173. await getTextOpt()
  174. getTableData()
  175. })
  176. //搜索表单
  177. const searchForm = ref({
  178. contractId: null, detectionType: null, betweenTime: null,
  179. current: 1, size: 20, total: 0,
  180. })
  181. //获取合同段列表
  182. const getContractOpt = async () => {
  183. const { data } = await getContractList({
  184. contractId: contractId.value,
  185. projectId: projectId.value,
  186. })
  187. const res = getArrValue(data)
  188. contractOptions.value = res
  189. if (res.length <= 0) return
  190. let cid
  191. for (let i = 0; i < res.length; i++) {
  192. if (contractId.value == res[i].id) {
  193. cid = res[i].id
  194. }
  195. }
  196. searchForm.value.contractId = isNullES(cid) ? res[0].id : cid
  197. }
  198. //获取汇总分类列表
  199. const testOpt = ref([])
  200. const getTextOpt = async () => {
  201. const { error, code, data } = await getSummaryList()
  202. //判断状态
  203. if (!error && code === 200) {
  204. let resdata = getArrValue(data)
  205. testOpt.value = resdata
  206. if (testOpt.value.length > 0) {
  207. curItem.value = testOpt.value[0]
  208. }
  209. } else {
  210. testOpt.value = []
  211. }
  212. }
  213. const curItem = ref(null)
  214. const handleItem = (item) => {
  215. curItem.value = item
  216. getTableData()
  217. }
  218. //检测类别
  219. const typeData = ref([])
  220. //获取检测类别
  221. const gettypeData = async () => {
  222. const { data } = await getDictionary({
  223. code: 'trial_detection_category',
  224. })
  225. //处理数据
  226. let newArr = []
  227. const newData = getArrValue(data)
  228. for (let i = 0; i < newData.length; i++) {
  229. newArr.push({
  230. label: newData[i]['dictValue'],
  231. value: Number(newData[i]['dictKey']),
  232. })
  233. }
  234. typeData.value = newArr
  235. }
  236. //日期时间被选择
  237. const betweenTime = ref(null)
  238. const betweenTimeUpdate = ({ arr, query }) => {
  239. betweenTime.value = arr
  240. searchForm.value.startDate = arr[0]
  241. searchForm.value.endDate = arr[1]
  242. getTableData()
  243. }
  244. const addbetweenTime = ref(null)
  245. const addbetweenTimeUpdate = ({ arr, query }) => {
  246. addbetweenTime.value = arr
  247. addFormModal.value.startDate = arr[0]
  248. addFormModal.value.endDate = arr[1]
  249. }
  250. //选择检测类别
  251. const changeType = () => {
  252. getTableData()
  253. }
  254. const changeContract = () => {
  255. getTableData()
  256. }
  257. //分页被点击
  258. const pageChange = ({ current, size }) => {
  259. searchForm.value.current = current
  260. searchForm.value.size = size
  261. getTableData()
  262. }
  263. //表格数据
  264. const tableRef = ref(null)
  265. const tableColumn = ref([
  266. { key: 'summaryNumber', name: '汇总编号' },
  267. { key: 'classIdName', name: '汇总类别' },
  268. { key: 'detectionTypeName', name: '检测类型' },
  269. { key: 'summaryDateName', name: '汇总日期' },
  270. { key: 'no-key', name: '单位类型' },
  271. { key: 'action', name: '操作', width: 100 },
  272. ])
  273. //获取数据
  274. const tableLoading = ref(false)
  275. const tableData = ref([])
  276. const getTableData = async () => {
  277. if (!searchForm.value.contractId) {
  278. window.$message.warning('请选择合同段')
  279. return
  280. }
  281. if (curItem.value) {
  282. const { error, code, data } = await getPage({
  283. ...searchForm.value,
  284. classId: curItem.value?.id,
  285. })
  286. //判断状态
  287. if (!error && code === 200) {
  288. tableData.value = getArrValue(data?.records)
  289. searchForm.value.total = data?.total ?? 0
  290. } else {
  291. tableData.value = []
  292. searchForm.value.total = 0
  293. }
  294. } else {
  295. window.$message.warning('请先选择汇总分类')
  296. }
  297. }
  298. //多选
  299. const tableCheckedKeys = ref([])
  300. const tableSelection = (rows) => {
  301. tableCheckedKeys.value = rows.filter((item) => {
  302. return (item ?? '') !== ''
  303. })
  304. }
  305. //删除
  306. const delModalClick = () => {
  307. if (tableCheckedKeys.value.length === 0) {
  308. window.$message.warning('请先选择数据')
  309. return
  310. }
  311. HcDelMsg(async (resolve) => {
  312. await removeContractTreeNode()
  313. resolve() //关闭弹窗的回调
  314. })
  315. }
  316. const removeContractTreeNode = async () => {
  317. const loadingInstance = window.$loading.service({
  318. fullscreen: true,
  319. text: '删除节点中,请耐心等待...',
  320. background: 'rgba(0, 0, 0, 0.7)',
  321. })
  322. const { error, code, msg } = await removeByIds({
  323. ids: arrToId(tableCheckedKeys.value),
  324. })
  325. loadingInstance.close()
  326. if (!error && code === 200) {
  327. window?.$message?.success('删除成功')
  328. getTableData()
  329. } else {
  330. window.$message.error(msg)
  331. }
  332. }
  333. //左右拖动,改变树形结构宽度
  334. const leftWidth = ref(382)
  335. const onmousedown = () => {
  336. const leftNum = isCollapse.value ? 142 : 272
  337. document.onmousemove = (ve) => {
  338. let diffVal = ve.clientX - leftNum
  339. if (diffVal >= 310 && diffVal <= 900) {
  340. leftWidth.value = diffVal
  341. }
  342. }
  343. document.onmouseup = () => {
  344. document.onmousemove = null
  345. document.onmouseup = null
  346. }
  347. }
  348. //查看pdf
  349. const viewPdf = (row) => {
  350. const { pdfUrl } = row
  351. if (pdfUrl) {
  352. toPdfPage(pdfUrl)
  353. } else {
  354. window.$message.warning('暂无数据')
  355. }
  356. }
  357. //新增试验汇总
  358. const addFormModal = ref({})
  359. const addFormShow = ref(false)
  360. const addFormLoading = ref(false)
  361. const addClick = () => {
  362. addFormShow.value = true
  363. }
  364. const addModalClose = () => {
  365. addFormShow.value = false
  366. addFormModal.value = {}
  367. }
  368. const addFormRules = ref(null)
  369. const addFormRef = ref(null)
  370. const addModalSave = async () => {
  371. console.log(addFormModal.value)
  372. addFormLoading.value = true
  373. const { error, code, msg } = await save({
  374. ...addFormModal.value,
  375. })
  376. addFormLoading.value = false
  377. //判断状态
  378. if (!error && code === 200) {
  379. window.$message.success(msg)
  380. addFormShow.value = false
  381. getTableData()
  382. }
  383. }
  384. const unitOpt = ref([
  385. { name: '施工', id: '1' },
  386. ])
  387. const downLoading = ref(false)
  388. const downClick = async () => {
  389. downLoading.value = true
  390. const { error, code, data } = await download({
  391. ids: arrToId(tableCheckedKeys.value),
  392. })
  393. downLoading.value = false
  394. const res = isString(data) ? data || '' : ''
  395. if (!error && code === 200 && res) {
  396. window.open(res, '_blank')
  397. }
  398. }
  399. //关联查阅
  400. const isRelatedSearch = ref(false)
  401. const relatedSearchClick = (row) => {
  402. isRelatedSearch.value = true
  403. //获取样品信息
  404. getSampleList(row.id)
  405. //获取委托单
  406. getCommissionData(row.entrustId)
  407. //获取关联设备
  408. getAcquisitionData(row.loadDataId)
  409. }
  410. //样品信息
  411. const relatedColumn1 = [
  412. { key: 'materialName', name: '样品名称' },
  413. { key: 'samplingDate', name: '取样日期' },
  414. { key: 'specificationNumber', name: '样品编号' },
  415. { key: 'specificationModel', name: '规格型号' },
  416. { key: 'materialCount', name: '试样数量' },
  417. { key: 'calculationUnit', name: '计算单位' },
  418. { key: 'proposedPosition', name: '拟用部位' },
  419. { key: 'representativeCount', name: '代表数量' },
  420. { key: 'userName', name: '取样人' },
  421. { key: 'carryTime', name: '入库时间', align: 'center' },
  422. { key: 'createTime', name: '试验时间', align: 'center' },
  423. { key: 'no-key', name: '样品处理' },
  424. { key: 'no-key', name: '时间(或处理原因)' },
  425. ]
  426. const relatedData1 = ref([])
  427. const getSampleList = async (id) => {
  428. relatedData1.value = []
  429. if (isNullES(id) || id == 0) return
  430. const { data } = await dataApi.getSampleList({ id })
  431. relatedData1.value = getArrValue(data)
  432. }
  433. //委托单信息
  434. const relatedColumn2 = [
  435. { key: 'entrustInfo', name: '委托单位' },
  436. { key: 'entrustNo', name: '委托单编号' },
  437. { key: 'entrustName', name: '委托单名称' },
  438. { key: 'status', name: '委托单状态', width: 120, align: 'center' },
  439. ]
  440. const relatedData2 = ref([])
  441. const getCommissionData = async (id) => {
  442. relatedData2.value = []
  443. if (isNullES(id) || id == 0) return
  444. const { data } = await commissionApi.detail(id)
  445. const res = getObjVal(data)
  446. relatedData2.value = res ? [res] : []
  447. }
  448. //设备采集信息
  449. const relatedColumn3 = [
  450. { key: 'engineInfo', name: '工程部位' },
  451. { key: 'deviceName', name: '设备名称' },
  452. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  453. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  454. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  455. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  456. { key: 'beArea', name: '承压面积(mm2)', width: 100, align: 'center' },
  457. { key: 'specimenSize', name: '试件尺寸(mm)', width: 100, align: 'center' },
  458. { key: 'desStrength', name: '设计强度(MPa)', width: 100, align: 'center' },
  459. { key: 'no-key', name: '龄期(d)', width: 100, align: 'center' },
  460. { key: 'load1', name: '荷载1(KN)', width: 100, align: 'center' },
  461. { key: 'load2', name: '荷载2(KN)', width: 100, align: 'center' },
  462. { key: 'load3', name: '荷载3(KN)', width: 100, align: 'center' },
  463. { key: 'no-key', name: '荷载4(KN)', width: 100, align: 'center' },
  464. { key: 'no-key', name: '荷载5(KN)', width: 100, align: 'center' },
  465. { key: 'no-key', name: '荷载6(KN)', width: 100, align: 'center' },
  466. { key: 'no-key', name: '强度代表值(MPa)', width: 100, align: 'center' },
  467. {
  468. name: '最大力总延伸(%)',
  469. children: [
  470. { key: 'maxConceal1', name: '1', width: 100, align: 'center' },
  471. { key: 'maxConceal2', name: '2', width: 100, align: 'center' },
  472. { key: 'maxConceal3', name: '3', width: 100, align: 'center' },
  473. ],
  474. },
  475. //{ key: 'dataQualified', name: '试验结果是否合格', width: 100, align: 'center' },
  476. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  477. ]
  478. const relatedData3 = ref([])
  479. const getAcquisitionData = async (id) => {
  480. relatedData3.value = []
  481. if (isNullES(id) || id == 0) return
  482. const { data } = await acquisitionApi.selectDataInfoById(id)
  483. const res = getObjVal(data)
  484. if (res) {
  485. relatedData3.value = res ? [res] : []
  486. setRelatedColumn3(res.testTypePId)
  487. }
  488. }
  489. //设置表头
  490. const setRelatedColumn3 = (type) => {
  491. //压力机
  492. if (type === '1') {
  493. relatedColumn3.value = [
  494. { key: 'engineInfo', name: '工程部位' },
  495. { key: 'deviceName', name: '设备名称' },
  496. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  497. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  498. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  499. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  500. { key: 'beArea', name: '承压面积(mm2)', width: 100, align: 'center' },
  501. { key: 'specimenSize', name: '试件尺寸(mm)', width: 100, align: 'center' },
  502. { key: 'desStrength', name: '设计强度(MPa)', width: 100, align: 'center' },
  503. { key: 'ageDate', name: '龄期(d)', width: 100, align: 'center' },
  504. { key: 'load1', name: '荷载1(KN)', width: 100, align: 'center' },
  505. { key: 'load2', name: '荷载2(KN)', width: 100, align: 'center' },
  506. { key: 'load3', name: '荷载3(KN)', width: 100, align: 'center' },
  507. { key: 'no-key', name: '荷载4(KN)', width: 100, align: 'center' },
  508. { key: 'no-key', name: '荷载5(KN)', width: 100, align: 'center' },
  509. { key: 'no-key', name: '荷载6(KN)', width: 100, align: 'center' },
  510. { key: 'strengthAVG', name: '强度代表值(MPa)', width: 100, align: 'center' },
  511. {
  512. name: '最大力总延伸(%)',
  513. children: [
  514. { key: 'maxConceal1', name: '1', width: 100, align: 'center' },
  515. { key: 'maxConceal2', name: '2', width: 100, align: 'center' },
  516. { key: 'maxConceal3', name: '3', width: 100, align: 'center' },
  517. ],
  518. },
  519. //{ key: 'dataQualified', name: '试验结果是否合格', width: 100, align: 'center' },
  520. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  521. ]
  522. } else if (type === '2') {
  523. //万能机
  524. relatedColumn3.value = [
  525. { key: 'engineInfo', name: '工程部位' },
  526. { key: 'deviceName', name: '设备名称' },
  527. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  528. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  529. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  530. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  531. { key: 'no-key', name: '牌号', width: 100, align: 'center' },
  532. { key: 'no-key', name: '公称直径(mm)', width: 100, align: 'center' },
  533. { key: 'no-key', name: '规格', width: 100, align: 'center' },
  534. {
  535. name: '最大力/荷载(KN)',
  536. children: [
  537. { key: 'no-key', name: '1', width: 100, align: 'center' },
  538. { key: 'no-key', name: '2', width: 100, align: 'center' },
  539. { key: 'no-key', name: '3', width: 100, align: 'center' },
  540. { key: 'no-key', name: '4', width: 100, align: 'center' },
  541. { key: 'no-key', name: '5', width: 100, align: 'center' },
  542. { key: 'no-key', name: '6', width: 100, align: 'center' },
  543. ],
  544. },
  545. {
  546. name: '抗拉强度/强度代表值(MPa)',
  547. children: [
  548. { key: 'no-key', name: '1', width: 100, align: 'center' },
  549. { key: 'no-key', name: '2', width: 100, align: 'center' },
  550. { key: 'no-key', name: '3', width: 100, align: 'center' },
  551. { key: 'no-key', name: '4', width: 100, align: 'center' },
  552. { key: 'no-key', name: '5', width: 100, align: 'center' },
  553. { key: 'no-key', name: '6', width: 100, align: 'center' },
  554. ],
  555. },
  556. {
  557. name: '上屈服力(KN)',
  558. children: [
  559. { key: 'no-key', name: '1', width: 100, align: 'center' },
  560. { key: 'no-key', name: '2', width: 100, align: 'center' },
  561. { key: 'no-key', name: '3', width: 100, align: 'center' },
  562. { key: 'no-key', name: '4', width: 100, align: 'center' },
  563. { key: 'no-key', name: '5', width: 100, align: 'center' },
  564. { key: 'no-key', name: '6', width: 100, align: 'center' },
  565. ],
  566. },
  567. {
  568. name: '下屈服力(KN)',
  569. children: [
  570. { key: 'no-key', name: '1', width: 100, align: 'center' },
  571. { key: 'no-key', name: '2', width: 100, align: 'center' },
  572. { key: 'no-key', name: '3', width: 100, align: 'center' },
  573. { key: 'no-key', name: '4', width: 100, align: 'center' },
  574. { key: 'no-key', name: '5', width: 100, align: 'center' },
  575. { key: 'no-key', name: '6', width: 100, align: 'center' },
  576. ],
  577. },
  578. {
  579. name: '上屈服强度(MPa)',
  580. children: [
  581. { key: 'no-key', name: '1', width: 100, align: 'center' },
  582. { key: 'no-key', name: '2', width: 100, align: 'center' },
  583. { key: 'no-key', name: '3', width: 100, align: 'center' },
  584. { key: 'no-key', name: '4', width: 100, align: 'center' },
  585. { key: 'no-key', name: '5', width: 100, align: 'center' },
  586. { key: 'no-key', name: '6', width: 100, align: 'center' },
  587. ],
  588. },
  589. {
  590. name: '下屈服强度(MPa)',
  591. children: [
  592. { key: 'no-key', name: '1', width: 100, align: 'center' },
  593. { key: 'no-key', name: '2', width: 100, align: 'center' },
  594. { key: 'no-key', name: '3', width: 100, align: 'center' },
  595. { key: 'no-key', name: '4', width: 100, align: 'center' },
  596. { key: 'no-key', name: '5', width: 100, align: 'center' },
  597. { key: 'no-key', name: '6', width: 100, align: 'center' },
  598. ],
  599. },
  600. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  601. ]
  602. }
  603. }
  604. //关闭关联查阅
  605. const relatedSearchModalClose = () => {
  606. isRelatedSearch.value = false
  607. relatedData1.value = []
  608. relatedData2.value = []
  609. relatedData3.value = []
  610. }
  611. </script>
  612. <style lang="scss" scoped>
  613. .title_box {
  614. font-size: 24px;
  615. font-weight: bolder;
  616. }
  617. </style>