提交 794e4651 authored 作者: junjie's avatar junjie

fix: 视图表格样式合计fix;数据集数据预览表格各项优化

上级 08284453
...@@ -63,9 +63,9 @@ public class DataSetTableController { ...@@ -63,9 +63,9 @@ public class DataSetTableController {
return dataSetTableService.getData(dataSetTableRequest); return dataSetTableService.getData(dataSetTableRequest);
} }
@PostMapping("getPreviewData") @PostMapping("getPreviewData/{page}/{pageSize}")
public Map<String, Object> getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception { public Map<String, Object> getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest, @PathVariable Integer page, @PathVariable Integer pageSize) throws Exception {
return dataSetTableService.getPreviewData(dataSetTableRequest); return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize);
} }
@PostMapping("sqlPreview") @PostMapping("sqlPreview")
......
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;
}
...@@ -14,6 +14,7 @@ import io.dataease.datasource.dto.TableFiled; ...@@ -14,6 +14,7 @@ import io.dataease.datasource.dto.TableFiled;
import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.DatasourceProvider;
import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.provider.ProviderFactory;
import io.dataease.datasource.request.DatasourceRequest; import io.dataease.datasource.request.DatasourceRequest;
import io.dataease.dto.dataset.DataSetPreviewPage;
import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.dto.dataset.DataTableInfoDTO;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
...@@ -34,7 +35,6 @@ import javax.annotation.Resource; ...@@ -34,7 +35,6 @@ import javax.annotation.Resource;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.sql.ResultSet;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -172,7 +172,7 @@ public class DataSetTableService { ...@@ -172,7 +172,7 @@ public class DataSetTableService {
return datasourceProvider.getData(datasourceRequest); return datasourceProvider.getData(datasourceRequest);
} }
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest) throws Exception { public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize) throws Exception {
DatasetTableField datasetTableField = DatasetTableField.builder().build(); DatasetTableField datasetTableField = DatasetTableField.builder().build();
datasetTableField.setTableId(dataSetTableRequest.getId()); datasetTableField.setTableId(dataSetTableRequest.getId());
datasetTableField.setChecked(Boolean.TRUE); datasetTableField.setChecked(Boolean.TRUE);
...@@ -183,6 +183,11 @@ public class DataSetTableService { ...@@ -183,6 +183,11 @@ public class DataSetTableService {
DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId()); DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId());
List<String[]> data = new ArrayList<>(); List<String[]> 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")) { if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "db")) {
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
...@@ -190,11 +195,18 @@ public class DataSetTableService { ...@@ -190,11 +195,18 @@ public class DataSetTableService {
datasourceRequest.setDatasource(ds); datasourceRequest.setDatasource(ds);
String table = dataTableInfoDTO.getTable(); 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 { try {
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } 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")) { } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) {
Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId());
...@@ -203,11 +215,18 @@ public class DataSetTableService { ...@@ -203,11 +215,18 @@ public class DataSetTableService {
datasourceRequest.setDatasource(ds); datasourceRequest.setDatasource(ds);
String sql = dataTableInfoDTO.getSql(); 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 { try {
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } 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")) { } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) {
...@@ -229,6 +248,7 @@ public class DataSetTableService { ...@@ -229,6 +248,7 @@ public class DataSetTableService {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("fields", fields); map.put("fields", fields);
map.put("data", jsonArray); map.put("data", jsonArray);
map.put("page", dataSetPreviewPage);
return map; return map;
} }
...@@ -314,6 +334,18 @@ public class DataSetTableService { ...@@ -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) { public String createQuerySQL(String type, String table, String[] fields) {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); DatasourceTypes datasourceType = DatasourceTypes.valueOf(type);
switch (datasourceType) { switch (datasourceType) {
......
...@@ -791,7 +791,11 @@ export default { ...@@ -791,7 +791,11 @@ export default {
type: '类型', type: '类型',
create_by: '创建者', create_by: '创建者',
create_time: '创建时间', create_time: '创建时间',
preview_100_data: '预览前100行数据' preview_100_data: '预览前100行数据',
preview_show: '显示',
preview_item: '条数据',
preview_total: '共',
pls_input_less_9: '请输入9位以内的正整数'
}, },
datasource: { datasource: {
datasource: '数据源', datasource: '数据源',
......
...@@ -164,7 +164,7 @@ export default { ...@@ -164,7 +164,7 @@ export default {
// console.log(s_table) // console.log(s_table)
let s = '' let s = ''
for (const i in this.table_header_class) { 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) s_table.setAttribute('style', s)
}, },
...@@ -176,12 +176,14 @@ export default { ...@@ -176,12 +176,14 @@ export default {
} }
}, },
summaryMethod({ columns, data }) { summaryMethod({ columns, data }) {
const that = this
const means = [] // 合计 const means = [] // 合计
columns.forEach((column, columnIndex) => { columns.forEach((column, columnIndex) => {
if (columnIndex === 0) { if (columnIndex === 0) {
means.push('合计') means.push('合计')
} else { } else {
const values = data.map(item => Number((item[column.property] + '').trim() === '' ? 'a' : item[column.property])) 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))) { if (!values.every(value => isNaN(value))) {
means[columnIndex] = values.reduce((prev, curr) => { means[columnIndex] = values.reduce((prev, curr) => {
...@@ -196,6 +198,9 @@ export default { ...@@ -196,6 +198,9 @@ export default {
} else { } else {
means[columnIndex] = '' means[columnIndex] = ''
} }
} else {
means[columnIndex] = ''
}
} }
}) })
// 返回一个二维数组的表尾合计(不要平均值,就不要在数组中添加) // 返回一个二维数组的表尾合计(不要平均值,就不要在数组中添加)
......
...@@ -58,7 +58,7 @@ export default { ...@@ -58,7 +58,7 @@ export default {
this.resetData() this.resetData()
if (this.table.id) { if (this.table.id) {
this.table.row = 10 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.fields = response.data.fields
this.data = response.data.data this.data = response.data.data
const datas = this.data const datas = this.data
......
...@@ -34,6 +34,32 @@ ...@@ -34,6 +34,32 @@
</template> </template>
</ux-table-column> </ux-table-column>
</ux-grid> </ux-grid>
<el-row style="margin-top: 4px;">
<span class="table-count">
<span v-if="page.total <= currentPage.show">
{{ $t('dataset.preview_total') }}
<span class="span-number">{{ page.total }}</span>
{{ $t('dataset.preview_item') }}
</span>
<span v-if="page.total > currentPage.show">
{{ $t('dataset.preview_show') }}
<span class="span-number">{{ currentPage.show }}</span>
{{ $t('dataset.preview_item') }}
,{{ $t('dataset.preview_total') }}
<span class="span-number">{{ page.total }}</span>
{{ $t('dataset.preview_item') }}
</span>
</span>
<el-pagination
:current-page="currentPage.page"
:page-sizes="[100]"
:page-size="currentPage.pageSize"
:pager-count="5"
layout="sizes, prev, pager, next"
:total="currentPage.show"
@current-change="pageChange"
/>
</el-row>
</el-col> </el-col>
</template> </template>
...@@ -56,11 +82,20 @@ export default { ...@@ -56,11 +82,20 @@ export default {
form: { form: {
type: Object, type: Object,
required: true required: true
},
page: {
type: Object,
required: false
} }
}, },
data() { data() {
return { return {
height: 500 height: 500,
currentPage: {
page: 1,
pageSize: 100,
show: parseInt(this.form.row)
}
} }
}, },
computed: { computed: {
...@@ -69,28 +104,68 @@ export default { ...@@ -69,28 +104,68 @@ export default {
data() { data() {
const datas = this.data const datas = this.data
this.$refs.plxTable.reloadData(datas) this.$refs.plxTable.reloadData(datas)
}
}, },
mounted() { page() {
window.onresize = () => { if (this.page.total < parseInt(this.form.row)) {
return (() => { this.currentPage.show = this.page.total
this.height = window.innerHeight / 2 } else {
})() this.currentPage.show = parseInt(this.form.row)
}
} }
this.height = window.innerHeight / 2
}, },
activated() { mounted() {
this.init()
}, },
methods: { 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() { 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 })
} }
} }
} }
</script> </script>
<style scoped> <style scoped>
.row-style>>>.el-form-item__label{ .row-style>>>.el-form-item__label{
font-size: 12px; font-size: 12px;
} }
.row-style>>>.el-form-item--mini.el-form-item{
margin-bottom: 10px;
}
.el-pagination{
float: right;
}
span{
font-size: 14px;
}
.span-number{
color: #f18126;
}
.table-count{
color: #606266;
}
</style> </style>
...@@ -464,9 +464,11 @@ export default { ...@@ -464,9 +464,11 @@ export default {
}) })
}, },
handleSizeChange(val) { handleSizeChange(val) {
this.page.pageSize = val
this.listTaskLog() this.listTaskLog()
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
this.page.currentPage = val
this.listTaskLog() this.listTaskLog()
}, },
resetTaskForm() { resetTaskForm() {
......
<template> <template>
<el-col> <el-row style="height: 100%;overflow-y: hidden;width: 100%;">
<el-row>
<el-row style="height: 26px;"> <el-row style="height: 26px;">
<span v-show="false">{{ tableId }}</span>
<el-popover <el-popover
placement="right-start" placement="right-start"
width="400" width="400"
...@@ -31,7 +29,7 @@ ...@@ -31,7 +29,7 @@
<el-tabs v-model="tabActive"> <el-tabs v-model="tabActive">
<el-tab-pane :label="$t('dataset.data_preview')" name="dataPreview"> <el-tab-pane :label="$t('dataset.data_preview')" name="dataPreview">
<tab-data-preview :table="table" :fields="fields" :data="data" :form="tableViewRowForm" @reSearch="reSearch" /> <tab-data-preview :table="table" :fields="fields" :data="data" :page="page" :form="tableViewRowForm" @reSearch="reSearch" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane :label="$t('dataset.join_view')" name="joinView"> <el-tab-pane :label="$t('dataset.join_view')" name="joinView">
关联视图 TODO 关联视图 TODO
...@@ -83,11 +81,10 @@ ...@@ -83,11 +81,10 @@
<!-- <chart-edit/>--> <!-- <chart-edit/>-->
<!-- </el-dialog>--> <!-- </el-dialog>-->
</el-row> </el-row>
</el-col>
</template> </template>
<script> <script>
import { getTable, getPreviewData, fieldList, batchEdit } from '@/api/dataset/dataset' import { getTable, post, fieldList, batchEdit } from '@/api/dataset/dataset'
import TabDataPreview from './TabDataPreview' import TabDataPreview from './TabDataPreview'
import UpdateInfo from './UpdateInfo' import UpdateInfo from './UpdateInfo'
import DatasetChartDetail from '../common/DatasetChartDetail' import DatasetChartDetail from '../common/DatasetChartDetail'
...@@ -95,6 +92,12 @@ import DatasetChartDetail from '../common/DatasetChartDetail' ...@@ -95,6 +92,12 @@ import DatasetChartDetail from '../common/DatasetChartDetail'
export default { export default {
name: 'ViewTable', name: 'ViewTable',
components: { DatasetChartDetail, UpdateInfo, TabDataPreview }, components: { DatasetChartDetail, UpdateInfo, TabDataPreview },
props: {
param: {
type: String,
required: true
}
},
data() { data() {
return { return {
createViewDialog: false, createViewDialog: false,
...@@ -104,6 +107,11 @@ export default { ...@@ -104,6 +107,11 @@ export default {
}, },
fields: [], fields: [],
data: [], data: [],
page: {
page: 1,
pageSize: 100,
show: 1000
},
tabActive: 'dataPreview', tabActive: 'dataPreview',
tableFields: [], tableFields: [],
tableViewRowForm: { tableViewRowForm: {
...@@ -112,15 +120,19 @@ export default { ...@@ -112,15 +120,19 @@ export default {
tabStatus: false tabStatus: false
} }
}, },
computed: { // computed: {
tableId() { // tableId() {
this.initTable(this.$store.state.dataset.table) // this.initTable(this.$store.state.dataset.table)
return this.$store.state.dataset.table // return this.$store.state.dataset.table
// }
// },
watch: {
'param': function() {
this.initTable(this.param)
} }
}, },
watch: {},
mounted() { mounted() {
this.initTable(this.$store.state.dataset.table) this.initTable(this.param)
}, },
methods: { methods: {
initTable(id) { initTable(id) {
...@@ -132,17 +144,18 @@ export default { ...@@ -132,17 +144,18 @@ export default {
this.data = [] this.data = []
getTable(id).then(response => { getTable(id).then(response => {
this.table = response.data this.table = response.data
this.initPreviewData() this.initPreviewData(this.page)
}) })
} }
}, },
initPreviewData() { initPreviewData(page) {
if (this.table.id) { if (this.table.id) {
this.table.row = this.tableViewRowForm.row this.table.row = this.tableViewRowForm.row
getPreviewData(this.table).then(response => { post('/dataset/table/getPreviewData/' + page.page + '/' + page.pageSize, this.table).then(response => {
this.fields = response.data.fields this.fields = response.data.fields
this.data = response.data.data this.data = response.data.data
this.page = response.data.page
}) })
} }
}, },
...@@ -182,8 +195,8 @@ export default { ...@@ -182,8 +195,8 @@ export default {
}, },
reSearch(val) { reSearch(val) {
this.tableViewRowForm = val this.tableViewRowForm = val.form
this.initPreviewData() this.initPreviewData(val.page)
}, },
showTab() { showTab() {
......
...@@ -523,10 +523,6 @@ export default { ...@@ -523,10 +523,6 @@ export default {
back() { back() {
this.sceneMode = false this.sceneMode = false
// const route = this.$store.state.permission.currentRoutes
// console.log(route)
// this.$router.push('/dataset/index')
this.$store.dispatch('dataset/setSceneData', null)
this.$emit('switchComponent', { name: '' }) this.$emit('switchComponent', { name: '' })
}, },
...@@ -559,16 +555,7 @@ export default { ...@@ -559,16 +555,7 @@ export default {
}, },
sceneClick(data, node) { sceneClick(data, node) {
// console.log(data); this.$emit('switchComponent', { name: 'ViewTable', param: data.id })
this.$store.dispatch('dataset/setTable', null)
this.$store.dispatch('dataset/setTable', data.id)
// this.$router.push({
// name: 'table',
// params: {
// table: data
// }
// })
this.$emit('switchComponent', { name: 'ViewTable' })
}, },
refresh() { refresh() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论