<style scoped>
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.search {
|
width: 100%;
|
margin-bottom: 10px;
|
background-color: #fff;
|
border-radius: 3px;
|
}
|
|
.search .form-inline {
|
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; */
|
margin-bottom: 16px;
|
}
|
.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: 5px;
|
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;
|
}
|
|
.table_input{
|
width: 100%;
|
height: 100%;
|
}
|
</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
|
:id='item.templateId+"-"+n.i+"-"+n.r+"-"+n.c'
|
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};color:${n.v.fc};font-size:${n.v.fs}px;width:${item.style.columnlen[n.c]}px;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`">
|
<div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`">
|
<el-input v-if="n.v.ps!=undefined && n.v.ps.value==='检验值'" class="table_input" v-model="n.v.v" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)" />
|
<template v-else-if="n.v.ps!=undefined && n.v.ps.value==='结论'">
|
<span v-if="n.v.v===1" :style="`font-family:${n.v.ff} !important;color: green;`">合格</span>
|
<span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span>
|
<span v-else :style="`font-family:${n.v.ff} !important;`">待定</span>
|
</template>
|
<span v-else :style="`font-family:${n.v.ff} !important;`">{{n.v.v}}</span>
|
</div>
|
</td>
|
</tr>
|
</tbody>
|
</table>
|
</div>
|
<el-drawer
|
title="样品切换"
|
:visible.sync="sampleVisible"
|
:size="500">
|
<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"
|
:current-row-key="currentKey" :row-key="record=>record.index"
|
v-if="sampleVisible">
|
<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="检测状态" width="95px" 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="是否留样" width="95px" show-overflow-tooltip align="center">
|
<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: false,
|
select: false,
|
selectMethod:'handleChangeTask',
|
sort: false,
|
do: [],
|
isPage:false,
|
linkEvent: {},
|
tagField: {
|
type: {
|
select: []
|
},
|
insState: {
|
select: []
|
},
|
},
|
currentId:'',
|
selectField: {},
|
requiredAdd: [],
|
requiredUp: []
|
},
|
upIndex: 0,
|
insOrder: {},
|
sampleProduct: [],
|
typeList:[],
|
urgentList:[],
|
currentSample:{},//当前样品信息
|
tableList:[],
|
loading: false,
|
ps: {},
|
param: {
|
insValue:{},
|
comValue: {},
|
bestValue: {},
|
result: {}
|
},
|
currentKey:1,
|
comparisonList:[],
|
excelMethodList:[]
|
}
|
},
|
created() {
|
this.componentData.entity.sonLaboratory = this.sonLaboratory;
|
this.id = this.orderId;
|
},
|
mounted() {
|
this.getTypeDicts()
|
this.getInsStateDicts()
|
this.getComparisonList()
|
},
|
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()
|
this.componentData.currentId = val;
|
this.currentKey = 1;
|
})
|
}
|
},
|
methods: {
|
handleChangeSample(row, column, event){
|
this.currentSample = row;
|
this.handleTableData()
|
this.sampleVisible = false;
|
this.currentKey=row.index
|
},
|
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
|
})
|
},
|
getComparisonList(){
|
this.$axios.post(this.$api.enums.selectEnumByCategory, {
|
category: "表格坐标转换"
|
}).then(res => {
|
let data = res.data
|
this.comparisonList = data;
|
})
|
},
|
tableRowClassName({ row, rowIndex }){
|
row.index = rowIndex + 1;
|
},
|
handleTableData(){
|
this.excelMethodList = []
|
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.forEach(a=>{
|
let dels = []
|
let ids = []
|
a.template.forEach(b=>{
|
if (b.v.ps!=undefined&&b.v.ps.value==='检验子项'){
|
let count = 0
|
for(let i in this.currentSample.insProduct){
|
if(this.currentSample.insProduct[i].inspectionItemSubclass === b.v.v && this.currentSample.insProduct[i].templateId === a.templateId){
|
ids.push({
|
r: b.r,
|
id: this.currentSample.insProduct[i].id,
|
product: this.currentSample.insProduct[i]
|
})
|
break
|
}
|
count++
|
}
|
if(count === this.currentSample.insProduct.length){
|
dels.push(b)
|
}
|
}
|
})
|
dels.forEach(del=>{
|
for(let b=0;b<a.template.length;b++){
|
if(a.template[b].r === del.r){
|
if(a.template[b].v.mc!=undefined){
|
if(a.template[b].v.mc.rs!=undefined&&a.template[b].v.mc.rs>1){
|
if(a.template[b].r === a.template[b].v.mc.r){
|
a.template[b].r += 1
|
a.template[b].v.mc.r += 1
|
a.template[b].v.mc.rs -= 1
|
continue
|
}
|
}
|
}
|
a.template.splice(b, 1)
|
b-=1
|
}
|
}
|
})
|
ids.forEach(id=>{
|
for(let b=0;b<a.template.length;b++){
|
if(a.template[b].r === id.r){
|
a.template[b].i = id.id
|
if (a.template[b].v.ps!=undefined&&a.template[b].v.ps.value==='单位'){
|
a.template[b].v.v = id.product.unit
|
}
|
}
|
}
|
})
|
})
|
this.tableList.forEach(a=>{
|
let arrs = []
|
let set = new Set()
|
let count1 = 0
|
let conclusionList=[];//结论列表
|
let finalList = [];//最终值列表
|
conclusionList = a.template.filter(n=>n.v.ps!=undefined&&n.v.ps.value==='结论')
|
finalList = a.template.filter(n=>n.v.ps!=undefined&&n.v.ps.value==='最终值')
|
a.template.forEach(b=>{
|
if (b.v.ps!=undefined&&b.v.ps.value==='序号'){
|
count1++
|
b.v.v = count1
|
}
|
if (b.v.ps!=undefined&&b.v.ps.value==='检验值'){
|
b.v.v = ''
|
}
|
if (b.v.ps!=undefined&&b.v.ps.value==='计算值'){
|
b.v.v = ''
|
}
|
if (b.v.ps!=undefined&&b.v.ps.value==='最终值'){
|
b.v.v = ''
|
}
|
if (b.v.ps!=undefined&&b.v.ps.value==='结论'){
|
conclusionList.forEach((n,i)=>{
|
if(n.r==b.r&&n.c==b.c){
|
b.v.f = `(${this.comparisonList.find(j=>j.value==(finalList[i].r-1)).label}${finalList[i].r+1})`
|
}
|
})
|
}
|
set.add(b.r)
|
if(b.v.f){
|
this.excelMethodList.push(b)
|
}
|
})
|
set = Array.sort(set)
|
set.forEach(b=>{
|
let arr = []
|
a.template.forEach(c=>{
|
if(c.r === b){
|
if(arr.length===0){
|
if(c.v.mc==undefined||Object.keys(c.v.mc).length==4) arr.push(c)
|
}else{
|
for(let d=0;d<arr.length;d++){
|
if(c.c<arr[d].c){
|
if(c.v.mc==undefined||Object.keys(c.v.mc).length==4) arr.splice(d, 0, c)
|
break
|
}
|
if(d === arr.length-1){
|
if(c.v.mc==undefined||Object.keys(c.v.mc).length==4) arr.push(c)
|
break
|
}
|
}
|
}
|
}
|
})
|
arrs.push(arr)
|
})
|
a.arr = arrs
|
})
|
this.handleExcelMethod()
|
},
|
changeInput(m,code){
|
// console.log(m,'code:',code,this.excelMethodList)
|
let str = code.split('-')
|
let r = str[1]
|
let c = str[2]
|
let id = str[0]
|
var list = []
|
for(let a in this.tableList){
|
if(this.tableList[a].templateId == id){
|
list = this.tableList[a].arr
|
break
|
}
|
}
|
this.excelMethodList.forEach(item=>{
|
if(item.valueList.find(m=>m.r==r&&m.c==c)){
|
var comValue = {}
|
item.valueList.forEach(a=>{
|
list.forEach(b=>{
|
if(b[0].r==a.r){
|
b.forEach(c=>{
|
if(c.c==a.c){
|
if(!isNaN(parseFloat(c.v.v))){
|
var tableCode = ''
|
for(var d in this.comparisonList){
|
if(c.c == this.comparisonList[d].value){
|
tableCode = this.comparisonList[d].label
|
break
|
}
|
}
|
comValue[(tableCode + c.r)] = parseFloat(c.v.v)
|
}
|
}
|
})
|
}
|
})
|
})
|
// console.log('当前的方法',item.methodName)
|
if(item.methodName=='自定义方法'&&item.v.ps&&item.v.ps.value=='结论'){
|
if(this.tableList.find(m=>m.id==item.i)){
|
let ask = this.tableList.find(m=>m.id==item.i).ask.split('&');
|
let res = Object.values(comValue)[0]
|
let comp = ask.map((m,i)=>{
|
if(m.includes('=')){
|
return res == m.split('=')[1]
|
}
|
if(m.includes('≥')){
|
return res >= m.split('≥')[1]
|
}
|
if(m.includes('≤')){
|
return res <= m.split('≤')[1]
|
}
|
if(m.includes('<')){
|
return res < m.split('<')[1]
|
}
|
if(m.includes('>')){
|
return res > m.split('>')[1]
|
}
|
})
|
if(comp.every(m=>m)){
|
item.v.v = 1
|
}else{
|
item.v.v = 0
|
}
|
}
|
}else{
|
let comResult = 0;
|
switch(item.methodName){
|
case 'AVERAGE':
|
let sum = 0
|
for(var a in comValue){
|
sum += comValue[a]
|
}
|
comResult = sum / Object.keys(comValue).length
|
break;
|
default:
|
break;
|
}
|
list.map(a=>{
|
if(a[0].r == item.r){
|
for(var b in a){
|
if(a[b].c == item.c){
|
a[b].v.v = parseFloat(comResult.toFixed(2))
|
break
|
}
|
}
|
}
|
return a
|
})
|
this.changeInput(comResult,`${code.split('-')[0]}-${item.r}-${item.c}-${id}`)//改变最终值
|
}
|
}
|
})
|
},
|
handleExcelMethod(){
|
if(this.excelMethodList.length>0){
|
this.excelMethodList.map(item=>{
|
item.methodName = item.v.f.split('=').length>1&&item.v.f.split('=')[1].split('(')&&item.v.f.split('=')[1].split('(')[0]?item.v.f.split('=')[1].split('(')[0]:'自定义方法';
|
let valueList = [];
|
if(item.v.f.includes(':')){
|
valueList = [];
|
let r0 = null;
|
let c0 = null;
|
let r1 = null;
|
let c1 = null;
|
let mode = item.v.f.split('(')[1].split(')')[0];
|
let start = mode.split(':')[0]
|
let end = mode.split(':')[1]
|
c0 = this.comparisonList.find(j=>j.label==start.split('')[0]).value
|
r0 = start.split('')[1]-1
|
c1 = this.comparisonList.find(j=>j.label==end.split('')[0]).value
|
r1 = end.split('')[1]-1
|
for (let i=Number(r0);i<=r1;i++){
|
for(let u=c0;u<=c1;u++){
|
valueList.push({
|
r:i,
|
c:u
|
})
|
}
|
}
|
item.valueList = valueList;
|
}else{
|
valueList = []
|
let regex= /[=\+\-\*\%\(\)\s]/g
|
let mode = item.v.f.replace(regex, ' ').split(' ');
|
mode.filter(m=>m).forEach(m=>{
|
let r = m.split('')[1]-1
|
let c = this.comparisonList.find(j=>j.label==m.split('')[0]).value
|
valueList.push({c,r})
|
})
|
}
|
item.valueList = valueList;
|
return item;
|
})
|
}
|
}
|
},
|
}
|
</script>
|