Newer
Older
xc-business-system / src / views / business / taskMeasure / measureData / dialog / saveMeasureCertificateDialog.vue
<!-- 保存到检定审批管理草稿箱 -->
<script lang="ts" setup name="saveMeasureApprovalDialog">
import type { FormInstance, FormRules } from 'element-plus'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import { reactive, ref } from 'vue'
import { getDictByCode } from '@/api/system/dict'
import type { dictType } from '@/global'
import { addCertificate } from '@/api/business/taskMeasure/certificate'
import useUserStore from '@/store/modules/user'
// 用户信息
const emit = defineEmits(['backSuccess']); const user = useUserStore() // 退回成功方法
const dialogVisible = ref(false) // 弹窗显示状态
const form = ref({ // 默认表单
  labCode: '', // 实验室
  groupCode: '', // 部门
  certificateName: '', // 检定审批报告名称
})
const btnLoading = ref(false) // 保存按钮加载状态
const saveParams = ref() as any // 检定数据参数
const $router = useRouter()
const dialogLoading = ref(false) // 弹窗loading
// -----------------------------------------字典--------------------------------------------------------------
const labCodeList = ref<dictType[]>([]) // 实验室
const groupCodeList = ref<dictType[]>([]) // 部门
async function getDict() {
  // 实验室
  const res = await getDictByCode('bizLabCode')
  labCodeList.value = res.data
  // 部门
  const response = await getDictByCode('bizGroupCode')
  groupCodeList.value = response.data
}
// ---------------------------------表单提交---------------------------------------------
const dataFormRef = ref<FormInstance>() // 表单对象
const rules = reactive<FormRules>({ // 校验规则
  labCode: [{ required: true, message: '实验室不能为空', trigger: ['blur', 'change'] }],
  groupCode: [{ required: true, message: '部门不能为空', trigger: ['blur', 'change'] }],
  certificateName: [{ required: true, message: '检定审批报告名称不能为空', trigger: ['blur', 'change'] }],
})

// 提交表单
function submitForm(formEl: FormInstance | undefined) {
  if (!formEl) { return }
  formEl.validate((valid) => {
    if (valid) {
      const loading = ElLoading.service({
        lock: true,
        background: 'rgba(255, 255, 255, 0.8)',
      })
      dialogLoading.value = true
      btnLoading.value = true
      const params = {
        ...saveParams.value,
        ...form.value,
        dataId: saveParams.value.dataId, // 检定数据管理基础信息表id
        id: '',
      }
      addCertificate(params).then((res) => {
        ElMessage.success('保存成功')
        dialogVisible.value = false
        $router.push({
          path: `/businessCertificate/detail/${res.data.id}`,
          query: {
            certNo: res.data.certNo, // 检定证书报告
            sampleName: saveParams.value.sampleName, // 被检设备名称
            model: saveParams.value.sampleModel, // 被检设备名称
            manufacturingNo: saveParams.value.manufactureNo, // 被检设备名称
            approvalStatusName: '草稿箱',
            measureDataId: saveParams.value.dataId,
          },
        })
        loading.close()
        btnLoading.value = false
        dialogLoading.value = false
      }).catch(() => {
        loading.close()
        btnLoading.value = false
        dialogLoading.value = false
      })
    }
  })
}

// ------------------------------------------弹窗操作------------------------------------
/**
 * 初始化审批弹窗
 * @param id 委托书id
 */
function initDialog(value: any) {
  saveParams.value = value
  // dataFormRef.value!.clearValidate()
  dialogVisible.value = true
  getDict()
}

// 关闭弹窗
function handleClose() {
  dialogVisible.value = false
}
// ------------------------------------- 以下是暴露的方法内容 ------------------------------
defineExpose({ initDialog })
</script>

<template>
  <el-dialog
    v-model="dialogVisible"
    title="生成原始记录和检定证书"
    width="600"
    :modal="true"
    :close-on-click-modal="false"
    :before-close="handleClose"
  >
    <el-form
      ref="dataFormRef"
      v-loading="dialogLoading"
      label-position="top"
      label-width="80px"
      :model="form"
      :rules="rules"
    >
      <el-form-item label="实验室" prop="labCode">
        <el-select v-model="form.labCode" placeholder="请选择实验室" class="full-width-input">
          <el-option v-for="item in labCodeList" :key="item.id" :label="item.name" :value="item.value" />
        </el-select>
      </el-form-item>

      <el-form-item label="部门" prop="groupCode">
        <el-select v-model="form.groupCode" placeholder="请选择部门" class="full-width-input">
          <el-option v-for="item in groupCodeList" :key="item.id" :label="item.name" :value="item.value" />
        </el-select>
      </el-form-item>
      <el-form-item label="检定审批报告名称:" prop="certificateName">
        <el-input v-model="form.certificateName" placeholder="检定审批报告名称" />
      </el-form-item>
    </el-form>
    <template #footer>
      <el-button type="primary" :loading="btnLoading" @click="submitForm(dataFormRef)">
        提交
      </el-button>
      <el-button type="info" :disabled="btnLoading" @click="handleClose">
        取消
      </el-button>
    </template>
  </el-dialog>
</template>

<style lang="scss" scoped>
// 样式
</style>