lph пре 1 година
родитељ
комит
2601d2fea0
89 измењених фајлова са 1782 додато и 67 уклоњено
  1. 12 4
      zkqy-ui/.env.development
  2. 1 0
      zkqy-ui/package.json
  3. 9 7
      zkqy-ui/public/index.html
  4. 0 0
      zkqy-ui/public/static/favicon.ico
  5. 0 0
      zkqy-ui/public/static/index-center.png
  6. 0 0
      zkqy-ui/public/static/logo-dp.png
  7. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/Anton-Regular.ttf
  8. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/HanaleiFill-Regular.ttf
  9. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/Pacifico-Regular.ttf
  10. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/demo.css
  11. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/demo_index.html
  12. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.css
  13. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.eot
  14. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.js
  15. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.json
  16. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.svg
  17. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.ttf
  18. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.woff
  19. 0 0
      zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.woff2
  20. 0 0
      zkqy-ui/public/static/luckysheet/css/EwaAntH.gif
  21. 0 0
      zkqy-ui/public/static/luckysheet/css/EwaAntV.gif
  22. 0 0
      zkqy-ui/public/static/luckysheet/css/arrow-down.png
  23. 0 0
      zkqy-ui/public/static/luckysheet/css/loading.gif
  24. 0 0
      zkqy-ui/public/static/luckysheet/css/luckysheet.css
  25. 0 0
      zkqy-ui/public/static/luckysheet/css/menuSprite.svg
  26. 0 0
      zkqy-ui/public/static/luckysheet/css/paint_16px.ico
  27. 0 0
      zkqy-ui/public/static/luckysheet/css/paint_24px.ico
  28. 0 0
      zkqy-ui/public/static/luckysheet/css/paint_32px.ico
  29. 0 0
      zkqy-ui/public/static/luckysheet/css/sprite38.svg
  30. 0 0
      zkqy-ui/public/static/luckysheet/css/waffle_sprite.png
  31. 0 0
      zkqy-ui/public/static/luckysheet/demoData/demoFeature.js
  32. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetCell.js
  33. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetChart.js
  34. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetComment.js
  35. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetConditionFormat.js
  36. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetDataVerification.js
  37. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetFormula.js
  38. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetPicture.js
  39. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetPivotTable.js
  40. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetPivotTableData.js
  41. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetSparkline.js
  42. 0 0
      zkqy-ui/public/static/luckysheet/demoData/sheetTable.js
  43. 0 0
      zkqy-ui/public/static/luckysheet/echarts.min.js
  44. 0 0
      zkqy-ui/public/static/luckysheet/expendPlugins/chart/chartmix.css
  45. 0 0
      zkqy-ui/public/static/luckysheet/expendPlugins/chart/chartmix.umd.min.js
  46. 0 0
      zkqy-ui/public/static/luckysheet/fonts/FontAwesome.otf
  47. 0 0
      zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.eot
  48. 0 0
      zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.svg
  49. 0 0
      zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.ttf
  50. 0 0
      zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.woff
  51. 0 0
      zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.woff2
  52. 0 0
      zkqy-ui/public/static/luckysheet/index.html
  53. 0 0
      zkqy-ui/public/static/luckysheet/luckyexcel.umd.js
  54. 6 0
      zkqy-ui/public/static/luckysheet/luckysheet.umd.js
  55. 0 0
      zkqy-ui/public/static/luckysheet/plugins/css/pluginsCss.css
  56. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/CFcolorGradation.png
  57. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/CFdataBar.png
  58. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/CFicons.png
  59. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/icon_dropCell.png
  60. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/js.png
  61. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_444444_256x240.png
  62. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_555555_256x240.png
  63. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_777620_256x240.png
  64. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_777777_256x240.png
  65. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_cc0000_256x240.png
  66. 0 0
      zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_ffffff_256x240.png
  67. 0 0
      zkqy-ui/public/static/luckysheet/plugins/js/plugin.js
  68. 0 0
      zkqy-ui/public/static/luckysheet/plugins/plugins.css
  69. 0 0
      zkqy-ui/public/static/luckysheet/vue@2.6.11.js
  70. 0 0
      zkqy-ui/public/static/luckysheet/vuex@3.4.0.js
  71. 0 0
      zkqy-ui/public/static/wordCloud/echarts-wordcloud.min.js
  72. 1 1
      zkqy-ui/src/layout/index.vue
  73. 10 0
      zkqy-ui/src/main.js
  74. 19 0
      zkqy-ui/src/router/index.js
  75. 56 0
      zkqy-ui/src/views/system/report/dataSet/components/DataView.vue
  76. 1120 0
      zkqy-ui/src/views/system/report/dataSet/components/EditDataSet.vue
  77. 132 0
      zkqy-ui/src/views/system/report/dataSet/components/MonacoEditor.vue
  78. 38 0
      zkqy-ui/src/views/system/report/dataSet/components/util/javascript-completion.js
  79. 58 0
      zkqy-ui/src/views/system/report/dataSet/components/util/log-language.js
  80. 82 0
      zkqy-ui/src/views/system/report/dataSet/components/util/sql-completion.js
  81. 211 0
      zkqy-ui/src/views/system/report/dataSet/index.vue
  82. 0 7
      zkqy-ui/src/views/system/report/excelreport/components/colorPicker.vue
  83. 20 20
      zkqy-ui/src/views/system/report/excelreport/designer/index.vue
  84. 0 7
      zkqy-ui/src/views/system/report/excelreport/share/shareConfig.vue
  85. 0 7
      zkqy-ui/src/views/system/report/excelreport/share/shareLink.vue
  86. 3 8
      zkqy-ui/src/views/system/report/excelreport/viewer/index.vue
  87. 0 0
      zkqy-ui/src/views/system/report/testData/excelData.js
  88. 0 5
      zkqy-ui/static/luckysheet/luckysheet.umd.js
  89. 4 1
      zkqy-ui/vue.config.js

+ 12 - 4
zkqy-ui/.env.development

@@ -13,7 +13,6 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true
 # # #数据引擎模块IP
 # VUE_APP_BASE_API2 = 'http://192.168.110.76:8099/'
 
-
 # # #表单引擎模块IP
 # VUE_APP_BASE_API3 = 'http://192.168.110.76:8088/'
 
@@ -21,7 +20,16 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true
 # VUE_APP_BASE_API4 = 'http://192.168.110.76:8055/'
 
 
-VUE_APP_BASE_API2 = 'http://192.168.110.59:8099/'
-VUE_APP_BASE_API3 = 'http://192.168.110.59:8088/'
-VUE_APP_BASE_API4 = 'http://192.168.110.59:8055/'
+# VUE_APP_BASE_API2 = 'http://192.168.110.59:8099/'
+# VUE_APP_BASE_API3 = 'http://192.168.110.59:8088/'
+# VUE_APP_BASE_API4 = 'http://192.168.110.59:8055/'
+
+
+# VUE_APP_BASE_API2 = 'http://192.168.110.83:8099/'
+# VUE_APP_BASE_API3 = 'http://192.168.110.83:8088/'
+# VUE_APP_BASE_API4 = 'http://192.168.110.83:8055/'
+
 
+VUE_APP_BASE_API2 = 'http://192.168.110.76:8099/'
+VUE_APP_BASE_API3 = 'http://192.168.110.76:8088/'
+VUE_APP_BASE_API4 = 'http://192.168.110.76:8055/'

+ 1 - 0
zkqy-ui/package.json

@@ -97,6 +97,7 @@
     "vant": "^2.12.30",
     "vcolorpicker": "^2.0.12",
     "vue": "2.6.12",
+    "vue-codemirror": "^4.0.6",
     "vue-codemirror-lite": "^1.0.4",
     "vue-count-to": "1.0.13",
     "vue-cropper": "0.5.5",

+ 9 - 7
zkqy-ui/public/index.html

@@ -11,13 +11,15 @@
   <title>
     <%= webpackConfig.name %>
   </title>
-  <link rel='stylesheet' href='../static/luckysheet/plugins/css/pluginsCss.css' />
-  <link rel='stylesheet' href='../static/luckysheet/plugins/plugins.css' />
-  <link rel='stylesheet' href='../static/luckysheet/css/luckysheet.css' />
-  <link rel='stylesheet' href='../static/luckysheet/assets/iconfont/iconfont.css' />
-  <script src="../static/luckysheet/plugins/js/plugin.js"></script>
-  <script src="../static/luckysheet/luckysheet.umd.js"></script>
-  <script src="../static/luckysheet/luckyexcel.umd.js"></script>
+
+  <link rel='stylesheet' href='/static/luckysheet/plugins/css/pluginsCss.css' />
+  <link rel='stylesheet' href='/static/luckysheet/plugins/plugins.css' />
+  <link rel='stylesheet' href='/static/luckysheet/css/luckysheet.css' />
+  <link rel='stylesheet' href='/static/luckysheet/assets/iconfont/iconfont.css' />
+  <script src="/static/luckysheet/plugins/js/plugin.js"></script>
+  <script src="/static/luckysheet/luckysheet.umd.js"></script>
+
+
   <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
   <style>
     html,

+ 0 - 0
zkqy-ui/static/favicon.ico → zkqy-ui/public/static/favicon.ico


+ 0 - 0
zkqy-ui/static/index-center.png → zkqy-ui/public/static/index-center.png


+ 0 - 0
zkqy-ui/static/logo-dp.png → zkqy-ui/public/static/logo-dp.png


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/Anton-Regular.ttf → zkqy-ui/public/static/luckysheet/assets/iconfont/Anton-Regular.ttf


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/HanaleiFill-Regular.ttf → zkqy-ui/public/static/luckysheet/assets/iconfont/HanaleiFill-Regular.ttf


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/Pacifico-Regular.ttf → zkqy-ui/public/static/luckysheet/assets/iconfont/Pacifico-Regular.ttf


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/demo.css → zkqy-ui/public/static/luckysheet/assets/iconfont/demo.css


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/demo_index.html → zkqy-ui/public/static/luckysheet/assets/iconfont/demo_index.html


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.css → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.css


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.eot → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.eot


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.js → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.js


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.json → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.json


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.svg → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.svg


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.ttf → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.ttf


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.woff → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.woff


+ 0 - 0
zkqy-ui/static/luckysheet/assets/iconfont/iconfont.woff2 → zkqy-ui/public/static/luckysheet/assets/iconfont/iconfont.woff2


+ 0 - 0
zkqy-ui/static/luckysheet/css/EwaAntH.gif → zkqy-ui/public/static/luckysheet/css/EwaAntH.gif


+ 0 - 0
zkqy-ui/static/luckysheet/css/EwaAntV.gif → zkqy-ui/public/static/luckysheet/css/EwaAntV.gif


+ 0 - 0
zkqy-ui/static/luckysheet/css/arrow-down.png → zkqy-ui/public/static/luckysheet/css/arrow-down.png


+ 0 - 0
zkqy-ui/static/luckysheet/css/loading.gif → zkqy-ui/public/static/luckysheet/css/loading.gif


+ 0 - 0
zkqy-ui/static/luckysheet/css/luckysheet.css → zkqy-ui/public/static/luckysheet/css/luckysheet.css


+ 0 - 0
zkqy-ui/static/luckysheet/css/menuSprite.svg → zkqy-ui/public/static/luckysheet/css/menuSprite.svg


+ 0 - 0
zkqy-ui/static/luckysheet/css/paint_16px.ico → zkqy-ui/public/static/luckysheet/css/paint_16px.ico


+ 0 - 0
zkqy-ui/static/luckysheet/css/paint_24px.ico → zkqy-ui/public/static/luckysheet/css/paint_24px.ico


+ 0 - 0
zkqy-ui/static/luckysheet/css/paint_32px.ico → zkqy-ui/public/static/luckysheet/css/paint_32px.ico


+ 0 - 0
zkqy-ui/static/luckysheet/css/sprite38.svg → zkqy-ui/public/static/luckysheet/css/sprite38.svg


+ 0 - 0
zkqy-ui/static/luckysheet/css/waffle_sprite.png → zkqy-ui/public/static/luckysheet/css/waffle_sprite.png


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/demoFeature.js → zkqy-ui/public/static/luckysheet/demoData/demoFeature.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetCell.js → zkqy-ui/public/static/luckysheet/demoData/sheetCell.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetChart.js → zkqy-ui/public/static/luckysheet/demoData/sheetChart.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetComment.js → zkqy-ui/public/static/luckysheet/demoData/sheetComment.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetConditionFormat.js → zkqy-ui/public/static/luckysheet/demoData/sheetConditionFormat.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetDataVerification.js → zkqy-ui/public/static/luckysheet/demoData/sheetDataVerification.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetFormula.js → zkqy-ui/public/static/luckysheet/demoData/sheetFormula.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetPicture.js → zkqy-ui/public/static/luckysheet/demoData/sheetPicture.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetPivotTable.js → zkqy-ui/public/static/luckysheet/demoData/sheetPivotTable.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetPivotTableData.js → zkqy-ui/public/static/luckysheet/demoData/sheetPivotTableData.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetSparkline.js → zkqy-ui/public/static/luckysheet/demoData/sheetSparkline.js


+ 0 - 0
zkqy-ui/static/luckysheet/demoData/sheetTable.js → zkqy-ui/public/static/luckysheet/demoData/sheetTable.js


+ 0 - 0
zkqy-ui/static/luckysheet/echarts.min.js → zkqy-ui/public/static/luckysheet/echarts.min.js


+ 0 - 0
zkqy-ui/static/luckysheet/expendPlugins/chart/chartmix.css → zkqy-ui/public/static/luckysheet/expendPlugins/chart/chartmix.css


+ 0 - 0
zkqy-ui/static/luckysheet/expendPlugins/chart/chartmix.umd.min.js → zkqy-ui/public/static/luckysheet/expendPlugins/chart/chartmix.umd.min.js


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/FontAwesome.otf → zkqy-ui/public/static/luckysheet/fonts/FontAwesome.otf


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/fontawesome-webfont.eot → zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.eot


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/fontawesome-webfont.svg → zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.svg


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/fontawesome-webfont.ttf → zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.ttf


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/fontawesome-webfont.woff → zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.woff


+ 0 - 0
zkqy-ui/static/luckysheet/fonts/fontawesome-webfont.woff2 → zkqy-ui/public/static/luckysheet/fonts/fontawesome-webfont.woff2


+ 0 - 0
zkqy-ui/static/luckysheet/index.html → zkqy-ui/public/static/luckysheet/index.html


+ 0 - 0
zkqy-ui/static/luckysheet/luckyexcel.umd.js → zkqy-ui/public/static/luckysheet/luckyexcel.umd.js


Разлика између датотеке није приказан због своје велике величине
+ 6 - 0
zkqy-ui/public/static/luckysheet/luckysheet.umd.js


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/css/pluginsCss.css → zkqy-ui/public/static/luckysheet/plugins/css/pluginsCss.css


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/CFcolorGradation.png → zkqy-ui/public/static/luckysheet/plugins/images/CFcolorGradation.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/CFdataBar.png → zkqy-ui/public/static/luckysheet/plugins/images/CFdataBar.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/CFicons.png → zkqy-ui/public/static/luckysheet/plugins/images/CFicons.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/icon_dropCell.png → zkqy-ui/public/static/luckysheet/plugins/images/icon_dropCell.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/js.png → zkqy-ui/public/static/luckysheet/plugins/images/js.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_444444_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_444444_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_555555_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_555555_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_777620_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_777620_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_777777_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_777777_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_cc0000_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_cc0000_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/images/ui-icons_ffffff_256x240.png → zkqy-ui/public/static/luckysheet/plugins/images/ui-icons_ffffff_256x240.png


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/js/plugin.js → zkqy-ui/public/static/luckysheet/plugins/js/plugin.js


+ 0 - 0
zkqy-ui/static/luckysheet/plugins/plugins.css → zkqy-ui/public/static/luckysheet/plugins/plugins.css


+ 0 - 0
zkqy-ui/static/luckysheet/vue@2.6.11.js → zkqy-ui/public/static/luckysheet/vue@2.6.11.js


+ 0 - 0
zkqy-ui/static/luckysheet/vuex@3.4.0.js → zkqy-ui/public/static/luckysheet/vuex@3.4.0.js


+ 0 - 0
zkqy-ui/static/wordCloud/echarts-wordcloud.min.js → zkqy-ui/public/static/wordCloud/echarts-wordcloud.min.js


+ 1 - 1
zkqy-ui/src/layout/index.vue

@@ -173,7 +173,7 @@ export default {
   mounted() {
     var user = sessionStorage.getItem("sessionObj");
     var user = JSON.parse(user);
-    this.userName = JSON.parse(user.data).username;
+    this.userName = JSON.parse(user.data()).username;
   },
   created() {
     this.getlogo();

+ 10 - 0
zkqy-ui/src/main.js

@@ -118,6 +118,16 @@ Vue.use(Avue);
 // 数据报表相关  end
 
 
+// luckySheet start
+// import '../static/luckysheet/plugins/css/pluginsCss.css'
+// import '../static/luckysheet/plugins/plugins.css'
+// import '../static/luckysheet/css/luckysheet.css'
+// import '../static/luckysheet/assets/iconfont/iconfont.css'
+// import '../static/luckysheet/plugins/js/plugin.js'
+// import '../static/luckysheet/luckysheet.umd.js'
+
+// luckySheet end
+
 
 
 

+ 19 - 0
zkqy-ui/src/router/index.js

@@ -67,6 +67,17 @@ export const constantRoutes = [
           link: null
         },
       },
+      {
+        name: 'dataSet',
+        path: 'dataSet',
+        component: () => import('@/views/system/report/dataSet/index'),
+        meta: {
+          title: "数据集",
+          icon: "form",
+          noCache: false,
+          link: null
+        },
+      },
       {
         path: 'bigscreen',
         name: 'bigscreen',
@@ -109,6 +120,14 @@ export const constantRoutes = [
       requireAuth: true
     }
   },
+  { //excel报表预览
+    path: '/excelreport/viewer',
+    component: () => import('@/views/system/report/excelreport/viewer'),
+    hidden: true,
+    meta: {
+      requireAuth: true
+    }
+  },
   {
     path: '/tableMange',
     component: Layout,

+ 56 - 0
zkqy-ui/src/views/system/report/dataSet/components/DataView.vue

@@ -0,0 +1,56 @@
+<template>
+  <el-dialog
+    :title="caseResultTitle"
+    :close-on-click-modal="false"
+    :visible.sync="visib"
+    width="70%"
+    :before-close="closeDialog"
+  >
+    <vue-json-editor
+      v-model="caseResultContent"
+      :show-btns="false"
+      :mode="'code'"
+      lang="zh"
+      class="my-editor"
+      @json-change="onJsonChange"
+      @json-save="onJsonSave"
+    />
+    <span slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="closeDialog">关闭</el-button>
+    </span>
+  </el-dialog>
+</template>
+<script>
+import vueJsonEditor from "vue-json-editor";
+export default {
+  name: "Support",
+  components: { vueJsonEditor },
+  props: {
+    visib: {
+      required: true,
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      dialogCaseResult: false,
+      caseResultTitle: "",
+      caseResultContent: null,
+    };
+  },
+  methods: {
+    dataViewPreview(caseResultTitle, caseResultContent) {
+      this.caseResultTitle = caseResultTitle;
+      this.caseResultContent = caseResultContent;
+    },
+
+    // 关闭模态框
+    closeDialog() {
+      this.$emit("handleClose");
+    },
+    onJsonChange(value) {},
+    onJsonSave(value) {},
+  },
+};
+</script>

+ 1120 - 0
zkqy-ui/src/views/system/report/dataSet/components/EditDataSet.vue

@@ -0,0 +1,1120 @@
+<template>
+  <div>
+    <el-dialog
+      :title="dialogFormVisibleTitle"
+      :visible.sync="visib"
+      :close-on-click-modal="false"
+      :before-close="closeDialog"
+      width="65%"
+    >
+      <el-form
+        ref="form"
+        :model="formData"
+        :rules="formRules"
+        size="small"
+        label-width="130px"
+      >
+        <el-row :gutter="10">
+          <el-col
+            v-if="this.setType == 'sql'"
+            :xs="24"
+            :sm="20"
+            :md="8"
+            :lg="8"
+            :xl="8"
+          >
+            <el-form-item label="数据源" prop="sourceCode">
+              <el-select
+                v-model.trim="formData.sourceCode"
+                class="organisation"
+                size="mini"
+                @change="changeSource"
+              >
+                <el-option
+                  v-for="item in sourceList"
+                  :key="item.sourceName"
+                  :label="item.sourceName"
+                  :value="item.sourceCode"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7">
+            <el-form-item label="数据集编码" prop="setCode">
+              <el-input
+                :disabled="updataDisabled"
+                v-model.trim="formData.setCode"
+                placeholder="唯一标识"
+                size="mini"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="20" :md="7" :lg="7" :xl="7">
+            <el-form-item label="数据集名称" prop="setName">
+              <el-input v-model.trim="formData.setName" size="mini" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="20" :md="22" :lg="22" :xl="22">
+            <el-form-item label="数据集描述">
+              <el-input v-model.trim="formData.setDesc" size="mini" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row v-if="this.setType == 'sql'" :gutter="10">
+          <el-col
+            :xs="24"
+            :sm="20"
+            :md="22"
+            :lg="22"
+            :xl="22"
+            class="code-mirror-form"
+          >
+            <el-form-item label="查询SQL">
+              <div class="codemirror">
+                <monaco-editor
+                  v-model.trim="formData.dynSentence"
+                  language="sql"
+                  style="height: 500px"
+                />
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row v-if="this.setType == 'http'">
+          <el-form-item label="请求路径">
+            <el-input
+              placeholder="请输入请求路径..."
+              v-model="httpForm.apiUrl"
+              class="input-with-select"
+            >
+              <el-select
+                v-model="httpForm.method"
+                slot="prepend"
+                placeholder="请选择"
+              >
+                <el-option label="GET" value="GET"></el-option>
+                <el-option label="POST" value="POST"></el-option>
+                <el-option label="PUT" value="PUT"></el-option>
+                <el-option label="DELETE" value="DELETE"></el-option>
+              </el-select>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="请求头">
+            <el-input
+              v-model.trim="httpForm.header"
+              size="mini"
+              placeholder="请输入请求头..."
+            />
+          </el-form-item>
+          <el-form-item label="请求体">
+            <el-input
+              v-model.trim="httpForm.body"
+              size="mini"
+              placeholder="请输入请求体..."
+            />
+          </el-form-item>
+        </el-row>
+        <el-row :gutter="10">
+          <el-col :xs="24" :sm="20" :md="22" :lg="22" :xl="22">
+            <el-form label-width="100px" class="demo-ruleForm">
+              <el-tabs
+                v-model.trim="tabsActiveName"
+                type="card"
+                @tab-click="handleClickTabs"
+              >
+                <el-tab-pane label="查询参数" name="first">
+                  <el-button
+                    v-if="tableData.length == 0"
+                    type="text"
+                    size="small"
+                    @click="addRow()"
+                    >添加
+                  </el-button>
+                  <el-table :data="tableData" border style="width: 100%">
+                    <el-table-column
+                      align="center"
+                      label="序号"
+                      type="index"
+                      min-width="80"
+                    />
+                    <el-table-column label="参数名" align="center">
+                      <template slot-scope="scope">
+                        <el-input
+                          v-model.trim="tableData[scope.$index].paramName"
+                          :disabled="
+                            tableData[scope.$index].paramName == 'pageSize' ||
+                            tableData[scope.$index].paramName == 'pageNumber'
+                          "
+                        />
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="描述" align="center">
+                      <template slot-scope="scope">
+                        <el-input
+                          v-model.trim="tableData[scope.$index].paramDesc"
+                        />
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="数据类型" align="center">
+                      <template slot-scope="scope">
+                        <el-input
+                          v-model.trim="tableData[scope.$index].paramType"
+                        />
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="示例值" align="center">
+                      <template slot-scope="scope">
+                        <el-input
+                          v-model.trim="tableData[scope.$index].sampleItem"
+                        />
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="校验" width="220" align="center">
+                      <template slot-scope="scope">
+                        <el-checkbox
+                          v-model="tableData[scope.$index].mandatory"
+                          @change="Mandatory(scope.$index)"
+                          >必选
+                        </el-checkbox>
+                        <el-button
+                          type="primary"
+                          icon="el-icon-plus"
+                          @click="permissionClick(scope.row, scope.$index)"
+                        >
+                          高级规则
+                        </el-button>
+                      </template>
+                    </el-table-column>
+                    <el-table-column label="操作" width="200" align="center">
+                      <template slot-scope="scope">
+                        <el-button
+                          type="text"
+                          size="small"
+                          @click.native.prevent="
+                            cutOutRow(scope.$index, tableData)
+                          "
+                          >删除
+                        </el-button>
+                        <el-button
+                          type="text"
+                          size="small"
+                          @click="addRow(scope.row)"
+                          >追加
+                        </el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </el-tab-pane>
+                <el-tab-pane label="数据转换" name="second">
+                  <template>
+                    <div class="filterWrapper">
+                      <div class="filterTable">
+                        <div
+                          v-for="(item, index) in itemFilterList"
+                          :key="index"
+                          class="filterBox"
+                        >
+                          <div class="box">
+                            <el-select
+                              v-model="item.transformType"
+                              placeholder="请选择"
+                              clearable
+                              filterable
+                              @change="changeForm"
+                            >
+                              <el-option
+                                v-for="item in []"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                              >
+                              </el-option>
+                            </el-select>
+
+                            <el-button
+                              type="text"
+                              class="reduceFilter"
+                              icon="el-icon-close"
+                              @click="reduceFilter(item)"
+                            />
+                            <el-button
+                              v-if="
+                                item.transformType == 'js' ||
+                                item.transformType == 'dict' ||
+                                item.transformType == 'javaBean'
+                              "
+                              type="text"
+                              class="editor"
+                              icon="el-icon-edit"
+                              @click="filterScriptBtn(item)"
+                            />
+                          </div>
+                          <el-button
+                            type="text"
+                            class="font-icon-right"
+                            icon="el-icon-right"
+                          />
+                        </div>
+                        <el-dialog
+                          :title="dialogTitle"
+                          :visible.sync="dialogSwitchVisible"
+                          :close-on-click-modal="false"
+                          width="60%"
+                          min-height="400px"
+                          append-to-body
+                        >
+                          <div
+                            v-if="
+                              isItemFilterType.transformType == 'js' ||
+                              isItemFilterType.transformType == 'javaBean'
+                            "
+                          >
+                            <div class="codemirror">
+                              <!-- //自定义高级规则? -->
+                              <monaco-editor
+                                v-if="jsScriptVisible"
+                                v-model.trim="transformScript"
+                                language="javascript"
+                                style="height: 500px"
+                              />
+                            </div>
+                          </div>
+                          <div v-else>
+                            <div
+                              v-for="(item, index) in tableData2"
+                              :key="index"
+                            >
+                              <label>字典项名称:</label>
+                              <el-input
+                                v-model.trim="item.name"
+                                size="small"
+                                style="width: 25%"
+                              />
+                              <el-button
+                                type="danger"
+                                size="small"
+                                plain
+                                icon="el-icon-delete"
+                                @click="delAllDict(index, tableData2)"
+                              />
+                              <el-table
+                                :data="item.children"
+                                border
+                                style="width: 80%"
+                              >
+                                <el-table-column label="key" width="180">
+                                  <template slot-scope="scope">
+                                    <el-input
+                                      v-model.trim="
+                                        item.children[scope.$index].name
+                                      "
+                                    />
+                                  </template>
+                                </el-table-column>
+                                <el-table-column label="值">
+                                  <template slot-scope="scope">
+                                    <el-input
+                                      v-model.trim="
+                                        item.children[scope.$index].value
+                                      "
+                                    />
+                                  </template>
+                                </el-table-column>
+                                <el-table-column
+                                  label="操作"
+                                  width="150px"
+                                  align="center"
+                                >
+                                  <template slot-scope="scope">
+                                    <el-button
+                                      type="success"
+                                      circle
+                                      plain
+                                      icon="el-icon-plus"
+                                      @click="
+                                        addDict(scope.$index, item.children)
+                                      "
+                                    />
+
+                                    <el-button
+                                      type="danger"
+                                      circle
+                                      plain
+                                      icon="el-icon-delete"
+                                      @click="
+                                        delDict(scope.$index, item.children)
+                                      "
+                                    />
+                                  </template>
+                                </el-table-column>
+                              </el-table>
+                            </div>
+                            <el-button type="success" @click="addAllDict()"
+                              >新增
+                            </el-button>
+                          </div>
+                          <span slot="footer" class="dialog-footer">
+                            <el-button @click="dialogSwitchVisible = false"
+                              >取消</el-button
+                            >
+                            <el-button
+                              type="primary"
+                              @click="filterScriptConfirm"
+                              >保存</el-button
+                            >
+                          </span>
+                        </el-dialog>
+                        <!-- //添加数据转换 -->
+                        <div
+                          class="addFilter"
+                          disabled="true"
+                          @click="addFilter"
+                        >
+                          <i class="el-icon-plus" /><span>新增</span>
+                        </div>
+                      </div>
+                    </div>
+                  </template>
+                </el-tab-pane>
+                <el-tab-pane label="测试预览" name="third">
+                  <div style="max-height: 400px; overflow: auto">
+                    <vue-json-editor
+                      v-model="cols"
+                      :show-btns="false"
+                      :mode="'code'"
+                      lang="zh"
+                      @json-change="onJsonChange"
+                      @json-save="onJsonSave"
+                    />
+                  </div>
+                </el-tab-pane>
+              </el-tabs>
+            </el-form>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取消</el-button>
+        <el-button type="primary" @click="submit('form')">保存</el-button>
+      </div>
+    </el-dialog>
+    <el-dialog
+      :title="title"
+      :visible.sync="dialogPermissionVisible"
+      :close-on-click-modal="false"
+      width="60%"
+    >
+      <div class="codemirror">
+        <!-- //自定义高级规则? -->
+        <monaco-editor
+          v-model.trim="validationRules"
+          language="javascript"
+          style="height: 500px"
+        />
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button type="warning" @click="testResultset">测试</el-button>
+
+        <el-button type="primary" @click="dialogValidationRules"
+          >保存</el-button
+        >
+        <el-button @click="dialogPermissionVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { codemirror } from "vue-codemirror"; // 引入codeMirror全局实例
+import "codemirror/mode/sql/sql.js";
+import "codemirror/mode/javascript/javascript.js";
+import "codemirror/lib/codemirror.css"; // 核心样式
+import "codemirror/theme/cobalt.css"; // 引入主题后还需要在 options 中指定主题才会生效
+import vueJsonEditor from "vue-json-editor";
+import MonacoEditor from "./MonacoEditor.vue";
+import { validateEngOrNum } from "@/utils/validate";
+export default {
+  name: "Support",
+  components: { codemirror, vueJsonEditor, MonacoEditor },
+  props: {
+    visib: {
+      required: true,
+      type: Boolean,
+      default: false,
+    },
+    dataSet: {
+      required: false,
+      type: Object,
+      default: () => {
+        return "";
+      },
+    },
+  },
+  data() {
+    return {
+      data: [],
+      listLoading: true,
+      permission: {
+        add: ["admin", "alipayConfig:add"],
+        edit: ["admin", "alipayConfig:edit"],
+        del: ["admin", "datasource:del"],
+      },
+      // 内部真实的内容
+      code: "",
+      // 默认配置
+      optionsSql: {
+        mode: "text/x-sql",
+        tabSize: 2, // 缩进格式
+        // theme: 'cobalt', // monokai主题,对应主题库 JS 需要提前引入
+        lineNumbers: true, // 显示行号
+        line: true,
+        styleActiveLine: true, // 高亮选中行
+        hintOptions: {
+          completeSingle: true, // 当匹配只有一项的时候是否自动补全
+        },
+      },
+      optionsJavascript: {
+        mode: "text/javascript",
+        tabSize: 2, // 缩进格式
+        // theme: 'cobalt', // monokai主题,对应主题库 JS 需要提前引入
+        lineNumbers: true, // 显示行号
+        line: true,
+        styleActiveLine: true, // 高亮选中行
+        hintOptions: {
+          completeSingle: true, // 当匹配只有一项的时候是否自动补全
+        },
+      },
+      selectedList: [],
+      clickType: "",
+      formData: {},
+      // 弹框默认隐藏
+      dialogFormVisible: false,
+      dialogFormVisibleTitle: "",
+      dialogPermissionVisible: false,
+      dialogSwitchVisible: false,
+      jsScriptVisible: false,
+      permissionTextarea: "",
+      isItemFilterType: "", // 选中的转换类型id
+      itemFilterList: [
+        {
+          transformType: "js",
+          transformScript: ``,
+        },
+      ],
+      transformScript: `function dataTransform(data){\n\t//自定义脚本内容\n\treturn data;\n}`,
+      itemFilterScriptId: "",
+      title: "自定义高级规则",
+      totalCount: 0,
+      totalPage: 0,
+      params: {
+        pageNumber: 1,
+        pageSize: 10,
+        helpTitle: "",
+        enabled: null,
+        helpCategory: "",
+        order: "DESC",
+        sort: "update_time",
+      },
+      formRules: {
+        setName: [
+          { required: true, message: "数据集名称必填", trigger: "blur" },
+        ],
+        setCode: [
+          { required: true, message: "数据集编码必填", trigger: "blur" },
+          { validator: validateEngOrNum, trigger: "blur" },
+        ],
+        sourceCode: [
+          { required: true, message: "数据源必选", trigger: "change" },
+        ],
+      },
+      sourceList: [],
+      validationRules: "",
+      tabsActiveName: "first",
+      cols: [],
+      tableData: [
+        {
+          paramName: "",
+          paramDesc: "",
+          paramType: "",
+          sampleItem: "",
+          mandatory: true,
+          requiredFlag: 1,
+          validationRules: `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`,
+        },
+      ],
+      isRowData: {},
+      tableData2: [],
+      dialogTitle: "脚本填写",
+      isShowPagination: false,
+      updataDisabled: false,
+      dialogCaseResult: false,
+      caseResultTitle: "",
+      caseResultContent: null,
+      testMassageCode: null,
+      query: {
+        setName: "",
+        setCode: "",
+      },
+      setType: "", //数据集类型,主要用于区分http   addSql  addHttp  edit
+      httpForm: {
+        //http数据源相关数据
+        apiUrl: "",
+        method: "GET",
+        header: '{"Content-Type":"application/json;charset=UTF-8"}',
+        body: "",
+      },
+      //待删除
+      dictionaryOptions: [], // 数据源类型
+      list: null,
+      basicDialog: false,
+      dialogForm: {
+        sourceName: "",
+        sourceCode: "",
+        sourceType: "",
+        sourceDesc: "",
+        sourceConfig: "",
+      },
+      dataLink: [],
+      rules: {
+        sourceType: [
+          { required: true, message: "数据集名称必选", trigger: "change" },
+        ],
+        sourceCode: [
+          { required: true, message: "数据集编码必填", trigger: "blur" },
+        ],
+        sourceName: [
+          { required: true, message: "数据源名称必选", trigger: "blur" },
+        ],
+      },
+      value: "",
+      testReplyCode: null,
+    };
+  },
+  methods: {
+    // 编辑数据集,获取单条数据详情
+    async addOrEditDataSet(row, type) {
+      this.setType = type;
+      if (type == "http" && row.dynSentence) {
+        this.httpForm = JSON.parse(row.dynSentence);
+      }
+      //获取数据源下拉
+      // const { code, data } = await queryAllDataSourceSet();
+      let code = 500,
+        data = {};
+      if (code != "200") return;
+      this.sourceList = data;
+
+      this.dialogFormVisible = true;
+      this.tabsActiveName = "first";
+      this.testMassageCode = null;
+      if (row.id) {
+        this.updataDisabled = true;
+        this.dialogFormVisibleTitle = "编辑数据集";
+        // dataSetPreview(row).then((data) => {
+        //   this.formData = data.data;
+        //   if (
+        //     data.data.dataSetParamDtoList != null ||
+        //     data.data.dataSetParamDtoList.length > 0
+        //   ) {
+        //     this.tableData = data.data.dataSetParamDtoList;
+        //     let count = 0;
+        //     this.tableData.find((value, i) => {
+        //       if (
+        //         value.paramName === "pageNumber" ||
+        //         value.paramName === "pageSize"
+        //       ) {
+        //         count++;
+        //       }
+        //       if (value.requiredFlag == 1) {
+        //         this.tableData[i].mandatory = true;
+        //       } else {
+        //         this.tableData[i].mandatory = false;
+        //       }
+        //     });
+        //     if (count === 2) {
+        //       this.isShowPagination = true;
+        //     } else {
+        //       this.isShowPagination = false;
+        //     }
+        //   } else {
+        //     this.tableData = [];
+        //     this.isShowPagination = false;
+        //   }
+        //   if (data.data.dataSetTransformDtoList !== null) {
+        //     this.itemFilterList = data.data.dataSetTransformDtoList;
+        //   } else {
+        //     this.itemFilterList = [];
+        //   }
+        //   this.itemFilterList.forEach((item, i) => {
+        //     if (item.transformType == "dict") {
+        //       const extendObj = JSON.parse(item.transformScript);
+        //       const extendArry = [];
+        //       for (const i in extendObj) {
+        //         const children = [];
+        //         for (const y in extendObj[i]) {
+        //           children.push({ name: y, value: extendObj[i][y] });
+        //         }
+        //         extendArry.push({ name: i, children: children });
+        //       }
+        //       this.tableData2 = extendArry;
+        //     }
+        //   });
+        // });
+      } else {
+        this.dialogFormVisibleTitle = "新增数据集";
+        this.updataDisabled = false;
+        this.formData = {
+          setName: "",
+          setCode: "",
+          setDesc: "",
+          sourceCode: "",
+          dynSentence: "",
+        };
+        this.tableData = [];
+        this.itemFilterList = [];
+        this.isShowPagination = false;
+      }
+    },
+    changeForm(val) {
+      if (!val) {
+        this.dialogSwitchVisible = false;
+        this.jsScriptVisible = false;
+      }
+    },
+    // 关闭模态框
+    closeDialog() {
+      this.$emit("handleClose");
+    },
+
+    onJsonChange(value) {},
+    onJsonSave(value) {},
+    handleClose(done) {
+      this.dialogFormVisible = false;
+    },
+    isShowCaseResult(item) {
+      this.dialogCaseResult = true;
+      this.caseResultTitle = item.setName;
+      this.caseResultContent = JSON.parse(item.caseResult);
+    },
+
+    // 测试预览
+    async handleClickTabs(tab, event) {
+      if (this.setType == "http") {
+        //针对http数据源
+        console.log("http数据集" + this.httpForm);
+        this.formData.dynSentence = JSON.stringify(this.httpForm);
+      }
+      if (tab.paneName == "third") {
+        const params = {
+          sourceCode: this.formData.sourceCode,
+          dynSentence: this.formData.dynSentence,
+          dataSetParamDtoList: this.tableData,
+          dataSetTransformDtoList: this.itemFilterList,
+          setType: this.setType,
+        };
+        // const { code, data } = await testTransformSet(params);
+        let code = 500,
+          data = {};
+        if (code != "200") return;
+        this.cols = data.data;
+        this.testMassageCode = code;
+      }
+    },
+    // 必选
+    Mandatory(val) {
+      if (!this.tableData[val].mandatory) {
+        this.tableData[val].requiredFlag = 0;
+      } else {
+        this.tableData[val].requiredFlag = 1;
+      }
+    },
+    // 分页参数增加列
+    changePagination() {
+      if (this.isShowPagination) {
+        this.tableData.push(
+          {
+            paramName: "pageNumber",
+            paramDesc: "当前页",
+            paramType: "int",
+            sampleItem: "1",
+            mandatory: true,
+            requiredFlag: 1,
+            validationRules: `function verification(data){\n\t//自定义脚本内容\n\treturn true;\n}`,
+          },
+          {
+            paramName: "pageSize",
+            paramDesc: "条数",
+            paramType: "int",
+            sampleItem: "10",
+            mandatory: true,
+            requiredFlag: 1,
+            validationRules: `function verification(data){\n\t//自定义脚本内容\n\treturn true;\n}`,
+          }
+        );
+      } else {
+        this.tableData.forEach((item, i) => {
+          if (item.paramName == "pageSize" || item.paramName == "pageNumber") {
+            this.tableData.splice(i, 2);
+          }
+        });
+      }
+    },
+    // js 脚本编辑
+    async filterScriptBtn(item) {
+      console.log(item);
+      this.isItemFilterType = item;
+      this.dialogSwitchVisible = true;
+      this.jsScriptVisible = true;
+      if (item.transformType == "js") {
+        this.itemFilterScriptId = item.itemFilterSort;
+        const fnCont = `function dataTransform(data){\n\t//自定义脚本内容\n\treturn data;\n}`;
+        this.transformScript = item.transformScript
+          ? item.transformScript
+          : fnCont;
+      } else if (item.transformType == "dict") {
+      } else if (item.transformType == "javaBean") {
+        this.itemFilterScriptId = item.itemFilterSort;
+        const fnCont = `package com;
+
+import com.alibaba.fastjson.JSONObject;
+import com.anjiplus.template.gaea.business.modules.datasettransform.service.IGroovyHandler;
+
+import java.util.List;
+
+/**
+ * 建议在idea写好复制整个类到此处,位置report-core/src/test/java/com/DemoGroovyHandler.java
+ */
+public class DemoGroovyHandler implements IGroovyHandler {
+
+    @Override
+    public List<JSONObject> transform(List<JSONObject> data) {
+
+        return data;
+    }
+}`;
+        this.transformScript = item.transformScript
+          ? item.transformScript
+          : fnCont;
+      }
+    },
+    // js 脚本编辑确定
+    filterScriptConfirm() {
+      const arr = this.toObject(this.tableData2);
+      this.itemFilterList.forEach((el, index) => {
+        if (el.transformType == "dict") {
+          el.transformScript = JSON.stringify(arr);
+        } else {
+          el.transformScript = this.transformScript;
+        }
+      });
+      this.dialogSwitchVisible = false;
+    },
+    addFilter() {
+      let obj = {};
+      this.tableData2 = [];
+      if (this.itemFilterList.length == 0) {
+        obj = {
+          transformType: "",
+          transformScript: "",
+          itemFilterSort: 1,
+        };
+      } else {
+        obj = {
+          transformType: "",
+          transformScript: "",
+          itemFilterSort: this.itemFilterList.length + 1,
+        };
+      }
+      this.itemFilterList.push(obj);
+    },
+    // 删除filter
+    reduceFilter(item) {
+      if (this.itemFilterList.length > 0) {
+        let index = this.itemFilterList.indexOf(item);
+        if (index > -1) {
+          this.itemFilterList.splice(index, 1);
+        }
+      }
+    },
+    // --查询参数-----------------///////////////////////////////////////////////////////////////////////
+    permissionClick(row, index) {
+      this.title = "自定义高级规则";
+      if (this.isRowData.sampleItem != "") {
+        this.isRowData = row;
+        const fnCont = `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`;
+        this.validationRules = row.validationRules
+          ? row.validationRules
+          : fnCont;
+      }
+      this.dialogPermissionVisible = true;
+    },
+    dialogValidationRules() {
+      this.isRowData.validationRules = this.validationRules;
+      this.dialogPermissionVisible = false;
+    },
+    // 字典项 增删改
+    addAllDict() {
+      this.tableData2.push({
+        name: "",
+        children: [{ name: "", value: "" }],
+      });
+    },
+    addDict(index, item) {
+      item.push({ name: "", value: "" });
+    },
+    delAllDict(index, rows) {
+      rows.splice(index, 1);
+    },
+    delDict(index, rows) {
+      if (index == 0) {
+        this.$message.error("至少保留一条");
+        return;
+      }
+      rows.splice(index, 1);
+    },
+    // -------------------------------------------------------------------------------
+    // 数据源下拉切换
+    changeSource() {},
+    // 自定义高级规则
+    async testResultset() {
+      this.isRowData.validationRules = this.validationRules;
+      console.log(this.isRowData, "12345678");
+      // const { code, message, data } = await verificationSet(this.isRowData);
+      let code = 500,
+        data = {};
+      if (code == "200") {
+        if (data) {
+          this.$message.success("返回结果:" + data);
+        } else {
+          this.$message.warning("当前示例值校验不通过");
+        }
+      } else {
+        this.$message.error(message);
+      }
+    },
+    // 删除
+    cutOutRow(index, rows) {
+      rows.splice(index, 1);
+    },
+    // 追加
+    addRow(index, row) {
+      this.tableData.push({
+        paramName: "",
+        paramDesc: "",
+        paramType: "",
+        sampleItem: "",
+        mandatory: true,
+        requiredFlag: 1,
+        validationRules: `function verification(data){\n\t//自定义脚本内容\n\t//可返回true/false单纯校验键入的data正确性\n\t//可返回文本,实时替换,比如当前时间等\n\t//return "2099-01-01 00:00:00";\n\treturn true;\n}`,
+      });
+    },
+    async submit(formName) {
+      if (this.setType == "http") {
+        //针对http数据源
+        console.log("http数据集" + this.httpForm);
+        this.formData.dynSentence = JSON.stringify(this.httpForm);
+      }
+      this.formData.setType = this.setType;
+      this.$refs[formName].validate(async (valid, obj) => {
+        if (valid) {
+          if (this.testMassageCode == 200) {
+            this.formData.dataSetParamDtoList = this.tableData;
+            this.formData.dataSetTransformDtoList = this.itemFilterList;
+            this.formData.caseResult = JSON.stringify(this.cols);
+            if (this.dialogFormVisibleTitle === "新增数据集") {
+              // const { code } = await addDataSet(this.formData);
+              let code = 500;
+              if (code != "200") return;
+              this.$emit("refreshList");
+              this.closeDialog();
+            } else {
+              // const { code } = await editDataSet(this.formData);
+              let code = 500;
+              if (code != "200") return;
+              this.$emit("refreshList");
+              this.closeDialog();
+            }
+          } else {
+            this.$message.error("请先测试预览,操作成功后便可保存!");
+            return;
+          }
+        } else {
+          return;
+        }
+      });
+    },
+    toObject(val) {
+      const objfirst = {};
+      const objSecond = {};
+      val.forEach((el) => {
+        el.name ? (objfirst[el.name] = el.children) : "";
+      });
+      for (const key in objfirst) {
+        const newObj = {};
+        objfirst[key].map((ev) => {
+          Object.assign(newObj, { [ev.name]: ev.value });
+        });
+        objSecond[key] = newObj;
+      }
+      return objSecond;
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.code-mirror-form {
+  ::v-deep(.el-form-item__content) {
+    height: 200px;
+    overflow: hidden;
+  }
+}
+
+.my-editor {
+  height: 400px;
+
+  div.jsoneditor {
+    height: 400px !important;
+  }
+}
+
+.title {
+  width: 100%;
+  display: inline-block;
+  text-align: left;
+}
+
+.addSwitch {
+  ul {
+    list-style: none;
+    margin: 0px;
+
+    li {
+      width: 200px;
+      height: 60px;
+      padding: 10px;
+      border: 1px solid #aaa;
+      float: left;
+      margin-right: 10px;
+      text-align: center;
+      line-height: 40px;
+      cursor: pointer;
+
+      &.add,
+      &:hover {
+        border: 1px solid #3385ff;
+        color: #3385ff;
+      }
+    }
+  }
+}
+
+.filterWrapper {
+  position: relative;
+}
+
+.filterTable {
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  padding: 5px 15px 25px 15px;
+}
+
+.filterWrapper .addFilter {
+  cursor: pointer;
+  width: 150px;
+  height: 50px;
+  border-radius: 3px;
+  border: 1px solid #67c23a;
+  margin-top: 20px;
+  background: #e4f7da;
+  padding-left: 24px;
+}
+
+.filterWrapper .addFilter i {
+  font-size: 20px;
+  color: #67c23a;
+  margin-top: 16px;
+  margin-left: 16px;
+}
+
+.filterWrapper .addFilter span {
+  color: #67c23a;
+  margin-left: 5px;
+  font-size: 18px;
+}
+
+.filterBox {
+  width: 182px;
+  position: relative;
+  margin-top: 20px;
+  display: flex;
+  flex-direction: row;
+}
+
+.filterBox .box {
+  width: 150px;
+  height: 50px;
+  text-align: center;
+  position: relative;
+  background: #e0e8ff;
+  border-radius: 3px;
+  border: 1px solid #b8caff;
+  float: left;
+  padding: 5px 20px;
+}
+
+.filterBox .box .reduceFilter {
+  width: 10px;
+  height: 10px;
+  position: absolute;
+  right: 4px;
+  top: 4px;
+  cursor: pointer;
+}
+
+.filterBox .box .editor {
+  width: 12px;
+  height: 13px;
+  position: absolute;
+  left: -5px;
+  top: 5px;
+  cursor: pointer;
+}
+
+.filterBox .rightIcon {
+  width: 45px;
+  height: 19px;
+  position: absolute;
+  right: 10px;
+  top: 15px;
+}
+
+.filterTextarea ::v-deep(.el-textarea__inner) {
+  min-height: 300px !important;
+}
+
+.filterBox .code-selected {
+  width: 70%;
+  margin-top: 4px;
+}
+
+.filterBox ::v-deep(.el-input--suffix .el-input__inner) {
+  background: #f4f7ff;
+  border-radius: 3px;
+  border: 1px solid #b8caff;
+  color: #89a3ee;
+}
+
+.font-icon-right {
+  line-height: 35px;
+  font-size: 30px;
+}
+
+.popover-box {
+  width: 100%;
+  height: 220px;
+  overflow-y: auto;
+  padding: 10px;
+}
+</style>

+ 132 - 0
zkqy-ui/src/views/system/report/dataSet/components/MonacoEditor.vue

@@ -0,0 +1,132 @@
+<template>
+  <div ref="editor" class="main"></div>
+</template>
+
+<script>
+import * as monaco from "monaco-editor";
+import createSqlCompleter from "./util/sql-completion";
+import createJavascriptCompleter from "./util/javascript-completion";
+import registerLanguage from "./util/log-language";
+const global = {};
+
+const getHints = model => {
+  let id = model.id.substring(6);
+  return (global[id] && global[id].hints) || [];
+};
+monaco.languages.registerCompletionItemProvider(
+  "sql",
+  createSqlCompleter(getHints)
+);
+monaco.languages.registerCompletionItemProvider(
+  "javascript",
+  createJavascriptCompleter(getHints)
+);
+registerLanguage(monaco);
+/**
+ * monaco options
+ * https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.istandaloneeditorconstructionoptions.html
+ */
+export default {
+  props: {
+    options: {
+      type: Object,
+      default() {
+        return {};
+      }
+    },
+    value: {
+      type: String,
+      required: false
+    },
+    language: {
+      type: String
+    },
+    hints: {
+      type: Array,
+      default() {
+        return [];
+      }
+    }
+  },
+  name: "MonacoEditor",
+  data() {
+    return {
+      editorInstance: null,
+      defaultOptions: {
+        theme: "vs-dark",
+        fontSize: 14
+      }
+    };
+  },
+  watch: {
+    value() {
+      if (this.value !== this.editorInstance.getValue()) {
+        this.editorInstance.setValue(this.value);
+      }
+    }
+  },
+  mounted() {
+    this.initEditor();
+    global[this.editorInstance._id] = this;
+    window.addEventListener("resize", this.layout);
+  },
+  destroyed() {
+    this.editorInstance.dispose();
+    global[this.editorInstance._id] = null;
+    window.removeEventListener("resize", this.layout);
+  },
+  methods: {
+    layout() {
+      this.editorInstance.layout();
+    },
+    undo() {
+      this.editorInstance.trigger("anyString", "undo");
+      this.onValueChange();
+    },
+    redo() {
+      this.editorInstance.trigger("anyString", "redo");
+      this.onValueChange();
+    },
+    getOptions() {
+      let props = { value: this.value };
+      this.language !== undefined && (props.language = this.language);
+      let options = Object.assign({}, this.defaultOptions, this.options, props);
+      return options;
+    },
+    onValueChange() {
+      this.$emit("input", this.editorInstance.getValue());
+      this.$emit("change", this.editorInstance.getValue());
+    },
+    initEditor() {
+      this.MonacoEnvironment = {
+        getWorkerUrl: function() {
+          return "./editor.worker.bundle.js";
+        }
+      };
+
+      this.editorInstance = monaco.editor.create(
+        this.$refs.editor,
+        this.getOptions()
+      );
+      this.editorInstance.onContextMenu(e => {
+        this.$emit("contextmenu", e);
+      });
+      this.editorInstance.onDidChangeModelContent(() => {
+        this.onValueChange();
+      });
+      this.editorInstance.addCommand(
+        monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S,
+        () => {
+          this.$emit("save", this.editorInstance.getValue());
+        }
+      );
+    }
+  }
+};
+</script>
+
+<style scoped>
+.main /deep/ .view-lines * {
+  font-family: Consolas, "Courier New", monospace !important;
+}
+</style>

+ 38 - 0
zkqy-ui/src/views/system/report/dataSet/components/util/javascript-completion.js

@@ -0,0 +1,38 @@
+import * as monaco from 'monaco-editor'
+// js 有内置提示
+function createCompleter(getExtraHints) {
+    const createSuggestions = function (model, textUntilPosition) {
+        let text = model.getValue();
+        textUntilPosition = textUntilPosition.replace(/[\*\[\]@\$\(\)]/g, "").replace(/(\s+|\.)/g, " ");
+        let arr = textUntilPosition.split(/[\s;]/);
+        let activeStr = arr[arr.length - 1];
+        let len = activeStr.length;
+        let rexp = new RegExp("([^\\w]|^)" + activeStr + "\\w*", "gim");
+        let match = text.match(rexp);
+        let mergeHints = Array.from(new Set([...getExtraHints(model)]))
+            .sort()
+            .filter(ele => {
+                let rexp = new RegExp(ele.substr(0, len), "gim");
+                return (match && match.length === 1 && ele === activeStr) ||
+                    ele.length === 1 ? false : activeStr.match(rexp);
+            });
+        return mergeHints.map(ele => ({
+            label: ele,
+            kind: monaco.languages.CompletionItemKind.Text,
+            documentation: ele,
+            insertText: ele
+        }));
+    };
+    return {
+        provideCompletionItems(model, position) {
+            let textUntilPosition = model.getValueInRange({
+                startLineNumber: position.lineNumber,
+                startColumn: 1,
+                endLineNumber: position.lineNumber,
+                endColumn: position.column
+            });
+            return { suggestions: createSuggestions(model, textUntilPosition) };
+        }
+    }
+}
+export default createCompleter;

+ 58 - 0
zkqy-ui/src/views/system/report/dataSet/components/util/log-language.js

@@ -0,0 +1,58 @@
+function registerLanguage(monaco) {
+    monaco.languages.register({
+      id: "log"
+    });
+    monaco.languages.setMonarchTokensProvider("log", {
+      tokenizer: {
+        root: [
+          [/(^[=a-zA-Z].*|\d\s.*)/, "log-normal"],
+          [/\sERROR\s.*/, "log-error"],
+          [/\sWARN\s.*/, "log-warn"],
+          [/\sINFO\s.*/, "log-info"],
+          [
+            /^([0-9]{4}||[0-9]{2})-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]{3})?/,
+            "log-date",
+          ],
+          [
+            /^[0-9]{2}\/[0-9]{2}\/[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(.[0-9]{3})?/,
+            "log-date",
+          ],
+          [/(^\*\*Waiting queue:.*)/, "log-info"],
+          [/(^\*\*result tips:.*)/, "log-info"],
+        ],
+      },
+    });
+    monaco.editor.defineTheme("log", {
+      base: "vs",
+      inherit: true,
+      rules: [{
+          token: "log-info",
+          foreground: "4b71ca"
+        },
+        {
+          token: "log-error",
+          foreground: "ff0000",
+          fontStyle: "bold"
+        },
+        {
+          token: "log-warn",
+          foreground: "FFA500"
+        },
+        {
+          token: "log-date",
+          foreground: "008800"
+        },
+        {
+          token: "log-normal",
+          foreground: "808080"
+        },
+      ],
+      colors: {
+        "editor.lineHighlightBackground": "#ffffff",
+        "editorGutter.background": "#f7f7f7",
+      },
+    });
+  
+  }
+  
+  export default registerLanguage;

+ 82 - 0
zkqy-ui/src/views/system/report/dataSet/components/util/sql-completion.js

@@ -0,0 +1,82 @@
+import * as monaco from 'monaco-editor'
+const hints = [
+    "SELECT",
+    "INSERT",
+    "DELETE",
+    "UPDATE",
+    "CREATE TABLE",
+    "DROP TABLE",
+    "ALTER TABLE",
+    "CREATE VIEW",
+    "DROP VIEW",
+    "CREATE INDEX",
+    "DROP INDEX",
+    "CREATE PROCEDURE",
+    "DROP PROCEDURE",
+    "CREATE TRIGGER",
+    "DROP TRIGGER",
+    "CREATE SCHEMA",
+    "DROP SCHEMA",
+    "CREATE DOMAIN",
+    "ALTER DOMAIN",
+    "DROP DOMAIN",
+    "GRANT",
+    "DENY",
+    "REVOKE",
+    "COMMIT",
+    "ROLLBACK",
+    "SET TRANSACTION",
+    "DECLARE",
+    "EXPLAN",
+    "OPEN",
+    "FETCH",
+    "CLOSE",
+    "PREPARE",
+    "EXECUTE",
+    "DESCRIBE",
+    "FROM",
+    "ORDER BY"]
+function createCompleter(getExtraHints) {
+    const createSuggestions = function (model, textUntilPosition) {
+        let text = model.getValue();
+        textUntilPosition = textUntilPosition.replace(/[\*\[\]@\$\(\)]/g, "").replace(/(\s+|\.)/g, " ");
+        let arr = textUntilPosition.split(/[\s;]/);
+        let activeStr = arr[arr.length - 1];
+        let len = activeStr.length;
+        let rexp = new RegExp("([^\\w]|^)" + activeStr + "\\w*", "gim");
+        let match = text.match(rexp);
+        let textHints = !match ? [] :
+            match.map(ele => {
+                let rexp = new RegExp(activeStr, "gim");
+                let search = ele.search(rexp);
+                return ele.substr(search);
+            });
+        let mergeHints = Array.from(new Set([...hints, ...textHints, ...getExtraHints(model)]))
+            .sort()
+            .filter(ele => {
+                let rexp = new RegExp(ele.substr(0, len), "gim");
+                return (match && match.length === 1 && ele === activeStr) ||
+                    ele.length === 1 ? false : activeStr.match(rexp);
+            });
+        return mergeHints.map(ele => ({
+            label: ele,
+            kind: hints.indexOf(ele) > -1 ?
+                monaco.languages.CompletionItemKind.Keyword :
+                monaco.languages.CompletionItemKind.Text,
+            documentation: ele,
+            insertText: ele
+        }));
+    };
+    return {
+        provideCompletionItems(model, position) {
+            let textUntilPosition = model.getValueInRange({
+                startLineNumber: position.lineNumber,
+                startColumn: 1,
+                endLineNumber: position.lineNumber,
+                endColumn: position.column
+            });
+            return { suggestions: createSuggestions(model, textUntilPosition) };
+        }
+    }
+}
+export default createCompleter;

+ 211 - 0
zkqy-ui/src/views/system/report/dataSet/index.vue

@@ -0,0 +1,211 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="20">
+      <el-form
+        :model="queryParams"
+        ref="queryParams"
+        label-width="100px"
+        :inline="true"
+        size="small"
+      >
+        <el-col :span="8">
+          <el-form-item label="数据集名称">
+            <el-input
+              v-model="queryParams.setName"
+              placeholder="请输入"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="数据源">
+            <el-select
+              v-model="queryParams.sourceId"
+              placeholder="请选择"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="item in []"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="数据集类型">
+            <el-select
+              v-model="queryParams.setType"
+              placeholder="请选择"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="item in []"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="数据集分类">
+            <el-select
+              v-model="queryParams.setClass"
+              placeholder="请选择"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="item in []"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+
+        <el-form-item>
+          <el-button type="primary" @click="() => {}">查询</el-button>
+          <el-button @click="() => {}">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </el-row>
+    <!-- 按钮 -->
+    <div class="btn-wrap mb10">
+      <el-dropdown placement="bottom" @command="operateDataset">
+        <el-button type="primary" size="small" icon="el-icon-plus">
+          新增
+          <i class="el-icon-arrow-down el-icon--right"></i>
+        </el-button>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item command="sql">SQL</el-dropdown-item>
+          <el-dropdown-item command="http">HTTP</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+      <el-button class="ml10" type="danger" size="small" icon="el-icon-delete"
+        >删除</el-button
+      >
+    </div>
+    <!-- 表格 -->
+    <el-table :data="tableData" border stripe @selection-change="() => {}">
+      <el-table-column align="center" type="selection" width="55" />
+      <el-table-column align="center" type="index" width="50" />
+      <el-table-column align="center" prop="sourceName" label="数据集编码" />
+      <el-table-column align="center" prop="sourceName" label="数据集名称" />
+      <el-table-column align="center" prop="sourceName" label="描述" />
+      <el-table-column align="center" prop="sourceName" label="数据集分类" />
+      <el-table-column align="center" prop="sourceName" label="数据源编码" />
+      <el-table-column align="center" prop="sourceName" label="数据集类型" />
+      <el-table-column align="center" prop="sourceName" label="状态" />
+      <el-table-column align="center" prop="sourceName" label="状态操作">
+        <template slot-scope="scope">
+          <el-dropdown>
+            <el-button type="warning" plain size="small">
+              操作<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item
+                ><el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit"
+                  @click="() => {}"
+                  >修改</el-button
+                ></el-dropdown-item
+              >
+              <el-dropdown-item
+                ><el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="() => {}"
+                  >删除</el-button
+                >
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <EditDataSet
+      ref="EditDataSet"
+      :dataSet="dataSet"
+      :visib="dialogVisibleSetDataSet"
+      @handleClose="dialogVisibleSetDataSet = false"
+      @refreshList="refreshList"
+    />
+    <DataView
+      ref="DataView"
+      :visib="dialogCaseResult"
+      @handleClose="dialogCaseResult = false"
+    />
+  </div>
+</template>
+
+<script>
+import EditDataSet from "./components/EditDataSet";
+import DataView from "./components/DataView";
+export default {
+  name: "dataSet",
+  props: [],
+  components: { EditDataSet, DataView },
+  data() {
+    return {
+      dialogCaseResult: false,
+      dataSet: {},
+      dialogVisibleSetDataSet: false,
+      total: 0,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        setName: "", //数据集名称
+        sourceId: "", //数据源
+        setType: "", //数据集类型
+        setClass: "", //数据集分类
+      },
+      tableData: [],
+    };
+  },
+  computed: {},
+  methods: {
+    getList() {},
+    operateDataset(type, prop) {
+      console.log(type, prop);
+      this.dialogVisibleSetDataSet = true;
+      if (prop && prop.setType) {
+        this.dataSet = prop;
+        type = prop.setType;
+      } else {
+        this.dataSet = {};
+      }
+      this.$refs.EditDataSet.addOrEditDataSet(this.dataSet, type);
+    },
+    refreshList() {
+      this.$refs.listPage.handleQueryForm("query");
+    },
+    dataView(prop) {
+      this.dialogCaseResult = true;
+      this.$refs.DataView.dataViewPreview(
+        prop.setName,
+        JSON.parse(prop.caseResult)
+      );
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss"></style>

+ 0 - 7
zkqy-ui/src/views/system/report/excelreport/components/colorPicker.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 
- * @Author: yanzili
- * @Date: 2021-6-24 10:23:24
- * @Last Modified by:   qianlishi
- * @Last Modified time: 2021-12-13 12:04:24
- !-->
 <template>
   <el-input
     clearable

+ 20 - 20
zkqy-ui/src/views/system/report/excelreport/designer/index.vue

@@ -1,9 +1,3 @@
-<!--
- * @Author: lide1202@hotmail.com
- * @Date: 2021-3-13 11:04:24
- * @Last Modified by:   lide1202@hotmail.com
- * @Last Modified time: 2021-3-13 11:04:24
- !-->
 <template>
   <div class="layout">
     <div class="layout-left">
@@ -70,7 +64,7 @@
           </el-button>
         </el-tooltip>
         <el-tooltip
-          class="item"
+          class="item mr10"
           effect="dark"
           content="保存"
           placement="bottom-start"
@@ -171,6 +165,7 @@ import draggable from "vuedraggable";
 import ColorPicker from "../components/colorPicker.vue";
 // import QRCode from 'qrcodejs2'
 // import JsBarcode from 'jsbarcode'
+import jsonStr from "../../testData/excelData";
 export default {
   name: "Excels",
   components: {
@@ -273,12 +268,13 @@ export default {
       },
     };
   },
-  mounted() {},
+  mounted() {
+    this.loadDataSet();
+    this.design();
+  },
   created() {
     this.reportCode = this.$route.query.reportCode;
     this.accessKey = this.$route.query.accessKey;
-    this.loadDataSet();
-    this.design();
   },
   methods: {
     uploadExcel(evt) {
@@ -329,11 +325,14 @@ export default {
     handleClick(tab, event) {},
     async design() {
       // 根据reportCode获取单条报表
-      const { code, data } = await detailByReportCode(this.reportCode);
+      // const { code, data } = await detailByReportCode(this.reportCode);
+      let code = 500,
+        data = null;
       if (data != null) {
         this.reportId = data.id;
       }
-      this.sheetData = data == null ? [{}] : JSON.parse(data.jsonStr);
+      // this.sheetData = data == null ? [{}] : JSON.parse(data.jsonStr);
+      this.sheetData = JSON.parse(jsonStr);
       console.log(this.sheetData);
       this.createSheet();
       if (data != null) {
@@ -360,12 +359,6 @@ export default {
         plugins: ["chart"],
         hook: {
           cellDragStop: function (cell, postion, sheetFile, ctx, event) {
-            // console.info("cellDragStop-cell",cell);
-            // console.info("cellDragStop-postion", postion);
-            // console.info("cellDragStop-sheetFile", sheetFile);
-            // console.info("cellDragStop-ctx",ctx);
-            // console.info("cellDragStop-event", event);
-            // console.log("cellDragStop-draggableFieldLabel", that);
             that.luckysheet.setCellValue(
               postion.r,
               postion.c,
@@ -450,7 +443,10 @@ export default {
           options.title = exportJson.info.name;
           options.userInfo = exportJson.info.name.creator;
         }
-        console.log(options);
+        // console.log("options", options);
+        // let tempOptions = {
+        //   container: "luckysheet", //luckysheet为容器id
+        // };
         that.luckysheet.create(options);
       });
     },
@@ -475,7 +471,9 @@ export default {
       // console.log(luckysheet.toJson())
       // console.log(luckysheet.getAllSheets())
       // console.log(luckysheet.getSheetData(0))
+      console.log(1111);
       const jsonData = luckysheet.getAllSheets();
+      console.log("luckysheet数据", JSON.parse(JSON.stringify(jsonData)));
       for (let i = 0; i < jsonData.length; i++) {
         //清空data数据,以celldata数据为主
         jsonData[i]["data"] = [];
@@ -581,7 +579,9 @@ export default {
 };
 </script>
 
-<style src="../../../../../../static/luckysheet/assets/iconfont/iconfont.css" />
+<style
+  src="../../../../../../public/static/luckysheet/assets/iconfont/iconfont.css"
+/>
 <style scoped lang="scss">
 .position {
   position: absolute;

+ 0 - 7
zkqy-ui/src/views/system/report/excelreport/share/shareConfig.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 
- * @Author: Devli
- * @Date: 2021-7-18 18:23:24
- * @Last Modified by:   qianlishi
- * @Last Modified time: 2022-8-5 12:04:24
- !-->
 <template>
   <el-dialog
     class="tree_dialog"

+ 0 - 7
zkqy-ui/src/views/system/report/excelreport/share/shareLink.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 
- * @Author: qianlishi
- * @Date: 2021-12-13 11:04:24
- * @Last Modified by:   qianming
- * @Last Modified time: 2021-3-13 11:04:24
- !-->
 <template>
   <div>
     <el-dialog

+ 3 - 8
zkqy-ui/src/views/system/report/excelreport/viewer/index.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 
- * @Author: qianlishi
- * @Date: 2021-3-19 10:23:24
- * @Last Modified by:   Raod
- * @Last Modified time: 2022-1-26 11:04:24
- !-->
 <template>
   <div class="layout">
     <div class="layout-right">
@@ -229,7 +222,9 @@ export default {
 };
 </script>
 
-<style src="../../../../../../static/luckysheet/assets/iconfont/iconfont.css" />
+<style
+  src="../../../../../../public/static/luckysheet/assets/iconfont/iconfont.css"
+/>
 <style scoped lang="scss">
 .download {
   width: 100%;

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
zkqy-ui/src/views/system/report/testData/excelData.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 5
zkqy-ui/static/luckysheet/luckysheet.umd.js


+ 4 - 1
zkqy-ui/vue.config.js

@@ -15,6 +15,7 @@ const isDev = process.env.NODE_ENV !== "production";
 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
 // 这里只列一部分,具体配置参考文档
 module.exports = {
+
   transpileDependencies: ['element-ui', 'lezer-feel'],//解决./node_modules/lezer-feel/dist/index.js  报错问题
   // 部署生产环境和开发环境下的URL。
   // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
@@ -38,7 +39,9 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://192.168.110.59:8080`,
-        target: `http://192.168.110.59:8080`,
+        // target: `http://192.168.110.83:8080`,
+        target: `http://192.168.110.76:8080`,
+        // target: `http://192.168.110.52:8080`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''

Неке датотеке нису приказане због велике количине промена