当前位置: 首页 > Web前端 > vue.js

Vue3组件开发:搭建基于Vite的在线表单编辑系统(组件集成)

时间:2023-03-31 22:50:49 vue.js

通过前面的学习,我们用Vite搭建了一个Vue3项目原型。今天,我们将基于这个原型,集成SpreadJS电子表格组件和在线编辑器组件,实现Excel公式计算、Excel文档在线导入导出、数据透视表、可视化分析能力,实现一个在线表格编辑系统的原型。设计思路·创建SpreadJS和Designer(表格编辑器)两个组件,通过切换路由展示不同的组件类型。·在编辑器组件的工具栏中添加“加载”和“更新”两个按钮。·点击“加载”加载从服务器获取的Excel文件,在编辑器中对组件进行一些修改,点击“更新”按钮将修改后的文件传输到服务器。·切换路由显示SpreadJS组件,并在该组件上添加“load”和“update”两个按钮,功能同上。SpreadJS组件介绍SpreadJS是一个基于HTML5的原生JavaScript组件,兼容超过450个Excel公式,并提供高度类Excel的功能。主要用于开发WebExcel组件,实现多人协同编辑、高性能模板设计和数据填充等功能模块,组件架构符合UMD规范,可以原生方式嵌入到各种应用中,并结合前后端技术框架。目前SpreadJS已经为Vue2封装了组件,还没有提供Vue3的组件封装,但是我们可以通过自己封装将SpreadJS组件和表格编辑器集成到Vue3项目中。SpreadJS与Vue3集成一、安装模块修改package.json文件,添加我们需要的模块,运行命令npminstall安装所有依赖项目。"dependencies":{"@fortawesome/fontawesome-free":"^5.14.0","@grapecity/spread-excelio":"^14.0.1","@grapecity/spread-sheets":"^14.0.1","@grapecity/spread-sheets-barcode":"^14.0.1","@grapecity/spread-sheets-charts":"^14.0.1","@grapecity/spread-sheets-designer":"^14.0.1","@grapecity/spread-sheets-designer-resources-cn":"^14.0.1","@grapecity/spread-sheets-designer-vue":"^14.0.1","@grapecity/spread-sheets-languagepackages":"^14.0.1","@grapecity/spread-sheets-pdf":"^14.0.1","@grapecity/spread-sheets-pivot-addon":"^14.0.1","@grapecity/spread-sheets-print":"^14.0.1","@grapecity/spread-sheets-resources-zh":"^14.0.1","@grapecity/spread-sheets-shapes":"^14.0.1","@grapecity/spread-sheets-vue":"^14.0.1","axios":"^0.21.0","vue":"^3.0.2","vue-router":"^4.0.0-rc.5"},2.配置路径由在src文件夹下添加3个文件。·router/index.js·views/SpreadSheet.vue·views/Designer.vue配置路由:import{createRouter,createWebHistory}from"vue-router";constroutes=[{path:"/",name:"Designer",component:()=>import("../views/Designer.vue"),},{path:"/spreadSheet",name:"SpreadSheet",component:()=>import("../views/SpreadSheet.vue"),}];exportconstrouter=createRouter({history:createWebHistory(),routes:routes});3.在main.js中引入:import{createApp}from'vue'import{router}from'./router/index'importAppfrom'./App.vue'import'./index.css'constapp=createApp(App)app.use(router);app.mount('#app')4。修改App.vue:在main.js文件中,将VueRouter文件添加到项目中(在Vue2中,使用Vue.use(router)导入,但在Vue3中添加方式发生了变化)。如下图所示,Vue3使用createApp方法来实际创建项目。在挂载应用之前,需要通过app.use(router)添加到项目中。大家看到这里应该会发现Vite中的路由配置和main.js的引入方式与Vue2有所不同,为了更好的支持Typescript,Vue3版本的VueRouter需要我们引入新的方法才能使代码正常工作。最重要的是createRouter和createWebHistory。5、集成设计器组件配置好路由后,就可以开始集成设计器组件了。首先在components文件夹下添加2个文件:components/Designer.vuecomponents/SpreadSheet.vue接下来在Designer.vue中集成SpreadJS表格编辑器,代码如下图:在模板中添加一个div,这个div是编辑器的容器,可以通过css设置容器的宽高,即可以自定义编辑器的显示大小和位置。·导入编辑器需要的依赖。·在设置函数中创建一个新的编辑器。第三步,在views/Designer.vue中引入该组件及相关依赖。从'../components/Designer.vue'导入Designer从“vue”导入{ref}从“axios”导入axios从'@grapecity/spread-sheets'导入GC从'@grapecity/spread-excelio'导入ExcelIO四步骤,使用模板中的组件标签。最后在setup函数中初始化编辑器。让designer=undefined;让designerInitialized=(wb)=>{designer=wb;让spread=designer.getWorkbook();}完成以上步骤后,页面就可以显示编辑器UI了。如何自定义编辑器的工具栏?完成以上步骤后,我们就成功将SpreadJS编辑器集成到项目中了。接下来,我们将演示如何在工具栏中创建“加载”和“更新”两个按钮。由于SpreadJS在线表单编辑器采用了全新的可配置设计,因此在任何领域都可以采用jsonconfig的配置方式。通过修改默认的GC.Spread.Sheets.Designer.DefaultConfig,可以实现自定义功能。1.自定义Ribbon选项卡在浏览器Console中输入GC.Spread.Sheets.Designer.DefaultConfig可以查看默认的ribbon选项卡配置。参照默认配置,您可以自定义操作选项卡。让DefaultConfig=GC.Spread.Sheets.Designer.DefaultConfig;让customerRibbon={id:"operate",text:"Operation",buttonGroups:[],};2.自定义按钮需要先定义点击时定义按钮命令,并将命令注册到config的commandMap属性中。让ribbonfilecommands={“loadTemplateCommand”:{iconClass:“ribbon-button-download”,text:“加载”,//bigbutton:true,commandname:“loadTemplate”,execute:execute:execute:load},load},“updateTemplateCommand”ribbon-button-upload",text:"Update",}//bigButton:true,commandName:"updateTemplate",execute:update}}上面的示例代码注册了loadTemplateCommand和CommupdateCommand。·execute对应函数的具体执行内容,即load和update方法。·iconClass为按钮样式,可以指定按钮图片·text为按钮显示文字·commandName为命令名,需要全局唯一iconClass示例代码:.ribbon-button-download{background-image:url(图片地址,可以是base64svg)};通过命令,可以添加按钮对应的配置:",CommandGroup:{Children:[{Direction:"Vertical",命令:["LoadTemplateCommand","UpdateTeMPlateCommand"],},},],};DefaultConfig.ribbon.push(customerRibbon);DefaultConfig.commandMap={};Object.assign(DefaultConfig.commandMap,ribbonFileCommands);最后不要忘记在Load方法和update方法中添加代码。Load方法和update方法的作用Load方法用于执行excel文件的加载。收到后台传入的json数据后,使用fromJSON方法加载文件,代码如下:letload=(e)=>{letspread=designer.getWorkbook();让formData=newFormData();formData.append("文件名","路径");axios.post('spread/loadTemplate',formData,{responseType:"json",}).then((response)=>{if(response){加载成功alert("");templateJSON=response.data;spread.fromJSON(templateJSON);}}}).catch((response)=>{Upalert("error");file'supdatedate})方法执行。当编辑器对加载的文件进行操作时,比如修改背景颜色、添加文字等,使用toJSON方法将当前的点差保存为json数据,传给后台存储。代码如下:letupdate=(e)=>{letspread=designer.getWorkbook();让spreadJSON=JSON.stringify(spread.toJSON());让formData=newFormData();formData.append("jsonString",spreadJSON);formData.append("文件名","文件名");axios.post('spread/updateTemplate',formData).then((response)=>{if(response){alert("更新成功");."error");})}完成以上操作后,新建的按钮就可以正常工作了。如下例所示,点击工具栏上的加载按钮,文件已成功加载到SpreadJS表格编辑器中。以上就是Vue3组件化开发的全部内容:构建基于SpreadJS的表单编辑系统(组件集成)。通过集成SpreadJS电子表格组件和在线编辑器组件,我们搭建的项目原型已经有了在线表格编辑系统的雏形。在下一章的功能扩展中,我们将演示如何为这个系统原型增加更多的电子表格功能,并提供整个项目源码供参考。扩展阅读Vue3组件开发实践:搭建基于SpreadJS的表格编辑系统(环境搭建)Vue3组件开发实践:搭建基于SpreadJS的表格编辑系统(功能拓展)SpreadJSVue框架支持