diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java index 190bb92296..89ae4b74d8 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtChartViewMapper.java @@ -12,6 +12,8 @@ import java.util.List; public interface ExtChartViewMapper { List search(ChartViewRequest request); + void chartCopy(@Param("newChartId")String newChartId,@Param("oldChartId")String oldChartId); + @Select("select id from chart_view where table_id = #{tableId}") List allViewIds(@Param("tableId") String tableId); } 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 13fdcb64e6..042283e2f9 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 @@ -27,4 +27,45 @@ + + + INSERT INTO chart_view ( + `id`, + `name`, + `scene_id`, + `table_id`, + `type`, + `title`, + `x_axis`, + `y_axis`, + `custom_attr`, + `custom_style`, + `custom_filter`, + `create_by`, + `create_time`, + `update_time`, + `snapshot`, + `style_priority` + ) SELECT + #{newChartId}, + GET_CHART_VIEW_COPY_NAME ( #{oldChartId} ), + `scene_id`, + `table_id`, + `type`, + `title`, + `x_axis`, + `y_axis`, + `custom_attr`, + `custom_style`, + `custom_filter`, + `create_by`, + `create_time`, + `update_time`, + `snapshot`, + `style_priority` + FROM + chart_view + WHERE + id = #{oldChartId} + diff --git a/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java b/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java index 207d64b188..7d0260887e 100644 --- a/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java +++ b/backend/src/main/java/io/dataease/controller/chart/ChartViewController.java @@ -55,4 +55,9 @@ public class ChartViewController { public Map chartDetail(@PathVariable String id) { return chartViewService.getChartDetail(id); } + + @PostMapping("chartCopy/{id}") + public String chartCopy(@PathVariable String id) { + return chartViewService.chartCopy(id); + } } 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 f358596722..256a96f3ec 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -342,4 +342,10 @@ public class ChartViewService { public ChartViewWithBLOBs findOne(String id) { return chartViewMapper.selectByPrimaryKey(id); } + + public String chartCopy(String id) { + String newChartId = UUID.randomUUID().toString(); + extChartViewMapper.chartCopy(newChartId,id); + return newChartId; + } } diff --git a/backend/src/main/resources/db/migration/V9__chart_view_copy.sql b/backend/src/main/resources/db/migration/V9__chart_view_copy.sql new file mode 100644 index 0000000000..0cbcb569c9 --- /dev/null +++ b/backend/src/main/resources/db/migration/V9__chart_view_copy.sql @@ -0,0 +1,25 @@ +DROP FUNCTION IF EXISTS `GET_CHART_VIEW_COPY_NAME`; +delimiter ;; +CREATE DEFINER=`root`@`%` FUNCTION `GET_CHART_VIEW_COPY_NAME`(chartId varchar(255)) RETURNS varchar(255) CHARSET utf8 + READS SQL DATA +BEGIN + +DECLARE chartName varchar(255); + +DECLARE pid varchar(255); + +DECLARE regexpInfo varchar(255); + +DECLARE chartNameCount INTEGER; + +select `name` ,`scene_id` into chartName, pid from chart_view where id =chartId; + +set regexpInfo = concat('^',chartName,'-copy','\\(([0-9])+\\)$'); + +select (count(1)+1) into chartNameCount from chart_view where name REGEXP regexpInfo; + +RETURN concat(chartName,'-copy(',chartNameCount,')'); + +END +;; +delimiter ; diff --git a/frontend/src/api/chart/chart.js b/frontend/src/api/chart/chart.js index ab528b0aaa..81b76ef1eb 100644 --- a/frontend/src/api/chart/chart.js +++ b/frontend/src/api/chart/chart.js @@ -27,3 +27,11 @@ export function getChartTree(data) { data }) } + +export function chartCopy(id) { + return request({ + url: '/chart/view/chartCopy/' + id, + method: 'post', + loading: true + }) +} diff --git a/frontend/src/components/canvas/components/Editor/ContextMenu.vue b/frontend/src/components/canvas/components/Editor/ContextMenu.vue index 85c189b244..bf2f0d42e0 100644 --- a/frontend/src/components/canvas/components/Editor/ContextMenu.vue +++ b/frontend/src/components/canvas/components/Editor/ContextMenu.vue @@ -4,7 +4,7 @@