approval.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <Dialog
  3. v-model="dialogVisible"
  4. title="是否审批通过"
  5. width="800"
  6. >
  7. <el-form
  8. :action="approvalUrl + '?updateSupport=' + updateSupport">
  9. <el-form-item>
  10. <el-radio-group v-model="approvalStatus">
  11. <el-radio :label="1">通过</el-radio>
  12. <el-radio :label="2">驳回</el-radio>
  13. </el-radio-group>
  14. </el-form-item>
  15. <el-form-item v-if="approvalStatus === 2">
  16. <el-input
  17. v-model="chkRemarks"
  18. style="width:800px ;height: 200px"
  19. placeholder="请输入驳回原因"
  20. />
  21. </el-form-item>
  22. </el-form>
  23. <div>
  24. <el-button :disabled="formLoading" type="primary" @click="submitApproval">确定</el-button>
  25. <el-button type="danger" @click="dialogVisible = false">取消</el-button>
  26. </div>
  27. </Dialog>
  28. </template>
  29. <script setup lang="ts">
  30. import { getAccessToken, getTenantId } from '@/utils/auth'
  31. import { ref } from 'vue'
  32. const approvalUrl =
  33. import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/museums/specimen-outbound/reject'
  34. const {t} = useI18n() // 国际化
  35. const approvalStatus = ref(0);
  36. const uploadRef = ref()
  37. const formLoading = ref(false) // 表单的加载中
  38. const dialogVisible = ref(false) // 弹窗的是否展示
  39. const dialogTitle = ref('') // 弹窗的标题
  40. const chkRemarks = ref('')
  41. const message = useMessage() // 消息弹窗
  42. const processInstanceId = ref([]) // 文件列表
  43. const uploadHeaders = ref() // 上传 Header 头
  44. const updateSupport = ref(0) // 是否更新已经存在的用户数据
  45. /** 打开弹窗 */
  46. const open = async (type: string, ) => {
  47. dialogVisible.value = true
  48. formLoading.value = true
  49. approvalStatus.value = 0
  50. dialogVisible.value = true
  51. updateSupport.value = 0
  52. dialogTitle.value = t('action.' + type)
  53. processInstanceId.value = []
  54. resetForm()
  55. }
  56. defineExpose({ open })// 提供 open 方法,用于打开弹窗
  57. /** 提交审批 */
  58. const submitApproval = async () => {
  59. if (approvalStatus.value === 2 && !chkRemarks.value.trim()) {
  60. message.error('请输入驳回原因')
  61. formLoading.value = false
  62. return
  63. }
  64. // 提交请求
  65. uploadHeaders.value = {
  66. Authorization: 'Bearer ' + getAccessToken(),
  67. 'tenant-id': getTenantId()
  68. }
  69. formLoading.value = true
  70. try {
  71. // 这里应该添加实际的请求发送代码,例如使用 axios 或其他 HTTP 库
  72. // await axios.post(approvalUrl, { approvalStatus, chkRemarks, updateSupport }, { headers })
  73. console.log('提交审批请求...')
  74. dialogVisible.value = false;
  75. } catch (error) {
  76. message.error('审批提交失败')
  77. } finally {
  78. formLoading.value = false
  79. }
  80. }
  81. /** 重置表单 */
  82. const resetForm = async (): Promise<void> => {
  83. // 重置上传状态和文件
  84. formLoading.value = false
  85. await nextTick()
  86. uploadRef.value?.clearFiles()
  87. }
  88. </script>