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