el-upload-ec9a39c1.js 13 KB

12
  1. import{aq as ue,aS as de,j as A,k as m,aO as k,m as _,q as ke,t as N,r as ce,z as G,o as h,c as L,a as R,b as U,G as Ee,O as $e,C as y,u as t,aA as pe,R as C,e as b,d as q,E as D,f as S,bC as Ce,X as Z,D as Re,b5 as we,ak as Fe,F as Pe,K as Se,bD as Ue,bE as Le,ai as _e,y as W,bF as x,bG as Te,av as Oe,w as ee,aj as De,ag as je,aC as Be,a6 as te,Y as se,V as qe}from"./index-312d0758.js";import{E as O}from"./index-7588b595.js";import{E as Ne}from"./el-progress-28b876a0.js";import{t as Q,d as Ae}from"./error-78e43d3e.js";import{m as J,c as Ke}from"./typescript-c7dac87b.js";import{_ as K}from"./plugin-vue_export-helper-1cff8a04.js";import{a as M}from"./use-form-common-props-714f341f.js";import{c as ae}from"./cloneDeep-37d7fb14.js";import{i as Me}from"./isEqual-76463fee.js";const fe=Symbol("uploadContextKey"),He="ElUpload";class ze extends Error{constructor(l,e,p,u){super(l),this.name="UploadAjaxError",this.status=e,this.method=p,this.url=u}}function oe(o,l,e){let p;return e.response?p=`${e.response.error||e.response}`:e.responseText?p=`${e.responseText}`:p=`fail to ${l.method} ${o} ${e.status}`,new ze(p,e.status,l.method,o)}function Ie(o){const l=o.responseText||o.response;if(!l)return l;try{return JSON.parse(l)}catch{return l}}const Ve=o=>{typeof XMLHttpRequest>"u"&&Q(He,"XMLHttpRequest is undefined");const l=new XMLHttpRequest,e=o.action;l.upload&&l.upload.addEventListener("progress",d=>{const v=d;v.percent=d.total>0?d.loaded/d.total*100:0,o.onProgress(v)});const p=new FormData;if(o.data)for(const[d,v]of Object.entries(o.data))ue(v)&&v.length?p.append(d,...v):p.append(d,v);p.append(o.filename,o.file,o.file.name),l.addEventListener("error",()=>{o.onError(oe(e,o,l))}),l.addEventListener("load",()=>{if(l.status<200||l.status>=300)return o.onError(oe(e,o,l));o.onSuccess(Ie(l))}),l.open(o.method,e,!0),o.withCredentials&&"withCredentials"in l&&(l.withCredentials=!0);const u=o.headers||{};if(u instanceof Headers)u.forEach((d,v)=>l.setRequestHeader(v,d));else for(const[d,v]of Object.entries(u))de(v)||l.setRequestHeader(d,String(v));return l.send(p),l},ve=["text","picture","picture-card"];let Xe=1;const Y=()=>Date.now()+Xe++,me=A({action:{type:String,default:"#"},headers:{type:m(Object)},method:{type:String,default:"post"},data:{type:m([Object,Function,Promise]),default:()=>J({})},multiple:{type:Boolean,default:!1},name:{type:String,default:"file"},drag:{type:Boolean,default:!1},withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:m(Array),default:()=>J([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:ve,default:"text"},httpRequest:{type:m(Function),default:Ve},disabled:Boolean,limit:Number}),Ge=A({...me,beforeUpload:{type:m(Function),default:k},beforeRemove:{type:m(Function)},onRemove:{type:m(Function),default:k},onChange:{type:m(Function),default:k},onPreview:{type:m(Function),default:k},onSuccess:{type:m(Function),default:k},onProgress:{type:m(Function),default:k},onError:{type:m(Function),default:k},onExceed:{type:m(Function),default:k},crossorigin:{type:m(String)}}),We=A({files:{type:m(Array),default:()=>J([])},disabled:{type:Boolean,default:!1},handlePreview:{type:m(Function),default:k},listType:{type:String,values:ve,default:"text"},crossorigin:{type:m(String)}}),Je={remove:o=>!!o},Ye=["onKeydown"],Qe=["src","crossorigin"],Ze=["onClick"],xe=["title"],et=["onClick"],tt=["onClick"],st=_({name:"ElUploadList"}),at=_({...st,props:We,emits:Je,setup(o,{emit:l}){const e=o,{t:p}=ke(),u=N("upload"),d=N("icon"),v=N("list"),E=M(),g=ce(!1),$=G(()=>[u.b("list"),u.bm("list",e.listType),u.is("disabled",e.disabled)]),F=f=>{l("remove",f)};return(f,n)=>(h(),L(Le,{tag:"ul",class:y(t($)),name:t(v).b()},{default:R(()=>[(h(!0),U(Ee,null,$e(f.files,s=>(h(),U("li",{key:s.uid||s.name,class:y([t(u).be("list","item"),t(u).is(s.status),{focusing:g.value}]),tabindex:"0",onKeydown:pe(i=>!t(E)&&F(s),["delete"]),onFocus:n[0]||(n[0]=i=>g.value=!0),onBlur:n[1]||(n[1]=i=>g.value=!1),onClick:n[2]||(n[2]=i=>g.value=!1)},[C(f.$slots,"default",{file:s},()=>[f.listType==="picture"||s.status!=="uploading"&&f.listType==="picture-card"?(h(),U("img",{key:0,class:y(t(u).be("list","item-thumbnail")),src:s.url,crossorigin:f.crossorigin,alt:""},null,10,Qe)):b("v-if",!0),s.status==="uploading"||f.listType!=="picture-card"?(h(),U("div",{key:1,class:y(t(u).be("list","item-info"))},[q("a",{class:y(t(u).be("list","item-name")),onClick:D(i=>f.handlePreview(s),["prevent"])},[S(t(O),{class:y(t(d).m("document"))},{default:R(()=>[S(t(Ce))]),_:1},8,["class"]),q("span",{class:y(t(u).be("list","item-file-name")),title:s.name},Z(s.name),11,xe)],10,Ze),s.status==="uploading"?(h(),L(t(Ne),{key:0,type:f.listType==="picture-card"?"circle":"line","stroke-width":f.listType==="picture-card"?6:2,percentage:Number(s.percentage),style:Re(f.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):b("v-if",!0)],2)):b("v-if",!0),q("label",{class:y(t(u).be("list","item-status-label"))},[f.listType==="text"?(h(),L(t(O),{key:0,class:y([t(d).m("upload-success"),t(d).m("circle-check")])},{default:R(()=>[S(t(we))]),_:1},8,["class"])):["picture-card","picture"].includes(f.listType)?(h(),L(t(O),{key:1,class:y([t(d).m("upload-success"),t(d).m("check")])},{default:R(()=>[S(t(Fe))]),_:1},8,["class"])):b("v-if",!0)],2),t(E)?b("v-if",!0):(h(),L(t(O),{key:2,class:y(t(d).m("close")),onClick:i=>F(s)},{default:R(()=>[S(t(Pe))]),_:2},1032,["class","onClick"])),b(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"),b(" This is a bug which needs to be fixed "),b(" TODO: Fix the incorrect navigation interaction "),t(E)?b("v-if",!0):(h(),U("i",{key:3,class:y(t(d).m("close-tip"))},Z(t(p)("el.upload.deleteTip")),3)),f.listType==="picture-card"?(h(),U("span",{key:4,class:y(t(u).be("list","item-actions"))},[q("span",{class:y(t(u).be("list","item-preview")),onClick:i=>f.handlePreview(s)},[S(t(O),{class:y(t(d).m("zoom-in"))},{default:R(()=>[S(t(Se))]),_:1},8,["class"])],10,et),t(E)?b("v-if",!0):(h(),U("span",{key:0,class:y(t(u).be("list","item-delete")),onClick:i=>F(s)},[S(t(O),{class:y(t(d).m("delete"))},{default:R(()=>[S(t(Ue))]),_:1},8,["class"])],10,tt))],2)):b("v-if",!0)])],42,Ye))),128)),C(f.$slots,"append")]),_:3},8,["class","name"]))}});var ne=K(at,[["__file","upload-list.vue"]]);const ot=A({disabled:{type:Boolean,default:!1}}),nt={file:o=>ue(o)},lt=["onDrop","onDragover"],ye="ElUploadDrag",rt=_({name:ye}),it=_({...rt,props:ot,emits:nt,setup(o,{emit:l}){_e(fe)||Q(ye,"usage: <el-upload><el-upload-dragger /></el-upload>");const p=N("upload"),u=ce(!1),d=M(),v=g=>{if(d.value)return;u.value=!1,g.stopPropagation();const $=Array.from(g.dataTransfer.files);l("file",$)},E=()=>{d.value||(u.value=!0)};return(g,$)=>(h(),U("div",{class:y([t(p).b("dragger"),t(p).is("dragover",u.value)]),onDrop:D(v,["prevent"]),onDragover:D(E,["prevent"]),onDragleave:$[0]||($[0]=D(F=>u.value=!1,["prevent"]))},[C(g.$slots,"default")],42,lt))}});var ut=K(it,[["__file","upload-dragger.vue"]]);const dt=A({...me,beforeUpload:{type:m(Function),default:k},onRemove:{type:m(Function),default:k},onStart:{type:m(Function),default:k},onSuccess:{type:m(Function),default:k},onProgress:{type:m(Function),default:k},onError:{type:m(Function),default:k},onExceed:{type:m(Function),default:k}}),ct=["onKeydown"],pt=["name","multiple","accept"],ft=_({name:"ElUploadContent",inheritAttrs:!1}),vt=_({...ft,props:dt,setup(o,{expose:l}){const e=o,p=N("upload"),u=M(),d=W({}),v=W(),E=a=>{if(a.length===0)return;const{autoUpload:c,limit:r,fileList:w,multiple:P,onStart:j,onExceed:H}=e;if(r&&w.length+a.length>r){H(a,w);return}P||(a=a.slice(0,1));for(const z of a){const B=z;B.uid=Y(),j(B),c&&g(B)}},g=async a=>{if(v.value.value="",!e.beforeUpload)return F(a);let c,r={};try{const P=e.data,j=e.beforeUpload(a);r=x(e.data)?ae(e.data):e.data,c=await j,x(e.data)&&Me(P,r)&&(r=ae(e.data))}catch{c=!1}if(c===!1){e.onRemove(a);return}let w=a;c instanceof Blob&&(c instanceof File?w=c:w=new File([c],a.name,{type:a.type})),F(Object.assign(w,{uid:a.uid}),r)},$=async(a,c)=>Oe(a)?a(c):a,F=async(a,c)=>{const{headers:r,data:w,method:P,withCredentials:j,name:H,action:z,onProgress:B,onSuccess:ge,onError:he,httpRequest:be}=e;try{c=await $(c??w,a)}catch{e.onRemove(a);return}const{uid:I}=a,V={headers:r||{},withCredentials:j,file:a,data:c,method:P,filename:H,action:z,onProgress:T=>{B(T,a)},onSuccess:T=>{ge(T,a),delete d.value[I]},onError:T=>{he(T,a),delete d.value[I]}},X=be(V);d.value[I]=X,X instanceof Promise&&X.then(V.onSuccess,V.onError)},f=a=>{const c=a.target.files;c&&E(Array.from(c))},n=()=>{u.value||(v.value.value="",v.value.click())},s=()=>{n()};return l({abort:a=>{Te(d.value).filter(a?([r])=>String(a.uid)===r:()=>!0).forEach(([r,w])=>{w instanceof XMLHttpRequest&&w.abort(),delete d.value[r]})},upload:g}),(a,c)=>(h(),U("div",{class:y([t(p).b(),t(p).m(a.listType),t(p).is("drag",a.drag)]),tabindex:"0",onClick:n,onKeydown:pe(D(s,["self"]),["enter","space"])},[a.drag?(h(),L(ut,{key:0,disabled:t(u),onFile:E},{default:R(()=>[C(a.$slots,"default")]),_:3},8,["disabled"])):C(a.$slots,"default",{key:1}),q("input",{ref_key:"inputRef",ref:v,class:y(t(p).e("input")),name:a.name,multiple:a.multiple,accept:a.accept,type:"file",onChange:f,onClick:c[0]||(c[0]=D(()=>{},["stop"]))},null,42,pt)],42,ct))}});var le=K(vt,[["__file","upload-content.vue"]]);const re="ElUpload",ie=o=>{var l;(l=o.url)!=null&&l.startsWith("blob:")&&URL.revokeObjectURL(o.url)},mt=(o,l)=>{const e=Ke(o,"fileList",void 0,{passive:!0}),p=n=>e.value.find(s=>s.uid===n.uid);function u(n){var s;(s=l.value)==null||s.abort(n)}function d(n=["ready","uploading","success","fail"]){e.value=e.value.filter(s=>!n.includes(s.status))}const v=(n,s)=>{const i=p(s);i&&(i.status="fail",e.value.splice(e.value.indexOf(i),1),o.onError(n,i,e.value),o.onChange(i,e.value))},E=(n,s)=>{const i=p(s);i&&(o.onProgress(n,i,e.value),i.status="uploading",i.percentage=Math.round(n.percent))},g=(n,s)=>{const i=p(s);i&&(i.status="success",i.response=n,o.onSuccess(n,i,e.value),o.onChange(i,e.value))},$=n=>{de(n.uid)&&(n.uid=Y());const s={name:n.name,percentage:0,status:"ready",size:n.size,raw:n,uid:n.uid};if(o.listType==="picture-card"||o.listType==="picture")try{s.url=URL.createObjectURL(n)}catch(i){Ae(re,i.message),o.onError(i,s,e.value)}e.value=[...e.value,s],o.onChange(s,e.value)},F=async n=>{const s=n instanceof File?p(n):n;s||Q(re,"file to be removed not found");const i=a=>{u(a);const c=e.value;c.splice(c.indexOf(a),1),o.onRemove(a,c),ie(a)};o.beforeRemove?await o.beforeRemove(s,e.value)!==!1&&i(s):i(s)};function f(){e.value.filter(({status:n})=>n==="ready").forEach(({raw:n})=>{var s;return n&&((s=l.value)==null?void 0:s.upload(n))})}return ee(()=>o.listType,n=>{n!=="picture-card"&&n!=="picture"||(e.value=e.value.map(s=>{const{raw:i,url:a}=s;if(!a&&i)try{s.url=URL.createObjectURL(i)}catch(c){o.onError(c,s,e.value)}return s}))}),ee(e,n=>{for(const s of n)s.uid||(s.uid=Y()),s.status||(s.status="success")},{immediate:!0,deep:!0}),{uploadFiles:e,abort:u,clearFiles:d,handleError:v,handleProgress:E,handleStart:$,handleSuccess:g,handleRemove:F,submit:f,revokeFileObjectURL:ie}},yt=_({name:"ElUpload"}),gt=_({...yt,props:Ge,setup(o,{expose:l}){const e=o,p=M(),u=W(),{abort:d,submit:v,clearFiles:E,uploadFiles:g,handleStart:$,handleError:F,handleRemove:f,handleSuccess:n,handleProgress:s,revokeFileObjectURL:i}=mt(e,u),a=G(()=>e.listType==="picture-card"),c=G(()=>({...e,fileList:g.value,onStart:$,onProgress:s,onSuccess:n,onError:F,onRemove:f}));return De(()=>{g.value.forEach(i)}),je(fe,{accept:Be(e,"accept")}),l({abort:d,submit:v,clearFiles:E,handleStart:$,handleRemove:f}),(r,w)=>(h(),U("div",null,[t(a)&&r.showFileList?(h(),L(ne,{key:0,disabled:t(p),"list-type":r.listType,files:t(g),crossorigin:r.crossorigin,"handle-preview":r.onPreview,onRemove:t(f)},te({append:R(()=>[S(le,se({ref_key:"uploadRef",ref:u},t(c)),{default:R(()=>[r.$slots.trigger?C(r.$slots,"trigger",{key:0}):b("v-if",!0),!r.$slots.trigger&&r.$slots.default?C(r.$slots,"default",{key:1}):b("v-if",!0)]),_:3},16)]),_:2},[r.$slots.file?{name:"default",fn:R(({file:P})=>[C(r.$slots,"file",{file:P})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):b("v-if",!0),!t(a)||t(a)&&!r.showFileList?(h(),L(le,se({key:1,ref_key:"uploadRef",ref:u},t(c)),{default:R(()=>[r.$slots.trigger?C(r.$slots,"trigger",{key:0}):b("v-if",!0),!r.$slots.trigger&&r.$slots.default?C(r.$slots,"default",{key:1}):b("v-if",!0)]),_:3},16)):b("v-if",!0),r.$slots.trigger?C(r.$slots,"default",{key:2}):b("v-if",!0),C(r.$slots,"tip"),!t(a)&&r.showFileList?(h(),L(ne,{key:3,disabled:t(p),"list-type":r.listType,files:t(g),crossorigin:r.crossorigin,"handle-preview":r.onPreview,onRemove:t(f)},te({_:2},[r.$slots.file?{name:"default",fn:R(({file:P})=>[C(r.$slots,"file",{file:P})])}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):b("v-if",!0)]))}});var ht=K(gt,[["__file","upload.vue"]]);const St=qe(ht);export{St as E,Y as g};