Newer
Older
xc-business-system / src / views / equipement / standard / book / components / config / fifth / config.vue
dutingting on 15 Jan 2024 16 KB 二等铂检定数据联调完成
<!-- 标准装置台账信息详情 配置核查项 第5套:二等铂电阻温度计标准装置 -->
<script name="StandardBookEquipmentConfig" lang="ts" setup>
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import type { IList } from './fifth-interface'
import TemplateTable from './templateTable.vue'
import type { dictType } from '@/global'
import { useCheckList } from '@/commonMethods/useCheckList'
import type { TableColumn } from '@/components/NormalTable/table_interface'
import { config, getCheckItemDetail } from '@/api/equipment/standard/book'
import { calc } from '@/utils/useCalc'
import { getDictByCode } from '@/api/system/dict'

const textMap: { [key: string]: string } = {
  edit: '编辑',
  detail: '详情',
}// 页面类型字典
const form = ref({ // 表单
  equipmentNo: '', // 统一编号
  equipmentName: '', // 设备名称
  model: '', // 型号规格
  manufactureNo: '', // 出厂编号
  measureRange: '', // 测量范围
  uncertainty: '', // 不确定度或允许误差极限或准确度等级
  itemCategoryName: '', // 核查项分类名称
  itemCategoryId: '', // 核查项分类id
  remark: '', // 核查项备注
  belongStandardEquipment: '', // 检校标准装置
  belongStandardEquipmentName: '', // 检校标准装置名称
})
const pageType = ref('detail') // 页面类型: add, edit, detail
const infoId = ref('') // id
const $router = useRouter() // 路由实例
const loading = ref(false) // loading
const equipmentId = ref('') // 设备id
// -----------------------------------路由参数------------------------------------------------------
// 从路由中获取页面类型参数
const $route = useRoute()
if ($route.params && $route.params.type) {
  pageType.value = $route.params.type as string
  if ($route.params.id) {
    infoId.value = $route.params.id as string
  }
  console.log('pageType.value', pageType.value)
}
// -------------------------------------------核查项-----------------------------------------------
const listTemperature = ref<IList[]>([]) // 温度值
const listRTP = ref<IList[]>([]) //  RTP值
const listInsulationResistance = ref<IList[]>([]) //  绝缘电阻表校准
const checkoutTemperatureList = ref<IList[]>([]) // 温度值选中数据
const checkoutRTPList = ref<IList[]>([]) // RTP值选中数据
const checkoutInsulationResistanceList = ref<IList[]>([]) // 绝缘电阻表校准选中数据
const temperature = ref(true) // 是否显示温度值
const RTP = ref(true) // 是否显示RTP值
const insulationResistance = ref(true) // 是否显示绝缘电阻表校准
const columns_temperature = ref<TableColumn[]>([ // 温度值表头
  { text: '核查项目', value: 'params', align: 'center', required: true },
  { text: '温度点', value: 'checkPoint', align: 'center', required: true },
  { text: '单位', value: 'unit', align: 'center', required: true },
  { text: '循环次数', value: 'cycleNumber', align: 'center', required: true },
  { text: '扩展不确定度U', value: 'urel', align: 'center', required: true },
  { text: '核查类型', value: 'checkType', align: 'center', required: true },
])

const columns_RTP = ref<TableColumn[]>([ // RTP值表头
  { text: '核查项目', value: 'params', align: 'center', required: true },
  { text: '水三相点', value: 'checkPoint', align: 'center', required: true },
  { text: '单位', value: 'unit', align: 'center', required: true },
  { text: '循环次数', value: 'cycleNumber', align: 'center', required: true },
  { text: '允许值', value: 'allowValue', align: 'center', required: true },
  { text: '核查类型', value: 'checkType', align: 'center', required: true },
])

const columns_insulation_resistance = ref<TableColumn[]>([ // 绝缘电阻表校准表头
  { text: '核查项目', value: 'params', align: 'center', required: true },
  { text: '确认点', value: 'checkPoint', align: 'center', required: true },
  { text: '单位', value: 'unit', align: 'center', required: true },
  { text: '最大允许误差', value: 'maximumError', align: 'center', required: true },
])

// 温度值多选
const handleSelectionTemperatureChange = (e: any) => {
  checkoutTemperatureList.value = e
}
// RTP值多选
const handleSelectionRTPChange = (e: any) => {
  checkoutRTPList.value = e
}
// 绝缘电阻表校准多选
const handleSelectionInsulationResistanceChange = (e: any) => {
  checkoutInsulationResistanceList.value = e
}

// 校验表格(点击保存的时候、增加行用)
const checkList = (list: any, title: string) => {
  let columns = []
  columns = title === '温度值' ? columns_temperature.value : title === 'RTP值' ? columns_RTP.value : columns_insulation_resistance.value
  return useCheckList(list, columns, title)
}

/**
 * 增加行公共方法
 * @param list 要操作的数组
 * @param title 操作的表格
 */
const addRow = (list: IList[], title: string) => {
  if (checkList(list, `${title}表格`)) {
    if (list.length) { // 增加行时默认上一行数据
      list.push({
        id: '',
        params: title, // 核查项目
        checkPoint: list[list.length - 1].checkPoint, //	核查点(直接存字典value)
        unit: list[list.length - 1].unit, //	单位(直接存字典value)
        cycleNumber: list[list.length - 1].cycleNumber, //	循环次数
        urel: list[list.length - 1].urel, //	测量标准相对扩展不确定度urel
        checkType: list[list.length - 1].checkType, //	核查类型
        equipmentId: list[list.length - 1].equipmentId, //	配套设备id
        itemCategoryId: list[list.length - 1].itemCategoryId, //	核查项分类id(能够确定是哪个标准装置)
        remark: list[list.length - 1].remark, //	核查项备注(每个数据存储的核查项备注相同,前端取列表中一个即可)
        maximumError: list[list.length - 1].maximumError, // 最大允许误差
        allowValue: list[list.length - 1].allowValue, // 允许值
      })
    }
    else {
      list.push({
        id: '',
        params: title, // 核查项目
        checkPoint: '', //	核查点(直接存字典value)
        unit: title === ' 绝缘电阻表校准' ? 'MΩ' : '℃', //	单位(直接存字典value)
        cycleNumber: 6, //	循环次数
        urel: 0, //	测量标准相对扩展不确定度urel
        checkType: ['重复性', '稳定性'], //	核查类型
        equipmentId: infoId.value, //	配套设备id
        itemCategoryId: form.value.itemCategoryId, //	核查项分类id(能够确定是哪个标准装置)
        remark: '', //	核查项备注(每个数据存储的核查项备注相同,前端取列表中一个即可)
        maximumError: '', // 最大允许误差
        allowValue: '', // 允许值
      })
    }
  }
}
/**
 * 删除行公共方法
 * @param checkoutList 选中的数组
 * @param list 操作的数组
 */
const delRow = (checkoutList: IList[], list: IList[]) => {
  if (!checkoutList.length) {
    ElMessage.warning('请选中要删除的行')
  }
  else {
    list = list.filter((item: any) => {
      return !checkoutList.includes(item)
    })
  }
}

// ---------------------------------------按钮-----------------------------------------------------
// 点击关闭
const close = () => {
  $router.back()
}
// 清空配置
const clear = () => {
  ElMessageBox.confirm(
    '确认清空配置项吗?',
    '提示',
    {
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'warning',
    },
  )
    .then(() => {
      listTemperature.value = []// 温度值
      listRTP.value = []//  RTP值
      listInsulationResistance.value = [] //  绝缘电阻表校准
    })
}

// 点击保存
const save = () => {
  // if (!list.value.length) { ElMessage.warning('核查项不能为空'); return false }
  // if (!checkList(list.value, '核查项表格')) { return false }
  // const params = {
  //   itemCategoryId: form.value.itemCategoryId, // 核查项分类id
  //   checkItemDataPistonGaugeList: list.value,
  // }
  // const loading = ElLoading.service({
  //   lock: true,
  //   text: '加载中',
  //   background: 'rgba(255, 255, 255, 0.6)',
  // })
  // config(params).then((res) => {
  //   ElMessage.success('已保存')
  //   pageType.value = 'detail'
  //   loading.close()
  // })
}

// 获取详情
const getInfo = () => {
  // const loading = ElLoading.service({
  //   lock: true,
  //   text: '加载中',
  //   background: 'rgba(255, 255, 255, 0.6)',
  // })
  const params = {
    equipmentId: equipmentId.value, // 设备id
    belongStandardEquipment: form.value.belongStandardEquipment, // 检校标准装置code
    itemCategoryId: form.value.itemCategoryId, // 核查项分类id
    itemCategoryName: form.value.itemCategoryName, // 核查项分类名称
  }
  // getCheckItemDetail(params).then((res) => {
  //   list.value = res.data.checkItemDataPistonGaugeList.map((item: any) => {
  //     return {
  //       ...item,
  //       resolution: Number(item.resolution),
  //     }
  //   })
  //   loading.close()
  // })
}

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

onMounted(() => {
  form.value.equipmentNo = $route.query.equipmentNo as string // 统一编号
  form.value.equipmentName = $route.query.equipmentName as string // 设备名称
  form.value.model = $route.query.model as string // 型号规格
  form.value.manufactureNo = $route.query.manufactureNo as string // 出厂编号
  form.value.measureRange = $route.query.measureRange as string // 测量范围
  form.value.uncertainty = $route.query.uncertainty as string // 不确定度或允许误差极限或准确度等级
  form.value.itemCategoryName = $route.query.itemCategoryName as string // 核查项分类名称
  form.value.itemCategoryId = $route.query.itemCategoryId as string // 核查项分类id
  form.value.belongStandardEquipment = $route.query.belongStandardEquipment as string // 核查项标准装置id
  form.value.belongStandardEquipmentName = $route.query.belongStandardEquipmentName as string // 核查项标准装置id
  equipmentId.value = $route.query.equipmentId as string // 设备id
  // getInfo()
})
</script>

<template>
  <app-container>
    <detail-page v-loading="loading" :title="`配置核查项(${textMap[pageType]})`">
      <template #btns>
        <el-button v-if="pageType === 'edit'" type="warning" @click="clear">
          清空配置
        </el-button>
        <el-button v-if="pageType === 'edit'" type="primary" @click="save">
          保存
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
      <el-form
        ref="ruleFormRef"
        :model="form"
        :label-width="130"
        label-position="right"
      >
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="统一编号:" prop="equipmentNo">
              <el-input
                v-model="form.equipmentNo"
                disabled
                :placeholder="pageType === 'detail' ? '' : '统一编号'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="设备名称:" prop="equipmentName">
              <el-input
                v-model="form.equipmentName"
                disabled
                :placeholder="pageType === 'detail' ? '' : '设备名称'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="型号规格:" prop="model">
              <el-input
                v-model="form.model"
                disabled
                :placeholder="pageType === 'detail' ? '' : '型号规格'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="出厂编号:" prop="manufactureNo">
              <el-input
                v-model="form.manufactureNo"
                disabled
                :placeholder="pageType === 'detail' ? '' : '出厂编号'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="测量范围:" prop="measureRange">
              <el-input
                v-model="form.measureRange"
                disabled
                type="textarea"
                autosize
                :placeholder="pageType === 'detail' ? '' : '测量范围'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label-width="260" label="不确定度或允许误差极限或准确度等级:" prop="uncertainty">
              <el-input
                v-model="form.uncertainty"
                type="textarea"
                autosize
                disabled
                :placeholder="pageType === 'detail' ? '' : '不确定度或允许误差极限或准确度等级'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="核查项分类名称:" prop="itemCategoryName">
              <el-input
                v-model="form.itemCategoryName"
                disabled
                :placeholder="pageType === 'detail' ? '' : '核查项分类名称'"
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-page>

    <!-- 频率 -->
    <detail-block title="" style="padding-bottom: 20px;">
      <div style="display: flex;justify-content: space-between;">
        <el-checkbox v-model="temperature" :disabled="pageType === 'detail'">
          温度值
        </el-checkbox>
        <div v-if="temperature && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
          <el-button type="primary" @click="addRow(listTemperature, '温度值')">
            增加行
          </el-button>
          <el-button type="info" @click="delRow(checkoutTemperatureList, listTemperature)">
            删除行
          </el-button>
        </div>
      </div>
      <template-table v-if="temperature" :data="listTemperature" :columns="columns_temperature" :page-type="pageType" @selection-change="handleSelectionTemperatureChange" />
    </detail-block>

    <!-- RTP值 -->
    <detail-block title="" style="padding-bottom: 20px;">
      <div style="display: flex;justify-content: space-between;">
        <el-checkbox v-model="RTP" :disabled="pageType === 'detail'">
          RTP值
        </el-checkbox>
        <div v-if="RTP && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
          <el-button type="primary" @click="addRow(listRTP, 'RTP值')">
            增加行
          </el-button>
          <el-button type="info" @click="delRow(checkoutRTPList, listRTP)">
            删除行
          </el-button>
        </div>
      </div>
      <template-table v-if="RTP" :data="listRTP" :columns="columns_RTP" :page-type="pageType" @selection-change="handleSelectionRTPChange" />
    </detail-block>

    <!-- 绝缘电阻表校准 -->
    <detail-block title="" style="padding-bottom: 20px;">
      <div style="display: flex;justify-content: space-between;">
        <el-checkbox v-model="insulationResistance" :disabled="pageType === 'detail'">
          绝缘电阻表校准
        </el-checkbox>
        <div v-if="insulationResistance && pageType !== 'detail'" style="padding: 0 10px;padding-bottom: 10px;">
          <el-button type="primary" @click="addRow(listInsulationResistance, '绝缘电阻表校准')">
            增加行
          </el-button>
          <el-button type="info" @click="delRow(checkoutInsulationResistanceList, listInsulationResistance)">
            删除行
          </el-button>
        </div>
      </div>
      <template-table v-if="insulationResistance" :data="listInsulationResistance" :columns="columns_insulation_resistance" :page-type="pageType" @selection-change="handleSelectionInsulationResistanceChange" />
    </detail-block>

    <!-- 核查项备注 -->
    <el-form
      :model="form"
      label-width="120"
      label-position="right"
      style="margin-top: 20px;"
    >
      <el-row>
        <el-col :span="12">
          <el-form-item label="核查项备注:" prop="remark">
            <el-input
              v-model="form.remark"
              class="full-width-input"
              autosize
              type="textarea"
              :disabled="pageType === 'detail'"
              :placeholder="pageType === 'detail' ? ' ' : '请输入核查项备注'"
            />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </app-container>
</template>