Browse Source

2026-06-15

Lab优化
master
fengyuan_yang 3 days ago
parent
commit
12284ed812
  1. 271
      src/views/modules/lab/labRecord.vue

271
src/views/modules/lab/labRecord.vue

@ -593,69 +593,170 @@
<el-tab-pane label="基本信息" name="basicInfo">
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="序列号"><el-input :value="currentDetail.referenceNo || ''" disabled style="width: 150px"></el-input></el-form-item>
<el-form-item label="申请人"><el-input :value="currentDetail.applicant || ''" disabled style="width: 120px"></el-input></el-form-item>
<el-form-item label="申请人名称"><el-input :value="currentDetail.applicantName || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="申请日期"><el-input :value="normalizeDateOnly(currentDetail.applicationDate)" disabled style="width: 130px"></el-input></el-form-item>
<el-form-item label="Site"><el-input :value="currentDetail.site || ''" disabled style="width: 110px"></el-input></el-form-item>
<el-form-item label="申请部门"><el-input :value="currentDetail.applyDepartment || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="需求日期"><el-input :value="normalizeDateOnly(currentDetail.requestedDate)" disabled style="width: 130px"></el-input></el-form-item>
<el-form-item label="客户"><el-input :value="currentDetail.customerId || ''" disabled style="width: 130px"></el-input></el-form-item>
<el-form-item label="客户名称"><el-input :value="currentDetail.customerName || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="项目"><el-input :value="currentDetail.projectId || ''" disabled style="width: 130px"></el-input></el-form-item>
<el-form-item label="项目名称"><el-input :value="currentDetail.projectName || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="申请人">
<el-input :value="currentDetail.applicant || ''" disabled style="width: 100px"></el-input>
<el-input :value="currentDetail.applicantName || ''" disabled style="width: 155px"></el-input>
</el-form-item>
<el-form-item label="申请日期">
<el-input :value="normalizeDateOnly(currentDetail.applicationDate)" disabled style="width: 110px"></el-input>
</el-form-item>
<el-form-item label="Site">
<el-input :value="currentDetail.site || ''" disabled style="width: 135px"></el-input>
</el-form-item>
<el-form-item label="申请部门">
<el-input :value="currentDetail.applyDepartment || ''" disabled style="width: 225px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="样品名称"><el-input :value="currentDetail.sampleName || ''" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="样品型号"><el-input :value="currentDetail.sampleModel || ''" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="样品数量"><el-input :value="currentDetail.sampleQty || ''" disabled style="width: 140px"></el-input></el-form-item>
<el-form-item label="测试目的"><el-input :value="currentDetail.testPurpose || ''" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="产品阶段"><el-input :value="currentDetail.productStage || ''" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="测试类型"><el-input :value="currentDetail.testType || ''" disabled style="width: 140px"></el-input></el-form-item>
<el-form-item label="报告出具"><el-input :value="currentDetail.reportDocument || ''" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="样品退回"><el-input :value="displayYesNo(currentDetail.returnSample)" disabled style="width: 200px"></el-input></el-form-item>
<el-form-item label="测试实验室"><el-input :value="currentDetail.testLab || ''" disabled style="width: 140px"></el-input></el-form-item>
<el-form-item label="客户">
<el-input :value="currentDetail.customerId || ''" disabled style="width: 100px"></el-input>
<el-input :value="currentDetail.customerName || ''" disabled style="width: 155px"></el-input>
</el-form-item>
<el-form-item label="项目">
<el-input :value="currentDetail.projectId || ''" disabled style="width: 100px"></el-input>
<el-input :value="currentDetail.projectName || ''" disabled style="width: 155px"></el-input>
</el-form-item>
<el-form-item label="需求日期">
<el-input :value="normalizeDateOnly(currentDetail.requestedDate)" disabled style="width: 225px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="应用表面" style="display: block;">
<el-input :value="currentDetail.applicationSurface || ''" disabled style="width: 810px"></el-input>
<el-form-item label="样品名称">
<el-input :value="currentDetail.sampleName || ''" disabled style="width: 260px"></el-input>
</el-form-item>
<el-form-item label="样品型号">
<el-input :value="currentDetail.sampleModel || ''" disabled style="width: 259px"></el-input>
</el-form-item>
<el-form-item label="样品数量">
<el-input :value="currentDetail.sampleQty || ''" disabled style="width: 225px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="注意事项" style="display: block;">
<el-input type="textarea" :rows="2" :value="currentDetail.attention || ''" disabled resize="none" style="width: 810px"></el-input>
<el-form-item label="测试目的">
<el-input :value="currentDetail.testPurpose || ''" disabled style="width: 260px"></el-input>
</el-form-item>
<el-form-item label="产品阶段">
<el-input :value="currentDetail.productStage || ''" disabled style="width: 259px"></el-input>
</el-form-item>
<el-form-item label="测试类型">
<el-input :value="currentDetail.testType || ''" disabled style="width: 225px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 30px">
<el-form-item label="属性信息" style="display: block;">
<el-table
:data="currentDetail.propertyItemList || []"
border
:height="170"
style="width: 810px;">
<el-table-column prop="itemNo" header-align="center" align="center" label="属性编码" width="160"></el-table-column>
<el-table-column prop="itemDesc" header-align="center" align="left" label="属性名称" min-width="260"></el-table-column>
<el-table-column prop="itemValue" header-align="center" align="left" label="属性值" min-width="300" show-overflow-tooltip></el-table-column>
</el-table>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="报告出具">
<el-input :value="currentDetail.reportDocument || ''" disabled style="width: 260px"></el-input>
</el-form-item>
<el-form-item label="样品退回">
<el-input :value="displayYesNo(currentDetail.returnSample)" disabled style="width: 259px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="Application Surface">
<el-input :value="currentDetail.applicationSurface || ''" disabled style="width: 533px"></el-input>
</el-form-item>
<el-form-item label="Test Lab">
<el-input :value="currentDetail.testLab || ''" disabled style="width: 225px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="测试规范附件" style="display: block;">
<div class="judge-criteria-box" style="cursor: default;">
<template v-if="currentTestSpecFileList.length > 0">
<el-link
v-for="item in currentTestSpecFileList"
:key="item.id"
type="primary"
style="margin-right: 10px"
@click.stop="previewJudgeCriteriaFile(item)">
{{ item.fileName }}
</el-link>
</template>
<span v-else class="judge-criteria-placeholder">暂无测试规范附件</span>
</div>
</el-form-item>
</el-form>
<div class="rq" style="width: 780px;margin-top: 20px">
<el-table
:data="currentDetail.propertyItemList || []"
border
:height="260"
style="width: 100%;">
<el-table-column prop="itemNo" header-align="center" align="center" label="属性编码" width="100"></el-table-column>
<el-table-column prop="itemDesc" header-align="center" align="left" label="属性名称" min-width="150"></el-table-column>
<el-table-column prop="itemValue" header-align="center" align="left" label="属性值" min-width="250" show-overflow-tooltip></el-table-column>
</el-table>
</div>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 5px">
<el-form-item label="判断标准附件" style="display: block;">
<div class="judge-criteria-box" style="cursor: default;">
<template v-if="currentJudgeCriteriaFileList.length > 0">
<el-link
v-for="item in currentJudgeCriteriaFileList"
:key="item.id"
type="primary"
style="margin-right: 10px"
@click.stop="previewJudgeCriteriaFile(item)">
{{ item.fileName }}
</el-link>
</template>
<span v-else class="judge-criteria-placeholder">暂无判断标准附件</span>
</div>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px">
<el-form-item label="注意事项" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.attention || ''" disabled resize="none" style="width: 780px"></el-input>
</el-form-item>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane label="结果信息" name="resultInfo">
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="测试开始时间"><el-input :value="normalizeDateOnly(currentDetail.testStartDate)" disabled style="width: 170px"></el-input></el-form-item>
<el-form-item label="测试完成日期"><el-input :value="normalizeDateOnly(currentDetail.completedDate)" disabled style="width: 170px"></el-input></el-form-item>
<el-form-item label="测试编码"><el-input :value="currentDetail.testNumber || ''" disabled style="width: 170px"></el-input></el-form-item>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="测试开始时间">
<el-input :value="normalizeDateOnly(currentDetail.testStartDate)" disabled style="width: 170px"></el-input>
</el-form-item>
<el-form-item label="测试完成日期">
<el-input :value="normalizeDateOnly(currentDetail.completedDate)" disabled style="width: 170px"></el-input>
</el-form-item>
<el-form-item label="测试编码">
<el-input :value="currentDetail.testNumber || ''" disabled style="width: 250px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="异常情况及说明" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.unnormalSymptomAndDescription || ''" disabled resize="none" style="width: 810px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.unnormalSymptomAndDescription || ''" disabled resize="none" style="width: 780px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px">
<el-form-item label="测试报告附件" style="display: block;">
<div class="judge-criteria-box" style="cursor: default;">
<template v-if="currentTestReportFileList.length > 0">
<el-link
v-for="item in currentTestReportFileList"
:key="item.id"
type="primary"
style="margin-right: 10px"
@click.stop="previewTestReportFile(item)">
{{ item.fileName }}
</el-link>
</template>
<span v-else class="judge-criteria-placeholder">暂无测试报告附件</span>
</div>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px">
<el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.testerComments || ''" disabled resize="none" style="width: 810px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.testerComments || ''" disabled resize="none" style="width: 780px"></el-input>
</el-form-item>
</el-form>
</div>
@ -664,7 +765,7 @@
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="6" :value="currentDetail.departmentManagerComments || ''" disabled resize="none" style="width: 810px"></el-input>
<el-input type="textarea" :rows="4" :value="currentDetail.departmentManagerComments || ''" disabled resize="none" style="width: 780px"></el-input>
</el-form-item>
</el-form>
</div>
@ -673,12 +774,12 @@
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.labComments || ''" disabled resize="none" style="width: 810px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.labComments || ''" disabled resize="none" style="width: 780px"></el-input>
</el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px">
<el-form-item label="测试人">
<el-input :value="currentDetail.testerName || currentDetail.tester || ''" disabled style="width: 810px"></el-input>
<el-input :value="currentDetail.testerName || currentDetail.tester || ''" disabled style="width: 780px"></el-input>
</el-form-item>
</el-form>
</div>
@ -774,6 +875,9 @@ export default {
testSpecDialogVisible: false,
testReportDialogVisible: false,
judgeCriteriaFileList: [],
currentJudgeCriteriaFileList: [],
currentTestSpecFileList: [],
currentTestReportFileList: [],
testReportFileList: [],
judgeCriteriaFileColumnList: [
{
@ -1117,44 +1221,54 @@ export default {
ref.handleQuery()
}
},
refreshJudgeCriteriaFileList () {
if (!this.modalData.site || !this.modalData.referenceNo) {
this.judgeCriteriaFileList = []
return Promise.resolve()
queryAttachmentFileList (site, referenceNo, orderRef3) {
if (!site || !referenceNo || !orderRef3) {
return Promise.resolve([])
}
const params = {
orderRef1: this.modalData.site,
orderRef2: this.modalData.referenceNo,
orderRef3: 'judgeCriteria'
orderRef1: site,
orderRef2: referenceNo,
orderRef3: orderRef3
}
return queryOss(params).then(({data}) => {
if (data && data.code === 0 && Array.isArray(data.rows)) {
this.judgeCriteriaFileList = data.rows
} else {
this.judgeCriteriaFileList = []
return data.rows
}
return []
}).catch(() => {
this.judgeCriteriaFileList = []
return []
})
},
refreshJudgeCriteriaFileList () {
return this.queryAttachmentFileList(this.modalData.site, this.modalData.referenceNo, 'judgeCriteria').then(rows => {
this.judgeCriteriaFileList = rows
})
},
refreshTestReportFileList () {
if (!this.modalData.site || !this.modalData.referenceNo) {
this.testReportFileList = []
return this.queryAttachmentFileList(this.modalData.site, this.modalData.referenceNo, 'testReport').then(rows => {
this.testReportFileList = rows
})
},
loadCurrentAttachmentFileLists (site, referenceNo, requestId) {
if (!site || !referenceNo) {
if (requestId === this.currentDetailRequestId) {
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
}
return Promise.resolve()
}
const params = {
orderRef1: this.modalData.site,
orderRef2: this.modalData.referenceNo,
orderRef3: 'testReport'
}
return queryOss(params).then(({data}) => {
if (data && data.code === 0 && Array.isArray(data.rows)) {
this.testReportFileList = data.rows
} else {
this.testReportFileList = []
return Promise.all([
this.queryAttachmentFileList(site, referenceNo, 'judgeCriteria'),
this.queryAttachmentFileList(site, referenceNo, 'testSpec'),
this.queryAttachmentFileList(site, referenceNo, 'testReport')
]).then(([judgeFiles, testSpecFiles, testReportFiles]) => {
if (requestId !== this.currentDetailRequestId) {
return
}
}).catch(() => {
this.testReportFileList = []
this.currentJudgeCriteriaFileList = judgeFiles
this.currentTestSpecFileList = testSpecFiles
this.currentTestReportFileList = testReportFiles
})
},
openJudgeCriteriaDialog () {
@ -1655,6 +1769,9 @@ export default {
this.currentDetailRequestId += 1
this.currentDetailLoading = false
this.currentDetail = this.buildDefaultModalData()
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
this.refreshCurrentTabTable()
return
}
@ -1668,11 +1785,18 @@ export default {
this.currentDetailRequestId += 1
this.currentDetailLoading = false
this.currentDetail = this.buildDefaultModalData()
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
return
}
const requestId = this.currentDetailRequestId + 1
this.currentDetailRequestId = requestId
this.currentDetailLoading = true
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
this.loadCurrentAttachmentFileLists(row.site, row.referenceNo, requestId)
api.getLabDetail(row.site, row.referenceNo).then(({data}) => {
if (requestId !== this.currentDetailRequestId) {
return
@ -1748,6 +1872,9 @@ export default {
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
this.approvalList = []
return
}
@ -1790,6 +1917,9 @@ export default {
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
this.approvalList = []
}
this.dataListLoading = false
@ -1798,6 +1928,9 @@ export default {
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.currentJudgeCriteriaFileList = []
this.currentTestSpecFileList = []
this.currentTestReportFileList = []
this.approvalList = []
this.dataListLoading = false
})

Loading…
Cancel
Save