mirror of
https://github.com/501351981/vue-office.git
synced 2025-06-15 07:00:00 +08:00
2 lines
3.4 KiB
JavaScript
2 lines
3.4 KiB
JavaScript
import{l as C,r as R,S as B,a as x,g,b as $,t as L,c as O}from"./hack-67811302.js";import{d as q}from"./url-de9b02cf.js";import{d as F,_ as V,r as w,o as W,n as j,h as I,w as M,a as y,c as N,b as P,i as A,e as H,f as U,j as z,g as G,u as J}from"./index-5d373288.js";import{P as K,u as k}from"./PreviewWrapper-a5ea54f2.js";import"./_commonjs-dynamic-modules-302442b1.js";const T={minColLength:20},Q=F({name:"VueOfficeExcel",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({...T})}},emits:["rendered","error"],setup(e,{emit:d}){const l=w(null),r=w(null);let s={_worksheets:[]},c=[],i=0,o=null,t=null,f=null,m=null;function p(u){m=u,$(u).then(n=>{if(!n._worksheets||n._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");e.options.beforeTransformData&&typeof e.options.beforeTransformData=="function"&&(n=e.options.beforeTransformData(n));let{workbookData:h,medias:b,workbookSource:a}=L(n,{...T,...e.options});e.options.transformData&&typeof e.options.transformData=="function"&&(h=e.options.transformData(h)),c=b,s=a,f=null,i=0,O(),t.loadData(h),x(o,c,s._worksheets[i],f,e.options),d("rendered")}).catch(n=>{console.warn(n),c=[],s={_worksheets:[]},O(),t&&t.loadData({}),d("error",n)})}const v=C.debounce(R,200).bind(this,r.value),D=new MutationObserver(v),E={attributes:!0,childList:!0,subtree:!0};W(()=>{j(()=>{D.observe(r.value,E),v(r),t=new B(r.value,{mode:"read",showToolbar:!1,showContextmenu:e.options.showContextmenu||!1,view:{height:()=>l.value&&l.value.clientHeight||300,width:()=>l.value&&l.value.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let u=t.bottombar.swapFunc;t.bottombar.swapFunc=function(a){u.call(t.bottombar,a),i=a,setTimeout(()=>{t.reRender(),x(o,c,s._worksheets[i],f,e.options)})};let n=t.sheet.editor.clear;t.sheet.editor.clear=function(...a){n.apply(t.sheet.editor,a),setTimeout(()=>{x(o,c,s._worksheets[i],f,e.options)})};let h=t.sheet.editor.setOffset;t.sheet.editor.setOffset=function(...a){h.apply(t.sheet.editor,a),f=a[0],x(o,c,s._worksheets[i],f,e.options)},o=r.value.querySelector("canvas").getContext("2d"),e.src&&g(e.src,e.requestOptions).then(p).catch(a=>{t.loadData({}),d("error",a)})})}),I(()=>{D.disconnect(),t=null}),M(()=>e.src,()=>{e.src?g(e.src,e.requestOptions).then(p).catch(u=>{t.loadData({}),d("error",u)}):t.loadData({})});function S(u){q(u||`vue-office-excel-${new Date().getTime()}.xlsx`,m)}return{wrapperRef:l,rootRef:r,save:S}}}),X={class:"vue-office-excel",ref:"wrapperRef"},Y={class:"vue-office-excel-main",ref:"rootRef"};function Z(e,d,l,r,s,c){return y(),N("div",X,[P("div",Y,null,512)],512)}const _=V(Q,[["render",Z]]);_.install=function(e){e.component(_.name,_)};const re={__name:"ExcelDemo",setup(e){function d(){k.hideLoading()}function l(o){console.log("出差",o),k.hideLoading()}function r(o){return console.log("beforeTransformData",o),o}function s(o){return console.log("transformData",o),o}const c=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.xlsx",i=w();return(o,t)=>{const f=A("loading");return y(),H(K,{accept:".xlsx",placeholder:"请输入xlsx文件地址","default-src":c},{default:U(m=>[z(G(J(_),{ref_key:"docxRef",ref:i,src:m.src,options:{beforeTransformData:r,transformData:s},style:{flex:"1",height:"0"},onRendered:d,onError:l},null,8,["src","options"]),[[f,!0]])]),_:1})}}};export{re as default};
|