Newer
Older
xc-business-system / src / views / business / taskMeasure / certificate / components / basic-old.vue
lyg on 28 Feb 2024 33 KB 频谱分析仪核查项完成
<!-- 证书审批提醒 基本信息 -->
<script name="taskMeasureCertificateBasic" lang="ts" setup>
import type { Ref } from 'vue'
import { onMounted, ref } from 'vue'
import dayjs from 'dayjs'
import { ElLoading, ElMessage } from 'element-plus'
import type { FormRules } from 'element-plus'
import type { IForm, IMesureResult, IUsedEquipmentList } from '../certificate-interface'
import useUserStore from '@/store/modules/user'
import { getDictByCode } from '@/api/system/dict'
import { getUserList } from '@/api/system/user'
import type { dictType } from '@/global'
import { UploadFile } from '@/api/file'
import { useCheckList } from '@/commonMethods/useCheckList'
import selectUsedEquipmentDialog from '@/views/business/manager/order/dialog/selectEquipment.vue'
import { useDoubleClickTableRow, useSetAllRowReadable } from '@/commonMethods/useSetAllRowReadable'
const props = defineProps({
  pageType: { // 页面类型 add新建 edit编辑 detail详情
    type: String,
    default: 'detail',
  },
})
const user = useUserStore() // 用户信息
const form: Ref<IForm> = ref({ // 基本信息表单
  certificateReportCode: '', // 证书报告编号
  measureCategory: '', // 检校类别
  measurePersonName: '', // 检定员
  calibrationTime: '', // 		检校时间
  orderCode: '', // 任务单编号
  temperature: 0, // 温度
  humidity: 0, // 湿度
  environmentCode: '', // 环境记录单编号
  environmentId: '', // 环境记录单id
  mesureDate: '', // 检定时间
  jsyxq: '', // 检定有效期
  calibrationPlace: '', // 检校地点
  ckbz: '', // 参考标准
  jdjg: '', // 检定结果
  xyfw: '', // 限用范围
  jdjl: '', // 检定结论

  customerId: '', // 委托方id
  customerNo: '', // 委托方代码
  customerName: '', // 委托方名称
  deliverer: '', // 送检人
  phone: '', // 委托方电话
  planDeliverTime: '', // 预计送达时间
  requireOverTime: '', // 要求检完时间
  isUrgent: '', // 是否加急
  customerAddress: '', // 委托方地址

  ysjltemplateId: '', // 	原始记录模板id
  originalRecordName: '', // 原始记录模板名称
  ysjlfj: '', // 原始记录附件
  certificateReportName: '', // 证书报告名称
  zsbgtemplateId: '', // 证书报告id
  zsbgfj: '', // 证书报告录附件
})
const rules = reactive<FormRules>({ // 表单验证规则
  measureCategory: [{ required: true, message: '检校类别不能为空', trigger: ['blur', 'change'] }],
  measurePersonName: [{ required: true, message: '检定员不能为空', trigger: ['blur', 'change'] }],
  calibrationTime: [{ required: true, message: '检定时间不能为空', trigger: ['blur', 'change'] }],
  orderCode: [{ required: true, message: '任务单编号不能为空', trigger: ['blur', 'change'] }],
  temperature: [{ required: true, message: '温度不能为空', trigger: ['blur', 'change'] }],
  humidity: [{ required: true, message: '湿度不能为空', trigger: ['blur', 'change'] }],
  mesureDate: [{ required: true, message: '检定日期不能为空', trigger: ['blur', 'change'] }],
  jsyxq: [{ required: true, message: '检定有效期不能为空', trigger: ['blur', 'change'] }],
  calibrationPlace: [{ required: true, message: '检校地点不能为空', trigger: ['blur', 'change'] }],
  ckbz: [{ required: true, message: '参考标准不能为空', trigger: ['blur', 'change'] }],
  jdjg: [{ required: true, message: '检定结果不能为空', trigger: ['blur', 'change'] }],
  xyfw: [{ required: true, message: '限用范围不能为空', trigger: ['blur', 'change'] }],
  jdjl: [{ required: true, message: '检定结论不能为空', trigger: ['blur', 'change'] }],
  originalRecordName: [{ required: true, message: '原始记录名称不能为空', trigger: ['blur', 'change'] }],
  certificateReportName: [{ required: true, message: '证书报告名称不能为空', trigger: ['blur', 'change'] }],
  ysjltemplateId: [{ required: true, message: '原始记录模板不能为空', trigger: ['blur', 'change'] }],
  zsbgtemplateId: [{ required: true, message: '证书报告模板不能为空', trigger: ['blur', 'change'] }],
})
// ------------------------------------------字典----------------------------------------------
const mesureResultMap = ref<dictType[]>([]) // 检定结果
const measureCategoryList = ref<dictType[]>([]) // 检校类别
const userList = ref<{ [key: string]: string }[]>([]) // 用户列表
const isUrgentList = ref<dictType[]>([]) // 是否加急

/**
 * 获取字典
 */
function getDict() {
  // 检定结果
  getDictByCode('mesureResult').then((response) => {
    mesureResultMap.value = response.data
  })
  // 检校类别
  getDictByCode('measureCategory').then((response) => {
    measureCategoryList.value = response.data
  })
  // 获取用户列表
  getUserList({ offset: 1, limit: 999999 }).then((res: any) => {
    userList.value = res.data.rows
  })
  // 是否加急
  getDictByCode('isUrgent').then((response) => {
    isUrgentList.value = response.data
  })
}
// ------------------------------------------被检件信息-------------------------------------------
const equipmentRef = ref() // 选择任务单下的设备组件ref
const equipmentColumns = [ // 被检件信息表头
  { text: '统一编号', value: 'equipmentNo', align: 'center', width: '240', disabled: true, required: true },
  { text: '设备名称', value: 'equipmentName', align: 'center', required: false },
  { text: '型号规格', value: 'model', align: 'center', required: false },
  { text: '附件', value: 'fj', align: 'center', required: false },
  { text: '外观和功能检查', value: 'wghgnjc', align: 'center', required: false },
  { text: '特殊要求', value: 'tsyq', align: 'center', required: false },
  { text: '检校项目', value: 'jjxm', align: 'center', required: false },
]
const equipmentList = ref([{ // 表格
  equipmentNo: '', // 统一编号
  equipmentName: '', // 设备名称
  model: '', // 型号规格
  fj: '', // 附件
  wghgnjc: '', // 外观和功能检查
  tsyq: '', // 特殊要求
  jjxm: '', // 检校项目
}])

// 点击选择设备
const selectEquipment = (index: number) => {
  equipmentRef.value.initDialog()
}

// 选好设备
const confirmSelectTechFile = (val: any) => {
  if (val && val.length) {
    equipmentList.value = [{
      equipmentNo: val[0].equipmentNo, // 统一编号
      equipmentName: val[0].equipmentName, // 设备名称
      model: val[0].model, // 型号规格
      fj: val[0].fj, // 附件
      wghgnjc: val[0].wghgnjc, // 外观和功能检查
      tsyq: val[0].tsyq, // 特殊要求
      jjxm: val[0].jjxm, // 检校项目
    }]
  }
}
// ------------------------------------------所使用的标准、主要测量设备----------------------------------------
const usedEquipmentColumns = [ // 表头
  { text: '统一编号', value: 'equipmentNo', align: 'center', width: '240', disabled: true, required: true },
  { text: '设备名称', value: 'equipmentName', align: 'center', required: false },
  { text: '型号规格', value: 'model', align: 'center', required: false },
  { text: '出厂编号', value: 'manufactureNo', align: 'center', required: false },
  { text: '不确定度或允许误差极限或准确度等级', value: 'level', align: 'center', required: false },
  { text: '证书有效期', value: 'expirationDate', align: 'center', required: false },
]
const selectUsedEquipmentRef = ref() // 选择设备组件ref
const selectUsedEquipmentIndex = ref(0) // 选择的第几列
const checkoutUsedEquipmentList = ref<IUsedEquipmentList[]>([]) // 选中的内容
const usedEquipmentList = ref<IUsedEquipmentList[]>([]) // 表格数据

// 多选发生改变时
const handleSelectionUsedEquipmentChange = (e: any) => {
  checkoutUsedEquipmentList.value = e
}

// 点击选择
const selectUsedEquipment = (index: number) => {
  selectUsedEquipmentIndex.value = index
  selectUsedEquipmentRef.value.initDialog(false)
}

// 增加行
const addUsedEquipmentRow = () => {
  const checkResult = useCheckList(usedEquipmentList.value, usedEquipmentColumns, '所使用的标准、主要测量设备') // 检查表格
  if (checkResult) {
    useSetAllRowReadable(usedEquipmentList.value)
    usedEquipmentList.value.push({
      id: '', // 主键
      equipmentNo: '', // 统一编号
      equipmentName: '', // 设备名称
      model: '', // 型号规格
      manufactureNo: '', // 出厂编号
      level: '', // 不确定度或允许误差极限或准确度等级
      expirationDate: '', // 证书有效期
    })
  }
}

// 选好设备
const clickConfirmUsedEquipment = (val: Array<IUsedEquipmentList>) => {
  const getValue = val[0]
  const index = usedEquipmentList.value.findIndex((i: IUsedEquipmentList) => val[0].equipmentNo === i.equipmentNo)
  if (index !== -1) {
    ElMessage.warning('此设备已添加过')
    return
  }
  usedEquipmentList.value.splice(selectUsedEquipmentIndex.value, 1, getValue)
}

// 删除行
const delUsedEquipmentRow = () => {
  if (checkoutUsedEquipmentList.value.length <= 0) {
    ElMessage({
      message: '请选中要删除的行',
      type: 'warning',
    })
  }
  else {
    checkoutUsedEquipmentList.value.forEach((item: IUsedEquipmentList) => {
      usedEquipmentList.value.forEach((element, index) => {
        if (element.equipmentNo === item.equipmentNo) {
          usedEquipmentList.value.splice(index, 1)
        }
      })
    })
  }
}

// -----------------------------------------检定结果信息-------------------------------------
const mesureResultRef = ref() // 检定结果信息表格ref
const mesureResultList = ref<IMesureResult[]>([]) // 表格数据
const checkoutMesureResultList = ref<IMesureResult[]>([]) // 多选数据
const addMesureResultObj: IMesureResult = { // IMesureResult对象
  executiveItem: '', // 检定项目
  jdd: '', // 检定点
  dw: '', // 单位
  cs: '', // 次数
  sx: '', // 上限
  xx: '', // 下限
  sdz: '', // 设定值
  csz: '', // 测试值
  bqdd: '', // 不确定度
  remark: '', // 备注
  editable: props.pageType !== 'detail',
}
const mesureResultColumns = [ // 检定结果信息
  { text: '检定项目', value: 'executiveItem', required: false },
  { text: '检定点', value: 'jdd', required: false },
  { text: '单位', value: 'dw', required: false },
  { text: '次数', value: 'cs', required: false, width: '180' },
  { text: '上限', value: 'sx', required: false },
  { text: '下限', value: 'xx', required: false },
  { text: '设定值', value: 'sdz', required: false },
  { text: '测试值', value: 'csz', required: false },
  { text: '不确定度', value: 'bqdd', required: false },
  { text: '备注', value: 'remark', required: false },
]

// 多选发生改变时
const handleSelectionMesureResultChange = (e: any) => {
  checkoutMesureResultList.value = e
}

/**
 * 点击增加行
 * @param val 操作的表格类型
 */
const addMesureResultRow = () => {
  if (useCheckList(mesureResultList.value, mesureResultColumns, '检定结果信息')) {
    useSetAllRowReadable(mesureResultList.value)
    mesureResultList.value.push({ ...addMesureResultObj })
  }
}

/**
 * 点击删除行
 * @param val 操作的表格类型 tech技术指标、accessory主附件信息、inspect核查点
 */
const deleteMesureResultRow = () => {
  if (checkoutMesureResultList.value.length <= 0) {
    ElMessage({
      message: '请选中要删除的行',
      type: 'warning',
    })
    return false
  }

  mesureResultList.value = mesureResultList.value.filter((item: IMesureResult) => {
    return !checkoutMesureResultList.value.includes(item)
  })
}

// 双击行
const rowDblclick = (row: IMesureResult) => {
  useDoubleClickTableRow(row, mesureResultList.value)
}
// -------------------------------------原始记录、证书报告----------------------------------
// ==================文件上传===================
const originalRecordFileRef = ref() // 原始记录ref
const certificateReportFileRef = ref() // 证书报告ref
const onFileOriginalRecordChange = (event: any) => { // 原始记录上传
  // 原生上传
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    fd.append('multipartFile', event.target.files[0])
    UploadFile(fd).then((res) => {
      if (res.code === 200) {
        form.value.ysjlfj = res.data[0]
        // 重置当前验证
        ElMessage.success('文件上传成功')
      }
      else {
        ElMessage.error(res.message)
      }
    })
  }
}
const originalRecordUpload = () => {
  originalRecordFileRef.value.click()
}

const onFileCertificateReportChange = (event: any) => { // 证书报告上传
  // 原生上传
  if (event.target.files?.length !== 0) {
    // 创建formdata对象
    const fd = new FormData()
    fd.append('multipartFile', event.target.files[0])
    const loading = ElLoading.service({
      lock: true,
      background: 'rgba(255, 255, 255, 0.8)',
    })
    UploadFile(fd).then((res) => {
      if (res.code === 200) {
        form.value.zsbgfj = res.data[0]
        // 重置当前验证
        ElMessage.success('文件上传成功')
        loading.close()
      }
      else {
        ElMessage.error(res.message)
        loading.close()
      }
    })
  }
}
const certificateReportUpload = () => {
  certificateReportFileRef.value.click()
}
// ==================生成表单按钮===================
// 点击生成表单
const createForm = () => {
  ElMessage.info('敬请期待')
}
// -------------------------------------------任务单----------------------------------------------
// 点击选择任务单
const selectOrder = () => {

}
// -------------------------------------------环境记录单--------------------------------------------
// 点击选择环境记录单
const selectEnvironment = () => {

}
// -------------------------------------------原始记录---------------------------------------------
// 点击选择原始记录
const selectOriginalRecord = () => {

}
// -------------------------------------------证书报告---------------------------------------------
// 点击选择证书报告
const selectCertificateReport = () => {

}
// -------------------------------------------钩子------------------------------------------------

onMounted(async () => {
  await getDict() // 获取字典
})
</script>

<template>
  <detail-block title="">
    <el-form
      ref="ruleFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
      :rules="rules"
    >
      <el-row :gutter="24" class="marg">
        <el-col :span="6">
          <el-form-item label="证书报告编号:" prop="certificateReportCode">
            <el-input v-model="form.certificateReportCode" disabled placeholder="系统自动生成" />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检校类别:" prop="measureCategory">
            <el-select
              v-model.trim="form.measureCategory"
              clearable
              :placeholder="pageType === 'detail' ? '' : '请选择检校类别'"
              size="default"
              :disabled="pageType === 'detail'"
              class="full-width-input"
            >
              <el-option
                v-for="item in measureCategoryList"
                :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="measurePersonName">
            <el-select
              v-model.trim="form.measurePersonName"
              placeholder="请选择检定员"
              filterable
              class="full-width-input"
            >
              <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检定时间:" prop="calibrationTime">
            <el-date-picker
              v-model="form.calibrationTime"
              type="datetime"
              format="YYYY-MM-DD HH:mm:ss"
              :placeholder="pageType === 'detail' ? ' ' : '请选择检定时间'"
              value-format="YYYY-MM-DD HH:mm:ss"
              :disabled="pageType === 'detail'"
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="任务单编号:" prop="orderCode">
            <el-input
              v-model.trim="form.orderCode"
              :placeholder="pageType === 'detail' ? ' ' : '请选择任务单编号'"
              disabled
              class="full-width-input"
              clearable
            >
              <template v-if="pageType !== 'detail'" #append>
                <el-button
                  size="small"
                  @click="selectOrder"
                >
                  选择
                </el-button>
              </template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="环境记录单:" prop="environmentCode">
            <el-input
              v-model.trim="form.environmentCode"
              :placeholder="pageType === 'detail' ? '' : '请选择环境记录单'"
              class="full-width-input"
              disabled
            >
              <template v-if="pageType !== 'detail'" #append>
                <el-button
                  size="small"
                  @click="selectEnvironment"
                >
                  选择
                </el-button>
              </template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="温度(℃):" prop="temperature">
            <el-input-number
              v-model.trim="form.temperature"
              :step="0.1"
              :placeholder="pageType === 'detail' ? '' : '请输入温度'"
              class="full-width-input"
              :disabled="pageType === 'detail' || form.environmentCode !== ''"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="相对湿度(%RH):" prop="humidity">
            <el-input-number
              v-model.trim="form.humidity"
              :step="0.1"
              :placeholder="pageType === 'detail' ? '' : '请输入相对湿度'"
              class="full-width-input"
              :disabled="pageType === 'detail' || form.environmentCode !== ''"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检定日期:" prop="mesureDate">
            <el-date-picker
              v-model="form.mesureDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              class="full-width-input"
              :placeholder="pageType === 'detail' ? ' ' : '请选择检定日期'"
              :disabled="pageType === 'detail'"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检定有效期:" prop="jsyxq">
            <el-date-picker
              v-model="form.jsyxq"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              class="full-width-input"
              :placeholder="pageType === 'detail' ? ' ' : '请选择检定有效期'"
              :disabled="pageType === 'detail'"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="参考标准:" prop="ckbz">
            <el-input
              v-model.trim="form.ckbz"
              :placeholder="pageType === 'detail' ? '' : '请选择参考标准'"
              class="full-width-input"
              disabled
            >
              <template v-if="pageType !== 'detail'" #append>
                <el-button
                  size="small"
                  @click="selectEnvironment"
                >
                  选择
                </el-button>
              </template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="检定结果:" prop="jdjg">
            <el-select
              v-model.trim="form.jdjg"
              clearable
              :placeholder="pageType === 'detail' ? '' : '请选择检定结果'"
              size="default"
              :disabled="pageType === 'detail'"
              class="full-width-input"
            >
              <el-option
                v-for="item in mesureResultMap"
                :key="item.id"
                :label="item.name"
                :value="item.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="12">
          <el-form-item label="检校地点:" prop="calibrationPlace">
            <el-input
              v-model="form.calibrationPlace"
              type="textarea"
              autosize
              :placeholder="pageType === 'detail' ? '' : '请输入检校地点'"
              :disabled="pageType === 'detail'"
              :class="{ 'detail-input': pageType === 'detail' }"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="12">
          <el-form-item label="限用范围:" prop="xyfw">
            <el-input
              v-model="form.xyfw"
              type="textarea"
              autosize
              :placeholder="pageType === 'detail' ? '' : '请输入限用范围'"
              :disabled="pageType === 'detail'"
              :class="{ 'detail-input': pageType === 'detail' }"
            />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="12">
          <el-form-item label="检定结论:" prop="jdjl">
            <el-input
              v-model="form.jdjl"
              type="textarea"
              autosize
              :placeholder="pageType === 'detail' ? '' : '请输入检定结论'"
              :disabled="pageType === 'detail'"
              :class="{ 'detail-input': pageType === 'detail' }"
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </detail-block>
  <detail-block title="">
    <el-form
      ref="ruleFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
      :rules="rules"
    >
      <el-row :gutter="24" class="marg">
        <el-col :span="6">
          <el-form-item label="委托方" prop="customerName">
            <el-input
              v-model="form.customerName"
              placeholder=" "
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="委托方地址:">
            <el-input
              v-model="form.customerAddress"
              type="textarea"
              autosize
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="是否加急:" prop="isUrgent">
            <el-select v-model="form.isUrgent" placeholder=" " disabled class="full-width-input">
              <el-option
                v-for="i in isUrgentList"
                :key="i.value"
                :label="i.name"
                :value="i.value"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="送检人:" prop="deliverer">
            <el-input
              v-model="form.deliverer"
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="电话" prop="phone">
            <el-input
              v-model="form.phone"
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="预计送达时间:" prop="planDeliverTime">
            <el-date-picker
              v-model="form.planDeliverTime"
              type="datetime"
              class="full-width-input"
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
              format="YYYY-MM-DD HH:mm:ss"
              value-format="YYYY-MM-DD HH:mm:ss"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="要求检完时间:" prop="requireOverTime">
            <el-date-picker
              v-model="form.requireOverTime"
              type="datetime"
              class="full-width-input"
              :class="{ 'detail-input': pageType === 'detail' }"
              disabled
              format="YYYY-MM-DD HH:mm:ss"
              value-format="YYYY-MM-DD HH:mm:ss"
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </detail-block>

  <detail-block title="被检件信息">
    <el-table
      :data="equipmentList"
      border
      style="width: 100%;"
    >
      <el-table-column align="center" label="序号" width="80" type="index" />
      <el-table-column
        v-for="item in equipmentColumns"
        :key="item.value"
        :prop="item.value"
        :label="item.text"
        :width="item.width"
        align="center"
      >
        <template #header>
          <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span>
        </template>
        <template
          v-if="item.value === 'equipmentNo' && pageType !== 'detail'"
          #default="scope"
        >
          <el-input
            v-model="scope.row[item.value]"
            :placeholder="`${item.text}`"
            class="input"
            disabled
          >
            <template #append>
              <el-button
                v-if="pageType !== 'detail'"
                size="small"
                @click="selectEquipment(scope.$index)"
              >
                选择
              </el-button>
              <span v-else>{{ scope.row[item.value] }}</span>
            </template>
          </el-input>
        </template>
      </el-table-column>
    </el-table>
  </detail-block>
  <detail-block title="所使用的标准、主要测量设备">
    <template v-if="pageType !== 'detail'" #btns>
      <el-button type="primary" @click="addUsedEquipmentRow">
        增加行
      </el-button>
      <el-button type="info" @click="delUsedEquipmentRow">
        删除行
      </el-button>
    </template>
    <el-table
      :data="usedEquipmentList"
      border
      style="width: 100%;"
      max-height="600"
      @selection-change="handleSelectionUsedEquipmentChange"
    >
      <el-table-column type="selection" width="38" />
      <el-table-column align="center" label="序号" width="80" type="index" />
      <el-table-column
        v-for="item in usedEquipmentColumns"
        :key="item.value"
        :prop="item.value"
        :label="item.text"
        :width="item.width"
        align="center"
      >
        <template #header>
          <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span>
        </template>
        <template #default="scope">
          <el-input
            v-if="pageType !== 'detail' && item.value === 'equipmentNo'"
            v-model="scope.row[item.value]"
            placeholder="请选择"
            :disabled="item.disabled"
          >
            <template v-if="pageType !== 'detail'" #append>
              <el-button size="small" @click="selectUsedEquipment(scope.$index)">
                选择
              </el-button>
            </template>
          </el-input>
          <span v-else>{{ scope.row[item.value] }}</span>
        </template>
      </el-table-column>
    </el-table>
  </detail-block>
  <!-- 主附件信息 -->
  <detail-block title="检定结果信息">
    <template v-if="pageType !== 'detail'" #btns>
      <el-button type="primary" @click="addMesureResultRow">
        增加行
      </el-button>
      <el-button type="info" @click="deleteMesureResultRow">
        删除行
      </el-button>
    </template>
    <el-table
      ref="mesureResultRef"
      :data="mesureResultList"
      border
      style="width: 100%;"
      @selection-change="handleSelectionMesureResultChange"
      @row-dblclick="rowDblclick"
    >
      <el-table-column type="selection" width="38" />
      <el-table-column align="center" label="序号" width="80" type="index" />
      <el-table-column
        v-for="item in mesureResultColumns"
        :key="item.value"
        :prop="item.value"
        :label="item.text"
        :width="item.width"
        align="center"
      >
        <template #header>
          <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span>
        </template>
        <template #default="scope">
          <span v-if="!scope.row.editable">{{ scope.row[item.value] }}</span>
          <el-input-number v-if="scope.row.editable && item.value === 'cs'" v-model="scope.row[item.value]" :precision="0" :min="0" :step="1" :placeholder="`${item.text}`" />
          <el-input v-if="scope.row.editable && item.value !== 'cs'" v-model="scope.row[item.value]" :autofocus="true" :placeholder="`${item.text}`" class="input" />
        </template>
      </el-table-column>
    </el-table>
  </detail-block>
  <!-- 原始记录和证书报告部分 -->
  <detail-block title="">
    <el-form
      ref="ruleFormRef"
      :model="form"
      :label-width="120"
      label-position="right"
      :rules="rules"
    >
      <el-row :gutter="24" class="marg">
        <el-col :span="6">
          <el-form-item label="原始记录名称:" prop="originalRecordName">
            <el-input
              v-model="form.originalRecordName"
              type="textarea"
              autosize
              :placeholder="pageType === 'detail' ? '' : '请输入原始记录名称'"
              :disabled="pageType === 'detail'"
              :class="{ 'detail-input': pageType === 'detail' }"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="原始记录模板:" prop="ysjltemplateId">
            <el-input
              v-model.trim="form.ysjltemplateId"
              :placeholder="pageType === 'detail' ? ' ' : '请选择原始记录模板'"
              disabled
              class="full-width-input"
              clearable
            >
              <template v-if="pageType !== 'detail'" #append>
                <el-button
                  size="small"
                  @click="selectOriginalRecord"
                >
                  选择
                </el-button>
              </template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="原始记录附件:">
            <show-photo v-if="form.ysjlfj" :minio-file-name="form.ysjlfj" />
            <span v-else-if="pageType === 'detail'">无</span>
            <input v-show="pageType === ''" ref="originalRecordFileRef" type="file" @change="onFileOriginalRecordChange">
            <el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.ysjlfj === '' ? '0px' : '20px' }" @click="originalRecordUpload">
              {{ form.ysjlfj === '' ? '上传' : '更换附件' }}
            </el-button>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24" class="marg">
        <el-col :span="6">
          <el-form-item label="证书报告名称:" prop="certificateReportName">
            <el-input
              v-model="form.certificateReportName"
              type="textarea"
              autosize
              :placeholder="pageType === 'detail' ? '' : '请输入证书报告名称'"
              :disabled="pageType === 'detail'"
              :class="{ 'detail-input': pageType === 'detail' }"
            />
          </el-form-item>
        </el-col>
        <el-col :span="6">
          <el-form-item label="证书报告模板:" prop="zsbgtemplateId">
            <el-input
              v-model.trim="form.zsbgtemplateId"
              :placeholder="pageType === 'detail' ? ' ' : '请选择原始记录模板'"
              disabled
              class="full-width-input"
              clearable
            >
              <template v-if="pageType !== 'detail'" #append>
                <el-button
                  size="small"
                  @click="selectCertificateReport"
                >
                  选择
                </el-button>
              </template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="证书报告附件:">
            <show-photo v-if="form.zsbgfj" :minio-file-name="form.zsbgfj" />
            <span v-else-if="pageType === 'detail'">无</span>
            <input v-show="pageType === ''" ref="certificateReportFileRef" type="file" @change="onFileCertificateReportChange">
            <el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.zsbgfj === '' ? '0px' : '20px' }" @click="certificateReportUpload">
              {{ form.zsbgfj === '' ? '上传' : '更换附件' }}
            </el-button>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>

    <el-button v-if="pageType !== 'detail'" type="primary" style="margin: 0 0 20px 20px;" @click="createForm">
      生成表单
    </el-button>
  </detail-block>
  <!-- 选择设备组件 -->
  <select-used-equipment-dialog ref="selectUsedEquipmentRef" @confirm="clickConfirmUsedEquipment" />
</template>