<!-- 第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 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) => { // 检定项表格 console.log('监听到检定项表格数据') 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 }) 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 // 级别 console.log('newVal', newVal[0]) } }) watch(() => props.form, (newValue) => { const updataOld = $route.query.updataOld as string const isFirstConfig = $route.query.isFirstConfig as string if (newValue && Object.keys(newValue).length && updataOld !== 'true' && isFirstConfig !== '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) => { // console.log('监听级别变化', 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 // } // } // }, { immediate: true }) // 监听级别变化 const changeLevel = (level: string) => { console.log('监听级别变化', level) if (props.itemCategoryName === '工业铂铜热电阻') { switch (level) { 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" @change="changeLevel" > <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>