test.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686
  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="35rem"
  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-1" label="合同段:" prop="contractId">
  92. <el-select v-model="addFormModal.contractId" placeholder="请选择" clearable>
  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-1 mt-4" label="汇总类别:" prop="classId">
  100. <el-select v-model="addFormModal.classId" placeholder="请选择" clearable>
  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-1 mt-4" label="报告时间:">
  105. <HcDatePicker :dates="addbetweenTime" clearable @change="addbetweenTimeUpdate" />
  106. </el-form-item>
  107. <el-form-item class="mb-1 mt-4" label="单位类型:" prop="unitType">
  108. <el-select v-model="addFormModal.unitType" placeholder="请选择" clearable>
  109. <el-option v-for="item in unitOpt" :key="item.id" :label="item.name" :value="item.id" />
  110. </el-select>
  111. </el-form-item>
  112. <el-form-item class="mb-5 mt-4" label="检测类型:" prop="detectionType">
  113. <el-select v-model="addFormModal.detectionType" placeholder="请选择" clearable>
  114. <el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
  115. </el-select>
  116. </el-form-item>
  117. </el-form>
  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, formValidate, 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. addbetweenTime.value = []
  368. }
  369. const addFormRules = {
  370. contractId: {
  371. required: true,
  372. trigger: 'blur',
  373. message: '请选择合同段',
  374. },
  375. classId: {
  376. required: true,
  377. trigger: 'blur',
  378. message: '请选择汇总类别',
  379. },
  380. unitType: {
  381. required: true,
  382. trigger: 'blur',
  383. message: '请选择单位类型',
  384. },
  385. detectionType: {
  386. required: true,
  387. trigger: 'blur',
  388. message: '请选择检测类型',
  389. },
  390. }
  391. const addFormRef = ref(null)
  392. const addModalSave = async () => {
  393. console.log(addFormModal.value)
  394. const res = await formValidate(addFormRef.value)
  395. if (!res) return
  396. addFormLoading.value = true
  397. const { error, code, msg } = await save({
  398. ...addFormModal.value,
  399. })
  400. addFormLoading.value = false
  401. //判断状态
  402. if (!error && code === 200) {
  403. window.$message.success(msg)
  404. addFormShow.value = false
  405. getTableData()
  406. }
  407. }
  408. const unitOpt = ref([
  409. { name: '施工', id: '1' },
  410. ])
  411. const downLoading = ref(false)
  412. const downClick = async () => {
  413. downLoading.value = true
  414. const { error, code, data } = await download({
  415. ids: arrToId(tableCheckedKeys.value),
  416. })
  417. downLoading.value = false
  418. const res = isString(data) ? data || '' : ''
  419. if (!error && code === 200 && res) {
  420. window.open(res, '_blank')
  421. }
  422. }
  423. //关联查阅
  424. const isRelatedSearch = ref(false)
  425. const relatedSearchClick = (row) => {
  426. isRelatedSearch.value = true
  427. //获取样品信息
  428. getSampleList(row.id)
  429. //获取委托单
  430. getCommissionData(row.entrustId)
  431. //获取关联设备
  432. getAcquisitionData(row.loadDataId)
  433. }
  434. //样品信息
  435. const relatedColumn1 = [
  436. { key: 'materialName', name: '样品名称' },
  437. { key: 'samplingDate', name: '取样日期' },
  438. { key: 'specificationNumber', name: '样品编号' },
  439. { key: 'specificationModel', name: '规格型号' },
  440. { key: 'materialCount', name: '试样数量' },
  441. { key: 'calculationUnit', name: '计算单位' },
  442. { key: 'proposedPosition', name: '拟用部位' },
  443. { key: 'representativeCount', name: '代表数量' },
  444. { key: 'userName', name: '取样人' },
  445. { key: 'carryTime', name: '入库时间', align: 'center' },
  446. { key: 'createTime', name: '试验时间', align: 'center' },
  447. { key: 'no-key', name: '样品处理' },
  448. { key: 'no-key', name: '时间(或处理原因)' },
  449. ]
  450. const relatedData1 = ref([])
  451. const getSampleList = async (id) => {
  452. relatedData1.value = []
  453. if (isNullES(id) || id == 0) return
  454. const { data } = await dataApi.getSampleList({ id })
  455. relatedData1.value = getArrValue(data)
  456. }
  457. //委托单信息
  458. const relatedColumn2 = [
  459. { key: 'entrustInfo', name: '委托单位' },
  460. { key: 'entrustNo', name: '委托单编号' },
  461. { key: 'entrustName', name: '委托单名称' },
  462. { key: 'status', name: '委托单状态', width: 120, align: 'center' },
  463. ]
  464. const relatedData2 = ref([])
  465. const getCommissionData = async (id) => {
  466. relatedData2.value = []
  467. if (isNullES(id) || id == 0) return
  468. const { data } = await commissionApi.detail(id)
  469. const res = getObjVal(data)
  470. relatedData2.value = res ? [res] : []
  471. }
  472. //设备采集信息
  473. const relatedColumn3 = [
  474. { key: 'engineInfo', name: '工程部位' },
  475. { key: 'deviceName', name: '设备名称' },
  476. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  477. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  478. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  479. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  480. { key: 'beArea', name: '承压面积(mm2)', width: 100, align: 'center' },
  481. { key: 'specimenSize', name: '试件尺寸(mm)', width: 100, align: 'center' },
  482. { key: 'desStrength', name: '设计强度(MPa)', width: 100, align: 'center' },
  483. { key: 'no-key', name: '龄期(d)', width: 100, align: 'center' },
  484. { key: 'load1', name: '荷载1(KN)', width: 100, align: 'center' },
  485. { key: 'load2', name: '荷载2(KN)', width: 100, align: 'center' },
  486. { key: 'load3', name: '荷载3(KN)', width: 100, align: 'center' },
  487. { key: 'no-key', name: '荷载4(KN)', width: 100, align: 'center' },
  488. { key: 'no-key', name: '荷载5(KN)', width: 100, align: 'center' },
  489. { key: 'no-key', name: '荷载6(KN)', width: 100, align: 'center' },
  490. { key: 'no-key', name: '强度代表值(MPa)', width: 100, align: 'center' },
  491. {
  492. name: '最大力总延伸(%)',
  493. children: [
  494. { key: 'maxConceal1', name: '1', width: 100, align: 'center' },
  495. { key: 'maxConceal2', name: '2', width: 100, align: 'center' },
  496. { key: 'maxConceal3', name: '3', width: 100, align: 'center' },
  497. ],
  498. },
  499. //{ key: 'dataQualified', name: '试验结果是否合格', width: 100, align: 'center' },
  500. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  501. ]
  502. const relatedData3 = ref([])
  503. const getAcquisitionData = async (id) => {
  504. relatedData3.value = []
  505. if (isNullES(id) || id == 0) return
  506. const { data } = await acquisitionApi.selectDataInfoById(id)
  507. const res = getObjVal(data)
  508. if (res) {
  509. relatedData3.value = res ? [res] : []
  510. setRelatedColumn3(res.testTypePId)
  511. }
  512. }
  513. //设置表头
  514. const setRelatedColumn3 = (type) => {
  515. //压力机
  516. if (type === '1') {
  517. relatedColumn3.value = [
  518. { key: 'engineInfo', name: '工程部位' },
  519. { key: 'deviceName', name: '设备名称' },
  520. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  521. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  522. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  523. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  524. { key: 'beArea', name: '承压面积(mm2)', width: 100, align: 'center' },
  525. { key: 'specimenSize', name: '试件尺寸(mm)', width: 100, align: 'center' },
  526. { key: 'desStrength', name: '设计强度(MPa)', width: 100, align: 'center' },
  527. { key: 'ageDate', name: '龄期(d)', width: 100, align: 'center' },
  528. { key: 'load1', name: '荷载1(KN)', width: 100, align: 'center' },
  529. { key: 'load2', name: '荷载2(KN)', width: 100, align: 'center' },
  530. { key: 'load3', name: '荷载3(KN)', width: 100, align: 'center' },
  531. { key: 'no-key', name: '荷载4(KN)', width: 100, align: 'center' },
  532. { key: 'no-key', name: '荷载5(KN)', width: 100, align: 'center' },
  533. { key: 'no-key', name: '荷载6(KN)', width: 100, align: 'center' },
  534. { key: 'strengthAVG', name: '强度代表值(MPa)', width: 100, align: 'center' },
  535. {
  536. name: '最大力总延伸(%)',
  537. children: [
  538. { key: 'maxConceal1', name: '1', width: 100, align: 'center' },
  539. { key: 'maxConceal2', name: '2', width: 100, align: 'center' },
  540. { key: 'maxConceal3', name: '3', width: 100, align: 'center' },
  541. ],
  542. },
  543. //{ key: 'dataQualified', name: '试验结果是否合格', width: 100, align: 'center' },
  544. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  545. ]
  546. } else if (type === '2') {
  547. //万能机
  548. relatedColumn3.value = [
  549. { key: 'engineInfo', name: '工程部位' },
  550. { key: 'deviceName', name: '设备名称' },
  551. { key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: 180, align: 'center' },
  552. { key: 'testDate', name: '试验日期', width: 160, align: 'center' },
  553. { key: 'specificationNumber', name: '样品编号', width: 180, align: 'center' },
  554. { key: 'testTypeName', name: '试验类型', width: 100, align: 'center' },
  555. { key: 'no-key', name: '牌号', width: 100, align: 'center' },
  556. { key: 'no-key', name: '公称直径(mm)', width: 100, align: 'center' },
  557. { key: 'no-key', name: '规格', width: 100, align: 'center' },
  558. {
  559. name: '最大力/荷载(KN)',
  560. children: [
  561. { key: 'no-key', name: '1', width: 100, align: 'center' },
  562. { key: 'no-key', name: '2', width: 100, align: 'center' },
  563. { key: 'no-key', name: '3', width: 100, align: 'center' },
  564. { key: 'no-key', name: '4', width: 100, align: 'center' },
  565. { key: 'no-key', name: '5', width: 100, align: 'center' },
  566. { key: 'no-key', name: '6', width: 100, align: 'center' },
  567. ],
  568. },
  569. {
  570. name: '抗拉强度/强度代表值(MPa)',
  571. children: [
  572. { key: 'no-key', name: '1', width: 100, align: 'center' },
  573. { key: 'no-key', name: '2', width: 100, align: 'center' },
  574. { key: 'no-key', name: '3', width: 100, align: 'center' },
  575. { key: 'no-key', name: '4', width: 100, align: 'center' },
  576. { key: 'no-key', name: '5', width: 100, align: 'center' },
  577. { key: 'no-key', name: '6', width: 100, align: 'center' },
  578. ],
  579. },
  580. {
  581. name: '上屈服力(KN)',
  582. children: [
  583. { key: 'no-key', name: '1', width: 100, align: 'center' },
  584. { key: 'no-key', name: '2', width: 100, align: 'center' },
  585. { key: 'no-key', name: '3', width: 100, align: 'center' },
  586. { key: 'no-key', name: '4', width: 100, align: 'center' },
  587. { key: 'no-key', name: '5', width: 100, align: 'center' },
  588. { key: 'no-key', name: '6', width: 100, align: 'center' },
  589. ],
  590. },
  591. {
  592. name: '下屈服力(KN)',
  593. children: [
  594. { key: 'no-key', name: '1', width: 100, align: 'center' },
  595. { key: 'no-key', name: '2', width: 100, align: 'center' },
  596. { key: 'no-key', name: '3', width: 100, align: 'center' },
  597. { key: 'no-key', name: '4', width: 100, align: 'center' },
  598. { key: 'no-key', name: '5', width: 100, align: 'center' },
  599. { key: 'no-key', name: '6', width: 100, align: 'center' },
  600. ],
  601. },
  602. {
  603. name: '上屈服强度(MPa)',
  604. children: [
  605. { key: 'no-key', name: '1', width: 100, align: 'center' },
  606. { key: 'no-key', name: '2', width: 100, align: 'center' },
  607. { key: 'no-key', name: '3', width: 100, align: 'center' },
  608. { key: 'no-key', name: '4', width: 100, align: 'center' },
  609. { key: 'no-key', name: '5', width: 100, align: 'center' },
  610. { key: 'no-key', name: '6', width: 100, align: 'center' },
  611. ],
  612. },
  613. {
  614. name: '下屈服强度(MPa)',
  615. children: [
  616. { key: 'no-key', name: '1', width: 100, align: 'center' },
  617. { key: 'no-key', name: '2', width: 100, align: 'center' },
  618. { key: 'no-key', name: '3', width: 100, align: 'center' },
  619. { key: 'no-key', name: '4', width: 100, align: 'center' },
  620. { key: 'no-key', name: '5', width: 100, align: 'center' },
  621. { key: 'no-key', name: '6', width: 100, align: 'center' },
  622. ],
  623. },
  624. { key: 'dataStatus', name: '数据状态', width: 100, align: 'center' },
  625. ]
  626. }
  627. }
  628. //关闭关联查阅
  629. const relatedSearchModalClose = () => {
  630. isRelatedSearch.value = false
  631. relatedData1.value = []
  632. relatedData2.value = []
  633. relatedData3.value = []
  634. }
  635. </script>
  636. <style lang="scss" scoped>
  637. .title_box {
  638. font-size: 24px;
  639. font-weight: bolder;
  640. }
  641. </style>