Newer
Older
xc-business-system / src / views / equipement / standard / book / detail.vue
<!-- 标准装置台账信息详情 -->
<script name="StandardBookInfoDetail" lang="ts" setup>
import { ElMessage, ElMessageBox } from 'element-plus'
import bookBasic from './components/basic.vue'
import bookStandard from './components/standard.vue'
import bookPerson from './components/person.vue'
import bookProject from './components/project.vue'
import bookGrade from './components/grade.vue'
import bookCertificate from './components/certificate.vue'
import bookCheckRecord from './components/checkRecord.vue'
import bookChangeRecord from './components/changeRecord.vue'
import bookJobInstruction from './components/jobInstruction.vue'
import { approvalDelete, cancelApproval, refuseApproval } from '@/api/equipment/standard/book'
import ApprovalDialog from '@/components/Approval/ApprovalDialog.vue'

const textMap: { [key: string]: string } = {
  edit: '编辑',
  add: '新建',
  detail: '详情',
}// 页面类型字典
const $router = useRouter() // 路由实例
const loading = ref(false) // 表单加载状态
const pageType = ref('add') // 页面类型: add, edit, detail
const infoId = ref('') // id
const bookBasicRef = ref() // 子组件--基本信息ref
const approvalStatusName = ref('') // 审批状态名称
const showRefuseEditButton = ref(true) // 是否展示未通过编辑按钮
const standardNo = ref('') // 标准装置编号
const standardName = ref('') // 标准装置名称
const showSubmitButton = ref(false) // 控制提交按钮是否显示
// -------------------------------------标签--------------------------------------------------
const radioMenus = ref([ // 标签内容
  { name: '基本信息', value: 'book-basic' },
  { name: '标准配套设备', value: 'book-standard' },
  { name: '计量人员', value: 'book-person' },
  { name: '开展的检定或校准项目', value: 'book-project' },
  // { name: '量值溯源与传递等级', value: 'book-grade' },
  { name: '标准证书', value: 'book-certificate' },
  // { name: '核查记录', value: 'book-check-record' },
  { name: '技术指标修改记录', value: 'book-change-record' },
  { name: '作业指导书', value: 'book-job-instruction' },
  { name: '审批记录', value: 'book-approval-record' },
])
const current = ref('book-basic') // 选择的tab 默认基本信息
const bookPersonRef = ref() // 计量人员组件ref
const bookJobInstructionRef = ref() // 作业指导书组件ref
const bookStandardRef = ref() // 标准配套设备组件ref
const bookStandardCertificateRef = ref() // 标准证书组件ref
// -----------------------------------路由参数-------------------------------------------------
// 从路由中获取页面类型参数
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
  }
}
// ---------------------------------------------审批--------------------------------------
const taskId = ref('') // 任务id,用于同意、驳回、拒绝审批
const processId = ref('') // 流程实例id
const approvalDialog = ref() // 审批组件ref
const showApprovalButton = ref(true) // 是否展示审批按钮

// 审批结束回调
const approvalSuccess = () => {
  showApprovalButton.value = false
}
// 审批
const handleApprove = (val: string) => {
  if (val === '取消') {
    const params = {
      processInstanceId: processId.value!,
      comments: '',
      id: infoId.value,
    }
    ElMessageBox.confirm(
      '确认取消该审批吗?',
      '提示',
      {
        confirmButtonText: '确认',
        cancelButtonText: '取消',
        type: 'warning',
      },
    )
      .then(() => {
        cancelApproval(params).then((res) => {
          ElMessage({
            type: 'success',
            message: '已取消',
          })
          showApprovalButton.value = false
        })
      })
  }
  else if (val === '同意') {
    approvalDialog.value.initDialog('agree', taskId.value)
  }
  else if (val === '拒绝') {
    approvalDialog.value.initDialog('refuse', taskId.value, infoId.value)
  }
}

// 拒绝
const refuse = (comments: string, taskId: string, id: string) => {
  const params = {
    id,
    taskId, // 任务id
    comments, // 拒绝原因
  }
  refuseApproval(params).then((res) => {
    ElMessage({
      type: 'success',
      message: '已拒绝',
    })
    showApprovalButton.value = false
  })
}
// ---------------------------------右上角按钮(操作表单)------------------------------------------
// 点击关闭
const close = () => {
  $router.back()
}
// 点击rfid标签绑定
const bind = () => {
  ElMessage.info('敬请期待')
}
// 点击提交
const handleSubmit = () => {
  if (!showSubmitButton.value) {
    ElMessage.warning('请先保存')
    return false
  }
  bookBasicRef.value.submitForm()
}
// 提交成功
const submitSuccess = (standardNoParam: string, id: string, standardNameParam?: string) => {
  pageType.value = 'detail' // 详情模式-不可编辑
  infoId.value = id // id
  standardName.value = standardNameParam! // 标准装置名称
  standardNo.value = standardNoParam // 设备编号
  showRefuseEditButton.value = false // 隐藏未通过编辑按钮
}
// 点击保存
const saveForm = () => {
  switch (current.value) {
    case 'book-basic': // 基本信息
      bookBasicRef.value.saveForm()
      break
    case 'book-person': // 计量人员
      bookPersonRef.value.savePerson()
      break
    case 'book-standard': // 标准配套设备
      bookStandardRef.value.saveEquipment()
      break
    case 'book-certificate': // 标准证书
      bookStandardCertificateRef.value.saveStandardCert()
      break
    case 'book-job-instruction': // 作业指导书
      bookJobInstructionRef.value.saveJobInstruction()
      break
  }
}
// 新建保存成功
const addSuccess = (standardNoParam: string, id: string, standardNameParam?: string) => {
  approvalStatusName.value = '草稿箱'
  standardNo.value = standardNoParam// 设备编号
  infoId.value = id // id
  standardName.value = standardNameParam! // 标准装置名称
  showSubmitButton.value = true // 保存成功显示提交按钮
}

// 保存成功
const saveSuccess = () => {
  showSubmitButton.value = true // 保存成功显示提交按钮
}
// 点击编辑
const handleEdit = () => {
  pageType.value = 'edit' // 编辑模式
}

// 点击删除
const del = () => {
  approvalDelete({ id: infoId.value, taskId: taskId.value }).then(() => {
    ElMessage.success('已删除')
    close()
  })
}
const approvalType = ref('1') // 审批类型
const tabDisabled = ref(false) // 禁止radio tab
// 获取审批类型
const giveApprovalType = (approvalTypeParam: string) => {
  if (approvalType) {
    approvalType.value = `${approvalTypeParam}`
    if (`${approvalTypeParam}` === '2') {
      // radioMenus.value = [ // 标签内容
      //   { name: '基本信息', value: 'book-basic' },
      // ]
      tabDisabled.value = true
    }
    else if (approvalStatusName.value === '全部' || approvalStatusName.value === '草稿箱' || pageType.value === 'add') {
      tabDisabled.value = false
      radioMenus.value = [ // 标签内容
        { name: '基本信息', value: 'book-basic' },
        { name: '标准配套设备', value: 'book-standard' },
        { name: '计量人员', value: 'book-person' },
        { name: '开展的检定或校准项目', value: 'book-project' },
        // { name: '量值溯源与传递等级', value: 'book-grade' },
        { name: '标准证书', value: 'book-certificate' },
        // { name: '核查记录', value: 'book-check-record' },
        { name: '技术指标修改记录', value: 'book-change-record' },
        { name: '作业指导书', value: 'book-job-instruction' },
      ]
    }
    else {
      radioMenus.value = [ // 标签内容
        { name: '基本信息', value: 'book-basic' },
        { name: '标准配套设备', value: 'book-standard' },
        { name: '计量人员', value: 'book-person' },
        { name: '开展的检定或校准项目', value: 'book-project' },
        // { name: '量值溯源与传递等级', value: 'book-grade' },
        { name: '标准证书', value: 'book-certificate' },
        // { name: '核查记录', value: 'book-check-record' },
        { name: '技术指标修改记录', value: 'book-change-record' },
        { name: '作业指导书', value: 'book-job-instruction' },
        { name: '审批记录', value: 'book-approval-record' },
      ]
    }
  }
}

// -----------------------------------------钩子--------------------------------------------------
watch(() => approvalStatusName.value, (val) => {
  if (val === '全部' || val === '草稿箱' || pageType.value === 'add') { // 全部草稿箱把审批详情删了
    if (radioMenus.value[radioMenus.value.length - 1].value === 'book-approval-record') {
      radioMenus.value.pop()
    }
    console.log(radioMenus.value)
  }
  else { // 非全部和草稿箱把审批详情加上
    if (radioMenus.value[radioMenus.value.length - 1].value !== 'book-approval-record') {
      radioMenus.value.push({ name: '审批详情', value: 'book-approval-record' })
    }
  }
})
onMounted(() => {
  approvalStatusName.value = $route.query.approvalStatusName as string // 审批状态名称
  standardNo.value = $route.query.standardNo as string // 标准装置编号
  standardName.value = $route.query.standardName as string // 标准装置名称
  taskId.value = $route.query.taskId as string // 任务id
  processId.value = $route.query.processId as string // 流程实例id
  console.log('ppp', approvalStatusName.value)
})

onBeforeUnmount(() => {
  window.sessionStorage.setItem('standardGetInfoForm', '')
})
</script>

<template>
  <app-container>
    <detail-page v-loading="loading" :title="`标准装置台账信息(${textMap[pageType]})`">
      <template #btns>
        <el-button v-if="pageType === 'detail' && approvalStatusName === '待审批' && showApprovalButton" type="primary" @click="handleApprove('同意')">
          同意
        </el-button>
        <el-button v-if="pageType === 'detail' && approvalStatusName === '待审批' && showApprovalButton" type="danger" @click="handleApprove('拒绝')">
          拒绝
        </el-button>
        <el-button v-if="pageType === 'detail' && approvalStatusName === '审批中' && showApprovalButton" type="info" @click="handleApprove('取消')">
          取消
        </el-button>
        <el-button
          v-if="current === 'book-basic' && (pageType === 'add' || (pageType === 'edit' && approvalStatusName !== '未通过' && approvalStatusName !== '已取消'))"
          type="primary"
          :disabled="!infoId"
          @click="handleSubmit"
        >
          提交
        </el-button>
        <el-button v-if="approvalStatusName !== '已审批' && pageType === 'detail' && approvalStatusName === '未通过' && showRefuseEditButton" type="primary" @click="handleEdit">
          编辑
        </el-button>
        <el-button v-if="pageType !== 'detail'" type="primary" @click="saveForm">
          保存
        </el-button>
        <el-button v-if="approvalStatusName === '已取消'" type="danger" @click="del">
          删除
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
      <el-radio-group v-model="current">
        <el-radio-button v-for="item in radioMenus" :key="item.value" :label="item.value" :disabled="!infoId || tabDisabled">
          {{ item.name }}
        </el-radio-button>
      </el-radio-group>
      <!-- <el-tabs v-model="current" type="card" @tab-change="clickTab">
        <el-tab-pane v-for="item in tabMenus" :key="item.value" :label="item.name" :name="item.value" />
      </el-tabs> -->
    </detail-page>
    <!-- 基本信息 -->
    <book-basic
      v-if="current === 'book-basic'"
      :id="infoId" ref="bookBasicRef"
      :page-type="pageType"
      :approval-status-name="approvalStatusName"
      @submit-success="submitSuccess"
      @add-success="addSuccess"
      @save-success="saveSuccess"
      @giveApprovalType="giveApprovalType"
    />
    <!-- 标准配套设备 -->
    <book-standard v-if="current === 'book-standard'" ref="bookStandardRef" :approval-status-name="approvalStatusName" :standard-name="standardName" :standard-id="infoId" :page-type="pageType" />
    <!-- 计量人员 -->
    <book-person v-if="current === 'book-person'" ref="bookPersonRef" :standard-id="infoId" :page-type="pageType" />
    <!-- 开展的检定或校准项目 -->
    <book-project v-if="current === 'book-project'" :page-type="pageType" />
    <!-- 量值溯源与传递等级 -->
    <book-grade v-if="current === 'book-grade'" :page-type="pageType" />
    <!-- 标准证书 -->
    <book-certificate v-if="current === 'book-certificate'" ref="bookStandardCertificateRef" :page-type="pageType" :standard-id="infoId" />
    <!-- 核查记录 -->
    <!-- <book-check-record v-if="current === 'book-check-record'" :page-type="pageType" /> -->
    <!-- 技术指标修改记录 -->
    <book-change-record v-if="current === 'book-change-record'" :standard-id="infoId" :page-type="pageType" />
    <!-- 审批详情 -->
    <approval-record-table v-if="current === 'book-approval-record'" :process-id="processId" />
    <!-- 作业指导书 -->
    <book-job-instruction v-if="current === 'book-job-instruction'" ref="bookJobInstructionRef" :standard-id="infoId" :page-type="pageType" />
    <!-- 审批弹窗 -->
    <approval-dialog ref="approvalDialog" @on-success="approvalSuccess" @refuse="refuse" />
  </app-container>
</template>