diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml index 22ecb27697..648812794f 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.xml @@ -126,11 +126,11 @@ `chart_type`, `senior`) SELECT #{newChartId}, - GET_CHART_VIEW_COPY_NAME(#{oldChartId}), + `name`, #{panelId}, `table_id`, `type`, - GET_CHART_VIEW_COPY_NAME(#{oldChartId}), + `title`, `x_axis`, `x_axis_ext`, `y_axis`, @@ -151,7 +151,7 @@ `result_mode`, 'private', `senior` - FROM chart_view + FROM chart_view_cache WHERE id = #{oldChartId} @@ -293,8 +293,7 @@ - DELETE cvc, - pv + DELETE cvc FROM chart_view_cache cvc INNER JOIN panel_view pv ON cvc.id = pv.chart_view_id diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java index a0ea1417e8..000f0fe2a3 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.java @@ -15,12 +15,16 @@ public interface ExtPanelGroupMapper { //会级联删除pid 下的所有数据 int deleteCircle(@Param("pid") String pid); + int deleteCircleView(@Param("pid") String pid); + + int deleteCircleViewCache(@Param("pid") String pid); + PanelGroupDTO findOneWithPrivileges(@Param("panelId") String panelId,@Param("userId") String userId); void copyPanelView(@Param("pid") String panelId); //移除未使用的视图 - void removeUselessViews(@Param("panelId") String panelId); + void removeUselessViews(@Param("panelId") String panelId,@Param("viewIds") List viewIds); List panelGroupInit(); diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml index 07d97f2935..cf0db400c8 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtPanelGroupMapper.xml @@ -171,6 +171,14 @@ delete from panel_group where FIND_IN_SET(panel_group.id,GET_PANEL_GROUP_WITH_CHILDREN(#{pid})) or FIND_IN_SET(panel_group.source,GET_PANEL_GROUP_WITH_CHILDREN(#{pid})) + + delete from chart_view where FIND_IN_SET(chart_view.scene_id,GET_PANEL_GROUP_WITH_CHILDREN(#{pid})) + + + + delete from chart_view_cache where FIND_IN_SET(chart_view_cache.scene_id,GET_PANEL_GROUP_WITH_CHILDREN(#{pid})) + + INSERT INTO panel_view ( id, panel_id, chart_view_id ) SELECT uuid(), @@ -189,14 +197,13 @@ WHERE chart_view.chart_type = 'private' AND chart_view.scene_id = #{panelId} - AND id NOT IN ( - SELECT - panel_view.chart_view_id - FROM - panel_view - WHERE - panel_view.panel_id = #{panelId} - ) + + AND id NOT IN + + #{viewId} + + + 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 f81c1b5396..76924fd0c2 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -39,6 +39,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -98,7 +99,6 @@ public class ChartViewService { chartView.setCreateTime(timestamp); chartView.setUpdateTime(timestamp); chartViewMapper.insertSelective(chartView); - // 新建的视图也存入缓存表中 extChartViewMapper.copyToCache(chartView.getId()); @@ -221,6 +221,7 @@ public class ChartViewService { return extChartViewMapper.searchOneWithPrivileges(userId, id); } + @Transactional public ChartViewDTO getOne(String id,String queryFrom){ ChartViewDTO result; //仪表板编辑页面 从缓存表中取数据 缓存表中没有数据则进行插入 @@ -1742,6 +1743,7 @@ public class ChartViewService { public String chartCopy(String id, String panelId) { String newChartId = UUID.randomUUID().toString(); extChartViewMapper.chartCopy(newChartId, id, panelId); + extChartViewMapper.copyToCache(newChartId); return newChartId; } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index aa9ce036b2..a53d283dd6 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -105,9 +105,9 @@ public class PanelGroupService { // @Transactional public PanelGroup saveOrUpdate(PanelGroupRequest request) { String panelId = request.getId(); + List viewIds = null; if(StringUtils.isNotEmpty(panelId)){ - Boolean mobileLayout = panelViewService.syncPanelViews(request); - request.setMobileLayout(mobileLayout); + viewIds = panelViewService.syncPanelViews(request); } if (StringUtils.isEmpty(panelId)) { // 新建 @@ -166,7 +166,7 @@ public class PanelGroupService { } //移除没有用到的仪表板私有视图 -// extPanelGroupMapper.removeUselessViews(panelId); + extPanelGroupMapper.removeUselessViews(panelId,viewIds); return panelGroupDTOList.get(0); } @@ -189,12 +189,18 @@ public class PanelGroupService { public void deleteCircle(String id) { Assert.notNull(id, "id cannot be null"); sysAuthService.checkTreeNoManageCount("panel", id); + + //清理view 和 view cache + extPanelGroupMapper.deleteCircleView(id); + extPanelGroupMapper.deleteCircleViewCache(id); + // 同时会删除对应默认仪表盘 extPanelGroupMapper.deleteCircle(id); storeService.removeByPanelId(id); shareService.delete(id, null); panelLinkService.deleteByResourceId(id); + //清理跳转信息 extPanelLinkJumpMapper.deleteJumpTargetViewInfoWithPanel(id); extPanelLinkJumpMapper.deleteJumpInfoWithPanel(id); diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java index 5c9e67c07f..ed54cc93c9 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewService.java @@ -84,7 +84,8 @@ public class PanelViewService { } @Transactional(propagation = Propagation.REQUIRES_NEW) - public Boolean syncPanelViews(PanelGroupWithBLOBs panelGroup) { + public List syncPanelViews(PanelGroupWithBLOBs panelGroup) { + List viewIds = new ArrayList<>(); Boolean mobileLayout = null; String panelId = panelGroup.getId(); Assert.notNull(panelId, "panelId cannot be null"); @@ -120,12 +121,13 @@ public class PanelViewService { if (CollectionUtils.isNotEmpty(panelViewInsertDTOList)) { extPanelViewMapper.savePanelView(panelViewInsertDTOList); //将视图从cache表中更新到正式表中 - List viewIds = panelViewInsertDTOList.stream().map(panelView ->panelView.getChartViewId()).collect(Collectors.toList()); + viewIds = panelViewInsertDTOList.stream().map(panelView ->panelView.getChartViewId()).collect(Collectors.toList()); extChartViewMapper.copyCacheToView(viewIds); extChartViewMapper.deleteCacheWithPanel(panelId); } } - return mobileLayout; + panelGroup.setMobileLayout(mobileLayout); + return viewIds; } public List detailList(String panelId) { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 1f9ec47efd..29471d12b8 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -1281,7 +1281,8 @@ export default { drill: false, hasEdit: false, quotaItemCompare: {}, - showEditQuotaCompare: false + showEditQuotaCompare: false, + preChartId: '' } }, @@ -1297,14 +1298,13 @@ export default { ]) }, watch: { - 'param': function() { + 'param': function(val) { if (this.param.optType === 'new') { // - } else { - this.resetDrill() - this.initFromPanel() - // this.getData(this.param.id) - this.getChart(this.param.id) + } else if (this.param.id !== this.preChartId) { + this.preChartId = this.param.id + this.chartInit() + // console.log('fromwatch:' + JSON.stringify(val)) } }, searchField(val) { @@ -1323,12 +1323,11 @@ export default { // this.initAreas() }, mounted() { + debugger this.bindPluginEvent() - // this.get(this.$store.state.chart.viewId); - // this.getData(this.param.id) - // this.getChart(this.param.id) - // this.myEcharts(); this.initFromPanel() + this.chartInit() + // console.log('mounted') }, activated() { }, @@ -1337,6 +1336,11 @@ export default { initFromPanel() { this.hasEdit = (this.panelViewEditInfo[this.param.id] || false) }, + chartInit() { + this.resetDrill() + this.initFromPanel() + this.getChart(this.param.id) + }, bindPluginEvent() { bus.$on('show-dimension-edit-filter', this.showDimensionEditFilter) bus.$on('show-rename', this.showRename) diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index 3ef421f8a6..084cf2a8a7 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -225,9 +225,9 @@ -
+
- +
@@ -562,6 +562,7 @@ export default { this.$store.commit('resetViewEditInfo') }, mounted() { + debugger // this.insertToBody() bus.$on('component-on-drag', () => { this.show = false @@ -618,6 +619,10 @@ export default { initPanelData(panelId, function() { // 初始化视图缓存 initViewCache(panelId) + // 初始化保存状态 + setTimeout(() => { + _this.$store.commit('refreshSaveStatus') + }, 500) // initPanelComponentsData(panelId, function(rsp) { // _this.$store.commit('initPanelComponents', rsp)// 初始化仪表板组件视图数据 // _this.$store.commit('recordSnapshot', 'init')// 记录快照