reviewDialog.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <!-- 评论弹窗 -->
  3. <el-dialog v-model="reviewVisibleDialog" class="le-dialog" :title="currentTip + '内容'" width="700" destroy-on-close>
  4. <el-form ref="formRef" v-loading="uploadLoading" label-position="top" element-loading-text="图片上传中..." :model="form" label-width="80px">
  5. <el-form-item :label="currentTip" prop="content" :rules="[{ required: true, message: '内容不能为空' }]">
  6. <el-input v-model="form.content" type="textarea" placeholder="请输入内容" maxlength="64" show-word-limit> </el-input>
  7. </el-form-item>
  8. <el-form-item v-if="false" prop="attachment" label="附件" class="example-img-box">
  9. <!--'.docx', '.doc', '.pptx', '.ppt', '.xlsx', '.xls', '.zip', '.csv', '.pdf', '.png', '.jpg' 因前端不支持图片以外格式,所以注释 -->
  10. <FileUpload
  11. v-model="form.attachment"
  12. source="project"
  13. return="array"
  14. :limit="5"
  15. :file-size="10"
  16. :accept="['.png', '.jpg']"
  17. @success="clearValidate"
  18. />
  19. </el-form-item>
  20. </el-form>
  21. <template #footer>
  22. <span class="dialog-footer">
  23. <el-button :loading="btnDisabled" @click="closeDialog">取 消</el-button>
  24. <el-button type="primary" :loading="btnDisabled" :disabled="uploadLoading" @click="submitForm">确 定</el-button>
  25. </span>
  26. </template>
  27. </el-dialog>
  28. </template>
  29. <script setup>
  30. import { computed, reactive, ref } from 'vue'
  31. import { processReviewTaskApi, processRevokeTaskApi } from '@/api/flow/processTask'
  32. import FileUpload from '@/components/FileUpload.vue'
  33. import { ElMessage } from 'element-plus'
  34. const props = defineProps({
  35. modelValue: {
  36. type: Boolean,
  37. default: false
  38. },
  39. taskId: {
  40. type: String,
  41. default: undefined
  42. },
  43. instanceId: {
  44. type: String,
  45. default: undefined
  46. },
  47. // 审核类型 评论(review) or 撤销(revoke)
  48. currentType: {
  49. type: String,
  50. default: 'review'
  51. }
  52. })
  53. const btnDisabled = ref(false)
  54. const form = reactive({
  55. content: ''
  56. // attachment: []
  57. })
  58. const formRef = ref(null)
  59. const uploadLoading = ref(false)
  60. const $myEmit = defineEmits(['update:modelValue', 'successCb'])
  61. // 提交
  62. const submitForm = () => {
  63. btnDisabled.value = true
  64. const formData = { ...form, taskId: props.taskId, instanceId: props.instanceId }
  65. formRef.value
  66. .validate()
  67. .then(async valid => {
  68. if (valid) {
  69. const flag = props.currentType === 'review'
  70. if (flag) {
  71. await processReviewTaskApi(formData)
  72. } else {
  73. await processRevokeTaskApi(formData)
  74. }
  75. $myEmit('successCb')
  76. closeDialog()
  77. btnDisabled.value = false
  78. }
  79. })
  80. .catch(err => {
  81. btnDisabled.value = false
  82. ElMessage({
  83. message: '操作失败',
  84. type: 'error'
  85. })
  86. })
  87. }
  88. const closeDialog = () => {
  89. $myEmit('update:modelValue', false)
  90. }
  91. const reviewVisibleDialog = computed({
  92. get() {
  93. return props.modelValue
  94. },
  95. set(val) {
  96. $myEmit('update:modelValue', val)
  97. }
  98. })
  99. const currentTip = computed(() => {
  100. return props.currentType === 'review' ? '评论' : '撤销'
  101. })
  102. const clearValidate = () => {}
  103. </script>
  104. <style scoped>
  105. .example-img-box {
  106. width: 100% !important;
  107. }
  108. .example-img-box .el-form-item__content {
  109. display: block;
  110. }
  111. </style>