组件功能介绍 上传格式限制 上传大小限制 上传文件数量限制 自定义上传区 上传成功回调 禁用上传开关与点击上传自定义事件 暴露所以上传文件列表(uploadList)与当前文件数据(uploadLatestFile)  组件代码Upload.vue < template> < div> < div> < el-uploadclass = " flx-align-center" :file-list = " fileList" :multiple = " multiple" :limit = " limit" :disabled = " disabled" :accept = " fileType" :show-file-list = " false" :http-request = " handleHttpUpload" :before-upload = " beforeUpload" :on-exceed = " handleExceed" > < slotname = " upload-btn" > < divclass = " upload-content" > < el-buttontype = " primary" :icon = " UploadFilled" plain  @click = " handleClick" > </ el-button> </ div> </ slot> </ el-upload> < divclass = " upload-tip" v-if = " tipShow" > < slotname = " tip" > </ slot> </ div> </ div> < divclass = " upload-box" > < slot> </ slot> </ div> </ div> </ template> < scriptsetup  lang = " ts" name = " UploadBasics" > 
import  {  ref,  computed }  from  "vue" ; 
import  {  UploadFilled }  from  "@element-plus/icons-vue" ; 
import  type {  UploadUserFile }  from  "element-plus" ; 
import  {  ElNotification }  from  "element-plus" ; 
import  {  uploadImg }  from  "@/api/modules/upload" ; 
import  {  getFileType }  from  "@/utils/assetsFile" ; interface  UploadFileProps  { fileType :  string; fileSize :  number;  limit :  number;  tipShow :  boolean;  multiple :  boolean;  fileList :  UploadUserFile[ ] ; disabled :  boolean; handleClick :  ( )  =>  void ;  
} const  props =  withDefaults ( defineProps< Partial< UploadFileProps>> ( ) ,  { fileType :  ".pdf, .jpg, .png, .jpeg" , fileSize :  10 , tipShow :  true , multiple :  true , fileList :  ( )  =>  [ ] , disabled :  false 
} ) ; 
const  tipComputed =  computed ( ( )  =>  { const  tip =  props. fileType. replace ( / \. / g ,  "" ) . replace ( / , / g ,  "、" ) . toUpperCase ( ) ; return  ` 支持 ${ tip} 格式,大小不得超过 ${ props. fileSize} M ` ; 
} ) ; 
const  beforeUpload  =  rawFile  =>  { const  extension =  getFileType ( rawFile. name,  1 ) ; const  fileType =  props. fileType. replace ( / \. / g ,  "" ) ;  const  imgType =  fileType. includes ( extension) ; if  ( ! imgType)  { ElNotification ( { title :  "温馨提示" , message :  "上传图片不符合所需的格式!" , type :  "warning" } ) ; return  false ; } if  ( rawFile. size /  1024  /  1024  >  props. fileSize)  { ElNotification ( { title :  "温馨提示" , message :  ` 上传图片大小不能超过  ${ props. fileSize} M! ` , type :  "warning" } ) ; return  false ; } 
} ; const  handleExceed  =  ( )  =>  { ElNotification ( { title :  "温馨提示" , message :  ` 超出文件上传最大数量: ${ props. limit} ! ` , type :  "warning" } ) ; return  false ; 
} ; 
const  uploadLatestFile =  ref< UploadUserFile> ( ) ;  
const  uploadList =  ref< UploadUserFile[ ] > ( [ ] ) ;  const  handleHttpUpload  =  async  options  =>  { let  formData =  new  FormData ( ) ; formData. append ( "file" ,  options. file) ; try  { 
const  {  data }  =  await  uploadImg ( formData) ; uploadLatestFile. value =  { name :  data. data. name as  string, url :  data. data. url} ; uploadList. value =  [ ... uploadList. value, { name :  data. data. name as  string, url :  data. data. url} ] ; emits ( "upload-success" ,  {  uploadLatestFile :  uploadLatestFile. value,  uploadList :  uploadList. value } ) ; }  catch  ( error)  { options. onError ( error as  any) ; } 
} ; const  emits =  defineEmits ( [ "upload-success" ] ) ; defineExpose ( { uploadList, uploadLatestFile
} ) ; 
 </ script> < stylelang = " scss" scoped > 
// 上传按钮区
.upload-content  { display :  flex; flex-direction :  column; 
} // 上传文件显示容器
.upload-box  { max-height :  400px; // margin-top :  10px; overflow :  auto; 
} // 提示
.upload-tip  { display :  flex; align-items :  center; font-size :  12px; line-height :  32px; color :  var ( --el-label-color-regular) ; 
} 
 </ style> 使用示例一: < Uploadref = " uploadRef" :file-size = " 20" :limit = " 10" :file-list = " uploadItemRef?.newFileList" file-type = " zip,png,jpg,jpeg,doc,docx,xls,xlsx,pdf,ppt,pptx" direction = " horizontal" > < UploadItemref = " uploadItemRef" :file-list = " fileList" :upload-list = " uploadRef?.uploadList" /> </ Upload> 效果图展示: 使用示例二:使用自定义的上传按钮 Upload上传组件内部使用UploadItem展示文件,展示文件内部又有上传功能:< Upload ref= "uploadRef" > < UploadItem : file- list= "dataList"  : upload- list= "uploadRef?.uploadList"  / > 
< / Upload> 
< div class = "file-div flx-justify-between"  v- for = "(item, index) in list"  : key= "index" > < div class = "flx-align-center" > < img : src= "getFileTypeImg(item.url)"  : alt= "item.name"  / > < span v- if = "isExt" > { {  item. name } } < / span> < ! --  < span v- else > { {  item. name } } { {  getFileType ( item. url)  } } < / span>  -- > < span v- else > { {  item. name } } < / span> < / div> < div class = "upload-btns" > < el- button v- if = "isDown"  type= "primary"  text @click= "handleDown(item)" >  下载 < / el- button> < Upload : tip- show= "false"  : multiple= "false"  @upload- success= "uploadSuccess($event, item)" > < template #upload- btn> < img src= "@/assets/images/disposal/reactupload.png"  alt= "reactupload"  class = "reactupload"  / > < / template> < / Upload> < / div> < / div> 
效果图