TaskSubSignDialogForm.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <Dialog v-model="dialogVisible" title="减签" width="500">
  3. <el-form
  4. ref="formRef"
  5. v-loading="formLoading"
  6. :model="formData"
  7. :rules="formRules"
  8. label-width="110px"
  9. >
  10. <el-form-item label="减签任务" prop="id">
  11. <el-radio-group v-model="formData.id">
  12. <el-radio-button v-for="item in subTaskList" :key="item.id" :label="item.id">
  13. {{ item.name }}({{ item.assigneeUser.deptName }}{{ item.assigneeUser.nickname }}--审批)
  14. </el-radio-button>
  15. </el-radio-group>
  16. </el-form-item>
  17. <el-form-item label="减签理由" prop="reason">
  18. <el-input v-model="formData.reason" clearable placeholder="请输入减签理由" />
  19. </el-form-item>
  20. </el-form>
  21. <template #footer>
  22. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  23. <el-button @click="dialogVisible = false">取 消</el-button>
  24. </template>
  25. </Dialog>
  26. </template>
  27. <script lang="ts" name="TaskRollbackDialogForm" setup>
  28. import * as TaskApi from '@/api/bpm/task'
  29. import { isEmpty } from '@/utils/is'
  30. const message = useMessage() // 消息弹窗
  31. const dialogVisible = ref(false) // 弹窗的是否展示
  32. const formLoading = ref(false) // 表单的加载中
  33. const formData = ref({
  34. id: '',
  35. reason: ''
  36. })
  37. const formRules = ref({
  38. id: [{ required: true, message: '必须选择减签任务', trigger: 'change' }],
  39. reason: [{ required: true, message: '减签理由不能为空', trigger: 'blur' }]
  40. })
  41. const formRef = ref() // 表单 Ref
  42. const subTaskList = ref([])
  43. /** 打开弹窗 */
  44. const open = async (id: string) => {
  45. subTaskList.value = await TaskApi.getChildrenTaskList(id)
  46. if (isEmpty(subTaskList.value)) {
  47. message.warning('当前没有可减签的任务')
  48. return false
  49. }
  50. dialogVisible.value = true
  51. resetForm()
  52. }
  53. defineExpose({ open }) // 提供 openModal 方法,用于打开弹窗
  54. /** 提交表单 */
  55. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  56. const submitForm = async () => {
  57. // 校验表单
  58. if (!formRef) return
  59. const valid = await formRef.value.validate()
  60. if (!valid) return
  61. // 提交请求
  62. formLoading.value = true
  63. try {
  64. await TaskApi.taskSubSign(formData.value)
  65. message.success('减签成功')
  66. dialogVisible.value = false
  67. // 发送操作成功的事件
  68. emit('success')
  69. } finally {
  70. formLoading.value = false
  71. }
  72. }
  73. /** 重置表单 */
  74. const resetForm = () => {
  75. formData.value = {
  76. id: '',
  77. reason: ''
  78. }
  79. formRef.value?.resetFields()
  80. }
  81. </script>