<!-- 第5套:二等铂电阻温度计标准装置 -->
<script lang="ts" setup name="TemplateDetailThird">
import { ElMessage } from 'element-plus'
import type { IList } from './templateDetail-interface'
import type { dictType } from '@/global'
import { getDictByCode } from '@/api/system/dict'
import { calc } from '@/utils/useCalc'
import { useCheckList } from '@/commonMethods/useCheckList'
import { calculate, recalculate } from '@/api/business/measure/caculate'
const props = defineProps({
pageType: {
type: String,
default: 'add',
},
itemCategoryName: {
type: String,
require: true,
}, // 设备检定项分类名称
belongStandardEquipment: { // 检校标准装置code
type: String,
require: true,
},
list: {
type: Array as any,
},
form: { // 检定项表单
type: Object as any,
},
itemId: { // 检定项id
type: String,
default: '',
},
})
// eslint-disable-next-line vue/no-dupe-keys
const list = ref<IList[]>([]) // 表格数据(上面表格)
const checkoutList = ref<IList[]>([]) // 多选
const tableLoading = ref(false)
// eslint-disable-next-line vue/no-dupe-keys
const form = ref({
allowError: 1, // 允差
angleAdjustError: 1, // 角度调整误差
appearanceFunctionCheck: 1, // 外观检查
indicationError: 1, // 示值误差
insulateResistance: 1, // 绝缘电阻
waveEvenTest: 1, // 波动性测试和均匀性测试
measureRangeLower: '', // 测量范围下限
measureRangeUnit: '℃', // 测量范围单位(字典value)
measureRangeUpper: '', // 测量范围上限
accuracyLevel: '', // 准确度等级
level: 'Pt100-AA', // 级别
})
// ----------------------------------------表头------------------------------------------------
const columns = ref()
const columns_thermostatic_bath = ref([ // 恒温槽表头
{ text: '检定项目', value: 'params', align: 'center', required: true },
{ text: '单位', value: 'unit', align: 'center', required: true },
{ text: '指标上限', value: 'upperIndex', align: 'center', required: true },
{ text: '指标下限', value: 'lowerIndex', align: 'center', required: true },
])
const columns_bimetal_thermometer = ref([ // 双金属温度计表头
{ text: '检定项目', value: 'params', align: 'center', required: true },
{ text: '单位', value: 'unit', align: 'center', required: true },
{ text: '校准点', value: 'calibratedPoint', align: 'center', required: true },
{ text: '最大允许误差', value: 'maximumError', align: 'center', required: false },
{ text: '扩展不确定度U', value: 'urel', align: 'center', required: true },
])
const columns_resistance = ref([ // 工业铂铜热电阻表头
{ text: '检定项目', value: 'params', align: 'center', required: true },
{ text: '标称温度', value: 'nominalTemperature', align: 'center', required: true },
{ text: 'α标称值', value: 'nominalValue', align: 'center', required: true, width: '200' },
{ text: 'R值', value: 'rValue', align: 'center', required: true, width: '200' },
{ text: 'dR/dt', value: 'drDt', align: 'center', required: true, width: '200' },
{ text: 'R*tp', value: 'rTp', align: 'center', required: true, width: '200' },
{ text: 'wS', value: 'wS', align: 'center', required: true, width: '200' },
{ text: 'dWst/dt', value: 'dwstDt', align: 'center', required: true, width: '200' },
{ text: '允差上限', value: 'allowErrorUpper', align: 'center', required: true },
{ text: '允差下限', value: 'allowErrorLower', align: 'center', required: true },
{ text: 'α允差上限/10<sup>-6</sup>℃<sup>-1</sup>', value: 'aallowErrorUpper', align: 'center', required: true, width: '160' },
{ text: 'α允差下限/10<sup>-6</sup>℃<sup>-1</sup>', value: 'aallowErrorLower', align: 'center', required: true, width: '160' },
])
// ------------------------------------------字典----------------------------------------------
const accuracyLevelList = ref<dictType[]>([]) // 准确度等级
const levelList = ref<dictType[]>([]) // 级别
/**
* 获取字典
*/
function getDict() {
// 准确度等级
getDictByCode('accuracyLevelFifth').then((response) => {
accuracyLevelList.value = response.data
})
// 级别
getDictByCode('levelFifth').then((response) => {
levelList.value = response.data
})
}
getDict()
const aallowErrorMap = { // α允差下限/10(-6) ℃(-1)、α允差上限/10(-6) ℃(-1)
'Pt100-AA': ['-7.0-30△t0', '7.0-30△t0'],
'Pt100-A': ['-7.0-23△t0', '7.0-23△t0'],
'Pt100-B': ['-14-21△t0', '14-21△t0'],
'Pt100-C': ['-32-21△t0', '32-21△t0'],
'Cu100': ['-34-47△t0', '34-47△t0'],
} as any
const allowErrorMapR0 = { // 允差上限、允差下限R0
'Pt100-AA': [100, 0.039],
'Pt100-A': [100, 0.059],
'Pt100-B': [100, 0.117],
'Pt100-C': [100, 0.234],
'Cu100': [100, 0.129],
} as any
const allowErrorMapR100 = { // 允差上限、允差下限R100
'Pt100-AA': [138.506, 0.102],
'Pt100-A': [138.506, 0.133],
'Pt100-B': [138.506, 0.303],
'Pt100-C': [138.506, 0.607],
'Cu100': [142.800, 0.385],
} as any
// ---------------------------------------------校验---------------------------------------------------
// 校验表格(点击保存的时候用、生成标准器示值)
const checkList = () => {
if (props.itemCategoryName === '双金属温度计' && !list.value.length) {
ElMessage.warning('检定项表格不能为空')
return false
}
if (!useCheckList(list.value, columns.value, '检定项表格')) {
return false
}
if (props.itemCategoryName === '双金属温度计') {
if (`${form.value.measureRangeLower}` === '') {
ElMessage.warning('测量范围下限不能为空')
return false
}
if (`${form.value.measureRangeUpper}` === '') {
ElMessage.warning('测量范围上限不能为空')
return false
}
if (form.value.measureRangeUpper < form.value.measureRangeLower) {
ElMessage.warning('测量范围上限不能小于下限')
return false
}
if (!form.value.accuracyLevel) {
ElMessage.warning('准确度等级不能为空')
return false
}
}
return true
}
// ---------------------------------------表格操作---------------------------------------------------------
/**
* 计算双金属温度计最大误差
* @param measureRangeLowerParam 量程下限
* @param measureRangeUpperParam 量程上限
* @param accuracyLevelParam 准确度等级
*/
const calculateMaximumError = (measureRangeLowerParam: number | string, measureRangeUpperParam: number | string, accuracyLevelParam: number | string) => {
const measureRangeLower = Number(measureRangeLowerParam)
const measureRangeUpper = Number(measureRangeUpperParam)
const accuracyLevel = Number(accuracyLevelParam)
const differ = calc(measureRangeLower, measureRangeUpper, '-')
const result = calc(calc(differ, accuracyLevel, '*'), 100, '/')
return `±${result}`
}
// 点击计算结果--上方表格计算
const calculateData = () => {
if (`${form.value.measureRangeLower}` === '') {
ElMessage.warning('测量范围下限不能为空')
return false
}
if (`${form.value.measureRangeUpper}` === '') {
ElMessage.warning('测量范围上限不能为空')
return false
}
if (form.value.measureRangeUpper < form.value.measureRangeLower) {
ElMessage.warning('测量范围上限不能小于下限')
return false
}
if (!form.value.accuracyLevel) {
ElMessage.warning('准确度等级不能为空')
return false
}
list.value = list.value.map((item) => {
return {
...item,
maximumError: calculateMaximumError(form.value.measureRangeUpper, form.value.measureRangeLower, form.value.accuracyLevel),
}
})
}
// 多选
const handleSelectionChange = (e: any) => {
checkoutList.value = e
}
// 增加行(双金属温度计)
const addRow = () => {
list.value.push({
id: `custom-${new Date().getTime()}`,
itemId: props.itemId,
dataType: '2',
params: '示值误差', // 检定项目
unit: '℃', // 单位
urel: list.value.length ? list.value[list.value.length - 1].urel : '', // urel
calibratedPoint: list.value.length ? list.value[list.value.length - 1].calibratedPoint : '', // 校准点
maximumError: list.value.length ? list.value[list.value.length - 1].maximumError : '', // 最大允许误差
})
}
// 删除行
const delRow = () => {
if (!checkoutList.value.length) {
ElMessage.warning('请选中要删除的行')
}
else {
list.value = list.value.filter((item: any) => {
return !checkoutList.value.includes(item)
})
}
}
// -----------------------------------------------------------------------------------------------------
watch(() => props.itemCategoryName, (newValue) => {
console.log('监听检定项分类', newValue)
if (newValue !== '') {
switch (newValue) {
case '恒温槽':
columns.value = columns_thermostatic_bath.value
list.value = [{
id: '',
itemId: props.itemId,
dataType: '1',
params: '波动性测试和均匀性测试', // 检定项目
unit: '℃', // 单位
upperIndex: 0, // 指标上限
lowerIndex: 0, // 指标下限
}]
break
case '双金属温度计':
columns.value = columns_bimetal_thermometer.value
break
case '工业铂铜热电阻':
columns.value = columns_resistance.value
// if (props.pageType === 'add') {
list.value = [{
id: '',
itemId: props.itemId,
dataType: '3',
params: '允差', // 检定项目
nominalTemperature: '0℃', // 标称温度
nominalValue: form.value.level === 'Cu100' ? 0.004280 : 0.003851, // α标称值
rValue: 100, // R值
drDt: 0.39083, // dR/dt
rTp: 0, // R*tp
wS: 0,
dwstDt: 0, // dWst/dt
allowErrorUpper: calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '+'), // 允差上限
allowErrorLower: calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '-'), // 允差下限
aallowErrorLower: aallowErrorMap[form.value.level][0], // α允差下限/10(-6) ℃(-1)
aallowErrorUpper: aallowErrorMap[form.value.level][1], // α允差上限/10(-6) ℃(-1)
},
{
id: '',
itemId: props.itemId,
dataType: '3',
params: '允差', // 检定项目
nominalTemperature: '100℃', // 标称温度
nominalValue: form.value.level === 'Cu100' ? 0.004280 : 0.003851, // α标称值
rValue: 138.51, // R值
drDt: 0.42830, // dR/dt
rTp: 0, // R*tp
wS: 0,
dwstDt: 0, // dWst/dt
allowErrorUpper: calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '+'), // 允差上限
allowErrorLower: calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '-'), // 允差下限
aallowErrorLower: aallowErrorMap[form.value.level][0], // α允差下限/10(-6) ℃(-1)
aallowErrorUpper: aallowErrorMap[form.value.level][1], // α允差上限/10(-6) ℃(-1)
},
]
// }
break
}
}
}, { immediate: true })
const $route = useRoute()
watch(() => props.list, (newVal) => { // 检定项表格
const updataOld = $route.query.updataOld as string
if (newVal.length && updataOld !== 'true') {
list.value = newVal.map((item: any) => {
if (props.itemCategoryName === '工业铂铜热电阻') {
item.params = '允差'
// item.rTp = item.rTp
item.aallowErrorLower = item.aAllowErrorLower
item.aallowErrorUpper = item.aAllowErrorUpper
item.nominalValue = Number(item.nominalValue).toFixed(6)
}
if (props.itemCategoryName === '双金属温度计') {
item.params = '示值误差'
}
if (props.itemCategoryName === '恒温槽') {
item.params = '波动性测试和均匀性测试'
}
return item
})
console.log('newVal', newVal[0])
form.value.measureRangeLower = newVal[0].measureRangeLower // 测量范围下限
// form.value.measureRangeUnit = newVal[0].valuemeasureRangeUnit // 测量范围单位(字典value)
form.value.measureRangeUpper = newVal[0].measureRangeUpper // 测量范围上限
form.value.accuracyLevel = newVal[0].accuracyLevel // 准确度等级
form.value.level = newVal[0].level // 级别
}
})
watch(() => props.form, (newValue) => {
const updataOld = $route.query.updataOld as string
if (updataOld !== 'true') {
form.value.angleAdjustError = newValue.angleAdjustError // 角度调整误差
form.value.appearanceFunctionCheck = newValue.appearanceFunctionCheck // 外观检查
form.value.insulateResistance = newValue.insulateResistance // 绝缘电阻
// form.value.allowError = newValue.allowError // 允差
// form.value.waveEvenTest = newValue.waveEvenTest // 波动性测试和均匀性测试
// form.value.indicationError = newValue.indicationError // 示值误差
form.value.allowError = 1 // 允差
form.value.waveEvenTest = 1 // 波动性测试和均匀性测试
form.value.indicationError = 1 // 示值误差
}
}, { deep: true, immediate: true })
// 监听级别变化
watch(() => form.value.level, (newValue) => {
if (props.itemCategoryName === '工业铂铜热电阻') {
switch (newValue) {
case 'Cu100':
list.value[0].drDt = 0.42893 // dR/dt
list.value[0].aallowErrorLower = aallowErrorMap[form.value.level][0] // α允差下限/10(-6) ℃(-1)
list.value[0].aallowErrorUpper = aallowErrorMap[form.value.level][1] // α允差上限/10(-6) ℃(-1)
list.value[0].allowErrorUpper = calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '+') // 允差上限R0
list.value[0].allowErrorLower = calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '-') // 允差下限R0
list.value[1].allowErrorUpper = calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '+') // 允差上限R100
list.value[1].allowErrorLower = calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '-') // 允差下限R100
break
default:
list.value[0].drDt = 0.39083 // dR/dt
list.value[0].aallowErrorLower = aallowErrorMap[form.value.level][0] // α允差下限/10(-6) ℃(-1)
list.value[0].aallowErrorUpper = aallowErrorMap[form.value.level][1] // α允差上限/10(-6) ℃(-1)
list.value[0].allowErrorUpper = calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '+') // 允差上限R0
list.value[0].allowErrorLower = calc(allowErrorMapR0[form.value.level][0], allowErrorMapR0[form.value.level][1], '-') // 允差下限R0
list.value[1].allowErrorUpper = calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '+') // 允差上限R100
list.value[1].allowErrorLower = calc(allowErrorMapR100[form.value.level][0], allowErrorMapR100[form.value.level][1], '-') // 允差下限R100
break
}
}
})
// 监听α标称值改变
const handleNominalValueChange = () => {
list.value[1].nominalValue = list.value[0].nominalValue
}
// --------------------------------------表格操作(双金属温度计) ---------------------
const randomNum = `${new Date().getTime}${Math.random()}`
const tableRef1 = ref()
// 右击当前行操作
const clickIndex = ref(-1)
const contextmenu = (row: any, column: any, event: any, index: number) => {
if (props.pageType === 'detail') { return }
// 阻止默认的右键菜单
event.preventDefault()
clickIndex.value = list.value.findIndex(item => item === row)
// console.log('右击', clickIndex.value)
// 获取自定义菜单元素
var menu = document.getElementById(randomNum) as HTMLElement
// 设置自定义菜单的位置并显示
let positionX = event.clientX
let positionY = event.clientY
if (window.innerHeight - event.clientY < 268) {
positionY = window.innerHeight - 268
}
else {
positionY = event.clientY
}
if (window.innerWidth - event.clientX < 146) {
positionX = window.innerWidth - 146
}
else if (event.clientX - 180 < 146) {
positionX = 180
}
else {
positionX = event.clientX - 146 / 2
}
menu.style.top = `${positionY}px`
menu.style.left = `${positionX}px`
menu.style.display = 'block'
}
// 点击其他位置隐藏自定义菜单
document.addEventListener('click', () => {
if (props.pageType === 'detail') { return }
if (document.getElementById(randomNum)) {
(document.getElementById(randomNum) as HTMLElement).style.display = 'none'
}
})
const mouseoutTable = () => {
console.log('鼠标移出')
if (props.pageType === 'detail') { return }
if (document.getElementById(randomNum)) {
(document.getElementById(randomNum) as HTMLElement).style.display = 'none'
}
}
// 添加行
const costomAddRow = (type: string) => {
if (type === 'current-pre') {
// 当前行前方插入
list.value.splice(clickIndex.value, 0, JSON.parse(JSON.stringify({ ...list.value[clickIndex.value], id: `custom-${new Date().getTime()}` })))
}
else if (type === 'current-next') {
// 当前行后方方插入
list.value.splice(clickIndex.value + 1, 0, JSON.parse(JSON.stringify({ ...list.value[clickIndex.value], id: `custom-${new Date().getTime()}` })))
}
else if (type === 'list-head') {
// 列表头行插入
list.value.splice(0, 0, JSON.parse(JSON.stringify({ ...list.value[clickIndex.value], id: `custom-${new Date().getTime()}` })))
}
else if (type === 'list-tail') {
// 列表尾行插入
list.value.splice(list.value.length, 0, JSON.parse(JSON.stringify({ ...list.value[clickIndex.value], id: `custom-${new Date().getTime()}` })))
}
else if (type === 'select-pre') {
// 选中行前方插入
if (!checkoutList.value.length) {
ElMessage.warning('未选择数据')
return
}
checkoutList.value.forEach((item, index) => {
const dataIndex = list.value.findIndex(citem => item === citem)
list.value.splice(dataIndex, 0, JSON.parse(JSON.stringify({ ...item, id: `custom-${new Date().getTime()}` })))
})
tableRef1.value!.clearSelection()
}
else if (type === 'select-next') {
// 选中行后方插入
if (!checkoutList.value.length) {
ElMessage.warning('未选择数据')
return
}
checkoutList.value.forEach((item, index) => {
const dataIndex = list.value.findIndex(citem => item === citem)
list.value.splice(dataIndex + 1, 0, JSON.parse(JSON.stringify({ ...item, id: `custom-${new Date().getTime()}` })))
})
tableRef1.value!.clearSelection()
}
else if (type === 'del-current') {
list.value.splice(clickIndex.value, 1)
}
else if (type === 'del-select') {
if (!checkoutList.value.length) {
ElMessage.warning('未选择数据')
return
}
checkoutList.value.forEach((item, index) => {
const dataIndex = list.value.findIndex(citem => item === citem)
list.value.splice(dataIndex, 1)
})
tableRef1.value!.clearSelection()
}
clickIndex.value = -1
}
// 清空配置方法
const clearConfig = () => {
if (props.itemCategoryName === '恒温槽') {
list.value = list.value.map((item: any) => {
return {
...item,
upperIndex: undefined,
lowerIndex: undefined,
}
})
}
else if (props.itemCategoryName === '双金属温度计') {
form.value.measureRangeLower = '' // 测量范围下限
form.value.measureRangeUpper = '' // 测量范围上限
form.value.accuracyLevel = '' // 准确度等级
list.value = []
}
else if (props.itemCategoryName === '工业铂铜热电阻') {
// form.value.level = '' // 级别
list.value = list.value.map((item: any) => {
return {
...item,
rTp: undefined, // R*tp
wS: undefined,
dwstDt: undefined, // dWst/dt
nominalValue: item.nominalTemperature === '0℃' ? undefined : item.nominalValue, // α标称值
rValue: undefined, // R值
drDt: undefined, // dR/dt
}
})
}
}
defineExpose({ list, checkList, form, clearConfig })
</script>
<template>
<div style="padding: 0 10px;">
<el-checkbox v-model="form.appearanceFunctionCheck" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
外观检查
</el-checkbox>
<el-checkbox v-if="props.itemCategoryName !== '恒温槽'" v-model="form.insulateResistance" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
绝缘电阻
</el-checkbox>
<el-checkbox v-if="props.itemCategoryName === '恒温槽'" v-model="form.waveEvenTest" :true-label="1" :false-label="0" disabled>
波动性测试和均匀性测试
</el-checkbox>
<el-checkbox v-if="props.itemCategoryName === '双金属温度计'" v-model="form.angleAdjustError" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
角度调整误差(可调整角度仪表)
</el-checkbox>
<el-checkbox v-if="props.itemCategoryName === '双金属温度计'" v-model="form.indicationError" :true-label="1" :false-label="0" disabled>
示值误差
</el-checkbox>
<el-checkbox v-if="props.itemCategoryName === '工业铂铜热电阻'" v-model="form.allowError" :true-label="1" :false-label="0" disabled>
允差
</el-checkbox>
</div>
<!-- 恒温槽表格 -->
<detail-block v-if="props.itemCategoryName === '恒温槽'" title="" style="margin-top: 0;">
<el-table
ref="tableRef"
v-loading="tableLoading"
:data="list"
border
style="width: 100%;"
>
<el-table-column align="center" label="序号" width="80" type="index" />
<el-table-column
v-for="item in columns"
:key="item.value"
:prop="item.value"
:label="item.text"
:width="item.width"
align="center"
>
<template #header>
<span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span>
</template>
<template #default="scope">
<!-- 指标上限、指标下限 -->
<!-- <el-input-number
v-if="props.pageType !== 'detail' && (item.value === 'upperIndex' || item.value === 'lowerIndex')"
v-model="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
:disabled="pageType === 'detail'"
class="full-width-input"
/> -->
<!-- 指标上限 -->
<select-by-dict
v-if="props.pageType !== 'detail' && item.value === 'upperIndex'"
v-model:model-value="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
dict-code="standard5UpperIndex"
:disabled="pageType === 'detail'"
class="full-width-input"
/>
<!-- 指标下限 -->
<select-by-dict
v-if="props.pageType !== 'detail' && item.value === 'lowerIndex'"
v-model:model-value="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
dict-code="standard5LowerIndex"
:disabled="pageType === 'detail'"
class="full-width-input"
/>
</template>
</el-table-column>
</el-table>
</detail-block>
<el-form
ref="ruleFormRef"
:model="form"
label-width="130"
label-position="right"
style="margin-top: 20px;"
>
<el-row :gutter="24">
<!-- 测量范围 -->
<el-col v-if="props.itemCategoryName === '双金属温度计'" :span="16" style="display: flex;justify-content: flex-start;">
<el-form-item label="测量范围(℃):" prop="measureRangeLower">
<precision-input-number
v-model="form.measureRangeLower"
:placeholder="pageType === 'detail' ? '' : '下限'"
:disabled="pageType === 'detail'"
style="flex: 1;"
/>
</el-form-item>
<span style="margin-left: 10px;">——</span>
<el-form-item label-width="10" prop="measureRangeUpper">
<precision-input-number
v-model="form.measureRangeUpper"
:placeholder="pageType === 'detail' ? '' : '上限'"
:disabled="pageType === 'detail'"
style="flex: 1;"
:min="form.rangeLower"
/>
</el-form-item>
</el-col>
<!-- 准确度等级 -->
<el-col v-if="props.itemCategoryName === '双金属温度计'" :span="8">
<el-form-item label="准确度等级:" prop="accuracyLevel">
<el-select
v-model="form.accuracyLevel"
placeholder="准确度等级"
:disabled="props.pageType === 'detail'"
filterable
class="full-width-input"
>
<el-option v-for="item in accuracyLevelList" :key="item.id" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<!-- 级别 -->
<el-col v-if="props.itemCategoryName === '工业铂铜热电阻'" :span="8">
<el-form-item label="级别:" prop="level">
<el-select
v-model="form.level"
placeholder="级别"
:disabled="props.pageType === 'detail'"
filterable
class="full-width-input"
>
<el-option v-for="item in levelList" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 双金属温度计 -->
<detail-block v-if="props.itemCategoryName === '双金属温度计'" title=" " style="margin-top: 0;" @mouseleave="mouseoutTable">
<template v-if="props.pageType !== 'detail'" #btns>
<el-button type="primary" @click="addRow">
增加行
</el-button>
<el-button type="info" @click="delRow">
删除行
</el-button>
<el-button type="primary" @click="calculateData">
计算结果
</el-button>
</template>
<el-table
ref="tableRef1"
v-loading="tableLoading"
:data="list"
border
style="width: 100%;"
:height="list.length > 10 ? 500 : null"
@selection-change="handleSelectionChange"
@row-contextmenu="contextmenu"
>
<el-table-column v-if="pageType !== 'detail'" type="selection" width="38" />
<el-table-column align="center" label="序号" width="80" type="index" />
<el-table-column
v-for="item in columns"
:key="item.value"
:prop="item.value"
:label="item.text"
:width="item.width"
align="center"
>
<template #header>
<span v-show="item.required" style="color: red;">*</span>
<span v-html="item.text" />
</template>
<template #default="scope">
<!-- 校准点、扩展不确定度u -->
<!-- <el-input-number
v-if="props.pageType !== 'detail' && (item.value === 'calibratedPoint' || item.value === 'urel')"
v-model="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
:disabled="pageType === 'detail'"
class="full-width-input"
/> -->
<!-- 校准点 -->
<select-by-dict
v-if="props.pageType !== 'detail' && item.value === 'calibratedPoint'"
v-model:model-value="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
dict-code="standard5CalibratedPoint"
:disabled="pageType === 'detail'"
class="full-width-input"
/>
<!-- 扩展不确定度u -->
<select-by-dict
v-if="props.pageType !== 'detail' && item.value === 'urel'"
v-model:model-value="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
dict-code="standard5MeasureItemUrel"
:disabled="pageType === 'detail'"
class="full-width-input"
/>
</template>
</el-table-column>
</el-table>
<!-- 自定义菜单 -->
<div :id="randomNum" class="custom-menu">
<p class="menu-item" @click="costomAddRow('current-pre')">
当前行前方插入
</p>
<p class="menu-item" @click="costomAddRow('current-next')">
当前行后方插入
</p>
<p class="menu-item" @click="costomAddRow('list-head')">
列表头行插入
</p>
<p class="menu-item" @click="costomAddRow('list-tail')">
列表尾行插入
</p>
<p v-if="pageType !== 'detail'" class="menu-item" @click="costomAddRow('select-pre')">
选中行前方插入
</p>
<!-- -->
<p v-if="pageType !== 'detail'" class="menu-item" @click="costomAddRow('select-next')">
选中行后方插入
</p>
<p class="menu-item" @click="costomAddRow('del-current')">
删除当前行
</p>
<p v-if="pageType !== 'detail'" class="menu-item" @click="costomAddRow('del-select')">
删除选中行
</p>
</div>
</detail-block>
<!-- 工业铂铜热电阻 -->
<detail-block v-if="props.itemCategoryName === '工业铂铜热电阻'" title="" style="margin-top: 0;padding-top: 0;">
<el-table
ref="tableRef"
v-loading="tableLoading"
:data="list"
border
style="width: 100%;"
>
<el-table-column align="center" label="序号" width="80" type="index" />
<el-table-column
v-for="item in columns"
:key="item.value"
:prop="item.value"
:label="item.text"
:width="item.width"
align="center"
>
<template #header>
<span v-show="item.required" style="color: red;">*</span>
<span v-html="item.text" />
</template>
<template #default="scope">
<precision-input-number
v-if="props.pageType !== 'detail' && (
item.value === 'rValue' || item.value === 'rTp'
|| item.value === 'wS' || item.value === 'dwstDt')"
v-model="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
:disabled="pageType === 'detail'"
class="full-width-input"
/>
<!-- α标称值 -->
<!-- <el-input-number
v-if="props.pageType !== 'detail' && item.value === 'nominalValue' && scope.row.nominalTemperature === '0℃'"
v-model="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
:disabled="pageType === 'detail'"
class="full-width-input"
:precision="6"
@change="handleNominalValueChange"
/> -->
<select-by-dict
v-if="props.pageType !== 'detail' && item.value === 'nominalValue' && scope.row.nominalTemperature === '0℃'"
v-model:model-value="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
dict-code="standard5MeasureItemNominalValue"
:disabled="pageType === 'detail'"
class="full-width-input"
@change-value="handleNominalValueChange"
/>
<precision-input-number
v-if="props.pageType !== 'detail' && item.value === 'drDt'"
v-model="scope.row[item.value]"
:placeholder="pageType === 'detail' ? '' : `${item.text}`"
:disabled="pageType === 'detail'"
class="full-width-input"
:precision="5"
/>
</template>
</el-table-column>
</el-table>
</detail-block>
</template>
<style lang="scss" scoped>
.custom-menu {
display: none;
position: fixed;
background-color: #fff;
border-radius: 5px;
padding: 5px 0;
z-index: 1000;
border: 1px solid #c8c9cc;
box-shadow: 0 0 12px rgb(0 0 0 / 12%);
.menu-item {
display: flex;
align-items: center;
white-space: nowrap;
list-style: none;
line-height: 22px;
padding: 5px 16px;
margin: 0;
// font-size: var(--el-font-size-base);
color: #606266;
cursor: pointer;
outline: none;
&:hover {
background-color: #ecf5ff;
color: #409eff;
}
}
}
</style>