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