1 |
- import{x as q,N as H,d as V,E as P,aX as J,i as r,L as y,ac as K,b9 as D,K as W,aJ as $,H as F,U,S as k,y as x,ax as Q,W as Y,ag as Z,a0 as ee,aC as ae,M as ne,az as I,z as oe,V as re,D as le}from"./index.2557005b.js";import{I as ie}from"./index.0214317a.js";import{I as te}from"./index.ba997053.js";const[de,l,se]=q("uploader"),A=e=>Array.isArray(e)?e:[e];function L(e,n){return new Promise(i=>{if(n==="file"){i();return}const s=new FileReader;s.onload=v=>{i(v.target.result)},n==="dataUrl"?s.readAsDataURL(e):n==="text"&&s.readAsText(e)})}function j(e,n){return A(e).some(i=>i.file?H(n)?n(i.file):i.file.size>n:!1)}function ue(e,n){const i=[],s=[];return e.forEach(v=>{j(v,n)?s.push(v):i.push(v)}),{valid:i,invalid:s}}const ce=/\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i,ve=e=>ce.test(e);function O(e){return e.isImage?!0:e.file&&e.file.type?e.file.type.indexOf("image")===0:e.url?ve(e.url):typeof e.content=="string"?e.content.indexOf("data:image")===0:!1}var pe=V({props:{name:P,item:J(Object),index:Number,imageFit:String,lazyLoad:Boolean,deletable:Boolean,previewSize:P,beforeDelete:Function},emits:["delete","preview"],setup(e,{emit:n,slots:i}){const s=()=>{const{status:t,message:c}=e.item;if(t==="uploading"||t==="failed"){const h=t==="failed"?r(y,{name:"close",class:l("mask-icon")},null):r(K,{class:l("loading")},null),z=W(c)&&c!=="";return r("div",{class:l("mask")},[h,z&&r("div",{class:l("mask-message")},[c])])}},v=t=>{const{name:c,item:h,index:z,beforeDelete:_}=e;t.stopPropagation(),$(_,{args:[h,{name:c,index:z}],done:()=>n("delete")})},p=()=>n("preview"),m=()=>{if(e.deletable&&e.item.status!=="uploading")return r("div",{role:"button",class:l("preview-delete"),tabindex:0,"aria-label":se("delete"),onClick:v},[r(y,{name:"cross",class:l("preview-delete-icon")},null)])},b=()=>{if(i["preview-cover"]){const{index:t,item:c}=e;return r("div",{class:l("preview-cover")},[i["preview-cover"](F({index:t},c))])}},w=()=>{const{item:t}=e;return O(t)?r(te,{fit:e.imageFit,src:t.content||t.url,class:l("preview-image"),width:e.previewSize,height:e.previewSize,lazyLoad:e.lazyLoad,onClick:p},{default:b}):r("div",{class:l("file"),style:D(e.previewSize)},[r(y,{class:l("file-icon"),name:"description"},null),r("div",{class:[l("file-name"),"van-ellipsis"]},[t.file?t.file.name:t.url]),b()])};return()=>r("div",{class:l("preview")},[w(),s(),m()])}});const fe={name:U(""),accept:k("image/*"),capture:String,multiple:Boolean,disabled:Boolean,readonly:Boolean,lazyLoad:Boolean,maxCount:U(1/0),imageFit:k("cover"),resultType:k("dataUrl"),uploadIcon:k("photograph"),uploadText:String,deletable:x,afterRead:Function,showUpload:x,modelValue:Q(),beforeRead:Function,beforeDelete:Function,previewSize:P,previewImage:x,previewOptions:Object,previewFullImage:x,maxSize:{type:[Number,String,Function],default:1/0}};var ge=V({name:de,props:fe,emits:["delete","oversize","click-upload","close-preview","click-preview","update:modelValue"],setup(e,{emit:n,slots:i}){const s=Y(),v=[],p=(a=e.modelValue.length)=>({name:e.name,index:a}),m=()=>{s.value&&(s.value.value="")},b=a=>{if(m(),j(a,e.maxSize))if(Array.isArray(a)){const o=ue(a,e.maxSize);if(a=o.valid,n("oversize",o.invalid,p()),!a.length)return}else{n("oversize",a,p());return}a=re(a),n("update:modelValue",[...e.modelValue,...A(a)]),e.afterRead&&e.afterRead(a,p())},w=a=>{const{maxCount:o,modelValue:u,resultType:d}=e;if(Array.isArray(a)){const f=+o-u.length;a.length>f&&(a=a.slice(0,f)),Promise.all(a.map(g=>L(g,d))).then(g=>{const G=a.map((X,R)=>{const S={file:X,status:"",message:""};return g[R]&&(S.content=g[R]),S});b(G)})}else L(a,d).then(f=>{const g={file:a,status:"",message:""};f&&(g.content=f),b(g)})},t=a=>{const{files:o}=a.target;if(e.disabled||!o||!o.length)return;const u=o.length===1?o[0]:[].slice.call(o);if(e.beforeRead){const d=e.beforeRead(u,p());if(!d){m();return}if(ne(d)){d.then(f=>{w(f||u)}).catch(m);return}}w(u)};let c;const h=()=>n("close-preview"),z=a=>{if(e.previewFullImage){const o=e.modelValue.filter(O),u=o.map(d=>(d.file&&!d.url&&(d.url=URL.createObjectURL(d.file),v.push(d.url)),d.url)).filter(Boolean);c=ie(F({images:u,startPosition:o.indexOf(a),onClose:h},e.previewOptions))}},_=()=>{c&&c.close()},B=(a,o)=>{const u=e.modelValue.slice(0);u.splice(o,1),n("update:modelValue",u),n("delete",a,p(o))},E=(a,o)=>{const u=["imageFit","deletable","previewSize","beforeDelete"],d=F(I(e,u),I(a,u,!0));return r(pe,oe({item:a,index:o,onClick:()=>n("click-preview",a,p(o)),onDelete:()=>B(a,o),onPreview:()=>z(a)},I(e,["name","lazyLoad"]),d),{"preview-cover":i["preview-cover"]})},N=()=>{if(e.previewImage)return e.modelValue.map(E)},C=a=>n("click-upload",a),M=()=>{if(e.modelValue.length>=e.maxCount||!e.showUpload)return;const a=e.readonly?null:r("input",{ref:s,type:"file",class:l("input"),accept:e.accept,capture:e.capture,multiple:e.multiple,disabled:e.disabled,onChange:t},null);return i.default?r("div",{class:l("input-wrapper"),onClick:C},[i.default(),a]):r("div",{class:l("upload",{readonly:e.readonly}),style:D(e.previewSize),onClick:C},[r(y,{name:e.uploadIcon,class:l("upload-icon")},null),e.uploadText&&r("span",{class:l("upload-text")},[e.uploadText]),a])},T=()=>{s.value&&!e.disabled&&s.value.click()};return Z(()=>{v.forEach(a=>URL.revokeObjectURL(a))}),ee({chooseFile:T,closeImagePreview:_}),ae(()=>e.modelValue),()=>r("div",{class:l()},[r("div",{class:l("wrapper",{disabled:e.disabled})},[N(),M()])])}});const he=le(ge);export{he as U};
|