diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationLinkJumpTargetViewInfo.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationLinkJumpTargetViewInfo.java index d011a62394..7a7673a484 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationLinkJumpTargetViewInfo.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationLinkJumpTargetViewInfo.java @@ -1,15 +1,16 @@ package io.dataease.visualization.dao.auto.entity; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; /** *

- * + * 跳转目标仪表板图表字段配置表 *

* * @author fit2cloud - * @since 2023-09-22 + * @since 2024-11-20 */ @TableName("visualization_link_jump_target_view_info") public class VisualizationLinkJumpTargetViewInfo implements Serializable { @@ -18,6 +19,9 @@ public class VisualizationLinkJumpTargetViewInfo implements Serializable { private Long targetId; + /** + * visualization_link_jump_info 表的 ID + */ private Long linkJumpInfoId; /** @@ -25,14 +29,31 @@ public class VisualizationLinkJumpTargetViewInfo implements Serializable { */ private Long sourceFieldActiveId; - private Long targetViewId; + /** + * 目标图表ID + */ + private String targetViewId; - private Long targetFieldId; + /** + * 目标字段ID + */ + private String targetFieldId; + /** + * 复制来源 + */ private Long copyFrom; + /** + * 复制来源ID + */ private Long copyId; + /** + * 联动目标类型 view 图表 filter 过滤组件 outParams 外部参数 + */ + private String targetType; + public Long getTargetId() { return targetId; } @@ -57,19 +78,19 @@ public class VisualizationLinkJumpTargetViewInfo implements Serializable { this.sourceFieldActiveId = sourceFieldActiveId; } - public Long getTargetViewId() { + public String getTargetViewId() { return targetViewId; } - public void setTargetViewId(Long targetViewId) { + public void setTargetViewId(String targetViewId) { this.targetViewId = targetViewId; } - public Long getTargetFieldId() { + public String getTargetFieldId() { return targetFieldId; } - public void setTargetFieldId(Long targetFieldId) { + public void setTargetFieldId(String targetFieldId) { this.targetFieldId = targetFieldId; } @@ -89,6 +110,14 @@ public class VisualizationLinkJumpTargetViewInfo implements Serializable { this.copyId = copyId; } + public String getTargetType() { + return targetType; + } + + public void setTargetType(String targetType) { + this.targetType = targetType; + } + @Override public String toString() { return "VisualizationLinkJumpTargetViewInfo{" + @@ -99,6 +128,7 @@ public class VisualizationLinkJumpTargetViewInfo implements Serializable { ", targetFieldId = " + targetFieldId + ", copyFrom = " + copyFrom + ", copyId = " + copyId + + ", targetType = " + targetType + "}"; } } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/mapper/VisualizationLinkJumpTargetViewInfoMapper.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/mapper/VisualizationLinkJumpTargetViewInfoMapper.java index c4c21b4252..df62b642f8 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/mapper/VisualizationLinkJumpTargetViewInfoMapper.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/mapper/VisualizationLinkJumpTargetViewInfoMapper.java @@ -6,11 +6,11 @@ import org.apache.ibatis.annotations.Mapper; /** *

- * Mapper 接口 + * 跳转目标仪表板图表字段配置表 Mapper 接口 *

* * @author fit2cloud - * @since 2023-09-22 + * @since 2024-11-20 */ @Mapper public interface VisualizationLinkJumpTargetViewInfoMapper extends BaseMapper { diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/ext/mapper/ExtVisualizationLinkJumpMapper.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/ext/mapper/ExtVisualizationLinkJumpMapper.java index e28e305771..cfb906119a 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/dao/ext/mapper/ExtVisualizationLinkJumpMapper.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/ext/mapper/ExtVisualizationLinkJumpMapper.java @@ -4,6 +4,7 @@ import io.dataease.api.visualization.dto.VisualizationLinkJumpDTO; import io.dataease.api.visualization.request.VisualizationLinkJumpBaseRequest; import io.dataease.api.visualization.vo.VisualizationLinkJumpInfoVO; import io.dataease.api.visualization.vo.VisualizationLinkJumpVO; +import io.dataease.api.visualization.vo.VisualizationOutParamsJumpVO; import io.dataease.api.visualization.vo.VisualizationViewTableVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -36,6 +37,10 @@ public interface ExtVisualizationLinkJumpMapper { void copyLinkJumpTarget(@Param("copyId")Long copyId); List findLinkJumpWithDvId(@Param("dvId")Long dvId); + List findLinkJumpInfoWithDvId(@Param("dvId")Long dvId); + List getViewTableDetails(@Param("dvId")Long dvId); + + List queryOutParamsTargetWithDvId(@Param("dvId")Long dvId); } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationLinkJumpService.java b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationLinkJumpService.java index ecd35afbfb..c5caa5c3a9 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationLinkJumpService.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationLinkJumpService.java @@ -6,6 +6,7 @@ import io.dataease.api.visualization.dto.VisualizationLinkJumpDTO; import io.dataease.api.visualization.dto.VisualizationLinkJumpInfoDTO; import io.dataease.api.visualization.request.VisualizationLinkJumpBaseRequest; import io.dataease.api.visualization.response.VisualizationLinkJumpBaseResponse; +import io.dataease.api.visualization.vo.VisualizationOutParamsJumpVO; import io.dataease.api.visualization.vo.VisualizationViewTableVO; import io.dataease.auth.DeLinkPermit; import io.dataease.chart.dao.auto.entity.CoreChartView; @@ -148,15 +149,18 @@ public class VisualizationLinkJumpService implements VisualizationLinkJumpApi { public VisualizationComponentDTO viewTableDetailList(Long dvId) { DataVisualizationInfo dvInfo = dataVisualizationInfoMapper.selectById(dvId); List result; + List outParamsJumpInfo; String componentData; if (dvInfo != null) { result = extVisualizationLinkJumpMapper.getViewTableDetails(dvId).stream().filter(viewTableInfo -> dvInfo.getComponentData().indexOf(viewTableInfo.getId().toString()) > -1).collect(Collectors.toList()); componentData = dvInfo.getComponentData(); + outParamsJumpInfo = extVisualizationLinkJumpMapper.queryOutParamsTargetWithDvId(dvId); } else { result = new ArrayList<>(); + outParamsJumpInfo = new ArrayList<>(); componentData = "[]"; } - return new VisualizationComponentDTO(componentData,result); + return new VisualizationComponentDTO(componentData,result,outParamsJumpInfo); } diff --git a/core/core-backend/src/main/resources/db/desktop/V2.10.3__ddl.sql b/core/core-backend/src/main/resources/db/desktop/V2.10.3__ddl.sql index cc6baf37a9..e6dfa3b613 100644 --- a/core/core-backend/src/main/resources/db/desktop/V2.10.3__ddl.sql +++ b/core/core-backend/src/main/resources/db/desktop/V2.10.3__ddl.sql @@ -6,3 +6,10 @@ VALUES (1048232869488627720, 'basic.defaultOpen', '1', 'text', 14); ALTER TABLE `data_visualization_info` ADD COLUMN `content_id` varchar(50) NULL DEFAULT '0' COMMENT '内容标识'; + +ALTER TABLE `visualization_link_jump_target_view_info` + ADD COLUMN `target_type` varchar(50) NULL COMMENT '联动目标类型 view 图表 filter 过滤组件 outParams 外部参数'; + +ALTER TABLE `visualization_link_jump_target_view_info` + MODIFY COLUMN `target_view_id` varchar(50) NULL DEFAULT NULL COMMENT '目标图表ID' AFTER `source_field_active_id`, + MODIFY COLUMN `target_field_id` varchar(50) NULL DEFAULT NULL COMMENT '目标字段ID' AFTER `target_view_id`; \ No newline at end of file diff --git a/core/core-backend/src/main/resources/db/migration/V2.10.3__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.10.3__ddl.sql index 3d94fb7d57..f698e86f90 100644 --- a/core/core-backend/src/main/resources/db/migration/V2.10.3__ddl.sql +++ b/core/core-backend/src/main/resources/db/migration/V2.10.3__ddl.sql @@ -10,3 +10,10 @@ UPDATE `xpack_setting_authentication` set `synced` = 0 where `name` = 'oidc' or ALTER TABLE `data_visualization_info` ADD COLUMN `content_id` varchar(50) NULL DEFAULT '0' COMMENT '内容标识'; + +ALTER TABLE `visualization_link_jump_target_view_info` + ADD COLUMN `target_type` varchar(50) NULL DEFAULT 'view' COMMENT '联动目标类型 view 图表 filter 过滤组件 outParams 外部参数'; + +ALTER TABLE `visualization_link_jump_target_view_info` + MODIFY COLUMN `target_view_id` varchar(50) NULL DEFAULT NULL COMMENT '目标图表ID' AFTER `source_field_active_id`, + MODIFY COLUMN `target_field_id` varchar(50) NULL DEFAULT NULL COMMENT '目标字段ID' AFTER `target_view_id`; \ No newline at end of file diff --git a/core/core-backend/src/main/resources/mybatis/ExtVisualizationLinkJumpMapper.xml b/core/core-backend/src/main/resources/mybatis/ExtVisualizationLinkJumpMapper.xml index acfa2d8f7a..c4e79bf0f7 100644 --- a/core/core-backend/src/main/resources/mybatis/ExtVisualizationLinkJumpMapper.xml +++ b/core/core-backend/src/main/resources/mybatis/ExtVisualizationLinkJumpMapper.xml @@ -155,6 +155,19 @@ WHERE core_chart_view.id = #{viewId} + + DELETE ljtv diff --git a/core/core-frontend/src/components/icon-group/chart-list.ts b/core/core-frontend/src/components/icon-group/chart-list.ts index fd28cbf6bb..62d5e92047 100644 --- a/core/core-frontend/src/components/icon-group/chart-list.ts +++ b/core/core-frontend/src/components/icon-group/chart-list.ts @@ -43,6 +43,8 @@ import waterfall from '@/assets/svg/waterfall.svg' import wordCloud from '@/assets/svg/word-cloud.svg' import tHeatmap from '@/assets/svg/t-heatmap.svg' import pictureGroup from '@/assets/svg/picture-group.svg' +import filter from '@/assets/svg/filter.svg' +import outerParams from '@/assets/svg/icon_params_setting.svg' const iconChartMap = { 'area-stack': areaStack, @@ -89,7 +91,9 @@ const iconChartMap = { waterfall: waterfall, 'word-cloud': wordCloud, 't-heatmap': tHeatmap, - 'picture-group': pictureGroup + 'picture-group': pictureGroup, + filter: filter, + outerParams: outerParams } export { iconChartMap } diff --git a/core/core-frontend/src/components/visualization/LinkJumpSet.vue b/core/core-frontend/src/components/visualization/LinkJumpSet.vue index 53ababdb87..8f81af6238 100644 --- a/core/core-frontend/src/components/visualization/LinkJumpSet.vue +++ b/core/core-frontend/src/components/visualization/LinkJumpSet.vue @@ -196,141 +196,261 @@ - - - 源字段 - - - {{ t('visualization.link_view_field') }} - - - - -
- -
-
- - - - - {{ - curViewField.name - }} - - - -
-
- -
-
- - - - - {{ - item.title - }} - - - -
-
- - - - - {{ - viewField.name - }} - - - -
- - - - - - -
-
- - {{ t('visualization.add_jump_field') }} - +
+ + + +
+ + @@ -470,6 +590,7 @@ const resourceType = computed(() => ) const state = reactive({ + activeCollapse: 'view', loading: false, showSelected: false, curJumpViewInfo: {}, @@ -526,7 +647,8 @@ const state = reactive({ quotaList: [], quotaData: [], dimension: [], - quota: [] + quota: [], + currentOutParams: [] }) const outerContentEditor = ref(null) @@ -705,6 +827,17 @@ const getPanelViewList = dvId => { state.viewIdFieldArrayMap[view.id] = view.tableFields }) } + // 外部参数 currentLinkPanelViewArray 也加入 + // 在图表侧进行隐藏 保存的时候直接保存currentLinkPanelViewArray 方便处理 + state.currentOutParams = rsp.data.outParamsJumpInfo || [] + if (state.currentOutParams && state.currentOutParams.length > 0) { + state.currentOutParams.forEach(outerParamsItem => { + state.currentLinkPanelViewArray.push(outerParamsItem) + state.viewIdFieldArrayMap[outerParamsItem.id] = [ + { id: '1000001', name: t('visualization.out_params_no_select') } + ] + }) + } // 增加过滤组件匹配 JSON.parse(rsp.data.bashComponentData).forEach(componentItem => { if (componentItem.component === 'VQuery') { @@ -723,6 +856,7 @@ const getPanelViewList = dvId => { }) }) } + const dvNodeClick = data => { if (data.leaf) { state.linkJumpInfo.targetViewInfoList = [] @@ -736,6 +870,11 @@ const addLinkJumpField = () => { targetFieldId: '' }) } + +const deleteLinkJumpFieldById = index => { + state.linkJumpInfo.targetViewInfoList.splice(index, 1) +} + const deleteLinkJumpField = index => { state.linkJumpInfo.targetViewInfoList.splice(index, 1) } @@ -1244,4 +1383,42 @@ span { display: flex; align-items: center; } + +.jump-com-list { + width: 100%; + margin-top: -18px; + :deep(.ed-collapse) { + --ed-collapse-header-font-size: 14px; + --ed-collapse-content-font-size: 14px; + } + :deep(.ed-tabs__active-bar) { + height: 2px; + } + + & > :deep(.ed-tabs) { + --ed-tabs-header-height: 36px; + margin-bottom: 12px; + position: sticky; + background: #fff; + .ed-tabs__header { + &::before { + content: ''; + width: 8px; + height: 1px; + position: absolute; + bottom: 0; + left: 0; + background: #1f232926; + } + } + } + + :deep(.ed-tabs__item) { + font-size: 14px; + } + + :deep(.ed-tabs__item):not(.is-active) { + color: #646a73; + } +} diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index fe8c302a12..7527c950e5 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -2672,6 +2672,7 @@ export default { column_name: '字段名称' }, visualization: { + out_params_no_select: '外部参数无需选择', filter_no_select: '过滤组件无需选择', forbidden_copy: '当前组件不允许复制', url_check_error: '跳转错误,URL不合法', diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/dto/VisualizationComponentDTO.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/dto/VisualizationComponentDTO.java index 41814fc877..14fcfd3757 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/dto/VisualizationComponentDTO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/dto/VisualizationComponentDTO.java @@ -1,5 +1,6 @@ package io.dataease.api.visualization.dto; +import io.dataease.api.visualization.vo.VisualizationOutParamsJumpVO; import io.dataease.api.visualization.vo.VisualizationViewTableVO; import lombok.AllArgsConstructor; import lombok.Data; @@ -20,4 +21,6 @@ public class VisualizationComponentDTO { List visualizationViewTables; + List outParamsJumpInfo; + } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java index f9c308bf43..bc78f82fc5 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java @@ -19,12 +19,15 @@ public class VisualizationLinkJumpTargetViewInfoVO { */ @JsonSerialize(using = ToStringSerializer.class) private Long sourceFieldActiveId; - @JsonSerialize(using = ToStringSerializer.class) - private Long targetViewId; - @JsonSerialize(using = ToStringSerializer.class) - private Long targetFieldId; + private String targetViewId; + private String targetFieldId; @JsonSerialize(using = ToStringSerializer.class) private Long copyFrom; @JsonSerialize(using = ToStringSerializer.class) private Long copyId; + + /** + * 联动目标类型 view 图表 filter 过滤组件 outParams 外部参数 + */ + private String targetType; } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOutParamsJumpVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOutParamsJumpVO.java new file mode 100644 index 0000000000..f323b810fc --- /dev/null +++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOutParamsJumpVO.java @@ -0,0 +1,15 @@ +package io.dataease.api.visualization.vo; + +import lombok.Data; + +@Data +public class VisualizationOutParamsJumpVO { + + private String id; + + private String type; + + private String name; + + private String title; +}