DrillSignApprovalDialog.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <BasicDialog ref="basicDialogRef" title="提交审批" @refresh="refreshFromData">
  3. <template #form>
  4. <el-form ref="formRef" :model="formData" label-width="auto">
  5. <el-form-item
  6. label="审批:"
  7. prop="approvalStatus"
  8. :rules="{ required: true, message: '请选择', trigger: 'change' }"
  9. >
  10. <el-radio-group v-model="formData.approvalStatus">
  11. <el-radio :value="2">通过</el-radio>
  12. <el-radio :value="3">退回</el-radio>
  13. </el-radio-group>
  14. </el-form-item>
  15. <el-form-item
  16. v-if="formData.approvalStatus === 3"
  17. label="退回原因:"
  18. prop="returnReason"
  19. :rules="{ required: true, message: '请选择', trigger: 'change' }"
  20. >
  21. <el-input v-model="formData.returnReason" placeholder="请输入退回原因" />
  22. </el-form-item>
  23. </el-form>
  24. </template>
  25. <template #footer>
  26. <el-button type="primary" @click="handleSumbit">提交</el-button>
  27. <el-button @click="closeDialog">取消</el-button>
  28. </template>
  29. </BasicDialog>
  30. </template>
  31. <script setup lang="ts">
  32. import { approveDrillRecord } from '@/api/emergency-drill/emergency-drill';
  33. import BasicDialog from '@/components/BasicDialog.vue';
  34. import { ElMessage } from 'element-plus';
  35. import { reactive, ref } from 'vue';
  36. const props = defineProps<{
  37. id: number;
  38. status: number;
  39. }>();
  40. const emits = defineEmits<{
  41. (e: 'success'): void;
  42. }>();
  43. const formRef = ref();
  44. const formData = reactive<{ approvalStatus: number | null; returnReason: string }>({
  45. approvalStatus: null,
  46. returnReason: '',
  47. });
  48. const basicDialogRef = ref<InstanceType<typeof BasicDialog>>();
  49. const openDialog = () => {
  50. basicDialogRef.value?.openDialog();
  51. };
  52. const closeDialog = () => {
  53. clearForm();
  54. basicDialogRef.value?.closeDialog();
  55. };
  56. function clearForm() {
  57. formData.approvalStatus = null;
  58. formData.returnReason = '';
  59. }
  60. const refreshFromData = () => {
  61. formRef.value?.clearValidate();
  62. };
  63. const handleSumbit = async () => {
  64. const validate = await new Promise((resolve) => {
  65. formRef.value?.validate((valid: boolean) => {
  66. resolve(valid);
  67. });
  68. });
  69. if (!validate) return;
  70. try {
  71. if (!formData.approvalStatus) throw new Error('请选择审批状态');
  72. await approveDrillRecord({
  73. drillPlanId: props.id,
  74. approvalStatus: formData.approvalStatus,
  75. returnReason: formData.returnReason,
  76. });
  77. ElMessage.success('审批成功');
  78. emits('success');
  79. } catch (e) {
  80. ElMessage.error('审批失败');
  81. }
  82. };
  83. defineExpose({
  84. openDialog,
  85. closeDialog,
  86. });
  87. </script>
  88. <style scoped lang="scss">
  89. .el-form {
  90. display: flex;
  91. flex-direction: column;
  92. width: 600px;
  93. min-height: 100px;
  94. height: 100%;
  95. gap: 32px;
  96. .el-form-item {
  97. margin-bottom: 0;
  98. }
  99. :deep(.el-form-item__label) {
  100. padding: 0;
  101. min-width: 80px;
  102. }
  103. }
  104. </style>