Преглед на файлове

新增散点图 中国色阶图 世界色阶图 新增导入excel 插件 修改不能添加图表到excel中bug

luotingv1 преди 1 година
родител
ревизия
e37623a621
променени са 23 файла, в които са добавени 26529 реда и са изтрити 121 реда
  1. 7 16
      report-ui/index.html
  2. 946 0
      report-ui/src/utils/word.js
  3. 197 0
      report-ui/src/views/bigscreenDesigner/designer/components/customNameComponents.vue
  4. 8 0
      report-ui/src/views/bigscreenDesigner/designer/components/dynamicForm.vue
  5. 458 0
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/mapCharts/widget-china-map.js
  6. 457 0
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/mapCharts/widget-global-map.js
  7. 780 0
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/scatterCharts/widget-scatter.js
  8. 6 2
      report-ui/src/views/bigscreenDesigner/designer/tools/main.js
  9. 371 0
      report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetChinaMap.vue
  10. 343 0
      report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetGlobalMap.vue
  11. 573 0
      report-ui/src/views/bigscreenDesigner/designer/widget/scatter/widgetScatter.vue
  12. 6 9
      report-ui/src/views/bigscreenDesigner/designer/widget/temp.vue
  13. 6 9
      report-ui/src/views/bigscreenDesigner/designer/widget/widget.vue
  14. 128 80
      report-ui/src/views/excelreport/designer/index.vue
  15. 0 5
      report-ui/static/luckysheet/assets/iconfont/iconfont.css
  16. 0 0
      report-ui/static/luckysheet/css/luckysheet.css
  17. 21 0
      report-ui/static/luckysheet/echarts.min.js
  18. 0 0
      report-ui/static/luckysheet/expendPlugins/chart/chartmix.umd.min.js
  19. 22212 0
      report-ui/static/luckysheet/luckyexcel.umd.js
  20. 0 0
      report-ui/static/luckysheet/luckysheet.umd.js
  21. 0 0
      report-ui/static/luckysheet/plugins/js/plugin.js
  22. 5 0
      report-ui/static/luckysheet/vue@2.6.11.js
  23. 5 0
      report-ui/static/luckysheet/vuex@3.4.0.js

+ 7 - 16
report-ui/index.html

@@ -5,22 +5,13 @@
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width,initial-scale=1.0">
   <title>AJ-Report</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>
-
-<!--  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/css/pluginsCss.css' />-->
-<!--  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/plugins.css' />-->
-<!--  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/css/luckysheet.css' />-->
-<!--  <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet/dist/assets/iconfont/iconfont.css' />-->
-<!--  <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/plugins/js/plugin.js"></script>-->
-<!--  <script src="https://cdn.jsdelivr.net/npm/luckysheet/dist/luckysheet.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>
+  <script src="/static/luckysheet/luckyexcel.umd.js"></script>
 </head>
 
 <body>

+ 946 - 0
report-ui/src/utils/word.js

@@ -0,0 +1,946 @@
+export const nameMap =  {
+  "Afghanistan": "阿富汗",
+  "Angola": "安哥拉",
+  "Albania": "阿尔巴尼亚",
+  "Algeria": "阿尔及利亚",
+  "Argentina": "阿根廷",
+  "Armenia": "亚美尼亚",
+  "Australia": "澳大利亚",
+  "Austria": "奥地利",
+  "Azerbaijan": "阿塞拜疆",
+  "Bahamas": "巴哈马",
+  "Bangladesh": "孟加拉国",
+  "Belgium": "比利时",
+  "Benin": "贝宁",
+  "Burkina Faso": "布基纳法索",
+  "Burundi": "布隆迪",
+  "Bulgaria": "保加利亚",
+  "Bosnia and Herz.": "波斯尼亚和黑塞哥维那",
+  "Belarus": "白俄罗斯",
+  "Belize": "伯利兹",
+  "Bermuda": "百慕大群岛",
+  "Bolivia": "玻利维亚",
+  "Brazil": "巴西",
+  "Brunei": "文莱",
+  "Bhutan": "不丹",
+  "Botswana": "博茨瓦纳",
+  "Cambodia": "柬埔寨",
+  "Cameroon": "喀麦隆",
+  "Canada": "加拿大",
+  "Central African Rep.": "中非共和国",
+  "Chad": "乍得",
+  "Chile": "智利",
+  "China":"中国",
+  "Colombia": "哥伦比亚",
+  "Congo": "刚果",
+  "Costa Rica": "哥斯达黎加",
+  "Côte d'Ivoire": "科特迪瓦",
+  "Croatia": "克罗地亚",
+  "Cuba": "古巴",
+  "Cyprus": "塞浦路斯",
+  "Czech Rep.": "捷克共和国",
+  "Dem. Rep. Korea": "韩国",
+  "Dem. Rep. Congo": "民主刚果",
+  "Denmark": "丹麦",
+  "Djibouti": "吉布提",
+  "Dominican Rep.": "多米尼加共和国",
+  "Ecuador": "厄瓜多尔",
+  "Egypt": "埃及",
+  "El Salvador": "萨尔瓦多",
+  "Eq. Guinea": "赤道几内亚",
+  "Eritrea": "厄立特里亚",
+  "Estonia": "爱沙尼亚",
+  "Ethiopia": "埃塞俄比亚",
+  "Falkland Is.": "福克兰群岛",
+  "Fiji": "斐济",
+  "Finland": "芬兰",
+  "France": "法国",
+  "French Guiana": "法属圭亚那",
+  "Fr. S. Antarctic Lands": "法属南部领地",
+  "Gabon": "加蓬",
+  "Gambia": "冈比亚",
+  "Germany": "德国",
+  "Georgia": "佐治亚州",
+  "Ghana": "加纳",
+  "Greece": "希腊",
+  "Greenland": "格陵兰",
+  "Guatemala": "危地马拉",
+  "Guinea": "几内亚",
+  "Guinea-Bissau": "几内亚比绍",
+  "Guyana": "圭亚那",
+  "Haiti": "海地",
+  "Heard I. and McDonald Is.": "赫德岛和麦克唐纳群岛",
+  "Honduras": "洪都拉斯",
+  "Hungary": "匈牙利",
+  "Iceland": "冰岛",
+  "India": "印度",
+  "Indonesia": "印度尼西亚",
+  "Iran": "伊朗",
+  "Iraq": "伊拉克",
+  "Ireland": "爱尔兰",
+  "Israel": "以色列",
+  "Italy": "意大利",
+  "Ivory Coast": "象牙海岸",
+  "Jamaica": "牙买加",
+  "Japan": "日本",
+  "Jordan": "乔丹",
+  "Kashmir": "克什米尔",
+  "Kazakhstan": "哈萨克斯坦",
+  "Kenya": "肯尼亚",
+  "Kosovo": "科索沃",
+  "Kuwait": "科威特",
+  "Kyrgyzstan": "吉尔吉斯斯坦",
+  "Laos": "老挝",
+  "Lao PDR": "老挝人民民主共和国",
+  "Latvia": "拉脱维亚",
+  "Lebanon": "黎巴嫩",
+  "Lesotho": "莱索托",
+  "Liberia": "利比里亚",
+  "Libya": "利比亚",
+  "Lithuania": "立陶宛",
+  "Luxembourg": "卢森堡",
+  "Madagascar": "马达加斯加",
+  "Macedonia": "马其顿",
+  "Malawi": "马拉维",
+  "Malaysia": "马来西亚",
+  "Mali": "马里",
+  "Mauritania": "毛里塔尼亚",
+  "Mexico": "墨西哥",
+  "Moldova": "摩尔多瓦",
+  "Mongolia": "蒙古",
+  "Montenegro": "黑山",
+  "Morocco": "摩洛哥",
+  "Mozambique": "莫桑比克",
+  "Myanmar": "缅甸",
+  "Namibia": "纳米比亚",
+  "Netherlands": "荷兰",
+  "New Caledonia": "新喀里多尼亚",
+  "New Zealand": "新西兰",
+  "Nepal": "尼泊尔",
+  "Nicaragua": "尼加拉瓜",
+  "Niger": "尼日尔",
+  "Nigeria": "尼日利亚",
+  "Korea": "朝鲜",
+  "Northern Cyprus": "北塞浦路斯",
+  "Norway": "挪威",
+  "Oman": "阿曼",
+  "Pakistan": "巴基斯坦",
+  "Panama": "巴拿马",
+  "Papua New Guinea": "巴布亚新几内亚",
+  "Paraguay": "巴拉圭",
+  "Peru": "秘鲁",
+  "Republic of the Congo": "刚果共和国",
+  "Philippines": "菲律宾",
+  "Poland": "波兰",
+  "Portugal": "葡萄牙",
+  "Puerto Rico": "波多黎各",
+  "Qatar": "卡塔尔",
+  "Republic of Seychelles": "塞舌尔共和国",
+  "Romania": "罗马尼亚",
+  "Russia": "俄罗斯",
+  "Rwanda": "卢旺达",
+  "Samoa": "萨摩亚",
+  "Saudi Arabia": "沙特阿拉伯",
+  "Senegal": "塞内加尔",
+  "Serbia": "塞尔维亚",
+  "Sierra Leone": "塞拉利昂",
+  "Slovakia": "斯洛伐克",
+  "Slovenia": "斯洛文尼亚",
+  "Solomon Is.": "所罗门群岛",
+  "Somaliland": "索马里兰",
+  "Somalia": "索马里",
+  "South Africa": "南非",
+  "S. Geo. and S. Sandw. Is.": "南乔治亚和南桑德威奇群岛",
+  "S. Sudan": "南苏丹",
+  "Spain": "西班牙",
+  "Sri Lanka": "斯里兰卡",
+  "Sudan": "苏丹",
+  "Suriname": "苏里南",
+  "Swaziland": "斯威士兰",
+  "Sweden": "瑞典",
+  "Switzerland": "瑞士",
+  "Syria": "叙利亚",
+  "Tajikistan": "塔吉克斯坦",
+  "Tanzania": "坦桑尼亚",
+  "Thailand": "泰国",
+  "The Kingdom of Tonga": "汤加王国",
+  "Timor-Leste": "东帝汶",
+  "Togo": "多哥",
+  "Trinidad and Tobago": "特立尼达和多巴哥",
+  "Tunisia": "突尼斯",
+  "Turkey": "土耳其",
+  "Turkmenistan": "土库曼斯坦",
+  "Uganda": "乌干达",
+  "Ukraine": "乌克兰",
+  "United Arab Emirates": "阿拉伯联合酋长国",
+  "United Kingdom": "大不列颠联合王国",
+  "United Republic of Tanzania": "坦桑尼亚联合共和国",
+  "United States": "美国",
+  "United States of America": "美利坚合众国",
+  "Uruguay": "乌拉圭",
+  "Uzbekistan": "乌兹别克斯坦",
+  "Vanuatu": "瓦努阿图",
+  "Venezuela": "委内瑞拉",
+  "Vietnam": "越南",
+  "West Bank": "西岸",
+  "W. Sahara": "西撒哈拉",
+  "Yemen": "也门",
+  "Zambia": "赞比亚",
+  "Zimbabwe": "津巴布韦"
+}
+
+
+export const dataArr=[
+  {
+    "name": "阿富汗",
+    "value": 28397.812
+  },
+  {
+    "name": "安哥拉",
+    "value": 19549.124
+  },
+  {
+    "name": "阿尔巴尼亚",
+    "value": 3150.143
+  },
+  {
+    "name": "阿尔及利亚",
+    "value": 8441.537
+  },
+  {
+    "name": "阿根廷",
+    "value": 40374.224
+  },
+  {
+    "name": "亚美尼亚",
+    "value": 2963.496
+  },
+  {
+    "name": "澳大利亚",
+    "value": 268.065
+  },
+  {
+    "name": "奥地利",
+    "value": 22404.488
+  },
+  {
+    "name": "阿塞拜疆",
+    "value": 8401.924
+  },
+  {
+    "name": "布隆迪",
+    "value": 9094.718
+  },
+  {
+    "name": "比利时",
+    "value": 9232.753
+  },
+  {
+    "name": "贝宁",
+    "value": 10941.288
+  },
+  {
+    "name": "布基纳法索",
+    "value": 9509.798
+  },
+  {
+    "name": "孟加拉国",
+    "value": 15540.284
+  },
+  {
+    "name": "保加利亚",
+    "value": 151125.475
+  },
+  {
+    "name": "波斯尼亚和黑塞哥维那",
+    "value": 7389.175
+  },
+  {
+    "name": "白俄罗斯",
+    "value": 66402.316
+  },
+  {
+    "name": "伯利兹",
+    "value": 3845.929
+  },
+  {
+    "name": "百慕大群岛",
+    "value": 9491.07
+  },
+  {
+    "name": "玻利维亚",
+    "value": 308.595
+  },
+  {
+    "name": "巴西",
+    "value": 64.951
+  },
+  {
+    "name": "文莱",
+    "value": 716.939
+  },
+  {
+    "name": "不丹",
+    "value": 195210.154
+  },
+  {
+    "name": "博茨瓦纳",
+    "value": 27.223
+  },
+  {
+    "name": "柬埔寨",
+    "value": 716.939
+  },
+  {
+    "name": "喀麦隆",
+    "value": 1969.341
+  },
+  {
+    "name": "加拿大",
+    "value": 4349.921
+  },
+  {
+    "name": "中非共和国",
+    "value": 34126.24
+  },
+  {
+    "name": "乍得",
+    "value": 7830.534
+  },
+  {
+    "name": "智利",
+    "value": 17150.76
+  },
+  {
+    "name": "中国",
+    "value": 66666
+  },
+  {
+    "name": "哥伦比亚",
+    "value": 60508.978
+  },
+  {
+    "name": "刚果",
+    "value": 17150.343
+  },
+  {
+    "name": "科特迪瓦",
+    "value": 17150.343
+  },
+  {
+    "name": "哥斯达黎加",
+    "value": 20624.343
+  },
+  {
+    "name": "克罗地亚",
+    "value": 62191.161
+  },
+  {
+    "name": "古巴",
+    "value": 3573.024
+  },
+  {
+    "name": "塞浦路斯",
+    "value": 46444.798
+  },
+  {
+    "name": "捷克共和国",
+    "value": 4669.685
+  },
+  {
+    "name": "民主刚果",
+    "value": 11281.768
+  },
+  {
+    "name": "丹麦",
+    "value": 1.468
+  },
+  {
+    "name": "吉布提",
+    "value": 1103.685
+  },
+  {
+    "name": "多米尼加共和国",
+    "value": 10553.701
+  },
+  {
+    "name": "东帝汶",
+    "value": 83017.404
+  },
+  {
+    "name": "厄瓜多尔",
+    "value": 834.036
+  },
+  {
+    "name": "埃及",
+    "value": 5550.959
+  },
+  {
+    "name": "萨尔瓦多",
+    "value": 10016.797
+  },
+  {
+    "name": "赤道几内亚",
+    "value": 37062.82
+  },
+  {
+    "name": "厄立特里亚",
+    "value": 15001.072
+  },
+  {
+    "name": "爱沙尼亚",
+    "value": 78075.705
+  },
+  {
+    "name": "埃塞俄比亚",
+    "value": 5741.159
+  },
+  {
+    "name": "福克兰群岛",
+    "value": 46182.038
+  },
+  {
+    "name": "斐济",
+    "value": 1298.533
+  },
+  {
+    "name": "芬兰",
+    "value": 87095.281
+  },
+  {
+    "name": "法国",
+    "value": 5367.693
+  },
+  {
+    "name": "法属圭亚那",
+    "value": 860.559
+  },
+  {
+    "name": "法属南部领地",
+    "value": 49.581
+  },
+  {
+    "name": "加蓬",
+    "value": 63230.866
+  },
+  {
+    "name": "冈比亚",
+    "value": 1556.222
+  },
+  {
+    "name": "德国",
+    "value": 62066.35
+  },
+  {
+    "name": "佐治亚州",
+    "value": 4388.674
+  },
+  {
+    "name": "加纳",
+    "value": 24262.901
+  },
+  {
+    "name": "希腊",
+    "value": 10876.033
+  },
+  {
+    "name": "格陵兰",
+    "value": 1680.64
+  },
+  {
+    "name": "危地马拉",
+    "value": 10876.033
+  },
+  {
+    "name": "几内亚",
+    "value": 696.167
+  },
+  {
+    "name": "几内亚比绍",
+    "value": 11109.999
+  },
+  {
+    "name": "圭亚那",
+    "value": 56.546
+  },
+  {
+    "name": "海地",
+    "value": 14341.576
+  },
+  {
+    "name": "赫德岛和麦克唐纳群岛",
+    "value": 4338.027
+  },
+  {
+    "name": "洪都拉斯",
+    "value": 231.169
+  },
+  {
+    "name": "匈牙利",
+    "value": 786.126
+  },
+  {
+    "name": "冰岛",
+    "value": 7621.204
+  },
+  {
+    "name": "印度",
+    "value": 4338.027
+  },
+  {
+    "name": "印度尼西亚",
+    "value": 9896.4
+  },
+  {
+    "name": "伊朗",
+    "value": 10014.633
+  },
+  {
+    "name": "伊拉克",
+    "value": 240676.485
+  },
+  {
+    "name": "爱尔兰",
+    "value": 15624.648
+  },
+  {
+    "name": "以色列",
+    "value": 4467.561
+  },
+  {
+    "name": "意大利",
+    "value": 240676.485
+  },
+  {
+    "name": "象牙海岸",
+    "value": 30962.38
+  },
+  {
+    "name": "牙买加",
+    "value": 318.042
+  },
+  {
+    "name": "日本",
+    "value": 7420.368
+  },
+  {
+    "name": "乔丹",
+    "value": 60508.978
+  },
+  {
+    "name": "克什米尔",
+    "value": 15921.485
+  },
+  {
+    "name": "哈萨克斯坦",
+    "value": 2741.485
+  },
+  {
+    "name": "肯尼亚",
+    "value": 6454.554
+  },
+  {
+    "name": "科索沃",
+    "value": 127352.833
+  },
+  {
+    "name": "科威特",
+    "value": 15921.127
+  },
+  {
+    "name": "吉尔吉斯斯坦",
+    "value": 40909.194
+  },
+  {
+    "name": "老挝",
+    "value": 5334.223
+  },
+  {
+    "name": "老挝人民民主共和国",
+    "value": 127352.833
+  },
+  {
+    "name": "拉脱维亚",
+    "value": 14364.931
+  },
+  {
+    "name": "黎巴嫩",
+    "value": 51452.352
+  },
+  {
+    "name": "莱索托",
+    "value": 97.743
+  },
+  {
+    "name": "利比里亚",
+    "value": 2991.58
+  },
+  {
+    "name": "利比亚",
+    "value": 6395.713
+  },
+  {
+    "name": "立陶宛",
+    "value": 4341.092
+  },
+  {
+    "name": "卢森堡",
+    "value": 3957.99
+  },
+  {
+    "name": "马达加斯加",
+    "value": 6040.612
+  },
+  {
+    "name": "马其顿",
+    "value": 20758.779
+  },
+  {
+    "name": "马拉维",
+    "value": 2008.921
+  },
+  {
+    "name": "马来西亚",
+    "value": 3068.457
+  },
+  {
+    "name": "马里",
+    "value": 507.885
+  },
+  {
+    "name": "毛里塔尼亚",
+    "value": 2090.519
+  },
+  {
+    "name": "墨西哥",
+    "value": 31642.36
+  },
+  {
+    "name": "摩尔多瓦",
+    "value": 103.619
+  },
+  {
+    "name": "蒙古",
+    "value": 21079.532
+  },
+  {
+    "name": "黑山",
+    "value": 117886.404
+  },
+  {
+    "name": "摩洛哥",
+    "value": 507.885
+  },
+  {
+    "name": "莫桑比克",
+    "value": 13985.961
+  },
+  {
+    "name": "缅甸",
+    "value": 51931.231
+  },
+  {
+    "name": "纳米比亚",
+    "value": 620.078
+  },
+  {
+    "name": "荷兰",
+    "value": 2712.738
+  },
+  {
+    "name": "新喀里多尼亚",
+    "value": 23967.265
+  },
+  {
+    "name": "新西兰",
+    "value": 3609.42
+  },
+  {
+    "name": "尼泊尔",
+    "value": 15013.694
+  },
+  {
+    "name": "尼加拉瓜",
+    "value": 28275.835
+  },
+  {
+    "name": "尼日尔",
+    "value": 2178.967
+  },
+  {
+    "name": "尼日利亚",
+    "value": 246.379
+  },
+  {
+    "name": "朝鲜",
+    "value": 15893.746
+  },
+  {
+    "name": "北塞浦路斯",
+    "value": 159707.78
+  },
+  {
+    "name": "挪威",
+    "value": 5822.209
+  },
+  {
+    "name": "阿曼",
+    "value": 16615.243
+  },
+  {
+    "name": "巴基斯坦",
+    "value": 4891.251
+  },
+  {
+    "name": "巴拿马",
+    "value": 26846.016
+  },
+  {
+    "name": "巴布亚新几内亚",
+    "value": 4368.136
+  },
+  {
+    "name": "巴拉圭",
+    "value": 2802.768
+  },
+  {
+    "name": "秘鲁",
+    "value": 173149.306
+  },
+  {
+    "name": "刚果共和国",
+    "value": 3678.128
+  },
+  {
+    "name": "菲律宾",
+    "value": 29262.83
+  },
+  {
+    "name": "波兰",
+    "value": 93444.322
+  },
+  {
+    "name": "葡萄牙",
+    "value": 6858.945
+  },
+  {
+    "name": "波多黎各",
+    "value": 38198.754
+  },
+  {
+    "name": "卡塔尔",
+    "value": 3709.671
+  },
+  {
+    "name": "塞舌尔共和国",
+    "value": 1000.556
+  },
+  {
+    "name": "罗马尼亚",
+    "value": 10589.792
+  },
+  {
+    "name": "俄罗斯",
+    "value": 6459.721
+  },
+  {
+    "name": "卢旺达",
+    "value": 1749.713
+  },
+  {
+    "name": "萨摩亚",
+    "value": 11749.713
+  },
+  {
+    "name": "沙特阿拉伯",
+    "value": 21861.476
+  },
+  {
+    "name": "塞内加尔",
+    "value": 21861.476
+  },
+  {
+    "name": "塞尔维亚",
+    "value": 18862.257
+  },
+  {
+    "name": "塞拉利昂",
+    "value": 10836.732
+  },
+  {
+    "name": "斯洛伐克",
+    "value": 514.648
+  },
+  {
+    "name": "斯洛文尼亚",
+    "value": 27258.387
+  },
+  {
+    "name": "所罗门群岛",
+    "value": 35652.002
+  },
+  {
+    "name": "索马里兰",
+    "value": 9940.929
+  },
+  {
+    "name": "索马里",
+    "value": 12950.564
+  },
+  {
+    "name": "南非",
+    "value": 526.447
+  },
+  {
+    "name": "南乔治亚和南桑德威奇群岛",
+    "value": 6218.195
+  },
+  {
+    "name": "韩国",
+    "value": 5751.976
+  },
+  {
+    "name": "南苏丹",
+    "value": 6218.195
+  },
+  {
+    "name": "西班牙",
+    "value": 9636.173
+  },
+  {
+    "name": "斯里兰卡",
+    "value": 9636.173
+  },
+  {
+    "name": "苏丹",
+    "value": 3573.024
+  },
+  {
+    "name": "苏里南",
+    "value": 524.96
+  },
+  {
+    "name": "斯威士兰",
+    "value": 5433.437
+  },
+  {
+    "name": "瑞典",
+    "value": 2054.232
+  },
+  {
+    "name": "瑞士",
+    "value": 9382.297
+  },
+  {
+    "name": "叙利亚",
+    "value": 1193.148
+  },
+  {
+    "name": "塔吉克斯坦",
+    "value": 7830.534
+  },
+  {
+    "name": "坦桑尼亚",
+    "value": 9876.785
+  },
+  {
+    "name": "泰国",
+    "value": 11720.781
+  },
+  {
+    "name": "汤加王国",
+    "value": 10710.701
+  },
+  {
+    "name": "巴哈马",
+    "value": 6306.014
+  },
+  {
+    "name": "多哥",
+    "value": 66402.316
+  },
+  {
+    "name": "特立尼达和多巴哥",
+    "value": 7627.326
+  },
+  {
+    "name": "突尼斯",
+    "value": 5041.995
+  },
+  {
+    "name": "土耳其",
+    "value": 10016.797
+  },
+  {
+    "name": "土库曼斯坦",
+    "value": 1328.095
+  },
+  {
+    "name": "乌干达",
+    "value": 10631.83
+  },
+  {
+    "name": "乌克兰",
+    "value": 72137.546
+  },
+  {
+    "name": "阿拉伯联合酋长国",
+    "value": 44973.33
+  },
+  {
+    "name": "大不列颠联合王国",
+    "value": 33987.213
+  },
+  {
+    "name": "坦桑尼亚联合共和国",
+    "value": 46050.22
+  },
+  {
+    "name": "美国",
+    "value": 3371.982
+  },
+  {
+    "name": "美利坚合众国",
+    "value": 312247.116
+  },
+  {
+    "name": "乌拉圭",
+    "value": 27769.27
+  },
+  {
+    "name": "乌兹别克斯坦",
+    "value": 236.299
+  },
+  {
+    "name": "瓦努阿图",
+    "value": 89047.397
+  },
+  {
+    "name": "委内瑞拉",
+    "value": 236.299
+  },
+  {
+    "name": "越南",
+    "value": 13.565
+  },
+  {
+    "name": "西岸",
+    "value": 22763.008
+  },
+  {
+    "name": "西撒哈拉",
+    "value": 51452.352
+  },
+  {
+    "name": "也门",
+    "value": 13216.985
+  },
+  {
+    "name": "赞比亚",
+    "value": 13076.978
+  },
+  {
+    "name": "津巴布韦",
+    "value": 11056.426
+  }
+]

+ 197 - 0
report-ui/src/views/bigscreenDesigner/designer/components/customNameComponents.vue

@@ -0,0 +1,197 @@
+<template>
+  <div>
+    <el-button
+      type="primary"
+      size="mini"
+      icon="el-icon-plus"
+      plain
+      @click="handleAddClick"
+      >新增</el-button
+    >
+    <el-table :data="formData" style="width: 100%">
+      <el-table-column prop="country" label="国家" align="center"></el-table-column>
+      <el-table-column prop="name" label="别名" align="center"></el-table-column>
+      <el-table-column label="操作" align="center" min-width="100">
+        <template slot-scope="scope">
+          <span
+            class="editor"
+            @click="handleEditorClick(scope.$index, scope.row)"
+          >
+            编辑
+          </span>
+          <el-divider direction="vertical"></el-divider>
+          <span
+            class="editor"
+            @click="handleDeleteClick(scope.$index, scope.row)"
+          >
+          删除
+          </span>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <el-dialog
+      title="新增"
+      :visible.sync="dialogVisible"
+      width="30%"
+      :before-close="handleClose"
+    >
+      <el-form>
+        <el-form-item label="国家">
+          <el-select
+            v-model="country"
+            style="width: 200px"
+            placeholder="请选择国家"
+            size="mini"
+          >
+            <el-option v-for="(item,index) in Object.values(nameMap)" :key="index" :value="item">{{ item }}</el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="别名">
+          <el-input
+            v-model="name"
+            style="width: 200px"
+            placeholder="请输入别名"
+            size="mini"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button size="mini" @click="dialogVisible = false">取 消</el-button>
+        <el-button size="mini" type="primary" @click="handleSaveClick"
+          >确 定</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import { nameMap } from "@/utils/word";
+
+export default {
+  name: "customNameComponents",
+  model: {
+    prop: "formData",
+    event: "input"
+  },
+  props: {
+    formData: Array
+  },
+  data() {
+    return {
+      nameMap,
+      predefineColors: [
+        "#ff4500",
+        "#ff8c00",
+        "#ffd700",
+        "#90ee90",
+        "#00ced1",
+        "#1e90ff",
+        "#c71585"
+      ],
+      country: "",
+      name:'',
+      dialogVisible: false,
+      flag: true, // true 新增, false 编辑
+      indexEditor: -1 // 编辑第几个数据
+    };
+  },
+  mounted() {},
+  methods: {
+    // 弹出框关闭
+    handleClose() {
+      this.dialogVisible = false;
+      this.country = "";
+      this.name=''
+    },
+    // 新增
+    handleAddClick() {
+      this.country = "";
+      this.name=''
+      this.flag = true;
+      this.dialogVisible = true;
+    },
+    // 确定
+    handleSaveClick() {
+      if (this.flag) {
+        // 新增
+        const obj = {
+          country: this.country,
+          name:this.name
+        };
+        this.formData.push(obj);
+        this.dialogVisible = false;
+      } else {
+        // 编辑
+        this.formData[this.indexEditor].country = this.country;
+        this.formData[this.indexEditor].name = this.name;
+        this.dialogVisible = false;
+      }
+      this.$emit("input", this.formData);
+      this.$emit("change", this.formData);
+    },
+    // 编辑
+    handleEditorClick(index, row) {
+      this.flag = false;
+      this.country = row.country;
+      this.name = row.name;
+      this.dialogVisible = true;
+      this.indexEditor = index;
+    },
+    // 删除
+    handleDeleteClick(index) {
+      this.formData.splice(index, 1);
+      this.$emit("input", this.formData);
+      this.$emit("change", this.formData);
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.color-box {
+  .title {
+    display: flex;
+    flex-direction: row;
+  }
+}
+/deep/.el-table,
+/deep/.el-table__expanded-cell,
+/deep/.el-table th,
+/deep/.el-table tr {
+  background-color: transparent !important;
+  color: #859094 !important;
+}
+/deep/.el-table td,
+/deep/.el-table th.is-leaf {
+  border-bottom: none;
+  line-height: 26px;
+}
+/deep/.el-table tbody tr:hover > td {
+  background-color: #263445 !important;
+}
+/deep/.el-table::before {
+  height: 0;
+}
+/deep/.el-color-picker--mini,
+/deep/.el-color-picker--mini .el-color-picker__trigger {
+  width: 23px;
+  height: 23px;
+}
+/deep/.el-dialog {
+  background: #1b1e25;
+  .el-dialog__title {
+    color: #fff;
+  }
+}
+.color-box {
+  display: inline-block;
+  width: 20px;
+  height: 20px;
+  border-radius: 5px;
+}
+.editor {
+  color: #409eff;
+  cursor: pointer;
+}
+</style>

+ 8 - 0
report-ui/src/views/bigscreenDesigner/designer/components/dynamicForm.vue

@@ -299,6 +299,12 @@
                   v-model="formData[itemChildList.name]"
                   @change="changed($event, itemChildList.name)"
                 />
+                <customNameComponents
+                  v-if="itemChildList.type == 'customName'"
+                  :key="'b-' + idx"
+                  v-model="formData[itemChildList.name]"
+                  @change="changed($event, itemChildList.name)"
+                />
                 <componentLinkage
                   v-if="itemChildList.type == 'componentLinkage'"
                   :key="'cl-' + idx"
@@ -329,6 +335,7 @@ import "codemirror/mode/sql/sql.js";
 import "codemirror/mode/shell/shell.js";
 import dynamicComponents from "./dynamicComponents.vue";
 import customColorComponents from "./customColorComponents";
+import customNameComponents from "./customNameComponents";
 import dynamicAddTable from "./dynamicAddTable.vue";
 import customUpload from "./customUpload.vue";
 import dynamicAddRadar from "./dynamicAddRadar";
@@ -341,6 +348,7 @@ export default {
     vueJsonEditor,
     dynamicComponents,
     customColorComponents,
+    customNameComponents,
     dynamicAddTable,
     customUpload,
     dynamicAddRadar,

+ 458 - 0
report-ui/src/views/bigscreenDesigner/designer/tools/configure/mapCharts/widget-china-map.js

@@ -0,0 +1,458 @@
+export const widgetChinaMap = {
+  code: 'widgetChinaMap',
+  type: 'mapChart',
+  tabName: '地图',
+  label: '中国色阶图',
+  icon: 'iconzhongguoditu',
+  options: {
+    // 配置
+    setup: [
+      {
+        type: 'el-input-text',
+        label: '图层名称',
+        name: 'layerName',
+        required: false,
+        placeholder: '',
+        value: '中国色阶图',
+      },
+      {
+        type: 'vue-color',
+        label: '背景颜色',
+        name: 'background',
+        required: false,
+        placeholder: '',
+        value: ''
+      },
+      [
+        {
+          name: '标题设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '标题显示',
+              name: 'isNoTitle',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '标题名',
+              name: 'titleText',
+              required: false,
+              placeholder: '',
+              value: '',
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'textColor',
+              required: false,
+              placeholder: '',
+              value: '#FFD700'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'textFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'textFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'textFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'italic', name: 'italic斜体'},
+                {code: 'oblique', name: 'oblique斜体'},
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体位置',
+              name: 'textAlign',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'center', name: '居中'},
+                {code: 'left', name: '左对齐'},
+                {code: 'right', name: '右对齐'},
+              ],
+              value: 'center'
+            },
+            {
+              type: 'el-input-text',
+              label: '副标题名',
+              name: 'subText',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'subTextColor',
+              required: false,
+              placeholder: '',
+              value: 'rgba(30, 144, 255, 1)'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'subTextFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'subTextFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'subTextFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'italic', name: 'italic斜体'},
+                {code: 'oblique', name: 'oblique斜体'},
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '地图设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '省市区显示',
+              name: 'isShowMap',
+              required: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'el-input-number',
+              label: '文字大小',
+              name: 'fontSizeMap',
+              required: false,
+              placeholder: '',
+              value: 20,
+            },
+            {
+              type: 'vue-color',
+              label: '文字颜色',
+              name: 'colorMap',
+              required: false,
+              placeholder: '',
+              value: '#53D9FF'
+            }
+          ]
+        },
+        {
+          name: '地图块颜色',
+          list: [
+            {
+              type: 'vue-color',
+              label: '0%处颜色',
+              name: 'font0PreColor',
+              required: false,
+              placeholder: '',
+              value: '#073684'
+            },
+            {
+              type: 'vue-color',
+              label: '100%颜色',
+              name: 'font100PreColor',
+              required: false,
+              placeholder: '',
+              value: '#061E3D'
+            },
+            {
+              type: 'vue-color',
+              label: '高亮渐变色',
+              name: 'fontHighlightColor',
+              required: false,
+              placeholder: '',
+              value: '#2B91B7'
+            },
+            {
+              type: 'vue-color',
+              label: '边界颜色',
+              name: 'borderColor',
+              required: false,
+              placeholder: '',
+              value: '#061E3D'
+            },
+          ],
+        },
+        {
+          name: '数值设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '文字显示',
+              name: 'isShowFontText',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-number',
+              label: '文字大小',
+              name: 'fontTextSize',
+              required: false,
+              placeholder: '',
+              value: 15,
+            },
+            {
+              type: 'el-select',
+              label: '文字粗细',
+              name: 'fontTextWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'fontTextStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-switch',
+              label: '数值显示',
+              name: 'isShowFontData',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-number',
+              label: '数值大小',
+              name: 'fontDataSize',
+              required: false,
+              placeholder: '',
+              value: 15,
+            },
+            {
+              type: 'el-select',
+              label: '数值粗细',
+              name: 'fontDataWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'fontDataStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '提示语设置',
+          list: [
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'tipsFontSize',
+              required: false,
+              placeholder: '',
+              value: 16
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'tipsColor',
+              required: false,
+              placeholder: '',
+              value: '#00FEFF'
+            },
+          ],
+        },
+        {
+          name: '数值区域色',
+          list: [
+            {
+              type: 'vue-color',
+              label: '0%处颜色',
+              name: 'num0PreColor',
+              required: false,
+              placeholder: '',
+              value: '#073684'
+            },
+            {
+              type: 'vue-color',
+              label: '100%颜色',
+              name: 'num100PreColor',
+              required: false,
+              placeholder: '',
+              value: '#061E3D'
+            },
+          ],
+        },
+      ],
+    ],
+    data: [
+      {
+        type: 'el-radio-group',
+        label: '数据类型',
+        name: 'dataType',
+        require: false,
+        placeholder: '',
+        selectValue: true,
+        selectOptions: [
+          {
+            code: 'staticData',
+            name: '静态数据',
+          },
+          {
+            code: 'dynamicData',
+            name: '动态数据',
+          },
+        ],
+        value: 'staticData',
+      },
+      {
+        type: 'el-input-number',
+        label: '刷新时间(毫秒)',
+        name: 'refreshTime',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'dynamicData',
+        value: 600000
+      },
+      {
+        type: 'el-button',
+        label: '静态数据',
+        name: 'staticData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'staticData',
+        value: [
+          {name: "北京", latitude: 116.4073, longitude: 39.9041, value: 70,},
+          {name: "天津", latitude: 117.2015, longitude: 39.0853, value: 20,},
+          {name: "上海", latitude: 121.4648, longitude: 31.2891, value: 150,},
+          {name: "重庆", latitude: 107.7539, longitude: 30.1904, value: 75,},
+          {name: "河南", latitude: 113.753, longitude: 34.767, value: 83,},
+          {name: "云南", latitude: 102.7093, longitude: 25.0464, value: 50,},
+          {name: "安徽", latitude: 117.3301, longitude: 31.7345, value: 36,},
+          {name: "山东", latitude: 117.0207, longitude: 36.6702, value: 39,},
+          {name: "江西", latitude: 115.8165, longitude: 28.6372, value: 23,},
+          {name: "青海", latitude: 101.7804, longitude: 36.6225, value: 27,},
+          {name: "四川", latitude: 104.0764, longitude: 30.6516, value: 46,},
+          {name: "海南", latitude: 110.3487, longitude: 20.0186, value: 16,},
+          {name: "西藏", latitude: 91.1174, longitude: 29.6486, value: 31,},
+          {name: "宁夏", latitude: 106.2588, longitude: 38.4722, value: 47,},
+          {name: "新疆", latitude: 87.6285, longitude: 43.7933, value: 42,},
+        ],
+      },
+      {
+        type: 'dycustComponents',
+        label: '',
+        name: 'dynamicData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        chartType: 'widget-mapv2chart',
+        dictKey: 'MAP_V2_PROPERTIES',
+        relactiveDomValue: 'dynamicData',
+        value: '',
+      },
+    ],
+    position: [
+      {
+        type: 'el-input-number',
+        label: '左边距',
+        name: 'left',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '上边距',
+        name: 'top',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '宽度',
+        name: 'width',
+        required: false,
+        placeholder: '该容器在1920px大屏中的宽度',
+        value: 600,
+      },
+      {
+        type: 'el-input-number',
+        label: '高度',
+        name: 'height',
+        required: false,
+        placeholder: '该容器在1080px大屏中的高度',
+        value: 400,
+      },
+    ]
+  }
+}

+ 457 - 0
report-ui/src/views/bigscreenDesigner/designer/tools/configure/mapCharts/widget-global-map.js

@@ -0,0 +1,457 @@
+import { dataArr } from "@/utils/word";
+
+
+export const widgetGlobalMap = {
+  code: 'widgetGlobalMap',
+  type: 'mapChart',
+  tabName: '地图',
+  label: '世界色阶图',
+  icon: 'iconglobalditu',
+  options: {
+    // 配置
+    setup: [
+      {
+        type: 'el-input-text',
+        label: '图层名称',
+        name: 'layerName',
+        required: false,
+        placeholder: '',
+        value: '世界色阶图',
+      },
+      {
+        type: 'vue-color',
+        label: '背景颜色',
+        name: 'background',
+        required: false,
+        placeholder: '',
+        value: ''
+      },
+      [
+        {
+          name: '标题设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '标题显示',
+              name: 'isNoTitle',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '标题名',
+              name: 'titleText',
+              required: false,
+              placeholder: '',
+              value: '',
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'textColor',
+              required: false,
+              placeholder: '',
+              value: '#FFD700'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'textFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'textFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'textFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'italic', name: 'italic斜体'},
+                {code: 'oblique', name: 'oblique斜体'},
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体位置',
+              name: 'textAlign',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'center', name: '居中'},
+                {code: 'left', name: '左对齐'},
+                {code: 'right', name: '右对齐'},
+              ],
+              value: 'center'
+            },
+            {
+              type: 'el-input-text',
+              label: '副标题名',
+              name: 'subText',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'subTextColor',
+              required: false,
+              placeholder: '',
+              value: 'rgba(30, 144, 255, 1)'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'subTextFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'subTextFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'subTextFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'italic', name: 'italic斜体'},
+                {code: 'oblique', name: 'oblique斜体'},
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '地图设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '国家区域名显示',
+              name: 'isShowMap',
+              required: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'el-input-number',
+              label: '文字大小',
+              name: 'fontSizeMap',
+              required: false,
+              placeholder: '',
+              value: 20,
+            },
+            {
+              type: 'vue-color',
+              label: '文字颜色',
+              name: 'colorMap',
+              required: false,
+              placeholder: '',
+              value: '#53D9FF'
+            }
+          ]
+        },
+        {
+          name: '地图块颜色',
+          list: [
+            {
+              type: 'vue-color',
+              label: '0%处颜色',
+              name: 'font0PreColor',
+              required: false,
+              placeholder: '',
+              value: '#073684'
+            },
+            {
+              type: 'vue-color',
+              label: '100%颜色',
+              name: 'font100PreColor',
+              required: false,
+              placeholder: '',
+              value: '#061E3D'
+            },
+            {
+              type: 'vue-color',
+              label: '高亮渐变色',
+              name: 'fontHighlightColor',
+              required: false,
+              placeholder: '',
+              value: '#2B91B7'
+            },
+            {
+              type: 'vue-color',
+              label: '边界颜色',
+              name: 'borderColor',
+              required: false,
+              placeholder: '',
+              value: '#061E3D'
+            },
+          ],
+        },
+        {
+          name: '数值设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '文字显示',
+              name: 'isShowFontText',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-number',
+              label: '文字大小',
+              name: 'fontTextSize',
+              required: false,
+              placeholder: '',
+              value: 15,
+            },
+            {
+              type: 'el-select',
+              label: '文字粗细',
+              name: 'fontTextWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'fontTextStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-switch',
+              label: '数值显示',
+              name: 'isShowFontData',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-number',
+              label: '数值大小',
+              name: 'fontDataSize',
+              required: false,
+              placeholder: '',
+              value: 15,
+            },
+            {
+              type: 'el-select',
+              label: '数值粗细',
+              name: 'fontDataWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                {code: 'normal', name: '正常'},
+                {code: 'bold', name: '粗体'},
+                {code: 'bolder', name: '特粗体'},
+                {code: 'lighter', name: '细体'}
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'fontDataStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '提示语设置',
+          list: [
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'tipsFontSize',
+              required: false,
+              placeholder: '',
+              value: 16
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'tipsColor',
+              required: false,
+              placeholder: '',
+              value: '#00FEFF'
+            },
+          ],
+        },
+        {
+          name: '数值区域色',
+          list: [
+            {
+              type: 'vue-color',
+              label: '0%处颜色',
+              name: 'num0PreColor',
+              required: false,
+              placeholder: '',
+              value: '#fff'
+            },
+            {
+              type: 'vue-color',
+              label: '100%颜色',
+              name: 'num100PreColor',
+              required: false,
+              placeholder: '',
+              value: 'rgb(30, 144, 255)'
+            },
+          ],
+        },
+        {
+          name: '自定义国家名',
+          list: [
+            {
+              type: 'customName',
+              label: '',
+              name: 'customName',
+              required: false,
+              value: [],
+            },
+          ],
+        },
+      ],
+    ],
+    data: [
+      {
+        type: 'el-radio-group',
+        label: '数据类型',
+        name: 'dataType',
+        require: false,
+        placeholder: '',
+        selectValue: true,
+        selectOptions: [
+          {
+            code: 'staticData',
+            name: '静态数据',
+          },
+          {
+            code: 'dynamicData',
+            name: '动态数据',
+          },
+        ],
+        value: 'staticData',
+      },
+      {
+        type: 'el-input-number',
+        label: '刷新时间(毫秒)',
+        name: 'refreshTime',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'dynamicData',
+        value: 600000
+      },
+      {
+        type: 'el-button',
+        label: '静态数据',
+        name: 'staticData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'staticData',
+        value:dataArr
+      },
+      {
+        type: 'dycustComponents',
+        label: '',
+        name: 'dynamicData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        chartType: 'widget-mapv2chart',
+        dictKey: 'MAP_V2_PROPERTIES',
+        relactiveDomValue: 'dynamicData',
+        value: '',
+      },
+    ],
+    position: [
+      {
+        type: 'el-input-number',
+        label: '左边距',
+        name: 'left',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '上边距',
+        name: 'top',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '宽度',
+        name: 'width',
+        required: false,
+        placeholder: '该容器在1920px大屏中的宽度',
+        value: 600,
+      },
+      {
+        type: 'el-input-number',
+        label: '高度',
+        name: 'height',
+        required: false,
+        placeholder: '该容器在1080px大屏中的高度',
+        value: 400,
+      },
+    ]
+  }
+}

+ 780 - 0
report-ui/src/views/bigscreenDesigner/designer/tools/configure/scatterCharts/widget-scatter.js

@@ -0,0 +1,780 @@
+/*
+ * @Descripttion: 散点图json
+ * @version:
+ * @Author: qianlishi
+ * @Date: 2021-08-29 07:21:45
+ * @LastEditors: qianlishi qianlishi@anji-plus.com
+ * @LastEditTime: 2023-01-10 14:09:03
+ */
+export const widgetScatter = {
+  code: 'widget-scatter',
+  type: 'scatter',
+  tabName: '散点图',
+  label: '散点图',
+  icon: 'icon-sandiantu',
+  options: {
+    // 配置
+    setup: [
+      {
+        type: 'el-input-text',
+        label: '图层名称',
+        name: 'layerName',
+        required: false,
+        placeholder: '',
+        value: '散点图',
+      },
+      {
+        type: 'el-switch',
+        label: '竖展示',
+        name: 'verticalShow',
+        required: false,
+        placeholder: '',
+        value: false,
+      },
+      {
+        type: 'vue-color',
+        label: '背景颜色',
+        name: 'background',
+        required: false,
+        placeholder: '',
+        value: ''
+      },
+      [
+        {
+          name: '标题设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '标题显示',
+              name: 'isNoTitle',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '标题名',
+              name: 'titleText',
+              required: false,
+              placeholder: '',
+              value: '',
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'textColor',
+              required: false,
+              placeholder: '',
+              value: '#FFD700'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'textFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'textFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'bold', name: '粗体' },
+                { code: 'bolder', name: '特粗体' },
+                { code: 'lighter', name: '细体' }
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'textFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体位置',
+              name: 'textAlign',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'center', name: '居中' },
+                { code: 'left', name: '左对齐' },
+                { code: 'right', name: '右对齐' },
+              ],
+              value: 'center'
+            },
+            {
+              type: 'el-input-text',
+              label: '副标题名',
+              name: 'subText',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'subTextColor',
+              required: false,
+              placeholder: '',
+              value: 'rgba(30, 144, 255, 1)'
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'subTextFontSize',
+              required: false,
+              placeholder: '',
+              value: 20
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'subTextFontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'bold', name: '粗体' },
+                { code: 'bolder', name: '特粗体' },
+                { code: 'lighter', name: '细体' }
+              ],
+              value: 'normal'
+            },
+            {
+              type: 'el-select',
+              label: '字体风格',
+              name: 'subTextFontStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'italic', name: 'italic斜体' },
+                { code: 'oblique', name: 'oblique斜体' },
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '图例操作',
+          list: [
+            {
+              type: 'el-switch',
+              label: '图例显示',
+              name: 'isShowLegend',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '名称( | 分隔)',
+              name: 'legendName',
+              required: false,
+              placeholder: '多值以' | '隔开',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'legendColor',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'legendFontSize',
+              required: false,
+              placeholder: '',
+              value: 12,
+            },
+            {
+              type: 'el-input-number',
+              label: '图例宽度',
+              name: 'legendWidth',
+              required: false,
+              placeholder: '',
+              value: 12,
+            },
+            {
+              type: 'el-select',
+              label: '横向位置',
+              name: 'lateralPosition',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'center', name: '居中' },
+                { code: 'left', name: '左对齐' },
+                { code: 'right', name: '右对齐' },
+              ],
+              value: 'center'
+            },
+            {
+              type: 'el-select',
+              label: '纵向位置',
+              name: 'longitudinalPosition',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'top', name: '顶部' },
+                { code: 'bottom', name: '底部' },
+              ],
+              value: 'top'
+            },
+            {
+              type: 'el-select',
+              label: '布局前置',
+              name: 'layoutFront',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'vertical', name: '竖排' },
+                { code: 'horizontal', name: '横排' },
+              ],
+              value: 'horizontal'
+            },
+          ],
+        },
+        {
+          name: 'X轴设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '显示',
+              name: 'hideX',
+              required: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '坐标名',
+              name: 'nameX',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '坐标名颜色',
+              name: 'nameColorX',
+              required: false,
+              placeholder: '',
+              value: '#fff'
+            },
+            {
+              type: 'el-input-number',
+              label: '坐标名字号',
+              name: 'nameFontSizeX',
+              required: false,
+              placeholder: '',
+              value: 14
+            },
+            {
+              type: 'vue-color',
+              label: '数值颜色',
+              name: 'colorX',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '数值字号',
+              name: 'fontSizeX',
+              required: false,
+              placeholder: '',
+              value: 14,
+            },
+            {
+              type: 'el-switch',
+              label: '数值自动换行',
+              name: 'textRowsBreakAuto',
+              required: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'el-input-text',
+              label: '数值行数',
+              name: 'textRowsNum',
+              required: false,
+              placeholder: '',
+              value: '',
+            },
+            {
+              type: 'el-input-number',
+              label: '数值间隔',
+              name: 'textInterval',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'el-slider',
+              label: '数值角度',
+              name: 'textAngleX',
+              required: false,
+              placeholder: '',
+              value: 0
+            },
+            {
+              type: 'el-switch',
+              label: '坐标轴反转',
+              name: 'reversalX',
+              required: false,
+              placeholder: '',
+              value: false
+            },
+            {
+              type: 'vue-color',
+              label: '坐标轴颜色',
+              name: 'lineColorX',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '坐标轴宽度',
+              name: 'lineWidthX',
+              required: false,
+              placeholder: '',
+              value: 1,
+            },
+            {
+              type: 'el-switch',
+              label: '分割线显示',
+              name: 'isShowSplitLineX',
+              require: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'vue-color',
+              label: '分割线颜色',
+              name: 'splitLineColorX',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '分割线宽度',
+              name: 'splitLineWidthX',
+              required: false,
+              placeholder: '',
+              value: 1,
+            },
+          ],
+        },
+        {
+          name: 'Y轴设置',
+          list: [
+            {
+              type: 'el-switch',
+              label: '显示',
+              name: 'isShowY',
+              require: false,
+              placeholder: '',
+              value: true,
+            },
+            {
+              type: 'el-input-text',
+              label: '最大值',
+              name: 'maxY',
+              required: false,
+              placeholder: '',
+              value: '',
+            },
+            {
+              type: 'el-input-text',
+              label: '坐标名',
+              name: 'textNameY',
+              require: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'vue-color',
+              label: '坐标名颜色',
+              name: 'nameColorY',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '坐标名字号',
+              name: 'nameFontSizeY',
+              required: false,
+              placeholder: '',
+              value: 14,
+            },
+            {
+              type: 'vue-color',
+              label: '数值颜色',
+              name: 'colorY',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '数值字号',
+              name: 'fontSizeY',
+              required: false,
+              placeholder: '',
+              value: 14,
+            },
+            {
+              type: 'el-switch',
+              label: '缩放',
+              name: 'scale',
+              require: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'el-input-number',
+              label: '均分',
+              name: 'splitNumberY',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'el-slider',
+              label: '数值角度',
+              name: 'textAngleY',
+              required: false,
+              placeholder: '',
+              value: 0
+            },
+            {
+              type: 'el-switch',
+              label: '坐标轴反转',
+              name: 'reversalY',
+              required: false,
+              placeholder: '',
+              value: false
+            },
+            {
+              type: 'vue-color',
+              label: '坐标轴颜色',
+              name: 'lineColorY',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '坐标轴宽度',
+              name: 'lineWidthY',
+              required: false,
+              placeholder: '',
+              value: 1,
+            },
+            {
+              type: 'el-switch',
+              label: '分割线显示',
+              name: 'isShowSplitLineY',
+              require: false,
+              placeholder: '',
+              value: false,
+            },
+            {
+              type: 'vue-color',
+              label: '分割线颜色',
+              name: 'splitLineColorY',
+              required: false,
+              placeholder: '',
+              value: '#fff',
+            },
+            {
+              type: 'el-input-number',
+              label: '分割线宽度',
+              name: 'splitLineWidthY',
+              required: false,
+              placeholder: '',
+              value: 1,
+            },
+          ],
+        },
+        {
+          name: '数值设定',
+          list: [
+            {
+              type: 'el-switch',
+              label: '显示',
+              name: 'isShow',
+              required: false,
+              placeholder: '',
+              value: true
+            },
+            {
+              type: 'el-switch',
+              label: '百分比符号显示',
+              name: 'percentSign',
+              required: false,
+              placeholder: '',
+              value: false
+            },
+            {
+              type: 'el-input-number',
+              label: '距离',
+              name: 'distance',
+              required: false,
+              placeholder: '',
+              value: 5
+            },
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'fontSize',
+              required: false,
+              placeholder: '',
+              value: 14
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'dataColor',
+              required: false,
+              placeholder: '',
+              value: ''
+            },
+            {
+              type: 'el-select',
+              label: '字体粗细',
+              name: 'fontWeight',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'normal', name: '正常' },
+                { code: 'bold', name: '粗体' },
+                { code: 'bolder', name: '特粗体' },
+                { code: 'lighter', name: '细体' }
+              ],
+              value: 'normal'
+            },
+          ],
+        },
+        {
+          name: '提示语设置',
+          list: [
+            {
+              type: 'el-input-number',
+              label: '字体字号',
+              name: 'tipsFontSize',
+              required: false,
+              placeholder: '',
+              value: 16
+            },
+            {
+              type: 'vue-color',
+              label: '字体颜色',
+              name: 'tipsColor',
+              required: false,
+              placeholder: '',
+              value: '#00FEFF'
+            },
+          ],
+        },
+        {
+          name: '坐标轴边距设置',
+          list: [
+            {
+              type: 'el-slider',
+              label: '左边距(像素)',
+              name: 'marginLeft',
+              required: false,
+              placeholder: '',
+              value: 10,
+            }, {
+              type: 'el-slider',
+              label: '顶边距(像素)',
+              name: 'marginTop',
+              required: false,
+              placeholder: '',
+              value: 50,
+            }, {
+              type: 'el-slider',
+              label: '右边距(像素)',
+              name: 'marginRight',
+              required: false,
+              placeholder: '',
+              value: 40,
+            }, {
+              type: 'el-slider',
+              label: '底边距(像素)',
+              name: 'marginBottom',
+              required: false,
+              placeholder: '',
+              value: 10,
+            },
+          ],
+        },
+        {
+          name: '自定义配色',
+          list: [
+            {
+              type: 'el-select',
+              label: '配色样式',
+              name: 'colorStyle',
+              required: false,
+              placeholder: '',
+              selectOptions: [
+                { code: 'same', name: '同色' },
+                { code: 'unsame', name: '异色' },
+              ],
+              value: 'same'
+            },
+            {
+              type: 'customColor',
+              label: '',
+              name: 'customColor',
+              required: false,
+              value: [{ color: '#ff7f50' }, { color: '#87cefa' }, { color: '#da70d6' }, { color: '#32cd32' }, { color: '#6495ed' }],
+            },
+          ],
+        },
+        {
+          name: '组件联动',
+          list: [
+            {
+              type: 'componentLinkage',
+              label: '',
+              name: 'componentLinkage',
+              required: false,
+              value: []
+            }
+          ]
+        }
+      ],
+    ],
+    // 数据
+    data: [
+      {
+        type: 'el-radio-group',
+        label: '数据类型',
+        name: 'dataType',
+        require: false,
+        placeholder: '',
+        selectValue: true,
+        selectOptions: [
+          {
+            code: 'staticData',
+            name: '静态数据',
+          },
+          {
+            code: 'dynamicData',
+            name: '动态数据',
+          },
+        ],
+        value: 'staticData',
+      },
+      {
+        type: 'el-input-number',
+        label: '刷新时间(毫秒)',
+        name: 'refreshTime',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'dynamicData',
+        value: 600000
+      },
+      {
+        type: 'el-button',
+        label: '静态数据',
+        name: 'staticData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'staticData',
+        value: [
+          { "axis": "苹果", "data": 1000 },
+          { "axis": "三星", "data": 2229 },
+          { "axis": "小米", "data": 3879 },
+          { "axis": "oppo", "data": 2379 },
+          { "axis": "vivo", "data": 4079 },
+        ],
+      },
+      {
+        type: 'dycustComponents',
+        label: '',
+        name: 'dynamicData',
+        required: false,
+        placeholder: '',
+        relactiveDom: 'dataType',
+        relactiveDomValue: 'dynamicData',
+        chartType: 'widget-barchart',
+        dictKey: 'SCATTER_PROPERTIES',
+        value: '',
+      },
+    ],
+    // 坐标
+    position: [
+      {
+        type: 'el-input-number',
+        label: '左边距',
+        name: 'left',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '上边距',
+        name: 'top',
+        required: false,
+        placeholder: '',
+        value: 0,
+      },
+      {
+        type: 'el-input-number',
+        label: '宽度',
+        name: 'width',
+        required: false,
+        placeholder: '该容器在1920px大屏中的宽度',
+        value: 400,
+      },
+      {
+        type: 'el-input-number',
+        label: '高度',
+        name: 'height',
+        required: false,
+        placeholder: '该容器在1080px大屏中的高度',
+        value: 200,
+      },
+    ],
+    // 事件
+    methods: [
+      // {
+      //   type: 'methods',
+      //   label: '前置钩子',
+      //   name: 'beforeMethods',
+      //   value: 'function beforeMethods(data){\n\t//自定义脚本内容1\n\treturn data;\n}',
+      // },
+      // {
+      //   type: 'methods',
+      //   label: '后置钩子',
+      //   name: 'afterMethods',
+      //   value: 'function afterMethods(data){\n\t//自定义脚本内容2\n\treturn data;\n}',
+      // },
+    ]
+  }
+}

+ 6 - 2
report-ui/src/views/bigscreenDesigner/designer/tools/main.js

@@ -48,7 +48,9 @@ import {widgetBorder} from "./configure/styleWidget/widget-border";
 import {widgetDecorateFlowLine} from "./configure/styleWidget/widget-decorate-flow-line";
 import {widgetDecoration} from "./configure/styleWidget/widget-decoration";
 import {widgetBarMap} from "./configure/mapCharts/widget-bar-map";
-import {widgetBarStackMoreShow} from "./configure/barCharts/widget-bar-stack-more-show";
+import {widgetChinaMap} from "./configure/mapCharts/widget-china-map";
+import {widgetGlobalMap} from "./configure/mapCharts/widget-global-map";
+import {widgetScatter} from "./configure/scatterCharts/widget-scatter";
 
 export const widgetTool = [
   // type=html类型的组件
@@ -93,5 +95,7 @@ export const widgetTool = [
   widgetFormTime,
   widgetBarDoubleYaxis,
   widgetBarMap,
-  widgetBarStackMoreShow
+  widgetChinaMap,
+  widgetGlobalMap,
+  widgetScatter
 ]

+ 371 - 0
report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetChinaMap.vue

@@ -0,0 +1,371 @@
+<template>
+  <div :style="styleObj">
+    <v-chart ref="myVChart" :options="options" autoresize />
+  </div>
+</template>
+<script>
+import { targetWidgetLinkageLogic } from "@/views/bigscreenDesigner/designer/linkageLogic";
+
+import "../../../../../../node_modules/echarts/map/js/china.js";
+import echarts from "echarts";
+
+export default {
+  name: "widgetChinaMap",
+  props: {
+    value: Object,
+    ispreview: Boolean,
+  },
+  data() {
+    return {
+      options: {
+        xAxis: {
+          axisLine: false,
+        },
+        yAxis: {
+          axisLine: false,
+        },
+        title: {
+          show: true,
+        },
+        visualMap: {
+          min: 0,
+          max: 1000000,
+          text: ["高", "低"],
+          color: ["#073684", "#061E3D"],
+        },
+        tooltip: {
+          trigger: "item",
+          formatter: function (params) {
+            console.log(params);
+            let value=params.value
+            if(isNaN(value)){
+              value=0
+            }
+            return params.name + " : " + value;
+          },
+        },
+        geo: [
+          {
+            map: "china",
+            show: true,
+            roam: false,
+            layoutSize: "80%",
+            label: {
+              emphasis: {
+                show: false,
+                color: "white",
+              },
+            },
+            itemStyle: {
+              normal: {
+                borderColor: new echarts.graphic.LinearGradient(
+                  0,
+                  0,
+                  0,
+                  1,
+                  [
+                    {
+                      offset: 0,
+                      color: "#00F6FF",
+                    },
+                    {
+                      offset: 1,
+                      color: "#53D9FF",
+                    },
+                  ],
+                  false
+                ),
+                borderWidth: 3,
+                shadowColor: "rgba(10,76,139,1)",
+                shadowOffsetY: 0,
+                shadowBlur: 60,
+              },
+            },
+          }
+        ],
+        series: [
+          {
+            aspectScale: 0.75,
+            type: 'map',
+            map: 'china',
+            //roam: true,
+            effect: {
+              show: false,
+              period: 6,
+              trailLength: 0.7,
+              color: "#fff",
+              symbolSize: 3,
+            },
+            label: {
+              normal: {
+                //调整数值
+                position: "right",
+                // 地图省市区显隐
+                show: false,
+                color: "#53D9FF",
+                fontSize: 20,
+              },
+              emphasis: {
+                show: true,
+              },
+            },
+            itemStyle: {
+              normal: {
+                //地图块颜色
+                areaColor: {
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [
+                    {
+                      offset: 0,
+                      color: "#073684", // 0% 处的颜色
+                    },
+                    {
+                      offset: 1,
+                      color: "#061E3D", // 100% 处的颜色
+                    },
+                  ],
+                },
+                borderColor: "#215495",
+                borderWidth: 1,
+              },
+              //鼠标放置颜色加深
+              emphasis: {
+                areaColor: {
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [
+                    {
+                      offset: 0,
+                      color: "#073684", // 0% 处的颜色
+                    },
+                    {
+                      offset: 1,
+                      color: "#2B91B7", // 100% 处的颜色
+                    },
+                  ],
+                },
+              },
+            },
+            data: []
+          }
+        ]
+      },
+      optionsStyle: {}, // 样式
+      optionsData: {}, // 数据
+      optionsCollapse: {}, // 图标属性
+      optionsSetup: {},
+      flagInter: null,
+    };
+  },
+  computed: {
+    styleObj() {
+      return {
+        position: this.ispreview ? "absolute" : "static",
+        width: this.optionsStyle.width + "px",
+        height: this.optionsStyle.height + "px",
+        left: this.optionsStyle.left + "px",
+        top: this.optionsStyle.top + "px",
+        background: this.optionsSetup.background,
+      };
+    },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
+  },
+  watch: {
+    value: {
+      handler(val) {
+        this.optionsStyle = val.position;
+        this.optionsData = val.data;
+        this.optionsCollapse = val.setup;
+        this.optionsSetup = val.setup;
+        this.editorOptions();
+      },
+      deep: true,
+    },
+  },
+  mounted() {
+    this.optionsStyle = this.value.position;
+    this.optionsData = this.value.data;
+    this.optionsCollapse = this.value.setup;
+    this.optionsSetup = this.value.setup;
+    this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
+  },
+  methods: {
+    // 修改图标options属性
+    editorOptions() {
+      this.setOptionsTitle();
+      this.setOptionsTooltip();
+      this.setOptionsMap();
+      this.setOptionsData();
+    },
+    // 标题设置
+    setOptionsTitle() {
+      const optionsSetup = this.optionsSetup;
+      const title = {};
+      title.text = optionsSetup.titleText;
+      title.show = optionsSetup.isNoTitle;
+      title.left = optionsSetup.textAlign;
+      title.textStyle = {
+        color: optionsSetup.textColor,
+        fontSize: optionsSetup.textFontSize,
+        fontWeight: optionsSetup.textFontWeight,
+        fontStyle: optionsSetup.textFontStyle,
+      };
+      title.subtext = optionsSetup.subText;
+      title.subtextStyle = {
+        color: optionsSetup.subTextColor,
+        fontWeight: optionsSetup.subTextFontWeight,
+        fontSize: optionsSetup.subTextFontSize,
+        fontStyle: optionsSetup.subTextFontStyle,
+      };
+      this.options.title = title;
+    },
+    // tooltip 设置
+    setOptionsTooltip() {
+      const optionsSetup = this.optionsSetup;
+      const tooltip = {
+        trigger: "item",
+        show: true,
+        enterable: true,
+        textStyle: {
+          color: optionsSetup.tipsColor,
+          fontSize: optionsSetup.tipsFontSize,
+        },
+      };
+      this.options.tooltip = {...this.options.tooltip,...tooltip};
+    },
+    // 地图设置
+    setOptionsMap() {
+      const optionsSetup = this.optionsSetup;
+      const label = {
+        normal: {
+          //调整数值
+          position: "right",
+          // 地图省市区显隐
+          show: optionsSetup.isShowMap,
+          color: optionsSetup.colorMap,
+          fontSize: optionsSetup.fontSizeMap,
+        },
+        emphasis: {
+          show: false,
+        },
+      };
+      const itemStyle = {
+        normal: {
+          //地图块颜色
+          areaColor: {
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [
+              {
+                offset: 0,
+                color: optionsSetup.font0PreColor, // 0% 处的颜色
+              },
+              {
+                offset: 1,
+                color: optionsSetup.font100PreColor, // 100% 处的颜色
+              },
+            ],
+          },
+          borderColor: optionsSetup.borderColor,
+          borderWidth: 1,
+        },
+        //鼠标放置颜色加深
+        emphasis: {
+          areaColor: {
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [
+              {
+                offset: 0,
+                color: "#073684", // 0% 处的颜色
+              },
+              {
+                offset: 1,
+                color: optionsSetup.fontHighlightColor, // 100% 处的颜色
+              },
+            ],
+          },
+        },
+      };
+      this.options.visualMap.color=[optionsSetup.num100PreColor,optionsSetup.num0PreColor]
+      this.options.series[0]["label"] = label;
+      this.options.series[0]["itemStyle"] = itemStyle;
+    },
+    //数据解析
+    setOptionsData(e, paramsConfig) {
+      const optionsData = this.optionsData; // 数据类型 静态 or 动态
+      // 联动接收者逻辑开始
+      optionsData.dynamicData = optionsData.dynamicData || {}; // 兼容 dynamicData undefined
+      const myDynamicData = optionsData.dynamicData;
+      clearInterval(this.flagInter); // 不管咋,先干掉上一次的定时任务,避免多跑
+      if (
+        e &&
+        optionsData.dataType !== "staticData" &&
+        Object.keys(myDynamicData.contextData).length
+      ) {
+        const keyArr = Object.keys(myDynamicData.contextData);
+        paramsConfig.forEach((conf) => {
+          if (keyArr.includes(conf.targetKey)) {
+            myDynamicData.contextData[conf.targetKey] = e[conf.originKey];
+          }
+        });
+      }
+      // 联动接收者逻辑结束
+      optionsData.dataType == "staticData"
+        ? this.staticDataFn(optionsData.staticData)
+        : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
+    },
+    staticDataFn(val) {
+      this.options.series[0].data = val;
+      const seriesData =this.options.series[0].data.map(({value})=> value);
+      this.options.visualMap.max=Math.max(...seriesData)
+    },
+    dynamicDataFn(val, refreshTime) {
+      if (!val) return;
+      if (this.ispreview) {
+        this.getEchartData(val);
+        this.flagInter = setInterval(() => {
+          this.getEchartData(val);
+        }, refreshTime);
+      } else {
+        this.getEchartData(val);
+      }
+    },
+    getEchartData(val) {
+      const data = this.queryEchartsData(val);
+      data.then((res) => {
+        this.renderingFn(res);
+      });
+    },
+    renderingFn(val) {
+      this.options.series[0].data = val;
+      const seriesData =this.options.series[0].data.map(({value})=> value);
+      this.options.visualMap.max=Math.max(...seriesData)
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.echartMap {
+  width: 100%;
+  height: 100%;
+}
+
+.echarts {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+</style>

+ 343 - 0
report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetGlobalMap.vue

@@ -0,0 +1,343 @@
+<template>
+  <div :style="styleObj">
+    <v-chart ref="myVChart" :options="options" autoresize />
+  </div>
+</template>
+<script>
+import { targetWidgetLinkageLogic } from "@/views/bigscreenDesigner/designer/linkageLogic";
+import "../../../../../../node_modules/echarts/map/js/world.js";
+import { nameMap } from "@/utils/word";
+
+
+export default {
+  name: "widgetGlobalMap",
+  props: {
+    value: Object,
+    ispreview: Boolean,
+  },
+  data() {
+    return {
+      options: {
+        xAxis: {
+          axisLine: false,
+        },
+        yAxis: {
+          axisLine: false,
+        },
+        title: {
+          show: true,
+        },
+        tooltip: {
+          trigger: "item",
+          formatter: function (params) {
+            console.log(params);
+            let value=params.value
+            if(isNaN(value)){
+              value=0
+            }
+            return params.name + " : " + value;
+          },
+        },
+        visualMap: {
+          min: 0,
+          max: 99999,
+          text: ["高", "低"],
+          color: ["#073684", "#061E3D"],
+        },
+        series: [
+          {
+            type: "map",
+            mapType: "world",
+            nameMap: nameMap,
+            effect: {
+              show: false,
+              period: 6,
+              trailLength: 0.7,
+              color: "#fff",
+              symbolSize: 3,
+            },
+            label: {
+              normal: {
+                position: "right",
+                show: false,
+                color: "#53D9FF",
+                fontSize: 20,
+              },
+              emphasis: {
+                show: true,
+              },
+            },
+            itemStyle: {
+              normal: {
+                //地图块颜色
+                areaColor: {
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [
+                    {
+                      offset: 0,
+                      color: "#073684", // 0% 处的颜色
+                    },
+                    {
+                      offset: 1,
+                      color: "#061E3D", // 100% 处的颜色
+                    },
+                  ],
+                },
+                borderColor: "#215495",
+                borderWidth: 1,
+              },
+              // 鼠标放置颜色加深
+              emphasis: {
+                areaColor: {
+                  x: 0,
+                  y: 0,
+                  x2: 0,
+                  y2: 1,
+                  colorStops: [
+                    {
+                      offset: 0,
+                      color: "#073684", // 0% 处的颜色
+                    },
+                    {
+                      offset: 1,
+                      color: "#2B91B7", // 100% 处的颜色
+                    },
+                  ],
+                },
+              },
+            },
+            data: [],
+          },
+        ],
+      },
+      optionsStyle: {}, // 样式
+      optionsData: {}, // 数据
+      optionsCollapse: {}, // 图标属性
+      optionsSetup: {},
+      flagInter: null,
+    };
+  },
+  computed: {
+    styleObj() {
+      return {
+        position: this.ispreview ? "absolute" : "static",
+        width: this.optionsStyle.width + "px",
+        height: this.optionsStyle.height + "px",
+        left: this.optionsStyle.left + "px",
+        top: this.optionsStyle.top + "px",
+        background: this.optionsSetup.background,
+      };
+    },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
+  },
+  watch: {
+    value: {
+      handler(val) {
+        this.optionsStyle = val.position;
+        this.optionsData = val.data;
+        this.optionsCollapse = val.setup;
+        this.optionsSetup = val.setup;
+        this.editorOptions();
+      },
+      deep: true,
+    },
+  },
+  mounted() {
+    this.optionsStyle = this.value.position;
+    this.optionsData = this.value.data;
+    this.optionsCollapse = this.value.setup;
+    console.log(this.value.setup);
+    this.optionsSetup = this.value.setup;
+    this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
+  },
+  methods: {
+    // 修改图标options属性
+    editorOptions() {
+      this.setOptionsTitle();
+      this.setOptionsTooltip();
+      this.setOptionsMap();
+      this.setOptionsData();
+    },
+    // 标题设置
+    setOptionsTitle() {
+      const optionsSetup = this.optionsSetup;
+      const title = {};
+      title.text = optionsSetup.titleText;
+      title.show = optionsSetup.isNoTitle;
+      title.left = optionsSetup.textAlign;
+      title.textStyle = {
+        color: optionsSetup.textColor,
+        fontSize: optionsSetup.textFontSize,
+        fontWeight: optionsSetup.textFontWeight,
+        fontStyle: optionsSetup.textFontStyle,
+      };
+      title.subtext = optionsSetup.subText;
+      title.subtextStyle = {
+        color: optionsSetup.subTextColor,
+        fontWeight: optionsSetup.subTextFontWeight,
+        fontSize: optionsSetup.subTextFontSize,
+        fontStyle: optionsSetup.subTextFontStyle,
+      };
+      this.options.title = title;
+    },
+    // tooltip 设置
+    setOptionsTooltip() {
+      const optionsSetup = this.optionsSetup;
+      const tooltip = {
+        trigger: "item",
+        show: true,
+        enterable: true,
+        textStyle: {
+          color: optionsSetup.tipsColor,
+          fontSize: optionsSetup.tipsFontSize,
+        },
+      };
+      this.options.tooltip = {...this.options.tooltip,...tooltip};
+    },
+    // 地图设置
+    setOptionsMap() {
+      const optionsSetup = this.optionsSetup;
+      const label = {
+        normal: {
+          //调整数值
+          position: "right",
+          // 地图省市区显隐
+          show: optionsSetup.isShowMap,
+          color: optionsSetup.colorMap,
+          fontSize: optionsSetup.fontSizeMap,
+        },
+        emphasis: {
+          show: false,
+        },
+      };
+      const itemStyle = {
+        normal: {
+          //地图块颜色
+          areaColor: {
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [
+              {
+                offset: 0,
+                color: optionsSetup.font0PreColor, // 0% 处的颜色
+              },
+              {
+                offset: 1,
+                color: optionsSetup.font100PreColor, // 100% 处的颜色
+              },
+            ],
+          },
+          borderColor: optionsSetup.borderColor,
+          borderWidth: 1,
+        },
+        //鼠标放置颜色加深
+        emphasis: {
+          areaColor: {
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [
+              {
+                offset: 0,
+                color: "#073684", // 0% 处的颜色
+              },
+              {
+                offset: 1,
+                color: optionsSetup.fontHighlightColor, // 100% 处的颜色
+              },
+            ],
+          },
+        },
+      };
+      let _nameMap=JSON.parse(JSON.stringify(nameMap))
+      if(optionsSetup.customName&&optionsSetup.customName.length>0){
+        for(var key in nameMap){
+          for(let val of optionsSetup.customName){
+            if(val['country']==nameMap[key]){
+              _nameMap[key]=val.name
+            }
+          }
+        }
+        this.options.series[0].nameMap=_nameMap
+      }else{
+        this.options.series[0].nameMap=nameMap
+      }
+      this.options.visualMap.color=[optionsSetup.num100PreColor,optionsSetup.num0PreColor]
+      this.options.series[0]["label"] = label;
+      this.options.series[0]["itemStyle"] = itemStyle;
+    },
+    //数据解析
+    setOptionsData(e, paramsConfig) {
+      const optionsData = this.optionsData; // 数据类型 静态 or 动态
+      // 联动接收者逻辑开始
+      optionsData.dynamicData = optionsData.dynamicData || {}; // 兼容 dynamicData undefined
+      const myDynamicData = optionsData.dynamicData;
+      clearInterval(this.flagInter); // 不管咋,先干掉上一次的定时任务,避免多跑
+      if (
+        e &&
+        optionsData.dataType !== "staticData" &&
+        Object.keys(myDynamicData.contextData).length
+      ) {
+        const keyArr = Object.keys(myDynamicData.contextData);
+        paramsConfig.forEach((conf) => {
+          if (keyArr.includes(conf.targetKey)) {
+            myDynamicData.contextData[conf.targetKey] = e[conf.originKey];
+          }
+        });
+      }
+      // 联动接收者逻辑结束
+      optionsData.dataType == "staticData"
+        ? this.staticDataFn(optionsData.staticData)
+        : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
+    },
+    staticDataFn(val) {
+      this.options.series[0].data = val;
+      const seriesData =this.options.series[0].data.map(({value})=> value);
+        this.options.visualMap.max=Math.max(...seriesData)
+    },
+    dynamicDataFn(val, refreshTime) {
+      if (!val) return;
+      if (this.ispreview) {
+        this.getEchartData(val);
+        this.flagInter = setInterval(() => {
+          this.getEchartData(val);
+        }, refreshTime);
+      } else {
+        this.getEchartData(val);
+      }
+    },
+    getEchartData(val) {
+      const data = this.queryEchartsData(val);
+      data.then((res) => {
+        this.renderingFn(res);
+      });
+    },
+    renderingFn(val) {
+      this.options.series[0].data = val;
+      const seriesData =this.options.series[0].data.map(({value})=> value);
+        this.options.visualMap.max=Math.max(...seriesData)
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.echartMap {
+  width: 100%;
+  height: 100%;
+}
+
+.echarts {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+</style>

+ 573 - 0
report-ui/src/views/bigscreenDesigner/designer/widget/scatter/widgetScatter.vue

@@ -0,0 +1,573 @@
+<template>
+  <div :style="styleObj">
+    <v-chart ref="myVChart" :options="options" autoresize v-if="show"/>
+  </div>
+</template>
+
+<script>
+import {
+  originWidgetLinkageLogic,
+  targetWidgetLinkageLogic,
+} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
+export default {
+  name: "widgetScatter",
+  components: {},
+  props: {
+    value: Object,
+    ispreview: Boolean,
+    widgetIndex: {
+      type: Number,
+      default: 0,
+    }, // 当前组件,在工作区变量widgetInWorkbench中的索引
+  },
+  data() {
+    return {
+      options: {
+        grid: {},
+        legend: {
+          textStyle: {
+            color: "#fff",
+          },
+        },
+        xAxis: {
+          type: "category",
+          data: [],
+          axisLabel: {
+            show: true,
+            textStyle: {
+              color: "#fff",
+            },
+          },
+        },
+        yAxis: {
+          type: "value",
+          data: [],
+          axisLabel: {
+            show: true,
+            textStyle: {
+              color: "#fff",
+            },
+          },
+        },
+        series: [
+          {
+            data: [],
+            symbolSize: 10,
+            type: "scatter",
+          },
+        ],
+      },
+      optionsStyle: {}, // 样式
+      optionsData: {}, // 数据
+      optionsSetup: {},
+      flagInter: null,
+      show:true
+    };
+  },
+  computed: {
+    styleObj() {
+      return {
+        position: this.ispreview ? "absolute" : "static",
+        width: this.optionsStyle.width + "px",
+        height: this.optionsStyle.height + "px",
+        left: this.optionsStyle.left + "px",
+        top: this.optionsStyle.top + "px",
+        background: this.optionsSetup.background,
+      };
+    },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
+  },
+  watch: {
+    value: {
+      handler(val) {
+        this.optionsStyle = val.position;
+        this.optionsData = val.data;
+        this.optionsCollapse = val.setup;
+        this.optionsSetup = val.setup;
+        this.editorOptions();
+      },
+      deep: true,
+    },
+    optionsData(){
+      // this.show=false;
+      // this.$nextTick(()=>{
+      //   this.show=true
+      // })
+    }
+  },
+  mounted() {
+    this.optionsStyle = this.value.position;
+    this.optionsData = this.value.data;
+    this.optionsCollapse = this.value.setup;
+    this.optionsSetup = this.value.setup;
+    this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
+    originWidgetLinkageLogic(this); // 联动-源组件逻辑
+  },
+  methods: {
+    // 修改图标options属性
+    editorOptions() {
+      this.setOptionsTitle();
+      this.setOptionsX();
+      this.setOptionsY();
+      this.setOptionsLegend();
+      this.setOptionsTooltip();
+      this.setOptionsMargin();
+      this.setOptionsData();
+    },
+    // 标题修改
+    setOptionsTitle() {
+      const optionsSetup = this.optionsSetup;
+      const title = {};
+      title.text = optionsSetup.titleText;
+      title.show = optionsSetup.isNoTitle;
+      title.left = optionsSetup.textAlign;
+      title.textStyle = {
+        color: optionsSetup.textColor,
+        fontSize: optionsSetup.textFontSize,
+        fontWeight: optionsSetup.textFontWeight,
+        fontStyle: optionsSetup.textFontStyle,
+      };
+      title.subtext = optionsSetup.subText;
+      title.subtextStyle = {
+        color: optionsSetup.subTextColor,
+        fontWeight: optionsSetup.subTextFontWeight,
+        fontSize: optionsSetup.subTextFontSize,
+        fontStyle: optionsSetup.subTextFontStyle,
+      };
+      this.options.title = title;
+    },
+    // X轴设置
+    setOptionsX() {
+      const optionsSetup = this.optionsSetup;
+      const xAxis = {
+        type: "category",
+        // 坐标轴是否显示
+        show: optionsSetup.hideX,
+        // 坐标轴名称
+        name: optionsSetup.nameX,
+        nameTextStyle: {
+          color: optionsSetup.nameColorX,
+          fontSize: optionsSetup.nameFontSizeX,
+        },
+        // 轴反转
+        inverse: optionsSetup.reversalX,
+        axisLabel: {
+          show: true,
+          interval: optionsSetup.textInterval,
+          // 文字角度
+          rotate: optionsSetup.textAngleX,
+          textStyle: {
+            // 坐标文字颜色
+            color: optionsSetup.colorX,
+            fontSize: optionsSetup.fontSizeX,
+          },
+        },
+        axisLine: {
+          show: true,
+          lineStyle: {
+            color: optionsSetup.lineColorX,
+            width: optionsSetup.lineWidthX,
+          },
+        },
+        splitLine: {
+          show: optionsSetup.isShowSplitLineX,
+          lineStyle: {
+            color: optionsSetup.splitLineColorX,
+            width: optionsSetup.splitLineWidthX,
+          },
+        },
+      };
+      this.options.xAxis = xAxis;
+    },
+    // Y轴设置
+    setOptionsY() {
+      const optionsSetup = this.optionsSetup;
+      const yAxis = {
+        max: optionsSetup.maxY !== "" ? optionsSetup.maxY : null,
+        type: "value",
+        scale: optionsSetup.scale,
+        // 均分
+        splitNumber: optionsSetup.splitNumberY,
+        // 坐标轴是否显示
+        show: optionsSetup.isShowY,
+        // 坐标轴名称
+        name: optionsSetup.textNameY,
+        nameTextStyle: {
+          color: optionsSetup.nameColorY,
+          fontSize: optionsSetup.nameFontSizeY,
+        },
+        // 轴反转
+        inverse: optionsSetup.reversalY,
+        axisLabel: {
+          show: true,
+          // 文字角度
+          rotate: optionsSetup.textAngleY,
+          textStyle: {
+            // 坐标文字颜色
+            color: optionsSetup.colorY,
+            fontSize: optionsSetup.fontSizeY,
+          },
+        },
+        axisLine: {
+          show: true,
+          lineStyle: {
+            color: optionsSetup.lineColorY,
+            width: optionsSetup.lineWidthY,
+          },
+        },
+        splitLine: {
+          show: optionsSetup.isShowSplitLineY,
+          lineStyle: {
+            color: optionsSetup.splitLineColorY,
+            width: optionsSetup.splitLineWidthY,
+          },
+        },
+      };
+      this.options.yAxis = yAxis;
+    },
+    // tooltip 设置
+    setOptionsTooltip() {
+      const optionsSetup = this.optionsSetup;
+      const tooltip = {
+        trigger: "item",
+        show: true,
+        textStyle: {
+          color: optionsSetup.tipsColor,
+          fontSize: optionsSetup.tipsFontSize,
+        },
+      };
+      this.options.tooltip = tooltip;
+    },
+    // 边距设置
+    setOptionsMargin() {
+      const optionsSetup = this.optionsSetup;
+      const grid = {
+        left: optionsSetup.marginLeft,
+        right: optionsSetup.marginRight,
+        bottom: optionsSetup.marginBottom,
+        top: optionsSetup.marginTop,
+        containLabel: true,
+      };
+      this.options.grid = grid;
+    },
+    // 图例
+    setOptionsLegend() {
+      const optionsSetup = this.optionsSetup;
+      const legend = this.options.legend;
+      legend.show = optionsSetup.isShowLegend;
+      legend.left = optionsSetup.lateralPosition;
+      legend.top = optionsSetup.longitudinalPosition;
+      legend.bottom = optionsSetup.longitudinalPosition;
+      legend.orient = optionsSetup.layoutFront;
+      legend.textStyle = {
+        color: optionsSetup.legendColor,
+        fontSize: optionsSetup.legendFontSize,
+      };
+      legend.itemWidth = optionsSetup.legendWidth;
+    },
+    // 图例名称设置
+    setOptionsLegendName(name) {
+      const optionsSetup = this.optionsSetup;
+      const series = this.options.series;
+      const legendName = optionsSetup.legendName;
+      if(series.length==0){
+        return;
+      }
+      // 图例没有手动写则显示原值,写了则显示新值
+      if (null == legendName || legendName == "") {
+        for (let i = 0; i < name.length; i++) {
+          series[i].name = name[i];
+        }
+        this.options.legend["data"] = name;
+      } else {
+        const arr = legendName.split("|");
+        for (let i = 0; i < arr.length; i++) {
+          series[i].name = arr[i];
+        }
+        this.options.legend["data"] = arr;
+      }
+    },
+    //获取堆叠样式
+    getStackStyle() {
+      const optionsSetup = this.optionsSetup;
+      let style = "";
+      if (optionsSetup.stackStyle == "upDown") {
+        style = "total";
+      }
+      return style;
+    },
+    // 获得位置
+    getOptionsPosition() {
+      const optionsSetup = this.optionsSetup;
+      let position = "";
+      if (optionsSetup.verticalShow) {
+        position = "right";
+      } else {
+        position = "top";
+      }
+      return position;
+    },
+    // 数据解析
+    setOptionsData(e, paramsConfig) {
+      const optionsData = this.optionsData; // 数据类型 静态 or 动态
+      // 联动接收者逻辑开始
+      optionsData.dynamicData = optionsData.dynamicData || {}; // 兼容 dynamicData undefined
+      const myDynamicData = optionsData.dynamicData;
+      clearInterval(this.flagInter); // 不管咋,先干掉上一次的定时任务,避免多跑
+      if (
+        e &&
+        optionsData.dataType !== "staticData" &&
+        Object.keys(myDynamicData.contextData).length
+      ) {
+        const keyArr = Object.keys(myDynamicData.contextData);
+        paramsConfig.forEach((conf) => {
+          if (keyArr.includes(conf.targetKey)) {
+            myDynamicData.contextData[conf.targetKey] = e[conf.originKey];
+          }
+        });
+      }
+        // this.options.series =  optionsData.series
+      // 联动接收者逻辑结束
+      optionsData.dataType == "staticData"
+        ? this.staticDataFn(optionsData.staticData)
+        : this.dynamicDataFn(optionsData.refreshTime);
+    },
+    // 静态数据
+    staticDataFn(val) {
+      const optionsSetup = this.optionsSetup;
+      //颜色
+      const customColor = optionsSetup.customColor;
+      const arrColor = [];
+      for (let i = 0; i < customColor.length; i++) {
+        arrColor.push(customColor[i].color);
+      }
+      const series = this.options.series;
+      let axis = [];
+      let data = [];
+      for (const i in val) {
+        axis[i] = val[i].axis;
+        data[i] = val[i].data;
+      }
+      const legendName = [];
+      legendName.push("scatter");
+      for (const i in series) {
+        if (series[i].type == "scatter") {
+          series[i].type = "scatter";
+          series[i].label = {
+            show: optionsSetup.isShow,
+            position: this.getOptionsPosition(),
+            distance: optionsSetup.distance,
+            fontSize: optionsSetup.fontSize,
+            color: optionsSetup.dataColor,
+            fontWeight: optionsSetup.fontWeight,
+            formatter: !!optionsSetup.percentSign ? '{c}%' : '{c}'
+          };
+          // 获取颜色样式
+          if (optionsSetup.colorStyle == 'same') {
+            series[i].itemStyle = {
+              normal: {
+                color: arrColor[i],
+              },
+            };
+          } else {
+            series[i].itemStyle = {
+              normal: {
+                color: (params) => {
+                  return arrColor[params.dataIndex];
+                },
+              },
+            };
+          }
+          //柱体背景属性
+          series[i].showBackground = optionsSetup.isShowBackground;
+          series[i].backgroundStyle = {
+            color: optionsSetup.backgroundStyleColor,
+            borderColor: optionsSetup.backgroundStyleBorderColor,
+            borderWidth: optionsSetup.backgroundStyleBorderWidth,
+            borderType: optionsSetup.backgroundStyleBorderType,
+            shadowBlur: optionsSetup.backgroundStyleShadowBlur,
+            shadowColor: optionsSetup.backgroundStyleShadowColor,
+            opacity: optionsSetup.backgroundStyleOpacity / 100,
+          };
+          series[i].data = data;
+        }
+      }
+      // 根据图表的宽度 x轴的字体大小、长度来估算X轴的label能展示多少个字
+      const rowsNum = optionsSetup.textRowsNum !== "" ? optionsSetup.textRowsNum : parseInt((this.optionsStyle.width / axis.length) / optionsSetup.fontSizeX)
+      const axisLabel = {
+        show: true,
+        interval: optionsSetup.textInterval,
+        // 文字角度
+        rotate: optionsSetup.textAngleX,
+        textStyle: {
+          // 坐标文字颜色
+          color: optionsSetup.colorX,
+          fontSize: optionsSetup.fontSizeX,
+        },
+        // 自动换行
+        formatter: function (value, index) {
+          const strs = value.split('');
+          let str = ''
+          for (let i = 0, s; s = strs[i++];) {
+            str += s;
+            if (!(i % rowsNum)) str += '\n';
+          }
+          return str
+        }
+      };
+      // x轴
+      if (optionsSetup.verticalShow) {
+        this.options.xAxis.data = [];
+        this.options.yAxis.data = axis;
+        this.options.xAxis.type = "value";
+        this.options.yAxis.type = "category";
+      } else {
+        this.options.xAxis.data = axis;
+        this.options.yAxis.data = [];
+        this.options.xAxis.type = "category";
+        this.options.yAxis.type = "value";
+        if (optionsSetup.textRowsBreakAuto) {
+          this.options.xAxis.axisLabel = axisLabel;
+        }
+      }
+      this.options.legend["data"] = legendName;
+      this.setOptionsLegendName(legendName);
+    },
+    // 动态数据
+    dynamicDataFn(refreshTime) {
+      const optionsSetup = this.optionsSetup;
+      const optionsData = this.optionsData;
+      const val = optionsData.dynamicData;
+      if (!val) return;
+      if (this.ispreview) {
+        this.getEchartData(val, optionsSetup);
+        this.flagInter = setInterval(() => {
+          this.getEchartData(val, optionsSetup);
+        }, refreshTime);
+      } else {
+        this.getEchartData(val, optionsSetup);
+      }
+    },
+    getEchartData(val, optionsSetup) {
+      const data = this.queryEchartsData(val);
+      data.then((res) => {
+        this.renderingFn(optionsSetup, res);
+      });
+    },
+    renderingFn(optionsSetup, val) {
+      //颜色
+      const customColor = optionsSetup.customColor;
+      const arrColor = [];
+      for (let i = 0; i < customColor.length; i++) {
+        arrColor.push(customColor[i].color);
+      }
+      const series = [];
+      const legendName = [];
+      for (const i in val.series) {
+        legendName.push(val.series[i].name);
+        const obj = {};
+        console.log(val.series[i]);
+        if (val.series[i].type == "point") {
+          obj.type = "scatter";
+          obj.stack = this.getStackStyle();
+          obj.label = {
+            show: optionsSetup.isShow,
+            position: this.getOptionsPosition(),
+            distance: optionsSetup.distance,
+            fontSize: optionsSetup.fontSize,
+            color: optionsSetup.dataColor,
+            fontWeight: optionsSetup.fontWeight,
+            formatter: !!optionsSetup.percentSign ? '{c}%' : '{c}'
+          };
+          // 获取颜色样式
+          if (optionsSetup.colorStyle == 'same') {
+            obj.itemStyle = {
+              normal: {
+                color: arrColor[i],
+              },
+            };
+          } else {
+            obj.itemStyle = {
+              normal: {
+                color: (params) => {
+                  return arrColor[params.dataIndex];
+                },
+              },
+            };
+          }
+          //柱体背景属性
+          obj.showBackground = optionsSetup.isShowBackground;
+          obj.backgroundStyle = {
+            color: optionsSetup.backgroundStyleColor,
+            borderColor: optionsSetup.backgroundStyleBorderColor,
+            borderWidth: optionsSetup.backgroundStyleBorderWidth,
+            borderType: optionsSetup.backgroundStyleBorderType,
+            shadowBlur: optionsSetup.backgroundStyleShadowBlur,
+            shadowColor: optionsSetup.backgroundStyleShadowColor,
+            opacity: optionsSetup.backgroundStyleOpacity / 100,
+          }
+          obj.data = val.series[i].data;
+          series.push(obj);
+        }
+      }
+      // 根据图表的宽度 x轴的字体大小、长度来估算X轴的label能展示多少个字
+      const xAxisDataLength = val.length !== 0 ? val.xAxis.length : 1;
+      const rowsNum = optionsSetup.textRowsNum !== "" ? optionsSetup.textRowsNum : parseInt((this.optionsStyle.width / xAxisDataLength) / optionsSetup.fontSizeX);
+      const axisLabel = {
+        show: true,
+        interval: optionsSetup.textInterval,
+        // 文字角度
+        rotate: optionsSetup.textAngleX,
+        textStyle: {
+          // 坐标文字颜色
+          color: optionsSetup.colorX,
+          fontSize: optionsSetup.fontSizeX,
+        },
+        // 自动换行
+        formatter: function (value, index) {
+          const strs = value.split('');
+          let str = ''
+          for (let i = 0, s; s = strs[i++];) {
+            str += s;
+            if (!(i % rowsNum)) str += '\n';
+          }
+          return str
+        }
+      };
+      // x轴
+      if (optionsSetup.verticalShow) {
+        this.options.xAxis.data = [];
+        this.options.yAxis.data = val.xAxis;
+        this.options.xAxis.type = "value";
+        this.options.yAxis.type = "category";
+      } else {
+        this.options.xAxis.data = val.xAxis;
+        this.options.yAxis.data = [];
+        this.options.xAxis.type = "category";
+        this.options.yAxis.type = "value";
+        if (optionsSetup.textRowsBreakAuto) {
+          this.options.xAxis.axisLabel = axisLabel;
+        }
+      }
+      this.options.series = series;
+      this.options.legend["data"] = legendName;
+      let data2=JSON.parse(JSON.stringify(this.options))
+      this.options={}
+      this.options=data2
+      this.setOptionsLegendName(legendName);
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+.echarts {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+</style>

+ 6 - 9
report-ui/src/views/bigscreenDesigner/designer/widget/temp.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 大屏报表设计器-组件注册
- * @Author: Devli
- * @Date: 2021-3-19 10:23:27
- * @LastEditors: qianlishi
- * @LastEditTime: 2023-2-7 17:38:44
--->
 <template>
   <div>
     <component
@@ -57,7 +50,9 @@ import widgetDecorateFlowLine from "./styleWidget/widgetDecorateFlowLine.vue";
 import widgetBorder from "./styleWidget/widgetBorder.vue";
 import widgetDecoration from "./styleWidget/widgetDecoration.vue";
 import widgetBarMap from "./map/widgetBarMap.vue";
-import widgetBarStackMoreShowChart from "./bar/widgetBarStackMoreShowChart.vue";
+import widgetChinaMap from "./map/widgetChinaMap.vue";
+import widgetGlobalMap from "./map/widgetGlobalMap.vue";
+import widgetScatter from "./scatter/widgetScatter.vue";
 
 export default {
   name: "WidgetTemp",
@@ -102,7 +97,9 @@ export default {
     widgetFormTime,
     widgetBarDoubleYaxisChart,
     widgetBarMap,
-    widgetBarStackMoreShowChart
+    widgetChinaMap,
+    widgetGlobalMap,
+    widgetScatter
   },
   model: {
     prop: "value",

+ 6 - 9
report-ui/src/views/bigscreenDesigner/designer/widget/widget.vue

@@ -1,10 +1,3 @@
-<!--
- * @Descripttion: 大屏报表设计器-动态组件
- * @Author: Devli
- * @Date: 2021-3-26 16:38:27
- * @LastEditors: qianlishi
- * @LastEditTime: 2023-3-9 17:38:44
--->
 <template>
   <avue-draggable
     :step="step"
@@ -33,6 +26,7 @@ import widgetSlider from "./texts/widgetSlider.vue";
 import widgetVideo from "./texts/widgetVideo.vue";
 import WidgetIframe from "./texts/widgetIframe.vue";
 import widgetBarchart from "./bar/widgetBarchart.vue";
+import widgetScatter from "./scatter/widgetScatter.vue";
 import widgetGradientColorBarchart from "./bar/widgetGradientColorBarchart.vue";
 import widgetLinechart from "./line/widgetLinechart.vue";
 import widgetBarlinechart from "./barline/widgetBarlinechart";
@@ -64,7 +58,8 @@ import widgetBorder from "./styleWidget/widgetBorder.vue";
 import widgetDecorateFlowLine from "./styleWidget/widgetDecorateFlowLine.vue";
 import widgetDecoration from "./styleWidget/widgetDecoration.vue";
 import widgetBarMap from "./map/widgetBarMap.vue";
-import widgetBarStackMoreShowChart from "./bar/widgetBarStackMoreShowChart.vue";
+import widgetChinaMap from "./map/widgetChinaMap.vue";
+import widgetGlobalMap from "./map/widgetGlobalMap.vue";
 
 export default {
   name: "Widget",
@@ -109,7 +104,9 @@ export default {
     widgetFormTime,
     widgetBarDoubleYaxisChart,
     widgetBarMap,
-    widgetBarStackMoreShowChart
+    widgetChinaMap,
+    widgetGlobalMap,
+    widgetScatter
   },
   model: {
     prop: "value",

+ 128 - 80
report-ui/src/views/excelreport/designer/index.vue

@@ -1,8 +1,8 @@
 <!--
- * @Author: yanzili
- * @Date: 2021-6-24 11:04:24
- * @Last Modified by:   qianlishi
- * @Last Modified time: 2021-12-13 11:04:24
+ * @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">
@@ -59,30 +59,37 @@
     </div>
     <div class="layout-middle">
       <div class="push_btn">
-        <el-tooltip
-          class="item"
-          effect="dark"
-          content="预览"
-          placement="bottom-start"
-        >
+        <el-tooltip class="item" effect="dark" content="预览" placement="bottom-start">
           <el-button type="text" @click="preview()">
             <i class="iconfont iconfuzhi"></i>
           </el-button>
         </el-tooltip>
+        <el-tooltip class="item" effect="dark" content="保存" placement="bottom-start">
+          <el-button type="text" @click="save()">
+            <i class="iconfont iconsave"></i>
+          </el-button>
+        </el-tooltip>
         <el-tooltip
           class="item"
           effect="dark"
-          content="保存"
+          content="导入xlsx"
           placement="bottom-start"
         >
-          <el-button type="text" @click="save()">
-            <i class="iconfont iconsave"></i>
-          </el-button>
+          <input style="font-size: 16px" type="file" @change="uploadExcel" />
         </el-tooltip>
       </div>
       <div
         id="luckysheet"
-        style="margin:0px;padding:0px;position:absolute;width:100%;height:95vh;left: 0px;top: 30px;bottom:0px;"
+        style="
+          margin: 0px;
+          padding: 0px;
+          position: absolute;
+          width: 100%;
+          height: 95vh;
+          left: 0px;
+          top: 45px;
+          bottom: 0px;
+        "
       />
       <div id="qrCode" ref="qrCodeDiv" />
       <img id="barCode" />
@@ -100,13 +107,16 @@
             </el-form-item>
             <el-form-item label="自动扩展" v-if="rightForm.autoIsShow">
               <el-col :span="12">
-                <el-switch
-                v-model="rightForm.auto"
-                @change="autoChangeFunc($event)" />
+                <el-switch v-model="rightForm.auto" @change="autoChangeFunc($event)" />
               </el-col>
               <el-col :span="12">
-                <el-tooltip class="item" effect="dark" content="只针对静态数据的单元格,具体参考文档" placement="top">
-                <i class="el-icon-question"> </i>
+                <el-tooltip
+                  class="item"
+                  effect="dark"
+                  content="只针对静态数据的单元格,具体参考文档"
+                  placement="top"
+                >
+                  <i class="el-icon-question"> </i>
                 </el-tooltip>
               </el-col>
             </el-form-item>
@@ -120,17 +130,13 @@
         ref="multipleTable"
         :data="dataSetData"
         tooltip-effect="dark"
-        style="width: 100%;height: 60vh;overflow-y: scroll;"
+        style="width: 100%; height: 60vh; overflow-y: scroll"
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55" />
         <el-table-column label="数据集名称" width="120" prop="setName" />
         <el-table-column prop="setDesc" label="数据集描述" width="180" />
-        <el-table-column
-          prop="setCode"
-          label="数据集编码"
-          show-overflow-tooltip
-        />
+        <el-table-column prop="setCode" label="数据集编码" show-overflow-tooltip />
       </el-table>
 
       <div slot="footer" class="dialog-footer">
@@ -152,10 +158,11 @@ export default {
   name: "Excels",
   components: {
     draggable,
-    ColorPicker
+    ColorPicker,
   },
   data() {
     return {
+      luckysheet,
       activeName: "first",
       activeNames: ["1"],
       reportId: null,
@@ -170,7 +177,7 @@ export default {
         jsonStr: "",
         setCodes: "",
         setParam: "",
-        reportCode: ""
+        reportCode: "",
       },
       multipleSelection: [],
       rightForm: {
@@ -179,7 +186,7 @@ export default {
         r: "",
         c: "",
         auto: false,
-        autoIsShow: false
+        autoIsShow: false,
       },
       qrCodeForm: {
         type: "QRCode",
@@ -191,7 +198,7 @@ export default {
         // correctLevel: QRCode.CorrectLevel.L, // 容错率,L/M/H
         ri: 0,
         ci: 0,
-        currentSrc: ""
+        currentSrc: "",
       },
       barCodeForm: {
         type: "BarCode",
@@ -204,19 +211,19 @@ export default {
         height: 40,
         ri: 0,
         ci: 0,
-        currentSrc: ""
+        currentSrc: "",
       },
       formPrintSetting: {
         size: "",
         pixel1: "",
-        pixel2: ""
+        pixel2: "",
       },
       pixelList: [
         { paper: "A4", width: 210, height: 297 },
         { paper: "A3", width: 297, height: 420 },
         { paper: "Letter", width: 216, height: 279 },
         { paper: "Legal", width: 216, height: 355 },
-        { paper: "Executive", width: 184, height: 266 }
+        { paper: "Executive", width: 184, height: 266 },
       ],
       dataSet: [],
       outerVisible: false,
@@ -245,8 +252,8 @@ export default {
       qrCodeList: [],
       moveDataelse: {
         x: null,
-        y: null
-      }
+        y: null,
+      },
     };
   },
   mounted() {},
@@ -257,6 +264,44 @@ export default {
     this.design();
   },
   methods: {
+    uploadExcel(evt) {
+      const files = evt.target.files;
+      if (files == null || files.length == 0) {
+        this.$message.error("没有文件被上传");
+        return;
+      }
+
+      let name = files[0].name;
+      let suffixArr = name.split("."),
+        suffix = suffixArr[suffixArr.length - 1];
+      if (suffix != "xlsx") {
+        this.$message.error("现在只支持上传xlsx文件");
+        return;
+      }
+      let that=this;
+      LuckyExcel.transformExcelToLucky(
+        files[0],
+        function (exportJson, luckysheetfile) {
+          if (exportJson.sheets == null || exportJson.sheets.length == 0) {
+            that.$message.error("Failed to read the content of the excel file, currently does not support xls files!");
+            return;
+          }
+          that.luckysheet.destroy();
+          // that.luckysheet.refresh({
+          //   container: "luckysheet", 
+          //   showinfobar: false,
+          //   data: exportJson.sheets,
+          //   title: exportJson.info.name,
+          //   userInfo: exportJson.info.name.creator,
+          // });
+          that.createSheet(exportJson)
+        },
+        function (error) {
+          // 如果抛出任何错误,则处理错误
+          that.$message.error(error);
+        }
+      );
+    },
     handleClose() {
       this.printVisible = false;
     },
@@ -275,8 +320,8 @@ export default {
       if (data != null) {
         if (data.setCodes != null && data.setCodes !== "") {
           let dataSetList = data.setCodes.split("|");
-          dataSetList.forEach(code => {
-            this.dataSetData.forEach(setData => {
+          dataSetList.forEach((code) => {
+            this.dataSetData.forEach((setData) => {
               if (code === setData.setCode) {
                 this.detail(setData.id);
               }
@@ -286,7 +331,7 @@ export default {
       }
     },
     //初始化表格
-    createSheet() {
+    createSheet(exportJson) {
       //将vue对象传入
       const that = this;
       const options = {
@@ -295,39 +340,34 @@ export default {
         lang: "zh", // 设定表格语言
         plugins: ["chart"],
         hook: {
-          cellDragStop: function(cell, postion, sheetFile, ctx, event) {
+          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);
-            luckysheet.setCellValue(
-              postion.r,
-              postion.c,
-              that.draggableFieldLabel
-            );
+            that.luckysheet.setCellValue(postion.r, postion.c, that.draggableFieldLabel);
           },
-          cellMousedown: function(cell, postion, sheetFile, ctx) {
-
+          cellMousedown: function (cell, postion, sheetFile, ctx) {
             //单元格点击事件
             that.rightForm.coordinate = postion.r + "," + postion.c;
             that.rightForm.r = postion.r;
             that.rightForm.c = postion.c;
             that.rightForm.value = cell == null ? "" : cell.v;
-            that.rightForm.autoIsShow = true
+            that.rightForm.autoIsShow = true;
             //判断单元格是否是静态数据并且是合并单元格
-            if(cell != null && ( cell.v == undefined || cell.v.indexOf('#{') === -1)){
-                that.rightForm.autoIsShow = true
-                if(cell.auto != null && cell.auto == '1'){
-                  that.rightForm.auto = true
-                }else{
-                  that.rightForm.auto = false
-                }
-            }else{
-              that.rightForm.auto = false
+            if (cell != null && (cell.v == undefined || cell.v.indexOf("#{") === -1)) {
+              that.rightForm.autoIsShow = true;
+              if (cell.auto != null && cell.auto == "1") {
+                that.rightForm.auto = true;
+              } else {
+                that.rightForm.auto = false;
+              }
+            } else {
+              that.rightForm.auto = false;
             }
-          }
+          },
         },
         data: [
           {
@@ -349,7 +389,7 @@ export default {
               rowhidden: {}, //隐藏行
               colhidden: {}, //隐藏列
               borderInfo: {}, //边框
-              authority: {} //工作表保护
+              authority: {}, //工作表保护
             },
             scrollLeft: 0, //左右滚动条位置
             scrollTop: 315, //上下滚动条位置
@@ -367,14 +407,25 @@ export default {
             zoomRatio: 1, // 缩放比例
             image: [], //图片
             showGridLines: 1, //是否显示网格线
-            dataVerification: {} //数据验证配置
-          }
-        ]
+            dataVerification: {}, //数据验证配置
+          },
+        ],
       };
+      this.sheetData = this.sheetData.map((val) => {
+        if (!val.name) {
+          val.name = "Sheet1";
+        }
+        return val;
+      });
       options.data = this.sheetData;
-
-      $(function() {
-        luckysheet.create(options);
+      $(function () {
+        if(exportJson){
+          options.data= exportJson.sheets;
+          options.title= exportJson.info.name;
+          options.userInfo= exportJson.info.name.creator;
+        }
+        console.log(options);
+        that.luckysheet.create(options);
       });
     },
     onStart(setCode, evt) {
@@ -405,14 +456,11 @@ export default {
       this.reportExcelDto.jsonStr = JSON.stringify(luckysheet.getAllSheets());
       let setCodeList = [];
       let setParams = {};
-      this.dataSet.forEach(code => {
+      this.dataSet.forEach((code) => {
         setCodeList.push(code.setCode);
-        if (
-          code.dataSetParamDtoList != null &&
-          code.dataSetParamDtoList.length > 0
-        ) {
+        if (code.dataSetParamDtoList != null && code.dataSetParamDtoList.length > 0) {
           let dataSetParam = {};
-          code.dataSetParamDtoList.forEach(value => {
+          code.dataSetParamDtoList.forEach((value) => {
             dataSetParam[value.paramName] = value.sampleItem;
           });
           setParams[code.setCode] = dataSetParam;
@@ -443,7 +491,7 @@ export default {
     async preview() {
       let routeUrl = this.$router.resolve({
         path: "/excelreport/viewer",
-        query: { reportCode: this.reportCode }
+        query: { reportCode: this.reportCode },
       });
       window.open(routeUrl.href, "_blank");
     },
@@ -458,7 +506,7 @@ export default {
       if (this.multipleSelection.length > 1) {
         this.$message({
           message: "一次最多勾选一个数据集",
-          type: "warning"
+          type: "warning",
         });
         this.outerVisible = true;
       } else {
@@ -469,7 +517,7 @@ export default {
       const { code, data } = await detail(id);
       if (code != 200) return;
       let flag = true;
-      this.dataSet.forEach(value => {
+      this.dataSet.forEach((value) => {
         if (value.setCode === data.setCode) {
           flag = false;
         }
@@ -485,14 +533,14 @@ export default {
         }
       }
     },
-    autoChangeFunc(auto){
-      if(auto){
-        luckysheet.setCellValue(this.rightForm.r, this.rightForm.c, { auto: "1"})
-      }else{
-        luckysheet.setCellValue(this.rightForm.r, this.rightForm.c, { auto: "0"})
+    autoChangeFunc(auto) {
+      if (auto) {
+        luckysheet.setCellValue(this.rightForm.r, this.rightForm.c, { auto: "1" });
+      } else {
+        luckysheet.setCellValue(this.rightForm.r, this.rightForm.c, { auto: "0" });
       }
-    }
-  }
+    },
+  },
 };
 </script>
 

Файловите разлики са ограничени, защото са твърде много
+ 0 - 5
report-ui/static/luckysheet/assets/iconfont/iconfont.css


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
report-ui/static/luckysheet/css/luckysheet.css


Файловите разлики са ограничени, защото са твърде много
+ 21 - 0
report-ui/static/luckysheet/echarts.min.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
report-ui/static/luckysheet/expendPlugins/chart/chartmix.umd.min.js


Файловите разлики са ограничени, защото са твърде много
+ 22212 - 0
report-ui/static/luckysheet/luckyexcel.umd.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
report-ui/static/luckysheet/luckysheet.umd.js


Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
report-ui/static/luckysheet/plugins/js/plugin.js


Файловите разлики са ограничени, защото са твърде много
+ 5 - 0
report-ui/static/luckysheet/vue@2.6.11.js


Файловите разлики са ограничени, защото са твърде много
+ 5 - 0
report-ui/static/luckysheet/vuex@3.4.0.js


Някои файлове не бяха показани, защото твърде много файлове са промени