Эх сурвалжийг харах

Merge remote-tracking branch 'origin/dev' into dev

Raod 2 жил өмнө
parent
commit
f4f4a6775d
56 өөрчлөгдсөн 765 нэмэгдсэн , 232 устгасан
  1. 5 4
      doc/docs/.vuepress/config.js
  2. 0 0
      doc/docs/guide/authManager.md
  3. 47 3
      doc/docs/guide/charts.md
  4. 0 0
      doc/docs/guide/chartsConfig.md
  5. 190 0
      doc/docs/guide/chartsLinkage.md
  6. 0 0
      doc/docs/guide/importExport.md
  7. 16 7
      doc/docs/guide/releases/1.0.0.md
  8. 0 0
      doc/docs/guide/reportManager.md
  9. BIN
      doc/docs/picture/charts/img_33.png
  10. BIN
      doc/docs/picture/charts/img_34.png
  11. BIN
      doc/docs/picture/charts/img_35.png
  12. BIN
      doc/docs/picture/charts/img_36.png
  13. BIN
      doc/docs/picture/charts/img_37.png
  14. BIN
      doc/docs/picture/charts/img_38.png
  15. BIN
      doc/docs/picture/charts/img_39.png
  16. BIN
      doc/docs/picture/charts/img_40.png
  17. BIN
      doc/docs/picture/charts/img_41.png
  18. BIN
      doc/docs/picture/chartsLinkage/img.png
  19. BIN
      doc/docs/picture/chartsLinkage/img_1.png
  20. BIN
      doc/docs/picture/chartsLinkage/img_10.png
  21. BIN
      doc/docs/picture/chartsLinkage/img_11.png
  22. BIN
      doc/docs/picture/chartsLinkage/img_2.png
  23. BIN
      doc/docs/picture/chartsLinkage/img_3.png
  24. BIN
      doc/docs/picture/chartsLinkage/img_4.png
  25. BIN
      doc/docs/picture/chartsLinkage/img_5.png
  26. BIN
      doc/docs/picture/chartsLinkage/img_6.png
  27. BIN
      doc/docs/picture/chartsLinkage/img_7.png
  28. BIN
      doc/docs/picture/chartsLinkage/img_8.png
  29. BIN
      doc/docs/picture/chartsLinkage/img_9.png
  30. 78 0
      doc/example/aj_report_init.sql
  31. 8 66
      doc/example/delete_aj_report_init.sql
  32. 0 4
      doc/update1.0/V0.9.9_U_V1.0.0.sql
  33. 2 2
      report-core/src/main/resources/bootstrap.yml
  34. 10 0
      report-ui/src/views/bigscreenDesigner/designer/linkageLogic.js
  35. 1 1
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/barCharts/widget-bar-double-yaxis-chart.js
  36. 6 64
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js
  37. 3 3
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-input.js
  38. 4 4
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-select.js
  39. 12 0
      report-ui/src/views/bigscreenDesigner/designer/tools/configure/pieCharts/widget-pie-nightingale.js
  40. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarCompareChart.vue
  41. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarDoubleYaxisChart.vue
  42. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarStackChart.vue
  43. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetBarLineStackChart.vue
  44. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetBarlinechart.vue
  45. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetMoreBarLineChart.vue
  46. 11 42
      report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue
  47. 2 2
      report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetInput.vue
  48. 2 2
      report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetSelect.vue
  49. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/funnel/widgetFunnel.vue
  50. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/heatmap/widgetHeatmap.vue
  51. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/line/widgetLineCompareChart.vue
  52. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/line/widgetLineStackChart.vue
  53. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetAirBubbleMap.vue
  54. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetLineMap.vue
  55. 30 2
      report-ui/src/views/bigscreenDesigner/designer/widget/pie/widgetPieNightingaleRose.vue
  56. 26 2
      report-ui/src/views/bigscreenDesigner/designer/widget/radar/widgetRadar.vue

+ 5 - 4
doc/docs/.vuepress/config.js

@@ -50,7 +50,7 @@ module.exports = {
                     title: '用户权限',
                     collapsable: false,
                     children: [
-                        {title: '权限管理', path: '/guide/authmanager'},
+                        {title: '权限管理', path: '/guide/authManager'},
                     ]
                 },
                 {
@@ -59,12 +59,13 @@ module.exports = {
                     children: [
                         {title: '数据源', path: '/guide/datasource'},
                         {title: '数据集', path: '/guide/dataset'},
-                        {title: '报表管理', path: '/guide/reportmanager'},
+                        {title: '报表管理', path: '/guide/reportManager'},
                         {title: '大屏报表', path: '/guide/dashboard'},
                         {title: '表格报表', path: '/guide/excel'},
-                        {title: '导入导出', path: '/guide/importexport'},
-                        {title: '图表配置项', path: '/guide/chartsconfig'},
+                        {title: '导入导出', path: '/guide/importExport'},
+                        {title: '图表配置项', path: '/guide/chartsConfig'},
                         {title: '图表组件', path: '/guide/charts'},
+                        {title: '图表联动', path: '/guide/chartsLinkage'},
                     ]
                 },
                 {

+ 0 - 0
doc/docs/guide/authmanager.md → doc/docs/guide/authManager.md


+ 47 - 3
doc/docs/guide/charts.md

@@ -95,6 +95,17 @@
 
 **如有问题,请提交 [Issue](https://gitee.com/anji-plus/report/issues) <br>**
 
+### 双Y柱图
+
+数据集需要3个字段,其中一个字段作为“X轴”,另外两个数值字段选择“柱状”,左右Y轴分别代表选择柱状的俩种数值。 <br>
+![img33](../picture/charts/img_33.png) <br>
+
+#### 数据格式
+
+![img34](../picture/charts/img_34.png) <br>
+
+**如有问题,请提交 [Issue](https://gitee.com/anji-plus/report/issues) <br>**
+
 ## 折线图
 
 ### 折线图
@@ -298,7 +309,7 @@
 基本操作和表格一致,通过配置栏的新增按钮和操作按钮对雷达顶点数量进行修改,可生成5边雷达,6边雷达等等,”key值“和”雷达顶点“保持一致,从最上端顶点逆时针规划其他顶点。<br>
 ![img26](../picture/charts/img_26.png) <br>
 
-### 数据格式
+#### 数据格式
 
 数据格式和柱线、多柱线都是类似的,注意实际作为”名称“的字段,比如时间字段,有且只能有1个,其余是”雷达顶点“字段,不明白可以看静态数据格式。<br>
 ![img27](../picture/charts/img_27.png) <br>
@@ -306,13 +317,46 @@
 
 **如有问题,请提交 [Issue](https://gitee.com/anji-plus/report/issues) <br>**
 
+## 刻度尺
+
+### 竖刻度尺
+
+刻度尺数值的颜色来源于配置的渐变色,渐变色分为0%-30%-50%-70%-100%,数值颜色的变化会随着数值所在颜色区间的变化而变化。通过刻度设定可以调整最大刻度,默认刻度是100。<br>
+![img35](../picture/charts/img_35.png) <br>
+![img36](../picture/charts/img_36.png) <br>
+
+#### 数据格式
+
+单一的数值字段,可看静态数据。
+
+### 横刻度尺
+
+同竖刻度尺。<br>
+![img37](../picture/charts/img_37.png) <br>
+
+#### 数据格式
+
+单一的数值字段,可看静态数据。
+
 ## 表单
 
 ### 下拉框
 
+下拉框组件联动的使用方式请看图表联动里面的详细描述。<br>
+![img38](../picture/charts/img_38.png) <br>
 
 #### 数据格式
 
-### 输入框
+“提交值”指的是下拉框提交给联动的组件字段名和字段值,“显示值”是指下拉框自身下拉按钮显示的值。动态数据需要至少1个字段,如果只有一个字段请选择“提交值”,最多2个字段,“提交值”“显示值”,只能选择一个,不能同时都选。<br>
+注意下拉框的静态数据只是作为参考用的,并不参与解析。<br>
+![img39](../picture/charts/img_39.png) <br>
+
+**如有问题,请提交 [Issue](https://gitee.com/anji-plus/report/issues) <br>**
+
+### 时间筛选器
+
+默认支持的时间格式是"yyyy-MM-dd HH:mm:ss",其他日期格式暂不支持,需要自己把自己数据集中时间字段格式化成同种格式。<br>
+时间筛选器组件联动的使用方式请看图表联动里面的详细描述。<br>
+![img40](../picture/charts/img_40.png) <br>
+![img41](../picture/charts/img_41.png) <br>
 
-#### 数据格式

+ 0 - 0
doc/docs/guide/chartsconfig.md → doc/docs/guide/chartsConfig.md


+ 190 - 0
doc/docs/guide/chartsLinkage.md

@@ -0,0 +1,190 @@
+## 简要说明
+
+现有系统联动的本质是数据集查询参数“示例值”的替换, 现在联动有两种。<br>
+
+- 表单联动 <br>
+  目前支持的有下拉框、时间筛选器。<br>
+
+- 图表联动:<br>
+  目前联动主要集中在柱状图、折线图、饼图等这种二维图表,二维图表是指图表只支持2个字段的数据集,当然并不是说需要3个字段的堆叠图(柱状/折线)不支持联动,而是这种三维图表去联动二维图表会带来一些问题,反之二维的去联动三维的同样存在问题,因此目前源代码中只添加了部分二维图表的联动。<br>
+
+**注:**
+没有多级联动,联动都是一对一的。例如,时间筛选器绑定了A柱图,A柱图绑定了B饼图,当使用时间筛选器更改时间后,只会更新绑定的A柱图,A绑定的B饼图并不会更新数据。<br>
+
+## 表单联动
+
+### 下拉框
+
+- 简介-数据格式 <br>
+  下拉框最多两个字段,数据字典对应“显示值(label)”、“提交值(value)”,“提交值”是必须选择的,当动态数据只有一个字段的时候,选择“提交值”也会将其默认展示为“显示值”。<br>
+
+- 联动说明 <br>
+  被联动的组件:当前大屏中除自身以外的其他图表组件,这里获取的是图表的图层名称,每个图表都有默认的图层名称,因此有相同图表存在的话,记得修改图层名称。<br>
+  ![img](../picture/chartsLinkage/img.png) <br>
+
+  参数配置:label和value是下拉框自身字典属性。<br>
+  ![img1](../picture/chartsLinkage/img_1.png) <br>
+
+  选择联动的图表后,可以获得该图表配置的数据集,并获得数据集中的查询参数,然后将该查询参数进行绑定label、value。 <br>
+  ![img2](../picture/chartsLinkage/img_2.png) <br>
+
+  下拉联动的时候就是将下拉框(label/value)的数据提交给联动图表的查询参数,绑定label就是将下拉框label的值传递给图表的查询参数,同理value,只有一个查询参数的情况下肯定不能同时绑定label、value。<br>
+  ![img3](../picture/chartsLinkage/img_3.png) <br>
+
+- **使用注意 !!!** <br>
+  首先每个有查询参数的数据集都有对应查询参数的示例值,那么此数据集的数据则是根据此查询参数执行后的结果; <br>
+  下拉框在使用时,则是将下拉选择的值传递给此查询参数来获得新的数据; <br>
+  当使用下拉框后,已经将值传递给了某数据集的查询参数,这时候将下拉框的值清空并不会意味着传了空值给查询参数,且当数据集的刷新时间到了后也只会按下拉框传递的参数值进行查询; <br>
+  那么在使用下拉框查询后,想恢复原本数据集的数据只需要刷新浏览器即可。<br>
+
+- 示例 <br>
+  示例中的数据集相关的sql写在 aj_report_init.sql文件中,请自行查看。<br>
+  1、先准备两个数据集 <br>
+  按城市名称过滤筛选的数据集,可用于柱图、折线图等二字段图表。<br>
+  ![img5](../picture/chartsLinkage/img_5.png) <br>
+
+```
+SELECT DATE_FORMAT(create_time,'%Y-%m-%d') create_time,sum(nums) sum_nums  FROM aj_report_city where city_name ='${city_name}' group by create_time ;
+```
+
+获得城市名称对应的数据集,用于下拉框筛选。<br>
+![img4](../picture/chartsLinkage/img_4.png) <br>
+
+```
+SELECT DISTINCT(city_code)city_code ,city_name  FROM aj_report_city group by city_code,city_name;
+```
+
+<br>
+
+2、给下拉框配置动态数据,并设置好“提交值”、“显示值”字段 <br>
+![img6](../picture/chartsLinkage/img_6.png) <br>
+
+3、联动配置-参数配置 <br>
+下拉框数据集绑定的是“提交值”,也就是label,这里也就是将label的值传递给柱状图数据集的查询参数city_name。<br>
+当然在给下拉框绑定数据集的时候,因为只绑定了“提交值”这一个字段,因此这个字段的值同时作为“label、value”,参数配置的时候,选择value绑定city_name也是有结果。<br>
+![img7](../picture/chartsLinkage/img_7.png) <br>
+
+4、使用 <br>
+注意内容看上面说明。<br>
+![img8](../picture/chartsLinkage/img_8.png) <br>
+
+<br>
+
+### 时间筛选器
+
+- 简介 <br>
+  时间筛选器组件底层定义了“startTime、endTime”字典值,即开始时间、结束时间,和下拉框一样,使用时也是传值给绑定图表的查询参数。<br>
+
+- 联动说明 <br>
+  和下拉框的操作是一样的,这里也是绑定查询参数。<br>
+  ![img9](../picture/chartsLinkage/img_9.png) <br>
+
+- **注意事项!!!** <br>
+  1、绑定的数据集的查询参数的时间格式,目前必须是 "yyyy-MM-dd HH:mm:ss",其他日期格式,暂不支持。<br>
+  2、绑定的数据集的查询参数至少有一个是和时间有关,最多两个和时间有关。<br>
+  3、注意sql里面时间的比较,比如时间筛选器的今天是指当天的00:00:00 ~ 23:59:59 。<br>
+  4、如果数据集的查询参数只有开始时间/结束时间其一,那么在用时间筛选器绑定的时候注意只绑定一个。<br>
+  5、使用后的情况和下拉框使用后情况一致。<br>
+
+<br>
+
+- 数据集示例-查近7天数据并进行联动 <br>
+
+![img10](../picture/chartsLinkage/img_10.png) <br>
+
+```
+SELECT city_name,sum(nums) sum_nums  FROM aj_report_city where create_time>='${startTime}' and create_time < '${endTime}' group by city_name
+```
+
+startTime、endTime的示例值不用带上时分秒
+
+```js
+// startTime
+function verification(data) {
+    //自定义脚本内容
+    //可返回true/false单纯校验键入的data正确性
+    //可返回文本,实时替换,比如当前时间等
+    //return "2099-01-01 00:00:00";
+    //设置日期,当前日期的前七天\
+    data = data.sampleItem;
+    //示例值不能为空,因此这里判断示例值,保证示例值和时间筛选器返回值不一样就行,
+    if (data.length == 10) {
+        // 获取7天前日期
+        return getDay(-7);
+    }
+    return data;
+}
+
+// 时间处理公用方法
+function getDay(day) {
+    var today = new Date();
+    var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
+    today.setTime(targetday_milliseconds); //注意,这行是关键代码
+    var tYear = today.getFullYear();
+    var tMonth = today.getMonth();
+    var tDate = today.getDate();
+    tMonth = doHandleMonth(tMonth + 1);
+    tDate = doHandleMonth(tDate);
+    return tYear + "-" + tMonth + "-" + tDate + " 00:00:00";
+}
+
+function doHandleMonth(month) {
+    var m = month;
+    if (month.toString().length == 1) {
+        m = "0" + month;
+    }
+    return m;
+}
+```
+
+```js
+// endTime
+function verification(data) {
+    //自定义脚本内容
+    //可返回true/false单纯校验键入的data正确性
+    //可返回文本,实时替换,比如当前时间等
+    //return "2099-01-01 00:00:00";
+    //设置日期,当前日期的前七天
+    data = data.sampleItem;
+    if (data.length == 10) {
+        return getDay(1);
+    }
+    return data;
+}
+
+function getDay(day) {
+    var today = new Date();
+    var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
+    today.setTime(targetday_milliseconds); //注意,这行是关键代码
+    var tYear = today.getFullYear();
+    var tMonth = today.getMonth();
+    var tDate = today.getDate();
+    tMonth = doHandleMonth(tMonth + 1);
+    tDate = doHandleMonth(tDate);
+    return tYear + "-" + tMonth + "-" + tDate + " 00:00:00";
+}
+
+function doHandleMonth(month) {
+    var m = month;
+    if (month.toString().length == 1) {
+        m = "0" + month;
+    }
+    return m;
+}
+```
+
+## 图表联动
+
+- 简介 <br>
+  图表联动是将联动图表的某些值覆盖到被联动的图表中,因此能否联动成功的关键在于,联动图表的数据格式是否满足被联动的图表。比如柱状图联动折线图,这俩图的数据格式是一模一样的,能联动成功,但是用柱状图去联动柱状堆叠图,数据格式不一致,那无法成功。<br>
+
+- 联动参数说明 <br>
+  图表联动的界面和表单联动界面都是一样的,不同的在于参数配置名称的不同。在二维的图表中,比如name在柱状图中代表柱图动态数据集的X轴字段,value则代表数值,在饼图中name对应饼图动态数据集的name,value同样对应数值。<br>
+  ![img11](../picture/chartsLinkage/img_11.png) <br>
+
+- **注意事项!!!** <br>
+  1、用于被联动的动态数据集比如上面的示例数据集,查询参数在sql里面需要用 '' 或者 ""
+  ,因为时间筛选器格式传递的数据中间有空格的。当然,如果不绑定时间筛选器那么sql里面直接使用数据库时间函数就行,例如DATE_FORMAT。<br>
+  2、联动与被联动的图表必须有相同的数据格式。理论上多维向低维填充数据是没问题的,但实际操作时带来的问题会很多,因此当前版本高维图表都不支持图表组件联动。<br>
+  3、被联动的图表的动态数据集必须得有查询参数。说的简单一点就是联动始终都是数据集参数的传递,图表只是数据的载体表象。<br>
+  4、使用后的情况和表单组件使用后情况一致。<br>

+ 0 - 0
doc/docs/guide/importexport.md → doc/docs/guide/importExport.md


+ 16 - 7
doc/docs/guide/releases/1.0.0.md

@@ -6,15 +6,24 @@
 
 - 如果需要将之前版本的示例数据删除,delete_aj_report_init.sql 文件放置在 doc/example目录下。
 
-- 对于从之前版本升级到1.0.0版本,为避免sql重复执行覆盖等问题,1.0.0版本的配置项bootstrap.yml将默认禁用flyway
-  从0.9.9版本更新到1.0.0版本的更新sql,V0.9.9_U_V1.0.0.sql 文件放置在 doc/update1.0目录下,请参照下面的步骤内容进行操作,
+- 对于从之前版本升级到1.0.0版本,必需解决新旧sql的冲突问题,因为V1.0.0版本同样默认启用flyway,如果不解决冲突,代码启动就会报错
+  从0.9.9版本更新到1.0.0版本的更新sql,请参照下面的步骤内容进行操作,
   如果从更低的版本升级到V1.0.0,请先升级到V0.9.9版本,可参考之前版本的[releases](https://gitee.com/anji-plus/report/releases)。
 
 **如果从V0.9.9版本更新至V1.0.0版本后需要继续使用flyway功能,必需解决新旧sql的冲突问题**
 
-- 0.将自己系统的数据库数据进行备份
-- 1.手动执行V0.9.9_U_V1.0.0.sql(doc/update1.0 目录下)
-- 2.插入一条数据到flyway_schema_history表中,sql如下
+- 1、将自己系统的数据库数据进行备份
+- 2、手动执行V0.9.9更新的V1.0.0增量sql
+
+```
+INSERT INTO `aj_report`.`gaea_dict`(`dict_name`, `dict_code`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('下拉框属性', 'SELECT_PROPERTIES', '下拉框属性', 'admin', NOW(), 'admin', NOW(), 1);
+
+INSERT INTO `aj_report`.`gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SELECT_PROPERTIES', '显示值', 'label', NULL, 1, 'zh', NULL, NULL, 'admin', NOW(), 'admin', NOW(), 1);
+INSERT INTO `aj_report`.`gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SELECT_PROPERTIES', '提交值', 'value', NULL, 1, 'zh', NULL, NULL, 'admin', NOW(), 'admin', NOW(), 1);
+
+```
+
+- 3.清空flyway_schema_history表并插入一条数据到表中,sql如下
 
 ```
 truncate table aj_report.flyway_schema_history;
@@ -24,8 +33,8 @@ VALUES (1, '1.0.0', 'init', 'SQL', 'V1.0.0__init.sql', -1762151859, 'root', '202
 
 ```
 
-- 3.将配置项bootstrap.yml中的flyway改为true
+<br>
 
-**如果是直接使用1.0.0版本,只需要将配置项bootstrap.yml中的flyway改为true即可**
+**如果是直接使用1.0.0版本,以上都不需要处理**
 
 ## 新增/修复

+ 0 - 0
doc/docs/guide/reportmanager.md → doc/docs/guide/reportManager.md


BIN
doc/docs/picture/charts/img_33.png


BIN
doc/docs/picture/charts/img_34.png


BIN
doc/docs/picture/charts/img_35.png


BIN
doc/docs/picture/charts/img_36.png


BIN
doc/docs/picture/charts/img_37.png


BIN
doc/docs/picture/charts/img_38.png


BIN
doc/docs/picture/charts/img_39.png


BIN
doc/docs/picture/charts/img_40.png


BIN
doc/docs/picture/charts/img_41.png


BIN
doc/docs/picture/chartsLinkage/img.png


BIN
doc/docs/picture/chartsLinkage/img_1.png


BIN
doc/docs/picture/chartsLinkage/img_10.png


BIN
doc/docs/picture/chartsLinkage/img_11.png


BIN
doc/docs/picture/chartsLinkage/img_2.png


BIN
doc/docs/picture/chartsLinkage/img_3.png


BIN
doc/docs/picture/chartsLinkage/img_4.png


BIN
doc/docs/picture/chartsLinkage/img_5.png


BIN
doc/docs/picture/chartsLinkage/img_6.png


BIN
doc/docs/picture/chartsLinkage/img_7.png


BIN
doc/docs/picture/chartsLinkage/img_8.png


BIN
doc/docs/picture/chartsLinkage/img_9.png


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 78 - 0
doc/example/aj_report_init.sql


+ 8 - 66
doc/example/delete_aj_report_init.sql

@@ -15,6 +15,7 @@ DROP TABLE IF EXISTS `aj_report_init`.`aj_report_manus`;
 DROP TABLE IF EXISTS `aj_report_init`.`aj_report_nums`;
 DROP TABLE IF EXISTS `aj_report_init`.`aj_report_table`;
 DROP TABLE IF EXISTS `aj_report_init`.`aj_report_wifiamount`;
+DROP TABLE IF EXISTS `aj_report_init`.`aj_report_init`;
 DROP DATABASE `aj_report_init`;
 
 DELETE FROM `aj_report`.`gaea_report` WHERE `report_code` = 'log_ajreport';
@@ -33,75 +34,9 @@ DELETE FROM `aj_report`.`gaea_report_dashboard` WHERE `report_code` = 'logistics
 
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'test';
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'acc_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'car_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'blank';
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'blank';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'blank';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logn_ajreport';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
-DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
 DELETE FROM `aj_report`.`gaea_report_dashboard_widget` WHERE `report_code` = 'logistics_one';
 
 DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'log_ajdevices';
@@ -130,6 +65,13 @@ DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'logis_table';
 DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'per';
 DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'barstack_ajreport';
 DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'compare_ajreport';
+DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'aj_report_city_total';
+DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'aj_report_single_city';
+DELETE FROM `aj_report`.`gaea_report_data_set` WHERE `set_code` = 'aj_report_city_select';
+
+DELETE FROM `aj_report`.`gaea_report_data_set_param` WHERE `set_code` = 'aj_report_city_total';
+DELETE FROM `aj_report`.`gaea_report_data_set_param` WHERE `set_code` = 'aj_report_single_city';
+DELETE FROM `aj_report`.`gaea_report_data_set_param` WHERE `set_code` = 'aj_report_city_select';
 
 DELETE FROM `aj_report`.`gaea_report_data_source` WHERE `source_code` = 'mysql_ajreport';
 

+ 0 - 4
doc/update1.0/V0.9.9_U_V1.0.0.sql

@@ -1,4 +0,0 @@
-INSERT INTO `aj_report`.`gaea_dict`(`dict_name`, `dict_code`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('下拉框属性', 'SELECT_PROPERTIES', '下拉框属性', 'admin', NOW(), 'admin', NOW(), 1);
-
-INSERT INTO `aj_report`.`gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SELECT_PROPERTIES', '显示值', 'label', NULL, 1, 'zh', NULL, NULL, 'admin', NOW(), 'admin', NOW(), 1);
-INSERT INTO `aj_report`.`gaea_dict_item`(`dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES ('SELECT_PROPERTIES', '提交值', 'value', NULL, 1, 'zh', NULL, NULL, 'admin', NOW(), 'admin', NOW(), 1);

+ 2 - 2
report-core/src/main/resources/bootstrap.yml

@@ -45,8 +45,8 @@ spring:
     user: ${spring.datasource.username}
     password: ${spring.datasource.password}
     placeholder-replacement: false
-    #init-sqls:
-      #- CREATE DATABASE IF NOT EXISTS `aj_report` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
+    init-sqls:
+      - CREATE DATABASE IF NOT EXISTS `aj_report` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
   gaea:
     subscribes:
       oss: #文件存储 都配置的情况下优先级minio->amazonS3->nfs

+ 10 - 0
report-ui/src/views/bigscreenDesigner/designer/linkageLogic.js

@@ -43,6 +43,16 @@ export const lickageParamsConfig = [
     code: 'widgetPiePercentageChart',
     paramsKey: ['value']
   },
+  {
+    name: '饼图',
+    code: 'widget-piechart',
+    paramsKey: ['name', 'value']
+  },
+  {
+    name: '南丁格尔玫瑰图',
+    code: 'WidgetPieNightingaleRoseArea',
+    paramsKey: ['name', 'value']
+  },
 ]
 
 export const getOneConfigByCode = function (code) {

+ 1 - 1
report-ui/src/views/bigscreenDesigner/designer/tools/configure/barCharts/widget-bar-double-yaxis-chart.js

@@ -861,7 +861,7 @@ export const widgetBarDoubleYaxis = {
         placeholder: '',
         relactiveDom: 'dataType',
         chartType: 'widget-barlinechart',
-        dictKey: 'BAR_LINE_PROPERTIES',
+        dictKey: 'BAR_PROPERTIES',
         relactiveDomValue: 'dynamicData',
       },
     ],

+ 6 - 64
report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js

@@ -20,21 +20,13 @@ export const widgetFormTime = {
       },
       {
         type: 'vue-color',
-        label: '字体颜色',
-        name: 'select_color',
-        required: false,
-        placeholder: '',
-        value: '#FAD400',
-      },
-      {
-        type: 'vue-color',
-        label: '字体背景',
-        name: 'select_fontSize',
+        label: '背景',
+        name: 'select_background',
         required: false,
         placeholder: '',
         value: 'rgba(115,170,229,.5)',
       },
-      {
+/*      {
         type: 'el-select',
         label: '触发事件',
         name: 'event',
@@ -46,7 +38,7 @@ export const widgetFormTime = {
           { code: 'focus', name: 'focus' },
         ],
         value: 'change',
-      },
+      },*/
       [{
         name: '组件联动',
         list: [
@@ -60,57 +52,7 @@ export const widgetFormTime = {
         ]
       }]
     ],
-    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: [],
-      },
-      {
-        type: 'dycustComponents',
-        label: '',
-        name: 'dynamicData',
-        required: false,
-        placeholder: '',
-        relactiveDom: 'dataType',
-        relactiveDomValue: 'dynamicData',
-        chartType: 'widget-select',
-        dictKey: 'SELECT_PROPERTIES',
-        value: '',
-      },
-    ],
+    data: [],
     position: [
       {
         type: 'el-input-number',
@@ -134,7 +76,7 @@ export const widgetFormTime = {
         name: 'width',
         required: false,
         placeholder: '该容器在1920px大屏中的宽度',
-        value: 200,
+        value: 400,
       },
       {
         type: 'el-input-number',

+ 3 - 3
report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-input.js

@@ -25,12 +25,12 @@ export const widgetInput = {
       {
         type: 'vue-color',
         label: '字体背景',
-        name: 'select_fontSize',
+        name: 'select_background',
         required: false,
         placeholder: '',
         value: 'rgba(115,170,229,.5)',
       },
-      {
+/*      {
         type: 'el-select',
         label: '触发事件',
         name: 'event',
@@ -42,7 +42,7 @@ export const widgetInput = {
           { code: 'focus', name: 'focus' },
         ],
         value: 'change',
-      }
+      }*/
     ],
     position: [
       {

+ 4 - 4
report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-select.js

@@ -33,12 +33,12 @@ export const widgetSelect = {
       {
         type: 'vue-color',
         label: '字体背景',
-        name: 'select_fontSize',
+        name: 'select_background',
         required: false,
         placeholder: '',
         value: 'rgba(115,170,229,.5)',
       },
-      {
+/*      {
         type: 'el-select',
         label: '触发事件',
         name: 'event',
@@ -50,7 +50,7 @@ export const widgetSelect = {
           { code: 'focus', name: 'focus' },
         ],
         value: 'change',
-      },
+      },*/
       [{
         name: '组件联动',
         list: [
@@ -144,7 +144,7 @@ export const widgetSelect = {
         name: 'width',
         required: false,
         placeholder: '该容器在1920px大屏中的宽度',
-        value: 100,
+        value: 200,
       },
       {
         type: 'el-input-number',

+ 12 - 0
report-ui/src/views/bigscreenDesigner/designer/tools/configure/pieCharts/widget-pie-nightingale.js

@@ -338,6 +338,18 @@ export const widgetPieNightingale = {
             },
           ],
         },
+        {
+          name: '组件联动',
+          list: [
+            {
+              type: 'componentLinkage',
+              label: '',
+              name: 'componentLinkage',
+              required: false,
+              value: []
+            }
+          ]
+        }
       ],
     ],
     // 数据

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarCompareChart.vue

@@ -1,10 +1,12 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarCompareChart",
   //参考 https://www.makeapie.com/editor.html?c=xrJwcCF3NZ
@@ -12,6 +14,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -258,6 +261,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -277,6 +283,7 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -567,9 +574,26 @@ export default {
       this.options.series[1].itemStyle = itemStyleRight;
     },
     // 数据解析
-    setOptionsData() {
+    setOptionsData(e, paramsConfig) {
       const optionsSetup = this.optionsSetup;
       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, optionsSetup)
         : this.dynamicDataFn(

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarDoubleYaxisChart.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarDoubleYaxisChart",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -108,6 +111,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -127,6 +133,7 @@ export default {
     this.optionsCollapse = this.value.collapse;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -426,8 +433,25 @@ export default {
       this.options = Object.assign({}, this.options);
     },
     // 数据处理
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/bar/widgetBarStackChart.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarStackchart",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -70,6 +73,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -89,6 +95,7 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -272,10 +279,27 @@ export default {
       }
     },
     // 数据解析
-    setOptionsData() {
+    setOptionsData(e, paramsConfig) {
       const optionsSetup = this.optionsSetup;
       // 数据类型 静态 or 动态
       const optionsData = this.optionsData;
+      // 联动接收者逻辑开始
+      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, optionsSetup)
         : this.dynamicDataFn(

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetBarLineStackChart.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "widgetBarLineStackChart",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -105,6 +108,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -124,6 +130,7 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -353,10 +360,27 @@ export default {
       }
     },
     // 数据解析
-    setOptionsData() {
+    setOptionsData(e, paramsConfig) {
       const optionsSetup = this.optionsSetup;
       // 数据类型 静态 or 动态
       const optionsData = this.optionsData;
+      // 联动接收者逻辑开始
+      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, optionsSetup)
         : this.dynamicDataFn(

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetBarlinechart.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarlinechart",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -108,6 +111,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -127,6 +133,7 @@ export default {
     this.optionsCollapse = this.value.collapse;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -426,8 +433,25 @@ export default {
       this.options = Object.assign({}, this.options);
     },
     // 数据处理
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/barline/widgetMoreBarLineChart.vue

@@ -1,10 +1,12 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 import echarts from "echarts";
 export default {
   name: "widgetMoreBarLineChart",
@@ -12,6 +14,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -167,6 +170,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -186,6 +192,7 @@ export default {
     this.optionsCollapse = this.value.collapse;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -414,8 +421,25 @@ export default {
       }
     },
     // 数据处理
-    setOptionsData() {
+    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);

+ 11 - 42
report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue

@@ -41,8 +41,8 @@ export default {
         shortcuts: [{
           text: '今天',
           onClick(picker) {
-            const end = new Date();
             const start = new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0));
+            const end = new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 999));
             picker.$emit('pick', [start, end]);
           }
         },{
@@ -55,25 +55,28 @@ export default {
         },{
           text: '最近一周',
           onClick(picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(miment().add(-1, 'ww').stamp());
+            const end = new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 999));
+            const start = new Date(new Date(new Date().getTime()+24*60*60*1000));
+            start.setTime(miment().add(-6, 'DD').stamp());
+            new Date(start.setHours(0,0,0,0));
             picker.$emit('pick', [start, end]);
           }
         }, {
           text: '最近一个月',
           onClick(picker) {
-            const end = new Date();
+            const end = new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 999));
             const start = new Date();
             start.setTime(miment().add(-1, 'MM').stamp());
+            new Date(start.setHours(0,0,0,0));
             picker.$emit('pick', [start, end]);
           }
         }, {
           text: '最近三个月',
           onClick(picker) {
-            const end = new Date();
+            const end = new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 999));
             const start = new Date();
             start.setTime(miment().add(-3, 'MM').stamp());
+            new Date(start.setHours(0,0,0,0));
             picker.$emit('pick', [start, end]);
           }
         }],
@@ -91,12 +94,11 @@ export default {
         height: this.optionsStyle.height + "px",
         left: this.optionsStyle.left + "px",
         top: this.optionsStyle.top + "px",
-        background: this.optionsSetup.select_fontSize,
-        color: this.optionsSetup.select_color,
+        background: this.optionsSetup.select_background,
       };
     },
     eventChange() {
-      return this.optionsSetup.event || "change";
+      return "change";
     },
     allComponentLinkage() {
       return this.$store.state.designer.allComponentLinkage;
@@ -108,7 +110,6 @@ export default {
         this.optionsSetup = val.setup;
         this.optionsData = val.data;
         this.optionsStyle = val.position;
-        this.setOptions();
       },
       deep: true,
     },
@@ -117,13 +118,11 @@ export default {
     this.optionsSetup = this.value.setup;
     this.optionsData = this.value.data;
     this.optionsStyle = this.value.position;
-    this.setOptions();
 
     targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     change(event) {
-      console.log(event);
       const formTimeData = {}
       formTimeData['startTime'] = event[0]  //startTime
       formTimeData['endTime'] = event[1] //endTime
@@ -131,36 +130,6 @@ export default {
         currentData: formTimeData,
       }); // 联动-源组件逻辑
     },
-    setOptions() {
-      const optionsData = this.optionsData;
-      return optionsData.dataType == "staticData"
-        ? this.staticData(optionsData.staticData)
-        : this.dynamicDataFn(optionsData.dynamicData, optionsData.refreshTime);
-    },
-    staticData(data) {
-      this.options = data;
-    },
-    //动态数据字典解析
-    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 = val;
-    },
   },
 };
 </script>

+ 2 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetInput.vue

@@ -32,12 +32,12 @@ export default {
         height: this.optionsStyle.height + "px",
         left: this.optionsStyle.left + "px",
         top: this.optionsStyle.top + "px",
-        background: this.optionsSetup.select_fontSize,
+        background: this.optionsSetup.select_background,
         color: this.optionsSetup.select_color,
       };
     },
     eventChange() {
-      return this.optionsSetup.event || "change";
+      return "change";
     },
   },
   watch: {

+ 2 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetSelect.vue

@@ -42,12 +42,12 @@ export default {
         height: this.optionsStyle.height + "px",
         left: this.optionsStyle.left + "px",
         top: this.optionsStyle.top + "px",
-        background: this.optionsSetup.select_fontSize,
+        background: this.optionsSetup.select_background,
         color: this.optionsSetup.select_color,
       };
     },
     eventChange() {
-      return this.optionsSetup.event || "change";
+      return "change";
     },
     allComponentLinkage() {
       return this.$store.state.designer.allComponentLinkage;

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/funnel/widgetFunnel.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetFunnel",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -88,6 +91,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -107,6 +113,7 @@ export default {
     this.optionsCollapse = this.value.collapse;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -207,8 +214,25 @@ export default {
       this.options.color = arrColor;
       this.options = Object.assign({}, this.options);
     },
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/heatmap/widgetHeatmap.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "widgetHeatmap",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -116,6 +119,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -135,6 +141,7 @@ export default {
     this.optionsCollapse = this.value.collapse;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -303,8 +310,25 @@ export default {
       visualMap.orient = optionsSetup.layoutFront;
       visualMap.itemWidth = optionsSetup.legendWidth;
     },
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/line/widgetLineCompareChart.vue

@@ -1,10 +1,12 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarCompareChart",
   //参考 https://www.makeapie.com/editor.html?c=xOjLyozu2W
@@ -12,6 +14,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -259,6 +262,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -278,6 +284,7 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -617,9 +624,26 @@ export default {
       }
     },
     // 数据解析
-    setOptionsData() {
+    setOptionsData(e, paramsConfig) {
       const optionsSetup = this.optionsSetup;
       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, optionsSetup)
         : this.dynamicDataFn(

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/line/widgetLineStackChart.vue

@@ -1,16 +1,19 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetBarStackchart",
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -70,6 +73,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -89,6 +95,7 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -299,10 +306,27 @@ export default {
       this.options = Object.assign({}, this.options);
     },
     // 数据解析
-    setOptionsData() {
+    setOptionsData(e, paramsConfig) {
       const optionsSetup = this.optionsSetup;
       // 数据类型 静态 or 动态
       const optionsData = this.optionsData;
+      // 联动接收者逻辑开始
+      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, optionsSetup)
         : this.dynamicDataFn(

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetAirBubbleMap.vue

@@ -1,9 +1,11 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 import echarts from "echarts";
 import "../../../../../../node_modules/echarts/map/js/china.js";
 //https://www.makeapie.com/editor.html?c=x2yaz6dfRw
@@ -209,6 +211,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -405,6 +408,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -432,6 +438,7 @@ export default {
         this.getEchartData(dynamicData, optionsSetup);
       }
     );
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -528,8 +535,25 @@ export default {
       minSize4Pin = this.optionsSetup.fontminSize4Pin;
     },
     //数据解析
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/map/widgetLineMap.vue

@@ -1,9 +1,11 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 import "echarts/map/js/china.js";
 import echarts from "echarts";
 import { conversionCity } from "@/utils/china";
@@ -131,6 +133,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -303,6 +306,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -322,6 +328,7 @@ export default {
   },
   mounted() {
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     convertData(data) {
@@ -476,8 +483,25 @@ export default {
       this.options.geo["itemStyle"] = itemStyle;
     },
     //数据解析
-    setOptionsData() {
+    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);

+ 30 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/pie/widgetPieNightingaleRose.vue

@@ -1,16 +1,22 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 
 <script>
+import {
+  originWidgetLinkageLogic,
+  targetWidgetLinkageLogic,
+} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 export default {
   name: "WidgetPieNightingaleRoseArea", //南丁格尔玫瑰图面积模式 参考:https://echarts.apache.org/examples/zh/editor.html?c=pie-roseType-simple
   components: {},
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -55,6 +61,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -74,6 +83,8 @@ export default {
     this.optionsCollapse = this.value.setup;
     this.optionsSetup = this.value.setup;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
+    originWidgetLinkageLogic(this); // 联动-源组件逻辑
   },
   methods: {
     // 修改图标options属性
@@ -195,8 +206,25 @@ export default {
       this.options = Object.assign({}, this.options);
     },
     // 数据解析
-    setOptionsData() {
+    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);

+ 26 - 2
report-ui/src/views/bigscreenDesigner/designer/widget/radar/widgetRadar.vue

@@ -1,9 +1,11 @@
 <template>
   <div :style="styleObj">
-    <v-chart :options="options" autoresize />
+    <v-chart ref="myVChart" :options="options" autoresize />
   </div>
 </template>
 <script>
+import {targetWidgetLinkageLogic} from "@/views/bigscreenDesigner/designer/linkageLogic";
+
 import vue from "vue";
 import VueSuperSlide from "vue-superslide";
 vue.use(VueSuperSlide);
@@ -11,6 +13,7 @@ export default {
   props: {
     value: Object,
     ispreview: Boolean,
+    flagInter: null,
   },
   data() {
     return {
@@ -40,6 +43,9 @@ export default {
         background: this.optionsSetup.background,
       };
     },
+    allComponentLinkage() {
+      return this.$store.state.designer.allComponentLinkage;
+    },
   },
   watch: {
     value: {
@@ -57,6 +63,7 @@ export default {
     this.optionsPosition = this.value.position;
     this.optionsData = this.value.data;
     this.editorOptions();
+    targetWidgetLinkageLogic(this); // 联动-目标组件逻辑
   },
   methods: {
     editorOptions() {
@@ -173,8 +180,25 @@ export default {
     setOptionsMargin() {
       this.options.radar.radius = "70%";
     },
-    setOptionsData() {
+    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);

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно