Newer
Older
xc-business-system / src / views / business / manager / sendReceive / dialog / batchFinishDialog.vue
dutingting on 29 Nov 7 KB 临时提交
<!-- 批量检完并更新信息 -->
<script lang="ts" setup name="BatchFinishDialog">
import type { FormInstance, FormRules } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import { reactive, ref } from 'vue'
import dayjs from 'dayjs'
import { getDictByCode } from '@/api/system/dict'
import type { dictType } from '@/global'
import { batchTerminate } from '@/api/business/manager/sendReceive'
const emits = defineEmits(['onSuccess'])
// 弹窗显示状态
const dialogVisible = ref(false)
// 默认表单
const form = ref({
  checkOrganization: '中国西昌卫星发射中心计量测试站', // 检定校准机构
  traceDate: '', // 检定日期
  measureValidDate: '', // 检定有效期至
  conclusion: '', // 检定结论
  meterIdentify: '', // 计量标识
  restrictionInstruction: '', // 限用说明
  orderId: '', // 委托书id
  sampleId: '', // 样品id
})

const getList = ref([]) as any

// 保存按钮加载状态
const btnLoading = ref(false)
// -------------------------------------------字典---------------------------------------------+
const conclusionList = ref<dictType[]>([]) // 结论
const meterIdentifyDict = ref<dictType[]>([]) // 计量标识

// 获取字典值
async function getDict() {
  // 结论
  getDictByCode('bizConclusion').then((response) => {
    conclusionList.value = response.data
  })

  // 计量标识
  getDictByCode('eqptMeterIdentify').then((response) => {
    meterIdentifyDict.value = response.data
  })
}

// ---------------表单提交--------------------------------
// 表单对象
const dataFormRef = ref<FormInstance>()
// 校验规则
const rules = reactive<FormRules>({
  traceDate: [{ required: true, message: '检定日期不能为空', trigger: ['blur', 'change'] }],
  measureValidDate: [{ required: true, message: '检定有效期至不能为空', trigger: ['blur', 'change'] }],
  conclusion: [{ required: true, message: '检定结论不能为空', trigger: ['blur', 'change'] }],
  meterIdentify: [{ required: true, message: '计量标识不能为空', trigger: ['blur', 'change'] }],
  restrictionInstruction: [{ required: true, message: '限用说明不能为空', trigger: ['blur', 'change'] }],
})
/**
 * 初始化审批弹窗
 * @param orderId 委托书id
 * @param sampleId 样品id
 */
function initDialog(list: any) {
  if (list && list.length) {
    getList.value = list.map((item: any) => {
      return {
        orderId: item.orderId, // 委托书id
        sampleId: item.sampleId, // 样品id
      }
    })
  }
  // 检定日期默认今天
  form.value.traceDate = dayjs().format('YYYY-MM-DD')
  // 检定日期默认检定日期一年后
  form.value.measureValidDate = dayjs().add(1, 'y').format('YYYY-MM-DD')
  getDict()
  dialogVisible.value = true
}

// 检定日期变化事件
const changeTraceDate = (val: string) => {
  form.value.measureValidDate = dayjs(val).add(1, 'y').format('YYYY-MM-DD')
}

// 提交表单
function submitForm(formEl: FormInstance | undefined) {
  if (!formEl) { return }
  formEl.validate((valid) => {
    if (valid) {
      btnLoading.value = true
      const param = getList.value.map((item: any) => {
        return {
          ...item,
          checkOrganization: '中国西昌卫星发射中心计量测试站', // 检定校准机构
          traceDate: form.value.traceDate, // 检定日期
          measureValidDate: form.value.measureValidDate, // 检定有效期至
          conclusion: form.value.conclusion, // 检定结论
          meterIdentify: form.value.meterIdentify, // 计量标识
          restrictionInstruction: form.value.restrictionInstruction, // 限用说明
          status: '5', // 完成状态需要变为5
        }
      })
      batchTerminate(param).then((res) => {
        ElMessage.success('操作成功')
        btnLoading.value = false
        dialogVisible.value = false
        emits('onSuccess')
      }).catch((_) => {
        btnLoading.value = false
      })
    }
  })
}
// 关闭弹窗
function handleClose() {
  dataFormRef.value?.resetFields() // 清除填入的信息和校验
  dialogVisible.value = false
}

// 检定结论变化
const changeConclusion = (val: string) => {
  if (val === '所检项目合格') {
    form.value.meterIdentify = '合格'
  }
  else {
    form.value.meterIdentify = '停用'
  }
}

// ----------------------- 以下是暴露的方法内容 ----------------------------
defineExpose({ initDialog })
</script>

<template>
  <el-dialog
    v-model="dialogVisible"
    title="批量检完并更新智能模型信息"
    width="600"
    :before-close="handleClose"
  >
    <el-form
      ref="dataFormRef"
      label-position="top"
      label-width="80px"
      :model="form"
      :rules="rules"
    >
      <el-row :gutter="24">
        <el-col :span="24">
          <el-form-item label="检定(校准)机构:">
            <el-input v-model="form.checkOrganization" disabled />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="检定日期:" prop="traceDate">
            <el-date-picker
              v-model="form.traceDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              placeholder="请选择日期"
              class="full-width-input"
              @change="changeTraceDate"
            />
          </el-form-item>
        </el-col>

        <el-col :span="12">
          <el-form-item label="检定有效期至:" prop="measureValidDate">
            <el-date-picker
              v-model="form.measureValidDate"
              type="date"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              placeholder="请选择日期"
              class="full-width-input"
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="检定结论:" prop="conclusion">
            <el-select
              v-model="form.conclusion"
              placeholder="请选择检定结论"
              filterable
              class="full-width-input"
              @change="changeConclusion"
            >
              <el-option v-for="item in conclusionList" :key="item.id" :label="item.name" :value="item.name" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="计量标识:" prop="meterIdentify">
            <el-select
              v-model="form.meterIdentify"
              class="full-width-input"
              placeholder="计量标识"
            >
              <el-option v-for="item of meterIdentifyDict" :key="item.value" :label="item.name" :value="item.value" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col v-if="form.conclusion === '除*外其余所检项目合格'" :span="24">
          <el-form-item label="限用说明:" prop="restrictionInstruction">
            <el-input v-model="form.restrictionInstruction" type="textarea" autosize placeholder="请输入限用说明" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <template #footer>
      <el-button type="primary" :loading="btnLoading" @click="submitForm(dataFormRef)">
        提交
      </el-button>
      <el-button type="info" @click="handleClose">
        取消
      </el-button>
    </template>
  </el-dialog>
</template>

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