# vue-xzreport-example **Repository Path**: tizdata_admin/vue-xzreport-example ## Basic Information - **Project Name**: vue-xzreport-example - **Description**: 小智报表 vue 3示例工程;,样例齐全; - **Primary Language**: JavaScript - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-05-14 - **Last Updated**: 2024-12-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # XZReport - 小智BI+小智报表 v3.7.2 | 2023-05-11 一款原生JS的免费纯前端报表控件,帮助产品高效解决各种报表绘制与导出打印问题。功能涵盖:报表样式绘制、打印格式设置、数据处理函数、交互操作功能等! - 原生JS开发包形态,可快速应用于各种开发框架。 - 类Excel操作界面,拖拽式报表设计交互,内置大量数据处理函数。 - 丰富的报表样式支持,如:动态行列交叉报表、标签报表、预警报表等。 - 支持报表导出、列表批量打印、低分辨率打印、格式套打打印等交互操作。 - 可直接调用API方法,快速搭建报表场景,如:内置报表工具、搭建报表中心等。 ``` 开源协议:`功能永久免费、可以商用、代码不开放`。 ``` 快速体验: [https://xzreport.com](https://xzreport.com "xzreport.com") # xzreportAnddesigner150_example_vue3 小智报表设计器端,小智报表展现端,vue3的嵌入演示样例 ## 操作步骤 ## Project Setup ```sh pnpm install ``` ### Compile and Hot-Reload for Development ```sh pnpm run dev ``` ### xzReport展现效果(小智报表纯展现) ### xzReportDesigner展现效果(小智报表设计器) 反馈问题 ----------------------------------- > 发现bug 请在github上[发issue](https://github.com/tianzhidata/XZReport/issues/new) 开发文档 ----------------------------------- - 官方网站: https://www.xzreport.com/ - 在线服务 : [小智报表 (xzreport.com)](https://designer.xzreport.com/login) - 小智BI官方文档: https://doc.tizdata.com/xiaozhi/651 - 小智报表官方文档:https://doc.tizdata.com/xiaozhi/650 - QQ交流群:894709724 - 小智数据产品使用手册:https://doc.tizdata.com/xiaozhi/ 产生背景 ----------------------------------- 在软件开发中,需要解决用户对报表方面的一系列需求: 1.复杂的报表样式需求。 软件系统在开发报表时,会遇到各种复杂的报表需求和挑战,如:动态行列报表、多重聚合计算报表、交叉透视报表、自由布局报表、平铺报表、分栏报表、多源报表等。 2.自定义导出打印需求。 基于软件产生的发票、合同、标签、订单等单据和报表,用户可以根据自己的需求和喜好,对单据的内容、布局、样式等进行自定义和调整,以满足不同场景下的打印需求。 3.自己设计报表的需求。 用户期待软件系统中能提供自己设计报表的功能,无需二次开发,通过简单的拖拽和配置,即可灵活地设计出想要的报表样式和内容,从而灵活满足企业的个性化报表需求。 为什么选择 XZReport? ----------------------------------- > 借助小智报表来实现报表开发,可以降低开发成本,提高开发效率,以及为用户创造了更好的产品体验。 - 轻松实现各种复杂报表样式 - 内置大量数据处理函数 - 拖拽式操作实现报表样式调整 - 制作的报表自动适配和兼容 - 支持按模板打印/自定义打印等 - 支持分组、交叉,合计、表达式等复杂报表 - 灵活打印设置轻松实现格式套打 - 对低分辨率打印做了很好地支持 - 对低分辨率打印做了很好地支持 - 提供类Excel交互的报表设计器 # api--小智BI设计器 ## 嵌入脚本 ```shell
import "./XZChartDesigner/report.js"; import "./XZChartDesigner/report.css"; ``` ## 新建模板 ### xzChartDesigner ```shell ...
... XZChartDesigner.setKey('授权码') let option = { //参数配置说明 根据您的需求填写option uploadImage: { //上传图片相关信息 如果不传该字段时,设计器用到的所有上传图片配置项均不显示。 server: "url",//上传图片地址 method: "post",//上传图片请求方式 headers: { //上传图片请求头 "Authorization": "Token XXXXXXXX" }, fieldName: "file", resultField: "file" }, pageData: { //画布初始化时的宽高 width: '1920px', height: '1080px' }, dataSet: [ //数据集按钮的方式 { //Json数据 id: 1, value: "新建Json数据集" }, { //http请求数据 id: 2, value: "新建Http接口数据集" }, { //API服务数据 id: 3, value: "API服务数据集" }, { id: 4, value: "外部数据集" // 新建一个新的报表实例,如果希望可以预先动态从后台提供几个数据集供其使用,这个配置必须有; // 然后只要动态的从后台拿到n个数据集,全部用 results格式装配,onUpdateDatasetList方法来触发 } ] } ... onMounted(() => { designer = new XZChartDesigner("#container_cd8_main", option); }) ``` ## 数据保存 ### xzChartDesigner ```shell ... let report = designer.getSaveData(); ... //保存到业务系统的后台 axios({ method: "post", url: "/api/xzchartdesigner/公司远程api", data: { report:report } }).then((response)=>{ .... }) ``` ## 模板修改/模板回显 ### xzChartDesigner ```shell ...画布容器
... let option = { //参数配置说明 根据您的需求填写option uploadImage: { //上传图片相关信息 如果不传该字段时,设计器用到的所有上传图片配置项均不显示。 server: "url",//上传图片地址 method: "post",//上传图片请求方式 headers: { //上传图片请求头 "Authorization": "Token XXXXXXXX" }, fieldName: "file", resultField: "file" }, pageData: { //画布初始化时的宽高 width: '1920px', height: '1080px' }, dataSet: [ //数据集按钮的方式 { //Json数据 id: 1, value: "新建Json数据集" }, { //http请求数据 id: 2, value: "新建Http接口数据集" }, { //API服务数据 id: 3, value: "API服务数据集" }, { id: 4, value: "外部数据集" // 新建一个新的报表实例,如果希望可以预先动态从后台提供几个数据集供其使用,这个配置必须有; // 然后只要动态的从后台拿到n个数据集,全部用 results格式装配,onUpdateDatasetList方法来触发 } ] } .... onMounted(() => { axios({ method: "post", url: "/api/xzchartdesigner/公司远程api", data: { reportType: "chartDesigner", reportId: 'report1', } }).then((response) => { report = response.data.data.report;//保存时候:let report = designer.getSaveData(); designer = new XZChartDesigner("#chartDesigner2", option, report); }).catch((error) => { ... }) }) ``` ## onUpdateDatasetList 外部数据集 ### xzChartDesigner 到后台取数据集(表结构) ```shell ... let option={......} const onUpdateDatasetList = () => { axios({ method: "get", url: "/api/xzchartdesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.onUpdateDatasetList }) } option.onUpdateDatasetList=onUpdateDatasetList ``` ## onUpdateData 外部数据集记录 ### xzChartDesigner 到后台取数据集的记录(表记录) ```shell ... let option={......} const onUpdateData = (datasets, params) => { //根据 入口参数 datasets,params的信息,业务层面拼接查询 axios({ method: "get", url: "/api/xzchartdesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.records }) } option.onUpdateData=onUpdateData ``` ## 清除设计器画布 ### xzChartDesigner ```shell //option 参考前面的配置 document.getElementById("container_cd8_main").innerHTML = ""; designer = new XZChartDesigner("#container_cd8_main", option); ``` ## 自定义BI控件 toDo ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ # api--小智BI展示器 ## 小智BI展现端 嵌入脚本 ```shell
import "./XZChart/xzchart.js"; import "./XZChart/xzchart.css"; ``` ## 渲染 ### xzChart ```shell .... 首先获取BI模板 let data; axios({ method: "get", url: "/api/........", data: { .... } }).then((response) => { report = response.data.data.report; //提示一下 当初保存的方法:report= designer.getSaveData(); config=report.config//展现端需要的配置信息 dataConfig=report.data.dataConfig //BI展现端需要的初始数据, }).catch((error) => { ...... }) .... XZDashboard.setKey('授权码') let option = {reportConfig:config,reportData:[],paramsConfig:[]} const reportInstance = new XZDashboard("#container_cd8_Echo", option); reportInstance.updateData(dataConfig);//在合适的时候会触发下面的onUpdateData方法 onUpdateData = (datasets, params) => {//展现端的数据记录动态获取 //根据 入口参数 datasets,params的信息,业务层面拼接查询 axios({ method: "get", url: "/api/xzchartdesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.records }) } option.onUpdateData=onUpdateData ``` ## 查询参数 onUpdateData = (datasets, params) => {...} ```shell // datasets => [{name:"数据表名称",id:"数据表id"...}] 参与获取数据的数据集 // params => [{name:"参数名称",value:"参数值"}] value的类型是字符串或者数组 // 该方法的返回值是一个Promise,根据业务需求,后台拼接服务/sql const onUpdateData = (datasets,params)=>{ ... return new Promise((resolve, reject)=>{ // resolve的数据格式 let results = [ { name:"测试", //必填项 id:"测试" //必填项 response_data:[] // [{a:1,b:2}] } ] resolve(results) }) let option = { onUpdateData } ``` # api--小智报表设计器 ## 小智报表设计器 嵌入脚本 ```shell
import "./XZReportDesigner/xzreportdesigner.js"; import "./XZReportDesigner/xzreportdesigner.css"; ``` ## 新建模板 ### xzReportDesigner ```shell
const dataset = [ // 添加数据集按钮 { //Json数据 id: 1, value: "新建Json数据集" }, { //http请求数据 id: 2, value: "新建Http接口数据集" }, { //API服务数据 id: 3, value: "API服务数据集" }, { id: 4, value: "外部数据集" } ]; const options = { row: 100, col: 25, width:()=>width height:()=>height renderArrow: true, // 是否显式 扩展方向图标 showFreeze: true, // 是否显式冻结线 showGrid: true, // 是否显式网格线 showPreviewToolbar:true, showBottombar:true, showSelect:true, dataset } const onUpdateDatasetList = () => { return new Promise((resolve, reject) => { // resolve 一般axios获取,参考onUpdateDatasetList接口 resolve(results) / }) } options.onUpdateDatasetList = onUpdateDatasetList let sheetDesign; onMounted(() => { sheetDesign = XZReportDesigner("#container_indentorMain", options); }) ``` ## 数据保存 ### xzReportDesigner ```shell const {config, data} = sheetDesign.getData() //保存到业务系统的后台 axios({ method: "post", url: "/api/xzReportDesigner/公司远程api", data: { config:config, data:data } }).then((response)=>{ .... }) ``` ## 模板修改/模板回显 ### xzReportDesigner ```shell //option,onUpdateDatasetList,onUpdateData 配置略 axios.post拿到报表设计器的数据 //参考设计器当时的保存方法:const {config, data} = sheetDesign.getData()) ... sheetDesign = XZReportDesigner("#container", option); sheetDesign.loadData({config: config, data: data}); //这里的data是保存报表模板时候提供的信息,和 onUpdateData带参数查询的方法不同 ``` ## 模板数据更新 ### xzReportDesigner???? ```shell document.getElementById(div_id).innerHTML = "";//酌情可选 sheetDesign = XZReportDesigner("#containerTabs1", options); try { sheetDesign.loadData({config: sheetConfig, data: data});//和bi设计器的不同,这里的data必须是初始的data(保存时候的data) } catch (e) { console.log(e); } ``` ## 数据集类型配置 ### xzReportDesigner 数据来源目前支持选择Json数据、http请求数据、API服务数据,外部数据集四种数据集类型。可以支持接收外部Json数据。 ```shell let option={......参考新增/修改} .... dataSet: [ //数据集按钮的方式 { //Json数据 id: 1, value: "新建Json数据集" }, { //http请求数据 id: 2, value: "新建Http接口数据集" }, { //API服务数据 id: 3, value: "API服务数据集" }, { id: 4, value: "外部数据集" // 新建一个新的报表实例,如果希望可以预先动态从后台提供几个数据集供其使用,这个配置必须有; // 然后只要动态的从后台拿到n个数据集,全部用 results格式装配,onUpdateDatasetList方法来触发 } ] option.dataSet:dataSet; ``` ## 外部数据集 onUpdateDatasetList ### xzReportDesigner到后台取数据集(表结构) ```shell ... let option={......} const onUpdateDatasetList = () => { axios({ method: "get", url: "/api/xzReportDesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.onUpdateDatasetList }) } option.onUpdateDatasetList=onUpdateDatasetList ``` ## 外部数据集记录 onUpdateData ### xzReportDesigner到后台取数据集的记录(表记录) ```shell ... let option={......} const onUpdateData = (datasets, params) => { //根据 入口参数 datasets,params的信息,业务层面拼接查询 // datasets => [{name:"数据表名称",id:"数据表id"...}] 参与获取数据的数据集 // params => [{name:"参数名称",value:"参数值"}] value的类型是字符串或者数组 axios({ method: "get", url: "/api/xzReportDesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.records }) } option.onUpdateData=onUpdateData ``` # api--小智报表展示器 ## 小智报表展现端 嵌入脚本 ```shell
import "./XZReport/xzreport.js"; import "./XZReport/xzreport.css"; ``` ## 渲染 ### xzReport ```shell 报表渲染需要提供:报表模板json(保存时候的json),报表模板需要的数据集记录 //参考报表模板保存 const {config, data} = sheetDesign.getData(); // option配置略 onMounted(() => { try{ spreadSheet = XZReport("#containerTabs1_echo", option); spreadSheet.update(config,data); }catch (error){ console.log(error); } }); spreadSheet.update(config, data); ``` ## 外部数据集记录 onUpdateData ### xzReport到后台取数据集的记录(表记录) ```shell ... let option={......} const onUpdateData = (datasets, params) => { //根据 入口参数 datasets,params的信息,业务层面拼接查询 // datasets => [{name:"数据表名称",id:"数据表id"...}] 参与获取数据的数据集 // params => [{name:"参数名称",value:"参数值"}] value的类型是字符串或者数组 axios({ method: "get", url: "/api/xzchartdesigner/公司远程api", data: { .... } }).then((response)=>{ return response.data.data.records }) } option.onUpdateData=onUpdateData ``` ## 查询参数 onUpdateData = (datasets, params) => {...} ```shell // datasets => [{name:"数据表名称",id:"数据表id"...}] 参与获取数据的数据集 // params => [{name:"参数名称",value:"参数值"}] value的类型是字符串或者数组 // 该方法的返回值是一个Promise,根据业务需求,后台拼接服务/sql const onUpdateData = (datasets,params)=>{ ... return new Promise((resolve, reject)=>{ // resolve的数据格式 let results = [ { name:"测试", //必填项 id:"测试" //必填项 response_data:[] // [{a:1,b:2}] } ] resolve(results) }) let option = { onUpdateData } ``` ## 关于vue2.x嵌入(下面以小智报表设计器为例,其余类推) ### @/api/xzrd.js ```shell import request from '@/utils/request' // reqType='onUpdateDatasetList/onUpdateData/sheetconfig/sheetconfigdata' // dataCode = 1/2/3... // ext扩展属性 export function getxzdata(reqType, dataCode, ext) { return request({ url: '/vue-admin-template/xzrd/datainfo', method: 'post', data: { reqType, dataCode, ext } }) } ``` ### @/views/xereportdesigner/xzrd_1.vue ```shell ``` ## 工具栏 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 打印 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 打印预览 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 导出EXCEL ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 导出PDF ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 画布 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 目录 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 组件图层 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ ## 数据结构 ### 参考小智数据官方文档 https://doc.tizdata.com/xiaozhi/199/ # BI设计器VUE3样例 ## 样例1 ## 样例2 ### 样例3 # BI展示器样例 toDo # 报表设计器样例 toDo ## 样例1 ## 样例2 ## 样例3 # 报表展示器样例 toDo 报表设计与预览效果 ----------------------------------- - 同比报表 - 比较报表 - 跨层累计报表 - 双向分组小计 - 条件汇总报表 - 自由布局报表 - 组内占比报表 - 分片重复报表 - 交叉累计报表 - 绝对坐标-纵向扩展 - 绝对坐标-横向扩展 - 相对坐标-纵向扩展 - 相对坐标-横向扩展 - 绝对坐标-双向扩展 - 相对坐标-双向扩展 - 单行单列-双向扩展 # 常见问题解答 ## 需要大量的数据集 数据记录的开发吗? ```shell 前端js 回调方法 onUpdateDatasetList 场景1 关系型数据库 业务系统添加2张表 crud的功能 databaseConn 数据库连接表(dcId,host/ip,port,user,password,...) datasetList 数据集表 (Id,dcId, categoryId,tablefields_sql...,);categoryId是分类 后台发布的通用方法 restfull api: getOnUpdateDatasetList(userToken:string,dataSetIds:string[])); 该方法可以获取为当前用户配置的全部数据集(带查询参数的描述json格式), 或者:dataSetIds是本次请求需要的数据集ids; ``` 授权协议 ----------------------------------- 开源版本遵循 LGPL 条款发布,如果您不能接受 LGPL,并且需要将该项目用于商业用途且不想保留版权信息,需购买[商业授权]([报表工具,小智报表,报表控件,内嵌式报表工具,OEM,表格控件,开源报表工具-产品定价 (xzreport.com)](https://www.xzreport.com/vip))。