From 68a80e2cc860c9563bd6a63ea9223d80fe09040d Mon Sep 17 00:00:00 2001 From: junjie Date: Wed, 4 Aug 2021 16:40:53 +0800 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=E8=A7=86=E5=9B=BE=E9=92=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/domain/ChartViewWithBLOBs.java | 2 ++ .../dataease/base/mapper/ChartViewMapper.xml | 24 ++++++++++++++--- .../db/migration/V18__area_mapping.sql | 4 +++ .../src/main/resources/generatorConfig.xml | 2 +- frontend/src/views/chart/group/Group.vue | 1 + frontend/src/views/chart/view/ChartEdit.vue | 27 +++++++++++++++++++ 6 files changed, 56 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java b/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java index a3510da1c9..5cb65dbda2 100644 --- a/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java +++ b/backend/src/main/java/io/dataease/base/domain/ChartViewWithBLOBs.java @@ -21,6 +21,8 @@ public class ChartViewWithBLOBs extends ChartView implements Serializable { private String customFilter; + private String drillFields; + private String snapshot; private static final long serialVersionUID = 1L; diff --git a/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml index d89b3a0613..c5c452beef 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ChartViewMapper.xml @@ -20,6 +20,7 @@ + @@ -85,7 +86,8 @@ style_priority - x_axis, y_axis, ext_stack, custom_attr, custom_style, custom_filter, snapshot + x_axis, y_axis, ext_stack, custom_attr, custom_style, custom_filter, drill_fields, + snapshot + SELECT + panel_view_linkage.target_view_id, + panel_view_linkage_field.source_filed, + panel_view_linkage_field.target_filed + FROM + panel_view_linkage + LEFT JOIN panel_view_linkage_field ON panel_view_linkage.id = panel_view_linkage_field.linkage_id + where panel_view_linkage.panel_id = #{panelId} and panel_view_linkage.source_view_id =#{sourceViewId} + + diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java b/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java new file mode 100644 index 0000000000..2b99e08576 --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java @@ -0,0 +1,33 @@ +package io.dataease.controller.panel; + +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.controller.request.panel.PanelLinkageRequest; +import io.dataease.service.panel.PanelViewLinkageService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * Author: wangjiahao + * Date: 8/4/21 + * Description: + */ +@Api(tags = "仪表板:视图联动") +@ApiSupport(order = 171) +@RestController +@RequestMapping("linkage") +public class PanelViewLinkageController { + + @Resource + private PanelViewLinkageService panelViewLinkageService; + + @ApiOperation("获取仪表板视图联动信息") + @PostMapping("/getViewLinkageGather") + public Map getViewLinkageGather(@RequestBody PanelLinkageRequest request){ + return panelViewLinkageService.getViewLinkageGather(request); + } + +} diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java new file mode 100644 index 0000000000..2829eaf14d --- /dev/null +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java @@ -0,0 +1,41 @@ +package io.dataease.controller.request.panel; + +import java.util.List; + +/** + * Author: wangjiahao + * Date: 8/4/21 + * Description: + */ +public class PanelLinkageRequest { + + private String panelId; + + private String sourceViewId; + + private List targetViewIds; + + public String getPanelId() { + return panelId; + } + + public void setPanelId(String panelId) { + this.panelId = panelId; + } + + public String getSourceViewId() { + return sourceViewId; + } + + public void setSourceViewId(String sourceViewId) { + this.sourceViewId = sourceViewId; + } + + public List getTargetViewIds() { + return targetViewIds; + } + + public void setTargetViewIds(List targetViewIds) { + this.targetViewIds = targetViewIds; + } +} diff --git a/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java b/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java new file mode 100644 index 0000000000..d9b1420e50 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java @@ -0,0 +1,43 @@ +package io.dataease.dto; + +import io.dataease.base.domain.PanelViewLinkage; + +import java.util.ArrayList; +import java.util.List; + +/** + * Author: wangjiahao + * Date: 8/4/21 + * Description: + */ +public class PanelViewLinkageDTO extends PanelViewLinkage { + + //关联状态 + private boolean linkageActive = true; + + private List linkageFields = new ArrayList<>(); + + public PanelViewLinkageDTO() { + + } + + public PanelViewLinkageDTO(boolean linkageActive) { + this.linkageActive = linkageActive; + } + + public boolean isLinkageActive() { + return linkageActive; + } + + public void setLinkageActive(boolean linkageActive) { + this.linkageActive = linkageActive; + } + + public List getLinkageFields() { + return linkageFields; + } + + public void setLinkageFields(List linkageFields) { + this.linkageFields = linkageFields; + } +} diff --git a/backend/src/main/java/io/dataease/dto/PanelViewLinkageFieldDTO.java b/backend/src/main/java/io/dataease/dto/PanelViewLinkageFieldDTO.java new file mode 100644 index 0000000000..d6c0f8bdae --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/PanelViewLinkageFieldDTO.java @@ -0,0 +1,31 @@ +package io.dataease.dto; + +import io.dataease.base.domain.PanelViewLinkageField; + +/** + * Author: wangjiahao + * Date: 8/4/21 + * Description: + */ +public class PanelViewLinkageFieldDTO extends PanelViewLinkageField { + + private String sourceViewId; + + private String targetViewId; + + public String getSourceViewId() { + return sourceViewId; + } + + public void setSourceViewId(String sourceViewId) { + this.sourceViewId = sourceViewId; + } + + public String getTargetViewId() { + return targetViewId; + } + + public void setTargetViewId(String targetViewId) { + this.targetViewId = targetViewId; + } +} diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java new file mode 100644 index 0000000000..9f3806ec42 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java @@ -0,0 +1,48 @@ +package io.dataease.service.panel; + +import io.dataease.base.mapper.PanelViewLinkageMapper; +import io.dataease.base.mapper.ext.ExtPanelViewLinkageMapper; +import io.dataease.controller.request.panel.PanelLinkageRequest; +import io.dataease.dto.PanelViewLinkageDTO; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Author: wangjiahao + * Date: 8/4/21 + * Description: + */ +@Service +public class PanelViewLinkageService { + + @Resource + private PanelViewLinkageMapper panelViewLinkageMapper; + + @Resource + private ExtPanelViewLinkageMapper extPanelViewLinkageMapper; + + + public Map getViewLinkageGather(PanelLinkageRequest request) { + if(CollectionUtils.isNotEmpty(request.getTargetViewIds())){ + Map result = Optional.ofNullable(extPanelViewLinkageMapper.getViewLinkageGather(request.getPanelId(),request.getSourceViewId())) + .orElse(new ArrayList<>()).stream() + .collect(Collectors.toMap(PanelViewLinkageDTO::getTargetViewId,PanelViewLinkageDTO->PanelViewLinkageDTO)); + Set innerTargetIds = result.keySet(); + + // 将对应没有建立关联关系的targetId 也补充进去 + request.getTargetViewIds().stream().forEach(targetId->{ + if(!innerTargetIds.contains(targetId)){ + result.put(targetId,new PanelViewLinkageDTO(false)); + } + }); + return result; + } + return new HashMap<>(); + } + + +} diff --git a/backend/src/main/resources/generatorConfig.xml b/backend/src/main/resources/generatorConfig.xml index f01340eb22..e7b6f2016e 100644 --- a/backend/src/main/resources/generatorConfig.xml +++ b/backend/src/main/resources/generatorConfig.xml @@ -64,7 +64,8 @@ - +
+
diff --git a/frontend/src/api/panel/linkage.js b/frontend/src/api/panel/linkage.js new file mode 100644 index 0000000000..9bbbc0fde9 --- /dev/null +++ b/frontend/src/api/panel/linkage.js @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +export function getViewLinkageGather(requestInfo) { + return request({ + url: '/linkage/getViewLinkageGather', + method: 'post', + data: requestInfo, + loading: true + }) +} + diff --git a/frontend/src/components/DeDrag/index.vue b/frontend/src/components/DeDrag/index.vue index 3af079217f..2063bc28f1 100644 --- a/frontend/src/components/DeDrag/index.vue +++ b/frontend/src/components/DeDrag/index.vue @@ -10,7 +10,8 @@ [classNameResizable]: resizable, [classNameRotating]: rotating, [classNameRotatable]: rotatable, - [classNameMouseOn]: mouseOn || active + [classNameMouseOn]: mouseOn || active, + ['linkageSetting']:linkageActive }, className ]" @@ -310,6 +311,11 @@ export default { changeStyle: { require: true, type: Object + }, + // 联动设置 + linkageActive: { + type: Boolean, + default: false } }, data: function() { @@ -1631,6 +1637,10 @@ export default { user-select: none; } +.linkageSetting{ + opacity: 0.5; +} + /*.mouseOn >>> .icon-shezhi{*/ /* z-index: 2;*/ /* display:block!important;*/ diff --git a/frontend/src/components/canvas/components/Editor/EditBar.vue b/frontend/src/components/canvas/components/Editor/EditBar.vue index 5019550b73..9618b138ef 100644 --- a/frontend/src/components/canvas/components/Editor/EditBar.vue +++ b/frontend/src/components/canvas/components/Editor/EditBar.vue @@ -1,10 +1,10 @@