From 794e4651b014b0bd5c9360274bf23c02a49eeaae Mon Sep 17 00:00:00 2001 From: junjie Date: Wed, 28 Apr 2021 17:30:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=86=E5=9B=BE=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E5=90=88=E8=AE=A1fix=EF=BC=9B=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E6=95=B0=E6=8D=AE=E9=A2=84=E8=A7=88=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E5=90=84=E9=A1=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/DataSetTableController.java | 6 +- .../dto/dataset/DataSetPreviewPage.java | 17 ++ .../service/dataset/DataSetTableService.java | 40 +++- frontend/src/lang/zh.js | 6 +- .../chart/components/table/TableNormal.vue | 31 +-- .../views/dataset/common/DatasetTableData.vue | 2 +- .../src/views/dataset/data/TabDataPreview.vue | 101 +++++++-- .../src/views/dataset/data/UpdateInfo.vue | 2 + frontend/src/views/dataset/data/ViewTable.vue | 203 ++++++++++-------- frontend/src/views/dataset/group/Group.vue | 15 +- 10 files changed, 279 insertions(+), 144 deletions(-) create mode 100644 backend/src/main/java/io/dataease/dto/dataset/DataSetPreviewPage.java diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java index 3d491518ba..2a90d706f9 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -63,9 +63,9 @@ public class DataSetTableController { return dataSetTableService.getData(dataSetTableRequest); } - @PostMapping("getPreviewData") - public Map getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception { - return dataSetTableService.getPreviewData(dataSetTableRequest); + @PostMapping("getPreviewData/{page}/{pageSize}") + public Map getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest, @PathVariable Integer page, @PathVariable Integer pageSize) throws Exception { + return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize); } @PostMapping("sqlPreview") diff --git a/backend/src/main/java/io/dataease/dto/dataset/DataSetPreviewPage.java b/backend/src/main/java/io/dataease/dto/dataset/DataSetPreviewPage.java new file mode 100644 index 0000000000..18aa7fd859 --- /dev/null +++ b/backend/src/main/java/io/dataease/dto/dataset/DataSetPreviewPage.java @@ -0,0 +1,17 @@ +package io.dataease.dto.dataset; + +import lombok.Getter; +import lombok.Setter; + +/** + * @Author gin + * @Date 2021/4/28 11:13 上午 + */ +@Getter +@Setter +public class DataSetPreviewPage { + private Integer total = 0; + private Integer show = 0; + private Integer page = 1; + private Integer pageSize = 100; +} diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 7e5f034ad0..ea4d0e30a8 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -14,6 +14,7 @@ import io.dataease.datasource.dto.TableFiled; import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; +import io.dataease.dto.dataset.DataSetPreviewPage; import io.dataease.dto.dataset.DataTableInfoDTO; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -34,7 +35,6 @@ import javax.annotation.Resource; import java.io.*; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; -import java.sql.ResultSet; import java.text.MessageFormat; import java.util.*; import java.util.stream.Collectors; @@ -172,7 +172,7 @@ public class DataSetTableService { return datasourceProvider.getData(datasourceRequest); } - public Map getPreviewData(DataSetTableRequest dataSetTableRequest) throws Exception { + public Map getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize) throws Exception { DatasetTableField datasetTableField = DatasetTableField.builder().build(); datasetTableField.setTableId(dataSetTableRequest.getId()); datasetTableField.setChecked(Boolean.TRUE); @@ -183,6 +183,11 @@ public class DataSetTableService { DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId()); List data = new ArrayList<>(); + DataSetPreviewPage dataSetPreviewPage = new DataSetPreviewPage(); + dataSetPreviewPage.setShow(Integer.valueOf(dataSetTableRequest.getRow())); + dataSetPreviewPage.setPage(page); + dataSetPreviewPage.setPageSize(pageSize); + int realSize = Integer.parseInt(dataSetTableRequest.getRow()) < pageSize ? Integer.parseInt(dataSetTableRequest.getRow()) : pageSize; if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); @@ -190,11 +195,18 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String table = dataTableInfoDTO.getTable(); - datasourceRequest.setQuery(createQuerySQL(ds.getType(), table, fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow()); + datasourceRequest.setQuery(createQuerySQL(ds.getType(), table, fieldArray) + " LIMIT " + (page - 1) * realSize + "," + realSize); try { data.addAll(datasourceProvider.getData(datasourceRequest)); } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(createQueryCountSQL(ds.getType(), table)); + dataSetPreviewPage.setTotal(Integer.valueOf(datasourceProvider.getData(datasourceRequest).get(0)[0])); + } catch (Exception e) { + e.printStackTrace(); } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); @@ -203,11 +215,18 @@ public class DataSetTableService { datasourceRequest.setDatasource(ds); String sql = dataTableInfoDTO.getSql(); - datasourceRequest.setQuery(createQuerySQL(ds.getType(), " (" + sql + ") AS tmp ", fieldArray) + " LIMIT 0," + dataSetTableRequest.getRow()); + datasourceRequest.setQuery(createQuerySQL(ds.getType(), " (" + sql + ") AS tmp ", fieldArray) + " LIMIT " + (page - 1) * realSize + "," + realSize); try { data.addAll(datasourceProvider.getData(datasourceRequest)); } catch (Exception e) { + e.printStackTrace(); + } + try { + datasourceRequest.setQuery(createQueryCountSQL(ds.getType(), " (" + sql + ") AS tmp ")); + dataSetPreviewPage.setTotal(Integer.valueOf(datasourceProvider.getData(datasourceRequest).get(0)[0])); + } catch (Exception e) { + e.printStackTrace(); } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) { @@ -229,6 +248,7 @@ public class DataSetTableService { Map map = new HashMap<>(); map.put("fields", fields); map.put("data", jsonArray); + map.put("page", dataSetPreviewPage); return map; } @@ -314,6 +334,18 @@ public class DataSetTableService { } } + public String createQueryCountSQL(String type, String table) { + DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); + switch (datasourceType) { + case mysql: + return MessageFormat.format("SELECT count(*) FROM {0}", table); + case sqlServer: + return MessageFormat.format("SELECT count(*) FROM {0}", table); + default: + return MessageFormat.format("SELECT count(*) FROM {0}", table); + } + } + public String createQuerySQL(String type, String table, String[] fields) { DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); switch (datasourceType) { diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 4297f9f0b3..562a6918c6 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -791,7 +791,11 @@ export default { type: '类型', create_by: '创建者', create_time: '创建时间', - preview_100_data: '预览前100行数据' + preview_100_data: '预览前100行数据', + preview_show: '显示', + preview_item: '条数据', + preview_total: '共', + pls_input_less_9: '请输入9位以内的正整数' }, datasource: { datasource: '数据源', diff --git a/frontend/src/views/chart/components/table/TableNormal.vue b/frontend/src/views/chart/components/table/TableNormal.vue index 3e99494190..6a62794a16 100644 --- a/frontend/src/views/chart/components/table/TableNormal.vue +++ b/frontend/src/views/chart/components/table/TableNormal.vue @@ -164,7 +164,7 @@ export default { // console.log(s_table) let s = '' for (const i in this.table_header_class) { - s += i + ':' + this.table_header_class[i] + ';' + s += (i === 'fontSize' ? 'font-size' : i) + ':' + this.table_header_class[i] + ';' } s_table.setAttribute('style', s) }, @@ -176,23 +176,28 @@ export default { } }, summaryMethod({ columns, data }) { + const that = this const means = [] // 合计 columns.forEach((column, columnIndex) => { if (columnIndex === 0) { means.push('合计') } else { - const values = data.map(item => Number((item[column.property] + '').trim() === '' ? 'a' : item[column.property])) - // 合计 - if (!values.every(value => isNaN(value))) { - means[columnIndex] = values.reduce((prev, curr) => { - const value = Number(curr) - if (!isNaN(value)) { - return prev + curr - } else { - return prev - } - }, 0) - means[columnIndex] = (means[columnIndex] + '').includes('.') ? means[columnIndex].toFixed(2) : means[columnIndex] + if (columnIndex >= that.chart.data.fields.length - that.chart.data.series.length) { + const values = data.map(item => Number(item[column.property])) + // 合计 + if (!values.every(value => isNaN(value))) { + means[columnIndex] = values.reduce((prev, curr) => { + const value = Number(curr) + if (!isNaN(value)) { + return prev + curr + } else { + return prev + } + }, 0) + means[columnIndex] = (means[columnIndex] + '').includes('.') ? means[columnIndex].toFixed(2) : means[columnIndex] + } else { + means[columnIndex] = '' + } } else { means[columnIndex] = '' } diff --git a/frontend/src/views/dataset/common/DatasetTableData.vue b/frontend/src/views/dataset/common/DatasetTableData.vue index ae8010ad0f..1839633ac3 100644 --- a/frontend/src/views/dataset/common/DatasetTableData.vue +++ b/frontend/src/views/dataset/common/DatasetTableData.vue @@ -58,7 +58,7 @@ export default { this.resetData() if (this.table.id) { this.table.row = 10 - post('/dataset/table/getPreviewData', this.table).then(response => { + post('/dataset/table/getPreviewData/1/10', this.table).then(response => { this.fields = response.data.fields this.data = response.data.data const datas = this.data diff --git a/frontend/src/views/dataset/data/TabDataPreview.vue b/frontend/src/views/dataset/data/TabDataPreview.vue index 357b40f023..0893b52435 100644 --- a/frontend/src/views/dataset/data/TabDataPreview.vue +++ b/frontend/src/views/dataset/data/TabDataPreview.vue @@ -34,6 +34,32 @@ + + + + {{ $t('dataset.preview_total') }} + {{ page.total }} + {{ $t('dataset.preview_item') }} + + + {{ $t('dataset.preview_show') }} + {{ currentPage.show }} + {{ $t('dataset.preview_item') }} + ,{{ $t('dataset.preview_total') }} + {{ page.total }} + {{ $t('dataset.preview_item') }} + + + + @@ -56,11 +82,20 @@ export default { form: { type: Object, required: true + }, + page: { + type: Object, + required: false } }, data() { return { - height: 500 + height: 500, + currentPage: { + page: 1, + pageSize: 100, + show: parseInt(this.form.row) + } } }, computed: { @@ -69,28 +104,68 @@ export default { data() { const datas = this.data this.$refs.plxTable.reloadData(datas) + }, + page() { + if (this.page.total < parseInt(this.form.row)) { + this.currentPage.show = this.page.total + } else { + this.currentPage.show = parseInt(this.form.row) + } } }, mounted() { - window.onresize = () => { - return (() => { - this.height = window.innerHeight / 2 - })() - } - this.height = window.innerHeight / 2 - }, - activated() { + this.init() }, methods: { + init() { + this.calHeight() + }, + calHeight() { + const that = this + setTimeout(function() { + const currentHeight = document.documentElement.clientHeight + that.height = currentHeight - 56 - 30 - 26 - 25 - 55 - 38 - 28 - 10 + }, 10) + }, reSearch() { - this.$emit('reSearch', this.form) + if (this.form.row.length > 8 || isNaN(Number(this.form.row)) || String(this.form.row).includes('.')) { + this.$message({ + message: this.$t('dataset.pls_input_less_9'), + type: 'error', + showClose: true + }) + return + } + this.currentPage.show = parseInt(this.form.row) + this.currentPage.page = 1 + this.$emit('reSearch', { form: this.form, page: this.currentPage }) + }, + pageChange(val) { + this.currentPage.page = val + // console.log(this.currentPage) + this.$emit('reSearch', { form: this.form, page: this.currentPage }) } } } diff --git a/frontend/src/views/dataset/data/UpdateInfo.vue b/frontend/src/views/dataset/data/UpdateInfo.vue index f38e806d28..d883bb07b8 100644 --- a/frontend/src/views/dataset/data/UpdateInfo.vue +++ b/frontend/src/views/dataset/data/UpdateInfo.vue @@ -464,9 +464,11 @@ export default { }) }, handleSizeChange(val) { + this.page.pageSize = val this.listTaskLog() }, handleCurrentChange(val) { + this.page.currentPage = val this.listTaskLog() }, resetTaskForm() { diff --git a/frontend/src/views/dataset/data/ViewTable.vue b/frontend/src/views/dataset/data/ViewTable.vue index de610cf5a8..1165d35bac 100644 --- a/frontend/src/views/dataset/data/ViewTable.vue +++ b/frontend/src/views/dataset/data/ViewTable.vue @@ -1,93 +1,90 @@