2 Commity 5751557354 ... dfde419832

Autor SHA1 Wiadomość Data
  xiongxing dfde419832 Merge branch 'master' of http://47.107.245.0:3000/xiongxing/kyj-yanglao-web-new 3 tygodni temu
  xiongxing 23c470e6eb 修复审批流自定义表单提交的时候数据问题以及上传文件提示问题 3 tygodni temu

+ 26 - 3
src/components/UploadFile/src/UploadFile.vue

@@ -68,7 +68,13 @@
 </template>
 <script lang="ts" setup>
 import { propTypes } from '@/utils/propTypes'
-import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
+import {
+  ElMessage,
+  type UploadInstance,
+  type UploadProps,
+  type UploadRawFile,
+  type UploadUserFile
+} from 'element-plus'
 import { isString } from '@/utils/is'
 import { useUpload } from '@/components/UploadFile/src/useUpload'
 import { UploadFile } from 'element-plus/es/components/upload/src/upload'
@@ -99,6 +105,21 @@ const uploadNumber = ref<number>(0)
 
 const { uploadUrl, httpRequest } = useUpload()
 
+/** 上传中常驻提示(duration:0),成功或失败后手动关闭 */
+let uploadingMessageClose: { close(): void } | null = null
+const closeUploadingMessage = () => {
+  uploadingMessageClose?.close()
+  uploadingMessageClose = null
+}
+const openUploadingMessageOnce = () => {
+  if (uploadingMessageClose) return
+  uploadingMessageClose = ElMessage.warning({
+    message: '正在上传文件,请稍候...',
+    duration: 0,
+    showClose: false
+  })
+}
+
 // 文件上传之前判断
 const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
   if (fileList.value.length >= props.limit) {
@@ -122,7 +143,7 @@ const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
     message.error(`上传文件大小不能超过${props.fileSize}MB!`)
     return false
   }
-  message.success('正在上传文件,请稍候...')
+  openUploadingMessageOnce()
   uploadNumber.value++
 }
 // 处理上传的文件发生变化
@@ -131,7 +152,6 @@ const beforeUpload: UploadProps['beforeUpload'] = (file: UploadRawFile) => {
 // }
 // 文件上传成功
 const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
-  message.success('上传成功')
   // 删除自身
   const index = fileList.value.findIndex((item) => item.response?.data === res.data)
   fileList.value.splice(index, 1)
@@ -141,6 +161,8 @@ const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => {
     name: res.data
   })
   if (uploadList.value.length == uploadNumber.value) {
+    closeUploadingMessage()
+    message.success('上传成功')
     fileList.value.push(...uploadList.value)
     uploadList.value = []
     uploadNumber.value = 0
@@ -153,6 +175,7 @@ const handleExceed: UploadProps['onExceed'] = (): void => {
 }
 // 上传错误提示
 const excelUploadError: UploadProps['onError'] = (): void => {
+  closeUploadingMessage()
   message.error('导入数据失败,请您重新上传!')
 }
 // 删除上传文件

+ 15 - 7
src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue

@@ -30,6 +30,7 @@
               <span class="el-icon-picture-outline"> 填写表单【{{ runningTask?.formName }}】 </span>
             </template>
             <form-create
+              :key="'approve-task-' + (runningTask?.id ?? '') + '-' + (runningTask?.formId ?? '')"
               v-model="approveForm.value"
               v-model:api="approveFormFApi"
               :option="approveForm.option"
@@ -694,7 +695,7 @@ const closePropover = (type: string, formRef: FormInstance | undefined) => {
 
 /** 处理审批通过和不通过的操作 */
 const handleAudit = async (pass: boolean, formRef: FormInstance | undefined) => {
-  if(formLoading.value){
+  if (formLoading.value) {
     return
   }
   formLoading.value = true
@@ -715,10 +716,17 @@ const handleAudit = async (pass: boolean, formRef: FormInstance | undefined) =>
       if (runningTask.value.signEnable) {
         data.signPicUrl = approveReasonForm.signPicUrl
       }
-      // 多表单处理,并且有额外的 approveForm 表单,需要校验 + 拼接到 data 表单里提交
-      // TODO 芋艿 任务有多表单这里要如何处理,会和可编辑的字段冲突
-      const formCreateApi = approveFormFApi.value
-      if (Object.keys(formCreateApi)?.length > 0) {
+      // 多表单处理:任务级自定义表单(form-create);须校验并将填写值写入 variables
+      // 注意:不可用 Object.keys(fApi) 判断 —— loadTodoTask 会先把 approveFormFApi 置为 {},
+      // 若在 API 尚未重新注入前判断会得到 0 键,从而跳过校验且 variables 未覆盖为审批表单的值。
+      const hasTaskApproveForm = runningTask.value?.formId > 0
+      if (hasTaskApproveForm) {
+        await nextTick()
+        const formCreateApi = approveFormFApi.value
+        if (typeof formCreateApi?.validate !== 'function') {
+          message.warning('审批自定义表单未完成初始化,请稍后再试')
+          return
+        }
         await formCreateApi.validate()
         // @ts-ignore
         data.variables = approveForm.value.value
@@ -741,9 +749,9 @@ const handleAudit = async (pass: boolean, formRef: FormInstance | undefined) =>
     // 加载最新数据
     reload()
   } finally {
-    setTimeout(()=>{
+    setTimeout(() => {
       formLoading.value = false
-    },400)
+    }, 400)
   }
 }