1 |
- import{aj as pe,B as de,ak as me,ag as P,w as ye,af as we}from"./index.DXluV3p1.js";import{a as ve,c as ge,o as w,K as z,O as he,L as _,P as C,ab as be,ac as xe,H as G,b as Le,G as Ue,r as y,f as v,w as Te,t as Fe}from"./vue.fY72QXCX.js";const Re=ve({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([]),g=y(),p=y(),H=v(()=>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 h(e){return l.valueType==="object"?e:e[l.valueType]}function $(e){const t=[];for(let i of e)t.push(h(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 V(t);for(const i of t)if(!i.name){const o=i.url||i.value;i.name=await H.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 V(t),$(t)}async function b(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);N(i)}async function Q(){await k.onChange(),await k.onBlur()}async function j(e){let t=await W(e);O(t),Fe(async()=>{await Q()})}async function W(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 V(e){let t=e.filter(i=>i.url==null);if(l.buildUrls){const i=t.map(s=>h(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(h(i));else for(let i of t)i.url=i.value||i.key}function I(e){r.emit("change",e)}function O(e){g.value=e,r.emit("update:modelValue",e)}const k=a.formItem.injectFormItemContext();Te(()=>l.modelValue,async e=>{I(e),e!==g.value&&await b(e)}),b(l.modelValue);function X(){return n.value.filter(e=>e.status===a.upload.status.uploading).length>0}function d(e,t){N(t),j(t)}function x(e,t,i){r.emit("success",{res:e,file:t,fileList:i}),d(t,i)}function S(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 E=(e=!1)=>{const t=e?a.upload.limitAdd:0;return l.limit>0&&n.value.length>=l.limit+t};function Y(){l.showLimitTip&&a.message.warn(c("fs.extends.fileUploader.limitTip",[l.limit]))}function Z(){if(E(!0))throw Y(),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 f=S(s),u=S(e.size);a.message.warn(c("fs.extends.fileUploader.sizeLimitTip",[f,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((f,u)=>{let D=new FileReader;D.onload=fe=>{var M;let K=(M=fe.target)==null?void 0:M.result,m=new Image;m.onload=function(){t&&m.width>t||i&&m.height>i?(a.message.warn(s),u(s)):f(!0)},m.onerror=function(Ce){a.message.warn(c("fs.extends.fileUploader.loadError")),u(c("fs.extends.fileUploader.loadError"))},K&&(m.src=K)},D.readAsDataURL(e)})},L=async(e,t=n.value)=>{if(l.beforeUpload&&await l.beforeUpload({file:e,fileList:n.value})===!1)return!1;try{Z(),ee(e),T()&&await te(e)}catch{return!1}};function N(e){n.value=e}async function ie(e){e.options=l.uploader||{};const{getUploaderImpl:t}=we();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 U(e){l.beforeUploadRequest&&await l.beforeUploadRequest(e);const{file:t,onProgress:i,onSuccess:o,onError:s}=e,f={file:t,fileName:t.name,onProgress:i};try{const u=await ie(f);o(u)}catch(u){console.error("上传失败",u),s(u)}}const le=v(()=>se()?{is:"FsIcon",icon:a.icons.plus}:{is:"FsButton",icon:a.icons.upload,text:c("fs.extends.fileUploader.text"),...l.button}),q=y(!1),A=y(),oe=v(()=>({...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 T(){return l.listType===a.upload.typeImageCard||l.listType===a.upload.typeImage}function se(){return l.listType===a.upload.typeImageCard}const F=async e=>{var t,i;if(!T()){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)),A.value=e.url||e.preview,q.value=!0};function re(){const e={customRequest:U,beforeUpload:L,limit:l.limit,listType:l.listType,onChange:t=>{const{file:i,fileList:o}=t;d(i,o),i.status==="done"&&x(i.response,i,o)},onPreview:F};return l.limit!=null&&r.attrs.maxCount==null&&(e.maxCount=l.limit),e}function ne(){return{action:"",listType:l.listType,limit:l.limit,beforeUpload:L,httpRequest:U,onExceed:e=>{r.emit("exceed",e,n)},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,x(e,t,i))},onPreview:F}}const R={};function ue(){function e(t){let i=t.value||t;i=ye(i);for(let o of i){const s=R[o.id];s&&P(o,s)}return i}return{action:"",limit:l.limit,listType:l.listType,onBeforeUpload:async({file:t,fileList:i})=>L(t,i),customRequest:t=>{const i=t.file;U({...t,file:i.file,onSuccess:async o=>{const s=l.valueType==="object"?o:o[l.valueType];o.url=await l.buildUrl(s),P(i,o),R[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,f=e(s);d(o,[...f])},onFinish:t=>{const i=R[t.id];i&&P(t,i);const o=e(n);x(i,t,o)},onPreview:F}}const ce=v(()=>{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:p,initValue:b,onChange:I,onInput:O,hasUploading:X,isPicture:T,computedFileSelectBtn:le,previewVisible:q,previewImage:A,computedPreview:oe,computedOnLimit:E,computedBinding:ce,emitValue:j}}}),Pe=["src"];function ze(l,r,a,c,n,g){return w(),ge("div",{class:Ue(["fs-file-uploader",{"fs-file-uploader-limit":l.computedOnLimit()}])},[(w(),z(C(l.ui.upload.name),G({ref:"fileUploaderRef","file-list":l.fileList,"onUpdate:fileList":r[0]||(r[0]=p=>l.fileList=p)},l.computedBinding),{default:_(()=>[(w(),z(C(l.computedFileSelectBtn.is),be(xe(l.computedFileSelectBtn)),null,16))]),_:1},16,["file-list"])),l.isPicture()?(w(),z(C(l.ui.dialog.name),G({key:0,[l.ui.dialog.visible]:l.previewVisible,["onUpdate:"+l.ui.dialog.visible]:r[1]||(r[1]=p=>l.previewVisible=p)},l.computedPreview),{default:_(()=>[Le("img",{style:{"max-width":"100%","max-height":"100%"},src:l.previewImage},null,8,Pe)]),_:1},16)):he("",!0)],2)}const Ve=pe(Re,[["render",ze]]);export{Ve as default};
|