index-8fbf9fdc.js 5.9 KB

1
  1. import{J as W,aT as T,aQ as Y,d as E,a6 as Z,au as ee,g as r,l as F,ap as ae,I as le,bb as M,ay as ne,aa as te,ab as C,c as x,b0 as re,Q as ie,as as oe,a7 as D,R as I,a1 as R,aA as se,V as ce,v as O,x as B,aP as ue,aw as U,ah as de,r as fe,q as ve}from"./index-b3d5c748.js";import{s as ge}from"./function-call-6cb5f664.js";const[me,i,we]=W("uploader");function N(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 _(e,n){return T(e).some(o=>o.file?Y(n)?n(o.file):o.file.size>+n:!1)}function pe(e,n){const o=[],c=[];return e.forEach(v=>{_(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 q(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=E({props:{name:Z,item:ee(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 g=t==="failed"?r(F,{name:"close",class:i("mask-icon")},null):r(ae,{class:i("loading")},null),d=ne(f)&&f!=="";return r("div",{class:i("mask")},[g,d&&r("div",{class:i("mask-message")},[f])])}},v=t=>{const{name:f,item:g,index:d,beforeDelete:P}=e;t.stopPropagation(),te(P,{args:[g,{name:f,index:d}],done:()=>n("delete")})},m=()=>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(F,{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"](C({index:t},f))])}},k=()=>{const{item:t,lazyLoad:f,imageFit:g,previewSize:d,reupload:P}=e;return q(t)?r(le,{fit:g,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:P?y:m},{default:h}):r("div",{class:i("file"),style:M(e.previewSize)},[r(F,{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")},[k(),c(),w()])}});const Pe={name:D(""),accept:I("image/*"),capture:String,multiple:Boolean,disabled:Boolean,readonly:Boolean,lazyLoad:Boolean,maxCount:D(1/0),imageFit:I("cover"),resultType:I("dataUrl"),uploadIcon:I("photograph"),uploadText:String,deletable:R,reupload:Boolean,afterRead:Function,showUpload:R,modelValue:se(),beforeRead:Function,beforeDelete:Function,previewSize:[Number,String,Array],previewImage:R,previewOptions:Object,previewFullImage:R,maxSize:{type:[Number,String,Function],default:1/0}};var ke=E({name:me,props:Pe,emits:["delete","oversize","clickUpload","closePreview","clickPreview","clickReupload","update:modelValue"],setup(e,{emit:n,slots:o}){const c=x(),v=[],m=x(-1),y=x(!1),w=(a=e.modelValue.length)=>({name:e.name,index:a}),h=()=>{c.value&&(c.value.value="")},k=a=>{if(h(),_(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=fe(a),m.value>-1){const l=[...e.modelValue];l.splice(m.value,1,a),n("update:modelValue",l),m.value=-1}else n("update:modelValue",[...e.modelValue,...T(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=>N(b,s))).then(b=>{const K=a.map((V,L)=>{const j={file:V,status:"",message:"",objectUrl:URL.createObjectURL(V)};return b[L]&&(j.content=b[L]),j});k(K)})}else N(a,s).then(p=>{const b={file:a,status:"",message:"",objectUrl:URL.createObjectURL(a)};p&&(b.content=p),k(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(ue(s)){s.then(p=>{t(p||u)}).catch(h);return}}t(u)};let g;const d=()=>n("closePreview"),P=a=>{if(e.previewFullImage){const l=e.modelValue.filter(q),u=l.map(s=>(s.objectUrl&&!s.url&&s.status!=="failed"&&(s.url=s.objectUrl,v.push(s.url)),s.url)).filter(Boolean);g=ge(C({images:u,startPosition:l.indexOf(a),onClose:d},e.previewOptions))}},G=()=>{g&&g.close()},Q=(a,l)=>{const u=e.modelValue.slice(0);u.splice(l,1),n("update:modelValue",u),n("delete",a,w(l))},z=a=>{y.value=!0,m.value=a,ce(()=>S())},J=()=>{y.value||(m.value=-1),y.value=!1},X=(a,l)=>{const u=["imageFit","deletable","reupload","previewSize","beforeDelete"],s=C(U(e,u),U(a,u,!0));return r(ye,de({item:a,index:l,onClick:()=>n(e.reupload?"clickReupload":"clickPreview",a,w(l)),onDelete:()=>Q(a,l),onPreview:()=>P(a),onReupload:()=>z(l)},U(e,["name","lazyLoad"]),s),U(o,["preview-cover","preview-delete"]))},$=()=>{if(e.previewImage)return e.modelValue.map(X)},A=a=>n("clickUpload",a),H=()=>{const a=e.modelValue.length<+e.maxCount,l=e.readonly?null:r("input",{ref:c,type:"file",class:i("input"),accept:e.accept,capture:e.capture,multiple:e.multiple&&m.value===-1,disabled:e.disabled,onChange:f,onClick:J},null);return o.default?O(r("div",{class:i("input-wrapper"),onClick:A},[o.default(),l]),[[B,a]]):O(r("div",{class:i("upload",{readonly:e.readonly}),style:M(e.previewSize),onClick:A},[r(F,{name:e.uploadIcon,class:i("upload-icon")},null),e.uploadText&&r("span",{class:i("upload-text")},[e.uploadText]),l]),[[B,e.showUpload&&a]])},S=()=>{c.value&&!e.disabled&&c.value.click()};return re(()=>{v.forEach(a=>URL.revokeObjectURL(a))}),ie({chooseFile:S,reuploadFile:z,closeImagePreview:G}),oe(()=>e.modelValue),()=>r("div",{class:i()},[r("div",{class:i("wrapper",{disabled:e.disabled})},[$(),H()])])}});const Ue=ve(ke);export{Ue as U};