From 61fee49d8ca4e3024c6e3f575bf88e99cde53931 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期四, 28 八月 2025 14:03:37 +0800
Subject: [PATCH] Merge branch 'feature/0827' into dev_JLMY
---
src/components/FileUpload/SimpleMultiFileUpload.vue | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 118 insertions(+), 0 deletions(-)
diff --git a/src/components/FileUpload/SimpleMultiFileUpload.vue b/src/components/FileUpload/SimpleMultiFileUpload.vue
new file mode 100644
index 0000000..f02a1d3
--- /dev/null
+++ b/src/components/FileUpload/SimpleMultiFileUpload.vue
@@ -0,0 +1,118 @@
+<script setup>
+import {computed, ref, reactive, defineEmits,watch} from "vue";
+import {getToken} from "@/utils/auth.js";
+import axios from "axios";
+import {ElMessage} from "element-plus";
+
+const emit = defineEmits(['update:fileList', 'onUpload',"update:ids"]);
+
+const props = defineProps({
+ action: {type: String, default: "/common/minioUploads"},
+ fileList: {type: Array, default: () => []},
+ statusType: {type: Number, default: 0}
+})
+
+const localFileList = ref([...props.fileList])
+
+
+const headers = computed(() => ({Authorization: "Bearer " + getToken()}));
+const uploadFileUrl = computed(() => import.meta.env.VITE_APP_BASE_API + props.action);
+
+const handleChange = () => {
+ emit('update:ids', localFileList.value.map(item => item.id))
+ emit('update:fileList', localFileList.value)
+ emit('onUpload', localFileList.value)
+}
+const handleUploadSuccess = (res, file) => {
+ // console.log(res)
+ localFileList.value.push(...res.data.map((it) => {
+ return {
+ id: it.id,
+ url: it.downloadUrl,
+ name: it.originalFilename,
+ status: "success",
+ uid: file.uid
+ }
+ }))
+ handleChange()
+}
+
+const handleUploadPreview = (it) => {
+ const link = document.createElement("a");
+ if (it.url) {
+ link.href = it.url
+ } else {
+ link.href = localFileList.value.find(fl => fl.uid === it.uid).url;
+ }
+ link.download = it.name;
+ link.click();
+}
+
+const handleUploadRemove = (it) => {
+ localFileList.value = localFileList.value.filter(f => f.uid !== it.uid);
+ handleChange()
+}
+
+watch(
+ () => props.fileList,
+ (val) => {
+ localFileList.value = [...val]
+ },
+ { immediate: true, deep: true }
+)
+
+// 鏂囦欢涓婁紶澶勭悊
+const UploadImage = (param) => {
+ const formData = new FormData();
+ formData.append("files", param.file);
+ formData.append("type", props.statusType);
+ axios.post(uploadFileUrl.value, formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ ...headers.value,
+ },
+ onUploadProgress: (progressEvent) => {
+ const percent = Math.round((progressEvent.loaded * 100) / progressEvent.total);
+ param.onProgress({percent});
+ },
+ })
+ .then((response) => {
+ if (response.data.code === 200) {
+ handleUploadSuccess(response.data, param.file);
+ ElMessage.success("涓婁紶鎴愬姛");
+ } else {
+ param.onError(new Error(response.data.msg));
+ ElMessage.error(response.data.msg);
+ }
+ })
+ .catch((error) => {
+ param.onError(error);
+ });
+};
+
+</script>
+
+<template>
+ <div class="upload-file">
+ <el-upload
+ class="upload-demo"
+ drag
+ :fileList="localFileList"
+ :action="props.action"
+ :headers="headers"
+ :http-request="UploadImage"
+ :on-success="handleUploadSuccess"
+ :on-remove="handleUploadRemove"
+ :on-preview="handleUploadPreview"
+ multiple>
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ </el-upload>
+ </div>
+</template>
+
+<style scoped lang="scss">
+
+
+
+</style>
\ No newline at end of file
--
Gitblit v1.9.3