diff --git a/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java b/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java index 2e33f7581c..6bd0f2f3d6 100644 --- a/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java @@ -21,4 +21,8 @@ public class AuthConstants { public final static String DEPT_DATASET_NAME = "dept_dataset"; public final static String DEPT_PANEL_NAME = "dept_panel"; + + + public static final String DE_DOWN_ERROR_KEY = "de-down-error-msg"; + } diff --git a/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java b/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java index a9251e291c..23236e1f44 100644 --- a/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java +++ b/backend/src/main/java/io/dataease/commons/wrapper/XssAndSqlHttpServletRequestWrapper.java @@ -168,9 +168,7 @@ public class XssAndSqlHttpServletRequestWrapper extends HttpServletRequestWrappe // NOTE: It's highly recommended to use the ESAPI library and // uncomment the following line to // avoid encoded attacks. - // value = ESAPI.encoder().canonicalize(value); // Avoid null characters - /** value = value.replaceAll("", ""); ***/ // Avoid anything between script tags Pattern scriptPattern = Pattern.compile( "<[\r\n| | ]*script[\r\n| | ]*>(.*?)", Pattern.CASE_INSENSITIVE); diff --git a/backend/src/main/java/io/dataease/job/sechedule/TestJob.java b/backend/src/main/java/io/dataease/job/sechedule/TestJob.java index d63802eb83..111dae0319 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/TestJob.java +++ b/backend/src/main/java/io/dataease/job/sechedule/TestJob.java @@ -1,5 +1,6 @@ package io.dataease.job.sechedule; +import io.dataease.commons.utils.LogUtil; import org.quartz.JobExecutionContext; import java.text.SimpleDateFormat; @@ -12,6 +13,6 @@ import java.util.Date; public class TestJob extends DeScheduleJob { @Override void businessExecute(JobExecutionContext context) { - System.out.println("Test Job -- " + new SimpleDateFormat("HH:mm:ss").format(new Date())); + LogUtil.info("Test Job -- " + new SimpleDateFormat("HH:mm:ss").format(new Date())); } } diff --git a/backend/src/main/java/io/dataease/listener/AppStartListener.java b/backend/src/main/java/io/dataease/listener/AppStartListener.java index 0f6f831198..c19dbb0d8b 100644 --- a/backend/src/main/java/io/dataease/listener/AppStartListener.java +++ b/backend/src/main/java/io/dataease/listener/AppStartListener.java @@ -1,5 +1,6 @@ package io.dataease.listener; +import io.dataease.commons.utils.LogUtil; import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.commons.constants.ScheduleType; import io.dataease.service.ScheduleService; @@ -23,7 +24,7 @@ public class AppStartListener implements ApplicationListener list = dataSetTableTaskService.list(new DatasetTableTask()); for (DatasetTableTask task : list) { diff --git a/backend/src/main/java/io/dataease/listener/RowPermissionMergeListener.java b/backend/src/main/java/io/dataease/listener/RowPermissionMergeListener.java index 204708fc47..800d5f15f7 100644 --- a/backend/src/main/java/io/dataease/listener/RowPermissionMergeListener.java +++ b/backend/src/main/java/io/dataease/listener/RowPermissionMergeListener.java @@ -31,12 +31,10 @@ public class RowPermissionMergeListener implements ApplicationListener beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((RowPermissionTreeService.class)); if (beansOfType.keySet().size() > 0) { - System.out.println("====row permissions merge [start]===="); logger.info("====row permissions merge [start]===="); SysStartupJob sysStartupJob = sysStartupJobMapper.selectByPrimaryKey(JOB_ID); if (ObjectUtils.isNotEmpty(sysStartupJob) && StringUtils.equalsIgnoreCase(sysStartupJob.getStatus(), "ready")) { - System.out.println("====row permissions merge [doing]===="); logger.info("====row permissions merge [doing]===="); RowPermissionTreeService rowPermissionTreeService = SpringContextUtil.getBean(RowPermissionTreeService.class); @@ -44,7 +42,6 @@ public class RowPermissionMergeListener implements ApplicationListener MAXSIZE) { String msgKey = "i18n_max_user_import_size"; - String msg = Translator.get(msgKey); - DEException.throwException(msg); + response.addHeader("Access-Control-Expose-Headers", AuthConstants.DE_DOWN_ERROR_KEY); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, msgKey); + return; } UserXpackService userXpackService = SpringContextUtil.getBean(UserXpackService.class); try{ userXpackService.upload(file, response); }catch (Exception e) { + response.addHeader("Access-Control-Expose-Headers", AuthConstants.DE_DOWN_ERROR_KEY); if (StringUtils.contains(e.getMessage(), "template file error")) { - - DEException.throwException(Translator.get("I18N_USER_TEMPLATE_ERROR")); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, "I18N_USER_TEMPLATE_ERROR"); }else { - DEException.throwException(e.getMessage()); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, e.getMessage()); } - + LogUtil.error(e.getMessage()); } } } 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 13f13e3ab2..2c34930653 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/ApiProvider.java @@ -213,8 +213,8 @@ public class ApiProvider extends Provider { if (StringUtils.isNotEmpty(value) && value.startsWith("[")) { JSONObject o = new JSONObject(); - JSONArray jsonArray = jsonObject.getJSONArray(s); try { + JSONArray jsonArray = jsonObject.getJSONArray(s); List childrenField = new ArrayList<>(); for (Object object : jsonArray) { JSONObject.parseObject(object.toString()); @@ -390,7 +390,7 @@ public class ApiProvider extends Provider { } for (int i = 0; i < columnDataList.size(); i++) { for (int j = 0; j < columnDataList.get(i).size(); j++) { - dataList.get(j)[i] = String.valueOf(columnDataList.get(i).get(j)); + dataList.get(j)[i] = Optional.ofNullable(String.valueOf(columnDataList.get(i).get(j))).orElse("").replaceAll("\n", " ").replaceAll("\r", " "); } } } diff --git a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index 684e0239f6..3931ed8f9a 100644 --- a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -294,7 +294,6 @@ public class MongoQueryProvider extends QueryProvider { } if (CollectionUtils.isNotEmpty(yFields)) { st_sql.add("aggregators", yFields); -// st_sql.add("notUseAs", true); } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -497,7 +496,6 @@ public class MongoQueryProvider extends QueryProvider { } if (CollectionUtils.isNotEmpty(yFields)) { st_sql.add("aggregators", yFields); -// st_sql.add("notUseAs", true); } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -616,7 +614,6 @@ public class MongoQueryProvider extends QueryProvider { } if (CollectionUtils.isNotEmpty(yFields)) { st_sql.add("aggregators", yFields); -// st_sql.add("notUseAs", true); } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); @@ -704,7 +701,6 @@ public class MongoQueryProvider extends QueryProvider { ST st_sql = stg.getInstanceOf("querySql"); if (CollectionUtils.isNotEmpty(yFields)) { st_sql.add("aggregators", yFields); -// st_sql.add("notUseAs", true); } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); diff --git a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java index e97432edcd..76b15bda06 100644 --- a/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java +++ b/backend/src/main/java/io/dataease/service/authModel/VAuthModelService.java @@ -41,6 +41,9 @@ public class VAuthModelService { } private List filterPrivileges(VAuthModelRequest request, List result) { + if(AuthUtils.getUser().getIsAdmin()){ + return result; + } if (request.getPrivileges() != null) { result = result.stream().filter(vAuthModelDTO -> { if (vAuthModelDTO.getNodeType().equalsIgnoreCase("spine") || (vAuthModelDTO.getNodeType().equalsIgnoreCase("leaf") && vAuthModelDTO.getPrivileges() != null && vAuthModelDTO.getPrivileges().contains(request.getPrivileges()))) { 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 3bbe16ab37..0e162ff399 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -830,14 +830,12 @@ public class ChartViewService { //如果不是插件视图 走原生逻辑 if (table.getMode() == 0) {// 直连 - // Datasource ds = datasourceService.get(table.getDataSourceId()); if (ObjectUtils.isEmpty(ds)) { throw new RuntimeException(Translator.get("i18n_datasource_delete")); } if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) { throw new Exception(Translator.get("i18n_invalid_ds")); } - // DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); datasourceRequest.setDatasource(ds); DataTableInfoDTO dataTableInfoDTO = gson.fromJson(table.getInfo(), DataTableInfoDTO.class); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); @@ -903,8 +901,6 @@ public class ChartViewService { data = datasourceProvider.getData(datasourceRequest); } else if (table.getMode() == 1) {// 抽取 // 连接doris,构建doris数据源查询 - // Datasource ds = engineService.getDeEngine(); - // DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); datasourceRequest.setDatasource(ds); String tableName = "ds_" + table.getId().replaceAll("-", "_"); datasourceRequest.setTable(tableName); @@ -1154,7 +1150,6 @@ public class ChartViewService { pluginViewParam.setPluginChartFieldCustomFilters(fieldFilters); pluginViewParam.setPluginChartExtFilters(panelFilters); pluginViewParam.setPluginViewLimit(pluginViewLimit); - // pluginViewParam.setUserId(AuthUtils.getUser().getUserId()); return pluginViewParam; } diff --git a/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java b/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java index 2cd29212e7..e8fd9a9224 100644 --- a/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java +++ b/backend/src/main/java/io/dataease/service/chart/ViewExportExcel.java @@ -38,6 +38,9 @@ public class ViewExportExcel { private Type tokenType = new TypeToken>>() { }.getType(); + private Type fieldTokenType = new TypeToken>() { + }.getType(); + @DePermissionProxy(paramIndex = 2) public List export(String panelId, List viewIds, PermissionProxy proxy) throws Exception { if (CollectionUtils.isEmpty(viewIds)) { @@ -91,7 +94,7 @@ public class ViewExportExcel { Map chart = chartViewDTO.getData(); Object objectFields = chart.get("fields"); - List fields = (List) objectFields; + List fields = gson.fromJson(gson.toJson(objectFields), fieldTokenType); List heads = new ArrayList<>(); List headKeys = new ArrayList<>(); fields.forEach(field -> { 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 76ec446d36..3322035bde 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -952,9 +952,10 @@ public class DataSetTableService { List sqlVariableNames = new ArrayList<>(); datasetTables.forEach(datasetTable -> { if (StringUtils.isNotEmpty(datasetTable.getSqlVariableDetails())) { - List sqlVariables = new Gson().fromJson(datasetTable.getSqlVariableDetails(), new TypeToken>() {}.getType()); + List sqlVariables = new Gson().fromJson(datasetTable.getSqlVariableDetails(), new TypeToken>() { + }.getType()); for (SqlVariableDetails sqlVariable : sqlVariables) { - if(!sqlVariableNames.contains(sqlVariable.getVariableName())){ + if (!sqlVariableNames.contains(sqlVariable.getVariableName())) { sqlVariableNames.add(sqlVariable.getVariableName()); sqlVariableDetails.add(sqlVariable); } @@ -1023,7 +1024,7 @@ public class DataSetTableService { if (fromItem instanceof SubSelect) { SelectBody selectBody = ((SubSelect) fromItem).getSelectBody(); SubSelect subSelect = new SubSelect(); - Select subSelectTmp = (Select)CCJSqlParserUtil.parse(removeVariables(selectBody.toString())); + Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString())); PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody()); subSelect.setSelectBody(subPlainSelect); subSelect.setAlias(new Alias(fromItem.getAlias().toString())); @@ -1031,7 +1032,7 @@ public class DataSetTableService { } Expression expr = plainSelect.getWhere(); if (expr == null) { - return plainSelect.toString(); + return handleWith(plainSelect, select); } StringBuilder stringBuilder = new StringBuilder(); BinaryExpression binaryExpression = null; @@ -1045,7 +1046,10 @@ public class DataSetTableService { expr.accept(getExpressionDeParser(stringBuilder)); } plainSelect.setWhere(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())); + return handleWith(plainSelect, select); + } + private String handleWith(PlainSelect plainSelect, Select select)throws Exception{ StringBuilder builder = new StringBuilder(); if (CollectionUtils.isNotEmpty(select.getWithItemsList())) { builder.append("WITH"); @@ -1062,7 +1066,6 @@ public class DataSetTableService { builder.append(" " + plainSelect); return builder.toString(); } - public Map getSQLPreview(DataSetTableRequest dataSetTableRequest) throws Exception { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); if (ds == null) { @@ -1488,7 +1491,7 @@ public class DataSetTableService { TableUtils.tableName(union.get(0).getCurrentDs().getId())); } Map map = new HashMap<>(); - map.put("sql", java.util.Base64.getEncoder().encodeToString(sql.getBytes())); + map.put("sql", sql); map.put("field", checkedFields); map.put("join", unionList); return map; @@ -2603,60 +2606,60 @@ public class DataSetTableService { @Override public void visit(Between between) { - if(hasVarible(between.getBetweenExpressionStart().toString()) || hasVarible(between.getBetweenExpressionEnd().toString())){ + if (hasVarible(between.getBetweenExpressionStart().toString()) || hasVarible(between.getBetweenExpressionEnd().toString())) { getBuffer().append(SubstitutedSql); - }else { + } else { getBuffer().append(between.getLeftExpression()).append(" BETWEEN ").append(between.getBetweenExpressionStart()).append(" AND ").append(between.getBetweenExpressionEnd()); } } @Override public void visit(MinorThan minorThan) { - if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + if (hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); return; } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" < "); - getBuffer().append( minorThan.getRightExpression()); + getBuffer().append(minorThan.getRightExpression()); } @Override public void visit(MinorThanEquals minorThan) { - if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + if (hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); return; } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" <= "); - getBuffer().append( minorThan.getRightExpression()); + getBuffer().append(minorThan.getRightExpression()); } @Override public void visit(GreaterThanEquals minorThan) { - if(hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())){ + if (hasVarible(minorThan.getLeftExpression().toString()) || hasVarible(minorThan.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); return; } getBuffer().append(minorThan.getLeftExpression()); getBuffer().append(" >= "); - getBuffer().append( minorThan.getRightExpression()); + getBuffer().append(minorThan.getRightExpression()); } @Override public void visit(GreaterThan greaterThan) { - if(hasVarible(greaterThan.getLeftExpression().toString()) || hasVarible(greaterThan.getRightExpression().toString())){ + if (hasVarible(greaterThan.getLeftExpression().toString()) || hasVarible(greaterThan.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); return; } getBuffer().append(greaterThan.getLeftExpression()); getBuffer().append(" > "); - getBuffer().append( greaterThan.getRightExpression()); + getBuffer().append(greaterThan.getRightExpression()); } @Override public void visit(ExpressionList expressionList) { - for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext();) { + for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext(); ) { Expression expression = iter.next(); expression.accept(this); if (iter.hasNext()) { @@ -2732,7 +2735,9 @@ public class DataSetTableService { try { BinaryExpression leftBinaryExpression = (BinaryExpression) expr.getLeftExpression(); hasSubBinaryExpression = leftBinaryExpression.getLeftExpression() instanceof BinaryExpression; - } catch (Exception e) {e.printStackTrace();} + } catch (Exception e) { + e.printStackTrace(); + } if (expr.getLeftExpression() instanceof BinaryExpression && !hasSubBinaryExpression && hasVarible(expr.getLeftExpression().toString())) { getBuffer().append(SubstitutedSql); @@ -2750,7 +2755,7 @@ public class DataSetTableService { } if (expr.getRightExpression() instanceof BinaryExpression && !hasSubBinaryExpression && hasVarible(expr.getRightExpression().toString())) { getBuffer().append(SubstitutedSql); - } else { + } else { expr.getRightExpression().accept(this); } } 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 2e7f2a069b..6cb1581db0 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -325,27 +325,27 @@ public class ExtractDataService { try { deleteFile("all_scope", datasetTableId); } catch (Exception ignore) { - System.out.println(ignore.getMessage()); + LogUtil.error(ignore); } try { sendWebMsg(datasetTable, datasetTableTask, datasetTableTaskLog, msg); } catch (Exception ignore) { - System.out.println(ignore.getMessage()); + LogUtil.error(ignore); } try { updateTableStatus(datasetTableId, lastExecStatus, execTime); } catch (Exception ignore) { - System.out.println(ignore.getMessage()); + LogUtil.error(ignore); } try { dataSetTableTaskService.updateTaskStatus(datasetTableTask, lastExecStatus); } catch (Exception ignore) { - System.out.println(ignore.getMessage()); + LogUtil.error(ignore); } try { dropDorisTable(TableUtils.tmpName(TableUtils.tableName(datasetTableId))); } catch (Exception ignore) { - System.out.println(ignore.getMessage()); + LogUtil.error(ignore); } } break; diff --git a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java index cc4478273c..572fc57f0f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java @@ -51,7 +51,6 @@ public class PermissionService { lists.forEach(chartCustomFilterDTO -> { chartCustomFilterDTO.setFieldId(field.getId()); if(datasetRowPermissions.getAuthTargetType().equalsIgnoreCase("sysParams")){ - System.out.println(values.get(chartCustomFilterDTO.getValue()).toString()); chartCustomFilterDTO.setValue(values.get(chartCustomFilterDTO.getValue()).toString()); } }); diff --git a/backend/src/main/java/io/dataease/service/sys/PluginService.java b/backend/src/main/java/io/dataease/service/sys/PluginService.java index 6f8b118046..9c570f4cfb 100644 --- a/backend/src/main/java/io/dataease/service/sys/PluginService.java +++ b/backend/src/main/java/io/dataease/service/sys/PluginService.java @@ -78,12 +78,10 @@ public class PluginService { String folder = pluginDir + "folder/"; try { ZipUtil.unzip(dest.getAbsolutePath(), folder); - // ZipUtils.unzip(dest, folder); } catch (Exception e) { DeFileUtils.deleteFile(pluginDir + "temp/"); DeFileUtils.deleteFile(folder); // 需要删除文件 - // e.printStackTrace(); LogUtil.error(e.getMessage(), e); DEException.throwException(e); } @@ -261,7 +259,6 @@ public class PluginService { } catch (InvocationTargetException e) { e.printStackTrace(); } - //BeanUtils.copyBean(result, myPlugin); if(result.getCategory().equalsIgnoreCase("datasource") && (StringUtils.isEmpty(result.getStore()) || !result.getStore().equalsIgnoreCase("default"))){ result.setStore("thirdpart"); } diff --git a/backend/src/main/java/io/dataease/service/sys/SysUserService.java b/backend/src/main/java/io/dataease/service/sys/SysUserService.java index 1206e01b13..97f27e9f53 100644 --- a/backend/src/main/java/io/dataease/service/sys/SysUserService.java +++ b/backend/src/main/java/io/dataease/service/sys/SysUserService.java @@ -140,7 +140,6 @@ public class SysUserService { sysUser.setLanguage("zh_CN"); sysUser.setFrom(3); sysUser.setIsAdmin(false); - // sysUser.setSub(ssoUserInfo.getSub()); sysUserMapper.insert(sysUser); SysUser dbUser = findOne(sysUser); if (null != dbUser && null != dbUser.getUserId()) { diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index ba56138dda..f492c4275b 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -246,7 +246,6 @@ public class LogService { } public void saveLog(SysLogDTO sysLogDTO) { - // String ip = ""; CurrentUserDto user = AuthUtils.getUser(); SysLogWithBLOBs sysLogWithBLOBs = BeanUtils.copyBean(new SysLogWithBLOBs(), sysLogDTO); if (CollectionUtils.isNotEmpty(sysLogDTO.getPositions())) { @@ -266,7 +265,6 @@ public class LogService { sysLogWithBLOBs.setNickName(sysLogDTO.getSourceName()); } - // sysLogWithBLOBs.setIp(ip); sysLogMapper.insert(sysLogWithBLOBs); } diff --git a/backend/src/main/resources/db/migration/V39__1.14.sql b/backend/src/main/resources/db/migration/V39__1.14.sql index 5fd7b0ab46..f9a0c115ff 100644 --- a/backend/src/main/resources/db/migration/V39__1.14.sql +++ b/backend/src/main/resources/db/migration/V39__1.14.sql @@ -79,3 +79,14 @@ SET `details` = '{\"width\":1600,\"height\":900,\"scale\":100,\"scaleWidth\":100,\"scaleHeight\":100,\"selfAdaption\":true,\"auxiliaryMatrix\":true,\"openCommonStyle\":true,\"panel\":{\"themeColor\":\"dark\",\"color\":\"#030B2E\",\"imageUrl\":{},\"backgroundType\":\"color\",\"gap\":\"yes\",\"resultMode\":\"all\",\"resultCount\":1000},\"aidedDesign\":{\"showGrid\":false,\"matrixBase\":4},\"refreshViewLoading\":true,\"refreshUnit\":\"minute\",\"refreshTime\":5,\"themeId\":\"c9d63e10-2827-11ed-afd9-69d86fea45a0\",\"chartInfo\":{\"chartTitle\":{\"show\":true,\"fontSize\":\"18\",\"color\":\"#FFFFFF\",\"hPosition\":\"left\",\"vPosition\":\"top\",\"isItalic\":false,\"isBolder\":true,\"remarkShow\":false,\"remark\":\"\",\"remarkBackgroundColor\":\"#ffffffff\",\"fontFamily\":\"Microsoft YaHei\",\"letterSpace\":\"0\",\"fontShadow\":false},\"chartColor\":{\"value\":\"default\",\"colors\":[\"#5470c6\",\"#91cc75\",\"#fac858\",\"#ee6666\",\"#73c0de\",\"#3ba272\",\"#fc8452\",\"#9a60b4\",\"#ea7ccc\"],\"alpha\":100,\"tableHeaderBgColor\":\"#4E81BB\",\"tableItemBgColor\":\"#131E42\",\"tableFontColor\":\"#ffffff\",\"tableStripe\":true,\"dimensionColor\":\"#ffffff\",\"quotaColor\":\"#4E81BB\",\"tableBorderColor\":\"#CCCCCC\",\"seriesColors\":[],\"areaBorderColor\":\"#EBEEF5\"},\"chartCommonStyle\":{\"backgroundColorSelect\":true,\"color\":\"#131E42\",\"alpha\":100,\"borderRadius\":5,\"innerPadding\":0},\"filterStyle\":{\"horizontal\":\"left\",\"vertical\":\"top\",\"color\":\"#FFFFFF\",\"brColor\":\"#4E4B4B\",\"wordColor\":\"#FFFFFF\",\"innerBgColor\":\"#131E42\"},\"tabStyle\":{\"headFontColor\":\"#FFFFFF\",\"headFontActiveColor\":\"#FFFFFF\",\"headBorderColor\":\"\",\"headBorderActiveColor\":\"\"}}}' WHERE `id` = 'system_2'; + +BEGIN; +DELETE from `sys_menu` where `menu_id` = 55; +DELETE from `sys_menu` where `menu_id` = 56; +COMMIT; + +BEGIN; +UPDATE `my_plugin` set cost = '60000', `creator` = 'DATAEASE' WHERE `module_name` = 'deplugin-xpack-backend'; +UPDATE `my_plugin` set cost = '0', `creator` = 'DATAEASE' WHERE `module_name` = 'view-bubblemap-backend'; +UPDATE `my_plugin` set cost = '0', `creator` = 'DATAEASE' WHERE `module_name` = 'view-symbolmap-backend'; +COMMIT; \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 8472e6bfe6..2eba3b2e91 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -85,7 +85,7 @@ i18n_no_all_delete_privilege_folder=This folder have sources which have no manag i18n_excel_field_repeat=Duplicate fields exist, please modify and try again. i18n_schema_is_empty=Database schema is empty \u7AD9\u5185\u6D88\u606F=Internal Messages -\u6240\u6709\u6D88\u606F==All Messages +\u6240\u6709\u6D88\u606F=All Messages \u672A\u8BFB\u6D88\u606F=Unread Messages \u5DF2\u8BFB\u6D88\u606F==Read Messages \u63A5\u6536\u7BA1\u7406=Receive Manage diff --git a/frontend/src/components/canvas/components/Editor/CloseBar.vue b/frontend/src/components/canvas/components/Editor/CloseBar.vue index 497c7edd97..6d0c2066f9 100644 --- a/frontend/src/components/canvas/components/Editor/CloseBar.vue +++ b/frontend/src/components/canvas/components/Editor/CloseBar.vue @@ -48,7 +48,7 @@ export default { padding-left: 3px; padding-right: 0px; cursor:pointer!important; - background-color: #3370ff; + background-color: var(--primary,#3370ff); } .bar-main i{ color: white; diff --git a/frontend/src/components/canvas/components/Editor/EditBar.vue b/frontend/src/components/canvas/components/Editor/EditBar.vue index c1314fe9c3..ce6e4d4d2d 100644 --- a/frontend/src/components/canvas/components/Editor/EditBar.vue +++ b/frontend/src/components/canvas/components/Editor/EditBar.vue @@ -372,7 +372,7 @@ export default { padding-left: 3px; padding-right: 0px; cursor:pointer!important; - background-color: #3370ff; + background-color: var(--primary,#3370ff); } .bar-main i{ color: white; diff --git a/frontend/src/components/canvas/components/Editor/EditBarView.vue b/frontend/src/components/canvas/components/Editor/EditBarView.vue index b9526d9bde..8a9259c9f8 100644 --- a/frontend/src/components/canvas/components/Editor/EditBarView.vue +++ b/frontend/src/components/canvas/components/Editor/EditBarView.vue @@ -4,10 +4,10 @@ - + - + @@ -63,6 +63,12 @@ export default { } }, computed: { + detailsShow(){ + return this.element.propValue.innerType !== 'richTextView' + }, + enlargeShow(){ + return this.element.propValue.innerType !== 'richTextView' + }, // gapStyle() { // return { // 'right': this.curGap + 'px!important' @@ -149,7 +155,7 @@ export default { padding-left: 3px!important; padding-right: 0px!important; cursor:pointer!important; - background-color: #3370ff; + background-color: var(--primary,#3370ff); } .bar-main i{ color: white; diff --git a/frontend/src/components/canvas/components/Editor/MobileCheckBar.vue b/frontend/src/components/canvas/components/Editor/MobileCheckBar.vue index 974ed5a6d6..fa5b521a1b 100644 --- a/frontend/src/components/canvas/components/Editor/MobileCheckBar.vue +++ b/frontend/src/components/canvas/components/Editor/MobileCheckBar.vue @@ -76,7 +76,7 @@ export default { padding-right: 1px; cursor:pointer!important; text-align: center; - background-color: #3370ff; + background-color: var(--primary,#3370ff); } .bar-main i{ color: white; diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index ba47aeebba..44096977d0 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -74,7 +74,7 @@ {{ $t('panel.aided_grid') }} - + @@ -600,10 +600,14 @@ export default { ::v-deep .el-switch__core::after { width: 14px; height: 14px; - margin-top: -1px; + margin-top: -1.3px; margin-bottom: 2px; } +.grid-active ::v-deep .el-switch__core::after { + margin-left: -14.5px; +} + .iconfont-tb { font-family: "iconfont" !important; font-size: 12px; diff --git a/frontend/src/components/msgCfm/index.js b/frontend/src/components/msgCfm/index.js index b4bd469128..140c4e6615 100644 --- a/frontend/src/components/msgCfm/index.js +++ b/frontend/src/components/msgCfm/index.js @@ -12,7 +12,7 @@ export default { }); }, handlerConfirm(options) { - let { title, content, type = 'danger', cb, confirmButtonText = this.$t('commons.delete'), showCancelButton = true, cancelButtonText = this.$t("commons.cancel") } = options; + let { title, content, type = 'danger', cb, confirmButtonText = this.$t('commons.delete'), showCancelButton = true, cancelButtonText = this.$t("commons.cancel"), cancelCb = () => {} } = options; let text = content ? `${ this.$t(title) }
${ this.$t(content) }` : this.$t(title); const dangerouslyUseHTMLString = Boolean(content); let customClass = `de-confirm de-confirm-fail ${ dangerouslyUseHTMLString && 'de-use-html'}` @@ -34,7 +34,9 @@ export default { .then(() => { cb(); }) - .catch(() => {}); + .catch(() => { + cancelCb() + }); }, }, }; diff --git a/frontend/src/components/msgCfm/keyEnter.js b/frontend/src/components/msgCfm/keyEnter.js new file mode 100644 index 0000000000..ca0d8f36a0 --- /dev/null +++ b/frontend/src/components/msgCfm/keyEnter.js @@ -0,0 +1,16 @@ +export default { + mounted() { + document.addEventListener('keypress', this.entryKey) + }, + destroyed() { + document.removeEventListener('keypress', this.entryKey) + }, + methods: { + entryKey(event) { + const keyCode = event.keyCode + if (keyCode === 13) { + this.$refs.search.blur() + } + }, + } +} \ No newline at end of file diff --git a/frontend/src/components/widget/DeWidget/DeDate.vue b/frontend/src/components/widget/DeWidget/DeDate.vue index c78db79bfa..cec51a1614 100644 --- a/frontend/src/components/widget/DeWidget/DeDate.vue +++ b/frontend/src/components/widget/DeWidget/DeDate.vue @@ -304,6 +304,31 @@ export default { color: var(--DateColor, #606266); } } + + .el-date-range-picker__time-header, + .el-date-picker__time-header { + border-bottom: 1px solid var(--BrDateColor, #dfe4ed) !important; + } + + .el-picker-panel__footer { + border-top: 1px solid var(--BrDateColor, #dfe4ed) !important; + background: var(--BgDateColor, #FFFFFF) !important; + } + + .el-date-range-picker__time-picker-wrap, + .el-date-picker__time-header { + .el-input__inner { + border:1px solid var(--BrDateColor, #dfe4ed) !important; + color: var(--DateColor, #606266); + background: var(--BgDateColor, #FFFFFF) !important; + } + } + + .el-picker-panel__link-btn:nth-child(2) { + color: #FFFFFF; + background: var(--BgDateColor, #FFFFFF) !important; + border:1px solid var(--BrDateColor, #dfe4ed) !important; + } .popper__arrow, diff --git a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue index a6c976adf3..7c8d782d95 100644 --- a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue +++ b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue @@ -214,6 +214,8 @@ export default { methods: { clearHandler() { this.value = this.element.options.attrs.multiple ? [] : null + this.checkAll = false + this.isIndeterminate = false }, resetDefaultValue(id) { if (this.inDraw && this.manualModify && this.element.id === id) { diff --git a/frontend/src/icons/svg/all-msg.svg b/frontend/src/icons/svg/all-msg.svg index 104bbacee3..320a433a2f 100644 --- a/frontend/src/icons/svg/all-msg.svg +++ b/frontend/src/icons/svg/all-msg.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/dashboard.svg b/frontend/src/icons/svg/dashboard.svg index 20de439dca..1b62f683a2 100644 --- a/frontend/src/icons/svg/dashboard.svg +++ b/frontend/src/icons/svg/dashboard.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/dept.svg b/frontend/src/icons/svg/dept.svg index 128dcfe2b5..0930bc5c3b 100644 --- a/frontend/src/icons/svg/dept.svg +++ b/frontend/src/icons/svg/dept.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/log.svg b/frontend/src/icons/svg/log.svg index c5b12c57aa..2c1a6704ec 100644 --- a/frontend/src/icons/svg/log.svg +++ b/frontend/src/icons/svg/log.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/password.svg b/frontend/src/icons/svg/password.svg index b0f6b44866..162b25f32f 100644 --- a/frontend/src/icons/svg/password.svg +++ b/frontend/src/icons/svg/password.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/peoples.svg b/frontend/src/icons/svg/peoples.svg index 13cecdc128..3a899eb8ce 100644 --- a/frontend/src/icons/svg/peoples.svg +++ b/frontend/src/icons/svg/peoples.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/plugins-new.svg b/frontend/src/icons/svg/plugins-new.svg index 7390a6252d..09668d959b 100644 --- a/frontend/src/icons/svg/plugins-new.svg +++ b/frontend/src/icons/svg/plugins-new.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/role.svg b/frontend/src/icons/svg/role.svg index 76524133b0..ae889b1942 100644 --- a/frontend/src/icons/svg/role.svg +++ b/frontend/src/icons/svg/role.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/sys-setting.svg b/frontend/src/icons/svg/sys-setting.svg index 3e6fb729e5..a85a89c5d4 100644 --- a/frontend/src/icons/svg/sys-setting.svg +++ b/frontend/src/icons/svg/sys-setting.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/src/icons/svg/task.svg b/frontend/src/icons/svg/task.svg index 7c5cf181ec..575ba4c18b 100644 --- a/frontend/src/icons/svg/task.svg +++ b/frontend/src/icons/svg/task.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index a5fc91d8f9..dfa08ce487 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -133,12 +133,12 @@ export default { commons: { no_result: 'No Result', manage_member: 'Managing members', - user_confirm_remove_cancel: 'Are you sure you want to remove the user from the role?', confirm_remove_cancel: 'Are you sure to delete the role?', + user_confirm_remove_cancel: 'Are you sure you want to remove the user from the role?', default_value: 'Default Value', params_value: 'Param Value', - publish: 'publish', input_role_name: 'Enter a role name', + publish: 'publish', unpublished: 'unpublished', default_pwd: 'Default Pwd', stop: 'Stop', @@ -159,9 +159,9 @@ export default { yes: 'Yes', no: 'No', reset: 'Reset', - gender: 'Gender', catalogue: 'Catalogue', button: 'Button', + gender: 'Gender', man: 'Man', woman: 'Woman', keep_secret: 'keep secret', @@ -192,6 +192,7 @@ export default { annotation: 'Annotation', clear: 'Clean', save: 'Save', + otherSave: 'Save as', update: 'Update', save_success: 'Saved successfully', delete_success: 'deleted successfully', @@ -400,6 +401,7 @@ export default { continue: 'continue', hour: 'hour', minute: 'minute', + day: 'day', by_task_name: 'Search by task name', message_receiving_management: 'Message receiving management', upload_failed: 'Upload failed', @@ -423,7 +425,6 @@ export default { uninstall: 'uninstall', relevant_content_found: 'No relevant content found', view_tasks: 'View tasks', - day: 'day', no_classification: 'No classification', no_template: 'No template', data_set_required: 'Data set (required)', @@ -602,6 +603,7 @@ export default { confirm_passwd: 'Confirm Password', change_password: 'Change Password', search_by_name: 'Search by name', + import_ldap: 'Import LDAP users', result_one: 'Results', clear_filter: 'Empty condition', recover_pwd: 'Restore to the original password?', @@ -834,7 +836,9 @@ export default { delete_this_category: 'Are you sure to delete this category?', edit_template: 'Edit template', edit_classification: 'Edit classification', - classification_name: 'Classification Name:' + classification_name: 'Classification Name:', + by_event_details: 'Search by event details', + password_input_error: 'Original password input error' }, chart: { rich_text_view_result_tips: 'The rich text view selects only the first result', @@ -1539,8 +1543,9 @@ export default { column_permission: { add: 'Add', edit: 'Edit', + please_select_field: 'Please select field', please_select_auth_type: 'Please select the authorization type', - please_select_auth_id: '请选择授权目标', + please_select_auth_id: 'Please select authorization obj', column_permission_not_empty: 'Please select authorization target', auth_type: 'Authorization type', auth_obj: 'Authorized object', @@ -1592,14 +1597,19 @@ export default { create: 'Create Data Source', type: 'Type', please_choose_type: 'Please select data source type', + please_choose_data_type: 'Please select the calculation mode', data_base: 'Database name', user_name: 'User Name', password: 'Password', host: 'Host name / IP address', + doris_host: 'Doris Addr', + query_port: 'Query Port', + http_port: 'Http Port', port: 'Port', datasource_url: 'URL address', please_input_datasource_url: 'Please enter Elasticsearch 地址,e.g: http://es_host:es_port', please_input_data_base: 'Please enter the database name', + please_select_oracle_type: 'Select connection type', please_input_user_name: 'Please enter user name', please_input_password: 'Please enter Password', please_input_host: 'Please enter host', @@ -1631,9 +1641,6 @@ export default { min_pool_size: 'Minimum of connections', max_pool_size: 'Maximum connection', max_idle_time: 'Maximum idle (seconds)', - doris_host: 'Doris Address', - query_port: 'Query Port', - http_port: 'Http Port', bucket_num: 'Bucket number', replication_num: 'Replication number', please_input_bucket_num: 'Please enter Bucket number', @@ -1646,10 +1653,15 @@ export default { please_input_max_pool_size: 'Please enter the maximum number of connections', please_input_max_idle_time: 'Please enter the maximum idle (seconds)', please_input_acquire_increment: 'Please enter the growth number', + please_input_query_timeout: 'Please enter query timeout', please_input_connect_timeout: 'Please enter the connection timeout (seconds)', no_less_then_0: 'Parameters in advanced settings cannot be less than zero', port_no_less_then_0: 'Port cannot be less than zero', priority: 'Advanced setting', + data_mode: 'Data mode', + direct: 'Direct Mode', + extract: 'Extraction mode', + all_compute_mode: 'Direct connection and extraction mode', extra_params: 'Extra JDBC connection string', please_input_dataPath: 'Please enter the JsonPath data path', warning: 'Contains invalid table', @@ -1907,6 +1919,8 @@ export default { fontWeight: 'FontWeight', lineHeight: 'LineHeight', letterSpacing: 'LetterSpacing', + padding: 'Internal spacing', + margin: 'Outer space', textAlign: 'TextAlign', opacity: 'Opacity', verticalAlign: 'Vertical Align', @@ -1995,6 +2009,9 @@ export default { default_settings: 'Default Settings', choose_background: 'Choose Component Background', choose_background_tips: 'The component`s own background settings will overwrite the current settings', + setting_background: 'Set background', + setting_jump: 'Jump settings', + select_view: 'Please select a view...', visual: 'Visual', prohibit_multiple: 'Prohibit multiple fields in the same dataset', be_empty_dir: 'is empty dir' @@ -2013,9 +2030,6 @@ export default { un_install: 'Uninstall', uninstall_confirm: 'Comfirm to uninstall the plugin?', uninstall_cancel: 'Cancel uninstall plugin', - setting_background: 'BackGround', - setting_jump: 'Jump Setting', - select_view: 'Select View', un_install_success: 'Uninstall is successful and restart takes effect', un_install_error: 'Uninstall failed, please contact the administrator' }, @@ -2027,6 +2041,11 @@ export default { loginTitle: 'Login page title', title: 'System name', advice_size: 'Advice picture size', + theme: 'Theme color', + topMenuColor: 'Head background', + topMenuActiveColor: 'Head selection background', + topMenuTextColor: 'Head font color', + topMenuTextActiveColor: 'Head font selected color', themeLight: 'Light', themeDark: 'Dark', themeCustom: 'Custom', @@ -2038,7 +2057,6 @@ export default { defaultHomeLink: 'Default is the system built-in home page', showFoot: 'Show login page footer', footContent: 'Foot content' - }, auth: { no_item_selected: 'Please select organization、user or role on the left', @@ -2054,6 +2072,7 @@ export default { role: 'Role', user: 'User', set_rules: 'Set rules', + sysParams: 'System variable', sysParams_type: { user_id: 'User ID', user_name: 'User Name', @@ -2074,6 +2093,7 @@ export default { datasetAuthHead: 'All Dataset', chartAuthHead: 'All Chart', panelAuthHead: 'All Chart', + menuAuthHead: 'All menus and actions', view: 'View', use: 'Use', export: 'Export', @@ -2081,14 +2101,14 @@ export default { row_column: 'Row and column permission settings', row_permission: 'Row permission rules', enable_row: 'Enable row permissions', - add_condition: 'Add condition', - add_relationship: 'Add relationship', white_list: 'White list', white_user_not: 'The above permission rules do not take effect for white list users', organization_or_role: 'Please select an organization or role', column_permission: 'Column permission rule', enable_column: 'Enable column permissions', search_by_field: 'Search by field name', + add_condition: 'Add condition', + add_relationship: 'Add relationship', filter_fields: 'Filter fields', selct_filter_fields: 'Please select a filter field', enter_keywords: 'Please enter keywords', @@ -2198,7 +2218,8 @@ export default { i18n_msg_type_dataset_sync_faild: 'Dataset synchronization failed', i18n_msg_type_all: 'All type', i18n_msg_type_ds_invalid: 'Datasource invalid', - channel_inner_msg: 'On site news' + channel_inner_msg: 'On site news', + channel_email_msg: 'Mail notification' }, denumberrange: { label: 'Number range', @@ -2354,8 +2375,7 @@ export default { cmonth: 'This Month', cquarter: 'This Quarter', lquarter: 'Last Quarter', - cyear: 'This Year', - openHomePage: 'Show Home Page' + cyear: 'This Year' }, dynamic_year: { fix: 'Fixed Year', @@ -2368,7 +2388,8 @@ export default { dynamic: 'Dynamic Month', current: 'This Month', last: 'Last Month', - firstOfYear: 'First month of this year' + firstOfYear: 'First month of this year', + sameMonthLastYear: 'Same month last year' }, wizard: { welcome_title: 'Welcome To Use DataEase', @@ -2417,7 +2438,9 @@ export default { plugin_style: { border: 'Border' }, - + sql_variable: { + variable_mgm: 'Parameter setting' + }, map_setting: { area_level: 'Area Level', area_code: 'Area Code', @@ -2436,6 +2459,8 @@ export default { attr: 'Attribute', empty: 'Empty', please_select_map: 'Please select a range of map' - } + }, + 'I18N_USER_TEMPLATE_ERROR': 'Template file error', + 'i18n_max_user_import_size': 'File size exceeds 10M' } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index b6eedd0e53..12065f458b 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -836,7 +836,9 @@ export default { delete_this_category: '確定删除該分類嗎?', edit_template: '編輯模版', edit_classification: '編輯分類', - classification_name: '分類名稱' + classification_name: '分類名稱', + by_event_details: '通過事件詳情蒐索', + password_input_error: '原始密碼輸入錯誤' }, chart: { rich_text_view_result_tips: '富文本只选取第一条结果', @@ -2458,5 +2460,7 @@ export default { attr: '屬性', empty: '無數據', please_select_map: '請先選擇地圖範圍' - } + }, + 'I18N_USER_TEMPLATE_ERROR': '模版錯誤', + 'i18n_max_user_import_size': '文件最大不能超過10M' } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index ab944e0e3c..0a09f968bf 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -836,7 +836,9 @@ export default { delete_this_category: '确定删除该分类吗?', edit_template: '编辑模版', edit_classification: '编辑分类', - classification_name: '分类名称' + classification_name: '分类名称', + by_event_details: '通过事件详情搜索', + password_input_error: '原始密码输入错误' }, chart: { rich_text_view_result_tips: '富文本只选取第一条结果', @@ -2458,5 +2460,7 @@ export default { attr: '属性', empty: '无数据', please_select_map: '请先选择地图范围' - } + }, + 'I18N_USER_TEMPLATE_ERROR': '模版错误', + 'i18n_max_user_import_size': '文件最大不能超过10M' } diff --git a/frontend/src/settings.js b/frontend/src/settings.js index 2a4f98b21d..24e96017fc 100644 --- a/frontend/src/settings.js +++ b/frontend/src/settings.js @@ -7,6 +7,7 @@ module.exports = { IdTokenKey: 'IdToken', AccessTokenKey: 'AccessToken', CASSESSION: 'JSESSIONID', + DownErrorKey: 'de-down-error-msg', /** * @type {boolean} true | false diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js index f83f7a7acc..91207ad0ea 100644 --- a/frontend/src/store/index.js +++ b/frontend/src/store/index.js @@ -244,6 +244,21 @@ const data = { }) }, + clearAllViewFilter(state) { + state.componentData.forEach(item => { + if (item.type === 'view' && item.filters && item.filters.length) { + item.filters = [] + } + if (item.type === 'de-tabs' && item.options.tabList && item.options.tabList.length) { + item.options.tabList.forEach(tab => { + if (tab.content && tab.content.type === 'view' && tab.content.filters && tab.content.filters.length) { + tab.content.filters = [] + } + }) + } + }) + }, + addViewFilter(state, data) { const condition = formatCondition(data) const vValid = valueValid(condition) @@ -505,6 +520,7 @@ const data = { }, // 启用移动端布局 openMobileLayout(state) { + this.commit('clearAllViewFilter') state.componentDataCache = null state.componentDataCache = JSON.stringify(state.componentData) state.pcComponentData = state.componentData diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index c2925ce407..bec415c22f 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -557,12 +557,6 @@ div:focus { color: var(--TextPrimary); } -.blackTheme .el-button--default { - background-color: var(--MainBG) !important; - color: var(--Main) !important; -} - - .blackTheme .title-text { color: var(--TextPrimary) !important; @@ -627,28 +621,6 @@ div:focus { background-color: var(--ContentBG); } -.blackTheme .el-select-dropdown__item.hover { - background-color: #171B22 !important; -} - -.blackTheme .el-select-dropdown__item:hover { - background-color: #171B22 !important; -} - -.blackTheme .el-dropdown-menu__item:not(.is-disabled):hover { - background-color: #171B22 !important; -} - -.blackTheme .el-dropdown-menu__item:focus { - background-color: #171B22 !important; -} - - -.blackTheme .el-dropdown-menu__item--divided:before { - background-color: #000000 !important; -} - - .blackTheme .el-card__header { border-color: var(--TableBorderColor) !important; } @@ -685,20 +657,6 @@ div:focus { } - -.blackTheme .el-message-box__btns { - .el-button--default:not(.el-button--primary) { - background-color: #171b22; - color: #2681ff; - } - - .el-button--primary { - color: #21333b; - background-color: #2681ff; - border-color: #2681ff; - } -} - .blackTheme .vue-treeselect__menu { border: 1px solid var(--TableBorderColor, #cfcfcf); background: var(--MainBG, #fff); @@ -1190,6 +1148,9 @@ div:focus { .el-input__prefix { display: none; } + .el-icon-circle-close { + margin-right: 20px; + } } .icon-calendar-outlined { @@ -1212,4 +1173,150 @@ div:focus { font-size: 16px; } } +} + +.user-drawer, +.user-drawer-task { + .el-drawer__body-cont { + height: 100%; + box-sizing: border-box; + overflow: auto; + width: 100%; + padding-bottom: 80px; + } + .el-drawer__header { + padding: 16px 24px; + margin: 0; + font-family: PingFang SC; + font-size: 16px; + font-weight: 500; + line-height: 24px; + color: var(--deTextPrimary, #1f2329); + position: relative; + box-sizing: border-box; + height: 57px; + mix-blend-mode: normal; + border-bottom: 1px solid var(--deComBorderColor50, rgba(187, 191, 196, 0.5)); + + .el-drawer__close-btn { + position: absolute; + right: 24px; + top: 16px; + padding: 4px; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center + } + + .el-drawer__close-btn:hover { + background: #e9e9ea; + } + } + + .el-drawer__body { + padding: 12px 24px 24px 24px; + position: relative; + } + + .filter { + display: flex; + min-height: 46px; + > :nth-child(1) { + color: var(--deTextSecondary, #1f2329); + font-family: "PingFang SC"; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 24px; + white-space: nowrap; + width: 116px; + } + .filter-item { + flex: 1; + .item, + .more { + font-family: PingFang SC; + white-space: nowrap; + font-size: 14px; + font-weight: 400; + line-height: 24px; + margin-right: 12px; + text-align: center; + padding: 1px 6px; + background: var(--deTextPrimary5, #f5f6f7); + color: var(--deTextPrimary, #1f2329); + border-radius: 2px; + cursor: pointer; + display: inline-block; + margin-bottom: 12px; + } + + .active, + .more:hover{ + background: var(--primary10, rgba(51, 112, 255, 0.1)); + color: var(--primaryselect, #0c296e); + } + .more { + white-space: nowrap; + } + } + } + + .btn { + border-radius: 4px; + padding: 5px 26px 5px 26px; + font-family: PingFang SC; + font-size: 14px; + font-weight: 400; + line-height: 20px; + letter-spacing: 0px; + text-align: center; + border: none; + box-sizing: border-box; + } + + .normal { + color: #1f2329; + border: 1px solid #bbbfc4; + margin-left: 12px; + } + + .foot { + position: absolute; + height: 80px; + width: 100%; + padding: 24px; + right: 0; + bottom: 0; + text-align: right; + background-color: #fff; + box-shadow: 0px -1px 4px rgba(0, 0, 0, 0.05); + } +} +.user-popper { + padding: 0; + background: #fff; + .popper__arrow { + display: none; + } +} +.tree-select { + .el-select-dropdown__empty, + .el-scrollbar__wrap, + .popper__arrow { + display: none !important; + } +} + +.user-popper.dept { + height: 400px; + overflow: auto; + +} +.upload-user{ + margin-bottom: 5px; + .el-upload{ + width: 100%; + } } \ No newline at end of file diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js index be504d62b5..313bf12fcb 100644 --- a/frontend/src/utils/request.js +++ b/frontend/src/utils/request.js @@ -11,6 +11,7 @@ import Vue from 'vue' const TokenKey = Config.TokenKey const RefreshTokenKey = Config.RefreshTokenKey const LinkTokenKey = Config.LinkTokenKey +const DownErrorKey = Config.DownErrorKey import Cookies from 'js-cookie' const getTimeOut = () => { @@ -98,6 +99,9 @@ service.interceptors.response.use(response => { response.config.loading && tryHideLoading(store.getters.currentPath) checkAuth(response) Vue.prototype.$currentHttpRequestList.delete(response.config.url) + if (checkDownError(response)) { + return response + } return response.data }, error => { const config = error.response && error.response.config || error.config @@ -114,7 +118,14 @@ service.interceptors.response.use(response => { !config.hideMsg && (!headers['authentication-status']) && $error(msg) return Promise.reject(error) }) - +const checkDownError = response => { + if (response.request && response.request.responseType && response.request.responseType === 'blob' && response.headers && response.headers['de-down-error-msg']) { + const msg = i18n.t(response.headers[DownErrorKey]) + $error(msg) + return true + } + return false +} const checkAuth = response => { if (response.headers['authentication-status'] === 'login_expire') { const message = i18n.t('login.expires') diff --git a/frontend/src/views/background/index.vue b/frontend/src/views/background/index.vue index fb078f4449..5b1ff9de34 100644 --- a/frontend/src/views/background/index.vue +++ b/frontend/src/views/background/index.vue @@ -132,7 +132,7 @@ import { queryBackground } from '@/api/background/background' import BackgroundItem from '@/views/background/BackgroundItem' import { mapState } from 'vuex' -import { deepCopy } from '@/components/canvas/utils/utils' +import {deepCopy, imgUrlTrans} from '@/components/canvas/utils/utils' import { COLOR_PANEL } from '@/views/chart/chart/chart' import { uploadFileResult } from '@/api/staticResource/staticResource' import { COMMON_BACKGROUND_NONE } from '@/components/canvas/custom-component/component-list' @@ -171,7 +171,7 @@ export default { methods: { init() { if (this.curComponent && this.curComponent.commonBackground && this.curComponent.commonBackground.outerImage && typeof (this.curComponent.commonBackground.outerImage) === 'string') { - this.fileList.push({ url: this.curComponent.commonBackground.outerImage }) + this.fileList.push({ url: imgUrlTrans(this.curComponent.commonBackground.outerImage) }) } this.backgroundOrigin = deepCopy(this.curComponent.commonBackground ? this.curComponent.commonBackground : COMMON_BACKGROUND_NONE) this.queryBackground() diff --git a/frontend/src/views/chart/chart/gauge/gauge_antv.js b/frontend/src/views/chart/chart/gauge/gauge_antv.js index 3d67f8f5cb..86473dab33 100644 --- a/frontend/src/views/chart/chart/gauge/gauge_antv.js +++ b/frontend/src/views/chart/chart/gauge/gauge_antv.js @@ -7,7 +7,7 @@ import { valueFormatter } from '@/views/chart/chart/formatter' let labelFormatter = null export function baseGaugeOptionAntV(plot, container, chart, action, scale = 1) { - let min, max, labelContent, startAngel, endAngel, tickCount + let min, max, labelContent, startAngel, endAngel // theme const theme = getTheme(chart) // data @@ -31,7 +31,6 @@ export function baseGaugeOptionAntV(plot, container, chart, action, scale = 1) { min = size.gaugeMin ? size.gaugeMin : DEFAULT_SIZE.gaugeMin max = size.gaugeMax ? size.gaugeMax : DEFAULT_SIZE.gaugeMax } - tickCount = size.gaugeTickCount ? size.gaugeTickCount : DEFAULT_SIZE.gaugeTickCount startAngel = parseInt(size.gaugeStartAngle) * Math.PI / 180 endAngel = parseInt(size.gaugeEndAngle) * Math.PI / 180 } @@ -101,13 +100,13 @@ export function baseGaugeOptionAntV(plot, container, chart, action, scale = 1) { content: labelContent }, axis: { - tickInterval: 1 / tickCount, + tickInterval: 0.2, label: { style: { fontSize: getScaleValue(14, scale) // 刻度值字体大小 }, formatter: function(v) { - return Number(v) * (max - min) + min + return v === '0' ? v : (v * 100 + '%') } }, tickLine: { diff --git a/frontend/src/views/chart/chart/table/table-info.js b/frontend/src/views/chart/chart/table/table-info.js index 563d5cac29..0f44df6dd3 100644 --- a/frontend/src/views/chart/chart/table/table-info.js +++ b/frontend/src/views/chart/chart/table/table-info.js @@ -581,8 +581,8 @@ function mappingColor(value, defaultColor, field, type) { } } else { // time - const tv = new Date(t.value + ' GMT+8').getTime() - const v = new Date(value + ' GMT+8').getTime() + const tv = new Date(t.value.replace(/-/g, '/') + ' GMT+8').getTime() + const v = new Date(value.replace(/-/g, '/') + ' GMT+8').getTime() if (t.term === 'eq') { if (v === tv) { color = t[type] diff --git a/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue b/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue index 9eacabd402..4d91ed5a9a 100644 --- a/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue +++ b/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue @@ -384,9 +384,9 @@ @change="changeBarSizeCase('gaugeEndAngle')" /> - - - + + + diff --git a/frontend/src/views/chart/components/table/TableNormal.vue b/frontend/src/views/chart/components/table/TableNormal.vue index 43c161e6d7..973b17a973 100644 --- a/frontend/src/views/chart/components/table/TableNormal.vue +++ b/frontend/src/views/chart/components/table/TableNormal.vue @@ -200,6 +200,13 @@ export default { datas = [] this.resetPage() } + datas.forEach(item =>{ + Object.keys(item).forEach(key=> { + if(typeof item[key] === 'object'){ + item[key] = "" + } + }) + }) this.$refs.plxTable.reloadData(datas) this.$nextTick(() => { this.initStyle() diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 8b62a745ee..f4450cf46a 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -375,7 +375,7 @@ $t('chart.drag_block_word_cloud_label') }}
{{ $t('chart.drag_block_label') }} - / + / {{ $t('chart.dimension') }} {{ $t('chart.drag_block_word_cloud_size') }} - / + / {{ $t('chart.quota') }}
{ if (!res.data) { - this.msg = this.$t('pblink.pwd_error') + this.msg = this.$t('system_parameter_setting.password_input_error') } else { this.$emit('fresh-token') } diff --git a/frontend/src/views/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue b/frontend/src/views/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue index 9d091f55e4..687d98a346 100644 --- a/frontend/src/views/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue +++ b/frontend/src/views/panel/SubjectSetting/PanelStyle/BackgroundSelector.vue @@ -52,6 +52,8 @@ import { mapState } from 'vuex' import { deepCopy } from '@/components/canvas/utils/utils' import { COLOR_PANEL } from '@/views/chart/chart/chart' import { uploadFileResult } from '@/api/staticResource/staticResource' +import {imgUrlTrans} from "@/components/canvas/utils/utils"; + export default { name: 'BackgroundSelector', @@ -77,7 +79,7 @@ export default { // 初始化赋值 this.panel = this.canvasStyleData.panel if (this.panel.imageUrl && typeof (this.panel.imageUrl) === 'string') { - this.fileList.push({ url: this.panel.imageUrl }) + this.fileList.push({ url: imgUrlTrans(this.panel.imageUrl) }) } }, methods: { @@ -111,7 +113,7 @@ export default { uploadFileResult(file.file, (fileUrl) => { _this.$store.commit('canvasChange') _this.panel.imageUrl = fileUrl - _this.fileList = [{ url: this.panel.imageUrl }] + _this.fileList = [{ url: imgUrlTrans(this.panel.imageUrl) }] _this.commitStyle() }) }, diff --git a/frontend/src/views/panel/filter/filterDialog.vue b/frontend/src/views/panel/filter/filterDialog.vue index d0f11da9a4..69df767462 100644 --- a/frontend/src/views/panel/filter/filterDialog.vue +++ b/frontend/src/views/panel/filter/filterDialog.vue @@ -181,7 +181,7 @@
- + @@ -297,7 +297,6 @@ export default { datasetParams: [] }, currentElement: null, - tableFieldsMap: {}, tempTreeDatas: null, showTips: false } @@ -632,7 +631,6 @@ export default { loadField(tableId) { fieldListWithPermission(tableId).then(res => { let datas = res.data - this.$set(this.tableFieldsMap, tableId, JSON.parse(JSON.stringify(datas))) if (this.widget && this.widget.filterFieldMethod) { datas = this.widget.filterFieldMethod(datas) } @@ -643,7 +641,6 @@ export default { comLoadField(tableId) { fieldListWithPermission(tableId).then(res => { let datas = res.data - this.$set(this.tableFieldsMap, tableId, JSON.parse(JSON.stringify(datas))) if (this.widget && this.widget.filterFieldMethod) { datas = this.widget.filterFieldMethod(datas) } diff --git a/frontend/src/views/panel/filter/filterMain/FilterHead.vue b/frontend/src/views/panel/filter/filterMain/FilterHead.vue index 21826c658c..859c45fa90 100644 --- a/frontend/src/views/panel/filter/filterMain/FilterHead.vue +++ b/frontend/src/views/panel/filter/filterMain/FilterHead.vue @@ -18,7 +18,7 @@ > - + {{ $t('panel.drag_here') }} @@ -34,6 +34,8 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/frontend/src/views/system/log/index.vue b/frontend/src/views/system/log/index.vue index a900196581..6c734f4365 100644 --- a/frontend/src/views/system/log/index.vue +++ b/frontend/src/views/system/log/index.vue @@ -9,7 +9,7 @@ { @@ -271,11 +267,7 @@ export default { conditions: [...this.cacheCondition], }; if (this.nikeName) { - param.conditions.push({ - field: `nick_name`, - operator: "like", - value: this.nikeName, - }); + param.keyWord = this.nikeName; } const { currentPage, pageSize } = this.paginationConfig; logGrid(currentPage, pageSize, param).then((response) => { diff --git a/frontend/src/views/system/plugin/index.vue b/frontend/src/views/system/plugin/index.vue index e83333b811..acb687e30a 100644 --- a/frontend/src/views/system/plugin/index.vue +++ b/frontend/src/views/system/plugin/index.vue @@ -41,12 +41,8 @@
-
@@ -225,9 +221,9 @@ export default { del(row) { if (row.pluginId < 4) return; const options = { - title: "确定卸载该插件?", - content: "卸载并重启服务器之后才能生效", - confirmButtonText: this.$t("卸载"), + title: "components.uninstall_the_plugin", + content: "components.it_takes_effect", + confirmButtonText: this.$t("components.uninstall"), type: "primary", cb: () => { uninstall(row.pluginId) @@ -260,7 +256,7 @@ export default { margin-right: 12px; } .el-input__inner { - background: #ffffff !important; + background: var(--ContentBG, #ffffff) !important; } } @@ -275,8 +271,8 @@ export default { .de-card-plugin { width: 270px; min-height: 188px; - background: #ffffff; - border: 1px solid #dee0e3; + background: var(--ContentBG, #ffffff); + border: 1px solid var(--deCardStrokeColor, #dee0e3); border-radius: 4px; margin: 0 24px 24px 0; &:hover { @@ -412,7 +408,7 @@ export default { display: inline-block; margin-left: 12px; .value { - color: #1f2329; + color: var(--TextPrimary, #1F2329); } } } diff --git a/frontend/src/views/system/settings/AppearanceSetting.vue b/frontend/src/views/system/settings/AppearanceSetting.vue deleted file mode 100644 index abcafc60a2..0000000000 --- a/frontend/src/views/system/settings/AppearanceSetting.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - diff --git a/frontend/src/views/system/task/DatasetTaskList.vue b/frontend/src/views/system/task/DatasetTaskList.vue index 4679f9851f..7e022272b3 100644 --- a/frontend/src/views/system/task/DatasetTaskList.vue +++ b/frontend/src/views/system/task/DatasetTaskList.vue @@ -107,7 +107,8 @@ > @@ -127,7 +128,8 @@ :label="$t('dataset.task.dataset')" /> @@ -146,7 +148,8 @@