diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java index 8d71eaf194..8b3f97c1e2 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -16,10 +16,16 @@ import io.dataease.controller.response.DatasetTableField4Type; import io.dataease.i18n.Translator; import io.dataease.plugins.common.base.domain.DatasetTable; import io.dataease.plugins.common.base.domain.DatasetTableField; +import io.dataease.plugins.common.base.domain.Datasource; +import io.dataease.plugins.datasource.entity.Dateformat; +import io.dataease.plugins.datasource.query.QueryProvider; +import io.dataease.provider.ProviderFactory; import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetTableFieldsService; import io.dataease.service.dataset.DataSetTableService; import io.dataease.service.dataset.PermissionService; +import io.dataease.service.datasource.DatasourceService; +import io.dataease.service.engine.EngineService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ObjectUtils; @@ -46,14 +52,16 @@ import java.util.stream.Collectors; public class DataSetTableFieldController { @Resource private DataSetTableFieldsService dataSetTableFieldsService; - @Autowired private DataSetFieldService dataSetFieldService; - @Resource private DataSetTableService dataSetTableService; @Resource private PermissionService permissionService; + @Resource + private EngineService engineService; + @Resource + private DatasourceService datasourceService; @DePermission(type = DePermissionType.DATASET) @ApiOperation("查询表下属字段") @@ -208,4 +216,14 @@ public class DataSetTableFieldController { ArrayList::new)); return list; } + + @DePermission(type = DePermissionType.DATASET) + @ApiOperation("时间格式") + @PostMapping("dateformats/{tableId}") + public List dateformats(@PathVariable String tableId) throws Exception{ + DatasetTable datasetTable = dataSetTableService.get(tableId); + Datasource ds = datasetTable.getMode() == 0 ? datasourceService.get(datasetTable.getDataSourceId()) : engineService.getDeEngine(); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + return qp.dateformat(); + } } diff --git a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index 8b9a23b56d..03ba7d0460 100644 --- a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -1,5 +1,6 @@ package io.dataease.provider.engine.doris; +import com.alibaba.fastjson.JSONArray; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; @@ -16,6 +17,7 @@ import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; +import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; @@ -1311,4 +1313,15 @@ public class DorisQueryProvider extends QueryProvider { return sql; } } + + public List dateformat() { + return JSONArray.parseArray("[\n" + + "{\"dateformat\": \"%Y-%m-%d\"},\n" + + "{\"dateformat\": \"%Y/%m/%d\"},\n" + + "{\"dateformat\": \"%Y%m%d\"},\n" + + "{\"dateformat\": \"%Y-%m-%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y/%m/%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y%m%d %H:%i:%S\"}\n" + + "]", Dateformat.class); + } } diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index cb426517e4..8ab3793784 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -1,5 +1,6 @@ package io.dataease.provider.engine.mysql; +import com.alibaba.fastjson.JSONArray; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; @@ -16,6 +17,7 @@ import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; +import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.query.QueryProvider; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -1312,4 +1314,15 @@ public class MysqlQueryProvider extends QueryProvider { return sql; } } + + public List dateformat() { + return JSONArray.parseArray("[\n" + + "{\"dateformat\": \"%Y-%m-%d\"},\n" + + "{\"dateformat\": \"%Y/%m/%d\"},\n" + + "{\"dateformat\": \"%Y%m%d\"},\n" + + "{\"dateformat\": \"%Y-%m-%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y/%m/%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y%m%d %H:%i:%S\"}\n" + + "]", Dateformat.class); + } } 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 b02ee4ef54..93e2d2ad59 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 @@ -1,5 +1,6 @@ package io.dataease.provider.query.mysql; +import com.alibaba.fastjson.JSONArray; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; @@ -17,7 +18,7 @@ import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; -import io.dataease.plugins.datasource.entity.PageInfo; +import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; import org.apache.commons.collections4.CollectionUtils; @@ -374,20 +375,6 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String getSQLTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { - return sqlLimit(originalTableInfo(table, xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view), view); - } - - @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; - } else { - return originalTableInfo("(" + sqlFix(table) + ")", xAxis, fieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view) + limit; - } - } - - private String originalTableInfo(String table, List xAxis, List fieldCustomFilter, List rowPermissionsTree, List extFilterRequestList, Datasource ds, ChartViewWithBLOBs view) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -458,7 +445,7 @@ public class MysqlQueryProvider extends QueryProvider { .build(); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return st.render(); + return sqlLimit(st.render(), view); } @Override @@ -1333,4 +1320,15 @@ public class MysqlQueryProvider extends QueryProvider { public String sqlForPreview(String table, Datasource ds) { return "SELECT * FROM " + String.format(MySQLConstants.KEYWORD_TABLE, table); } + + public List dateformat() { + return JSONArray.parseArray("[\n" + + "{\"dateformat\": \"%Y-%m-%d\"},\n" + + "{\"dateformat\": \"%Y/%m/%d\"},\n" + + "{\"dateformat\": \"%Y%m%d\"},\n" + + "{\"dateformat\": \"%Y-%m-%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y/%m/%d %H:%i:%S\"},\n" + + "{\"dateformat\": \"%Y%m%d %H:%i:%S\"}\n" + + "]", Dateformat.class); + } } diff --git a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index 46cc773569..5acfdef48b 100644 --- a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -1,5 +1,7 @@ package io.dataease.provider.query.sqlserver; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; import io.dataease.plugins.common.base.domain.DatasetTableField; @@ -17,6 +19,7 @@ import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeItem; +import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.datasource.query.Utils; @@ -1331,4 +1334,13 @@ public class SqlserverQueryProvider extends QueryProvider { schema = String.format(SqlServerSQLConstants.KEYWORD_TABLE, schema); return "SELECT * FROM " + schema + "." + String.format(SqlServerSQLConstants.KEYWORD_TABLE, table); } + + public List dateformat() { + return JSONArray.parseArray("[\n" + + "{\"dateformat\": \"102\", \"desc\": \"yyyy.mm.dd\"},\n" + + "{\"dateformat\": \"23\", \"desc\": \"yyyy-mm-dd\"},\n" + + "{\"dateformat\": \"111\", \"desc\": \"yyyy/mm/dd\"},\n" + + "{\"dateformat\": \"120\", \"desc\": \"yyyy-mm-dd hh:mi:ss\"}\n" + + "]", Dateformat.class); + } } 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 32d6f0f62d..4ac293ebc8 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -578,8 +578,8 @@ public class ChartViewService { List xAxis = gson.fromJson(view.getXAxis(), tokenType); List xAxisExt = gson.fromJson(view.getXAxisExt(), tokenType); if (StringUtils.equalsIgnoreCase(view.getType(), "table-pivot") - || StringUtils.containsIgnoreCase(view.getType(), "group") - || ("antv".equalsIgnoreCase(view.getRender()) && "line".equalsIgnoreCase(view.getType()))) { + || StringUtils.containsIgnoreCase(view.getType(), "group") + || ("antv".equalsIgnoreCase(view.getRender()) && "line".equalsIgnoreCase(view.getType()))) { xAxis.addAll(xAxisExt); } List yAxis = gson.fromJson(view.getYAxis(), tokenType); @@ -596,6 +596,12 @@ public class ChartViewService { List fieldCustomFilter = gson.fromJson(view.getCustomFilter(), filterTokenType); List drill = gson.fromJson(view.getDrillFields(), tokenType); + // 视图计算字段,用dataeaseName作为唯一标识 + ChartViewField chartViewField = new ChartViewField(); + chartViewField.setChartId(view.getId()); + List chartViewFields = chartViewFieldService.list(chartViewField); + List chartViewFieldNameList = chartViewFields.stream().map(ChartViewField::getDataeaseName).collect(Collectors.toList()); + DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build(); List fields = dataSetTableFieldsService.list(datasetTableFieldObj); @@ -609,11 +615,10 @@ public class ChartViewService { //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); dataeaseNames.add("*"); - fieldCustomFilter = fieldCustomFilter.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - extStack = extStack.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - extBubble = extBubble.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - drill = drill.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - + fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); //行权限 List rowPermissionsTree = permissionsTreeService.getRowPermissionsTree(fields, table, chartExtRequest.getUser()); @@ -644,7 +649,7 @@ public class ChartViewService { 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()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); yAxis = new ArrayList<>(); if (CollectionUtils.isEmpty(xAxis)) { return emptyChartViewDTO(view); @@ -654,32 +659,32 @@ public class ChartViewService { case "gauge": case "liquid": xAxis = new ArrayList<>(); - yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); if (CollectionUtils.isEmpty(yAxis)) { return emptyChartViewDTO(view); } break; case "table-info": yAxis = new ArrayList<>(); - xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(xAxis)) { return emptyChartViewDTO(view); } break; case "table-normal": - xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); break; case "bar-group": case "bar-group-stack": - xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - xAxisBase = xAxisBase.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - xAxisExt = xAxisExt.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxisBase = xAxisBase.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxisExt = xAxisExt.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); break; default: - xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); } // 过滤来自仪表板的条件 @@ -701,8 +706,8 @@ public class ChartViewService { hasParameters = true; } if (parameter.contains("|DE|") - && table.getId().equals(parameter.split("\\|DE\\|")[0]) - && sqlVariables + && table.getId().equals(parameter.split("\\|DE\\|")[0]) + && sqlVariables .stream() .map(SqlVariableDetails::getVariableName) .collect(Collectors.toList()) @@ -1160,7 +1165,7 @@ public class ChartViewService { mapChart = ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill); } } else if (StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { - if (StringUtils.equalsAnyIgnoreCase(view.getType(), "bar-group","line")) { + if (StringUtils.equalsAnyIgnoreCase(view.getType(), "bar-group", "line")) { mapChart = ChartDataBuild.transBaseGroupDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill); } else if (StringUtils.equalsIgnoreCase(view.getType(), "bar-group-stack")) { mapChart = ChartDataBuild.transGroupStackDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, extStack, data, view, isDrill); 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 ea29c59d76..3e457fd9d2 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -2242,6 +2242,13 @@ public class DataSetTableService { if (ObjectUtils.isNotEmpty(table)) { Datasource datasource = datasourceMapper.selectByPrimaryKey(table.getDataSourceId()); Optional.ofNullable(datasource).orElse(new Datasource()).setConfiguration(null); + Collection types = datasourceService.types(); + for (DataSourceType type : types) { + if (ObjectUtils.isNotEmpty(datasource) && StringUtils.equalsIgnoreCase(datasource.getType(), type.getType())) { + datasource.setType(type.getName()); + break; + } + } dataSetDetail.setDatasource(datasource); } return dataSetDetail; diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index c96d1a7bec..fc4c5b7c69 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -136,6 +136,14 @@ export function fieldListDQ(id, showLoading = true) { }) } +export function dateformats(id, showLoading = true) { + return request({ + url: '/dataset/field/dateformats/' + id, + loading: showLoading, + method: 'post' + }) +} + export function batchEdit(data) { return request({ url: '/dataset/field/batchEdit', diff --git a/frontend/src/components/canvas/components/editor/CanvasOptBar.vue b/frontend/src/components/canvas/components/editor/CanvasOptBar.vue index e41f595138..0f174096c0 100644 --- a/frontend/src/components/canvas/components/editor/CanvasOptBar.vue +++ b/frontend/src/components/canvas/components/editor/CanvasOptBar.vue @@ -6,6 +6,7 @@
@@ -13,7 +14,10 @@ v-if="!isNewBlank" size="mini" @click="back2Last" - >{{ $t('chart.back') }} + >{{ $t('pblink.back_parent') }} {{ $t('panel.down') }} + > + {{ $t('panel.down') }}
@@ -77,6 +85,14 @@ export default { }, exportPDF() { this.$emit('link-export-pdf') + }, + setWidgetStatus() { + if (!this.isPublicLink || !this.$refs['widget-div']) { + return + } + const val = this.$refs['widget-div'].style.display + + this.$refs['widget-div'].style.display = val ? '' : 'block' } } } @@ -114,7 +130,7 @@ export default { width: 60px; right: 0; top: 0; - border-top: 60px solid rgba(245, 74, 69, 0.2); + border-top: 60px solid rgba(245, 74, 69, 0); border-left: 60px solid transparent; cursor: pointer; z-index: 999; @@ -126,10 +142,16 @@ export default { width: max-content; text-align: end; z-index: 999; + ::v-deep button:hover { + background-color: rgba(31, 35, 41, 0.1); + color: #1F2329; + font-weight: bold; + border-color: rgba(31, 35, 41, 0.1) + } } &:hover { - border-top: 60px solid rgba(245, 74, 69, 0.8);; + border-top: 60px solid rgba(245, 74, 69, 0);; .function-div { display: block; } diff --git a/frontend/src/components/canvas/components/editor/Preview.vue b/frontend/src/components/canvas/components/editor/Preview.vue index ed527059d7..770930e288 100644 --- a/frontend/src/components/canvas/components/editor/Preview.vue +++ b/frontend/src/components/canvas/components/editor/Preview.vue @@ -9,7 +9,10 @@ :style="customStyle" @scroll="canvasScroll" > - +
+ + + \ No newline at end of file diff --git a/frontend/src/icons/svg/link-down.svg b/frontend/src/icons/svg/link-down.svg new file mode 100644 index 0000000000..90a6a5bda1 --- /dev/null +++ b/frontend/src/icons/svg/link-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index bd9cf86f0f..e9909f4f7e 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1441,7 +1441,12 @@ export default { proportion: 'Proportion', label_content: 'Label Content', percent: 'Percent', - table_index_desc: 'Index Header Name' + table_index_desc: 'Index Header Name', + total_sort: 'Total Sort', + total_sort_none: 'None', + total_sort_asc: 'ASC', + total_sort_desc: 'DESC', + total_sort_field: 'Sort Field' }, dataset: { spend_time: 'Spend', @@ -1862,7 +1867,8 @@ export default { input_placeholder: 'Please enter the 4-digits-letters', pwd_error: 'Wrong password', pwd_format_error: 'Please enter the 4-digits-letters', - sure_bt: 'Confirm' + sure_bt: 'Confirm', + back_parent: 'Back to previous' }, panel: { to_top: 'To Top', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 0011effc15..74b0b40a07 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1441,7 +1441,12 @@ export default { proportion: '佔比', label_content: '標籤展示', percent: '占比', - table_index_desc: '表頭名稱' + table_index_desc: '表頭名稱', + total_sort: '總計排序', + total_sort_none: '無', + total_sort_asc: '升序', + total_sort_desc: '降序', + total_sort_field: '排序字段' }, dataset: { spend_time: '耗時', @@ -1862,7 +1867,8 @@ export default { input_placeholder: '請輸入4位數字或字母', pwd_error: '密碼錯誤', pwd_format_error: '請輸入4位數字或字母', - sure_bt: '確定' + sure_bt: '確定', + back_parent: '返回上一級' }, panel: { to_top: '置頂', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index adad1951c8..1ee639b2b0 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1440,7 +1440,12 @@ export default { proportion: '占比', label_content: '标签展示', percent: '占比', - table_index_desc: '表头名称' + table_index_desc: '表头名称', + total_sort: '总计排序', + total_sort_none: '无', + total_sort_asc: '升序', + total_sort_desc: '降序', + total_sort_field: '排序字段' }, dataset: { spend_time: '耗时', @@ -1862,7 +1867,8 @@ export default { input_placeholder: '请输入4位数字或字母', pwd_error: '密码错误', pwd_format_error: '请输入4位数字或字母', - sure_bt: '确定' + sure_bt: '确定', + back_parent: '返回上一级' }, panel: { to_top: '置顶', diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index c2c3bf250a..a1083cc57a 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -172,7 +172,9 @@ export const DEFAULT_TOTAL = { }, calcSubTotals: { aggregation: 'SUM' - } + }, + totalSort: 'none', // asc,desc + totalSortField: '' }, col: { showGrandTotals: true, @@ -187,7 +189,9 @@ export const DEFAULT_TOTAL = { }, calcSubTotals: { aggregation: 'SUM' - } + }, + totalSort: 'none', // asc,desc + totalSortField: '' } } export const DEFAULT_TITLE_STYLE = { diff --git a/frontend/src/views/chart/chart/table/table-info.js b/frontend/src/views/chart/chart/table/table-info.js index 6b37d6fe84..976215d370 100644 --- a/frontend/src/views/chart/chart/table/table-info.js +++ b/frontend/src/views/chart/chart/table/table-info.js @@ -1,4 +1,4 @@ -import { TableSheet, S2Event, PivotSheet, DataCell } from '@antv/s2' +import { TableSheet, S2Event, PivotSheet, DataCell, EXTRA_FIELD, TOTAL_VALUE } from '@antv/s2' import { getCustomTheme, getSize } from '@/views/chart/chart/common/common_table' import { DEFAULT_COLOR_CASE, DEFAULT_TOTAL } from '@/views/chart/chart/chart' import { formatterItem, valueFormatter } from '@/views/chart/chart/formatter' @@ -403,17 +403,6 @@ export function baseTablePivot(s2, container, chart, action, tableData) { }) } - // data config - const s2DataConfig = { - fields: { - rows: r, - columns: c, - values: v - }, - meta: meta, - data: tableData - } - // total config let totalCfg = {} const chartObj = JSON.parse(JSON.stringify(chart)) @@ -433,6 +422,43 @@ export function baseTablePivot(s2, container, chart, action, tableData) { totalCfg.row.subTotalsDimensions = r totalCfg.col.subTotalsDimensions = c + // 解析合计、小计排序 + const sortParams = [] + if (totalCfg.row.totalSort && totalCfg.row.totalSort !== 'none' && c.length > 0) { + const sort = { + sortFieldId: c[0], + sortMethod: totalCfg.row.totalSort.toUpperCase(), + sortByMeasure: TOTAL_VALUE, + query: { + [EXTRA_FIELD]: totalCfg.row.totalSortField + } + } + sortParams.push(sort) + } + if (totalCfg.col.totalSort && totalCfg.col.totalSort !== 'none' && r.length > 0) { + const sort = { + sortFieldId: r[0], + sortMethod: totalCfg.col.totalSort.toUpperCase(), + sortByMeasure: TOTAL_VALUE, + query: { + [EXTRA_FIELD]: totalCfg.col.totalSortField + } + } + sortParams.push(sort) + } + + // data config + const s2DataConfig = { + fields: { + rows: r, + columns: c, + values: v + }, + meta: meta, + data: tableData, + sortParams: sortParams + } + // options const s2Options = { width: containerDom.offsetWidth, diff --git a/frontend/src/views/chart/chart/util.js b/frontend/src/views/chart/chart/util.js index 3c6faa1616..c14f28c8d7 100644 --- a/frontend/src/views/chart/chart/util.js +++ b/frontend/src/views/chart/chart/util.js @@ -354,8 +354,14 @@ export const TYPE_CONFIGS = [ value: 'richTextView', title: 'chart.rich_text_view', icon: 'richTextView', - properties: [], - propertyInner: {} + properties: [ + 'title-selector-ant-v' + ], + propertyInner: { + 'title-selector-ant-v': [ + 'title' + ] + } }, { render: 'antv', diff --git a/frontend/src/views/chart/components/componentStyle/TitleSelectorAntV.vue b/frontend/src/views/chart/components/componentStyle/TitleSelectorAntV.vue index 3168fe96f8..df9de17c55 100644 --- a/frontend/src/views/chart/components/componentStyle/TitleSelectorAntV.vue +++ b/frontend/src/views/chart/components/componentStyle/TitleSelectorAntV.vue @@ -15,9 +15,10 @@ {{ $t('chart.show') }} + >{{ $t('chart.show') }} + -
+
{{ $t('chart.italic') }} + >{{ $t('chart.italic') }} + {{ $t('chart.bolder') }} + >{{ $t('chart.bolder') }} + {{ $t('chart.font_shadow') }} + >{{ $t('chart.font_shadow') }} + {{ $t('chart.show') }} + >{{ $t('chart.show') }} + {{ $t('chart.cancel') }} + >{{ $t('chart.cancel') }} + {{ $t('chart.confirm') }} + >{{ $t('chart.confirm') }} +
@@ -350,7 +357,7 @@ export default { +.no-senior { + width: 100%; + text-align: center; + font-size: 12px; + padding-top: 40px; + overflow: auto; + border-right: 1px solid #e6e6e6; + height: 100%; +} + +.form-item-slider ::v-deep .el-form-item__label { + font-size: 12px; + line-height: 38px; +} + +.form-item ::v-deep .el-form-item__label { + font-size: 12px; +} + +.no-properties { + width: 100%; + text-align: center; + font-size: 12px; + padding-top: 40px; + overflow: auto; + height: 100%; +} + diff --git a/frontend/src/views/dataset/common/DatasetChartDetail.vue b/frontend/src/views/dataset/common/DatasetChartDetail.vue index 6939cfcf54..1eae8a0fd2 100644 --- a/frontend/src/views/dataset/common/DatasetChartDetail.vue +++ b/frontend/src/views/dataset/common/DatasetChartDetail.vue @@ -27,7 +27,7 @@

{{ $t('chart.title') }}

-

{{ detail.chart.title || 'N/A' }}

+

{{ detail.chart.title || '-' }}

{{ $t('dataset.create_by') }}

@@ -113,54 +113,11 @@

{{ $t('commons.description') }}

-

{{ detail.datasource.desc || 'N/A' }}

+

{{ detail.datasource.desc || '-' }}

{{ $t('datasource.type') }}

-

MySQL

-

SQL Server

-

Oracle

-

Apache Hive

-

PostgreSQL

-

Elasticsearch

-

MariaDB

-

Doris

-

ClickHouse

-

AWS Redshift

-

MongoDB

+

{{ detail.datasource.type }}

{{ $t('dataset.create_time') }}

diff --git a/frontend/src/views/dataset/data/FieldEdit.vue b/frontend/src/views/dataset/data/FieldEdit.vue index 44eb1336f7..6e879d8947 100644 --- a/frontend/src/views/dataset/data/FieldEdit.vue +++ b/frontend/src/views/dataset/data/FieldEdit.vue @@ -736,7 +736,7 @@