Browse Source

2026-06-15

Lab优化
master
fengyuan_yang 3 days ago
parent
commit
31c43ec40f
  1. 194
      src/views/modules/lab/labRecord.vue

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

@ -344,7 +344,7 @@
<el-tab-pane label="审批信息-部门经理" name="departmentManagerInfo"> <el-tab-pane label="审批信息-部门经理" name="departmentManagerInfo">
<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: 780px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -589,19 +589,99 @@
</el-form> </el-form>
</el-dialog> </el-dialog>
<el-tabs v-model="activeTable" type="border-card" style="margin-top: 6px; width: 100%; min-height: 300px;" @tab-click="tabClick">
<el-tabs v-model="activeTable" type="border-card" style="width: 100%; height: 100%;" @tab-click="tabClick" v-loading="currentDetailLoading" class="customer-tab">
<el-tab-pane label="基本信息" name="basicInfo"> <el-tab-pane label="基本信息" name="basicInfo">
<el-form :inline="true" label-position="top" :model="currentRow" style="margin-top: 5px;">
<el-form-item label="申请人"><el-input :value="currentRow.applicant || ''" disabled style="width: 150px"></el-input></el-form-item>
<el-form-item label="申请人名称"><el-input :value="currentRow.applicantName || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="申请日期"><el-input :value="normalizeDateOnly(currentRow.applicationDate)" disabled style="width: 150px"></el-input></el-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentRow">
<el-form-item label="客户"><el-input :value="currentRow.customerId || ''" disabled style="width: 150px"></el-input></el-form-item>
<el-form-item label="客户名称"><el-input :value="currentRow.customerName || ''" disabled style="width: 180px"></el-input></el-form-item>
<el-form-item label="项目"><el-input :value="currentRow.projectId || ''" disabled style="width: 150px"></el-input></el-form-item>
<el-form-item label="项目名称"><el-input :value="currentRow.projectName || ''" disabled style="width: 180px"></el-input></el-form-item>
</el-form>
<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>
<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>
<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>
</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>
</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-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>
<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-form-item>
</el-form>
<el-form :inline="true" label-position="top" :model="currentDetail" style="margin-top: 45px">
<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-form-item>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane label="审批信息-部门经理" name="departmentManagerInfo">
<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-form-item>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane label="审批信息-实验室" name="labInfo">
<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-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-form-item>
</el-form>
</div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="审批信息" name="approvalInformation"> <el-tab-pane label="审批信息" name="approvalInformation">
<approval-information v-model:data-list="approvalList" :height="secondHeight"></approval-information> <approval-information v-model:data-list="approvalList" :height="secondHeight"></approval-information>
@ -672,6 +752,9 @@ export default {
height: 400, height: 400,
secondHeight: 200, secondHeight: 200,
currentRow: {}, currentRow: {},
currentDetail: this.buildDefaultModalData(),
currentDetailLoading: false,
currentDetailRequestId: 0,
nodeOptions: [], nodeOptions: [],
approvalList: [], approvalList: [],
plmLabAuthorityArr: [], plmLabAuthorityArr: [],
@ -1556,13 +1639,79 @@ export default {
return { cursor: 'pointer' } return { cursor: 'pointer' }
}, },
changeClickRow (row) { changeClickRow (row) {
this.currentRow = row || {}
this.refreshCurrentTabTable()
this.handleCurrentRowChange(row)
}, },
currentChange (row) { currentChange (row) {
this.currentRow = row || {}
this.handleCurrentRowChange(row)
},
handleCurrentRowChange (row) {
const nextRow = row || {}
const prevSite = (this.currentRow && this.currentRow.site) || ''
const prevReferenceNo = (this.currentRow && this.currentRow.referenceNo) || ''
const nextSite = nextRow.site || ''
const nextReferenceNo = nextRow.referenceNo || ''
this.currentRow = nextRow
if (!nextSite || !nextReferenceNo) {
this.currentDetailRequestId += 1
this.currentDetailLoading = false
this.currentDetail = this.buildDefaultModalData()
this.refreshCurrentTabTable()
return
}
if (prevSite !== nextSite || prevReferenceNo !== nextReferenceNo) {
this.loadCurrentDetail(nextRow)
}
this.refreshCurrentTabTable() this.refreshCurrentTabTable()
}, },
loadCurrentDetail (row) {
if (!row || !row.site || !row.referenceNo) {
this.currentDetailRequestId += 1
this.currentDetailLoading = false
this.currentDetail = this.buildDefaultModalData()
return
}
const requestId = this.currentDetailRequestId + 1
this.currentDetailRequestId = requestId
this.currentDetailLoading = true
api.getLabDetail(row.site, row.referenceNo).then(({data}) => {
if (requestId !== this.currentDetailRequestId) {
return
}
if (data && data.code === 0) {
const detail = data.data || {}
const mergedDetail = {
...this.buildDefaultModalData(),
...row,
...detail
}
this.fillDisplayFields(mergedDetail, row || {})
this.$set(mergedDetail, 'propertyItemList', (detail.propertyItemList || []).map(item => this.normalizePropertyItem(item)))
this.$set(mergedDetail, 'testerList', this.normalizeTesterList(mergedDetail.tester))
this.currentDetail = mergedDetail
} else {
const fallbackDetail = {
...this.buildDefaultModalData(),
...row
}
this.fillDisplayFields(fallbackDetail, row || {})
this.currentDetail = fallbackDetail
}
}).catch(() => {
if (requestId !== this.currentDetailRequestId) {
return
}
const fallbackDetail = {
...this.buildDefaultModalData(),
...row
}
this.fillDisplayFields(fallbackDetail, row || {})
this.currentDetail = fallbackDetail
}).finally(() => {
if (requestId === this.currentDetailRequestId) {
this.currentDetailLoading = false
}
})
},
tabClick () { tabClick () {
this.refreshCurrentTabTable() this.refreshCurrentTabTable()
}, },
@ -1596,6 +1745,9 @@ export default {
this.dataList = [] this.dataList = []
this.totalPage = 0 this.totalPage = 0
this.currentRow = {} this.currentRow = {}
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.approvalList = [] this.approvalList = []
return return
} }
@ -1635,11 +1787,17 @@ export default {
this.dataList = [] this.dataList = []
this.totalPage = 0 this.totalPage = 0
this.currentRow = {} this.currentRow = {}
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.approvalList = [] this.approvalList = []
} }
this.dataListLoading = false this.dataListLoading = false
}).catch(() => { }).catch(() => {
this.currentRow = {} this.currentRow = {}
this.currentDetailRequestId += 1
this.currentDetail = this.buildDefaultModalData()
this.currentDetailLoading = false
this.approvalList = [] this.approvalList = []
this.dataListLoading = false this.dataListLoading = false
}) })
@ -2137,6 +2295,10 @@ export default {
</script> </script>
<style scoped> <style scoped>
/deep/ .customer-tab .el-tabs__content {
padding: 0 !important;
}
.mod-config /deep/ .el-tabs--border-card > .el-tabs__content { .mod-config /deep/ .el-tabs--border-card > .el-tabs__content {
padding-top: 8px; padding-top: 8px;
} }

Loading…
Cancel
Save