<!-- 第10套:信号发生器标准装置 --> <script lang="ts" setup name="TemplateDetailTenth"> import { ElMessage } from 'element-plus' import type { IList } from './templateDetail-interface' import templateTable from './templateTable.vue' 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' import type { TableColumn } from '@/components/NormalTable/table_interface' 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: '', }, }) const tableLoading = ref(false) const frequencyList = ref<IList[]>([]) // 频率 const powerList = ref<IList[]>([]) // 功率 const amplitudeModulationDepthList = ref<IList[]>([]) // 调幅深度 const frequencyModulationDeviationList = ref<IList[]>([]) // 调频频偏 const residentialAmplitudeModulationList = ref<IList[]>([]) // 剩余调幅 const residentialFrequencyModulationList = ref<IList[]>([]) // 剩余调频 const harmonicList = ref<IList[]>([]) // 谐波 const phaseList = ref<IList[]>([]) // 调相相偏 const frequencyCheckoutList = ref<IList[]>([]) // 频率 const powerCheckoutList = ref<IList[]>([]) // 功率 const amplitudeModulationDepthCheckoutList = ref<IList[]>([]) // 调幅深度 const frequencyModulationDeviationCheckoutList = ref<IList[]>([]) // 调频频偏 const residentialAmplitudeModulationCheckoutList = ref<IList[]>([]) // 剩余调幅 const residentialFrequencyModulationCheckoutList = ref<IList[]>([]) // 剩余调频 const harmonicCheckoutList = ref<IList[]>([]) // 谐波 const phaseCheckoutList = ref<IList[]>([]) // 调相相偏 // ----------------------------------------表头------------------------------------------------ const columns_frequency = ref<TableColumn[]>([ // 频率 { text: '检定项目', value: 'params', align: 'center', required: true }, { text: '标称值', value: 'nominalValue', align: 'center', required: true }, { text: '标称值单位', value: 'nominalValue', align: 'center', required: true }, { text: '幅度', value: 'maximumAllowValue', align: 'center', required: false }, { text: '幅度单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '幅度单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'U(k=2)', value: 'maximumAllowValue', align: 'center', required: false }, { text: '技术指标', value: 'maximumAllowValue', align: 'center', required: false }, ]) const columns_power = ref<TableColumn[]>([ // 功率 { text: '检定项目', value: 'params', align: 'center', required: true }, { text: '频率', value: 'nominalValue', align: 'center', required: true }, { text: '频率单位', value: 'nominalValue', align: 'center', required: true }, { text: '标称值', value: 'minimumAllowFactorA', align: 'center', required: true }, { text: '标称值单位', value: 'maximumAllowFactorB', align: 'center', required: true }, { text: '技术指标', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'U(k=2)', value: 'maximumAllowValue', align: 'center', required: false }, ]) const columns_amplitude_modulation_depth = ref<TableColumn[]>([ // 调幅深度\调频频偏\调相相偏 { text: '检定项目', value: 'params', align: 'center', required: true }, { text: '频率', value: 'nominalValue', align: 'center', required: true }, { text: '频率单位', value: 'nominalValue', align: 'center', required: true }, { text: '标称值', value: 'maximumAllowValue', align: 'center', required: false }, { text: '标称值单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '幅度', value: 'maximumAllowValue', align: 'center', required: false }, { text: '幅度单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '高通滤波', value: 'maximumAllowValue', align: 'center', required: false }, { text: '高通滤波单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '低通滤波', value: 'maximumAllowValue', align: 'center', required: false }, { text: '低通滤波单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '调制速率', value: 'maximumAllowValue', align: 'center', required: false }, { text: '调制速率单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '技术指标', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'U(k=2)', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'THD上限', value: 'maximumAllowValue', align: 'center', required: false }, ]) const columns_residential_amplitude_modulation = ref<TableColumn[]>([ // 剩余调幅\剩余调频 { text: '检定项目', value: 'params', align: 'center', required: true }, { text: '频率', value: 'nominalValue', align: 'center', required: true }, { text: '频率单位', value: 'nominalValue', align: 'center', required: true }, { text: '幅度', value: 'maximumAllowValue', align: 'center', required: false }, { text: '幅度单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '高通滤波', value: 'maximumAllowValue', align: 'center', required: false }, { text: '高通滤波单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '低通滤波', value: 'maximumAllowValue', align: 'center', required: false }, { text: '低通滤波单位', value: 'maximumAllowValue', align: 'center', required: false }, { text: '指标上限', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'U(k=2)', value: 'maximumAllowValue', align: 'center', required: false }, ]) const columns_harmonic = ref<TableColumn[]>([ // 谐波 { text: '检定项目', value: 'params', align: 'center', required: true }, { text: '频率', value: 'nominalValue', align: 'center', required: true }, { text: '频率单位', value: 'nominalValue', align: 'center', required: true }, { text: '幅度', value: 'nominalValue', align: 'center', required: true }, { text: '幅度单位', value: 'nominalValue', align: 'center', required: true }, { text: '指标上限', value: 'maximumAllowValue', align: 'center', required: false }, { text: 'U(k=2)', value: 'maximumAllowValue', align: 'center', required: false }, ]) // --------------------------------表格操作--------------------------------------------------- // 多选 const handleSelectionChange = (e: any, type: string) => { switch (type) { case '频率': frequencyCheckoutList.value = e break case '功率': powerCheckoutList.value = e break case '调幅深度': amplitudeModulationDepthCheckoutList.value = e break case '调频频偏': frequencyModulationDeviationCheckoutList.value = e break case '剩余调幅': residentialAmplitudeModulationCheckoutList.value = e break case '剩余调频': residentialFrequencyModulationCheckoutList.value = e break case '谐波': harmonicCheckoutList.value = e break case '调相相偏': phaseCheckoutList.value = e break } } /** * 增加行公共方法 * @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 checkList = () => { // return useCheckList(list.value, columns.value, '检定项表格') } // ------------------------------------------------------------------------------------------------ // 点击计算结果--上方表格计算 const calculateDataTop = () => { } // 点击生成辅助接地电阻--下面表格计算 const calculateDataBottom = () => { } // ----------------------------------------------------------------------------------------------------- // watch(() => props.list, (newVal) => { // 检定项表格 // if (newVal) { // list.value = [...newVal] // } // }) // defineExpose({ list }) </script> <template> <div style="padding: 0 10px;"> <el-checkbox v-model="form.appearance" :checked="true" :disabled="pageType === 'detail'"> 外观及功能性检查 </el-checkbox> </div> <!-- 频率 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.sj" :checked="true" :disabled="pageType === 'detail'"> 频率 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(frequencyList, '频率')"> 增加行 </el-button> <el-button type="info" @click="delRow(frequencyCheckoutList, frequencyList)"> 删除行 </el-button> </div> </div> <template-table :data="frequencyList" :columns="columns_frequency" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '频率')" /> </detail-block> <!-- 功率 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.gl" :checked="true" :disabled="pageType === 'detail'"> 功率 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(powerList, '功率')"> 增加行 </el-button> <el-button type="info" @click="delRow(powerCheckoutList, powerList)"> 删除行 </el-button> </div> </div> <template-table :data="powerList" :columns="columns_power" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '功率')" /> </detail-block> <!-- 调幅深度 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.tfsd" :checked="true" :disabled="pageType === 'detail'"> 调幅深度 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(amplitudeModulationDepthList, '调幅深度')"> 增加行 </el-button> <el-button type="info" @click="delRow(amplitudeModulationDepthCheckoutList, amplitudeModulationDepthList)"> 删除行 </el-button> </div> </div> <template-table :data="amplitudeModulationDepthList" :columns="columns_amplitude_modulation_depth" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调幅深度')" /> </detail-block> <!-- 调频频偏 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.tppp" :checked="true" :disabled="pageType === 'detail'"> 调频频偏 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(frequencyModulationDeviationList, '调频频偏')"> 增加行 </el-button> <el-button type="info" @click="delRow(frequencyModulationDeviationCheckoutList, frequencyModulationDeviationList)"> 删除行 </el-button> </div> </div> <template-table :data="frequencyModulationDeviationList" :columns="columns_amplitude_modulation_depth" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调频频偏')" /> </detail-block> <!-- 剩余调幅 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.sytf" :checked="true" :disabled="pageType === 'detail'"> 剩余调幅 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(residentialAmplitudeModulationList, '剩余调幅')"> 增加行 </el-button> <el-button type="info" @click="delRow(residentialAmplitudeModulationCheckoutList, residentialAmplitudeModulationList)"> 删除行 </el-button> </div> </div> <template-table :data="residentialAmplitudeModulationList" :columns="columns_residential_amplitude_modulation" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '剩余调幅')" /> </detail-block> <!-- 剩余调频 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.sytp" :checked="true" :disabled="pageType === 'detail'"> 剩余调频 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(residentialFrequencyModulationList, '剩余调频')"> 增加行 </el-button> <el-button type="info" @click="delRow(residentialFrequencyModulationCheckoutList, residentialFrequencyModulationList)"> 删除行 </el-button> </div> </div> <template-table :data="residentialFrequencyModulationList" :columns="columns_residential_amplitude_modulation" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '剩余调频')" /> </detail-block> <!-- 谐波 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.xb" :checked="true" :disabled="pageType === 'detail'"> 谐波 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(harmonicList, '谐波')"> 增加行 </el-button> <el-button type="info" @click="delRow(harmonicCheckoutList, harmonicList)"> 删除行 </el-button> </div> </div> <template-table :data="harmonicList" :columns="columns_harmonic" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '谐波')" /> </detail-block> <!-- 调相相偏 --> <detail-block title=""> <div style="display: flex;justify-content: space-between;"> <el-checkbox v-model="form.txxp" :checked="true" :disabled="pageType === 'detail'"> 调相相偏 </el-checkbox> <div v-if="pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;"> <el-button type="primary" @click="addRow(phaseList, '调相相偏')"> 增加行 </el-button> <el-button type="info" @click="delRow(phaseCheckoutList, phaseList)"> 删除行 </el-button> </div> </div> <template-table :data="phaseList" :columns="columns_amplitude_modulation_depth" :page-type="pageType" @selection-change="(e) => handleSelectionChange(e, '调相相偏')" /> </detail-block> </template>