deliverToReviewDialog.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <!-- 转交审批弹窗 -->
  3. <el-dialog v-model="reviewVisibleDialog" class="le-dialog" title="转交审批" 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="转交方式" prop="type">
  6. <el-radio-group v-model="form.type">
  7. <el-radio label="0"
  8. >转办
  9. <el-tooltip effect="dark" content="A转给其B审批,B审批后,进入下一节点" placement="top">
  10. <el-button text :icon="QuestionFilled" style="padding: 0"></el-button>
  11. </el-tooltip>
  12. </el-radio>
  13. <el-radio label="1"
  14. >委派
  15. <el-tooltip effect="dark" content="A转给其B审批,B审批后,转给A,A审批后进入下一节点" placement="top">
  16. <el-button text :icon="QuestionFilled" style="padding: 0"></el-button>
  17. </el-tooltip>
  18. </el-radio>
  19. </el-radio-group>
  20. </el-form-item>
  21. <el-form-item label="转交给" prop="userId" :rules="[{ required: true, message: '转交人不能为空' }]">
  22. <el-select v-model="form.userId" placeholder="请选择转交人员">
  23. <el-option v-for="item in userOptList" :key="item.value" :label="item.label" :value="item.value" />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="审批意见" prop="content">
  27. <el-input v-model="form.content" type="textarea" placeholder="请输入审批意见" maxlength="64" show-word-limit> </el-input>
  28. </el-form-item>
  29. <el-form-item v-if="false" prop="attachment" label="附件" class="example-img-box">
  30. <!--'.docx', '.doc', '.pptx', '.ppt', '.xlsx', '.xls', '.zip', '.csv', '.pdf', '.png', '.jpg' 因前端不支持图片以外格式,所以注释 -->
  31. <FileUpload
  32. v-model="form.attachment"
  33. source="project"
  34. return="array"
  35. :limit="5"
  36. :file-size="10"
  37. :accept="['.png', '.jpg']"
  38. @success="clearValidate"
  39. />
  40. </el-form-item>
  41. </el-form>
  42. <template #footer>
  43. <span class="dialog-footer">
  44. <el-button :loading="btnDisabled" @click="closeDialog">取 消</el-button>
  45. <el-button type="primary" :loading="btnDisabled" :disabled="uploadLoading" @click="submitForm">确 定</el-button>
  46. </span>
  47. </template>
  48. </el-dialog>
  49. </template>
  50. <script setup>
  51. import { computed, onMounted, reactive, ref } from 'vue'
  52. import FileUpload from '@/components/FileUpload.vue'
  53. import { QuestionFilled } from '@element-plus/icons-vue'
  54. import user from '@/api/system/user'
  55. import { processTransferApi } from '@/api/flow/processTask'
  56. import { ElMessage } from 'element-plus'
  57. const props = defineProps({
  58. modelValue: {
  59. type: Boolean,
  60. default: false
  61. },
  62. taskId: {
  63. type: String,
  64. default: undefined
  65. }
  66. })
  67. const btnDisabled = ref(false)
  68. const form = reactive({
  69. content: '',
  70. userId: '',
  71. type: 0
  72. })
  73. const formRef = ref(null)
  74. const uploadLoading = ref(false)
  75. const userOptList = ref([])
  76. const $myEmit = defineEmits(['update:modelValue', 'successCb'])
  77. // 获取用户
  78. const getUserList = async () => {
  79. var params = {
  80. data: {
  81. keyword: null,
  82. departmentId: null
  83. },
  84. page: 1,
  85. pageSize: 99999
  86. }
  87. const res = await user.userPageApi(params)
  88. userOptList.value = res.records.map(item => {
  89. return {
  90. value: item.id,
  91. label: item.username
  92. }
  93. })
  94. }
  95. const submitForm = () => {
  96. btnDisabled.value = true
  97. const formData = { ...form, taskId: props.taskId }
  98. formRef.value
  99. .validate()
  100. .then(async valid => {
  101. if (valid) {
  102. userOptList.value.forEach(item => {
  103. if (item.value === formData.userId) {
  104. formData.username = item.label
  105. }
  106. })
  107. console.log(formData, '===')
  108. await processTransferApi(formData)
  109. $myEmit('successCb')
  110. closeDialog()
  111. btnDisabled.value = false
  112. }
  113. })
  114. .catch(err => {
  115. console.error('挂起订单表单拦截', err)
  116. btnDisabled.value = false
  117. ElMessage({
  118. message: '操作失败',
  119. type: 'error'
  120. })
  121. })
  122. }
  123. const closeDialog = () => {
  124. $myEmit('update:modelValue', false)
  125. }
  126. onMounted(() => {
  127. getUserList()
  128. })
  129. const reviewVisibleDialog = computed({
  130. get() {
  131. return props.modelValue
  132. },
  133. set(val) {
  134. $myEmit('update:modelValue', val)
  135. }
  136. })
  137. const clearValidate = () => {}
  138. </script>
  139. <style scoped>
  140. .example-img-box {
  141. width: 100% !important;
  142. }
  143. .example-img-box .el-form-item__content {
  144. display: block;
  145. }
  146. </style>