From 1c91e0e831ee9372a52e2cc99e320c224db64d54 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 4 Aug 2021 16:52:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BB=AA=E8=A1=A8=E6=9D=BF=E8=81=94?= =?UTF-8?q?=E5=8A=A8=E5=A2=9E=E5=8A=A0=E6=BA=90=E8=81=94=E5=8A=A8=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=E8=99=9A=E5=8C=96=E6=A0=B7=E5=BC=8F=EF=BC=8C=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E9=9D=9E=E8=A7=86=E5=9B=BE=E7=BB=84=E4=BB=B6=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/ext/ExtPanelViewLinkageMapper.java | 12 +++++ .../mapper/ext/ExtPanelViewLinkageMapper.xml | 23 +++++++++ .../panel/PanelViewLinkageController.java | 33 +++++++++++++ .../request/panel/PanelLinkageRequest.java | 41 ++++++++++++++++ .../io/dataease/dto/PanelViewLinkageDTO.java | 43 +++++++++++++++++ .../dto/PanelViewLinkageFieldDTO.java | 31 ++++++++++++ .../panel/PanelViewLinkageService.java | 48 +++++++++++++++++++ .../src/main/resources/generatorConfig.xml | 3 +- frontend/src/api/panel/linkage.js | 11 +++++ frontend/src/components/DeDrag/index.vue | 12 ++++- .../canvas/components/Editor/EditBar.vue | 34 +++++++------ .../canvas/components/Editor/Preview.vue | 2 +- .../canvas/components/Editor/SettingMenu.vue | 15 +++++- .../canvas/components/Editor/index.vue | 5 +- .../components/canvas/components/Toolbar.vue | 2 +- frontend/src/store/index.js | 18 +++++-- frontend/src/views/panel/edit/index.vue | 2 +- 17 files changed, 310 insertions(+), 25 deletions(-) create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java create mode 100644 backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml create mode 100644 backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java create mode 100644 backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java create mode 100644 backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java create mode 100644 backend/src/main/java/io/dataease/dto/PanelViewLinkageFieldDTO.java create mode 100644 backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java create mode 100644 frontend/src/api/panel/linkage.js diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java new file mode 100644 index 0000000000..b0f7350d5a --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.java @@ -0,0 +1,12 @@ +package io.dataease.base.mapper.ext; + +import io.dataease.dto.PanelViewLinkageDTO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ExtPanelViewLinkageMapper { + + List getViewLinkageGather(@Param("panelId") String panelId,@Param("sourceViewId") String sourceViewId); + +} diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml new file mode 100644 index 0000000000..eafe5f0337 --- /dev/null +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelViewLinkageMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + 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 @@