<!-- 标准装置台账信息详情 配置核查项 第13套:示波器检定装置 -->
<script name="StandardBookEquipmentConfig" lang="ts" setup>
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import type { IList } from './tenth-interface'
import TemplateTable from './templateTable.vue'
import type { dictType } from '@/global'
import { useCheckList } from '@/commonMethods/useCheckList'
import type { TableColumn } from '@/components/NormalTable/table_interface'
import { config, getCheckItemDetail } from '@/api/equipment/standard/book'
import { calc } from '@/utils/useCalc'
import { getDictByCode } from '@/api/system/dict'
const textMap: { [key: string]: string } = {
edit: '编辑',
detail: '详情',
}// 页面类型字典
const form = ref({ // 表单
equipmentNo: '', // 统一编号
equipmentName: '', // 设备名称
model: '', // 型号规格
manufactureNo: '', // 出厂编号
measureRange: '', // 测量范围
uncertainty: '', // 不确定度或允许误差极限或准确度等级
itemCategoryName: '', // 核查项分类名称
itemCategoryId: '', // 核查项分类id
remark: '', // 核查项备注
belongStandardEquipment: '', // 检校标准装置
belongStandardEquipmentName: '', // 检校标准装置名称
})
const pageType = ref('detail') // 页面类型: add, edit, detail
const infoId = ref('') // id
const $router = useRouter() // 路由实例
const loading = ref(false) // loading
const equipmentId = ref('') // 设备id
// -----------------------------------路由参数------------------------------------------------------
// 从路由中获取页面类型参数
const $route = useRoute()
if ($route.params && $route.params.type) {
pageType.value = $route.params.type as string
if ($route.params.id) {
infoId.value = $route.params.id as string
}
console.log('pageType.value', pageType.value)
}
// -------------------------------------------核查项-----------------------------------------------
const listFrequency = ref<IList[]>([]) // 频率
const listPowerLevel = ref<IList[]>([]) // 功率电平
const listRelativeLevel = ref<IList[]>([]) // 相对电平
const listAMDepth = ref<IList[]>([]) // 调幅度
const listFrequencyModulationDeviation = ref<IList[]>([]) // 调频频偏
const listPhase = ref<IList[]>([]) // 调相相偏
const listFrequencySpectrum = ref<IList[]>([]) // 频谱纯度
const checkoutFrequencyList = ref<IList[]>([]) // 频率多选
const checkoutPowerLevelList = ref<IList[]>([]) // 功率电平多选
const checkoutRelativeLevelList = ref<IList[]>([]) // 相对电平多选
const checkoutAMDepthList = ref<IList[]>([]) // 调幅度多选
const checkoutfrequencyModulationDeviationList = ref<IList[]>([]) // 调频频偏多选
const checkoutPhaseList = ref<IList[]>([]) // 调相相偏多选
const checkoutFrequencySpectrumList = ref<IList[]>([]) // 频谱纯度多选
const frequency = ref(true) // 是否显示频率
const powerLevel = ref(true) // 功率电平
const relativeLevel = ref(true) // 相对电平
const AMDepth = ref(true) // 调幅度
const frequencyModulationDeviation = ref(true) // 调频频偏
const phase = ref(true) // 调相相偏
const frequencySpectrum = ref(true) // 频谱纯度
const columns_frequency = ref<TableColumn[]>([ // 频率
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_powerLevel = ref<TableColumn[]>([ // 功率电平
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '功率', value: 'resolution', align: 'center', required: true },
{ text: '功率单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_relativeLevel = ref<TableColumn[]>([ // 相对电平
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '相对电平', value: 'resolution', align: 'center', required: true },
{ text: '相对电平单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_AMDepth = ref<TableColumn[]>([ // 调幅度
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '调幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度单位', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '调制速率', value: 'checkType', align: 'center', required: true },
{ text: '调制速率单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_frequencyModulationDeviation = ref<TableColumn[]>([ // 调频频偏
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '调频频偏', value: 'resolution', align: 'center', required: true },
{ text: '调频频偏单位', value: 'resolution', align: 'center', required: true },
{ text: '幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度单位', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '调制速率', value: 'checkType', align: 'center', required: true },
{ text: '调制速率单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_phase = ref<TableColumn[]>([ // 调相相偏
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '调相相偏', value: 'resolution', align: 'center', required: true },
{ text: '调相相偏单位', value: 'resolution', align: 'center', required: true },
{ text: '幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度单位', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波', value: 'checkType', align: 'center', required: true },
{ text: '高通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波', value: 'checkType', align: 'center', required: true },
{ text: '低通滤波单位', value: 'checkType', align: 'center', required: true },
{ text: '调制速率', value: 'checkType', align: 'center', required: true },
{ text: '调制速率单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
const columns_frequencySpectrum = ref<TableColumn[]>([ // 频谱纯度
{ text: '核查项目', value: 'params', align: 'center', required: true },
{ text: '频率点', value: 'checkPoint', align: 'center', required: true },
{ text: '频率点单位', value: 'unit', align: 'center', required: true },
{ text: '幅度', value: 'resolution', align: 'center', required: true },
{ text: '幅度单位', value: 'checkType', align: 'center', required: true },
{ text: 'U(k=2)', value: 'checkType', align: 'center', required: true },
{ text: '核查类型', value: 'checkType', align: 'center', required: true },
])
// 多选
const handleSelectionChange = (e: any, type: string) => {
switch (type) {
case '频率':
checkoutFrequencyList.value = e
break
case '功率电平':
checkoutPowerLevelList.value = e
break
case '相对电平':
checkoutRelativeLevelList.value = e
break
case '调幅度':
checkoutAMDepthList.value = e
break
case '调频频偏':
checkoutfrequencyModulationDeviationList.value = e
break
case '调相相偏':
checkoutPhaseList.value = e
break
case '频谱纯度':
checkoutFrequencySpectrumList.value = e
break
}
}
// 校验表格(点击保存的时候、增加行用)
const checkList = (list: any, title: string) => {
// return useCheckList(list, columns.value, title)
}
/**
* 增加行公共方法
* @param list 要操作的数组
* @param title 操作的表格
*/
const addRow = (list: IList[], title: string) => {
// if (checkList(list, `${title}表格`)) {
// if (list.length) { // 增加行时默认上一行数据
// list.push({
// id: '',
// checkPoint: list[list.length - 1].checkPoint, // 核查点(直接存字典value)
// checkType: list[list.length - 1].checkType, // 核查类型
// cycleNumber: list[list.length - 1].cycleNumber, // 循环次数
// equipmentId: list[list.length - 1].equipmentId, // 配套设备id
// itemCategoryId: list[list.length - 1].itemCategoryId, // 核查项分类id(能够确定是哪个标准装置)
// params: list[list.length - 1].params, // 核查项目(直接存字典value)
// remark: list[list.length - 1].remark, // 核查项备注(每个数据存储的核查项备注相同,前端取列表中一个即可)
// resolution: list[list.length - 1].resolution, // 分辨力
// testType: list[list.length - 1].testType, // 核查点类型(直接存字典value)
// unit: list[list.length - 1].unit, // 单位(直接存字典value)
// urel: list[list.length - 1].urel, // 测量标准相对扩展不确定度urel
// })
// }
// else {
// list.push({
// checkPoint: '', // 核查点
// checkType: '', // 核查类型(直接存字典value,多个逗号分隔)
// cycleNumber: 6, // 循环次数
// equipmentId: infoId.value, // 配套设备id
// itemCategoryId: form.value.itemCategoryId, // 核查项分类id(能够确定是哪个标准装置)
// params: '', // 核查项目(直接存字典value)
// remark: '', // 核查项备注
// resolution: 0.0001, // 分辨力
// testType: title, // 核查点类型(直接存字典value)
// unit: '', // 单位(直接存字典value)
// urel: 0, // 测量标准相对扩展不确定度urel
// })
// }
// }
}
/**
* 删除行公共方法
* @param checkoutList 选中的数组
* @param list 操作的数组
*/
const delRow = (checkoutList: IList[], list: IList[]) => {
if (!checkoutList.length) {
ElMessage.warning('请选中要删除的行')
}
else {
list = list.filter((item: any) => {
return !checkoutList.includes(item)
})
}
}
// ---------------------------------------按钮-----------------------------------------------------
// 点击关闭
const close = () => {
$router.back()
}
// 清空配置
const clear = () => {
ElMessageBox.confirm(
'确认清空配置项吗?',
'提示',
{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
},
)
.then(() => {
listFrequency.value = [] // 频率
listPowerLevel.value = [] // 功率电平
listRelativeLevel.value = [] // 相对电平
listAMDepth.value = [] // 调幅度
listFrequencyModulationDeviation.value = [] // 调频频偏
listPhase.value = [] // 调相相偏
listFrequencySpectrum.value = [] // 频谱纯度
})
}
// 点击保存
const save = () => {
// if (!list.value.length) { ElMessage.warning('核查项不能为空'); return false }
// if (!checkList(list.value, '核查项表格')) { return false }
// const params = {
// itemCategoryId: form.value.itemCategoryId, // 核查项分类id
// checkItemDataPistonGaugeList: list.value,
// }
// const loading = ElLoading.service({
// lock: true,
// text: '加载中',
// background: 'rgba(255, 255, 255, 0.6)',
// })
// config(params).then((res) => {
// ElMessage.success('已保存')
// pageType.value = 'detail'
// loading.close()
// })
}
// 获取详情
const getInfo = () => {
// const loading = ElLoading.service({
// lock: true,
// text: '加载中',
// background: 'rgba(255, 255, 255, 0.6)',
// })
const params = {
equipmentId: equipmentId.value, // 设备id
belongStandardEquipment: form.value.belongStandardEquipment, // 检校标准装置code
itemCategoryId: form.value.itemCategoryId, // 核查项分类id
itemCategoryName: form.value.itemCategoryName, // 核查项分类名称
}
// getCheckItemDetail(params).then((res) => {
// list.value = res.data.checkItemDataPistonGaugeList.map((item: any) => {
// return {
// ...item,
// resolution: Number(item.resolution),
// }
// })
// loading.close()
// })
}
// ------------------------------------------钩子--------------------------------------------------
onMounted(() => {
form.value.equipmentNo = $route.query.equipmentNo as string // 统一编号
form.value.equipmentName = $route.query.equipmentName as string // 设备名称
form.value.model = $route.query.model as string // 型号规格
form.value.manufactureNo = $route.query.manufactureNo as string // 出厂编号
form.value.measureRange = $route.query.measureRange as string // 测量范围
form.value.uncertainty = $route.query.uncertainty as string // 不确定度或允许误差极限或准确度等级
form.value.itemCategoryName = $route.query.itemCategoryName as string // 核查项分类名称
form.value.itemCategoryId = $route.query.itemCategoryId as string // 核查项分类id
form.value.belongStandardEquipment = $route.query.belongStandardEquipment as string // 核查项标准装置id
form.value.belongStandardEquipmentName = $route.query.belongStandardEquipmentName as string // 核查项标准装置id
equipmentId.value = $route.query.equipmentId as string // 设备id
// getInfo()
})
</script>
<template>
<app-container>
<detail-page v-loading="loading" :title="`配置核查项(${textMap[pageType]})`">
<template #btns>
<el-button v-if="pageType === 'edit'" type="warning" @click="clear">
清空配置
</el-button>
<el-button v-if="pageType === 'edit'" type="primary" @click="save">
保存
</el-button>
<el-button type="info" @click="close">
关闭
</el-button>
</template>
<el-form
ref="ruleFormRef"
:model="form"
:label-width="130"
label-position="right"
>
<el-row :gutter="24" class="marg">
<el-col :span="6">
<el-form-item label="统一编号:" prop="equipmentNo">
<el-input
v-model="form.equipmentNo"
disabled
:placeholder="pageType === 'detail' ? '' : '统一编号'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称:" prop="equipmentName">
<el-input
v-model="form.equipmentName"
disabled
:placeholder="pageType === 'detail' ? '' : '设备名称'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="型号规格:" prop="model">
<el-input
v-model="form.model"
disabled
:placeholder="pageType === 'detail' ? '' : '型号规格'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出厂编号:" prop="manufactureNo">
<el-input
v-model="form.manufactureNo"
disabled
:placeholder="pageType === 'detail' ? '' : '出厂编号'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="测量范围:" prop="measureRange">
<el-input
v-model="form.measureRange"
disabled
type="textarea"
autosize
:placeholder="pageType === 'detail' ? '' : '测量范围'"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="260" label="不确定度或允许误差极限或准确度等级:" prop="uncertainty">
<el-input
v-model="form.uncertainty"
type="textarea"
autosize
disabled
:placeholder="pageType === 'detail' ? '' : '不确定度或允许误差极限或准确度等级'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="核查项分类名称:" prop="itemCategoryName">
<el-input
v-model="form.itemCategoryName"
disabled
:placeholder="pageType === 'detail' ? '' : '核查项分类名称'"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</detail-page>
<!-- 频率 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="frequency" :disabled="pageType === 'detail'">
频率
</el-checkbox>
<div v-if="frequency && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listFrequency, '频率')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutFrequencyList, listFrequency)">
删除行
</el-button>
</div>
</div>
<template-table v-if="frequency" :data="listFrequency" :columns="columns_frequency" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '频率')" />
</detail-block>
<!-- 功率电平 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="powerLevel" :disabled="pageType === 'detail'">
功率电平
</el-checkbox>
<div v-if="powerLevel && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listPowerLevel, '功率电平')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutPowerLevelList, listPowerLevel)">
删除行
</el-button>
</div>
</div>
<template-table v-if="powerLevel" :data="listPowerLevel" :columns="columns_powerLevel" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '功率电平')" />
</detail-block>
<!-- 相对电平 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="relativeLevel" :disabled="pageType === 'detail'">
相对电平
</el-checkbox>
<div v-if="relativeLevel && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listRelativeLevel, '相对电平')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutRelativeLevelList, listRelativeLevel)">
删除行
</el-button>
</div>
</div>
<template-table v-if="relativeLevel" :data="listRelativeLevel" :columns="columns_relativeLevel" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '相对电平')" />
</detail-block>
<!-- 调幅度 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="AMDepth" :disabled="pageType === 'detail'">
调幅度
</el-checkbox>
<div v-if="AMDepth && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listAMDepth, '调幅度')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutAMDepthList, listAMDepth)">
删除行
</el-button>
</div>
</div>
<template-table v-if="AMDepth" :data="listAMDepth" :columns="columns_AMDepth" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调幅度')" />
</detail-block>
<!-- 调频频偏 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="frequencyModulationDeviation" :disabled="pageType === 'detail'">
调频频偏
</el-checkbox>
<div v-if="frequencyModulationDeviation && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listFrequencyModulationDeviation, '调频频偏')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutfrequencyModulationDeviationList, listFrequencyModulationDeviation)">
删除行
</el-button>
</div>
</div>
<template-table v-if="frequencyModulationDeviation" :data="listFrequencyModulationDeviation" :columns="columns_frequencyModulationDeviation" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调频频偏')" />
</detail-block>
<!-- 调相相偏 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="phase" :disabled="pageType === 'detail'">
调相相偏
</el-checkbox>
<div v-if="phase && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listPhase, '调相相偏')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutPhaseList, listPhase)">
删除行
</el-button>
</div>
</div>
<template-table v-if="phase" :data="listPhase" :columns="columns_phase" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调相相偏')" />
</detail-block>
<!-- 频谱纯度 -->
<detail-block title="" style="padding-bottom: 20px;">
<div style="display: flex;justify-content: space-between;">
<el-checkbox v-model="frequencySpectrum" :disabled="pageType === 'detail'">
频谱纯度
</el-checkbox>
<div v-if="frequencySpectrum && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
<el-button type="primary" @click="addRow(listFrequencySpectrum, '频谱纯度')">
增加行
</el-button>
<el-button type="info" @click="delRow(checkoutFrequencySpectrumList, listFrequencySpectrum)">
删除行
</el-button>
</div>
</div>
<template-table v-if="frequencySpectrum" :data="listFrequencySpectrum" :columns="columns_frequencySpectrum" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '频谱纯度')" />
</detail-block>
<!-- 核查项备注 -->
<el-form
:model="form"
label-width="120"
label-position="right"
style="margin-top: 20px;"
>
<el-row>
<el-col :span="12">
<el-form-item label="核查项备注:" prop="remark">
<el-input
v-model="form.remark"
class="full-width-input"
autosize
type="textarea"
:disabled="pageType === 'detail'"
:placeholder="pageType === 'detail' ? ' ' : '请输入核查项备注'"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</app-container>
</template>