Newer
Older
xc-business-system / src / views / resource / customer / examine / saveAsTemplateDialog.vue
<!-- 存为模板弹窗对话框 -->
<script name="SaveAsTemplateDialog" lang="ts" setup>
import { ElMessage, ElMessageBox, dayjs } from 'element-plus'
import type { ICustomerExamineTemplate } from './customer-examine'
import type { IDictType } from '@/commonInterface/resource-interface'
import { duplicateTemplateJudge, saveTemplateInfo } from '@/api/resource/examine'

const showDialog = ref(false)

const labCodeDict = ref<IDictType[]>([])
const groupCodeDict = ref<IDictType[]>([])

const templateInfoRef = ref()

const templateInfo = ref<ICustomerExamineTemplate>({
  id: '',
  formNo: '',
  formName: '要求、委托书及合同评审表',
  labCode: '',
  labCodeName: '',
  groupCode: '',
  groupCodeName: '',
  customerId: '',
  customerName: '',
  signUserId: '',
  signStatus: '',
  signStatusName: '',
  customerContent: '',
  measureItem: '',
  otherRequire: '',
  equipmentName: '',
  performanceIndex: '',
  measureStatus: '合格',
  numberOfPeople: undefined,
  staffCert: undefined,
  measureMethodName: '',
  measureMethodType: '',
  measureMethodTypeName: '',
  measureMethodConfirm: undefined,
  measureMethodControlled: undefined,
  approvalStatus: '',
  approvalStatusName: '',
  appealUserId: '',
  appealUserName: '',
  processId: '',
  taskId: '',
  remark: '',
  decisionItem: '',
  createUserId: '',
  createUserName: '',
  createTime: '',
  templateName: '',
})

const templateRules = ref({
  templateName: [{ required: true, message: '模板名称不能为空,请选择', trigger: 'blur' }],
  labCode: [{ required: true, message: '实验室不能为空,请选择', trigger: ['change', 'blur'] }],
  groupCode: [{ required: true, message: '部门不能为空,请选择', trigger: ['change', 'blur'] }],
}) // 表单验证规则

const getLabCodeDict = async () => {
  if (sessionStorage.getItem('bizLabCode') !== null && sessionStorage.getItem('bizLabCode') !== undefined) {
    labCodeDict.value = JSON.parse(sessionStorage.getItem('bizLabCode')!)
  }
}

const getGroupCodeDict = async () => {
  if (sessionStorage.getItem('bizGroupCode') !== null && sessionStorage.getItem('bizGroupCode') !== undefined) {
    groupCodeDict.value = JSON.parse(sessionStorage.getItem('bizGroupCode')!)
  }
}

const showOrHideDialog = (show: boolean) => {
  if (show === true) {
    const examineInfo = JSON.parse(sessionStorage.getItem('examineInfo')!)

    templateInfo.value = {
      ...examineInfo,
      id: '',
      createTime: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'),
      templateName: examineInfo.equipmentName,
    }
  }
  else {
    sessionStorage.removeItem('examineInfo')
  }

  getLabCodeDict()
  getGroupCodeDict()
  showDialog.value = show
}

const saveTemplateHandler = async () => {
  templateInfoRef.value.validate((valid: boolean, fields: any) => {
    if (valid === true) {
      duplicateTemplateJudge({
        groupCode: templateInfo.value.groupCode,
        labCode: templateInfo.value.labCode,
        templateName: templateInfo.value.templateName,
      }).then((res) => {
        if (res.code === 200) {
          console.log(res)
          if (res.data === '') {
            // 返回内容为空表示没有同名模板
            saveTemplateInfo(templateInfo.value).then((saveRes) => {
              if (saveRes.code === 200) {
                ElMessage.success(`${templateInfo.value.templateName} 模板保存成功`)
                showDialog.value = false
              }
              else {
                ElMessage.error(`${templateInfo.value.templateName} 模板保存失败`)
              }
            })
          }
          else {
            ElMessageBox.confirm(
              '存在同名模板,是否覆盖?',
              '提示',
              {
                confirmButtonText: '确认',
                cancelButtonText: '取消',
                type: 'warning',
              },
            ).then(() => {
              templateInfo.value.id = res.data

              saveTemplateInfo(templateInfo.value).then((saveRes) => {
                if (saveRes.code === 200) {
                  ElMessage.success(`${templateInfo.value.templateName} 模板保存成功`)
                  showDialog.value = false
                }
                else {
                  ElMessage.error(`${templateInfo.value.templateName} 模板保存失败`)
                }
              })
            })
          }
        }
      })
    }
  })
}

defineExpose({
  showOrHideDialog,
})
</script>

<template>
  <el-dialog v-model="showDialog" title="存为模板" :append-to-body="true" :close-on-click-modal="false" top="10vh">
    <el-form ref="templateInfoRef" :model="templateInfo" :rules="templateRules" label-position="right" label-width="110px" border stripe>
      <el-row :gutter="24">
        <!-- 第一行 第一列 -->
        <el-col :span="18" :offset="3">
          <el-form-item label="模板名称" prop="templateName">
            <el-input v-model="templateInfo.templateName" />
          </el-form-item>
        </el-col>
      </el-row>

      <el-row :gutter="24">
        <!-- 第一行 第一列 -->
        <el-col :span="9" :offset="3">
          <el-form-item label="实验室" prop="labCode">
            <el-select v-model="templateInfo.labCode" placeholder="请选择实验室" style="width: 100%;">
              <el-option v-for="dict in labCodeDict" :key="dict.id" :label="dict.name" :value="dict.value" />
            </el-select>
            <el-input v-model="templateInfo.labCodeName" type="hidden" />
          </el-form-item>
        </el-col>

        <el-col :span="9">
          <el-form-item label="部门" prop="groupCode">
            <el-select v-model="templateInfo.groupCode" placeholder="请选择部门" style="width: 100%;">
              <el-option v-for="dict in groupCodeDict" :key="dict.id" :label="dict.name" :value="dict.value" />
            </el-select>
            <el-input v-model="templateInfo.groupCodeName" type="hidden" />
          </el-form-item>
        </el-col>
      </el-row>

      <el-row :gutter="24">
        <el-col :span="9" :offset="3">
          <el-form-item label="创建人">
            <el-input v-model="templateInfo.createUserName" :disabled="true" />
            <el-input v-model="templateInfo.createUserId" type="hidden" />
          </el-form-item>
        </el-col>

        <el-col :span="9">
          <el-form-item label="创建时间">
            <el-input v-model="templateInfo.createTime" :disabled="true" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>

    <template #footer>
      <span class="dialog-footer">
        <el-button type="primary" @click="saveTemplateHandler()">
          保存
        </el-button>
        <el-button @click="showOrHideDialog(false)">取消</el-button>
      </span>
    </template>
  </el-dialog>
</template>