diff --git a/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java b/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java index 51d5cc3c74..b593df605b 100644 --- a/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/chart/ChartExtRequest.java @@ -5,6 +5,7 @@ import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; + import java.util.List; /** @@ -48,4 +49,6 @@ public class ChartExtRequest { private Long pageSize; + private Boolean excelExportFlag = false; + } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelViewDetailsRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelViewDetailsRequest.java index dc2293f938..41e3c09e0b 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelViewDetailsRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelViewDetailsRequest.java @@ -1,5 +1,6 @@ package io.dataease.controller.request.panel; +import io.dataease.controller.request.chart.ChartExtRequest; import lombok.Data; import java.util.List; @@ -30,4 +31,8 @@ public class PanelViewDetailsRequest { private ViewDetailField[] detailFields; + private ChartExtRequest componentFilterInfo; + + private List excelHeaderKeys; + } 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 2cb580c952..582eae1a61 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -526,7 +526,8 @@ public class ChartViewService { } } List xAxisForRequest = new ArrayList<>(); - xAxisForRequest.addAll(xAxis); xAxisForRequest.addAll(extStack); + xAxisForRequest.addAll(xAxis); + xAxisForRequest.addAll(extStack); datasourceRequest.setXAxis(xAxisForRequest); data = datasourceProvider.getData(datasourceRequest); } else if (table.getMode() == 1) {// 抽取 @@ -655,7 +656,7 @@ public class ChartViewService { Map mapAttr = gson.fromJson(view.getCustomAttr(), Map.class); Map mapSize = (Map) mapAttr.get("size"); if (StringUtils.equalsIgnoreCase(view.getType(), "table-info") && table.getMode() == 0) { - if (StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { + if (StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page") && !chartExtRequest.getExcelExportFlag()) { if (chartExtRequest.getGoPage() == null) { chartExtRequest.setGoPage(1L); } @@ -1043,7 +1044,8 @@ public class ChartViewService { datasourceRequest.setQuery(querySql); List xAxisForRequest = new ArrayList<>(); - xAxisForRequest.addAll(xAxis); xAxisForRequest.addAll(extStack); + xAxisForRequest.addAll(xAxis); + xAxisForRequest.addAll(extStack); datasourceRequest.setXAxis(xAxisForRequest); data = datasourceProvider.getData(datasourceRequest); if (CollectionUtils.isNotEmpty(assistFields)) { 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 288ecffe74..3aac71fbe5 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -10,6 +10,7 @@ import io.dataease.auth.api.dto.CurrentUserDto; import io.dataease.commons.constants.*; import io.dataease.commons.utils.*; import io.dataease.controller.request.authModel.VAuthModelRequest; +import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.panel.*; import io.dataease.dto.DatasourceDTO; @@ -652,6 +653,7 @@ public class PanelGroupService { public void exportPanelViewDetails(PanelViewDetailsRequest request, HttpServletResponse response) throws IOException { OutputStream outputStream = response.getOutputStream(); try { + findExcelData(request); String snapshot = request.getSnapshot(); List details = request.getDetails(); Integer[] excelTypes = request.getExcelTypes(); @@ -1089,6 +1091,32 @@ public class PanelGroupService { request.setUpdateTime(time); request.setUpdateBy(AuthUtils.getUser().getUsername()); panelGroupMapper.updateByPrimaryKeySelective(request); + } + + public void findExcelData(PanelViewDetailsRequest request) { + ChartViewWithBLOBs viewInfo = chartViewService.get(request.getViewId()); + if ("table-info".equals(viewInfo.getType())) { + try { + List excelHeaderKeys = request.getExcelHeaderKeys(); + ChartExtRequest componentFilterInfo = request.getComponentFilterInfo(); + componentFilterInfo.setGoPage(1l); + componentFilterInfo.setPageSize(1000000l); + componentFilterInfo.setExcelExportFlag(true); + ChartViewDTO chartViewInfo = chartViewService.getData(request.getViewId(), componentFilterInfo); + List tableRow = (List) chartViewInfo.getData().get("tableRow"); + List result = new ArrayList<>(); + for (Map detailMap : tableRow) { + List detailObj = new ArrayList<>(); + for (String key : excelHeaderKeys) { + detailObj.add(detailMap.get(key)); + } + result.add(detailObj.toArray()); + } + request.setDetails(result); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } } diff --git a/frontend/src/components/canvas/customComponent/UserView.vue b/frontend/src/components/canvas/customComponent/UserView.vue index ea90bbee57..74d5ca469e 100644 --- a/frontend/src/components/canvas/customComponent/UserView.vue +++ b/frontend/src/components/canvas/customComponent/UserView.vue @@ -770,6 +770,9 @@ export default { if (response.success) { this.chart = response.data this.view = response.data + if (this.chart.type.includes('table')) { + this.$store.commit('setLastViewRequestInfo', { viewId: id, requestInfo: requestInfo }) + } this.buildInnerRefreshTimer(this.chart.refreshViewEnable, this.chart.refreshUnit, this.chart.refreshTime) this.$emit('fill-chart-2-parent', this.chart) this.getDataOnly(response.data, dataBroadcast) diff --git a/frontend/src/components/canvas/customComponent/UserViewDialog.vue b/frontend/src/components/canvas/customComponent/UserViewDialog.vue index a61588c35e..a3a4d023ce 100644 --- a/frontend/src/components/canvas/customComponent/UserViewDialog.vue +++ b/frontend/src/components/canvas/customComponent/UserViewDialog.vue @@ -87,9 +87,20 @@ import html2canvas from 'html2canvasde' import { hexColorToRGBA } from '@/views/chart/chart/util' import { deepCopy, exportImg, imgUrlTrans } from '@/components/canvas/utils/utils' import { getLinkToken, getToken } from '@/utils/auth' + export default { name: 'UserViewDialog', - components: { LabelNormalText, ChartComponentS2, ChartComponentG2, DeMainContainer, DeContainer, ChartComponent, TableNormal, LabelNormal, PluginCom }, + components: { + LabelNormalText, + ChartComponentS2, + ChartComponentG2, + DeMainContainer, + DeContainer, + ChartComponent, + TableNormal, + LabelNormal, + PluginCom + }, props: { chart: { type: Object, @@ -123,8 +134,7 @@ export default { return this.chart.type === 'table-normal' || this.chart.type === 'table-info' }, customStyle() { - let style = { - } + let style = {} if (this.canvasStyleData.openCommonStyle) { if (this.canvasStyleData.panel.backgroundType === 'image' && this.canvasStyleData.panel.imageUrl) { style = { @@ -186,7 +196,8 @@ export default { 'isClickComponent', 'curComponent', 'componentData', - 'canvasStyleData' + 'canvasStyleData', + 'lastViewRequestInfo' ]), mapChart() { if (this.chart.type && (this.chart.type === 'map' || this.chart.type === 'buddle-map')) { @@ -211,7 +222,7 @@ export default { } }) } - const result = { ...temp, ...{ DetailAreaCode: DetailAreaCode }} + const result = { ...temp, ...{ DetailAreaCode: DetailAreaCode } } this.setLastMapChart(result) return result } @@ -285,6 +296,8 @@ export default { snapshot: snapshot, snapshotWidth: width, snapshotHeight: height, + componentFilterInfo: this.lastViewRequestInfo[this.chart.id], + excelHeaderKeys: excelHeaderKeys, detailFields } let method = innerExportDetails @@ -313,43 +326,49 @@ export default { diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index 72622c1890..1b8bed91f8 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -152,7 +152,8 @@ const data = { }, previewVisible: false, previewComponentData: [], - currentCanvasNewId: [] + currentCanvasNewId: [], + lastViewRequestInfo: {} }, mutations: { ...animation.mutations, @@ -610,6 +611,9 @@ const data = { resetViewEditInfo(state) { state.panelViewEditInfo = {} }, + setLastViewRequestInfo(state, viewRequestInfo) { + state.lastViewRequestInfo[viewRequestInfo.viewId] = viewRequestInfo.requestInfo + }, removeCurBatchComponentWithId(state, id) { for (let index = 0; index < state.curBatchOptComponents.length; index++) { const element = state.curBatchOptComponents[index]