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