Przeglądaj źródła

!181 1.5.0
Merge pull request !181 from Raod/dev

Raod 7 miesięcy temu
rodzic
commit
ae1ceeeab4
100 zmienionych plików z 1929 dodań i 42 usunięć
  1. 5 3
      README.md
  2. 1 0
      doc/docs/.vuepress/config.js
  3. 2 0
      doc/docs/guide/community/AC1688/搭建aj-report开发环境.md
  4. 30 1
      doc/docs/guide/dataset.md
  5. 0 1
      doc/docs/guide/quicklyDevelop.md
  6. 0 1
      doc/docs/guide/quicklyDistribution.md
  7. 41 3
      doc/docs/guide/quicklySeparate.md
  8. 3 2
      doc/docs/guide/quicklySource.md
  9. 14 0
      doc/docs/guide/releases/1.4.0.md
  10. 84 0
      doc/docs/guide/releases/1.5.0.md
  11. 7 3
      report-core/pom.xml
  12. 129 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/config/DruidProperties.java
  13. 7 1
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/DataSetController.java
  14. 2 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/DataSetService.java
  15. 39 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java
  16. 0 1
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/datasetparam/controller/param/DataSetParamValidationParam.java
  17. 9 9
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/datasource/service/impl/JdbcServiceImpl.java
  18. 2 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/controller/dto/ReportShareDto.java
  19. 4 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/controller/param/ReportShareParam.java
  20. 2 0
      report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/dao/entity/ReportShare.java
  21. 36 10
      report-core/src/main/resources/bootstrap.yml
  22. 23 0
      report-core/src/main/resources/db/migration/V1.5.0__update.sql
  23. 7 1
      report-ui/build/vue-loader.conf.js
  24. 10 3
      report-ui/build/webpack.base.conf.js
  25. 17 3
      report-ui/build/webpack.prod.conf.js
  26. 44 0
      report-ui/node_modules_echarts_need/map/js/china-contour.js
  27. 44 0
      report-ui/node_modules_echarts_need/map/js/china.js
  28. 44 0
      report-ui/node_modules_echarts_need/map/js/province/anhui.js
  29. 46 0
      report-ui/node_modules_echarts_need/map/js/province/aomen.js
  30. 44 0
      report-ui/node_modules_echarts_need/map/js/province/beijing.js
  31. 19 0
      report-ui/node_modules_echarts_need/map/js/province/chongqing.js
  32. 44 0
      report-ui/node_modules_echarts_need/map/js/province/fujian.js
  33. 44 0
      report-ui/node_modules_echarts_need/map/js/province/gansu.js
  34. 44 0
      report-ui/node_modules_echarts_need/map/js/province/guangdong.js
  35. 44 0
      report-ui/node_modules_echarts_need/map/js/province/guangxi.js
  36. 44 0
      report-ui/node_modules_echarts_need/map/js/province/guizhou.js
  37. 44 0
      report-ui/node_modules_echarts_need/map/js/province/hainan.js
  38. 44 0
      report-ui/node_modules_echarts_need/map/js/province/hebei.js
  39. 44 0
      report-ui/node_modules_echarts_need/map/js/province/heilongjiang.js
  40. 44 0
      report-ui/node_modules_echarts_need/map/js/province/henan.js
  41. 44 0
      report-ui/node_modules_echarts_need/map/js/province/hubei.js
  42. 44 0
      report-ui/node_modules_echarts_need/map/js/province/hunan.js
  43. 44 0
      report-ui/node_modules_echarts_need/map/js/province/jiangsu.js
  44. 44 0
      report-ui/node_modules_echarts_need/map/js/province/jiangxi.js
  45. 44 0
      report-ui/node_modules_echarts_need/map/js/province/jilin.js
  46. 44 0
      report-ui/node_modules_echarts_need/map/js/province/liaoning.js
  47. 44 0
      report-ui/node_modules_echarts_need/map/js/province/neimenggu.js
  48. 44 0
      report-ui/node_modules_echarts_need/map/js/province/ningxia.js
  49. 44 0
      report-ui/node_modules_echarts_need/map/js/province/qinghai.js
  50. 44 0
      report-ui/node_modules_echarts_need/map/js/province/shandong.js
  51. 19 0
      report-ui/node_modules_echarts_need/map/js/province/shanghai.js
  52. 44 0
      report-ui/node_modules_echarts_need/map/js/province/shanxi.js
  53. 44 0
      report-ui/node_modules_echarts_need/map/js/province/shanxi1.js
  54. 44 0
      report-ui/node_modules_echarts_need/map/js/province/sichuan.js
  55. 19 0
      report-ui/node_modules_echarts_need/map/js/province/taiwan.js
  56. 18 0
      report-ui/node_modules_echarts_need/map/js/province/tianjin.js
  57. 44 0
      report-ui/node_modules_echarts_need/map/js/province/xianggang.js
  58. 19 0
      report-ui/node_modules_echarts_need/map/js/province/xinjiang.js
  59. 19 0
      report-ui/node_modules_echarts_need/map/js/province/xizang.js
  60. 44 0
      report-ui/node_modules_echarts_need/map/js/province/yunnan.js
  61. 44 0
      report-ui/node_modules_echarts_need/map/js/province/zhejiang.js
  62. 19 0
      report-ui/node_modules_echarts_need/map/js/world.js
  63. 0 0
      report-ui/node_modules_echarts_need/map/json/china-cities.json
  64. 0 0
      report-ui/node_modules_echarts_need/map/json/china-contour.json
  65. 0 0
      report-ui/node_modules_echarts_need/map/json/china.json
  66. 0 0
      report-ui/node_modules_echarts_need/map/json/province/anhui.json
  67. 1 0
      report-ui/node_modules_echarts_need/map/json/province/aomen.json
  68. 0 0
      report-ui/node_modules_echarts_need/map/json/province/beijing.json
  69. 0 0
      report-ui/node_modules_echarts_need/map/json/province/chongqing.json
  70. 0 0
      report-ui/node_modules_echarts_need/map/json/province/fujian.json
  71. 0 0
      report-ui/node_modules_echarts_need/map/json/province/gansu.json
  72. 0 0
      report-ui/node_modules_echarts_need/map/json/province/guangdong.json
  73. 0 0
      report-ui/node_modules_echarts_need/map/json/province/guangxi.json
  74. 0 0
      report-ui/node_modules_echarts_need/map/json/province/guizhou.json
  75. 0 0
      report-ui/node_modules_echarts_need/map/json/province/hainan.json
  76. 0 0
      report-ui/node_modules_echarts_need/map/json/province/hebei.json
  77. 0 0
      report-ui/node_modules_echarts_need/map/json/province/heilongjiang.json
  78. 0 0
      report-ui/node_modules_echarts_need/map/json/province/henan.json
  79. 0 0
      report-ui/node_modules_echarts_need/map/json/province/hubei.json
  80. 0 0
      report-ui/node_modules_echarts_need/map/json/province/hunan.json
  81. 0 0
      report-ui/node_modules_echarts_need/map/json/province/jiangsu.json
  82. 0 0
      report-ui/node_modules_echarts_need/map/json/province/jiangxi.json
  83. 0 0
      report-ui/node_modules_echarts_need/map/json/province/jilin.json
  84. 0 0
      report-ui/node_modules_echarts_need/map/json/province/liaoning.json
  85. 0 0
      report-ui/node_modules_echarts_need/map/json/province/neimenggu.json
  86. 0 0
      report-ui/node_modules_echarts_need/map/json/province/ningxia.json
  87. 0 0
      report-ui/node_modules_echarts_need/map/json/province/qinghai.json
  88. 0 0
      report-ui/node_modules_echarts_need/map/json/province/shandong.json
  89. 0 0
      report-ui/node_modules_echarts_need/map/json/province/shanghai.json
  90. 0 0
      report-ui/node_modules_echarts_need/map/json/province/shanxi.json
  91. 0 0
      report-ui/node_modules_echarts_need/map/json/province/shanxi1.json
  92. 0 0
      report-ui/node_modules_echarts_need/map/json/province/sichuan.json
  93. 0 0
      report-ui/node_modules_echarts_need/map/json/province/taiwan.json
  94. 0 0
      report-ui/node_modules_echarts_need/map/json/province/tianjin.json
  95. 0 0
      report-ui/node_modules_echarts_need/map/json/province/xianggang.json
  96. 0 0
      report-ui/node_modules_echarts_need/map/json/province/xinjiang.json
  97. 0 0
      report-ui/node_modules_echarts_need/map/json/province/xizang.json
  98. 0 0
      report-ui/node_modules_echarts_need/map/json/province/yunnan.json
  99. 0 0
      report-ui/node_modules_echarts_need/map/json/province/zhejiang.json
  100. 0 0
      report-ui/node_modules_echarts_need/map/json/world.json

+ 5 - 3
README.md

@@ -130,7 +130,9 @@ http://serverip:9095
 在Linux上先准备好maven、node.js、jdk
 
 - [Apache Maven] 3.5 <br>
-- [Node.js] v14.16.0 <br>
+- [Node.js] 
+  - report1.5以下版本请使用 node<= V14 
+  - report1.5及以上版本请使用 node>= V16 
 - [Jdk] 1.8
 
 简易步骤
@@ -190,7 +192,7 @@ aj_report(存放系统基础数据)数据库 <br>
 <a href='https://www.zjjcl.cn/'><img src="https://ajreport.beliefteam.cn/file/download/8df07663-60c9-4e32-a0f2-0ea7d5c46ff9" width = "130" height = "50" /> </a>
 <a href='http://www.jiuyinkj.com/'><img src="https://ajreport.beliefteam.cn/file/download/5889f0e6-ba08-4990-ac89-eabfbb8af8bd" width = "130" height = "50" /> </a>
 <a href='http://www.yourongyun.cn/'><img src="https://ajreport.beliefteam.cn/file/download/90e15ed9-5594-4c14-b318-72aeb6816fb9" width = "130" height = "50" /> </a> 
-</br>
+<br>
 <a href='https://www.wenkai.net/'><img src="https://ajreport.beliefteam.cn/file/download/ec788c55-bffd-4809-ae3c-0ce2cbd1a9d0" width = "130" height = "50" /> </a>
 <a href='http://www.sungcor.com/'><img src="https://ajreport.beliefteam.cn/file/download/0514a4a6-787b-4e25-be94-03ff94309553" width = "130" height = "50" /> </a>
 <a href='http://www.jtit.com.cn/'><img src="https://ajreport.beliefteam.cn/file/download/1dc47a36-a515-4775-af44-262225b3662b" width = "130" height = "50" /> </a>
@@ -210,7 +212,7 @@ aj_report(存放系统基础数据)数据库 <br>
 
 已知以下版本存在兼容性问题,请不要使用
 
-- Node.js V16及以上
+- Node.js 请根据实际使用的report版本调整
 - openJdk
 - Jdk 1.7及以下/11及以上(jdk11部分版本有问题)
 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题)

+ 1 - 0
doc/docs/.vuepress/config.js

@@ -38,6 +38,7 @@ module.exports = {
                         {title: 'V1.2.0', path: '/guide/releases/1.2.0'},
                         {title: 'V1.3.0', path: '/guide/releases/1.3.0'},
                         {title: 'V1.4.0', path: '/guide/releases/1.4.0'},
+                        {title: 'V1.5.0', path: '/guide/releases/1.5.0'},
                     ]
                 },
                 {

+ 2 - 0
doc/docs/guide/community/AC1688/搭建aj-report开发环境.md

@@ -1,5 +1,7 @@
 **搭建aj-report开发环境**
 
+**注意前端版本只适用report1.4.2及以下版本**
+
 # 工具版本
 
 参考

+ 30 - 1
doc/docs/guide/dataset.md

@@ -96,8 +96,37 @@ function verification(data) {
     return data;
 }
 ```
+- 示例三 <br>
+  in 和 not in
 
-**注:** 当前V1.0.0版本示例值是不可为空的,所以实际使用可能会麻烦点
+```js
+// 输入 a,b ,输出 ('a','b')
+function verification(data) {
+    // 获取示例值
+    data = data.sampleItem;
+    if (data == null || data == '') {
+        return ''
+    }else{
+        var arr = []
+        if (data.indexOf(',')){
+            arr = data.split(',')
+        }
+        if (data.indexOf(',')){
+            arr = data.split(',')
+        }
+        var dataarr = []
+        for(j = 0,len=arr.length; j < len; j++) {
+           var ac = "'" + arr[j] + "'"
+           dataarr[j] = ac
+        }
+        data = dataarr.toString()
+    }
+    data = 'where name in (' + data + ') '
+    return data;
+}
+```
+
+**注:** 当前版本示例值是不可为空的,但是如果不填示例值也是可以保存的,可以先填上示例值来测试自己写的js有没有问题,数据集保存的时候再去掉。
 
 ### 数据转换
 

+ 0 - 1
doc/docs/guide/quicklyDevelop.md

@@ -41,7 +41,6 @@
 
 已知以下版本存在兼容性问题,请不要使用
 
-- Node.js V16及以上
 - openJdk
 - Jdk 1.7及以下/11及以上(jdk11部分版本有问题)
 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题)

+ 0 - 1
doc/docs/guide/quicklyDistribution.md

@@ -9,7 +9,6 @@
 
 已知以下版本存在兼容性问题,请不要使用
 
-- Node.js V16及以上
 - openJdk
 - Jdk 1.7及以下/11及以上(jdk11部分版本有问题)
 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题)

+ 41 - 3
doc/docs/guide/quicklySeparate.md

@@ -27,14 +27,15 @@ npm run build
 ### 编译环境
 
 - [Apache Maven] 3.5 <br>
-- [Node.js] v14.16.0 <br>
+- [Node.js]
+    - report1.5以下版本请使用 node<= V14
+    - report1.5及以上版本请使用 node>= V16
 - [Jdk] 1.8 <br>
 
 ### 版本问题
 
 已知以下版本存在兼容性问题,请不要使用
 
-- Node.js V16及以上
 - openJdk
 - Jdk 1.7及以下/11及以上(jdk11部分版本有问题)
 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题)
@@ -105,6 +106,43 @@ OSS底层已支持minio、amazonS3、nfs,都配置的情况下优先级minio->
 
 ### 前端部署
 
-使用nginx做转发
+使用nginx做转发,以下内容仅供参考
+```text
+server {
+    listen       443 ssl;
+    server_name  xxx;
+    access_log  "/var/log/nginx/report.access.log"  main;
+    error_log   "/var/log/nginx/report.cn.error.log"  info;
+    ssl_certificate      cert/xxx.report.pem;
+    ssl_certificate_key  cert/xxx.report.key;
+    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
+    ssl_session_cache    shared:SSL:1m;
+    ssl_session_timeout  5m;
+
+    client_max_body_size 600M;
+    client_body_buffer_size 10M;
+    client_header_buffer_size 512k;
+    large_client_header_buffers 16 512k;
+    proxy_buffer_size 1024k;
+    proxy_buffers 16 1024k;
+    proxy_busy_buffers_size 2048k;
+    proxy_temp_file_write_size 2048k;
+    
+    location / {
+	index index.html;
+        proxy_pass     http://127.0.0.1:9095;
+	try_files $uri $uri /index.html =404;
+    }
+
+    error_page 404 /404.html;
+        location = /40x.html {
+    }
+
+    error_page 500 502 503 504 /50x.html;
+        location = /50x.html {
+    }
+}
+```
 
 

+ 3 - 2
doc/docs/guide/quicklySource.md

@@ -20,14 +20,15 @@ admin 123456
 以下内容需要特别注意的地方会有对应提示。<br>
 
 - [Apache Maven] 3.5 <br>
-- [Node.js] v14.16.0 <br>
+- [Node.js]
+    - report1.5以下版本请使用 node<= V14
+    - report1.5及以上版本请使用 node>= V16
 - [Jdk] 1.8 <br>
 
 ## 版本问题
 
 已知以下版本存在兼容性问题,请不要使用
 
-- Node.js V16及以上
 - openJdk
 - Jdk 1.7及以下/11及以上(jdk11部分版本有问题)
 - Mysql 8.0(8.0.23/26版本没有问题,8.0.21版本存在问题)

+ 14 - 0
doc/docs/guide/releases/1.4.0.md

@@ -40,3 +40,17 @@
   提供的示例数据(aj_report_init数据库的sql),aj_report_init_example.sql 文件放置在 doc/example目录下。
 
 - 如果需要将之前版本的示例数据删除,delete_aj_report_init_example.sql 文件放置在 doc/example目录下。
+
+## V1.4.2
+- 1、增加postgresql、opengauss、达梦数据库、人大金仓、数据源支持
+- 2、表格报表设计页面-数据集选择可多选
+- 3、数据源类型下拉选项排序
+- 4、Excel报表支持浏览器直接导出excel,不用再去文件管理找文件了
+- 5、大屏设计器-表格组件表头表体增加文字格式属性
+- 6、修复国家信息安全漏洞共享平台披露的漏洞CNVD-2024-34975
+```yaml
+    Security:
+      # jwt密钥,生产环境请自行修改,避免被远程伪造登录攻击
+      jwtSecret: TybmmfrgsIqpPsBOYxvygCMVJWKNfDJU
+```
+将jwt密钥修改成你自己的,参考:http://www.chahuo.com/token-generator.html

+ 84 - 0
doc/docs/guide/releases/1.5.0.md

@@ -0,0 +1,84 @@
+## 注意事项
+
+- 特别注意,1.5版本开始,node版本最低使用V16版本。
+- 之前版本更新至本版本时,可能会遇到图表不显示静态、动态数据,需对该图表重新配置;如果已对旧版本进行二次开发,请谨慎更新。<br>
+  跨版本更新可查对应版本的[releases](https://gitee.com/anji-plus/report/releases)。<br>
+
+  
+## v1.4.2更新至1.5.0
+
+- 1、下载node16
+- 2、删除node_modules
+- 3、清缓存,执行 npm cache clean --force
+- 4、使用node16,执行 npm install
+
+### nvm工具
+用来管理多个node版本,不会的跟这个文档尝试。
+https://blog.csdn.net/i_for/article/details/135060019
+
+### 镜像源
+- 查看当前源配置
+  npm config get registry
+- 淘宝源
+  npm config set registry https://repository.npmmirror.com
+- 华为源
+  npm config set registry https://mirrors.huaweicloud.com/repository/npm/
+- 腾讯源
+  npm config set registry https://mirrors.cloud.tencent.com/npm/
+- 中国科技大学源
+  npm config set registry https://mirrors.ustc.edu.cn/npm/
+- 网易源
+  npm config set registry https://mirrors.163.com/npm/
+
+
+## 1.5前端编译注意事项
+前端目录:report-ui/node_modules_echarts_need/
+执行完npm install后需要将map文件夹拷贝到node_modules/echarts/文件夹下,
+因为echarts v5.0之后的版本不在包含map文件夹
+
+
+## 版本变化
+- 1、node: 14 -> 16
+- 2、echarts: 4.9.0 -> 5.5.1
+- 3、element-ui: 2.9.2 -> 2.15.14
+- 4、vue: 2.6.11 -> 2.7.16
+- 5、移除node-sass
+- 其他请看package.json
+
+
+## 新增
+
+- 1、新增数据集复制功能
+- 2、配置文件增加时区配置
+- 3、报表分享增加显示报表名称
+- 4、新增柱线图-单坐标
+
+
+## 优化
+
+- 1、大屏图表-文本组件换行符默认不开启
+- 2、数据集查询参数-高级规则切换优化
+- 3、大屏图表-提示语优化
+- 4、大屏图表-数值设定调整
+- 5、大屏图表-散点图半重做
+- 6、大屏图表-饼图系列调整
+- 7、大屏图表-百分比图调整
+- 8、大屏图片-地图系列-增加广东地图js
+- 9、大屏数据集切换将清空原先图表属性
+- 10、散点图优化
+
+## 修复
+- 1、分享链接下Excel导出异常的问题
+
+## 其他
+
+- 1、文档更新
+
+## 示例数据
+
+- 从1.0版本调整了底层sql,具体位置是:report-core/src/main/resource/db.migration,
+  删除了过往所有的sql,现在此目录下sql仅包含aj_report基础信息库的相关sql,sql文件的命名也会和版本号保持一致,
+  提供的示例数据(aj_report_init数据库的sql),aj_report_init_example.sql 文件放置在 doc/example目录下。
+
+- 如果需要将之前版本的示例数据删除,delete_aj_report_init_example.sql 文件放置在 doc/example目录下。
+

+ 7 - 3
report-core/pom.xml

@@ -14,7 +14,7 @@
 
     <groupId>com.anji-plus</groupId>
     <artifactId>aj-report</artifactId>
-    <version>1.4.2.RELEASE</version>
+    <version>1.5.0.RELEASE</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -63,8 +63,7 @@
 
         <dependency>
             <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <version>2.0.8</version>
+            <artifactId>spring-test</artifactId>
         </dependency>
 
         <dependency>
@@ -112,6 +111,11 @@
             <artifactId>mysql-connector-java</artifactId>
             <version>8.0.28</version>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.2.0</version>
+        </dependency>
         <dependency>
             <groupId>org.flywaydb</groupId>
             <artifactId>flyway-core</artifactId>

+ 129 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/config/DruidProperties.java

@@ -0,0 +1,129 @@
+package com.anjiplus.template.gaea.business.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.anji.plus.gaea.exception.BusinessExceptionBuilder;
+import lombok.Data;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by raod on 2024/10/21.
+ */
+@Component
+@ConfigurationProperties(prefix = "spring.druid")
+@Data
+public class DruidProperties {
+    private static final Logger log = LoggerFactory.getLogger(DruidProperties.class);
+    /**
+     * 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
+     */
+    private int initialSize;
+
+    /**
+     * 最小连接池数量
+     */
+    private int minIdle;
+
+    /**
+     * 最大连接池数量
+     */
+    private int maxActive;
+
+    /**
+     * 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置
+     */
+    private int maxWait;
+
+    /**
+     * 关闭空闲连接的检测时间间隔.Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
+     */
+    private int timeBetweenEvictionRunsMillis;
+
+    /**
+     * 连接的最小生存时间.连接保持空闲而不被驱逐的最小时间
+     */
+    private int minEvictableIdleTimeMillis;
+
+    private String validationQuery;
+
+    /**
+     * 申请连接时检测空闲时间,根据空闲时间再检测连接是否有效.建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRun
+     */
+    private boolean testWhileIdle;
+
+    private boolean testOnBorrow;
+    private boolean testOnReturn;
+
+    /**
+     * 开启PSCache
+     */
+    private boolean poolPreparedStatements;
+
+    /**
+     * 设置PSCache值
+     */
+    private int maxPoolPreparedStatementPerConnectionSize;
+
+    private String filters;
+
+    private String connectionProperties;
+    private boolean useGlobalDataSourceStat;
+    private boolean statViewServletEnabled;
+
+    /**
+     * 连接出错后再尝试连接三次
+     */
+    private int connectionErrorRetryAttempts;
+
+    /**
+     * 数据库服务宕机自动重连机制
+     */
+    private boolean breakAfterAcquireFailure;
+
+    /**
+     * 连接出错后重试时间间隔
+     */
+    private int timeBetweenConnectErrorMillis;
+
+    public DruidDataSource dataSource(String url, String username, String password, String driverClassName){
+        try {
+            DruidDataSource datasource = new DruidDataSource();
+            datasource.setUrl(url);
+            datasource.setUsername(username);
+            datasource.setPassword(password);
+            datasource.setDriverClassName(driverClassName);
+            //configuration
+            datasource.setInitialSize(initialSize);
+            datasource.setMinIdle(minIdle);
+            datasource.setMaxActive(maxActive);
+            datasource.setMaxWait(maxWait);
+
+            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
+            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
+            if (driverClassName.contains("oracle")) {
+                datasource.setValidationQuery(validationQuery + " FROM DUAL");
+            }else {
+                datasource.setValidationQuery(validationQuery);
+            }
+            datasource.setTestWhileIdle(testWhileIdle);
+            datasource.setTestOnBorrow(testOnBorrow);
+            datasource.setTestOnReturn(testOnReturn);
+
+            datasource.setPoolPreparedStatements(poolPreparedStatements);
+            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
+            datasource.setFilters(filters);
+            datasource.setConnectionProperties(connectionProperties);
+            datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);
+
+            datasource.setConnectionErrorRetryAttempts(connectionErrorRetryAttempts);
+            datasource.setBreakAfterAcquireFailure(breakAfterAcquireFailure);
+            datasource.setTimeBetweenConnectErrorMillis(timeBetweenConnectErrorMillis);
+            return datasource;
+        } catch (Exception e) {
+            log.error("初始化数据源失败:", e);
+            throw BusinessExceptionBuilder.build("初始化数据源失败:" + e.getMessage());
+        }
+    }
+}

+ 7 - 1
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/controller/DataSetController.java

@@ -14,7 +14,6 @@ import com.anjiplus.template.gaea.business.modules.dataset.controller.param.Data
 import com.anjiplus.template.gaea.business.modules.dataset.controller.param.DataSetTestTransformParam;
 import com.anjiplus.template.gaea.business.modules.dataset.dao.entity.DataSet;
 import com.anjiplus.template.gaea.business.modules.dataset.service.DataSetService;
-
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -142,4 +141,11 @@ public class DataSetController extends GaeaBaseController<DataSetParam, DataSet,
     }
 
 
+    @PostMapping("/copy")
+    @Permission(code = "copy", name = "复制")
+    @GaeaAuditLog(pageTitle = "复制")
+    public ResponseBean copy(@RequestBody DataSetDto dto) {
+        dataSetService.copy(dto);
+        return ResponseBean.builder().build();
+    }
 }

+ 2 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/DataSetService.java

@@ -67,4 +67,6 @@ public interface DataSetService extends GaeaBaseService<DataSetParam, DataSet> {
      * @return
      */
     List<DataSet> queryAllDataSet();
+
+    void copy(DataSetDto dto);
 }

+ 39 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/dataset/service/impl/DataSetServiceImpl.java

@@ -26,6 +26,8 @@ import com.anjiplus.template.gaea.business.modules.datasettransform.service.Data
 import com.anjiplus.template.gaea.business.modules.datasource.controller.dto.DataSourceDto;
 import com.anjiplus.template.gaea.business.modules.datasource.dao.entity.DataSource;
 import com.anjiplus.template.gaea.business.modules.datasource.service.DataSourceService;
+import com.anjiplus.template.gaea.business.modules.report.controller.dto.ReportDto;
+import com.anjiplus.template.gaea.business.modules.report.dao.entity.Report;
 import com.anjiplus.template.gaea.business.util.JdbcConstants;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -380,6 +382,33 @@ public class DataSetServiceImpl implements DataSetService {
         return dataSetMapper.selectList(wrapper);
     }
 
+    @Override
+    public void copy(DataSetDto dto) {
+        if (null == dto.getId()) {
+            throw BusinessExceptionBuilder.build(ResponseCode.NOT_NULL, "id");
+        }
+        if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(dto.getSetCode())) {
+            throw BusinessExceptionBuilder.build(ResponseCode.NOT_NULL, "数据集编码");
+        }
+        DataSet dataSet = selectOne(dto.getId());
+        String setCode = dataSet.getSetCode();
+        DataSet dateSetCopy = copyDataSet(dataSet, dto);
+        insert(dateSetCopy);
+        String copySetCode = dateSetCopy.getSetCode();
+        DataSetParam dataSetParam = dataSetParamService.selectOne("set_code", setCode);
+        if (null != dataSetParam){
+            dataSetParam.setId(null);
+            dataSetParam.setSetCode(copySetCode);
+            dataSetParamService.insert(dataSetParam);
+        }
+        DataSetTransform dataSetTransform = dataSetTransformService.selectOne("set_code", setCode);
+        if (null != dataSetTransform){
+            dataSetTransform.setId(null);
+            dataSetTransform.setSetCode(copySetCode);
+            dataSetTransformService.insert(dataSetTransform);
+        }
+    }
+
     public void dataSetParamBatch(List<DataSetParamDto> dataSetParamDtoList, String setCode) {
         dataSetParamService.delete(
                 new QueryWrapper<DataSetParam>()
@@ -438,4 +467,14 @@ public class DataSetServiceImpl implements DataSetService {
         return map;
     }
 
+    private DataSet copyDataSet(DataSet dataSet, DataSetDto dto){
+        //复制主表数据
+        DataSet copyDataSet = new DataSet();
+        GaeaBeanUtils.copyAndFormatter(dataSet, copyDataSet);
+        copyDataSet.setSetCode(dto.getSetCode());
+        copyDataSet.setSetName(dto.getSetName());
+        copyDataSet.setId(null);
+        return copyDataSet;
+    }
+
 }

+ 0 - 1
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/datasetparam/controller/param/DataSetParamValidationParam.java

@@ -12,7 +12,6 @@ import java.io.Serializable;
 public class DataSetParamValidationParam implements Serializable {
 
     /** 参数示例项 */
-    @NotBlank(message = "sampleItem not empty")
     private String sampleItem;
 
 

+ 9 - 9
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/datasource/service/impl/JdbcServiceImpl.java

@@ -1,9 +1,9 @@
 package com.anjiplus.template.gaea.business.modules.datasource.service.impl;
 
-import com.anjiplus.template.gaea.business.config.HikariPoolProperties;
+import com.alibaba.druid.pool.DruidDataSource;
+import com.anjiplus.template.gaea.business.config.DruidProperties;
 import com.anjiplus.template.gaea.business.modules.datasource.controller.dto.DataSourceDto;
 import com.anjiplus.template.gaea.business.modules.datasource.service.JdbcService;
-import com.zaxxer.hikari.pool.HikariPool;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -21,22 +21,22 @@ import java.util.concurrent.ConcurrentHashMap;
 public class JdbcServiceImpl implements JdbcService {
 
     @Autowired
-    private HikariPoolProperties hikariPoolProperties;
+    private DruidProperties druidProperties;
 
     /**
      * 所有数据源的连接池存在map里
      */
-    private Map<Long, HikariPool> map = new ConcurrentHashMap<>();
+    private Map<Long, DruidDataSource> map = new ConcurrentHashMap<>();
     private Object lock = new Object();
 
-    public HikariPool getJdbcConnectionPool(DataSourceDto dataSource) {
+    public DruidDataSource getJdbcConnectionPool(DataSourceDto dataSource) {
         if (map.containsKey(dataSource.getId())) {
             return map.get(dataSource.getId());
         } else {
             try {
                 synchronized (lock) {
                     if (!map.containsKey(dataSource.getId())) {
-                        HikariPool pool = hikariPoolProperties.dataSource(dataSource.getJdbcUrl(),
+                        DruidDataSource pool = druidProperties.dataSource(dataSource.getJdbcUrl(),
                                 dataSource.getUsername(), dataSource.getPassword(), dataSource.getDriverName());
                         map.put(dataSource.getId(), pool);
                         log.info("创建连接池成功:{}", dataSource.getJdbcUrl());
@@ -57,7 +57,7 @@ public class JdbcServiceImpl implements JdbcService {
     @Override
     public void removeJdbcConnectionPool(Long id) {
         try {
-            HikariPool pool = map.get(id);
+            DruidDataSource pool = map.get(id);
             if (pool != null) {
                 log.info("remove pool success, datasourceId:{}", id);
                 map.remove(id);
@@ -77,7 +77,7 @@ public class JdbcServiceImpl implements JdbcService {
      */
     @Override
     public Connection getPooledConnection(DataSourceDto dataSource) throws SQLException{
-        HikariPool pool = getJdbcConnectionPool(dataSource);
+        DruidDataSource pool = getJdbcConnectionPool(dataSource);
         return pool.getConnection();
     }
 
@@ -91,7 +91,7 @@ public class JdbcServiceImpl implements JdbcService {
      */
     @Override
     public Connection getUnPooledConnection(DataSourceDto dataSource) throws SQLException {
-        HikariPool druidDataSource = hikariPoolProperties.dataSource(dataSource.getJdbcUrl(),
+        DruidDataSource druidDataSource = druidProperties.dataSource(dataSource.getJdbcUrl(),
                 dataSource.getUsername(), dataSource.getPassword(), dataSource.getDriverName());
         return druidDataSource.getConnection();
     }

+ 2 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/controller/dto/ReportShareDto.java

@@ -38,6 +38,8 @@ public class ReportShareDto extends GaeaBaseDTO implements Serializable {
     /** 报表编码 */
     @NotEmpty(message = "6002")
     private String reportCode;
+    /** 报表名称 */
+    private String reportName;
 
     /** 0--已禁用 1--已启用  DIC_NAME=ENABLE_FLAG */
     private Integer enableFlag;

+ 4 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/controller/param/ReportShareParam.java

@@ -23,6 +23,10 @@ public class ReportShareParam extends PageParam implements Serializable {
     @Query(value = QueryEnum.LIKE)
     private String reportCode;
 
+    /** 报表名称 */
+    @Query(value = QueryEnum.LIKE)
+    private String reportName;
+
     /** 分享有效期类型 */
     @Query(value = QueryEnum.EQ)
     private String shareValidType;

+ 2 - 0
report-core/src/main/java/com/anjiplus/template/gaea/business/modules/reportshare/dao/entity/ReportShare.java

@@ -32,6 +32,8 @@ public class ReportShare extends GaeaBaseEntity {
 
     /** 报表编码 */
     private String reportCode;
+    /** 报表编码 */
+    private String reportName;
 
     /** 0--已禁用 1--已启用  DIC_NAME=ENABLE_FLAG */
     private Integer enableFlag;

+ 36 - 10
report-core/src/main/resources/bootstrap.yml

@@ -16,20 +16,46 @@ spring:
       max-file-size: 10MB #上传图片大小限制为10MB
   jackson:
     date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
   messages:
     basename: i18n/messages
   datasource:
     url: jdbc:mysql://10.108.26.197:3306/aj_report?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
     username: root
     password: appuser@anji
-    type: com.zaxxer.hikari.HikariDataSource
-    hikari:
-      connection-timeout: 300000  # 连接超时时间 - 默认值:30秒。
-      validation-timeout: 5000  # 连接被测试活动的最长时间 - 默认值:5秒。
-      idle-timeout: 60000  # 连接池中允许闲置的最长时间 - 默认值:10分钟
-      max-lifetime: 1800000  # 一个连接生命时长(毫秒),超时而没被使用则被释放 - 默认值:30分钟
-      maximum-pool-size: 10  #连接池中允许的最大连接数,包括闲置和使用中的连接 - 默认值:10
-      minimum-idle: 5  # 连接池中允许的最小空闲连接数 - 默认值:10。
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    type: com.alibaba.druid.pool.DruidDataSource
+  #数据源连接池配置
+  druid:
+    initial-size: 50
+    min-idle: 50
+    max-active: 100
+    # 获取连接等待超时的时间
+    max-wait: 5000
+    # 配置间隔多久才进行一次检测
+    time-between-eviction-runs-millis: 60000
+    # 配置一个连接在池中最小生存时间
+    min-evictable-idle-time-millis: 300000
+    validation-query: select 1
+    # 获取连接时执行检测,每次检测timeBetweenEvictionRunsMillis,空闲时间超过了minEvictableIdleTimeMillis则会直接剔除
+    test-while-idle: true
+    test-on-borrow: false
+    test-on-return: false
+    # 是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
+    pool-prepared-statements: false
+    max-pool-prepared-statement-per-connection-size: 50
+    filters: stat,wall
+    connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
+    use-global-data-source-stat: true
+    #StatViewServlet配置
+    stat-view-servlet.enabled: false
+    #注意:账号密码需修改
+    stat-view-servlet.login-username: admin
+    stat-view-servlet.login-password: admin
+    stat-view-servlet.allow: ""
+    connectionErrorRetryAttempts: 3 # 连接出错后再尝试连接三次
+    breakAfterAcquireFailure: true # 数据库服务宕机自动重连机制
+    timeBetweenConnectErrorMillis: 300000 # 连接出错后重试时间间隔
 
   #如果要使用redis,请参考report-core目录下的README.md文件中写的进行调整
 #  redis:
@@ -38,7 +64,7 @@ spring:
 #    password: root
 #    database: 1
   flyway:
-    enabled: true    #是否开启flyway,默认true.
+    enabled: false    #是否开启flyway(自动执行sql脚本),默认false
     baseline-on-migrate: true
     #数据库连接配置
     url: ${spring.datasource.url}
@@ -94,7 +120,7 @@ logging:
 # 本应用自定义参数
 customer:
   # 跳过token验证和权限验证的url清单
-  skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs
+  skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs, /reportExcel/exportExcel
   file:
     #导入导出临时文件夹 默认.代表当前目录,拼接/tmp_zip/目录
     tmpPath: .

+ 23 - 0
report-core/src/main/resources/db/migration/V1.5.0__update.sql

@@ -0,0 +1,23 @@
+-- 分享表增加report_name
+ALTER TABLE `gaea_report_share` ADD `report_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称' AFTER `report_code`;
+
+-- 更新report_name
+UPDATE `gaea_report_share` t1
+    INNER JOIN `aj_report`.`gaea_report` t2 on t1.report_code=t2.report_code
+    SET t1.report_name=t2.report_name;
+
+-- 数据集复制
+INSERT INTO `access_authority`(`parent_target`, `target`, `target_name`, `action`, `action_name`, `sort`, `enable_flag`, `delete_flag`, `create_by`, `create_time`, `update_by`, `update_time`, `version`)
+VALUES
+    ('report', 'resultsetManage', '数据集管理', 'copy', '数据集复制', 204, 1, 0, 'admin', '2019-07-23 15:59:40', 'admin', '2019-07-23 15:59:40', 1);
+
+-- root用户赋权
+INSERT INTO `access_role_authority`(`role_code`, `target`, `action`)
+VALUES
+    ('root', 'resultsetManage', 'copy');
+
+-- 散点图解析属性
+INSERT INTO `gaea_dict`(`dict_name`, `dict_code`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('散点图属性', 'SCATTER_PROPERTIES', '散点图属性', 'admin', '2021-04-29 10:28:15', 'admin', '2021-06-23 10:47:20', 1);
+
+INSERT INTO `gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SCATTER_PROPERTIES', 'x轴字段', 'xAxis', NULL, 1, 'zh', NULL, 1, 'admin', '2021-08-20 10:31:51', 'admin', '2021-08-20 10:31:51', 1);
+INSERT INTO `gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SCATTER_PROPERTIES', '散点', 'scatter', NULL, 1, 'zh', NULL, 6, 'admin', '2021-08-20 10:32:52', 'admin', '2021-08-20 10:32:52', 1);

+ 7 - 1
report-ui/build/vue-loader.conf.js

@@ -1,5 +1,11 @@
 'use strict'
 
 module.exports = {
-  //You can set the vue-loader configuration by yourself.
+  css: {
+    loaderOptions: {
+      sass: {
+        implementation: require('sass'), // This line must in sass option
+      },
+    },
+  }
 }

+ 10 - 3
report-ui/build/webpack.base.conf.js

@@ -22,9 +22,10 @@ module.exports = {
     publicPath: config.build.assetsPublicPath //process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath
   },
   resolve: {
-    extensions: ['.js', '.vue', '.json'],
+    extensions: ['mjs', '.js', '.vue', '.json'],
     alias: {
-      '@': resolve('src')
+      '@': resolve('src'),
+      'vue$': 'vue/dist/vue.runtime.esm.js'
     }
   },
   module: {
@@ -55,6 +56,7 @@ module.exports = {
         loader: 'url-loader',
         exclude: [resolve('src/icons')],
         options: {
+          //esModule: false,
           limit: 10000,
           name: utils.assetsPath('img/[name].[hash:7].[ext]')
         }
@@ -74,7 +76,12 @@ module.exports = {
           limit: 10000,
           name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
         }
-      }
+      },
+      {
+        test: /\.mjs$/,
+        include: /node_modules/,
+        type: 'javascript/auto'
+      },
     ]
   },
   plugins: [new VueLoaderPlugin()],

+ 17 - 3
report-ui/build/webpack.prod.conf.js

@@ -97,11 +97,20 @@ const webpackConfig = merge(baseWebpackConfig, {
     // keep module.id stable when vender modules does not change
     new webpack.HashedModuleIdsPlugin(),
     // copy custom static assets
-    new CopyWebpackPlugin([{
+/*    new CopyWebpackPlugin([{
       from: path.resolve(__dirname, '../static'),
       to: config.build.assetsSubDirectory,
       ignore: ['.*']
-    }])
+    }])*/
+    new CopyWebpackPlugin({
+      patterns: [
+        {
+          from: path.resolve(__dirname, '../static'),
+          to: config.build.assetsSubDirectory,
+          ignore: ['.*']
+        }
+      ]
+    }),
   ],
   optimization: {
     splitChunks: {
@@ -126,7 +135,12 @@ const webpackConfig = merge(baseWebpackConfig, {
         uglifyOptions: {
           mangle: {
             safari10: true
-          }
+          },
+          compress: {
+            drop_debugger: true, //去掉debugger
+            drop_console: true, // 去掉console
+            pure_funcs: ['console.log', 'console.info', 'console.warn', 'console.debug'] //drop_console 设置false,需要特殊清除的
+          },
         },
         sourceMap: config.build.productionSourceMap,
         cache: true,

Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/china-contour.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/china.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/anhui.js


+ 46 - 0
report-ui/node_modules_echarts_need/map/js/province/aomen.js

@@ -0,0 +1,46 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports, require('echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+}(this, function (exports, echarts) {
+    var log = function (msg) {
+        if (typeof console !== 'undefined') {
+            console && console.error && console.error(msg);
+        }
+    }
+    if (!echarts) {
+        log('ECharts is not Loaded');
+        return;
+    }
+    if (!echarts.registerMap) {
+        log('ECharts Map is not loaded')
+        return;
+    }
+    echarts.registerMap('澳门', {"type":"FeatureCollection","features":[{"id":"820001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],"encodeOffsets":[[[116285,22746]],[[116303,22746]]]},"properties":{"cp":[113.552965,22.207882],"name":"花地玛堂区","childNum":2}},{"id":"820002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MK@CA@AAGDEB@NVFJG"],"encodeOffsets":[[116281,22734]]},"properties":{"cp":[113.549052,22.199175],"name":"花王堂区","childNum":1}},{"id":"820003","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EGOB@DNLHE@C"],"encodeOffsets":[[116285,22729]]},"properties":{"cp":[113.550252,22.193791],"name":"望德堂区","childNum":1}},{"id":"820004","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ŸYMVAN@BFCBBDAFHDBBFDHIJJEFDPCHHlYJQ"],"encodeOffsets":[[116313,22707]]},"properties":{"cp":[113.55374,22.188119],"name":"大堂区","childNum":1}},{"id":"820005","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JICGAECACGEBAAEDBFNXB@"],"encodeOffsets":[[116266,22728]]},"properties":{"cp":[113.54167,22.187778],"name":"风顺堂区","childNum":1}},{"id":"820006","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ ZNWRquZCBCC@AEA@@ADCDCAACEAGBQ@INEL"],"encodeOffsets":[[116265,22694]]},"properties":{"cp":[113.558783,22.154124],"name":"嘉模堂区","childNum":1}},{"id":"820007","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MOIAIEI@@GE@AAUCBdCFIFR@HAFBBDDBDCBC@@FB@BDDDA\\M"],"encodeOffsets":[[116316,22676]]},"properties":{"cp":[113.56925,22.136546],"name":"路凼填海区","childNum":1}},{"id":"820008","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKMMa_GC_COD@dVDBBF@@HJ@JFJBNPZK"],"encodeOffsets":[[116329,22670]]},"properties":{"cp":[113.559954,22.124049],"name":"圣方济各堂区","childNum":1}}],"UTF8Encoding":true});
+}));

Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/beijing.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/province/chongqing.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/fujian.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/gansu.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/guangdong.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/guangxi.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/guizhou.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/hainan.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/hebei.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/heilongjiang.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/henan.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/hubei.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/hunan.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/jiangsu.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/jiangxi.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/jilin.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/liaoning.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/neimenggu.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/ningxia.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/qinghai.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/shandong.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/province/shanghai.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/shanxi.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/shanxi1.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/sichuan.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/province/taiwan.js


Plik diff jest za duży
+ 18 - 0
report-ui/node_modules_echarts_need/map/js/province/tianjin.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/xianggang.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/province/xinjiang.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/province/xizang.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/yunnan.js


Plik diff jest za duży
+ 44 - 0
report-ui/node_modules_echarts_need/map/js/province/zhejiang.js


Plik diff jest za duży
+ 19 - 0
report-ui/node_modules_echarts_need/map/js/world.js


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/china-cities.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/china-contour.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/china.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/anhui.json


+ 1 - 0
report-ui/node_modules_echarts_need/map/json/province/aomen.json

@@ -0,0 +1 @@
+{"type":"FeatureCollection","features":[{"id":"820001","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LADC^umZ@DONWE@DALBBF@H@DFBBTC"],["@@P@LC@AGM@OECMBABBTCD@DDH"]],"encodeOffsets":[[[116285,22746]],[[116303,22746]]]},"properties":{"cp":[113.552965,22.207882],"name":"花地玛堂区","childNum":2}},{"id":"820002","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MK@CA@AAGDEB@NVFJG"],"encodeOffsets":[[116281,22734]]},"properties":{"cp":[113.549052,22.199175],"name":"花王堂区","childNum":1}},{"id":"820003","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@EGOB@DNLHE@C"],"encodeOffsets":[[116285,22729]]},"properties":{"cp":[113.550252,22.193791],"name":"望德堂区","childNum":1}},{"id":"820004","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ŸYMVAN@BFCBBDAFHDBBFDHIJJEFDPCHHlYJQ"],"encodeOffsets":[[116313,22707]]},"properties":{"cp":[113.55374,22.188119],"name":"大堂区","childNum":1}},{"id":"820005","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@JICGAECACGEBAAEDBFNXB@"],"encodeOffsets":[[116266,22728]]},"properties":{"cp":[113.54167,22.187778],"name":"风顺堂区","childNum":1}},{"id":"820006","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ ZNWRquZCBCC@AEA@@ADCDCAACEAGBQ@INEL"],"encodeOffsets":[[116265,22694]]},"properties":{"cp":[113.558783,22.154124],"name":"嘉模堂区","childNum":1}},{"id":"820007","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@MOIAIEI@@GE@AAUCBdCFIFR@HAFBBDDBDCBC@@FB@BDDDA\\M"],"encodeOffsets":[[116316,22676]]},"properties":{"cp":[113.56925,22.136546],"name":"路凼填海区","childNum":1}},{"id":"820008","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@DKMMa_GC_COD@dVDBBF@@HJ@JFJBNPZK"],"encodeOffsets":[[116329,22670]]},"properties":{"cp":[113.559954,22.124049],"name":"圣方济各堂区","childNum":1}}],"UTF8Encoding":true}

Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/beijing.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/chongqing.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/fujian.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/gansu.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/guangdong.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/guangxi.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/guizhou.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/hainan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/hebei.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/heilongjiang.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/henan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/hubei.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/hunan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/jiangsu.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/jiangxi.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/jilin.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/liaoning.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/neimenggu.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/ningxia.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/qinghai.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/shandong.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/shanghai.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/shanxi.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/shanxi1.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/sichuan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/taiwan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/tianjin.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/xianggang.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/xinjiang.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/xizang.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/yunnan.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/province/zhejiang.json


Plik diff jest za duży
+ 0 - 0
report-ui/node_modules_echarts_need/map/json/world.json


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików