diff --git a/nezha-fronted/src/components/charts/chart-list.vue b/nezha-fronted/src/components/charts/chart-list.vue
index 8d4411dde..0a8c33f86 100644
--- a/nezha-fronted/src/components/charts/chart-list.vue
+++ b/nezha-fronted/src/components/charts/chart-list.vue
@@ -89,6 +89,7 @@
:ref="'editChart'+item.id"
@on-refresh-data="refreshChart"
@on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
@on-drag-chart="editChartForDrag"
@on-edit-chart-block="editData"
:panel-id="filter.panelId"
@@ -99,6 +100,7 @@
@on-refresh-data="refreshChart"
@on-search-data="searchData"
@on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
@on-drag-chart="editChartForDrag"
@on-edit-chart-block="editData"
:panel-id="filter.panelId"
@@ -109,6 +111,7 @@
@on-refresh-data="refreshChart"
@on-search-data="searchData"
@on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
@on-drag-chart="editChartForDrag"
@on-edit-chart-block="editData"
:panel-id="filter.panelId"
@@ -119,6 +122,7 @@
@on-refresh-data="refreshChart"
@on-search-data="searchData"
@on-remove-chart-block="removeChart"
+ @on-duplicate-chart-block="duplicateChart"
@on-drag-chart="editChartForDrag"
@on-edit-chart-block="editData"
:panel-id="filter.panelId"
@@ -1062,6 +1066,67 @@ export default {
this.$emit('on-remove-chart', chart);
}
},
+ //复制图表
+ duplicateChart(chartId,duplicateChartBack){
+ let duplicateChartId = duplicateChartBack.id;
+ let chart;
+ let chartIndex = -1;
+ this.dataList.forEach((item,index)=>{
+ if(item.id===chartId){
+ chartIndex = index;
+ chart = item;
+ }
+ });
+ let chartNext;
+ let chartNextIndex = chartIndex+1;
+ if(chartNextIndex<=(this.dataList.length-1)){
+ chartNext = this.dataList[chartNextIndex];
+ }
+
+ if (chart) {
+ chart.next = duplicateChartId;
+ let duplicateChart = JSON.parse(JSON.stringify(chart));
+ duplicateChart.id = duplicateChartId;
+ duplicateChart.prev = duplicateChartBack.prev;
+ duplicateChart.next = duplicateChartBack.next;
+ duplicateChart.title = duplicateChartBack.title;
+ if(chartNext){
+ chartNext.prev = duplicateChartId;
+ }
+
+ this.dataList.splice(chartNextIndex,0,duplicateChart);
+
+ let indexInTotal = this.dataTotalList.indexOf(chart);
+ this.dataTotalList.splice(indexInTotal+1,0,duplicateChart);
+ let chartInTotal = this.dataTotalList.find(item => item.id === chartId);
+ chartInTotal.next = duplicateChartId;
+ let chartNextInTotal = this.dataTotalList.find(item => item.id === chartNext.id);
+ chartNextInTotal.prev = chartNext.prev;
+
+ let indexInTotalBak = this.dataTotalListBak.indexOf(chart);
+ this.dataTotalListBak.splice(indexInTotalBak+1,0,duplicateChart);
+ let chartInTotalBak = this.dataTotalListBak.find(item => item.id === chartId);
+ chartInTotalBak.next = duplicateChartId;
+ let chartNextInTotalBak = this.dataTotalListBak.find(item => item.id === chartNext.id);
+ chartNextInTotalBak.prev = chartNext.prev;
+
+ this.currentRecordNum = this.currentRecordNum+1;
+ let chartData = this.chartDataCacheGroup.get(chart.id);
+ this.chartDataCacheGroup.set(duplicateChartId,chartData);
+ this.$nextTick(() => {
+ if (this.$refs['editChart'+duplicateChartId][0]) {
+ this.$refs['editChart'+duplicateChartId][0].showLoad(duplicateChart);//之后要实现
+ }
+
+ let chartType = duplicateChart.type;
+ if(chartType!=='url'){
+ this.getChartDataForSearch(duplicateChart,chartNextIndex);
+ }else {
+ this.setSize(duplicateChart.span, chartNextIndex); // 设置该图表宽度
+ }
+ });
+ }
+ },
// 编辑图表
editData(chartId) {
// 获取该id下chart的相关信息
diff --git a/nezha-fronted/src/components/charts/chart-single-stat.scss b/nezha-fronted/src/components/charts/chart-single-stat.scss
index b72d03028..4df08fc1d 100644
--- a/nezha-fronted/src/components/charts/chart-single-stat.scss
+++ b/nezha-fronted/src/components/charts/chart-single-stat.scss
@@ -20,7 +20,7 @@
visibility: visible;
}
.nz-chart-dropdown {
- height: 147px;
+ height: 180px;
li {
/*padding: 0 20px !important;*/
padding-left:15px !important;
diff --git a/nezha-fronted/src/components/charts/chart-single-stat.vue b/nezha-fronted/src/components/charts/chart-single-stat.vue
index ef3f1a6db..6322c9bea 100644
--- a/nezha-fronted/src/components/charts/chart-single-stat.vue
+++ b/nezha-fronted/src/components/charts/chart-single-stat.vue
@@ -37,6 +37,8 @@
{{$t('dashboard.delete')}}
+
@@ -344,6 +346,28 @@ export default {
},
clearChart(){
this.data = {};
+ },
+ duplicate(){
+ this.dropdownMenuShow=false;
+ const param = {id:this.data.id};
+ this.$post('panel/'+ this.data.panelId+'/charts/duplicate',(param)).then(response => {
+ if (response.code === 200) {
+ this.$message({
+ duration: 2000,
+ type: 'success',
+ message: this.$t("tip.duplicateSuccess")
+ });
+ this.$emit('on-duplicate-chart-block', this.data.id,response.data);
+ }else {
+ if(response.msg){
+ this.$message.error(response.msg);
+ }else if(response.error){
+ this.$message.error(response.error);
+ }else {
+ this.$message.error(response);
+ }
+ }
+ });
},
// 全屏查看
showAllScreen() {
diff --git a/nezha-fronted/src/components/charts/chart-table.scss b/nezha-fronted/src/components/charts/chart-table.scss
index f1a726462..30c59fef7 100644
--- a/nezha-fronted/src/components/charts/chart-table.scss
+++ b/nezha-fronted/src/components/charts/chart-table.scss
@@ -20,7 +20,7 @@
visibility: visible;
}
.nz-chart-dropdown {
- height: 147px;
+ height: 180px;
li {
/*padding: 0 20px !important;*/
padding-left:15px !important;
diff --git a/nezha-fronted/src/components/charts/chart-table.vue b/nezha-fronted/src/components/charts/chart-table.vue
index 1ad83d980..b4d5750c6 100644
--- a/nezha-fronted/src/components/charts/chart-table.vue
+++ b/nezha-fronted/src/components/charts/chart-table.vue
@@ -45,6 +45,8 @@
{{$t('dashboard.delete')}}
+
@@ -569,6 +571,28 @@ export default {
},
clearChart(){
this.data = {};
+ },
+ duplicate(){
+ this.dropdownMenuShow=false;
+ const param = {id:this.data.id};
+ this.$post('panel/'+ this.data.panelId+'/charts/duplicate',(param)).then(response => {
+ if (response.code === 200) {
+ this.$message({
+ duration: 2000,
+ type: 'success',
+ message: this.$t("tip.duplicateSuccess")
+ });
+ this.$emit('on-duplicate-chart-block', this.data.id,response.data);
+ }else {
+ if(response.msg){
+ this.$message.error(response.msg);
+ }else if(response.error){
+ this.$message.error(response.error);
+ }else {
+ this.$message.error(response);
+ }
+ }
+ });
},
// 全屏查看
showAllScreen() {
diff --git a/nezha-fronted/src/components/charts/chart-url.scss b/nezha-fronted/src/components/charts/chart-url.scss
index 4b3ea93ba..af570eeec 100644
--- a/nezha-fronted/src/components/charts/chart-url.scss
+++ b/nezha-fronted/src/components/charts/chart-url.scss
@@ -20,7 +20,7 @@
visibility: visible;
}
.nz-chart-dropdown {
- height: 147px;
+ height: 180px;
li {
/*padding: 0 20px !important;*/
padding-left:15px !important;
diff --git a/nezha-fronted/src/components/charts/chart-url.vue b/nezha-fronted/src/components/charts/chart-url.vue
index 509ae9065..335d27ebe 100644
--- a/nezha-fronted/src/components/charts/chart-url.vue
+++ b/nezha-fronted/src/components/charts/chart-url.vue
@@ -27,6 +27,8 @@
{{$t('dashboard.delete')}}
+
@@ -340,6 +342,28 @@ export default {
this.dropdownMenuShow=false;
this.screenModal = true;
},
+ duplicate(){
+ this.dropdownMenuShow=false;
+ const param = {id:this.data.id};
+ this.$post('panel/'+ this.data.panelId+'/charts/duplicate',(param)).then(response => {
+ if (response.code === 200) {
+ this.$message({
+ duration: 2000,
+ type: 'success',
+ message: this.$t("tip.duplicateSuccess")
+ });
+ this.$emit('on-duplicate-chart-block', this.data.id,response.data);
+ }else {
+ if(response.msg){
+ this.$message.error(response.msg);
+ }else if(response.error){
+ this.$message.error(response.error);
+ }else {
+ this.$message.error(response);
+ }
+ }
+ });
+ },
setLoadFrameFull(){
let that = this;
this.$nextTick(() => {
diff --git a/nezha-fronted/src/components/charts/line-chart-block.scss b/nezha-fronted/src/components/charts/line-chart-block.scss
index 96c3399ea..9ad843023 100644
--- a/nezha-fronted/src/components/charts/line-chart-block.scss
+++ b/nezha-fronted/src/components/charts/line-chart-block.scss
@@ -52,7 +52,7 @@
line-height: 20px;
}
.nz-chart-dropdown {
- height: 147px;
+ height: 180px;
li {
/*padding: 0 20px !important;*/
padding-left:15px !important;
diff --git a/nezha-fronted/src/components/charts/line-chart-block.vue b/nezha-fronted/src/components/charts/line-chart-block.vue
index 2bb4b6ccb..cc9486eb7 100644
--- a/nezha-fronted/src/components/charts/line-chart-block.vue
+++ b/nezha-fronted/src/components/charts/line-chart-block.vue
@@ -59,6 +59,8 @@
{{$t('dashboard.delete')}}
+