diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkJumpMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkJumpMapper.xml index 7b0a7ba4ef..28c55e4479 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkJumpMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelLinkJumpMapper.xml @@ -12,6 +12,7 @@ + @@ -35,6 +36,7 @@ panel_link_jump_info.jump_type, panel_link_jump_info.target_panel_id, panel_link_jump_info.content, + panel_link_mapping.id as publicJumpId, ifnull( panel_link_jump_info.checked, 0 ) AS checked, panel_link_jump_target_view_info.target_view_id, panel_link_jump_target_view_info.target_field_id @@ -45,6 +47,7 @@ LEFT JOIN panel_link_jump_info ON panel_link_jump.id = panel_link_jump_info.link_jump_id AND dataset_table_field.id = panel_link_jump_info.source_field_id LEFT JOIN panel_link_jump_target_view_info ON panel_link_jump_info.id = panel_link_jump_target_view_info.link_jump_info_id + LEFT JOIN panel_link_mapping on panel_link_jump_info.target_panel_id = panel_link_mapping.resource_id WHERE chart_view.id =#{source_view_id} ORDER BY diff --git a/backend/src/main/java/io/dataease/dto/panel/linkJump/PanelLinkJumpInfoDTO.java b/backend/src/main/java/io/dataease/dto/panel/linkJump/PanelLinkJumpInfoDTO.java index dc60b16914..b03c8ceac6 100644 --- a/backend/src/main/java/io/dataease/dto/panel/linkJump/PanelLinkJumpInfoDTO.java +++ b/backend/src/main/java/io/dataease/dto/panel/linkJump/PanelLinkJumpInfoDTO.java @@ -19,6 +19,9 @@ public class PanelLinkJumpInfoDTO extends PanelLinkJumpInfo { private String sourceJumpInfo; + //存在公共链接的目标仪表板 + private String publicJumpId; + private List targetViewInfoList=new ArrayList<>();// linkType = inner 时使用 diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 395598d620..37838d15c6 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -208,6 +208,13 @@ public class ChartViewService { }.getType()); List drill = new Gson().fromJson(view.getDrillFields(), new TypeToken>() { }.getType()); + // 获取对应数据集行权限 + DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build(); + List fields = dataSetTableFieldsService.list(datasetTableFieldObj); + DatasetTable datasetTable = dataSetTableService.get(view.getTableId()); + List permissionFields = dataSetTableService.getCustomFilters(fields, datasetTable); + fieldCustomFilter.addAll(permissionFields); + for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) { ele.setField(dataSetTableFieldsService.get(ele.getId())); } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index cb482572fc..cce327dcef 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -21,6 +21,7 @@ import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.dataset.DataSetTaskRequest; import io.dataease.controller.request.datasource.DatasourceRequest; import io.dataease.controller.response.DataSetDetail; +import io.dataease.dto.chart.ChartCustomFilterItemDTO; import io.dataease.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.dto.dataset.*; import io.dataease.dto.dataset.union.UnionDTO; @@ -471,15 +472,19 @@ public class DataSetTableService { public List getCustomFilters(List fields, DatasetTable datasetTable) { List customFilter = new ArrayList<>(); rowPermissions(datasetTable.getId()).forEach(datasetRowPermissions -> { - List lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartFieldCustomFilterDTO.class); + List lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class); + ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO(); + DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId()); lists.forEach(chartCustomFilterDTO -> { - DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId()); - if (field != null) { - chartCustomFilterDTO.setId(datasetRowPermissions.getDatasetFieldId()); - chartCustomFilterDTO.setField(field); - } + chartCustomFilterDTO.setFieldId(field.getId()); }); - customFilter.addAll(lists); + if (field != null) { + dto.setFilter(lists); + dto.setField(field); + dto.setId(field.getId()); + dto.setLogic("and"); + customFilter.add(dto); + } }); return customFilter; } diff --git a/frontend/src/components/canvas/components/Editor/EditBarView.vue b/frontend/src/components/canvas/components/Editor/EditBarView.vue index b7d9f1806b..9f03b0daba 100644 --- a/frontend/src/components/canvas/components/Editor/EditBarView.vue +++ b/frontend/src/components/canvas/components/Editor/EditBarView.vue @@ -40,7 +40,9 @@ export default { }, computed: { ...mapState([ - 'linkageSettingStatus' + 'linkageSettingStatus', + 'componentData', + 'canvasStyleData' ]) }, mounted() { diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue index 3818b04ebd..a4775a72e3 100644 --- a/frontend/src/components/canvas/custom-component/UserView.vue +++ b/frontend/src/components/canvas/custom-component/UserView.vue @@ -208,7 +208,8 @@ export default { ...mapState([ 'canvasStyleData', 'nowPanelTrackInfo', - 'nowPanelJumpInfo' + 'nowPanelJumpInfo', + 'publicLinkStatus' ]) }, @@ -399,9 +400,23 @@ export default { // 内部仪表板跳转 if (jumpInfo.linkType === 'inner') { if (jumpInfo.targetPanelId) { - const url = '#/preview/' + jumpInfo.targetPanelId localStorage.setItem('jumpInfoParam', JSON.stringify(param)) - window.open(url, jumpInfo.jumpType) + if (this.publicLinkStatus) { + // 判断是否有公共链接ID + if (jumpInfo.publicJumpId) { + const url = '/link/' + jumpInfo.publicJumpId + window.open(url, jumpInfo.jumpType) + } else { + this.$message({ + type: 'warn', + message: '当前是公共链接模式,目标仪表板未设置公共链接,无法跳转', + showClose: true + }) + } + } else { + const url = '#/preview/' + jumpInfo.targetPanelId + window.open(url, jumpInfo.jumpType) + } } else { this.$message({ type: 'warn', diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 7eeadb1c1b..b82b4c4f39 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -79,6 +79,8 @@ const data = { componentGap: 5, // 移动端布局状态 mobileLayoutStatus: false, + // 公共链接状态(当前是否是公共链接打开) + publicLinkStatus: false, pcMatrixCount: { x: 36, y: 18 @@ -326,6 +328,9 @@ const data = { setMobileLayoutStatus(state, status) { state.mobileLayoutStatus = status }, + setPublicLinkStatus(state, status) { + state.publicLinkStatus = status + }, // 启用移动端布局 openMobileLayout(state) { state.componentDataCache = JSON.stringify(state.componentData) diff --git a/frontend/src/views/link/index.vue b/frontend/src/views/link/index.vue index 37f46ce781..e01b5db629 100644 --- a/frontend/src/views/link/index.vue +++ b/frontend/src/views/link/index.vue @@ -32,6 +32,7 @@ export default { methods: { loadInit() { + this.$store.commit('setPublicLinkStatus', true) debugger // this.link = getQueryVariable(this.PARAMKEY) this.link = this.$route.query.link diff --git a/frontend/src/views/link/view/index.vue b/frontend/src/views/link/view/index.vue index c60ff4aee0..3a9c2b95f0 100644 --- a/frontend/src/views/link/view/index.vue +++ b/frontend/src/views/link/view/index.vue @@ -9,7 +9,7 @@ import { loadResource } from '@/api/link' import { uuid } from 'vue-uuid' import Preview from '@/components/canvas/components/Editor/Preview' import { getPanelAllLinkageInfo } from '@/api/panel/linkage' -import { queryPanelJumpInfo } from '@/api/panel/linkJump' +import { queryPanelJumpInfo, queryTargetPanelJumpInfo } from '@/api/panel/linkJump' export default { name: 'LinkView', @@ -43,7 +43,27 @@ export default { queryPanelJumpInfo(this.resourceId).then(rsp => { this.$store.commit('setNowPanelJumpInfo', rsp.data) }) - this.show = true + // 如果含有跳转参数 进行触发 + const tempParam = localStorage.getItem('jumpInfoParam') + if (tempParam) { + localStorage.removeItem('jumpInfoParam') + const jumpParam = JSON.parse(tempParam) + const jumpRequestParam = { + sourcePanelId: jumpParam.sourcePanelId, + sourceViewId: jumpParam.sourceViewId, + sourceFieldId: jumpParam.sourceFieldId, + targetPanelId: this.panelId + } + this.show = false + // 刷新跳转目标仪表板联动信息 + queryTargetPanelJumpInfo(jumpRequestParam).then(rsp => { + this.show = true + this.$store.commit('setNowTargetPanelJumpInfo', rsp.data) + this.$store.commit('addViewTrackFilter', jumpParam) + }) + } else { + this.show = true + } }) }, resetID(data) {