Browse Source

2026-06-29

lab优化
master
fengyuan_yang 1 month ago
parent
commit
5897aae08b
  1. 110
      src/views/modules/lab/labRecord.vue

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

@ -131,15 +131,15 @@
<el-dialog <el-dialog
:title="modalTitle" :title="modalTitle"
:visible.sync="modalFlag" :visible.sync="modalFlag"
width="1010px"
width="1025px"
top="5vh" top="5vh"
v-drag v-drag
:close-on-click-modal="false" :close-on-click-modal="false"
:showClose="false"> :showClose="false">
<el-tabs tab-position="left" type="border-card" v-model="activeName" style="width: 100%;height: 770px;">
<el-tabs tab-position="left" type="border-card" v-model="activeName" style="width: 100%;height: 730px;">
<el-tab-pane label="基本信息" name="basicInfo"> <el-tab-pane label="基本信息" name="basicInfo">
<div style="height: 755px; overflow-y: auto;">
<div style="height: 715px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;">
<el-form-item> <el-form-item>
<span style="cursor: pointer" v-if="!isLabFieldDisabled('applicant')" slot="label" @click="getBaseList(103, 1)"><a herf="#">申请人</a></span> <span style="cursor: pointer" v-if="!isLabFieldDisabled('applicant')" slot="label" @click="getBaseList(103, 1)"><a herf="#">申请人</a></span>
@ -243,7 +243,7 @@
readonly readonly
clearable clearable
:disabled="isLabFieldDisabled('labApprover')" :disabled="isLabFieldDisabled('labApprover')"
style="width: 780px"
style="width: 772px"
@focus="openLabApproverChooseModal"> @focus="openLabApproverChooseModal">
<span slot="suffix" v-show="modalData.labApproverName && !isLabFieldDisabled('labApprover')" @click.stop="clearLabApproverSelection"> <span slot="suffix" v-show="modalData.labApproverName && !isLabFieldDisabled('labApprover')" @click.stop="clearLabApproverSelection">
<i class="el-icon-circle-close"></i> <i class="el-icon-circle-close"></i>
@ -255,11 +255,10 @@
<el-form :inline="true" label-position="top" style="margin-top: -15px"> <el-form :inline="true" label-position="top" style="margin-top: -15px">
<el-form-item label=" "> <el-form-item label=" ">
<el-button type="primary" :disabled="showModalFlag" @click="openPropertyChooseModal">选择属性信息</el-button> <el-button type="primary" :disabled="showModalFlag" @click="openPropertyChooseModal">选择属性信息</el-button>
<el-button type="primary" style="margin-left: 8px;" @click="openTestSpecDialog">测试规范</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="rq" style="width: 780px;">
<div class="rq" style="width: 772px;">
<el-table <el-table
:data="modalData.propertyItemList" :data="modalData.propertyItemList"
border border
@ -288,7 +287,29 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 5px">
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 0px">
<el-form-item style="display: block;">
<template slot="label">
<span class="judge-criteria-label" @click="openTestSpecDialog">测试规范</span>
</template>
<div class="judge-criteria-box">
<template v-if="testSpecFileList.length > 0">
<el-link
v-for="item in testSpecFileList"
: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="modalData" style="margin-top: 15px">
<el-form-item style="display: block;"> <el-form-item style="display: block;">
<template slot="label"> <template slot="label">
<span class="judge-criteria-label" @click="openJudgeCriteriaDialog">判断标准</span> <span class="judge-criteria-label" @click="openJudgeCriteriaDialog">判断标准</span>
@ -310,7 +331,7 @@
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 15px"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 15px">
<el-form-item label="注意事项" style="display: block;"> <el-form-item label="注意事项" style="display: block;">
<el-input type="textarea" :rows="3" v-model="modalData.attention" :disabled="isLabFieldDisabled('attention')" resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" v-model="modalData.attention" :disabled="isLabFieldDisabled('attention')" resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -331,7 +352,7 @@
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData"> <el-form :inline="true" label-position="top" :model="modalData">
<el-form-item label="异常情况及说明" style="display: block;"> <el-form-item label="异常情况及说明" style="display: block;">
<el-input type="textarea" :rows="3" v-model="modalData.unnormalSymptomAndDescription" :disabled="isLabFieldDisabled('unnormalSymptomAndDescription')" resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" v-model="modalData.unnormalSymptomAndDescription" :disabled="isLabFieldDisabled('unnormalSymptomAndDescription')" resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 45px"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 45px">
@ -356,7 +377,7 @@
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 20px"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 20px">
<el-form-item label="备注" style="display: block;"> <el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="3" v-model="modalData.testerComments" :disabled="isLabFieldDisabled('testerComments')" resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" v-model="modalData.testerComments" :disabled="isLabFieldDisabled('testerComments')" resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -366,7 +387,7 @@
<div style="height: 715px; overflow-y: auto;"> <div style="height: 715px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;">
<el-form-item label="备注" style="display: block;"> <el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="4" v-model="modalData.departmentManagerComments" :disabled="isLabFieldDisabled('departmentManagerComments')" resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="4" v-model="modalData.departmentManagerComments" :disabled="isLabFieldDisabled('departmentManagerComments')" resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -376,7 +397,7 @@
<div style="height: 715px; overflow-y: auto;"> <div style="height: 715px; overflow-y: auto;">
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: -5px;">
<el-form-item label="备注(实验室)" style="display: block;"> <el-form-item label="备注(实验室)" style="display: block;">
<el-input type="textarea" :rows="3" v-model="modalData.labComments" :disabled="isLabFieldDisabled('labComments')" resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" v-model="modalData.labComments" :disabled="isLabFieldDisabled('labComments')" resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 45px"> <el-form :inline="true" label-position="top" :model="modalData" style="margin-top: 45px">
@ -387,7 +408,7 @@
v-model="modalData.testerName" v-model="modalData.testerName"
readonly readonly
:disabled="isLabFieldDisabled('tester')" :disabled="isLabFieldDisabled('tester')"
style="width: 780px"
style="width: 772px"
placeholder="请选择测试人" placeholder="请选择测试人"
@focus="openTesterChooseModal"> @focus="openTesterChooseModal">
<span slot="suffix" v-show="modalData.testerName && !isLabFieldDisabled('tester')" @click.stop="clearTesterSelection"> <span slot="suffix" v-show="modalData.testerName && !isLabFieldDisabled('tester')" @click.stop="clearTesterSelection">
@ -722,13 +743,25 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: -8px">
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 0px">
<el-form-item label="实验室审批人" style="display: block;"> <el-form-item label="实验室审批人" style="display: block;">
<el-input :value="currentDetail.labApproverName || currentDetail.labApprover || ''" disabled style="width: 780px"></el-input>
<el-input :value="currentDetail.labApproverName || currentDetail.labApprover || ''" disabled style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail">
<div class="rq" style="width: 772px;margin-top: 0px">
<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;"> <el-form-item label="测试规范附件" style="display: block;">
<div class="judge-criteria-box" style="cursor: default;"> <div class="judge-criteria-box" style="cursor: default;">
<template v-if="currentTestSpecFileList.length > 0"> <template v-if="currentTestSpecFileList.length > 0">
@ -746,19 +779,7 @@
</el-form-item> </el-form-item>
</el-form> </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 :inline="true" label-position="top" :model="currentDetail" style="margin-top: 18px">
<el-form-item label="判断标准附件" style="display: block;"> <el-form-item label="判断标准附件" style="display: block;">
<div class="judge-criteria-box" style="cursor: default;"> <div class="judge-criteria-box" style="cursor: default;">
<template v-if="currentJudgeCriteriaFileList.length > 0"> <template v-if="currentJudgeCriteriaFileList.length > 0">
@ -778,7 +799,7 @@
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px"> <el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px">
<el-form-item label="注意事项" style="display: block;"> <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-input type="textarea" :rows="3" :value="currentDetail.attention || ''" disabled resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -798,7 +819,7 @@
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail"> <el-form :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="异常情况及说明" style="display: block;"> <el-form-item label="异常情况及说明" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.unnormalSymptomAndDescription || ''" disabled resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.unnormalSymptomAndDescription || ''" disabled resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px"> <el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px">
@ -820,7 +841,7 @@
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px"> <el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 20px">
<el-form-item label="备注" style="display: block;"> <el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.testerComments || ''" disabled resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.testerComments || ''" disabled resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -829,7 +850,7 @@
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;"> <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 :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="备注" style="display: block;"> <el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="4" :value="currentDetail.departmentManagerComments || ''" disabled resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="4" :value="currentDetail.departmentManagerComments || ''" disabled resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -838,12 +859,12 @@
<div :style="{height: secondHeight + 'px'}" style="margin-left: 5px;margin-top: 5px; overflow-y: auto;"> <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 :inline="true" label-position="top" :model="currentDetail">
<el-form-item label="备注" style="display: block;"> <el-form-item label="备注" style="display: block;">
<el-input type="textarea" :rows="3" :value="currentDetail.labComments || ''" disabled resize="none" style="width: 780px"></el-input>
<el-input type="textarea" :rows="3" :value="currentDetail.labComments || ''" disabled resize="none" style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px"> <el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px">
<el-form-item label="测试人"> <el-form-item label="测试人">
<el-input :value="currentDetail.testerName || currentDetail.tester || ''" disabled style="width: 780px"></el-input>
<el-input :value="currentDetail.testerName || currentDetail.tester || ''" disabled style="width: 772px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -941,6 +962,7 @@ export default {
testSpecDialogVisible: false, testSpecDialogVisible: false,
testReportDialogVisible: false, testReportDialogVisible: false,
judgeCriteriaFileList: [], judgeCriteriaFileList: [],
testSpecFileList: [],
currentJudgeCriteriaFileList: [], currentJudgeCriteriaFileList: [],
currentTestSpecFileList: [], currentTestSpecFileList: [],
currentTestReportFileList: [], currentTestReportFileList: [],
@ -1190,6 +1212,7 @@ export default {
this.clearLabApproverFieldData() this.clearLabApproverFieldData()
this.$set(this.modalData, 'propertyItemList', []) this.$set(this.modalData, 'propertyItemList', [])
this.judgeCriteriaFileList = [] this.judgeCriteriaFileList = []
this.testSpecFileList = []
this.testReportFileList = [] this.testReportFileList = []
this.searchProjectData.site = site this.searchProjectData.site = site
}, },
@ -1351,6 +1374,11 @@ export default {
this.judgeCriteriaFileList = rows this.judgeCriteriaFileList = rows
}) })
}, },
refreshTestSpecFileList () {
return this.queryAttachmentFileList(this.modalData.site, this.modalData.referenceNo, 'testSpec').then(rows => {
this.testSpecFileList = rows
})
},
refreshTestReportFileList () { refreshTestReportFileList () {
return this.queryAttachmentFileList(this.modalData.site, this.modalData.referenceNo, 'testReport').then(rows => { return this.queryAttachmentFileList(this.modalData.site, this.modalData.referenceNo, 'testReport').then(rows => {
this.testReportFileList = rows this.testReportFileList = rows
@ -1403,6 +1431,7 @@ export default {
return return
} }
this.testSpecDialogVisible = true this.testSpecDialogVisible = true
this.refreshTestSpecFileList()
this.$nextTick(() => { this.$nextTick(() => {
this.refreshTestSpecOssTable() this.refreshTestSpecOssTable()
}) })
@ -1426,7 +1455,7 @@ export default {
this.refreshJudgeCriteriaFileList() this.refreshJudgeCriteriaFileList()
}, },
handleTestSpecDialogClose () { handleTestSpecDialogClose () {
// placeholder to align with dialog close event and keep lifecycle symmetric
this.refreshTestSpecFileList()
}, },
handleTestReportDialogClose () { handleTestReportDialogClose () {
this.refreshTestReportFileList() this.refreshTestReportFileList()
@ -2285,6 +2314,9 @@ export default {
this.nodeAuthorityLoaded = !row this.nodeAuthorityLoaded = !row
this.isEditMode = !!row this.isEditMode = !!row
this.showModalFlag = !!(row && (row.status === '已完成' || !this.authUpdate)) this.showModalFlag = !!(row && (row.status === '已完成' || !this.authUpdate))
this.judgeCriteriaFileList = []
this.testSpecFileList = []
this.testReportFileList = []
if (row) { if (row) {
this.modalTitle = 'Lab 编辑' this.modalTitle = 'Lab 编辑'
@ -2315,11 +2347,13 @@ export default {
this.loadModalButtonCondition() this.loadModalButtonCondition()
this.loadNodeAuthority(this.modalData.site || row.site, this.modalData.stepId !== null && this.modalData.stepId !== undefined ? this.modalData.stepId : 10) this.loadNodeAuthority(this.modalData.site || row.site, this.modalData.stepId !== null && this.modalData.stepId !== undefined ? this.modalData.stepId : 10)
this.refreshJudgeCriteriaFileList() this.refreshJudgeCriteriaFileList()
this.refreshTestSpecFileList()
this.refreshTestReportFileList() this.refreshTestReportFileList()
} }
}).catch(() => { }).catch(() => {
this.loadNodeAuthority(row.site, row.stepId !== null && row.stepId !== undefined ? row.stepId : 10) this.loadNodeAuthority(row.site, row.stepId !== null && row.stepId !== undefined ? row.stepId : 10)
this.judgeCriteriaFileList = [] this.judgeCriteriaFileList = []
this.testSpecFileList = []
this.testReportFileList = [] this.testReportFileList = []
}) })
} else { } else {
@ -2349,8 +2383,6 @@ export default {
this.$set(this.modalData, 'labApproverCodeList', []) this.$set(this.modalData, 'labApproverCodeList', [])
this.$set(this.modalData, 'labApproverList', []) this.$set(this.modalData, 'labApproverList', [])
this.$set(this.modalData, 'labApproverName', '') this.$set(this.modalData, 'labApproverName', '')
this.judgeCriteriaFileList = []
this.testReportFileList = []
this.searchProjectData.site = defaultSite this.searchProjectData.site = defaultSite
this.nodeAuthorityLoaded = true this.nodeAuthorityLoaded = true
this.loadNodeAuthority(this.modalData.site, 10) this.loadNodeAuthority(this.modalData.site, 10)
@ -2758,7 +2790,7 @@ export default {
} }
.judge-criteria-box { .judge-criteria-box {
width: 780px;
width: 772px;
min-height: 38px; min-height: 38px;
border: 1px solid #DCDFE6; border: 1px solid #DCDFE6;
border-radius: 4px; border-radius: 4px;

Loading…
Cancel
Save