<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.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}`">
|
<span v-if="n.v.ps===undefined || n.v.ps.value!='检验值'" :style="`font-family:${n.v.ff} !important;`">{{ n.v.v}}</span>
|
<el-input v-else class="table_input" v-model="n.v.v" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}`)" />
|
</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 { number } from 'echarts';
|
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:[
|
{
|
0:'0',
|
1:'A',
|
},
|
{
|
0:'1',
|
1:'B',
|
},
|
{
|
0:'2',
|
1:'C',
|
},
|
{
|
0:'3',
|
1:'D',
|
},
|
{
|
0:'4',
|
1:'E',
|
},
|
{
|
0:'5',
|
1:'F',
|
},
|
{
|
0:'6',
|
1:'G',
|
},
|
{
|
0:'7',
|
1:'H',
|
},
|
{
|
0:'8',
|
1:'I',
|
},
|
{
|
0:'9',
|
1:'J',
|
},
|
{
|
0:'10',
|
1:'K',
|
},
|
],
|
excelMethodList:[]
|
}
|
},
|
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()
|
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
|
})
|
},
|
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
|
})
|
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){
|
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
|
}
|
}
|
})
|
})
|
console.log(this.tableList);
|
// return
|
this.tableList.map(item=>{
|
const mySet0 = new Set();
|
let arr = [];
|
let arrItem = [];
|
item.template.forEach((m,i)=>{
|
if(m.v.f){
|
this.excelMethodList.push(m)
|
}
|
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
|
})
|
console.log(this.tableList);
|
this.handleExcelMethod()
|
},
|
changeInput(m,code){
|
console.log(2222222222,m,code)
|
let r = code.split('-')[1]
|
let c = code.split('-')[2]
|
},
|
// 当前模板excel函数集处理
|
handleExcelMethod(){
|
if(this.excelMethodList.length>0){
|
this.excelMethodList.map(item=>{
|
item.methodName = item.v.f.split('=')[1].split('(')[0];
|
let valueList = [];
|
if(item.v.f.includes(':')){
|
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]
|
r0 = this.comparisonList.find(j=>j['1']==start.split('')[0])[`0`]
|
c0 = start.split('')[1]-1
|
r1 = this.comparisonList.find(j=>j['1']==end.split('')[0])[`0`]
|
c1 = end.split('')[1]-1
|
for (let i=Number(r0);i<=r1;i++){
|
for(let u=c0;u<c1+1;u++){
|
valueList.push({
|
r:i,
|
c:u
|
})
|
}
|
}
|
item.valueList = valueList;
|
}else{
|
let mode = item.v.f.split('(')[1].split(')')[0];
|
// const result = item.v.f.replace(/+|-|*|%|\/|(|)/g, ' ')
|
}
|
return item;
|
})
|
}
|
}
|
}
|
}
|
</script>
|