From 87edc55a377c3fca459ab48010a9716b0311c4a8 Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期一, 15 八月 2022 09:21:54 +0800 Subject: [PATCH] lct --- src/components/uploaderImg/index.vue | 192 +++++++++++++++++++++++++++++++++++------------ 1 files changed, 142 insertions(+), 50 deletions(-) diff --git a/src/components/uploaderImg/index.vue b/src/components/uploaderImg/index.vue index b769025..c30fad0 100644 --- a/src/components/uploaderImg/index.vue +++ b/src/components/uploaderImg/index.vue @@ -1,12 +1,13 @@ <template> <el-upload - v-model:file-list="fileList" - action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" - list-type="picture-card" - :on-preview="handlePictureCardPreview" - :on-remove="handleRemove" - :on-success="successFile" - :on-error="errorFile" + v-model:file-list="fileList" + :disabled="disabled" + :http-request="uploadSectionFile" + list-type="picture-card" + :on-preview="handlePictureCardPreview" + :on-remove="handleRemove" + :on-success="successFile" + :on-error="errorFile" > <el-icon><Plus /></el-icon> </el-upload> @@ -16,50 +17,141 @@ </el-dialog> </template> <script lang="ts"> - import { ref,defineComponent } from 'vue' - import { Plus } from '@element-plus/icons-vue' - import type { UploadProps, UploadUserFile } from 'element-plus' +import axios from 'axios'; +import { ref, defineComponent,onMounted,watch } from 'vue'; +import { Plus } from '@element-plus/icons-vue'; +import type { UploadProps, UploadUserFile } from 'element-plus'; +import { ElMessage } from 'element-plus'; +import { goalManagementApi } from '/@/api/goalManagement'; - export default defineComponent({ - props: { - // svg 图标组件名字 - fileList: { - type: Array, - }, +export default defineComponent({ + props: { + // svg 图标组件名字 + fileList: { + type: Array, }, - components: { - Plus + disabled: { + type: Boolean, + default: () => false, }, - setup() { - - const dialogImageUrl = ref('') - const dialogVisible = ref(false) - - const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => { - console.log(uploadFile, uploadFiles) - } - - const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => { - dialogImageUrl.value = uploadFile.url! - dialogVisible.value = true - } - - const successFile = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => { - console.log(response, uploadFile,uploadFiles) - } - const errorFile = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => { - console.log(error, uploadFile,uploadFiles) - } - - - return { - dialogImageUrl, - dialogVisible, - handleRemove, - handlePictureCardPreview, - successFile, - errorFile - }; + systemName: { + type: String, + default: () => '', }, - }); -</script> \ No newline at end of file + }, + components: { + Plus, + }, + setup(props, { emit }) { + const dialogImageUrl = ref(''); + const dialogVisible = ref(false); + + const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => { + console.log(uploadFile, uploadFiles); + }; + + const handlePictureCardPreview: UploadProps['onPreview'] = (uploadFile) => { + dialogImageUrl.value = uploadFile.url!; + dialogVisible.value = true; + }; + + const successFile = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => { + console.log(response, uploadFile, uploadFiles); + }; + const errorFile = (error: Error, uploadFile: UploadFile, uploadFiles: UploadFiles) => { + console.log(error, uploadFile, uploadFiles); + }; + watch(props.fileList, (val) => { + viewList.value = val + // searchFile() + }); + onMounted(() => { + if(props.fileList){ + viewList.value = props.fileList + // searchFile() + }else { + viewList.value = [] + } + + }); + const newFileList = ref([]) + const viewList = ref([]) + const searchFile = async () => { + for(var a = 0;a<props.fileList.length;a++){ + await goalManagementApi() + .searchFile(props.fileList[a].fileName) + .then((res) => { + props.fileList[a].url = res.data + }) + } + }; + const uploadSectionFile = (param) => { + let form = new FormData(); + form.append('file', param.file); + //组装文件名(传入后缀名) + var fileName1 = getFileName(param.file.type.split('/')[1], 1); + var fileName2 = getFileName(param.file.type.split('/')[1], 2); + goalManagementApi() + .beforeUploadFile(fileName1, fileName2) + .then((res) => { + // 转换形式 + const reader = new FileReader(); + reader.readAsArrayBuffer(param.file); + // 上传图片 + reader.onload = () => { // 上传图片接口 url:上传图片地址 修改请求头 + axios.put(res.data.uploadUrl, reader.result, + { + header: + { "Content-Type": "multipart/form-data" } + } + ) + .then(res1 => + { + props.fileList[props.fileList.length-1].fileName=res.data.fileName + props.fileList[props.fileList.length-1].fileUrl='' + emit('successUploader',props.fileList); + ElMessage({ + showClose: true, + message: '上传成功', + type: 'success', + }); + }) + }; + }); + }; + const getFileName = (suffix, type) => { + var projectName = props.systemName; + var date = getNowDate(); + var fileName1 = projectName + '/' + date + '_'; + var fileName2 = '.' + suffix; + if (type == 1) { + return fileName1; + } else if (type == 2) { + return fileName2; + } + return ''; + }; + + //获取当前年月日 + const getNowDate = () => { + var a = new Date().getTime(); //获取到当前时间戳 + var now = new Date(a); //创建一个指定的日期对象 + var year = now.getFullYear(); //年份 + var month = now.getMonth() + 1; //月份(0-11) + var date = now.getDate(); //天数(1到31) + return year + '-' + month + '-' + date; + }; + + return { + dialogImageUrl, + dialogVisible, + handleRemove, + handlePictureCardPreview, + successFile, + errorFile, + uploadSectionFile, + viewList + }; + }, +}); +</script> -- Gitblit v1.9.2