From b41a52080f7b70a3190df864ba552192457b5444 Mon Sep 17 00:00:00 2001 From: junjun Date: Wed, 9 Nov 2022 16:02:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/dto/chart/ChartViewDTO.java | 1 + .../provider/query/ck/CKQueryProvider.java | 5 ++- .../query/mysql/MysqlQueryProvider.java | 9 +++-- .../service/chart/ChartViewService.java | 27 +++++++++++-- .../canvas/customComponent/UserView.vue | 39 +++++++++++++++++-- .../chart/components/ChartComponentS2.vue | 39 +++++++++++++------ .../chart/components/table/TableNormal.vue | 36 +++++++++++------ frontend/src/views/chart/view/ChartEdit.vue | 5 ++- 8 files changed, 124 insertions(+), 37 deletions(-) diff --git a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java index 923699b4c1..1b7f75132f 100644 --- a/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java +++ b/backend/src/main/java/io/dataease/dto/chart/ChartViewDTO.java @@ -44,4 +44,5 @@ public class ChartViewDTO extends ChartViewWithBLOBs { private long totalPage; private long totalItems; + private int datasetMode; } diff --git a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index cc3e7a1759..8f2c593918 100644 --- a/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -396,10 +396,11 @@ public class CKQueryProvider extends QueryProvider { @Override public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : ""); if (isTable) { - return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize(); + return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } else { - return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize(); + return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } } diff --git a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index ee7f45bc54..b02ee4ef54 100644 --- a/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -379,10 +379,11 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String getSQLWithPage(boolean isTable, String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view, PageInfo pageInfo) { - if(isTable){ - return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize(); - }else { - return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize(); + String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize() + "," + pageInfo.getPageSize() : ""); + if (isTable) { + return originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; + } else { + return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; } } 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 0754b70fb3..a88f63ac67 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -298,6 +298,10 @@ public class ChartViewService { public ChartViewDTO getData(String id, ChartExtRequest request) throws Exception { try { ChartViewDTO view = this.getOne(id, request.getQueryFrom()); + DatasetTable datasetTable = dataSetTableService.get(view.getTableId()); + if (ObjectUtils.isNotEmpty(datasetTable)) { + view.setDatasetMode(datasetTable.getMode()); + } // 如果是从仪表板获取视图数据,则仪表板的查询模式,查询结果的数量,覆盖视图对应的属性 if (CommonConstants.VIEW_RESULT_MODE.CUSTOM.equals(request.getResultMode())) { view.setResultMode(request.getResultMode()); @@ -570,7 +574,6 @@ public class ChartViewService { }); } - List xAxisBase = gson.fromJson(view.getXAxis(), tokenType); List xAxis = gson.fromJson(view.getXAxis(), tokenType); List xAxisExt = gson.fromJson(view.getXAxisExt(), tokenType); @@ -621,6 +624,22 @@ public class ChartViewService { return emptyChartViewDTO(view); } + // 直连明细表分页 + Map mapAttr = gson.fromJson(view.getCustomAttr(), Map.class); + Map mapSize = (Map) mapAttr.get("size"); + if (StringUtils.equalsIgnoreCase(view.getType(), "table-info") && table.getMode() == 0 && StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { + if (chartExtRequest.getGoPage() == null) { + chartExtRequest.setGoPage(1L); + } + if (chartExtRequest.getPageSize() == null) { + String pageSize = (String) mapSize.get("tablePageSize"); + chartExtRequest.setPageSize(Long.parseLong(pageSize)); + } + } else { + chartExtRequest.setGoPage(null); + chartExtRequest.setPageSize(null); + } + switch (view.getType()) { case "label": xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); @@ -863,8 +882,8 @@ public class ChartViewService { long totalItems = 0l; String totalPageSql = null; PageInfo pageInfo = new PageInfo(); - pageInfo.setGoPage(chartExtRequest.getGoPage() != null ? chartExtRequest.getGoPage() : 1); - pageInfo.setPageSize(chartExtRequest.getPageSize() != null ? chartExtRequest.getPageSize() : 20); + pageInfo.setGoPage(chartExtRequest.getGoPage()); + pageInfo.setPageSize(chartExtRequest.getPageSize()); //如果不是插件视图 走原生逻辑 if (table.getMode() == 0) {// 直连 @@ -940,7 +959,7 @@ public class ChartViewService { querySql = qp.getSQLAsTmp(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view); } } - if (StringUtils.isNotEmpty(totalPageSql)) { + if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase((String) mapSize.get("tablePageMode"), "page")) { datasourceRequest.setQuery(totalPageSql); totalItems = Long.valueOf(datasourceProvider.getData(datasourceRequest).get(0)[0]); totalPage = totalItems / pageInfo.getPageSize() + totalItems % pageInfo.getPageSize() > 0 ? 1 : 0; diff --git a/frontend/src/components/canvas/customComponent/UserView.vue b/frontend/src/components/canvas/customComponent/UserView.vue index fa814f692c..6652f1b100 100644 --- a/frontend/src/components/canvas/customComponent/UserView.vue +++ b/frontend/src/components/canvas/customComponent/UserView.vue @@ -89,6 +89,7 @@ :search-count="searchCount" @onChartClick="chartClick" @onJumpClick="jumpClick" + @onPageChange="pageClick" /> { // 将视图传入echart组件 if (response.success) { @@ -1132,11 +1152,20 @@ export default { getDataOnly(sourceResponseData, dataBroadcast) { if (this.isEdit) { if ((this.filter.filter && this.filter.filter.length) || (this.filter.linkageFilters && this.filter.linkageFilters.length)) { - viewData(this.chart.id, this.panelInfo.id, { + const requestInfo = { filter: [], drill: [], queryFrom: 'panel' - }).then(response => { + } + // table-info明细表增加分页 + if (this.view.customAttr) { + const attrSize = JSON.parse(this.view.customAttr).size + if (this.chart.type === 'table-info' && this.view.datasetMode === 0 && (!attrSize.tablePageMode || attrSize.tablePageMode === 'page')) { + requestInfo.goPage = this.currentPage.page + requestInfo.pageSize = this.currentPage.pageSize + } + } + viewData(this.chart.id, this.panelInfo.id, requestInfo).then(response => { this.componentViewsData[this.chart.id] = response.data if (dataBroadcast) { bus.$emit('prop-change-data') @@ -1149,6 +1178,10 @@ export default { } } } + }, + pageClick(page) { + this.currentPage = page + this.getData(this.element.propValue.viewId, false) } } } diff --git a/frontend/src/views/chart/components/ChartComponentS2.vue b/frontend/src/views/chart/components/ChartComponentS2.vue index 7077eb23c2..45a26c20f4 100644 --- a/frontend/src/views/chart/components/ChartComponentS2.vue +++ b/frontend/src/views/chart/components/ChartComponentS2.vue @@ -59,7 +59,7 @@ > {{ $t('chart.total') }} - {{ (chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0 }} + {{ chart.datasetMode === 0 ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) }} {{ $t('chart.items') }} this.currentPage.pageSize) { - // 计算分页 - this.currentPage.show = data.length - const pageStart = (this.currentPage.page - 1) * this.currentPage.pageSize - const pageEnd = pageStart + this.currentPage.pageSize - data = data.slice(pageStart, pageEnd) - this.showPage = true + if (this.chart.datasetMode === 0) { + if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && this.chart.totalItems > this.currentPage.pageSize) { + this.currentPage.show = this.chart.totalItems + this.showPage = true + } + } else { + if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && data.length > this.currentPage.pageSize) { + // 计算分页 + this.currentPage.show = data.length + const pageStart = (this.currentPage.page - 1) * this.currentPage.pageSize + const pageEnd = pageStart + this.currentPage.pageSize + data = data.slice(pageStart, pageEnd) + this.showPage = true + } } } else { this.fields = [] @@ -425,14 +432,22 @@ export default { }, pageChange(val) { this.currentPage.pageSize = val - this.initData() - this.drawView() + if (this.chart.datasetMode === 0) { + this.$emit('onPageChange', this.currentPage) + } else { + this.initData() + this.drawView() + } }, pageClick(val) { this.currentPage.page = val - this.initData() - this.drawView() + if (this.chart.datasetMode === 0) { + this.$emit('onPageChange', this.currentPage) + } else { + this.initData() + this.drawView() + } }, resetPage() { diff --git a/frontend/src/views/chart/components/table/TableNormal.vue b/frontend/src/views/chart/components/table/TableNormal.vue index 632491e403..6533281768 100644 --- a/frontend/src/views/chart/components/table/TableNormal.vue +++ b/frontend/src/views/chart/components/table/TableNormal.vue @@ -46,7 +46,7 @@ > {{ $t('chart.total') }} - {{ (chart.data && chart.data.tableRow)?chart.data.tableRow.length:0 }} + {{ chart.datasetMode === 0 ? chart.totalItems : ((chart.data && chart.data.tableRow) ? chart.data.tableRow.length : 0) }} {{ $t('chart.items') }} this.currentPage.pageSize) { - // 计算分页 - this.currentPage.show = data.length - const pageStart = (this.currentPage.page - 1) * this.currentPage.pageSize - const pageEnd = pageStart + this.currentPage.pageSize - data = data.slice(pageStart, pageEnd) - this.showPage = true + if (this.chart.datasetMode === 0) { + if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && this.chart.totalItems > this.currentPage.pageSize) { + this.currentPage.show = this.chart.totalItems + this.showPage = true + } + } else { + if (this.chart.type === 'table-info' && (attr.size.tablePageMode === 'page' || !attr.size.tablePageMode) && data.length > this.currentPage.pageSize) { + // 计算分页 + this.currentPage.show = data.length + const pageStart = (this.currentPage.page - 1) * this.currentPage.pageSize + const pageEnd = pageStart + this.currentPage.pageSize + data = data.slice(pageStart, pageEnd) + this.showPage = true + } } } else { this.fields = [] @@ -403,12 +409,20 @@ export default { pageChange(val) { this.currentPage.pageSize = val - this.init() + if (this.chart.datasetMode === 0) { + this.$emit('onPageChange', this.currentPage) + } else { + this.init() + } }, pageClick(val) { this.currentPage.page = val - this.init() + if (this.chart.datasetMode === 0) { + this.$emit('onPageChange', this.currentPage) + } else { + this.init() + } }, resetPage() { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index beac5191aa..2ab10f1242 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -2213,7 +2213,10 @@ export default { if (!view) return viewEditSave(this.panelInfo.id, view).then(() => { // this.getData(this.param.id) - bus.$emit('view-in-cache', { type: 'propChange', viewId: this.param.id }) + bus.$emit('view-in-cache', { type: 'propChange', + viewId: this.param.id, + view: view + }) }) }, calcStyle(modifyName) {