<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="1">时间</td>
|
<td colspan="1">温度(℃)</td>
|
<td colspan="1">湿度(%)</td>
|
<td colspan="1">温度变化速率(℃/min)</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="1">
|
<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, '%', 'humidity', item)" :disabled="state > 1"></el-input>
|
</td>
|
<td colspan="1">
|
<el-input v-model="m.change" placeholder="温度变化速率" size="small"
|
@change="a => handleReplace(m, '℃/min', 'change', 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(m, 'change', '')
|
})
|
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, '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: '',
|
change: ''
|
})
|
}
|
},
|
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>
|