diff --git a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java index a745d9566d..0a8094aa22 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/LinkApi.java @@ -2,6 +2,8 @@ package io.dataease.controller.panel.api; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.auth.annotation.DePermission; +import io.dataease.commons.constants.DePermissionType; import io.dataease.controller.request.chart.ChartExtRequest; import io.dataease.controller.request.panel.link.*; import io.dataease.dto.panel.link.GenerateDto; @@ -18,26 +20,32 @@ import java.util.Map; public interface LinkApi { + @DePermission(type = DePermissionType.PANEL, value = "resourceId") @ApiOperation("重置密码") @PostMapping("/resetPwd") void replacePwd(PasswordRequest request); + @DePermission(type = DePermissionType.PANEL, value = "resourceId") @ApiOperation("启用密码") @PostMapping("/enablePwd") void enablePwd(EnablePwdRequest request); + @DePermission(type = DePermissionType.PANEL, value = "resourceId") @ApiOperation("过期时间") @PostMapping("/resetOverTime") void resetOverTime(OverTimeRequest request); + @DePermission(type = DePermissionType.PANEL, value = "resourceId") @ApiOperation("启用/禁用链接分享") @PostMapping("/switchLink") void switchLink(LinkRequest request); + @DePermission(type = DePermissionType.PANEL) @ApiOperation("当前链接信息") @PostMapping("/currentGenerate/{resourceId}") GenerateDto currentGenerate(String resourceId); + @ApiOperation("验证访问") @PostMapping("/validate") ValidateDto validate(LinkValidateRequest request) throws Exception; diff --git a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java index 78b61a962b..6494c8f24f 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/ShareApi.java @@ -1,7 +1,9 @@ package io.dataease.controller.panel.api; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.auth.annotation.DePermission; import io.dataease.base.domain.PanelShare; +import io.dataease.commons.constants.DePermissionType; import io.dataease.controller.request.panel.PanelShareFineDto; import io.dataease.controller.request.panel.PanelShareRemoveRequest; import io.dataease.controller.sys.base.BaseGridRequest; @@ -47,6 +49,7 @@ public interface ShareApi { List queryTargets(@PathVariable("panelId") String panelId); + @DePermission(type = DePermissionType.PANEL, value = "resourceId") @ApiOperation("创建分享") @PostMapping("/fineSave") void fineSave(PanelShareFineDto panelShareFineDto); diff --git a/backend/src/main/java/io/dataease/controller/panel/api/StoreApi.java b/backend/src/main/java/io/dataease/controller/panel/api/StoreApi.java index 68456fed8f..f0e8efd983 100644 --- a/backend/src/main/java/io/dataease/controller/panel/api/StoreApi.java +++ b/backend/src/main/java/io/dataease/controller/panel/api/StoreApi.java @@ -1,6 +1,8 @@ package io.dataease.controller.panel.api; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.dataease.auth.annotation.DePermission; +import io.dataease.commons.constants.DePermissionType; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.panel.PanelStoreDto; import io.swagger.annotations.Api; @@ -21,6 +23,7 @@ import java.util.List; @RequestMapping("/api/store") public interface StoreApi { + @DePermission(type = DePermissionType.PANEL) @ApiOperation("创建收藏") @PostMapping("/{id}") void store(@PathVariable("id") String id); diff --git a/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java b/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java index fe73989a2e..948b9710d1 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java @@ -185,7 +185,7 @@ public class ApiProvider extends DatasourceProvider{ int i = 0; while (it.hasNext()){ Map.Entry entry = (Map.Entry)it.next(); - row[i] = Optional.ofNullable(entry.getValue()).orElse("").toString(); + row[i] = Optional.ofNullable(entry.getValue()).orElse("").toString().replaceAll("\n", " ").replaceAll("\r", " "); i++; } dataList.add(row); diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index af864f0fa4..ea395af602 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -367,7 +367,6 @@ public class JdbcProvider extends DatasourceProvider { try (Connection con = getConnection(datasourceRequest); Statement statement = con.createStatement(); ResultSet resultSet = statement.executeQuery(queryStr)) { return "Success"; } catch (Exception e) { - e.printStackTrace(); DataEaseException.throwException(e.getMessage()); } return "Error"; 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 6544ba376a..c6ad23d019 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -1,6 +1,7 @@ package io.dataease.service.dataset; import com.google.gson.Gson; +import io.dataease.auth.annotation.DeCleaner; import io.dataease.base.domain.*; import io.dataease.base.mapper.*; import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; @@ -103,6 +104,7 @@ public class DataSetTableService { private static Logger logger = LoggerFactory.getLogger(ClassloaderResponsity.class); + @DeCleaner(value = DePermissionType.DATASET) public void batchInsert(List datasetTable) throws Exception { for (DataSetTableRequest table : datasetTable) { save(table); @@ -126,6 +128,7 @@ public class DataSetTableService { } } + @DeCleaner(value = DePermissionType.DATASET) public void saveExcel(DataSetTableRequest datasetTable) throws Exception { List datasetIdList = new ArrayList<>(); @@ -233,6 +236,7 @@ public class DataSetTableService { } } + @DeCleaner(value = DePermissionType.DATASET) public DatasetTable save(DataSetTableRequest datasetTable) throws Exception { checkName(datasetTable); if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "sql")) { @@ -1795,6 +1799,7 @@ public class DataSetTableService { return dataSetDetail; } + @DeCleaner(value = DePermissionType.DATASET) public ExcelFileData excelSaveAndParse(MultipartFile file, String tableId, Integer editType) throws Exception { String filename = file.getOriginalFilename(); // parse file diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index a031064eba..6afd148af2 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -467,6 +467,10 @@ public class ExtractDataService { while ((line = input.readLine()) != null) { errMsg = errMsg + line + System.getProperty("line.separator"); } + input = new BufferedReader(new InputStreamReader(process.getInputStream())); + while ((line = input.readLine()) != null) { + errMsg = errMsg + line + System.getProperty("line.separator"); + } throw new Exception(errMsg); } }catch (Exception e){ diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index f555be54c9..e1a360d7f0 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -161,7 +161,16 @@ public class DatasourceService { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - datasourceProvider.checkStatus(datasourceRequest); + String status = datasourceProvider.checkStatus(datasourceRequest); + if (status.equalsIgnoreCase("Success")) { + return ResultHolder.success("Success"); + } + if (status.equalsIgnoreCase("Warning")) { + return ResultHolder.error("Datasource has invalid items"); + } + if (status.equalsIgnoreCase("Error")) { + return ResultHolder.error("Datasource is invalid"); + } return ResultHolder.success("Success"); }catch (Exception e){ return ResultHolder.error("Datasource is invalid: " + e.getMessage()); @@ -178,8 +187,17 @@ public class DatasourceService { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); - datasourceProvider.checkStatus(datasourceRequest); - datasource.setStatus("Success"); + String status = datasourceProvider.checkStatus(datasourceRequest); + datasource.setStatus(status); + if (status.equalsIgnoreCase("Success")) { + return ResultHolder.success("Success"); + } + if (status.equalsIgnoreCase("Warning")) { + return ResultHolder.error("Datasource has invalid items"); + } + if (status.equalsIgnoreCase("Error")) { + return ResultHolder.error("Datasource is invalid"); + } return ResultHolder.success("Success"); }catch (Exception e){ datasource.setStatus("Error"); @@ -206,7 +224,8 @@ public class DatasourceService { // 获取当前数据源下的db类型数据集 DatasetTableExample datasetTableExample = new DatasetTableExample(); - datasetTableExample.createCriteria().andTypeEqualTo("db").andDataSourceIdEqualTo(datasource.getId()); + + datasetTableExample.createCriteria().andTypeIn(Arrays.asList("db","api")).andDataSourceIdEqualTo(datasource.getId()); List datasetTables = datasetTableMapper.selectByExampleWithBLOBs(datasetTableExample); List list = new ArrayList<>(); for (TableDesc tableDesc : tables) { @@ -256,6 +275,7 @@ public class DatasourceService { DatasourceExample example = new DatasourceExample(); DatasourceExample.Criteria criteria = example.createCriteria(); criteria.andNameEqualTo(datasource.getName()); + criteria.andTypeEqualTo(datasource.getType()); if (StringUtils.isNotEmpty(datasource.getId())) { criteria.andIdNotEqualTo(datasource.getId()); } @@ -271,8 +291,16 @@ public class DatasourceService { public ApiDefinition checkApiDatasource(ApiDefinition apiDefinition) throws Exception { String response = ApiProvider.execHttpRequest(apiDefinition); + if(StringUtils.isEmpty(response)){ + throw new Exception("该请求返回数据为空"); + } + List datas = new ArrayList<>(); + try { + datas = JsonPath.read(response,apiDefinition.getDataPath()); + }catch (Exception e){ + throw new Exception("jsonPath 路径错误:" + e.getMessage()); + } - List datas = JsonPath.read(response,apiDefinition.getDataPath()); List dataList = new ArrayList<>(); List fields = new ArrayList<>(); Boolean getFileds = true; @@ -282,7 +310,7 @@ public class DatasourceService { Iterator it = data.entrySet().iterator(); while (it.hasNext()){ Map.Entry entry = (Map.Entry)it.next(); - jsonObject.put((String) entry.getKey(), entry.getValue()); + jsonObject.put((String) entry.getKey(), Optional.ofNullable(entry.getValue()).orElse("").toString().replaceAll("\n", " ").replaceAll("\r", " ")); if(getFileds) { DatasetTableField tableField = new DatasetTableField(); tableField.setOriginName((String) entry.getKey()); diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index e271fa3d3e..48c2fc2982 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1310,7 +1310,7 @@ export default { port_no_less_then_0: 'Port cannot be less than zero', priority: 'Advanced setting', extra_params: 'Extra JDBC connection string', - please_input_dataPath: '请输入 JsonPath 数据路径', + please_input_dataPath: 'Please enter the JsonPath data path', warning: 'Contains invalid datasets', data_table: 'Dataset Table', data_table_name: 'Dataset Table name', diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 029a5909a2..8e35536a73 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -1584,6 +1584,10 @@ export default { this.view.customAttr = this.view.customAttr ? JSON.parse(this.view.customAttr) : {} this.view.customStyle = this.view.customStyle ? JSON.parse(this.view.customStyle) : {} this.view.customFilter = this.view.customFilter ? JSON.parse(this.view.customFilter) : {} + + // 将视图传入echart组件 + this.chart = response.data + this.data = response.data.data }).catch(err => { this.httpRequest.status = err.response.data.success this.httpRequest.msg = err.response.data.message diff --git a/frontend/src/views/dataset/add/AddDB.vue b/frontend/src/views/dataset/add/AddDB.vue index 1a773e0d79..4502ff4f3e 100644 --- a/frontend/src/views/dataset/add/AddDB.vue +++ b/frontend/src/views/dataset/add/AddDB.vue @@ -125,7 +125,7 @@ export default { methods: { initDataSource() { listDatasource().then(response => { - this.options = response.data + this.options = response.data.filter(item => item.type !== 'api') }) }, kettleState() { diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index ab4c2ff27f..0757a854f4 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -3,7 +3,7 @@ - {{ param.tableId?$t('dataset.edit_sql'):$t('dataset.add_sql_table') }} + {{ param.tableId ? $t('dataset.edit_sql') : $t('dataset.add_sql_table') }} @@ -14,11 +14,12 @@ - + - + - + - - + + - - + + @@ -62,7 +64,9 @@
{{ $t('dataset.data_preview') }} - {{ $t('dataset.preview') }} + + {{ $t('dataset.preview') }} +
diff --git a/frontend/src/views/system/datasource/ApiHttpRequestForm.vue b/frontend/src/views/system/datasource/ApiHttpRequestForm.vue index 1ae75e35a7..6f47410375 100644 --- a/frontend/src/views/system/datasource/ApiHttpRequestForm.vue +++ b/frontend/src/views/system/datasource/ApiHttpRequestForm.vue @@ -369,14 +369,14 @@ export default {