This commit is contained in:
guochunsi
2026-01-09 18:46:41 +08:00
parent bacf93c33e
commit 4b46d3cc0d
40 changed files with 1977 additions and 939 deletions

View File

@@ -26,10 +26,14 @@
<el-form-item label="证明材料" prop="attachment" required>
<el-upload
ref="uploadRef"
:headers="headers"
:limit="1"
:action="url"
:before-upload="beforeUpload"
:on-success="materiaUploadSuccess"
:on-remove="handleRemove"
:on-exceed="handleExceed"
:file-list="fileList"
:accept="'.jpg,.jpeg,.png,.pdf'"
>
@@ -45,15 +49,15 @@
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogSubmit" type="primary" :loading="submitLoading"> </el-button>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button @click="dialogSubmit" type="primary" :loading="submitLoading">保存</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive, computed } from 'vue'
import { ref, reactive, computed, nextTick } from 'vue'
import { Session } from '/@/utils/storage'
import { useMessage } from '/@/hooks/message'
import { addObj } from '/@/api/professional/professionaluser/professionalteacherhonor'
@@ -69,6 +73,7 @@ const message = useMessage()
// 表单引用
const formRef = ref()
const uploadRef = ref()
const submitLoading = ref(false)
// 对话框显示状态(内部管理)
@@ -126,14 +131,65 @@ const initDicData = async () => {
// 综合表彰不需要额外的字典数据
}
// 上传前的处理
const beforeUpload = () => {
return true
}
// 文件超出限制时的处理(当 limit=1 且已有文件时,用户上传新文件会触发此事件)
// 根据 Element Plus 官方文档,在 on-exceed 中清空文件列表并添加新文件
const handleExceed = (files: File[]) => {
// 清空当前文件列表
uploadRef.value?.clearFiles()
fileList.value = []
dataForm.attachment = ''
// 等待 DOM 更新后,手动触发新文件的上传
nextTick(() => {
const newFile = files[0]
if (newFile && uploadRef.value) {
// 通过 input 元素手动触发文件上传
const input = uploadRef.value.$el?.querySelector('input[type="file"]')
if (input) {
// 创建新的 DataTransfer 对象并添加新文件
const dataTransfer = new DataTransfer()
dataTransfer.items.add(newFile)
input.files = dataTransfer.files
// 触发 change 事件,让 Element Plus 自动处理上传
const changeEvent = new Event('change', { bubbles: true })
input.dispatchEvent(changeEvent)
}
}
})
}
// 文件上传成功
const materiaUploadSuccess = (response: any) => {
const materiaUploadSuccess = (response: any, file: any) => {
if (response.data && response.data.code === "-1") {
message.error("当前不允许上传文件")
// 上传失败,移除文件
fileList.value = []
uploadRef.value?.clearFiles()
return
}
dataForm.attachment = response.data.url
// 清除验证错误
if (response.data && response.data.url) {
dataForm.attachment = response.data.url
// 更新文件列表,确保显示新上传的文件(替换旧文件)
fileList.value = [{
name: file.name || '证明材料',
url: response.data.url,
uid: file.uid || Date.now(),
status: 'success'
}]
formRef.value?.clearValidate('attachment')
}
}
// 文件删除处理
const handleRemove = () => {
dataForm.attachment = ''
fileList.value = []
formRef.value?.clearValidate('attachment')
}

View File

@@ -291,7 +291,6 @@ const changeState = (row: any, val: number) => {
} else if (val === -2) {
// 驳回
const newRow = JSON.parse(JSON.stringify(row))
newRow.realName = newRow.teacherName
backReasonRef.value?.init(newRow, 'honor')
}
}