看起来你在使用 Vue.js 和 Ant Design Vue 组件库来实现文件上传功能。如果你点击“导入文件”之后显示红色的文件名称,可能是由于文件上传处理逻辑或反馈未能正确实现。
首先,请确保以下几点:
检查
importCasePool
方法:确保这个方法能正确处理上传的文件,并返回相应的 Promise。需要保证它内部有处理文件上传的逻辑。修改
handleOk
函数:你的代码中,在调用importCasePool()
时没有传递当前选中的文件。这意味着即使你的方法能够正常工作,也无法得到要导入的具体文件信息。应该将该信息传递给importCasePool()
。错误提示:如果上传失败,你可能希望提供一些用户反馈,以便他们知道发生了什么。例如,可以在界面上显示一个消息通知。
下面是改进后的示例代码:
<template>
<div class="form-tool">
<a-button class="margin-right-10 button-light-blue" @click="openModal">导入</a-button>
<a-modal v-model:open="open" title="上传文件" @ok="handleOk">
<div style="padding: 10px 0px">
<span>上传文件:</span>
<a-upload
:before-upload="beforeUpload"
:on-change="handleChange"
accept=".xlsx,.xls"
:show-upload-list="{ showRemoveIcon: true }"
ref="upload"
>
<a-button>导入文件</a-button>
</a-upload>
</div>
</a-modal>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue';
import { importCasePool } from '../../utils';
import { message } from 'ant-design-vue'; // 导入消息组件
const open = ref(false);
const fileList = ref([]); // 用于保存选中的文件
const openModal = () => {
open.value = true;
};
const beforeUpload = (file) => {
fileList.value.push(file); // 保存当前选中的文件
return true;
};
const handleChange = (info) => {
console.log(info.file);
};
const handleOk = async () => {
if (fileList.value.length === 0) {
message.error('请先选择要导入的文件!');
return;
}
try {
const response = await importCasePool(fileList.value);
console.log(response);
if (response.success) {
message.success('导入成功!');
} else {
message.error('导入失败!' + response.message);
}
} catch (error) {
console.error(error);
message.error('发生错误,请重试。');
} finally {
open.value = false;
fileList.value = []; // 清空已选中文件
}
};
</script>
注意事项:
将选中数据传递给
importCasePool
:确保这个函数能够接受并正确处理所传递的参数(例如,要上传的文件)。添加反馈信息:使用
message
提供用户友好的通知。清空已选中文件:在每次操作后清空选中文件,这样下一次打开模态框时不会保留之前选择的内容。
通过以上这些更改,你可以为用户提供更明确的信息和更好的体验。同时,也要检查你的后端是否可以正确接收和处理这些请求,以及返回的数据格式是否符合预期。
内容由零声教学AI助手提供,问题来源于学员提问