1 |
- import{aD as fe,aa as de,aE as me,l as w,aA as ye}from"./index.DJRppC5x.js";import{a as we,c as ve,o as v,J as P,M as ge,K as G,O as z,ab as he,ac as be,H as K,b as xe,G as Le,r as y,f as g,w as Ue,t as Te}from"./vue.D1BjjNmv.js";const Fe=we({name:"FsFileUploader",inheritAttrs:!1,props:{modelValue:{},limit:{type:Number},sizeLimit:{type:[Number,Object]},pixelLimit:{type:Object,required:!1},showLimitTip:{type:Boolean,default:!0},buildUrl:{default(){return l=>l}},buildUrls:{},button:{type:Object},listType:{type:String},beforeUpload:{type:Function},beforeUploadRequest:{type:Function},uploader:{type:Object},preview:{type:Object},valueType:{type:String,default:"url"},getFileName:{}},emits:["change","update:modelValue","success","exceed","remove"],setup(l,r){const{ui:a}=de(),{t:c}=me(),n=y([]),h=y(),f=y(),_=g(()=>l.getFileName||(async e=>{if(typeof e!="string")return console.warn("获取文件名失败,请配置getFileName"),e;const t=e.substring(e.lastIndexOf("/")+1),i=t.indexOf("?");return i>=0?t.substring(0,i):t}));function b(e){return l.valueType==="object"?e:e[l.valueType]}function H(e){const t=[];for(let i of e)t.push(b(i));return t}async function J(e){const t=[];for(let i of e){let o;typeof i=="string"||typeof i=="number"||typeof i=="boolean"||i instanceof Date?(o={url:void 0,key:i,value:i},l.valueType!=="object"&&(o[l.valueType]=i)):o=i,o[a.upload.id]||(o[a.upload.id]=Math.random()+""),o.status||(o.status=a.upload.status.success),t.push(o)}await j(t);for(const i of t)if(!i.name){const o=i.url||i.value;i.name=await _.value(o,i)}return t}async function B(e){const t=[];for(let i of e){const o=i.response||i.fsRes,s={size:i.size,name:i.name,uid:i.uid,...o??i};t.push(s)}return await j(t),H(t)}async function x(e){const t=[];if(e==null||e.length===0){n.value=t;return}if(e instanceof Array)for(let o of e)t.push(o);else t.push(e);const i=await J(t);k(i)}async function Q(){await V.onChange(),await V.onBlur()}async function W(e){let t=await X(e);O(t),Te(async()=>{await Q()})}async function X(e){if(e==null||e.length===0)return l.limit===1?null:[];if(l.limit===1)return(await B(e))[0];const t=[];for(let i of e)a.upload.isSuccess(i)&&t.push(i);return await B(t)}async function j(e){let t=e.filter(i=>i.url==null);if(l.buildUrls){const i=t.map(s=>b(s)),o=await l.buildUrls(i);for(let s=0;s<t.length;s++)t[s].url=o[s]}else if(l.buildUrl)for(let i of t)i.url=await l.buildUrl(b(i));else for(let i of t)i.url=i.value||i.key}function I(e){r.emit("change",e)}function O(e){h.value=e,r.emit("update:modelValue",e)}const V=a.formItem.injectFormItemContext();Ue(()=>l.modelValue,async e=>{I(e),e!==h.value&&await x(e)}),x(l.modelValue);function Y(){return n.value.filter(e=>e.status===a.upload.status.uploading).length>0}function d(e,t){k(t),W(t)}function L(e,t,i){r.emit("success",{res:e,file:t,fileList:i}),d(t,i)}function E(e){let t;return e>1024*1024*1024?t=(e/(1024*1024*1024)).toFixed(2)+"G":e>1024*1024?t=(e/(1024*1024)).toFixed(2)+"M":t=Math.round(e/1024)+"K",t}const S=(e=!1)=>{const t=e?a.upload.limitAdd:0;return l.limit>0&&n.value.length>=l.limit+t};function Z(){l.showLimitTip&&a.message.warn(c("fs.extends.fileUploader.limitTip",[l.limit]))}function $(){if(S(!0))throw Z(),r.emit("exceed",{fileList:n.value,limit:l.limit}),new Error("文件数量超限")}function ee(e){if(l.sizeLimit!=null){let t=l.sizeLimit,i=null;if(typeof l.sizeLimit=="number"?i=(o,s)=>{const p=E(s),u=E(e.size);a.message.warn(c("fs.extends.fileUploader.sizeLimitTip",[p,u]))}:(t=l.sizeLimit.limit,i=l.sizeLimit.tip),e.size>t){let o="文件大小超过限制,当前文件大小:"+e.size/1024+"k";throw i(e.size,t),new Error(o)}}}const te=e=>{let t=0,i=0,o="";if(l.pixelLimit)Array.isArray(l.pixelLimit)?(t=l.pixelLimit[0],i=l.pixelLimit[1]||l.pixelLimit[0]||0,o=l.pixelLimit[2]||""):typeof l.pixelLimit=="object"&&(t=l.pixelLimit.width||0,i=l.pixelLimit.height||0,o=l.pixelLimit.tip||"");else return Promise.resolve(!0);let s=o||c("fs.extends.fileUploader.pixelLimitTip",[t,i]);return new Promise((p,u)=>{let q=new FileReader;q.onload=pe=>{var D;let M=(D=pe.target)==null?void 0:D.result,m=new Image;m.onload=function(){t&&m.width>t||i&&m.height>i?(a.message.warn(s),u(s)):p(!0)},m.onerror=function(Pe){a.message.warn(c("fs.extends.fileUploader.loadError")),u(c("fs.extends.fileUploader.loadError"))},M&&(m.src=M)},q.readAsDataURL(e)})},U=async(e,t=n.value)=>{if(!(l.beforeUpload&&await l.beforeUpload({file:e,fileList:n.value})===!1))try{$(),ee(e),F()&&await te(e)}catch{return!1}};function k(e){n.value=e}async function ie(e){e.options=l.uploader||{};const{getUploaderImpl:t}=ye();let i=await t(e.options.type);if(i==null)throw a.message.warn("Sorry,The uploader component is not ready yet"),new Error("Sorry,The component is not ready yet");return await(i==null?void 0:i.upload(e))}async function T(e){l.beforeUploadRequest&&await l.beforeUploadRequest(e);const{file:t,onProgress:i,onSuccess:o,onError:s}=e,p={file:t,fileName:t.name,onProgress:i};try{const u=await ie(p);o(u)}catch(u){console.error("上传失败",u),s(u)}}const le=g(()=>se()?{is:"FsIcon",icon:a.icons.plus}:{is:"FsButton",icon:a.icons.upload,text:c("fs.extends.fileUploader.text"),...l.button}),A=y(!1),N=y(),oe=g(()=>({...a.dialog.footer(),...l.preview}));function ae(e){return new Promise((t,i)=>{const o=new FileReader;o.readAsDataURL(e),o.onload=()=>t(o.result),o.onerror=s=>i(s)})}function F(){return l.listType===a.upload.typeImageCard||l.listType===a.upload.typeImage}function se(){return l.listType===a.upload.typeImageCard}const R=async e=>{var t,i;if(!F()){let o;e.url?o=e.url:a.type==="antdv"?o=(t=e.response)==null?void 0:t.url:a.type==="element"?o=(i=e.fsRes)==null?void 0:i.url:o=e.url,window.open(o,"_blank")}!e.url&&!e.preview&&e.originFileObj&&(e.preview=await ae(e.originFileObj)),N.value=e.url||e.preview,A.value=!0};function re(){const e={customRequest:T,beforeUpload:U,limit:l.limit,listType:l.listType,onChange:t=>{const{file:i,fileList:o}=t;d(i,o),i.status==="done"&&L(i.response,i,o)},onPreview:R};return l.limit!=null&&r.attrs.maxCount==null&&(e.maxCount=l.limit),e}function ne(){return{action:"",listType:l.listType,limit:l.limit,beforeUpload:U,httpRequest:T,onExceed:e=>{r.emit("exceed",e)},onRemove:(e,t)=>{d(e,t),r.emit("remove",e,t)},onChange:(e,t)=>{d(e,t)},onSuccess:(e,t,i)=>{e!=null&&(t.response=e,t.fsRes=e,L(e,t,i))},onPreview:R}}const C={};function ue(){function e(t){let i=t.value||t;i=w.cloneDeep(i);for(let o of i){const s=C[o.id];s&&w.merge(o,s)}return i}return{action:"",limit:l.limit,listType:l.listType,onBeforeUpload:async({file:t,fileList:i})=>U(t,i),customRequest:t=>{const i=t.file;T({...t,file:i.file,onSuccess:async o=>{const s=l.valueType==="object"?o:o[l.valueType];o.url=await l.buildUrl(s),w.merge(i,o),C[i.id]={...o,fsRes:o},t.onFinish(i)},onProgress:o=>{t.onProgress(o)}})},onExceed:t=>{r.emit("exceed",t)},onRemove:t=>{r.emit("remove",t)},onChange:t=>{const{event:i,file:o,fileList:s}=t,p=e(s);d(o,[...p])},onFinish:t=>{const i=C[t.id];i&&w.merge(t,i);const o=e(n);L(i,t,o)},onPreview:R}}const ce=g(()=>{let e=null;return a.type==="antdv"?e=re():a.type==="element"?e=ne():e=ue(),{...e,...r.attrs}});return{ui:a,fileList:n,fileUploaderRef:f,initValue:x,onChange:I,onInput:O,hasUploading:Y,isPicture:F,computedFileSelectBtn:le,previewVisible:A,previewImage:N,computedPreview:oe,computedOnLimit:S,computedBinding:ce}}}),Re=["src"];function Ce(l,r,a,c,n,h){return v(),ve("div",{class:Le(["fs-file-uploader",{"fs-file-uploader-limit":l.computedOnLimit()}])},[(v(),P(z(l.ui.upload.name),K({ref:"fileUploaderRef",fileList:l.fileList,"onUpdate:fileList":r[0]||(r[0]=f=>l.fileList=f)},l.computedBinding),{default:G(()=>[(v(),P(z(l.computedFileSelectBtn.is),he(be(l.computedFileSelectBtn)),null,16))]),_:1},16,["fileList"])),l.isPicture()?(v(),P(z(l.ui.dialog.name),K({key:0,[l.ui.dialog.visible]:l.previewVisible,["onUpdate:"+l.ui.dialog.visible]:r[1]||(r[1]=f=>l.previewVisible=f)},l.computedPreview),{default:G(()=>[xe("img",{style:{"max-width":"100%","max-height":"100%"},src:l.previewImage},null,8,Re)]),_:1},16)):ge("",!0)],2)}const je=fe(Fe,[["render",Ce]]);export{je as default};
|