<style scoped>
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.search {
|
width: 100%;
|
margin-bottom: 10px;
|
height: 140px;
|
background-color: #fff;
|
border-radius: 3px;
|
}
|
|
.search .form-inline {
|
height: 50px;
|
padding-top: 20px;
|
padding-left: 50px;
|
}
|
|
.center {
|
width: calc(100% - 40px);
|
height: calc(100% - 60px - 80px - 40px);
|
background-color: #fff;
|
border-radius: 3px;
|
padding: 20px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
flex-wrap: wrap;
|
}
|
.tables{
|
width: 800px;
|
}
|
.tables td{
|
height: 40px;
|
width: 100px;
|
text-align: center;
|
font-size: 14px;
|
}
|
.content{
|
display: flex;
|
width: 100%;
|
height: 100%;
|
align-items: center;
|
justify-content: left;
|
padding: 2px;
|
box-sizing: border-box;
|
}
|
.content-h-0{
|
justify-content: center;
|
}
|
.content-h-1{
|
justify-content: start;
|
}
|
.content-h-2{
|
justify-content: end;
|
}
|
.content-v-0{
|
align-items: center;
|
}
|
.content-v-1{
|
align-items: start;
|
}
|
.content-v-2{
|
align-items: end;
|
}
|
</style>
|
<style>
|
.el-form-item__label{
|
color: #000;
|
}
|
.el-drawer__header::before {
|
content: "";
|
display: inline-block;
|
width: 4px;
|
height: 30.24px;
|
background: #3A7BFA;
|
border-radius: 10px;
|
margin-left: 32px;
|
margin-right: 8.5px;
|
}
|
.el-drawer__header{
|
color: #303133;
|
}
|
</style>
|
<template>
|
<div v-loading="loading">
|
<el-row class="title">
|
<el-col :span="12" style="padding-left: 20px;">检验单详情</el-col>
|
<el-col :span="12" style="text-align: right;">
|
<el-button size="small" type="primary" @click="sampleVisible=true">样品切换</el-button>
|
<el-button size="small" type="primary" @click="taskVisible=true">任务切换</el-button>
|
<el-button size="small" @click="$emit('goback')">返回</el-button>
|
</el-col>
|
</el-row>
|
<div class="search">
|
<el-form :inline="true" :model="searchForm" class="form-inline" label-width="100px">
|
<el-form-item label="委托编号:">
|
<el-input clearable v-model="insOrder.entrustCode" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="样品编号:">
|
<el-input clearable v-model="currentSample.sampleCode" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="样品名称:">
|
<el-input clearable v-model="currentSample.sample" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="样品数量:">
|
<el-input clearable v-model="sampleProduct.length" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="下发时间:">
|
<el-input clearable v-model="insOrder.sendTime" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="紧急程度:">
|
<el-input clearable v-model="insOrder.typeName" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="约定时间:">
|
<el-input clearable v-model="insOrder.appointed" disabled size="small" placeholder="请输入"></el-input>
|
</el-form-item>
|
<el-form-item label="当前样品位数:" >
|
<el-tag v-if="currentSample.index">{{ `NO.${currentSample.index}` }}</el-tag>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="center">
|
<table border="1" class="tables" cellpadding="10" v-for="(item,index) in tableList" :key="index">
|
<tbody>
|
<tr v-for="(m,i) in item.arr" :key="i">
|
<td
|
v-for="(n,j) in m"
|
:key="j"
|
:colspan="n.v.mc&&n.v.mc.cs?n.v.mc.cs:1"
|
:rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1"
|
:style="`background:${n.v.bg};font-family:${n.v.ff};color:${n.v.fc};font-size:${n.v.fs}px;width:${item.style.columnlen['0']}px;height:${item.style.rowlen[i]}px;font-wight:${n.v.bl?'bold':''};`">
|
<div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`">
|
<span>{{ n.v.v}}</span>
|
</div>
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
<el-drawer
|
title="样品切换"
|
:visible.sync="sampleVisible"
|
size="50%">
|
<el-table class="el-table" ref="productTable" :data="sampleProduct" height="100%" tooltip-effect="dark" border highlight-current-row @row-click="handleChangeSample" :row-class-name="tableRowClassName">
|
<el-table-column type="index" align="center" label="序号" width="70px" :key="Math.random()">
|
</el-table-column>
|
<el-table-column prop="sampleCode" label="样品编号" min-width="100px"
|
show-overflow-tooltip></el-table-column>
|
<el-table-column prop="model" label="样品型号" min-width="100px" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="insState" label="检测状态" min-width="100px" show-overflow-tooltip>
|
<template slot-scope="scope">
|
<el-tag v-for="(item, i) in typeList" :key="i" v-if="item.value == scope.row.insState"
|
:type="item.type" size="medium" style="margin-right: 5px;">{{item.label}}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column prop="isLeave" label="是否留样" min-width="100px" show-overflow-tooltip>
|
<template slot-scope="scope">
|
<span>{{ scope.row.isLeave==0?'否':'是' }}</span>
|
</template>
|
</el-table-column>
|
<!-- 检验单会有一个是否有配套样品字段控制显示 -->
|
<el-table-column prop="joinModel" label="配套样品型号" min-width="130px" show-overflow-tooltip v-if="insOrder.mating>0"></el-table-column>
|
<el-table-column prop="joinName" label="配套样品名称" min-width="130px" show-overflow-tooltip v-if="insOrder.mating>0"></el-table-column>
|
<el-table-column prop="joinNum" label="配套样品数量" min-width="130px" show-overflow-tooltip v-if="insOrder.mating>0"></el-table-column>
|
</el-table>
|
</el-drawer>
|
<el-drawer
|
title="任务切换"
|
:visible.sync="taskVisible"
|
:size="500">
|
<ValueTable class="value-table" ref="insOrderPlan"
|
:url="$api.insOrderPlan.selectInsOrderPlanList" :componentData="componentData"
|
:key="upIndex"/>
|
</el-drawer>
|
</div>
|
</template>
|
|
<script>
|
import ValueTable from '../../tool/value-table.vue'
|
export default {
|
props: ['sonLaboratory','orderId'],
|
components: {
|
ValueTable,
|
},
|
data() {
|
return {
|
sampleVisible:false,
|
taskVisible:false,
|
searchForm: {
|
sampleName: null,
|
state: null
|
},
|
id: 0,
|
componentData: {
|
entity: {
|
sonLaboratory: null,
|
userId: 0
|
},
|
isIndex: false,
|
showSelect: true,
|
select: false,
|
selectMethod:'handleChangeTask',
|
sort: false,
|
do: [],
|
isPage:false,
|
linkEvent: {},
|
tagField: {
|
type: {
|
select: []
|
},
|
insState: {
|
select: []
|
},
|
},
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: []
|
},
|
upIndex: 0,
|
insOrder: {},
|
sampleProduct: [],
|
typeList:[],
|
urgentList:[],
|
currentSample:{},//当前样品信息
|
tableList:[],
|
loading: false
|
}
|
},
|
created() {
|
this.componentData.entity.sonLaboratory = this.sonLaboratory;
|
this.id = this.orderId;
|
},
|
mounted() {
|
this.getTypeDicts()
|
this.getInsStateDicts()
|
},
|
watch:{
|
id(val){
|
this.loading = true
|
this.$axios.post(this.$api.insOrderPlan.doInsOrder,{
|
id: val
|
}).then(res=>{
|
this.insOrder = res.data.insOrder;
|
this.urgentList.forEach(m=>{
|
if(m.value==this.insOrder.type){
|
this.insOrder.typeName = m.label
|
}
|
})
|
this.sampleProduct = res.data.sampleProduct
|
this.currentSample = this.sampleProduct[0]
|
if(this.currentSample.index==undefined)this.currentSample['index'] = 1
|
this.loading = false
|
this.handleTableData()
|
})
|
}
|
},
|
methods: {
|
handleChangeSample(row, column, event){
|
this.currentSample = row;
|
this.handleTableData()
|
this.sampleVisible = false;
|
},
|
handleChangeTask(row){
|
if(row.length > 0)this.id = row[0].id;
|
this.taskVisible = false;
|
},
|
getTypeDicts() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "紧急程度"
|
}).then(res => {
|
let data = res.data
|
data.forEach(ele => {
|
if (ele.value === '0') {
|
ele.type = 'success'
|
} else if (ele.value === '1') {
|
ele.type = 'warning'
|
} else if (ele.value === '2') {
|
ele.type = 'danger'
|
}
|
})
|
this.urgentList = data;
|
this.componentData.tagField.type.select = data
|
})
|
},
|
getInsStateDicts() {
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "检验任务状态"
|
}).then(res => {
|
let data = res.data
|
data.forEach(ele => {
|
//0:待检验 1:检验中 2:已检验 3:待复核 4:复核未通过 5:复核通过
|
if (['2', '5'].includes(ele.value)) {
|
ele.type = 'success'
|
} else if (['1', '3'].includes(ele.value)) {
|
ele.type = 'warning'
|
} else if (['0', '4'].includes(ele.value)) {
|
ele.type = 'danger'
|
}
|
})
|
this.typeList = data
|
this.componentData.tagField.insState.select = data
|
})
|
},
|
tableRowClassName({ row, rowIndex }){
|
row.index = rowIndex + 1;
|
},
|
handleTableData(){
|
const mySet1 = new Set();
|
this.tableList = JSON.parse(JSON.stringify(this.currentSample.insProduct)).filter(m=>{
|
let num0 = mySet1.size;
|
mySet1.add(JSON.stringify({
|
inspectionItem:m.inspectionItem,
|
templateId:m.templateId
|
}))
|
let num1 = mySet1.size;
|
if(num1>num0){
|
return m
|
}
|
})
|
this.tableList.map(item=>{
|
const mySet0 = new Set();
|
let arr = [];
|
let arrItem = [];
|
item.template.forEach((m,i)=>{
|
let num0 = mySet0.size;
|
mySet0.add(m.r)
|
let num1 = mySet0.size;
|
if(num0<num1){
|
if(arrItem.length>0){
|
arr.push(arrItem)
|
arrItem = []
|
}
|
if(m.v.mc){
|
if(m.v.mc.rs||m.v.mc.cs){
|
arrItem.push(m)
|
}
|
}else{
|
arrItem.push(m)
|
}
|
}else{
|
if(m.v.mc){
|
if(m.v.mc.rs||m.v.mc.cs){
|
arrItem.push(m)
|
}
|
}else{
|
arrItem.push(m)
|
}
|
}
|
})
|
arr.push(arrItem)
|
item.arr = arr;
|
return item
|
})
|
}
|
}
|
}
|
</script>
|