Newer
Older
xc-business-system / src / views / business / measure / item / components / ninth / templateDetail.vue
lyg on 19 Apr 2024 58 KB bug修改
<!-- 第9套:频谱分析仪标准装置 -->
<script lang="ts" setup name="TemplateDetailNinth">
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'
import templateTable1 from '@/views/business/measure/item/components/second/templateTable.vue'
import { differenceArray, setSelectList } from '@/utils/Array'
import { clearSymbol } from '@/utils/String'
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 form = ref({
  appearanceFunctionCheck: 1, // 外观及功能性检查
  frequencyDisplay: 1, // 频率显示
  sweepWidth: 1, // 扫频宽度
  middleFrequencyWidth: 1, // 中频带宽
  middleConversionDeviation: 1, // 中频带宽转换偏差
  referenceLevel: 1, // 参考电平
  verticalScale: 1, // 垂直刻度(显示位置从上到下)
  inputFrequency: 1, // 输入频响
  averageNoiseLevel: 1, // 平均噪声电平
  harmonicDistortion: 1, // 谐波失真
  inputAttenuation: 1, // 输入衰减
  gainCompression: 1, // 1dB增益压缩点
  calibratingSignal: 1, // 校准信号

  frequencyReferenceAccuracy: '', // 频率基准精度
  valueOne: '', // 数值1
  valueTwo: '', // 数值2
  valueThree: '', // 数值3
  valueFour: '', // 数值4
})
watch(() => props.form, (newVal) => {
  form.value = JSON.parse(JSON.stringify(newVal))
})
const tableLoading = ref(false)
const list = ref<IList[]>([]) // 全部数据
const frequencyList = ref<IList[]>([]) // 频率显示
const sweepWidthList = ref<IList[]>([]) // 扫频宽度
const intermediateFrequencyBandwidthList = ref<IList[]>([]) // 中频带宽
const transitionDeviationList = ref<IList[]>([]) // 中频带宽转换偏差
const referenceElectricalLevelList = ref<IList[]>([]) // 参考电平
const verticalGraduatedList = ref<IList[]>([]) // 垂直刻度(显示位置从上到下)
const inputFrequencyResponseList = ref<IList[]>([]) // 输入频响
const averageNoiseLevelList = ref<IList[]>([]) // 平均噪声电平
const harmonicDistortionList = ref<IList[]>([]) // 谐波失真
const inputAttenuatorList = ref<IList[]>([]) // 输入衰减
const gainCompressionPointList = ref<IList[]>([]) // 1dB增益压缩点
const calibratingSignalList = ref<IList[]>([]) // 校准信号
// 表格数据对应 list 字典
const listDict = ref<{ [key: string]: any }>()
watch(() => [frequencyList.value, sweepWidthList.value, intermediateFrequencyBandwidthList.value, transitionDeviationList.value, referenceElectricalLevelList.value, verticalGraduatedList.value, inputFrequencyResponseList.value, averageNoiseLevelList.value, harmonicDistortionList.value, inputAttenuatorList.value, gainCompressionPointList.value, calibratingSignalList.value], () => {
  listDict.value = {
    '1-频率显示': frequencyList.value,
    '2-扫频宽度': sweepWidthList.value,
    '3-中频带宽': intermediateFrequencyBandwidthList.value,
    '4-中频带宽转换偏差': transitionDeviationList.value,
    '5-参考电平': referenceElectricalLevelList.value,
    '6-垂直刻度(显示位置从上到下)': verticalGraduatedList.value,
    '7-输入频响': inputFrequencyResponseList.value,
    '8-平均噪声电平': averageNoiseLevelList.value,
    '9-谐波失真': harmonicDistortionList.value,
    '10-输入衰减': inputAttenuatorList.value,
    '11-1dB增益压缩点': gainCompressionPointList.value,
    '12-校准信号': calibratingSignalList.value,
  }
  list.value = []
  for (const i in listDict.value) {
    list.value = [...list.value, ...listDict.value[i]]
  }
}, {
  deep: true,
})
// 表格对应的 选择状态
let chekedDict = {} as { [key: string]: any }
watch(() => [props.form, form.value], () => {
  chekedDict = {
    '1-频率显示': form.value.frequencyDisplay,
    '2-扫频宽度': form.value.sweepWidth,
    '3-中频带宽': form.value.middleFrequencyWidth,
    '4-中频带宽转换偏差': form.value.middleConversionDeviation,
    '5-参考电平': form.value.referenceLevel,
    '6-垂直刻度(显示位置从上到下)': form.value.verticalScale,
    '7-输入频响': form.value.inputFrequency,
    '8-平均噪声电平': form.value.averageNoiseLevel,
    '9-谐波失真': form.value.harmonicDistortion,
    '10-输入衰减': form.value.inputAttenuation,
    '11-1dB增益压缩点': form.value.gainCompression,
    '12-校准信号': form.value.calibratingSignal,
  }
  frequencyList.value.forEach((item: any) => {
    item.frequencyReferenceAccuracy = form.value.frequencyReferenceAccuracy
    item.valueOne = form.value.valueOne
    item.valueTwo = form.value.valueTwo
    item.valueThree = form.value.valueThree
    item.valueFour = form.value.valueFour
  })
}, {
  deep: true,
})
// ----------------------------------------表头------------------------------------------------
const columns_frequency = ref<TableColumn[]>([ // 频率显示
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'frequencyNominalValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '扫频宽度', value: 'sweepWidth', align: 'center', required: true, type: 'select-dict', code: 'frequencysweepWidth' },
  { text: '扫频宽度单位', value: 'sweepWidthUnit', align: 'center', required: true, type: 'select' },
  { text: '水平分辨率', value: 'horizontalResolution', align: 'center', required: true, type: 'number' },
  { text: '水平分辨率单位', value: 'horizontalResolutionUnit', align: 'center', required: true, type: 'select' },
  { text: '分辨率带宽', value: 'resolutionBandwidth', align: 'center', required: true, type: 'number' },
  { text: '分辨率带宽单位', value: 'resolutionBandwidthUnit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: false, type: 'text' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: false, type: 'text' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
])

const columns_sweep_width = ref<TableColumn[]>([ // 扫频宽度
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'sweepWidthNominalValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '水平分辨率', value: 'horizontalResolution', align: 'center', required: true, type: 'number' },
  { text: '水平分辨率单位', value: 'horizontalResolutionUnit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'number' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'valueOne', align: 'center', required: false, type: 'number', width: '400' },
])

const columns_intermediate_frequency_bandwidth = ref<TableColumn[]>([ // 中频带宽
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'sweepWidthNominalValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'number' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'valueTwo', align: 'center', required: false, width: '400' },
])

const columns_transition_deviation = ref<TableColumn[]>([ // 中频带宽转换偏差
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'sweepWidthNominalValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'number' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number', width: '250' },
  { text: '是否为参考点', value: 'referencePoint', align: 'center', required: true, type: 'radio' },
])

const columns_reference_electrical_level = ref<TableColumn[]>([ // 参考电平
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'sweepWidthNominalValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '标准衰减器衰减量', value: 'standardAttenuatorAttenuation', align: 'center', required: true, type: 'select-dict', code: 'standardAttenuatorAttenuation' },
  { text: '标准衰减器衰减量单位', value: 'standardAttenuatorAttenuationUnit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'number' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number' },
  { text: '是否为参考点', value: 'referencePoint', align: 'center', required: true, type: 'radio' },
])

const columns_vertical_graduated = ref<TableColumn[]>([ // 垂直刻度(显示位置从上到下)
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'select-dict', code: 'verticalGraduatedValue' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '标准衰减器衰减量', value: 'standardAttenuatorAttenuation', align: 'center', required: true, type: 'select-dict', code: 'standardAttenuatorAttenuation' },
  { text: '标准衰减器衰减量单位', value: 'standardAttenuatorAttenuationUnit', align: 'center', required: true, type: 'select' },
  { text: '信号源幅度', value: 'signalSourceAmplitude', align: 'center', required: true, type: 'select-dict', code: 'signalSourceAmplitude' },
  { text: '信号源幅度单位', value: 'signalSourceAmplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '垂直刻度', value: 'verticalScale', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'select-dict', code: 'verticalScaleFrequency' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number', width: 180 },
])

const columns_input_frequency_response = ref<TableColumn[]>([ // 输入频响
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'select-dict', code: 'inputFrequencyValue' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number' },
  { text: '是否为参考点', value: 'referencePoint', align: 'center', required: true, type: 'radio' },
])
const columns_average_noise_level = ref<TableColumn[]>([ // 平均噪声电平
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '起始频率', value: 'startFrequency', align: 'center', required: true, type: 'select-dict', code: 'averageNoiseLevelStartFrequency' },
  { text: '起始频率单位', value: 'startFrequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '终止频率', value: 'endFrequency', align: 'center', required: true, type: 'select-dict', code: 'averageNoiseLevelEndFrequency' },
  { text: '终止频率单位', value: 'endFrequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '修正值', value: 'correctedValue', align: 'center', required: true, type: 'number' },
  { text: '指标上限', value: 'upperIndex', align: 'center', required: true, type: 'number' },
])

const columns_harmonic_distortion = ref<TableColumn[]>([ // 谐波失真
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'select-dict', code: 'harmonicDistortionFrequency' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: 'RBW', value: 'rbwValue', align: 'center', required: true, type: 'number' },
  { text: 'RBW单位', value: 'rbwValueUnit', align: 'center', required: true, type: 'select' },
  { text: 'VBW', value: 'vbwValue', align: 'center', required: true, type: 'number' },
  { text: 'VBW单位', value: 'vbwValueUnit', align: 'center', required: true, type: 'select' },
  { text: '二次谐波失真指标上限', value: 'upperIndexTwice', align: 'center', required: true, type: 'number' },
  { text: '三次谐波失真指标上限', value: 'upperIndexThrice', align: 'center', required: false, type: 'number' },
  { text: '四次谐波失真指标上限', value: 'upperIndexQuartic', align: 'center', required: false, type: 'number' },
])

const columns_input_attenuator = ref<TableColumn[]>([ // 输入衰减
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '标准衰减器衰减量', value: 'standardAttenuatorAttenuation', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationStandardAttenuatorAttenuation' },
  { text: '标准衰减器衰减量单位', value: 'standardAttenuatorAttenuationUnit', align: 'center', required: true, type: 'select' },
  { text: '输入衰减器', value: 'inputAttenuator', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationStandardAttenuatorAttenuation' },
  { text: '输入衰减器单位', value: 'inputAttenuatorUnit', align: 'center', required: true, type: 'select' },
  { text: '频谱仪参考电平', value: 'spectrumLevel', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationSpectrumLevel' },
  { text: '频谱仪参考电平单位', value: 'spectrumLevelUnit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationFrequency' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number', width: 140 },
  { text: '是否为参考点', value: 'referencePoint', align: 'center', required: true, type: 'radio', width: 140 },
])

const columns_gain_compression_point = ref<TableColumn[]>([ // 1dB增益压缩点
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '输入衰减器', value: 'inputAttenuator', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationStandardAttenuatorAttenuation' },
  { text: '输入衰减器单位', value: 'inputAttenuatorUnit', align: 'center', required: true, type: 'select' },
  { text: '参考电平', value: 'spectrumLevel', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationSpectrumLevel' },
  { text: '参考电平单位', value: 'spectrumLevelUnit', align: 'center', required: true, type: 'select' },
  { text: '频率', value: 'frequency', align: 'center', required: true, type: 'select-dict', code: 'inputAttenuationFrequency' },
  { text: '频率单位', value: 'frequencyUnit', align: 'center', required: true, type: 'select' },
  { text: '幅度', value: 'amplitude', align: 'center', required: true, type: 'number' },
  { text: '幅度单位', value: 'amplitudeUnit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: false, type: 'number', width: 220 },
])
const columns_calibrating_signal = ref<TableColumn[]>([ // 校准信号
  { text: '检定项目', value: 'params', align: 'center', required: true, type: 'text' },
  { text: '类型', value: 'typeValue', align: 'center', required: true, type: 'select' },
  { text: '标称值', value: 'nominalValue', align: 'center', required: true, type: 'number' },
  { text: '标称值单位', value: 'unit', align: 'center', required: true, type: 'select' },
  { text: '技术指标', value: 'technicalIndex', align: 'center', required: true, type: 'number' },
])
// --------------------------------表格操作---------------------------------------------------
// 表格对应 columns字典
const columnsDict = ref<{ [key: string]: any }>(
  {
    '1-频率显示': columns_frequency.value,
    '2-扫频宽度': columns_sweep_width.value,
    '3-中频带宽': columns_intermediate_frequency_bandwidth.value,
    '4-中频带宽转换偏差': columns_transition_deviation.value,
    '5-参考电平': columns_reference_electrical_level.value,
    '6-垂直刻度(显示位置从上到下)': columns_vertical_graduated.value,
    '7-输入频响': columns_input_frequency_response.value,
    '8-平均噪声电平': columns_average_noise_level.value,
    '9-谐波失真': columns_harmonic_distortion.value,
    '10-输入衰减': columns_input_attenuator.value,
    '11-1dB增益压缩点': columns_gain_compression_point.value,
    '12-校准信号': columns_calibrating_signal.value,
  },
)
/**
 * 增加行公共方法
 * @param list 要操作的数组
 * @param title 操作的表格
 */
const addRow = (list: IList[], title: string, index: string) => {
  if (checkList(list, columnsDict.value[`${index}-${title}`], `${title}表格`)) {
    switch (title) {
      case '频率显示': // 频率显示
        frequencyList.value.length
          ? frequencyList.value.push(JSON.parse(JSON.stringify(frequencyList.value[frequencyList.value.length - 1])))
          : frequencyList.value.push({
            dataType: '1',
            params: '频率显示',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            sweepWidth: '', // 扫频宽度
            sweepWidthUnit: '', // 扫频宽度单位
            horizontalResolution: '', // 水平分辨率
            horizontalResolutionUnit: '', // 水平分辨率单位
            resolutionBandwidth: '', // 分辨率带宽
            resolutionBandwidthUnit: '', // 分辨率带宽单位
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位

            frequencyReferenceAccuracy: form.value.frequencyReferenceAccuracy, // 频率基准精度
            valueOne: form.value.valueOne, // 数值1
            valueTwo: form.value.valueTwo, // 数值2
            valueThree: form.value.valueThree, // 数值3
            valueFour: form.value.valueFour, // 数值4
            editable: true,
          } as any)
        break
      case '扫频宽度': // 扫频宽度
        sweepWidthList.value.length
          ? sweepWidthList.value.push(JSON.parse(JSON.stringify(sweepWidthList.value[sweepWidthList.value.length - 1])))
          : sweepWidthList.value.push({
            dataType: '2',
            params: '扫频宽度',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            horizontalResolution: '', // 水平分辨率
            horizontalResolutionUnit: '', // 水平分辨率单位
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            valueOne: '', // 技术指标数值
            technicalIndexSymbol: '±', // 技术指标符号
            editable: true,
          } as any)
        break
      case '中频带宽': // 中频带宽
        intermediateFrequencyBandwidthList.value.length
          ? intermediateFrequencyBandwidthList.value.push(JSON.parse(JSON.stringify(intermediateFrequencyBandwidthList.value[intermediateFrequencyBandwidthList.value.length - 1])))
          : intermediateFrequencyBandwidthList.value.push({
            dataType: '3',
            params: '中频带宽',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            valueOne: '', // 技术指标
            valueTwo: '', // 技术指标
            technicalIndexSymbol: '±', // 技术指标符号
            editable: true,
          } as any)
        break
      case '中频带宽转换偏差': // 中频带宽转换偏差
        transitionDeviationList.value.length
          ? transitionDeviationList.value.push(JSON.parse(JSON.stringify({ ...transitionDeviationList.value[transitionDeviationList.value.length - 1], referencePoint: transitionDeviationList.value.every((item: any) => item.referencePoint === '0') ? '1' : '0' } as any)))
          : transitionDeviationList.value.push({
            dataType: '4',
            params: '中频带宽转换偏差',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            technicalIndexSymbol: '±', // 技术指标符号
            referencePoint: '1',
            editable: true,
          } as any)
        break
      case '参考电平': // 参考电平
        referenceElectricalLevelList.value.length
          ? referenceElectricalLevelList.value.push(JSON.parse(JSON.stringify({ ...referenceElectricalLevelList.value[referenceElectricalLevelList.value.length - 1], referencePoint: referenceElectricalLevelList.value.every((item: any) => item.referencePoint === '0') ? '1' : '0' } as any)))
          : referenceElectricalLevelList.value.push({
            dataType: '5',
            params: '参考电平',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            referencePoint: '1',
            technicalIndexSymbol: '±', // 技术指标符号
            standardAttenuatorAttenuation: '', // 标准衰减器衰减量
            standardAttenuatorAttenuationUnit: '', // 标准衰减器衰减量单位
            editable: true,
          } as any)
        break
      case '垂直刻度(显示位置从上到下)': // 频率显示
        verticalGraduatedList.value.length
          ? verticalGraduatedList.value.push(JSON.parse(JSON.stringify(verticalGraduatedList.value[verticalGraduatedList.value.length - 1])))
          : verticalGraduatedList.value.push({
            dataType: '6',
            params: '垂直刻度',
            unit: '', // 标称值单位
            nominalValue: '', // 标称值
            standardAttenuatorAttenuation: '', // 标准衰减器衰减量
            standardAttenuatorAttenuationUnit: '', // 标准衰减器衰减量单位
            signalSourceAmplitude: '', // 信号源幅度
            signalSourceAmplitudeUnit: '', // 信号源幅度单位
            verticalScale: '', // 垂直刻度
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            technicalIndexSymbol: '±', // 技术指标符号
            editable: true,
          } as any)
        break
      case '输入频响': // 输入频响
        inputFrequencyResponseList.value.length
          ? inputFrequencyResponseList.value.push(JSON.parse(JSON.stringify({ ...inputFrequencyResponseList.value[inputFrequencyResponseList.value.length - 1], referencePoint: inputFrequencyResponseList.value.every((item: any) => item.referencePoint === '0') ? '1' : '0' } as any)))
          : inputFrequencyResponseList.value.push({
            dataType: '7',
            params: '输入频响',
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            technicalIndexSymbol: '±', // 技术指标符号
            referencePoint: '1',
            editable: true,
          } as any)
        break
      case '平均噪声电平': // 平均噪声电平
        averageNoiseLevelList.value.length
          ? averageNoiseLevelList.value.push(JSON.parse(JSON.stringify(averageNoiseLevelList.value[averageNoiseLevelList.value.length - 1])))
          : averageNoiseLevelList.value.push({
            dataType: '8',
            params: '平均噪声电平',
            startFrequency: '', // 起始频率
            startFrequencyUnit: '', // 起始频率单位
            endFrequency: '', // 终止频率
            endFrequencyUnit: '', // 终止频率单位
            correctedValue: '', // 修正值
            upperIndex: '', // 指标上限
            editable: true,
          } as any)
        break
      case '谐波失真': // 谐波失真
        harmonicDistortionList.value.length
          ? harmonicDistortionList.value.push(JSON.parse(JSON.stringify(harmonicDistortionList.value[harmonicDistortionList.value.length - 1])))
          : harmonicDistortionList.value.push({
            dataType: '9',
            params: '谐波失真',
            frequency: '', // 频率
            frequencyUnit: '', // 频率
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            rbwValue: '1', // RBW
            rbwValueUnit: '', // RBW单位
            vbwValue: '1', // VBW
            vbwValueUnit: '', // VBW单位
            upperIndexTwice: '', // 二次谐波失真指标上限
            upperIndexThrice: '', // 三次谐波失真指标上限
            upperIndexQuartic: '', // 四次谐波失真指标上限

            editable: true,
          } as any)
        break
      case '输入衰减': // 输入衰减
        inputAttenuatorList.value.length
          ? inputAttenuatorList.value.push(JSON.parse(JSON.stringify({ ...inputAttenuatorList.value[inputAttenuatorList.value.length - 1], referencePoint: inputAttenuatorList.value.every((item: any) => item.referencePoint === '0') ? '1' : '0' } as any)))
          : inputAttenuatorList.value.push({
            dataType: '10',
            params: '输入衰减',
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            spectrumLevel: '', // 频谱仪参考电平
            spectrumLevelUnit: '', // 频谱仪参考电平单位
            standardAttenuatorAttenuation: '', // 衰减器衰减量
            standardAttenuatorAttenuationUnit: '', // 衰减器衰减量单位
            inputAttenuator: '', // 输入衰减器
            inputAttenuatorUnit: '', // 输入衰减器单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            referencePoint: '1',
            technicalIndexSymbol: '±', // 技术指标符号
            editable: true,
          } as any)
        break
      case '1dB增益压缩点': // 1dB增益压缩点
        gainCompressionPointList.value.length
          ? gainCompressionPointList.value.push(JSON.parse(JSON.stringify(gainCompressionPointList.value[gainCompressionPointList.value.length - 1])))
          : gainCompressionPointList.value.push({
            dataType: '11',
            params: '1dB增益压缩点',
            inputAttenuator: '', // 输入衰减器
            inputAttenuatorUnit: '', // 输入衰减器单位
            spectrumLevel: '', // 参考电平
            spectrumLevelUnit: '', // 参考电平单位
            frequency: '', // 频率
            frequencyUnit: '', // 频率单位
            amplitude: '', // 幅度
            amplitudeUnit: '', // 幅度单位
            technicalIndex: '', // 技术指标
            technicalIndexUnit: 'dB', // 技术指标单位
            technicalIndexSymbol: '±', // 技术指标符号
            editable: true,
          } as any)
        break
      case '校准信号': // 校准信号
        calibratingSignalList.value.length
          ? calibratingSignalList.value.push(JSON.parse(JSON.stringify(calibratingSignalList.value[calibratingSignalList.value.length - 1])))
          : calibratingSignalList.value.push({
            dataType: '12',
            params: '校准信号',
            technicalIndex: '', // 技术指标
            technicalIndexUnit: '', // 技术指标单位
            technicalIndexSymbol: '±', // 技术指标符号
            typeValue: '', // 类型
            nominalValue: '', // 标称值
            unit: '', // 标称值单位
            editable: true,
          } as any)
        break
    }
  }
}
/**
 * 删除行公共方法
 * @param checkoutList 选中的数组
 * @param list 操作的数组
 */
const delRow = (checkoutList: IList[], list: IList[], title: string) => {
  if (!checkoutList.length) {
    ElMessage.warning('请选中要删除的行')
  }
  else {
    let data = [] as any[]
    data = differenceArray(list, checkoutList)
    switch (title) {
      case '频率显示': // 频率显示
        frequencyList.value = data
        break
      case '扫频宽度': // 扫频宽度
        sweepWidthList.value = data
        break
      case '中频带宽': // 中频带宽
        intermediateFrequencyBandwidthList.value = data
        break
      case '中频带宽转换偏差': // 中频带宽转换偏差
        transitionDeviationList.value = data
        break
      case '参考电平': // 参考电平
        referenceElectricalLevelList.value = data
        break
      case '垂直刻度(显示位置从上到下)': // 垂直刻度(显示位置从上到下)
        verticalGraduatedList.value = data
        break
      case '输入频响': // 垂直刻度(显示位置从上到下)
        inputFrequencyResponseList.value = data
        break
      case '平均噪声电平': // 平均噪声电平
        averageNoiseLevelList.value = data
        break
      case '谐波失真': // 谐波失真
        harmonicDistortionList.value = data
        break
      case '输入衰减': // 输入衰减
        inputAttenuatorList.value = data
        break
      case '1dB增益压缩点': // 1dB增益压缩点
        gainCompressionPointList.value = data
        break
      case '校准信号': // 校准信号
        calibratingSignalList.value = data
        break
    }
  }
}

// ---------------------------------------------校验---------------------------------------------------
// 校验表格(点击保存的时候用、生成标准器示值)
function checkList(list: any[], columns: any[], title: string) {
  return useCheckList(list, columns, title)
}
// 校验所有表格
function checkAllList() {
  let result = true
  for (const i in columnsDict.value) {
    console.log(listDict.value[i])
    const requireLength = !!((chekedDict[i] === '1' || chekedDict[i] === 1) && chekedDict[i])
    if (!useCheckList(listDict.value[i], columnsDict.value[i], i.substring(2), '', '', '', requireLength)) {
      result = false
      break
    }
  }
  return result
}

// -----------------------------------------------------------------------------------------------------
const clearAllList = () => {
  list.value = []
  frequencyList.value = []
  sweepWidthList.value = []
  intermediateFrequencyBandwidthList.value = []
  transitionDeviationList.value = []
  referenceElectricalLevelList.value = []
  verticalGraduatedList.value = []
  inputFrequencyResponseList.value = []
  averageNoiseLevelList.value = []
  harmonicDistortionList.value = []
  inputAttenuatorList.value = []
  gainCompressionPointList.value = []
  calibratingSignalList.value = []
  for (const i in listDict.value) {
    listDict.value[i] = []
  }
}
watch(() => props.list, (newVal) => { // 检定项表格
  if (newVal) {
    clearAllList()
    newVal.forEach((item: any) => {
      switch (item.dataType) {
        case '1':
          // 频率显示
          frequencyList.value.push({ ...item, params: '频率显示' })
          form.value
          form.value.frequencyReferenceAccuracy = item.frequencyReferenceAccuracy
          form.value.valueOne = item.valueOne
          form.value.valueTwo = item.valueTwo
          form.value.valueThree = item.valueThree
          form.value.valueFour = item.valueFour
          break
        case '2':
          // 扫频宽度
          sweepWidthList.value.push({ ...item, params: '扫频宽度', technicalIndexSymbol: '±' })
          break
        case '3':
          // 中频带宽
          intermediateFrequencyBandwidthList.value.push({ ...item, params: '中频带宽', technicalIndexSymbol: '±' })
          break
        case '4':
          // 中频带宽转换偏差
          transitionDeviationList.value.push({ ...item, params: '中频带宽转换偏差', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)), referencePoint: String(item.referencePoint) })
          break
        case '5':
          // 参考电平
          referenceElectricalLevelList.value.push({ ...item, params: '参考电平', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)), referencePoint: String(item.referencePoint) })
          break
        case '6':
          // 垂直刻度
          verticalGraduatedList.value.push({ ...item, params: '垂直刻度', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)) })
          break
        case '7':
          // 输入频响
          inputFrequencyResponseList.value.push({ ...item, params: '输入频响', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)), referencePoint: String(item.referencePoint) })
          break
        case '8':
          // 平均噪声电平
          averageNoiseLevelList.value.push({ ...item, params: '平均噪声电平' })
          break
        case '9':
          // 谐波失真
          harmonicDistortionList.value.push({ ...item, params: '谐波失真' })
          break
        case '10':
          // 输入衰减
          inputAttenuatorList.value.push({ ...item, params: '输入衰减', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)), referencePoint: String(item.referencePoint) })
          break
        case '11':
          // 1dB增益压缩点
          gainCompressionPointList.value.push({ ...item, params: '1dB增益压缩点', technicalIndexSymbol: item.technicalIndex.substring(0, 1), technicalIndex: Number(clearSymbol(item.technicalIndex)) })
          break
        case '12':
          // 校准信号
          calibratingSignalList.value.push({ ...item, params: '校准信号', technicalIndexSymbol: '±', technicalIndex: Number(clearSymbol(item.technicalIndex)) })
          break
      }
    })
  }
})
const getList = () => {
  let result = [] as any[]
  for (const i in chekedDict) {
    if ((chekedDict[i] === '1' || chekedDict[i] === 1) && chekedDict[i]) {
      const data = listDict.value[i].map((item: any) => ({ ...item, technicalIndex: item.technicalIndexSymbol ? `${item.technicalIndexSymbol}${item.technicalIndex}` : '' }))
      result = [...result, ...data]
    }
  }
  return result
}
defineExpose({ list, checkAllList, form, getList })

// 表格下拉框等内容是否禁用
const disabled = ({ scope, column }, fun) => {
  fun(props.pageType === 'detail')
}
// 每个table对应的下拉框内容 字典
const tableDict = ref<{ [key: string]: { value: string;name: string;id: string }[] }>({})
const changeLoadSituationa = (value: any, index: number, text: string, type: string, list: any[], item: string) => {
  if (item === '频率显示') {
    if (text === '标称值') {
      frequencyList.value[index].frequency = value
    }
    if (text === '标称值单位') {
      frequencyList.value[index].frequencyUnit = typeof value === 'string' ? value : ''
    }
  }
  if (item === '中频带宽') {
    if (text === '技术指标') {
      if (String(list[index].valueOne) && String(list[index].valueTwo)) {
        list[index].technicalIndex = '0'
      }
    }
  }
  if (item === '中频带宽转换偏差' || item === '参考电平' || item === '输入频响' || item === '输入衰减') {
    if (text === '是否为参考点') {
      if (value === '1') {
        list.forEach((citem: any, cindex: number) => {
          list[cindex].referencePoint = '0'
        })
        list[index].referencePoint = '1'
      }
      else {
        if (list.every((item: { referencePoint: any }) => item.referencePoint === '0' || item.referencePoint === 0)) {
          list[0].referencePoint = '1'
        }
      }
    }
  }
  if (item === '谐波失真') {
    if (text === '二次谐波失真指标上限') {
      list[index].upperIndexThrice = value
      list[index].upperIndexQuartic = value
      // list[index].upperIndexThrice ? '' : list[index].upperIndexThrice = value
      // list[index].upperIndexQuartic ? '' : list[index].upperIndexQuartic = value
    }
  }
  if (item === '校准信号') {
    if (text === '标称值单位') {
      list[index].technicalIndexUnit = typeof value === 'string' ? value : ''
    }
    if (text === '类型') {
      typeof value === 'string' ? list[index].unit = '' : ''
    }
  }
}

// 获取字典
const nominalValueUnit = ref<{ value: string;name: string;id: string }[]>([]) // 标称值单位
const amplitudeUnit = ref<{ value: string;name: string;id: string }[]>([]) // 幅度单位
const standardAttenuatorAttenuationUnit = ref<{ value: string;name: string;id: string }[]>([]) // 标准衰减器衰减量单位
const verticalScale = ref<{ value: string;name: string;id: string }[]>([]) // 垂直刻度
const typeValue = ref<{ value: string;name: string;id: string }[]>([]) // 校准信号类型
const symbolList = ref<{ value: string;name: string;id: string }[]>([]) // 技术指标符号
const fetchDict = async () => {
  // 标称值单位
  const res1 = await getDictByCode('standardFrequencyUnit')
  nominalValueUnit.value = res1.data
  // 幅度单位
  const res2 = await getDictByCode('standardAmplitudeUnit')
  amplitudeUnit.value = res2.data
  // 标准衰减器衰减量单位
  const res3 = await getDictByCode('standardDBunit')
  standardAttenuatorAttenuationUnit.value = res3.data
  // 垂直刻度
  const res4 = await getDictByCode('verticalScale')
  verticalScale.value = res4.data
  // 校准信号类型
  const res5 = await getDictByCode('calibratingSignalType')
  typeValue.value = res5.data
  // 技术指标符号
  const res6 = await getDictByCode('standardTechnicalIndexSymbol')
  symbolList.value = res6.data

  tableDict.value = {
    标称值单位: nominalValueUnit.value,
    频率单位: nominalValueUnit.value,
    VBW单位: nominalValueUnit.value,
    RBW单位: nominalValueUnit.value,
    起始频率单位: nominalValueUnit.value,
    终止频率单位: nominalValueUnit.value,
    扫频宽度单位: nominalValueUnit.value,
    水平分辨率单位: nominalValueUnit.value,
    分辨率带宽单位: nominalValueUnit.value,
    幅度单位: amplitudeUnit.value,
    信号源幅度单位: amplitudeUnit.value,
    标准衰减器衰减量单位: standardAttenuatorAttenuationUnit.value,
    输入衰减器单位: standardAttenuatorAttenuationUnit.value,
    输入衰减单位: standardAttenuatorAttenuationUnit.value,
    频谱仪参考电平单位: standardAttenuatorAttenuationUnit.value,
    参考电平单位: amplitudeUnit.value,
    垂直刻度: verticalScale.value,
    类型: typeValue.value,
  }
}
fetchDict()

// 自定义下拉框内容
const customSelect = (data: any, fun: any) => {
  if (data.title === '校准信号' && data.text === '标称值单位') {
    if (data.scope.row.typeValue === '频率') {
      fun(nominalValueUnit.value)
    }
    else {
      fun(amplitudeUnit.value)
    }
  }
  else if (data.title === '垂直刻度(显示位置从上到下)' && data.text === '标称值单位') {
    fun(amplitudeUnit.value)
  }
  else if (data.title === '参考电平' && data.text === '标称值单位') {
    fun(amplitudeUnit.value)
  }
  else {
    fun(tableDict.value[data.text])
  }
}
</script>

<template>
  <div style="padding: 0 10px;">
    <el-checkbox v-model="form.appearanceFunctionCheck" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
      外观及功能性检查
    </el-checkbox>
  </div>
  <!-- 频率显示 -->
  <template-table1
    :data="frequencyList" :columns="columns_frequency" :page-type="pageType" title="频率显示" index="1" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.frequencyDisplay" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        频率显示
      </el-checkbox>
      <div style="display: flex;align-items: center;margin-bottom: 10px;">
        <span style="white-space: nowrap;"> 技术指标:± ( 标称值 ×</span>
        <el-input-number
          v-model="form.frequencyReferenceAccuracy"
          :placeholder="pageType === 'detail' ? '' : '频率基准精度'"
          :disabled="pageType === 'detail'"
          :precision="4"
          :step="0.1"
          :min="0"
          style="width: 180px !important;margin: 0 10px;"
        />
        <span style="white-space: nowrap;"> + </span>
        <el-input-number
          v-model="form.valueOne"
          :placeholder="pageType === 'detail' ? '' : '数值(%)'"
          :disabled="pageType === 'detail'"
          :precision="4"
          :step="0.1"
          :min="0"
          style="width: 140px;margin: 0 10px;"
        />
        <span style="white-space: nowrap;"> × 扫频宽度 + </span>
        <el-input-number
          v-model="form.valueTwo"
          :placeholder="pageType === 'detail' ? '' : '数值(%)'"
          :disabled="pageType === 'detail'"
          :precision="4"
          :step="0.1"
          :min="0"
          style="width: 140px;margin: 0 10px;"
        />
        <span style="white-space: nowrap;"> × 分辨率带宽 + </span>
        <el-input-number
          v-model="form.valueThree"
          :placeholder="pageType === 'detail' ? '' : '数值(Hz)'"
          :disabled="pageType === 'detail'"
          :precision="4"
          :step="0.1"
          :min="0"
          style="width: 140px;margin: 0 10px;"
        />
        <span style="white-space: nowrap;"> + </span>
        <el-input-number
          v-model="form.valueFour"
          :placeholder="pageType === 'detail' ? '' : '数值'"
          :disabled="pageType === 'detail'"
          :precision="4"
          :step="0.1"
          :min="0"
          style="width: 140px;margin: 0 10px;"
        />
        <span style="white-space: nowrap;"> × 水平分辨率) </span>
      </div>
    </template>
  </template-table1>
  <!-- 扫频宽度 -->
  <template-table1
    :data="sweepWidthList" :columns="columns_sweep_width" :page-type="pageType" title="扫频宽度" index="2" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.sweepWidth" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        扫频宽度
      </el-checkbox>
    </template>
    <!-- 符号 -->
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        ±
      </template>
    </template>
    <!-- 技术指标 -->
    <template #next-content="{ scope, column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">%</span>
        <span style="display: inline-block;">×</span>
        <el-input v-model="scope.nominalValue" placeholder="标称值" disabled style="width: 80px;" />
        +
        <el-input v-model="scope.horizontalResolution" placeholder="水平分辨力" style="width: 80px;" disabled />
      </template>
    </template>
  </template-table1>
  <!-- 中频带宽 -->
  <template-table1
    :data="intermediateFrequencyBandwidthList" :columns="columns_intermediate_frequency_bandwidth" :page-type="pageType" title="中频带宽" index="3" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.middleFrequencyWidth" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        中频带宽
      </el-checkbox>
    </template>
    <template #next-content="{ scope, column }">
      <template v-if="column.text === '技术指标'">
        <el-input-number
          v-model="scope.valueOne"
          placeholder="数值" controls-position="right"
          :disabled="pageType === 'detail'"
        />
        <span style="display: inline-block;">×</span>
        <el-input v-model="scope.nominalValue" placeholder="标称值" disabled style="width: 80px;" />

        <span style="display: inline-block;"> ~ </span>
        <el-input-number
          v-model="scope.valueTwo"
          placeholder="数值" controls-position="right"
          :disabled="pageType === 'detail'"
        />
        <span style="display: inline-block;">×</span>
        <el-input v-model="scope.nominalValue" placeholder="标称值" disabled style="width: 80px;" />
      </template>
    </template>
  </template-table1>
  <!-- 中频带宽转换偏差 -->
  <template-table1
    :data="transitionDeviationList" :columns="columns_transition_deviation" :page-type="pageType" title="中频带宽转换偏差" index="4" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.middleConversionDeviation" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        中频带宽转换偏差
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>
  <!--  参考电平 -->
  <template-table1
    :data="referenceElectricalLevelList" :columns="columns_reference_electrical_level" :page-type="pageType" title="参考电平" index="5" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    :custom-select="true"
    @disabled="disabled"
    @customSelect="customSelect"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.referenceLevel" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        参考电平
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>

  <!--  垂直刻度(显示位置从上到下) -->
  <template-table1
    :data="verticalGraduatedList" :columns="columns_vertical_graduated" :page-type="pageType" title="垂直刻度(显示位置从上到下)" index="6" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    :custom-select="true"
    @disabled="disabled"
    @customSelect="customSelect"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.verticalScale" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        垂直刻度(显示位置从上到下)
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>

  <!--  输入频响 -->
  <template-table1
    :data="inputFrequencyResponseList" :columns="columns_input_frequency_response" :page-type="pageType" title="输入频响" index="7" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.inputFrequency" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        输入频响
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>

  <!--  平均噪声电平 -->
  <template-table1
    :data="averageNoiseLevelList" :columns="columns_average_noise_level" :page-type="pageType" title="平均噪声电平" index="8" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.averageNoiseLevel" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        平均噪声电平
      </el-checkbox>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '修正值' || column.text === '指标上限' ">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>

  <!--  谐波失真 -->
  <template-table1
    :data="harmonicDistortionList" :columns="columns_harmonic_distortion" :page-type="pageType" title="谐波失真" index="9" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.harmonicDistortion" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        谐波失真
      </el-checkbox>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text.includes('谐波失真指标上限')">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
        <span style="display: inline-block;">c</span>
      </template>
    </template>
  </template-table1>

  <!--  输入衰减 -->
  <template-table1
    :data="inputAttenuatorList" :columns="columns_input_attenuator" :page-type="pageType" title="输入衰减" index="10" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.inputAttenuation" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        输入衰减
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <!-- 选择下拉框 -->
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
        <!-- <span style="display: inline-block;">m</span> -->
      </template>
    </template>
  </template-table1>

  <!--  1dB增益压缩点 -->
  <template-table1
    :data="gainCompressionPointList" :columns="columns_gain_compression_point" :page-type="pageType" title="1dB增益压缩点" index="11" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    @disabled="disabled"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.gainCompression" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        1dB增益压缩点
      </el-checkbox>
    </template>
    <template #pre-content="{ scope, column }">
      <template v-if="column.text === '技术指标'">
        <!-- 选择下拉框 -->
        <!-- <span style="display: inline-block;">≥</span> -->
        <el-select v-model="scope.technicalIndexSymbol" :disabled="pageType === 'detail'" style="width: 120px;">
          <!-- standardTechnicalIndexSymbol -->
          <el-option v-for="item in symbolList" :key="item.name" :value="item.name" :label="item.name" />
        </el-select>
      </template>
    </template>
    <template #next-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span>
      </template>
    </template>
  </template-table1>

  <!--  校准信号 -->
  <template-table1
    :data="calibratingSignalList" :columns="columns_calibrating_signal" :page-type="pageType" title="校准信号" index="12" :show-btn="pageType !== 'detail'"
    :select-all-list="tableDict"
    :custom-select="true"
    @disabled="disabled"
    @customSelect="customSelect"
    @add-row="addRow"
    @del-row="delRow"
    @change-load-situationa="changeLoadSituationa"
  >
    <template #custom-check>
      <el-checkbox v-model="form.calibratingSignal" :checked="true" :true-label="1" :false-label="0" :disabled="pageType === 'detail'">
        校准信号
      </el-checkbox>
    </template>
    <template #pre-content="{ column }">
      <template v-if="column.text === '技术指标'">
        <!-- 选择下拉框 -->
        <span style="display: inline-block;">±</span>
      </template>
    </template>
    <template #next-content="{ scope, column }">
      <template v-if="column.text === '技术指标'">
        <!-- <span style="display: inline-block;">d</span>
        <span style="display: inline-block;">B</span> -->
        <span v-for="item in scope?.technicalIndexUnit" :key="item" style="display: inline-block;">{{ item }}</span>
      </template>
    </template>
  </template-table1>
</template>