UNPKG

vuux

Version:

Vue3 Nuxt3 Nuxt4 组件库

2 lines (1 loc) 2.9 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("vue"),k=require("./useUploadAjax.cjs"),O=require("../utils.cjs"),h=require("@vuux/utils"),m=require("../../../Message/index.cjs"),P=require("../../../ImagePreview/index.cjs"),R=(t,x,r)=>{const v=c.ref(!1),g=c.ref(!1),e=c.ref([]),f=new Map,w=c.computed(()=>e.value.length<t.limit),F=()=>{t.disabled||x.value&&x.value.click()},b=()=>{t.disabled||(v.value=!0)},I=()=>{t.disabled||(v.value=!1)},q=a=>{const l=e.value.findIndex(u=>u.uid===a.uid);l!==-1&&e.value.splice(l,1,{...e.value[l],status:"uploading",percent:0});const n=u=>{f.delete(u),r("change",e.value)},o=async u=>{g.value=!0,await h.Utils.wait(2e3);const s=e.value.findIndex(i=>i.uid===u);s!==-1&&e.value[s]?.status==="error"&&(e.value.splice(s,1),r("change",e.value),r("update:files",e.value)),g.value=!1};if(!a.uid)return;const U=k.UploadRequest({uid:a.uid,uploadUrl:t.action,selectedFile:a.raw,headers:t.headers,data:t.data,name:t.name,onProgress:(u,s)=>{const i=e.value.findIndex(d=>d.uid===u);i!==-1&&(e.value[i]={...e.value[i],percent:s}),r("progress",Math.round(s))},onSuccess:(u,s)=>{const i=e.value.findIndex(d=>d.uid===u);i!==-1&&(e.value[i]={...e.value[i],status:"success",response:s}),r("success",s,a),n(u)},onError:(u,s)=>{const i=e.value.findIndex(d=>d.uid===u);i!==-1&&(e.value[i]={...e.value[i],status:"error",error:s}),r("error",a),n(u),o(u)}});f.set(a.uid??h.Utils.snowflakeId().toString(),U)},M=async a=>{let l=e.value.length;for(const n of a){if(t.maxSizeMb&&n.size>t.maxSizeMb*1024*1024){m.Message.error(`文件"${n.name}"超过最大限制${t.maxSizeMb}MB`);continue}if(t.limit&&l>=t.limit){m.Message.error("已达到最大上传数量");break}if(t.beforeUpload&&!await t.beforeUpload(n))continue;const o={uid:h.Utils.snowflakeId().toString(),name:n.name,size:n.size,status:"ready",percent:0,raw:n,url:URL.createObjectURL(n)};t.multiple?e.value.push(o):e.value=[o],l++,q(o)}},S=a=>{if(t.disabled)return;v.value=!1;const l=Array.from(a.dataTransfer?.files||[]);M(l)},y=a=>{const l=a.target,n=Array.from(l.files||[]);if(n.length>t.limit){m.Message.error("上传最大数量为["+t.limit+"]");return}M(n),l.value=""},z=a=>{const l=e.value.findIndex(n=>n.uid===a.uid);if(l!==-1){if(a.status==="uploading"&&a.uid){const n=f.get(a.uid);n?.cancel&&n.cancel(),f.delete(a.uid)}e.value.splice(l,1),r("change",e.value),r("delete",a),r("update:files",e.value)}},B=a=>{if(a===0)return"0 Bytes";const l=1024,n=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(a)/Math.log(l));return parseFloat((a/Math.pow(l,o)).toFixed(2))+" "+n[o]},D=a=>{P.ImagePreview(a)};return c.watch(()=>t.files,a=>{e.value=[...O.formattingData(a)]},{deep:!0}),{isDragging:v,isError:g,uploadFiles:e,isDisplay:w,handleImagePreview:D,onFileInput:F,handleDragOver:b,handleDragLeave:I,handleDrop:S,handleFileChange:y,removeFile:z,formatFileSize:B}};exports.useUpload=R;