Files
weather-data-ui/src/views/dailyweather/weatherdailydata-import.vue
T
2026-03-11 10:53:53 +08:00

92 lines
2.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<el-dialog v-model="visible" title="批量导入气象数据" width="450px" :close-on-click-modal="false">
<el-upload
ref="uploadRef"
class="upload-demo"
drag
action="#"
:auto-upload="false"
:on-change="handleChange"
:http-request="uploadFileRequest"
:limit="1"
:on-exceed="handleExceed"
accept=".xlsx, .xls"
>
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
<div class="el-upload__text">将文件拖到此处 <em>点击选择</em></div>
<template #tip>
<div class="el-upload__tip" style="text-align: center;">
只能上传 Excel 文件且不超过 10MB
</div>
</template>
</el-upload>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" :loading="loading" @click="dataFormSubmitHandle">确定</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';
import baseService from "@/service/baseService"; // 确保路径对应你的项目
const visible = ref(false);
const loading = ref(false);
const uploadRef = ref();
const fileRaw = ref<File | null>(null);
const emit = defineEmits(['refreshDataList']);
// 初始化
const init = () => {
visible.value = true;
fileRaw.value = null;
if(uploadRef.value) uploadRef.value.clearFiles();
};
// 监听文件选择状态
const handleChange = (file: any) => {
fileRaw.value = file.raw;
};
// 限制只能选一个文件,选新文件替换旧文件
const handleExceed = (files: any) => {
uploadRef.value!.clearFiles();
const file = files[0];
uploadRef.value!.handleStart(file);
};
const dataFormSubmitHandle = () => {
if (!fileRaw.value) {
return ElMessage.warning("请先选择文件");
}
loading.value = true;
const formData = new FormData();
// 这里的 "file" 必须和后端 Controller 的 @RequestParam("file") 名字一致
formData.append("file", fileRaw.value);
// 注意:很多封装好的 baseService 在 post 时会自动序列化 data
// 尝试直接发送 formData,不要加额外的 {} 包装
baseService.upload("/dailyweather/weatherdailydata/import", formData)
.then(() => {
ElMessage.success("导入成功");
visible.value = false;
emit("refreshDataList");
})
.catch((err) => {
// 捕获具体报错
console.error("上传细节错误:", err);
})
.finally(() => {
loading.value = false;
});
};
defineExpose({ init });
</script>