<template>
|
<div>
|
<table border="1" cellpadding="10" class="thermal-table" style="margin-bottom: 20px;">
|
<template v-for="(item,index) in insProductList">
|
<tr>
|
<td style="font-size: 18px;font-weight: 500;background-color: #F0F1F5;padding: 10px 0;box-sizing: border-box;" :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?7:6">{{ item.inspectionItemSubclass }}</td>
|
</tr>
|
<tr>
|
<td style="font-size: 16px;background-color: #F0F1F5;">规格型号</td>
|
<td>{{item.model}}</td>
|
<td style="font-size: 16px;background-color: #F0F1F5;">试验方法</td>
|
<td>{{item.methodS}}</td>
|
<td style="font-size: 16px;background-color: #F0F1F5;">设备编号</td>
|
<td :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?2:1">
|
<el-select v-model="item.equipValue" placeholder="请选择" size="small" :disabled="state>1" @focus="methodFocus(item)" @change="m=>handleEquip(m,item)">
|
<el-option
|
v-for="item in equipOptions"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</td>
|
</tr>
|
<tr>
|
<td style="font-size: 16px;background-color: #F0F1F5;">试验要求</td>
|
<td colspan="3" style="text-align: left;">{{item.tell}}</td>
|
<td style="font-size: 16px;background-color: #F0F1F5;">设备名称</td>
|
<td :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?2:1">{{ item.equipName }}</td>
|
</tr>
|
<tr>
|
<td style="font-size: 16px;background-color: #F0F1F5;">实验前样品检查</td>
|
<td :colspan="item.beforeCheck=='破损'?1:(insProductList&&insProductList.find(m=>m.list0.length==6)?3:2)">
|
<el-select v-model="item.beforeCheck" placeholder="请选择" size="small" :disabled="state>1" @change="save(item)">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</td>
|
<td v-if="item.beforeCheck=='破损'">
|
<el-input v-model="item.beforeNote" placeholder="破损说明" size="small" :disabled="state>1" style="display: inline-block;width: 100%;" @change="save(item)" type="textarea"
|
:rows="3"></el-input>
|
</td>
|
<td style="font-size: 16px;background-color: #F0F1F5;">实验后样品检查</td>
|
<td :colspan="item.afterCheck=='破损'?1:2">
|
<el-select v-model="item.afterCheck" placeholder="请选择" size="small" :disabled="state>1" @change="save(item)">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value">
|
</el-option>
|
</el-select>
|
</td>
|
<td v-if="item.afterCheck=='破损'" :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?2:1">
|
<el-input v-model="item.afterNote" placeholder="破损说明" size="small" :disabled="state>1" style="display: inline-block;width: 100%;" @change="save(item)" type="textarea"
|
:rows="3"></el-input>
|
</td>
|
</tr>
|
<tr v-if="item.inspectionItemSubclass&&item.inspectionItemSubclass.includes('低')">
|
<td>电调结果</td>
|
<td v-for="(m,i) in item.list0" :key="i">
|
<el-input v-model="m.value" :placeholder="'第'+(i+1)+'次'" size="small" :disabled="state>1" style="display: inline-block;width: 50%;" @change="save(item)"></el-input>
|
<el-button icon="el-icon-minus" circle size="mini" type="danger"
|
:disabled="state>1" style="margin: 5px;display: inline-block;" @click="deleteList(item.list0,i,m)" ></el-button>
|
<el-button icon="el-icon-plus" circle size="mini" type="primary" :disabled="state>1" style="margin: 5px;display: inline-block;" v-if="i==item.list0.length-1&&i<5" @click="addList(item.list0,item.list0.length-1)"></el-button>
|
</td>
|
</tr>
|
<tr style="background-color: #F0F1F5;">
|
<td colspan="2">时间</td>
|
<td colspan="1">温度</td>
|
<td colspan="1">湿度</td>
|
<td :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?3:2">操作</td>
|
</tr>
|
<tr v-for="(m,i) in item.list" :key="i+item.id">
|
<td colspan="2">
|
<el-date-picker
|
v-model="m.time"
|
placeholder="时间" size="small" editable format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" style="width: 100%;" @change="save(item)" :disabled="state>1" type="datetime">
|
</el-date-picker>
|
</td>
|
<td colspan="1">
|
<el-input v-model="m.temperature" placeholder="温度" size="small" @change ="a=>handleReplace(m,'℃','temperature',item)" :disabled="state>1"></el-input>
|
</td>
|
<td colspan="1">
|
<el-input v-model="m.humidity" placeholder="湿度" size="small" @change ="a=>handleReplace(m,'%rh','humidity',item)" :disabled="state>1"></el-input>
|
</td>
|
<td :colspan="insProductList&&insProductList.find(m=>m.list0.length==6)?3:2">
|
<el-button icon="el-icon-minus" circle size="mini" type="danger"
|
@click="deleteList(item.list,i,item)" :disabled="state>1" style="margin: 5px;"></el-button>
|
<el-button icon="el-icon-plus" circle size="mini" type="primary" @click="addList(item.list,i,'out')" :disabled="state>1" style="margin: 5px;"></el-button>
|
</td>
|
</tr>
|
</template>
|
</table>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
props:['insProduct','orderId','sampleId','state','isLook','num'],
|
data() {
|
return {
|
equipOptions:[],
|
insProductList:[],
|
options:[
|
{value: '完好', label: '完好'},
|
{value: '破损', label: '破损'}
|
]
|
}
|
},
|
watch:{
|
insProduct:{
|
deep:true,
|
handler:function(newVal,oldVal){
|
this.init()
|
}
|
}
|
},
|
mounted() {
|
this.init()
|
},
|
methods: {
|
init(){
|
this.insProductList = this.HaveJson(this.insProduct)
|
this.insProductList.forEach(item=>{
|
if(!item.insProductResult){
|
// 初始化
|
this.$set(item,'list',[])
|
this.$set(item,'list0',[])
|
item.list.push({})
|
item.list0.push({})
|
item.list.forEach(m=>{
|
this.$set(m,'time','')
|
this.$set(m,'temperature','')
|
this.$set(m,'humidity','')
|
})
|
this.$set(item,'equipValue','')
|
this.$set(item,'equipName','')
|
this.$set(item,'beforeCheck','')
|
this.$set(item,'afterCheck','')
|
this.$set(item,'afterNote','')
|
this.$set(item,'beforeNote','')
|
}else{
|
// 赋值
|
this.$set(item,'list',JSON.parse(item.insProductResult.insValue))
|
item.list.forEach(m=>{
|
this.$set(m,'time',m.time)
|
this.$set(m,'temperature',m.temperature)
|
this.$set(m,'humidity',m.humidity)
|
})
|
if(item.insProductResult.comValue){
|
this.$set(item,'list0',JSON.parse(item.insProductResult.comValue))
|
item.list0.forEach((m,i)=>{
|
this.$set(m,'value',m.value)
|
})
|
}else{
|
this.$set(item,'list0',[])
|
item.list0.push({})
|
}
|
this.$set(item,'equipValue',item.insProductResult.equipValue?JSON.parse(item.insProductResult.equipValue)[0].v:'')
|
this.$set(item,'equipName',item.insProductResult.equipName?JSON.parse(item.insProductResult.equipName)[0].v:'')
|
this.$set(item,'beforeCheck',item.insProductResult.beforeCheck)
|
this.$set(item,'afterCheck',item.insProductResult.afterCheck)
|
this.$set(item,'afterNote',item.insProductResult.afterNote)
|
this.$set(item,'beforeNote',item.insProductResult.beforeNote)
|
}
|
})
|
},
|
deleteList(arr,i,item){
|
if(arr.length>1){
|
arr.splice(i,1)
|
this.save(item)
|
}else{
|
this.$message({
|
type: 'warning',
|
message: '不能再删除了'
|
})
|
}
|
},
|
addList(arr,i,type){
|
if(type=='out'){
|
arr.splice(i+1,0,{
|
value:'',
|
})
|
}else{
|
arr.splice(i+1,0,{
|
time:'',
|
temperature:'',
|
humidity:''
|
})
|
}
|
},
|
async methodFocus(item){
|
this.equipOptions = await this.getEquipOptions(item)
|
},
|
// 获取设备选项 id:为检验项id
|
async getEquipOptions(m) {
|
let arr = []
|
let res = await this.$axios.post(this.$api.deviceScope.selectDeviceByCategory, {
|
inspectionItem: m.inspectionItem,
|
inspectionItemSubclass: m.inspectionItemSubclass
|
})
|
if (res.code === 200 && res.data) {
|
arr = res.data.map(m => {
|
m.value = m.managementNumber
|
m.label = m.deviceName
|
return m
|
})
|
}
|
return arr
|
},
|
/**
|
* 处理设备信息
|
*
|
* @param {any} m - 新的设备值
|
* @param {Object} item - 设备对象
|
*/
|
handleEquip(m,item){
|
this.$delete(item, 'equipValue')
|
this.$set(item, 'equipValue', m)
|
this.$delete(item, 'equipName')
|
this.$set(item, 'equipName', this.equipOptions.find(m=>m.value==item.equipValue).label)
|
this.save(item)
|
},
|
/**
|
* 替换文本中的指定单位
|
*
|
* @param {Object} m - 需要修改的文本对象
|
* @param {string} unit - 要替换的单位
|
* @param {any} v - 未使用的参数(保留以匹配其他重载)
|
* @returns {void} 无返回值
|
*/
|
handleReplace(m,unit,v,item){
|
if(m[v]&&!`${m[v]}`.includes(unit)){
|
m[v] = m[v]+unit
|
}
|
if(m[v]){
|
this.save(item)
|
}
|
},
|
save(item){
|
this.$axios.post(this.$api.insOrderPlan.saveInsContext3, {
|
insProductId:item.id,
|
insValue:JSON.stringify(item.list),
|
comValue:JSON.stringify(item.list0),
|
equipValue:item.equipValue,
|
equipName:item.equipName,
|
num:this.num,
|
beforeCheck:item.beforeCheck,
|
afterCheck:item.afterCheck,
|
afterNote:item.afterNote,
|
beforeNote:item.beforeNote,
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
noQs:true}).then(res => {
|
if (res.code === 201) {
|
this.$message.error('保存失败')
|
return
|
}
|
this.$message.success('已保存')
|
}).catch(err => {
|
console.log(err)
|
})
|
},
|
},
|
}
|
</script>
|
|
<style scoped>
|
.thermal-table{
|
min-width: calc(100% - 10px);
|
margin: 5px 5px 0;
|
table-layout: fixed;
|
}
|
.thermal-table td {
|
min-width: 70px;
|
text-align: center;
|
font-size: 14px;
|
word-wrap: break-word;
|
white-space: normal;
|
padding: 5px;
|
}
|
.thermal-table .el-input{
|
display: flex;
|
align-items: center;
|
}
|
>>>.el-input__inner {
|
text-align: center;
|
}
|
</style>
|