addSignDialog.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <!-- 加签审批弹窗 -->
  3. <el-dialog v-model="reviewVisibleDialog" 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 value="9"
  8. >前加签
  9. <el-tooltip effect="dark" content="在当前节点之前增加一个审批节点,当新增的节点同意后,再流转至当前节点。" placement="top">
  10. <el-button text :icon="QuestionFilled" style="padding: 0"></el-button>
  11. </el-tooltip>
  12. </el-radio>
  13. <el-radio value="11"
  14. >后加签
  15. <el-tooltip effect="dark" content="在当前节点之后增加一个审批节点,当前节点会默认同意,并流转至新增的节点。" 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 { processAppendNodeApi } from '@/api/flow/processTask'
  56. const props = defineProps({
  57. modelValue: {
  58. type: Boolean,
  59. default: false
  60. },
  61. taskId: {
  62. type: String,
  63. default: undefined
  64. }
  65. })
  66. const btnDisabled = ref(false)
  67. const form = reactive({
  68. content: '',
  69. userId: '',
  70. type: 9
  71. })
  72. const formRef = ref(null)
  73. const uploadLoading = ref(false)
  74. const userOptList = ref([])
  75. const $myEmit = defineEmits(['update:modelValue', 'confirm'])
  76. // 获取用户
  77. const getUserList = async () => {
  78. var params = {
  79. data: {
  80. keyword: null,
  81. departmentId: null
  82. },
  83. page: 1,
  84. pageSize: 99999
  85. }
  86. const res = await user.userPageApi(params)
  87. userOptList.value = res.records.map(item => {
  88. return {
  89. value: item.id,
  90. label: item.username
  91. }
  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 processAppendNodeApi(formData)
  109. closeDialog()
  110. btnDisabled.value = false
  111. }
  112. })
  113. .catch(err => {
  114. btnDisabled.value = false
  115. })
  116. }
  117. const closeDialog = () => {
  118. $myEmit('update:modelValue', false)
  119. }
  120. onMounted(() => {
  121. getUserList()
  122. })
  123. const reviewVisibleDialog = computed({
  124. get() {
  125. return props.modelValue
  126. },
  127. set(val) {
  128. $myEmit('update:modelValue', val)
  129. }
  130. })
  131. const clearValidate = () => {}
  132. </script>
  133. <style scoped>
  134. .example-img-box {
  135. width: 100% !important;
  136. }
  137. .example-img-box .el-form-item__content {
  138. display: block;
  139. }
  140. </style>