找回密码
 立即注册

QQ登录

只需一步,快速开始

Lenka.Guo 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2021-5-31 11:13  /   查看:2282  /  回复:0
本帖最后由 Lenka.Guo 于 2021-6-28 16:48 编辑

在线设计器在初始状态下不包含新建,保存,打开等按钮,因为每个项目的业务场景不同,因此我们将该方法都开放出来,让用户根据自己的需要去定制这些方法,实现与业务逻辑的切合。

但因为很多开发人员需要自己在本地测试在线设计器的保存按钮,常常需要将报表文件保存到本地并打开本地的JSON 文件。
本文主要描述了如何通过   designer.setActionHandlers() 重写OnSave 和OnOpen()

1. 创建HTML 页面
  1. <font face="微软雅黑"><!DOCTYPE html>

  2. <html lang="en">
  3.   <head>
  4.     <meta charset="utf-8" />

  5.     <title>ARJS Report designer</title>
  6.     <meta name="description" content="ARJS Report designer" />
  7.     <meta name="author" content="GrapeCity" />
  8.   </head>

  9.   <body></body>
  10. </html></font>
复制代码
2. 安装 ActiveReportsJS
  1. <font face="微软雅黑"><link
  2.   rel="stylesheet"
  3.   href="https://cdn.grapecity.com/activereportsjs/2.latest/styles/ar-js-ui.css"
  4.   type="text/css"
  5. />
  6. <link
  7.   rel="stylesheet"
  8.   href="https://cdn.grapecity.com/activereportsjs/2.latest/styles/ar-js-designer.css"
  9.   type="text/css"
  10. />
  11. <script src="https://cdn.grapecity.com/activereportsjs/2.latest/dist/ar-js-core.js"></script>
  12. <script src="https://cdn.grapecity.com/activereportsjs/2.latest/dist/ar-js-designer.js"></script></font>
复制代码
3. 添加报表设计器的宿主元素

在body 标签中添加 div 元素

  1. <font face="微软雅黑"><div id="designer-host"></div></font>
复制代码

在 head 标签中添加designer-host 元素

  1. <font face="微软雅黑"><style>  #designer-host {    margin: 0 auto;    width: 100%;    height: 100vh;  }</style></font>
复制代码
4. 初始化设计器
  1. <font face="微软雅黑"><script>  var designer = new GC.ActiveReports.ReportDesigner.Designer("#designer-host");  </script></font>
复制代码
5. 调用 designer.setActionHandlers()
  1. <font face="微软雅黑">designer.setActionHandlers(
  2.         {
  3.         onCreate: function () {
  4.           const reportId = `NewReport${++this.counter}`;
  5.           return Promise.resolve({
  6.             definition: reportTemplates.CPL,
  7.             id: reportId,
  8.             displayName: reportId,
  9.         }
  10.       );
  11.     },
  12.     onSave: function (info)
  13.      {         
  14.         console.log(info);
  15.         const reportId = info.id || `NewReport${this.counter + 1}`;
  16.         //获取报表文件并下载
  17.        const fileName = `NewReport${this.counter + 1}.rdlx-json`;
  18.        const blob = new Blob([JSON.stringify(info.definition)],{type:"application/json"})
  19.        this.download(fileName, blob);
  20.        this.counter++;
  21.         return Promise.resolve({displayName: reportId});
  22.        },
  23.      onOpen:function()
  24.       {
  25.        const input=document.createElement("input");
  26.        input.id="input";
  27.        input.type="file";
  28.        input.style.opacity=0;
  29.        input.addEventListener('change',() => {
  30.           let files = document.getElementById("input").files;
  31.           if(files.length){
  32.             let file = files[0];
  33.             let reader = new FileReader();
  34.             reader.onload = function(){
  35.               console.log(this.result);
  36.             };
  37.             reader.readAsText(file);
  38.           }
  39.         });
  40.        if( document.getElementById('input')){
  41.           $("#input").click();
  42.         }      
  43.        document.body.appendChild(input);   
  44.        designer.setReport(input);            
  45.     }      
  46. });
  47. </font>
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部