1
0
mirror of https://gitee.com/vant-contrib/vant.git synced 2025-04-06 03:57:59 +08:00
vant/v3/assets/index.173f48e9.js
2024-04-20 08:49:23 +00:00

2 lines
5.7 KiB
JavaScript

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