<!-- 第四套:0.02级活塞式压力计标准装置数据 --> <script lang="ts" setup name="TemplateDetailFourth"> 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 } from '@/api/business/measure/fourth' const props = defineProps({ pageType: { type: String, default: 'add', }, itemCategoryName: { type: String, require: true, }, // 设备检定项分类名称 belongStandardEquipment: { // 检校标准装置code type: String, require: true, }, list: { type: Array as any, }, itemId: { // 检定项id type: String, default: '', }, }) const list = ref<IList[]>([]) // 表格数据 const ruleFormRef = ref() // 表单ref const tableLoading = ref(false) const form = ref({ rangeUpper: 0, // 量程上限 rangeLower: 0, // 量程下限 rangeUnit: '', // 量程单位 generateWay: '', // 生成方式 points: props.itemCategoryName === '压力变送器' ? 5 : props.itemCategoryName === '压力传感器' ? 6 : 1, // 检定点个数 measureMedium: '', // 检定介质 division: 0, // 分度值的1/5 accuracyLevelLower: '', // 准确度等级(量程上限90%以下) accuracyLevelUpper: 0, // 准确度等级(量程上限90%及以上) zeroPosition: '0', // 零位是否带止销 accuracyLevel: 0, // 准确度等级 cycleNumber: props.itemCategoryName === '压力变送器' || props.itemCategoryName === '压力传感器' ? 3 : props.itemCategoryName === '数字压力计' ? 2 : 0, // 循环次数 deviationAndSwitching: '', // 设定点偏差及切换差 displayValueOne: '', // 设定标准器示值1 displayValueThree: '', // 设定标准器示值3 id: '', itemId: '', // 检定项id lastCycleSensitivity: '', // 上一周期灵敏度b0(从检定数据中查) pointerDeflectionStability: '', // 指针偏转平稳性 supplyVoltage: 24, // 供电电压 supplyVoltageUnit: '', // 供电电压单位 zeroPositionStop: '', // 零位(带止销) }) // ==========================第四套:0.02级活塞式压力计标准装置数据========================================================= const appearance = ref(true) // 外观 const tightness = ref(false) // 密封性 const insulationResistance = ref(false) // 绝缘电阻 const pointerDeflectionStability = ref(false) // 指针偏转平稳性 const zeroDrift = ref(false) // 零位漂移 const indicationError = ref(false) // 示值误差、回程误差、轻敲位移 // 校验规则 const rules = ref({ rangeUpper: [{ required: true, message: '量程上限不能为空', trigger: ['blur', 'change'] }], rangeLower: [{ required: true, message: '量程下限不能为空', trigger: ['blur', 'change'] }], rangeUnit: [{ required: true, message: '量程单位不能为空', trigger: ['blur', 'change'] }], points: [{ required: true, message: '检定点个数不能为空', trigger: ['blur', 'change'] }], generateWay: [{ required: true, message: '生成方式不能为空', trigger: ['blur', 'change'] }], measureMedium: [{ required: true, message: '检定介质不能为空', trigger: ['blur', 'change'] }], division: [{ required: true, message: '分度值的1/5不能为空', trigger: ['blur', 'change'] }], accuracyLevelLower: [{ required: true, message: '准确度等级(量程上限90%以下)不能为空', trigger: ['blur', 'change'] }], accuracyLevelUpper: [{ required: true, message: '准确度等级(量程上限90%及以上)不能为空', trigger: ['blur', 'change'] }], zeroPosition: [{ required: true, message: '零位是否带止销不能为空', trigger: ['blur', 'change'] }], }) // ----------------------------------------表头------------------------------------------------ const columns = ref([]) as any // 表头数据 const columns_piezometer = ref([ // 一般压力表、精密压力表、电接点一般压力表 { text: '标准器示值', value: 'indicatingValue', align: 'center', required: true, width: '220' }, { text: '检定介质', value: 'measureMedium', align: 'center', width: '120', required: true }, { text: '准确度等级', value: 'accuracyClass', align: 'center', width: '120', required: true }, { text: '最大允许误差', value: 'maximumError', align: 'center' }, { text: '回程误差允许值', value: 'returnError', align: 'center' }, { text: '轻敲位移允许值', value: 'frictionError', align: 'center', required: true }, { text: '示值误差允许值', value: 'indicatingError', align: 'center', required: true }, { text: '零位是/否带止销', value: 'zeroPosition', align: 'center', required: true }, ]) const columns_pressure_transmitter = ref([ // 压力变送器 { text: '标准器示值', value: 'indicatingValue', align: 'center', required: true, width: '220' }, { text: '理论输出值(mA)', value: 'theoreticalOutputValue', align: 'center', required: true }, { text: '示值误差允许误差', value: 'indicatingError', align: 'center', required: true }, { text: '回程允许误差', value: 'returnError', align: 'center' }, ]) const columns_pressure_sensor = ref([ // 压力传感器 { text: '标准器示值', value: 'indicatingValue', align: 'center', required: true, width: '220' }, { text: '理论输出值(mA)', value: 'theoreticalOutputValue', align: 'center', required: true }, ]) const columns_digital_pressure_gauge = ref([ // 数字压力计 { text: '标准器示值', value: 'indicatingValue', align: 'center', required: true, width: '220' }, { text: '检定介质', value: 'measureMedium', align: 'center', width: '120', required: true }, { text: '准确度等级', value: 'accuracyClass', align: 'center', width: '120', required: true }, { text: '最大允许误差', value: 'maximumError', align: 'center' }, { text: '示值误差允许值', value: 'indicatingError', align: 'center', required: true }, { text: '回程误差允许值', value: 'returnError', align: 'center' }, ]) // ------------------------------------------字典---------------------------------------------- const generateWayList = ref<dictType[]>([]) // 生成方式 const measureMediumList = ref<dictType[]>([]) // 检定介质 const measureMediumMap = ref({}) as any // 检定介质 const accuracyLevelLowerMap = ref({}) as any // 准确度等级 const accuracyLevelLowerList = ref<dictType[]>([]) // 准确度等级(量程上限90%以下) const rangeUnitList = ref<dictType[]>([]) // 量程单位 const accuracyLevel_digitalPressureGaugeList = ref<dictType[]>([]) // 准确度等级-数字压力计 const accuracyLevel_precisioPressureGaugeList = ref<dictType[]>([]) // 准确度等级-精密压力表 const supplyVoltageUnitList = ref<dictType[]>([]) // 供电电压单位 /** * 获取字典 */ function getDict() { // 生成方式 getDictByCode('generateWay').then((response) => { generateWayList.value = response.data }) // 检定介质 getDictByCode('easureMedium').then((response) => { measureMediumList.value = response.data response.data.forEach((item: { value: string; name: string }) => { measureMediumMap.value[`${item.value}`] = item.name }) }) // 准确度等级(量程上限90%以下) getDictByCode('accuracyLevelLower').then((response) => { accuracyLevelLowerList.value = response.data response.data.forEach((item: { value: string; name: string }) => { accuracyLevelLowerMap.value[`${item.value}`] = item.name }) }) // 量程单位 getDictByCode('rangeUnit').then((response) => { rangeUnitList.value = response.data }) // 准确度等级-数字压力计 getDictByCode('accuracyLevel_digitalPressureGauge').then((response) => { accuracyLevel_digitalPressureGaugeList.value = response.data }) // 准确度等级-精密压力表 getDictByCode('accuracyLevel_precisioPressureGauge').then((response) => { accuracyLevel_precisioPressureGaugeList.value = response.data }) // 供电电压单位 getDictByCode('supplyVoltageUnit').then((response) => { supplyVoltageUnitList.value = response.data }) } getDict() // ---------------------------------------------校验--------------------------------------------------- // 校验表格(点击保存的时候用、生成标准器示值) const checkList = () => { return useCheckList(list.value, columns.value, '检定项表格') } // ------------------------------------------------------------------------------------------------ // 点击生成标准器示值 const calculateData = () => { ruleFormRef.value!.validate((valid: boolean) => { if (valid) { const params = { belongStandardEquipment: props.belongStandardEquipment, // 检校标准装置 itemCategoryName: props.itemCategoryName, // 检定项分类名称 measureItemConfigPistonGauge: { ...form.value, itemId: props.itemId, // 检定项id appearance: appearance.value, // 外观 indicationError: indicationError.value, // 示值误差、回程误差、轻敲位移 insulationResistance: insulationResistance.value, // 绝缘电阻 tightness: tightness.value, // 密封性 zeroDrift: zeroDrift.value, // 零位飘移 }, } tableLoading.value = true calculate(params).then((res) => { list.value = res.data.map((item: IList, index: number) => { let indicatingValue = 0 // 计算标准器示值 if (list.value.length === 1) { // 检定点为1个,取量程下限 indicatingValue = form.value.rangeLower } else { const step = calc(Number(calc(form.value.rangeUpper, form.value.rangeLower, '-')), form.value.points - 1, '/') indicatingValue = Number(calc(form.value.rangeLower, calc(step, index, '*'), '+')) } return { ...item, measureMedium: measureMediumMap.value[`${item.measureMedium}`], // 检定介质 zeroPosition: item.zeroPosition ? '是' : '否', // 零位是否带止销 indicatingValue: `${form.value.generateWay}` === '1' ? indicatingValue : '', // 标准器示值 } }) tableLoading.value = false }) } }) } // 点击重新计算 const recalculateData = () => { calculateData() } // ----------------------------------------------------------------------------------------------------- watch(() => props.itemCategoryName, (newValue) => { if (newValue === '一般压力表' || newValue === '精密压力表' || newValue === '电接点一般压力表') { columns.value = columns_piezometer.value } else if (newValue === '压力变送器') { columns.value = columns_pressure_transmitter.value } else if (newValue === '压力传感器') { columns.value = columns_pressure_sensor.value } else if (newValue === '数字压力计') { columns.value = columns_digital_pressure_gauge.value } }, { immediate: true }) // 监听准确度等级(量程上限90%以下)和监听准确度等级(量程上限90%以上)对应关系 const accuracyLevelMap: { [key: string]: string } = { '1.0': '1.6', '1.6': '2.5', '2.5': '4.0', '4.0': '4.0', } // 监听准确度等级(量程上限90%以下)--修改以上 watch(() => form.value.accuracyLevelLower, (newValue) => { if (newValue) { form.value.accuracyLevelUpper = Number(accuracyLevelMap[newValue]) } }) watch(() => props.list, (newVal) => { if (newVal) { list.value = [...newVal] } }) defineExpose({ list, form }) </script> <template> <div style="padding: 0 10px 20px;"> <el-checkbox v-model="appearance" :disabled="pageType === 'detail'"> 外观 </el-checkbox> <el-checkbox v-model="tightness" :disabled="pageType === 'detail'"> 密封性 </el-checkbox> <el-checkbox v-model="insulationResistance" :disabled="pageType === 'detail'"> 绝缘电阻 </el-checkbox> <el-checkbox v-model="pointerDeflectionStability" :disabled="pageType === 'detail'"> 指针偏转平稳性 </el-checkbox> <el-checkbox v-model="zeroDrift" :disabled="pageType === 'detail'"> 零位漂移 </el-checkbox> <el-checkbox v-model="indicationError" :disabled="pageType === 'detail'"> 示值误差、回程误差、轻敲位移 </el-checkbox> </div> <el-form ref="ruleFormRef" :model="form" label-width="130" label-position="right" :rules="rules" > <el-row v-if="props.pageType !== 'detail'" :gutter="24"> <el-col :span="12" style="display: flex;justify-content: flex-start;"> <el-form-item label="量程:" prop="rangeLower"> <el-input-number v-model="form.rangeLower" :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="rangeUpper"> <el-input-number v-model="form.rangeUpper" :placeholder="pageType === 'detail' ? '' : '量程上限'" :disabled="pageType === 'detail'" style="flex: 1;" /> </el-form-item> <el-form-item label-width="10" prop="rangeUnit"> <!-- 单位 --> <el-select v-if="props.pageType !== 'detail'" v-model="form.rangeUnit" placeholder="单位" :disabled="props.pageType === 'detail'" filterable style="width: 100px;" > <el-option v-for="item in rangeUnitList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检定点个数:" prop="points"> <el-input-number v-model="form.points" :placeholder="pageType === 'detail' ? '' : '请输入检定点个数'" :disabled="pageType === 'detail'" :step="1" :min="1" :precision="0" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="生成方式:" prop="generateWay"> <el-select v-if="props.pageType !== 'detail'" v-model="form.generateWay" placeholder="生成方式" :disabled="props.pageType === 'detail'" filterable class="full-width-input" > <el-option v-for="item in generateWayList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检定介质:" prop="measureMedium"> <el-select v-if="props.pageType !== 'detail'" v-model="form.measureMedium" placeholder="检定介质" :disabled="props.pageType === 'detail'" filterable class="full-width-input" > <el-option v-for="item in measureMediumList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col v-if="props.itemCategoryName === '一般压力表' || props.itemCategoryName === '电接点一般压力表' || props.itemCategoryName === '精密压力表'" :span="6"> <el-form-item :label="props.itemCategoryName === '精密压力表' ? '分度值的1/10:' : '分度值的1/5:'" prop="division"> <el-input-number v-model="form.division" :placeholder="pageType === 'detail' ? '' : '请输入分度值的1/5'" :disabled="pageType === 'detail'" :min="0" class="full-width-input" /> </el-form-item> </el-col> <el-col v-if="props.itemCategoryName === '一般压力表' || props.itemCategoryName === '电接点一般压力表'" :span="6"> <el-form-item label-width="220" label="准确度等级(量程上限90%以下):" prop="accuracyLevelLower"> <el-select v-if="props.pageType !== 'detail'" v-model="form.accuracyLevelLower" placeholder="请选择" :disabled="props.pageType === 'detail'" filterable class="full-width-input" > <el-option v-for="item in accuracyLevelLowerList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <!-- 循环次数(压力变送器、压力传感器、数字压力计) --> <el-col v-if="props.itemCategoryName === '压力变送器' || props.itemCategoryName === '压力传感器' || props.itemCategoryName === '数字压力计'" :span="6"> <el-form-item label="循环次数:" prop="cycleNumber"> <el-input-number v-model="form.cycleNumber" :placeholder="pageType === 'detail' ? '' : '请输入循环次数'" :disabled="pageType === 'detail'" :step="1" :min="1" :precision="0" class="full-width-input" /> </el-form-item> </el-col> <el-col v-if="props.itemCategoryName === '一般压力表' || props.itemCategoryName === '电接点一般压力表' " :span="6"> <el-form-item label="准确度等级(量程上限90%及以上):" prop="accuracyLevelUpper"> <el-input-number v-model="form.accuracyLevelUpper" :placeholder="pageType === 'detail' ? '' : '请输入'" :disabled="pageType === 'detail'" :min="0" class="full-width-input" /> </el-form-item> </el-col> <!-- 准确度等级(精密压力表) --> <el-col v-if="props.itemCategoryName === '精密压力表'" :span="6"> <el-form-item label="准确度等级:" prop="accuracyLevel"> <el-select v-if="props.pageType !== 'detail'" v-model="form.accuracyLevel" placeholder="准确度等级" :disabled="props.pageType === 'detail'" filterable class="full-width-input" > <el-option v-for="item in accuracyLevel_precisioPressureGaugeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <!-- 准确度等级(数字压力计) --> <el-col v-if="props.itemCategoryName === '数字压力计'" :span="6"> <el-form-item label="准确度等级:" prop="accuracyLevel"> <el-select v-if="props.pageType !== 'detail'" v-model="form.accuracyLevel" placeholder="准确度等级" :disabled="props.pageType === 'detail'" filterable class="full-width-input" > <el-option v-for="item in accuracyLevel_digitalPressureGaugeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <!-- 准确度等级(压力变送器、压力传感器) --> <el-col v-if="props.itemCategoryName === '压力变送器' || props.itemCategoryName === '压力传感器' " :span="6"> <el-form-item label="准确度等级:" prop="accuracyLevel"> <el-input-number v-model="form.accuracyLevel" :placeholder="pageType === 'detail' ? '' : '请输入'" :disabled="pageType === 'detail'" :min="0" class="full-width-input" /> </el-form-item> </el-col> <el-col v-if="props.itemCategoryName === '一般压力表' || props.itemCategoryName === '电接点一般压力表' || props.itemCategoryName === '精密压力表'" :span="6"> <el-form-item label="零位是否带止销:" prop="zeroPosition"> <el-radio-group v-model="form.zeroPosition" class="full-width-input" :disabled="props.pageType === 'detail'"> <el-radio :label="true" size="large"> 是 </el-radio> <el-radio :label="false" size="large"> 否 </el-radio> </el-radio-group> </el-form-item> </el-col> <!-- 供电电压 --> <el-col :span="12" style="display: flex;justify-content: flex-start;"> <el-form-item label="供电电压:" prop="supplyVoltage"> <el-input-number v-model="form.supplyVoltage" :placeholder="pageType === 'detail' ? '' : '请选择供电电压'" :disabled="pageType === 'detail'" style="flex: 1;" /> </el-form-item> <el-form-item label-width="10" prop="supplyVoltageUnit"> <!-- 单位 --> <el-select v-if="props.pageType !== 'detail'" v-model="form.supplyVoltageUnit" placeholder="单位" :disabled="props.pageType === 'detail'" filterable style="width: 100px;" > <el-option v-for="item in supplyVoltageUnitList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col v-if="props.itemCategoryName === '压力传感器'" :span="6"> <el-form-item label="上一周期灵敏度b0:" prop="lastCycleSensitivity"> <el-input v-model="form.lastCycleSensitivity" class="full-width-input" autosize type="textarea" disabled /> </el-form-item> </el-col> </el-row> </el-form> <detail-block title=" "> <template v-if="props.pageType !== 'detail'" #btns> <el-button type="primary" @click="calculateData"> 生成标准器示值 </el-button> <el-button v-if="props.itemCategoryName === '一般压力表' || props.itemCategoryName === '压力变送器' || props.itemCategoryName === '压力传感器' || props.itemCategoryName === '电接点一般压力表'" type="primary" @click="recalculateData"> 计算结果 </el-button> </template> <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 #default="scope"> <el-input-number v-if="props.pageType !== 'detail' && item.value === 'indicatingValue'" v-model="scope.row[item.value]" :placeholder="pageType === 'detail' ? '' : '标准器示值'" :disabled="pageType === 'detail'" class="full-width-input" /> </template> </el-table-column> </el-table> </detail-block> </template>