From 8925c7e0df2500fca5c2c1b25f9536f04089230e Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 20 Oct 2022 15:27:51 +0800 Subject: [PATCH 01/14] =?UTF-8?q?refactor:=20=E6=8B=BC=E5=86=99=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/auth/service/impl/AuthUserServiceImpl.java | 4 ++-- .../src/main/java/io/dataease/plugins/server/SSOServer.java | 2 +- .../main/java/io/dataease/provider/datasource/EsProvider.java | 2 +- .../java/io/dataease/provider/datasource/JdbcProvider.java | 2 +- .../main/java/io/dataease/service/chart/ChartViewService.java | 2 +- .../io/dataease/service/chart/ViewPluginBaseServiceImpl.java | 2 +- .../java/io/dataease/service/dataset/DataSetTableService.java | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java index fdacc9c541..f862f84273 100644 --- a/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java +++ b/backend/src/main/java/io/dataease/auth/service/impl/AuthUserServiceImpl.java @@ -182,7 +182,7 @@ public class AuthUserServiceImpl implements AuthUserService { if (beansOfType.keySet().size() == 0) return false; OidcXpackService oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); if (ObjectUtils.isEmpty(oidcXpackService)) return false; - return oidcXpackService.isSuuportOIDC(); + return oidcXpackService.isSupportOIDC(); } @Override @@ -191,7 +191,7 @@ public class AuthUserServiceImpl implements AuthUserService { if (beansOfType.keySet().size() == 0) return false; CasXpackService casXpackService = SpringContextUtil.getBean(CasXpackService.class); if (ObjectUtils.isEmpty(casXpackService)) return false; - return casXpackService.suuportCas(); + return casXpackService.supportCas(); } @Override diff --git a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java index 05c8dd82a3..403aa3bbd8 100644 --- a/backend/src/main/java/io/dataease/plugins/server/SSOServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/SSOServer.java @@ -57,7 +57,7 @@ public class SSOServer { DEException.throwException("缺少oidc插件"); } oidcXpackService = SpringContextUtil.getBean(OidcXpackService.class); - Boolean suuportOIDC = oidcXpackService.isSuuportOIDC(); + Boolean suuportOIDC = oidcXpackService.isSupportOIDC(); if (!suuportOIDC) { DEException.throwException("未开启oidc"); } diff --git a/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java b/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java index 6d7eb58bd5..2323e58b35 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/EsProvider.java @@ -98,7 +98,7 @@ public class EsProvider extends Provider { } @Override - public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception { + public List getTableFields(DatasourceRequest datasourceRequest) throws Exception { datasourceRequest.setQuery("desc " + String.format(EsSqlLConstants.KEYWORD_TABLE, datasourceRequest.getTable())); List tableFields = new ArrayList<>(); try { 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 105fc579fc..1409fa620b 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -73,7 +73,7 @@ public class JdbcProvider extends DefaultJdbcProvider { @Override - public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception { + public List getTableFields(DatasourceRequest datasourceRequest) throws Exception { if (datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo")) { datasourceRequest.setQuery("select * from " + datasourceRequest.getTable()); return fetchResultField(datasourceRequest); 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 f5a8c0945d..899acdebf9 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -1193,7 +1193,7 @@ public class ChartViewService { PluginViewParam pluginViewParam = new PluginViewParam(); PluginViewSetImpl pluginViewSet = BeanUtils.copyBean(new PluginViewSetImpl(), table); pluginViewSet.setDsType(ds.getType()); - pluginViewSet.setTabelId(table.getId()); + pluginViewSet.setTableId(table.getId()); pluginViewSet.setDs(ds); PluginViewLimit pluginViewLimit = BeanUtils.copyBean(new PluginViewLimit(), view); diff --git a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java index 5e992c7ee6..be7e66c44d 100644 --- a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java +++ b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java @@ -105,7 +105,7 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { String tableName = null; DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(pluginViewSet.getInfo(), DataTableInfoDTO.class); if (ObjectUtils.isNotEmpty(pluginViewSet.getMode()) && 1 == pluginViewSet.getMode()) { - tableName = TableUtils.tableName(pluginViewSet.getTabelId()); + tableName = TableUtils.tableName(pluginViewSet.getTableId()); }else { switch (DatasetType.getEnumObjByKey(pluginViewSet.getType())) { case DB: 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 5822c8631b..7f6e02e43c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -510,7 +510,7 @@ public class DataSetTableService { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(ds); datasourceRequest.setTable(new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class).getTable()); - return datasourceProvider.getTableFileds(datasourceRequest); + return datasourceProvider.getTableFields(datasourceRequest); } public Map> getFieldsFromDE(DataSetTableRequest dataSetTableRequest) From cf8ba026330e2de58522bb4ecef1b340d4638a98 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 20 Oct 2022 17:29:25 +0800 Subject: [PATCH 02/14] =?UTF-8?q?feat(=E5=AE=9A=E6=97=B6=E6=8A=A5=E5=91=8A?= =?UTF-8?q?):=20=E8=A7=86=E5=9B=BE=E6=95=B0=E6=8D=AE=E6=9E=84=E9=80=A0?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=BF=87=E6=BB=A4=E5=99=A8=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chart/FilterBuildTemplate.java | 24 +- .../service/chart/build/TimeBuild.java | 212 ++++++++++++++++++ .../service/chart/build/TimeYearBuild.java | 73 ------ .../chart/build/time/TimeDateBuild.java | 79 +++++++ .../chart/build/time/TimeDateRangeBuild.java | 149 ++++++++++++ .../chart/build/time/TimeMonthBuild.java | 55 +++++ .../chart/build/time/TimeYearBuild.java | 47 ++++ 7 files changed, 559 insertions(+), 80 deletions(-) create mode 100644 backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java delete mode 100644 backend/src/main/java/io/dataease/service/chart/build/TimeYearBuild.java create mode 100644 backend/src/main/java/io/dataease/service/chart/build/time/TimeDateBuild.java create mode 100644 backend/src/main/java/io/dataease/service/chart/build/time/TimeDateRangeBuild.java create mode 100644 backend/src/main/java/io/dataease/service/chart/build/time/TimeMonthBuild.java create mode 100644 backend/src/main/java/io/dataease/service/chart/build/time/TimeYearBuild.java diff --git a/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java b/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java index d0abe4a2a2..11d0539c63 100644 --- a/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java +++ b/backend/src/main/java/io/dataease/service/chart/FilterBuildTemplate.java @@ -23,10 +23,10 @@ public abstract class FilterBuildTemplate { List> filters = componentsFilter(components, "custom", null, null); - if(ObjectUtils.isNotEmpty(searchButton)) { + if (ObjectUtils.isNotEmpty(searchButton)) { Map options = (Map) searchButton.get("options"); Map attrs = (Map) options.get("attrs"); - Boolean customRange = (Boolean)attrs.get("customRange"); + Boolean customRange = (Boolean) attrs.get("customRange"); Boolean autoTrigger = (Boolean) attrs.get("autoTrigger"); List filterIds = (List) attrs.get("filterIds"); if (!autoTrigger) { // 不是自动触发 // 需要过滤掉按钮关联的条件组件 @@ -77,7 +77,7 @@ public abstract class FilterBuildTemplate { return ObjectUtils.isNotEmpty(condition) && CollectionUtils.isNotEmpty(condition.getValue()) && StringUtils.isNotBlank(condition.getValue().get(0)); } - private static Boolean viewIdMatch(List viewIds, String viewId) { + private static Boolean viewIdMatch(List viewIds, String viewId) { return CollectionUtils.isEmpty(viewIds) || viewIds.contains(viewId); } @@ -88,7 +88,7 @@ public abstract class FilterBuildTemplate { Map component = filterParamTO.getComponent(); Map attrs = (Map) ((Map) component.get("options")).get("attrs"); String fieldId = attrs.get("fieldId").toString(); - List viewIds = (List)attrs.get("viewIds"); + List viewIds = (List) attrs.get("viewIds"); List parameters = (List) attrs.get("parameters"); Boolean multiple = ObjectUtils.isNotEmpty(attrs.get("multiple")) && (Boolean) attrs.get("multiple"); if (isTree && !multiple && CollectionUtils.isNotEmpty(value)) { @@ -147,9 +147,9 @@ public abstract class FilterBuildTemplate { } public static List> componentsFilter(List> components, String type, - String componentType, String serviceName) { + String componentType, String serviceName) { return components.stream().filter(component -> { - String ctype = Optional.ofNullable(component.get("type")).orElse("").toString(); + String ctype = Optional.ofNullable(component.get("type")).orElse("").toString(); String cComponentType = Optional.ofNullable(component.get("component")).orElse("").toString(); String cServiceName = Optional.ofNullable(component.get("serviceName")).orElse("").toString(); @@ -180,10 +180,20 @@ public abstract class FilterBuildTemplate { beanMapping.put("numberRangeWidget", "numberRangeWidget"); beanMapping.put("textSelectTreeWidget", "textSelectTreeWidget"); beanMapping.put("textInputWidget", "textInputWidget"); + beanMapping.put("timeDateWidget", "timeDateWidget"); + beanMapping.put("timeMonthWidget", "timeMonthWidget"); + beanMapping.put("timeYearWidget", "timeYearWidget"); + beanMapping.put("timeDateRangeWidget", "timeDateRangeWidget"); String beanName = beanMapping.get(serviceName); if (StringUtils.isBlank(beanName) && StringUtils.containsIgnoreCase(serviceName, "select")) { beanName = "selectWidget"; } - return (FilterBuildTemplate)CommonBeanFactory.getBean(beanName); + + return (FilterBuildTemplate) CommonBeanFactory.getBean(beanName); + } + + protected Map buildAttrs(Map component) { + Map attrs = (Map) ((Map) component.get("options")).get("attrs"); + return attrs; } } diff --git a/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java b/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java new file mode 100644 index 0000000000..94a2784060 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java @@ -0,0 +1,212 @@ +package io.dataease.service.chart.build; + +import io.dataease.commons.exception.DEException; +import io.dataease.commons.utils.LogUtil; +import io.dataease.dto.chart.FilterParamTO; +import io.dataease.service.chart.FilterBuildTemplate; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; + +import java.lang.reflect.Method; +import java.util.*; +import java.util.stream.Collectors; + + +public abstract class TimeBuild extends FilterBuildTemplate { + + private static final String MULTIPLETYPE = "daterange"; + + @Override + protected FilterParamTO buildParam(Map component) { + FilterParamTO result = new FilterParamTO(); + result.setComponent(component); + result.setValue(null); + result.setOperator("between"); + result.setIsTree(false); + + Map options = (Map) component.get("options"); + Map attrs = (Map) options.get("attrs"); + Object valueObj = options.get("value"); + String defaultValue = ""; + boolean multiple = attrs.get("type").equals(MULTIPLETYPE); + Object defaultObject = attrs.get("default"); + Boolean isDynamic = false; + if (ObjectUtils.isNotEmpty(defaultObject)) { + Map defaultMap = (Map) defaultObject; + isDynamic = (Boolean) defaultMap.getOrDefault("isDynamic", false); + } + + List realValues = null; + + if (!ObjectUtils.isEmpty(valueObj)) { + if (valueObj instanceof List) { + defaultValue = ""; + } else { + defaultValue = valueObj.toString(); + } + } + String componentType = componentType(component); + String labelFormat = labelFormat(component); + if (isDynamic) { + List dynamicTimes = dynamicDateFromNow(component); + if (CollectionUtils.isNotEmpty(dynamicTimes)) { + int size = dynamicTimes.size(); + if (size > 1) { + String start = timeSection(String.valueOf(dynamicTimes.get(0)), multiple ? "datetime" : componentType, labelFormat).get(0); + String end = timeSection(String.valueOf(dynamicTimes.get(1)), multiple ? "datetime" : componentType, labelFormat).get(1); + realValues = add2List(start, end); + } else { + realValues = timeSection(String.valueOf(dynamicTimes.get(0)), componentType, labelFormat); + } + } + + } else { + if (StringUtils.isBlank(defaultValue)) { + realValues = new ArrayList<>(); + } else { + if (multiple) { + List realVals = Arrays.asList(defaultValue.split(",")); + String start = realVals.get(0); + String end = realVals.get(1); + start = timeSection(start, "datetime", labelFormat).get(0); + end = timeSection(end, "datetime", labelFormat).get(1); + realValues = add2List(start, end); + } else { + realValues = Arrays.asList(defaultValue.split(",")).stream().limit(1).collect(Collectors.toList()); + realValues = timeSection(realValues.get(0), componentType, labelFormat); + } + } + } + result.setValue(realValues); + + return result; + } + + public List timeSection(String sourceTimeStr, String type, String labelFormat) { + if (StringUtils.isBlank(sourceTimeStr)) return null; + Long sourceTime = Long.parseLong(sourceTimeStr); + + List result = new ArrayList<>(); + + List formatArr = new ArrayList<>(); + if (StringUtils.isNotBlank(labelFormat)) { + formatArr = Arrays.stream(labelFormat.split(" ")).collect(Collectors.toList()); + } + Integer[] fieldNames = {Calendar.HOUR_OF_DAY, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND}; + Calendar instance = Calendar.getInstance(); + instance.setTimeInMillis(sourceTime); + int methodsLen = fieldNames.length; + int childArrLength = 0; + if (StringUtils.equals("datetime", type) && formatArr.size() > 1) { + List childArr = new ArrayList<>(); + if (StringUtils.isNotBlank(formatArr.get(1))) { + childArr = Arrays.stream(formatArr.get(1).split(":")).collect(Collectors.toList()); + } + childArrLength = childArr.size(); + while (--methodsLen >= childArrLength) { + executeSetFieldValue(instance, fieldNames[methodsLen], 0); + } + } else { + for (int i = 0; i < methodsLen; i++) { + executeSetFieldValue(instance, fieldNames[i], 0); + } + } + + Calendar endInstance = Calendar.getInstance(); + endInstance.setTimeInMillis(instance.getTimeInMillis()); + if (StringUtils.equals("year", type)) { + instance.set(Calendar.MONTH, 0); + instance.set(Calendar.DATE, 1); + endInstance.setTimeInMillis(instance.getTimeInMillis()); + endInstance.set(Calendar.YEAR, endInstance.get(Calendar.YEAR) + 1); + endInstance.add(Calendar.SECOND, -1); + endInstance.roll(Calendar.MILLISECOND, -1); + + } + + if (StringUtils.equals("month", type)) { + instance.set(Calendar.DATE, 1); + endInstance.setTimeInMillis(instance.getTimeInMillis()); + endInstance.set(Calendar.MONTH, endInstance.get(Calendar.MONTH) + 1); + endInstance.add(Calendar.SECOND, -1); + endInstance.roll(Calendar.MILLISECOND, -1); + } + + if (StringUtils.equals("date", type)) { + endInstance.set(Calendar.DATE, endInstance.get(Calendar.DATE) + 1); + endInstance.add(Calendar.SECOND, -1); + endInstance.roll(Calendar.MILLISECOND, -1); + } + + if (StringUtils.equals("datetime", type)) { + if (childArrLength == 0) { + endInstance.set(Calendar.DATE, endInstance.get(Calendar.DATE) + 1); + } else { + Integer fieldNameFlag = fieldNames[childArrLength - 1]; + endInstance.set(fieldNameFlag, endInstance.get(fieldNameFlag) + 1); + } + endInstance.add(Calendar.SECOND, -1); + endInstance.roll(Calendar.MILLISECOND, -1); + } + + result.add(String.valueOf(instance.getTimeInMillis())); + result.add(String.valueOf(endInstance.getTimeInMillis())); + return result; + } + + private void executeSetFieldValue(Calendar instance, Integer fieldFlag, Object value) { + try { + Method setMethod = instance.getClass().getMethod("set", int.class, int.class); + setMethod.invoke(instance, fieldFlag, value); + } catch (Exception e) { + DEException.throwException(e); + LogUtil.error(e.getMessage(), e); + } + } + + public Boolean isTimeWidget(String serviceName) { + if (StringUtils.isBlank(serviceName)) return false; + String[] timeWidgets = {"timeDateWidget", "timeDateRangeWidget"}; + return Arrays.stream(timeWidgets).anyMatch(widget -> StringUtils.equals(widget, serviceName)); + } + + public Boolean showTime(Map component) { + Map attrs = (Map) ((Map) component.get("options")).get("attrs"); + if (ObjectUtils.isNotEmpty(attrs.get("showTime"))) { + return (boolean) attrs.get("showTime"); + } + return false; + } + + public String componentType(Map component) { + Map attrs = (Map) ((Map) component.get("options")).get("attrs"); + String result = ObjectUtils.isEmpty(attrs.get("type")) ? "date" : attrs.get("type").toString(); + String serviceName = component.get("serviceName").toString(); + if (isTimeWidget(serviceName) && showTime(component)) { + result = StringUtils.equals("timeDateWidget", serviceName) ? "datetime" : "datetimerange"; + } + return result; + } + + public String labelFormat(Map component) { + String result = "yyyy-MM-dd"; + Map attrs = (Map) ((Map) component.get("options")).get("attrs"); + String serviceName = component.get("serviceName").toString(); + if (isTimeWidget(serviceName) && showTime(component) && ObjectUtils.isNotEmpty(attrs.get("accuracy"))) { + return result + " " + attrs.get("accuracy"); + } + return result; + } + + /*public List add2List(Long ...elements) { + return Arrays.stream(elements).collect(Collectors.toList()); + }*/ + public List add2List(Object... elements) { + return Arrays.stream(elements).collect(Collectors.toList()); + } + + public abstract List dynamicDateFromNow(Map component); + + +} diff --git a/backend/src/main/java/io/dataease/service/chart/build/TimeYearBuild.java b/backend/src/main/java/io/dataease/service/chart/build/TimeYearBuild.java deleted file mode 100644 index 76581fe6d1..0000000000 --- a/backend/src/main/java/io/dataease/service/chart/build/TimeYearBuild.java +++ /dev/null @@ -1,73 +0,0 @@ -package io.dataease.service.chart.build; - -import io.dataease.dto.chart.FilterParamTO; -import io.dataease.service.chart.FilterBuildTemplate; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - -import java.util.*; -import java.util.stream.Collectors; - - -public class TimeYearBuild extends FilterBuildTemplate { - @Override - protected FilterParamTO buildParam(Map component) { - List realVals = null; - Object valueObj = null; - String defaultValue = ""; - Map options = (Map) component.get("options"); - Map attrs = (Map) options.get("attrs"); - Object aDefault = attrs.get("default"); - Boolean isDynamic = (Boolean) attrs.getOrDefault("isDynamic", false); - if (ObjectUtils.isNotEmpty(aDefault) && isDynamic) { - Long aLong = dynamicDateFormNow(component); - realVals = new ArrayList<>(); - realVals.add(aLong.toString()); - }else { - if(!ObjectUtils.isEmpty(valueObj)) { - if(valueObj instanceof List) { - defaultValue = ""; - }else { - defaultValue = valueObj.toString(); - } - } - if (StringUtils.isBlank(defaultValue)) { - realVals = new ArrayList<>(); - }else { - realVals = Arrays.asList(defaultValue.split(",")).stream().limit(1).collect(Collectors.toList()); - } - } - - - - return null; - } - - - private Long dynamicDateFormNow(Map component) { - Map attrs = (Map) ((Map) component.get("options")).get("attrs"); - Object aDefault = attrs.get("default"); - Boolean isDynamic = (Boolean) attrs.getOrDefault("isDynamic", false); - if (ObjectUtils.isEmpty(aDefault) || !isDynamic) return null; - - Calendar now = Calendar.getInstance(); - int nowYear = now.get(Calendar.YEAR); - Map aDefaultMap = (Map) aDefault; - if (Integer.parseInt(aDefaultMap.get("dkey").toString()) == 0){ - now.set(nowYear, 0, 1, 0, 0, 0); - return now.getTimeInMillis(); - } - if (Integer.parseInt(aDefaultMap.get("dkey").toString()) == 1){ - now.set(nowYear - 1, 0, 1, 0, 0, 0); - return now.getTimeInMillis(); - } - if (Integer.parseInt(aDefaultMap.get("dkey").toString()) == 2){ - int dynamicPrefix = Integer.parseInt(aDefaultMap.get("dynamicPrefix").toString()); - String dynamicSuffix = aDefaultMap.get("dynamicSuffix").toString(); - now.set(StringUtils.equals("before", dynamicSuffix) ? (nowYear - dynamicPrefix) : (nowYear + dynamicPrefix), 0, 1, 0, 0, 0); - return now.getTimeInMillis(); - } - return 0L; - } -} diff --git a/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateBuild.java b/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateBuild.java new file mode 100644 index 0000000000..8c46f7b31a --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateBuild.java @@ -0,0 +1,79 @@ +package io.dataease.service.chart.build.time; + +import io.dataease.service.chart.build.TimeBuild; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +@Service("timeDateWidget") +public class TimeDateBuild extends TimeBuild { + public List dynamicDateFromNow(Map component) { + Map attrs = buildAttrs(component); + Object defaultObject = attrs.get("default"); + + Boolean isDynamic = false; + Map defaultMap = null; + if (ObjectUtils.isNotEmpty(defaultObject)) { + defaultMap = (Map) defaultObject; + isDynamic = (Boolean) defaultMap.getOrDefault("isDynamic", false); + } + if (ObjectUtils.isEmpty(defaultObject) || !isDynamic) return null; + + Calendar now = Calendar.getInstance(); + int nowYear = now.get(Calendar.YEAR); + int nowMonth = now.get(Calendar.MONTH); + int nowDate = now.get(Calendar.DATE); + int dkey = (int) Double.parseDouble(defaultMap.get("dkey").toString()); + if (dkey == 0) { + now.set(nowYear, nowMonth, nowDate, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 1) { + now.set(nowYear, nowMonth, nowDate - 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + + if (dkey == 2) { + now.set(nowYear, nowMonth, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + + if (dkey == 4) { + now.set(nowYear, 0, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + + if (dkey == 3) { + int dynamicPrefix = (int) Double.parseDouble(defaultMap.get("dynamicPrefix").toString()); + String dynamicInfill = defaultMap.get("dynamicInfill").toString(); + String dynamicSuffix = defaultMap.get("dynamicSuffix").toString(); + now.set(nowYear, nowMonth, nowDate, 0, 0, 0); + if (StringUtils.equals("day", dynamicInfill)) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.roll(Calendar.DATE, step); + return add2List(now.getTimeInMillis()); + } + if (StringUtils.equals("week", dynamicInfill)) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1) * 7; + now.roll(Calendar.DATE, step); + return add2List(now.getTimeInMillis()); + } + if (StringUtils.equals("month", dynamicInfill)) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.roll(Calendar.MONTH, step); + return add2List(now.getTimeInMillis()); + } + if (StringUtils.equals("year", dynamicInfill)) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.roll(Calendar.YEAR, step); + return add2List(now.getTimeInMillis()); + } + } + + return null; + } +} diff --git a/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateRangeBuild.java b/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateRangeBuild.java new file mode 100644 index 0000000000..7e754f44e7 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/build/time/TimeDateRangeBuild.java @@ -0,0 +1,149 @@ +package io.dataease.service.chart.build.time; + +import io.dataease.service.chart.build.TimeBuild; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +@Service("timeDateRangeWidget") +public class TimeDateRangeBuild extends TimeBuild { + @Override + public List dynamicDateFromNow(Map component) { + + Map attrs = buildAttrs(component); + Object defaultObject = null; + if ((defaultObject = attrs.get("default")) == null) return null; + Map defaultMap = (Map) defaultObject; + + Boolean isDynamic = (Boolean) defaultMap.getOrDefault("isDynamic", false); + if (!isDynamic) return null; + + int dkey = (int) Double.parseDouble(defaultMap.get("dkey").toString()); + Calendar now = Calendar.getInstance(); + now.set(Calendar.HOUR_OF_DAY, 0); + now.set(Calendar.MINUTE, 0); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); + if (dkey % 5 == 0) { + if (dkey == 5) { + now.add(Calendar.DATE, -7); + } + now.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); + long start = now.getTimeInMillis(); + now.add(Calendar.DATE, 7); + now.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); + long end = now.getTimeInMillis(); + return add2List(start, end); + } + + if (dkey == 1) { + Calendar endBase = (Calendar) now.clone(); + now.set(Calendar.DAY_OF_MONTH, 1); + long start = now.getTimeInMillis(); + endBase.add(Calendar.MONTH, 1); + endBase.set(Calendar.DAY_OF_MONTH, 0); + long end = endBase.getTimeInMillis(); + return add2List(start, end); + } + if (dkey == 6) { + Calendar endBase = (Calendar) now.clone(); + now.add(Calendar.MONTH, -1); + now.set(Calendar.DAY_OF_MONTH, 1); + long start = now.getTimeInMillis(); + endBase.set(Calendar.DAY_OF_MONTH, 0); + long end = endBase.getTimeInMillis(); + return add2List(start, end); + } + + if (dkey % 5 == 2) { + int step = 0; + if (dkey == 7) { + step = -1; + } + Calendar endBase = (Calendar) now.clone(); + Long start = quarterBegin(now, step); + Long end = quarterEnd(endBase, step); + return add2List(start, end); + } + + if (dkey == 3) { + now.set(Calendar.MONTH, 0); + now.set(Calendar.DAY_OF_MONTH, 1); + long start = now.getTimeInMillis(); + now.add(Calendar.YEAR, 1); + now.add(Calendar.DAY_OF_MONTH, -1); + long end = now.getTimeInMillis(); + return add2List(start, end); + } + if (dkey == 8) { + now.add(Calendar.YEAR, -1); + now.set(Calendar.MONTH, 0); + now.set(Calendar.DAY_OF_MONTH, 1); + long start = now.getTimeInMillis(); + now.add(Calendar.YEAR, 1); + now.add(Calendar.DAY_OF_MONTH, -1); + long end = now.getTimeInMillis(); + return add2List(start, end); + } + + if (dkey == 4) { + Object startDynamicObject = defaultMap.get("sDynamicPrefix"); + Object endDynamicObject = defaultMap.get("eDynamicPrefix"); + if (ObjectUtils.isNotEmpty(startDynamicObject) && ObjectUtils.isNotEmpty(endDynamicObject)) { + String startDynamicInfill = defaultMap.get("sDynamicInfill").toString(); + String endDynamicInfill = defaultMap.get("eDynamicInfill").toString(); + String startDynamicSuffix = defaultMap.get("sDynamicSuffix").toString(); + String endDynamicSuffix = defaultMap.get("eDynamicSuffix").toString(); + int startDynamic = (int) Double.parseDouble(startDynamicObject.toString()); + int endDynamic = (int) Double.parseDouble(endDynamicObject.toString()); + Calendar endBase = (Calendar) now.clone(); + Long start = customTime(now, startDynamic, startDynamicInfill, startDynamicSuffix); + Long end = customTime(endBase, endDynamic, endDynamicInfill, endDynamicSuffix); + return add2List(start, end); + } + } + + return null; + } + + private Long customTime(Calendar now, int dynamicPrefix, String dynamicInfill, String dynamicSuffix) { + if (StringUtils.equals(dynamicInfill, "day")) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.add(Calendar.DAY_OF_MONTH, step); + } + if (StringUtils.equals(dynamicInfill, "week")) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1) * 7; + now.add(Calendar.DAY_OF_MONTH, step); + } + if (StringUtils.equals(dynamicInfill, "month")) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.add(Calendar.MONTH, step); + } + if (StringUtils.equals("year", dynamicInfill)) { + int step = dynamicPrefix * (StringUtils.equals("before", dynamicSuffix) ? -1 : 1); + now.add(Calendar.YEAR, step); + } + return now.getTimeInMillis(); + } + + private Long quarterBegin(Calendar instance, int step) { + int month = instance.get(Calendar.MONTH); + int quarterBegin = (int) Math.floor(month / 3) * 3; + instance.set(Calendar.MONTH, quarterBegin + (3 * step)); + instance.set(Calendar.DAY_OF_MONTH, 1); + return instance.getTimeInMillis(); + } + + private Long quarterEnd(Calendar instance, int step) { + int month = instance.get(Calendar.MONTH); + int quarterBegin = (int) Math.floor(month / 3) * 3; + instance.set(Calendar.MONTH, quarterBegin + (3 * (step + 1))); + instance.set(Calendar.DAY_OF_MONTH, 1); + instance.add(Calendar.DATE, -1); + return instance.getTimeInMillis(); + } +} diff --git a/backend/src/main/java/io/dataease/service/chart/build/time/TimeMonthBuild.java b/backend/src/main/java/io/dataease/service/chart/build/time/TimeMonthBuild.java new file mode 100644 index 0000000000..166046d9cd --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/build/time/TimeMonthBuild.java @@ -0,0 +1,55 @@ +package io.dataease.service.chart.build.time; + +import io.dataease.service.chart.build.TimeBuild; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +@Service("timeMonthWidget") +public class TimeMonthBuild extends TimeBuild { + @Override + public List dynamicDateFromNow(Map component) { + Map attrs = buildAttrs(component); + + Object defaultObject = attrs.get("default"); + + if (ObjectUtils.isEmpty(defaultObject)) return null; + Map defaultMap = (Map) defaultObject; + + Boolean isDynamic = (Boolean) defaultMap.getOrDefault("isDynamic", false); + if (!isDynamic) return null; + Calendar now = Calendar.getInstance(); + int nowYear = now.get(Calendar.YEAR); + int nowMonth = now.get(Calendar.MONTH); + + int dkey = (int) Double.parseDouble(defaultMap.get("dkey").toString()); + if (dkey == 0) { + now.set(nowYear, nowMonth, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 1) { + now.set(nowYear, nowMonth - 1, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 2) { + now.set(nowYear, 0, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 4) { + now.set(nowYear - 1, nowMonth, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 3) { + int dynamicPrefix = (int) Double.parseDouble(defaultMap.get("dynamicPrefix").toString()); + String dynamicSuffix = defaultMap.get("dynamicSuffix").toString(); + int targetMonth = StringUtils.equals("before", dynamicSuffix) ? (nowMonth - dynamicPrefix) : (nowMonth + dynamicPrefix); + now.set(nowYear, targetMonth, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + return null; + } +} diff --git a/backend/src/main/java/io/dataease/service/chart/build/time/TimeYearBuild.java b/backend/src/main/java/io/dataease/service/chart/build/time/TimeYearBuild.java new file mode 100644 index 0000000000..68246597ad --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/build/time/TimeYearBuild.java @@ -0,0 +1,47 @@ +package io.dataease.service.chart.build.time; + +import io.dataease.service.chart.build.TimeBuild; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.List; +import java.util.Map; + +@Service("timeYearWidget") +public class TimeYearBuild extends TimeBuild { + @Override + public List dynamicDateFromNow(Map component) { + + Boolean isDynamic = false; + Map defaultMap = null; + Map attrs = buildAttrs(component); + Object defaultObject = attrs.get("default"); + if (ObjectUtils.isNotEmpty(defaultObject)) { + defaultMap = (Map) defaultObject; + isDynamic = (Boolean) defaultMap.getOrDefault("isDynamic", false); + } + if (ObjectUtils.isEmpty(defaultObject) || !isDynamic) return null; + + Calendar now = Calendar.getInstance(); + int nowYear = now.get(Calendar.YEAR); + int dkey = (int) Double.parseDouble(defaultMap.get("dkey").toString()); + if (dkey == 0) { + now.set(nowYear, 0, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 1) { + now.set(nowYear - 1, 0, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + if (dkey == 2) { + int dynamicPrefix = (int) Double.parseDouble(defaultMap.get("dynamicPrefix").toString()); + String dynamicSuffix = defaultMap.get("dynamicSuffix").toString(); + now.set(StringUtils.equals("before", dynamicSuffix) ? (nowYear - dynamicPrefix) : (nowYear + dynamicPrefix), 0, 1, 0, 0, 0); + return add2List(now.getTimeInMillis()); + } + return null; + } + +} From d041561ee5cfb0e2eaec520256005e623b1057af Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 20 Oct 2022 17:38:48 +0800 Subject: [PATCH 03/14] =?UTF-8?q?typo:=20=E4=BF=AE=E5=A4=8D=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E6=8B=BC=E5=86=99=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/views/system/plugin/PluginCom.vue | 2 +- frontend/src/views/system/plugin/dynamic.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/views/system/plugin/PluginCom.vue b/frontend/src/views/system/plugin/PluginCom.vue index 6640e45b68..7d13d7a9cf 100644 --- a/frontend/src/views/system/plugin/PluginCom.vue +++ b/frontend/src/views/system/plugin/PluginCom.vue @@ -8,7 +8,7 @@ v-bind="$attrs" v-on="$listeners" @execute-axios="executeAxios" - @on-add-languanges="addLanguages" + @on-add-languages="addLanguages" @plugin-call-back="pluginCallBack" />
diff --git a/frontend/src/views/system/plugin/dynamic.vue b/frontend/src/views/system/plugin/dynamic.vue index 6f315218d8..74ae83276a 100644 --- a/frontend/src/views/system/plugin/dynamic.vue +++ b/frontend/src/views/system/plugin/dynamic.vue @@ -9,7 +9,7 @@ v-if="showAsync" :url="url" @execute-axios="executeAxios" - @on-add-languanges="addLanguages" + @on-add-languages="addLanguages" @on-plugin-layout="setLayoutInfo" @plugin-call-back="pluginCallBack" /> @@ -22,7 +22,7 @@ v-if="showAsync" :url="url" @execute-axios="executeAxios" - @on-add-languanges="addLanguages" + @on-add-languages="addLanguages" @on-plugin-layout="setLayoutInfo" @plugin-call-back="pluginCallBack" /> @@ -35,7 +35,7 @@ v-if="showAsync" :url="url" @execute-axios="executeAxios" - @on-add-languanges="addLanguages" + @on-add-languages="addLanguages" @on-plugin-layout="setLayoutInfo" @plugin-call-back="pluginCallBack" /> From cee4b1940c709a04733428a4f16df642f0dfcad9 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw <67260074+fit2cloud-chenyw@users.noreply.github.com> Date: Thu, 20 Oct 2022 17:41:17 +0800 Subject: [PATCH 04/14] =?UTF-8?q?fix:=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/service/chart/build/TimeBuild.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java b/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java index 94a2784060..52165acebe 100644 --- a/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java +++ b/backend/src/main/java/io/dataease/service/chart/build/TimeBuild.java @@ -199,9 +199,6 @@ public abstract class TimeBuild extends FilterBuildTemplate { return result; } - /*public List add2List(Long ...elements) { - return Arrays.stream(elements).collect(Collectors.toList()); - }*/ public List add2List(Object... elements) { return Arrays.stream(elements).collect(Collectors.toList()); } From e5b59e409a917f86f32f8097d205962de91222c8 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Thu, 20 Oct 2022 18:12:52 +0800 Subject: [PATCH 05/14] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE-=E6=B0=B4?= =?UTF-8?q?=E6=B3=A2=E5=9B=BE):=20=E6=B0=B4=E6=B3=A2=E5=9B=BE=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=E5=80=BC=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 水波图目标值支持动态值 https://www.tapd.cn/55578866/prong/stories/view/1155578866001009735 --- .../service/chart/ChartViewService.java | 75 ++++--- frontend/src/views/chart/chart/chart.js | 9 +- .../views/chart/chart/common/common_antv.js | 3 + .../views/chart/chart/common/common_table.js | 14 +- .../src/views/chart/chart/liquid/liquid.js | 12 +- .../shape-attr/SizeSelectorAntV.vue | 199 +++++++++++++++--- frontend/src/views/chart/group/Group.vue | 1 - frontend/src/views/chart/view/ChartEdit.vue | 14 +- frontend/src/views/panel/edit/index.vue | 2 +- 9 files changed, 243 insertions(+), 86 deletions(-) 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 f5a8c0945d..edaea269ff 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -580,7 +580,7 @@ public class ChartViewService { List yAxisExt = gson.fromJson(view.getYAxisExt(), tokenType); yAxis.addAll(yAxisExt); } - if (StringUtils.equalsIgnoreCase(view.getRender(), "antv") && StringUtils.equalsIgnoreCase(view.getType(), "gauge")) { + if (StringUtils.equalsIgnoreCase(view.getRender(), "antv") && StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge","liquid")) { List sizeField = getSizeField(view); yAxis.addAll(sizeField); } @@ -1656,49 +1656,46 @@ public class ChartViewService { JSONObject jsonObject = JSONObject.parseObject(customAttr); JSONObject size = jsonObject.getJSONObject("size"); - String gaugeMinType = size.getString("gaugeMinType"); - if (StringUtils.equalsIgnoreCase("dynamic", gaugeMinType)) { - JSONObject gaugeMinField = size.getJSONObject("gaugeMinField"); - String id = gaugeMinField.getString("id"); - String summary = gaugeMinField.getString("summary"); - DatasetTableField datasetTableField = dataSetTableFieldsService.get(id); - if (ObjectUtils.isNotEmpty(datasetTableField)) { - if (datasetTableField.getDeType() == 0 || datasetTableField.getDeType() == 1 || datasetTableField.getDeType() == 5) { - if (!StringUtils.containsIgnoreCase(summary, "count")) { - DEException.throwException(Translator.get("i18n_gauge_field_change")); - } - } - ChartViewFieldDTO dto = new ChartViewFieldDTO(); - BeanUtils.copyBean(dto, datasetTableField); - dto.setSummary(summary); - list.add(dto); - } else { - DEException.throwException(Translator.get("i18n_gauge_field_delete")); - } + ChartViewFieldDTO gaugeMinViewField = getDynamicField(size, "gaugeMinType", "gaugeMinField"); + if (gaugeMinViewField != null) { + list.add(gaugeMinViewField); } - String gaugeMaxType = size.getString("gaugeMaxType"); - if (StringUtils.equalsIgnoreCase("dynamic", gaugeMaxType)) { - JSONObject gaugeMaxField = size.getJSONObject("gaugeMaxField"); - String id = gaugeMaxField.getString("id"); - String summary = gaugeMaxField.getString("summary"); - DatasetTableField datasetTableField = dataSetTableFieldsService.get(id); - if (ObjectUtils.isNotEmpty(datasetTableField)) { - if (datasetTableField.getDeType() == 0 || datasetTableField.getDeType() == 1 || datasetTableField.getDeType() == 5) { - if (!StringUtils.containsIgnoreCase(summary, "count")) { - DEException.throwException(Translator.get("i18n_gauge_field_change")); - } - } - ChartViewFieldDTO dto = new ChartViewFieldDTO(); - BeanUtils.copyBean(dto, datasetTableField); - dto.setSummary(summary); - list.add(dto); - } else { - DEException.throwException(Translator.get("i18n_gauge_field_delete")); - } + ChartViewFieldDTO gaugeMaxViewField = getDynamicField(size, "gaugeMaxType", "gaugeMaxField"); + if (gaugeMaxViewField != null) { + list.add(gaugeMaxViewField); } + ChartViewFieldDTO liquidMaxViewField = getDynamicField(size, "liquidMaxType", "liquidMaxField"); + if (liquidMaxViewField != null) { + list.add(liquidMaxViewField); + } + return list; } + private ChartViewFieldDTO getDynamicField(JSONObject sizeObj, String type, String field) { + String maxType = sizeObj.getString(type); + if (StringUtils.equalsIgnoreCase("dynamic", maxType)) { + JSONObject maxField = sizeObj.getJSONObject(field); + String id = maxField.getString("id"); + String summary = maxField.getString("summary"); + DatasetTableField datasetTableField = dataSetTableFieldsService.get(id); + if (ObjectUtils.isNotEmpty(datasetTableField)) { + if (datasetTableField.getDeType() == 0 || datasetTableField.getDeType() == 1 || datasetTableField.getDeType() == 5) { + if (!StringUtils.containsIgnoreCase(summary, "count")) { + DEException.throwException(Translator.get("i18n_gauge_field_change")); + } + } + ChartViewFieldDTO dto = new ChartViewFieldDTO(); + BeanUtils.copyBean(dto, datasetTableField); + dto.setSummary(summary); + return dto; + } else { + DEException.throwException(Translator.get("i18n_gauge_field_delete")); + } + } + return null; + } + private List getDynamicAssistFields(ChartViewDTO view) { String senior = view.getSenior(); JSONObject jsonObject = JSONObject.parseObject(senior); diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index a0eab96e4c..c79e0ae12d 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -103,6 +103,11 @@ export const DEFAULT_SIZE = { treemapWidth: 80, treemapHeight: 80, liquidMax: 100, + liquidMaxType: 'fix', // fix or dynamic + liquidMaxField: { + id: '', + summary: '' + }, liquidSize: 80, liquidOutlineBorder: 4, liquidOutlineDistance: 8, @@ -132,8 +137,8 @@ export const DEFAULT_LABEL = { decimalCount: 2, // 小数位数 thousandSeparator: true// 千分符 }, - reserveDecimalCount: 2, // 百分比堆叠柱状图,饼图,环形图保留小数位数 - labelContent: ['dimension', 'proportion'] // 饼图,环形图指标展示项 + reserveDecimalCount: 2, + labelContent: ['dimension', 'proportion'] } export const DEFAULT_TOOLTIP = { show: true, diff --git a/frontend/src/views/chart/chart/common/common_antv.js b/frontend/src/views/chart/chart/common/common_antv.js index 71fefbedc0..3f6093278c 100644 --- a/frontend/src/views/chart/chart/common/common_antv.js +++ b/frontend/src/views/chart/chart/common/common_antv.js @@ -126,6 +126,9 @@ export function getLabel(chart) { type: l.position, autoRotate: false } + if (l.position === 'outer') { + label.type = 'spider' + } } else if (chart.type.includes('line') || chart.type.includes('area')) { label = { position: l.position, diff --git a/frontend/src/views/chart/chart/common/common_table.js b/frontend/src/views/chart/chart/common/common_table.js index 42f93da6a5..93cb2f0063 100644 --- a/frontend/src/views/chart/chart/common/common_table.js +++ b/frontend/src/views/chart/chart/common/common_table.js @@ -21,7 +21,7 @@ export function getCustomTheme(chart) { backgroundColor: headerColor, horizontalBorderColor: borderColor, verticalBorderColor: borderColor, - verticalBorderWidth: 0 // 左上角顶点单元格左右边缘宽度要设置为 0,不然序号列的数字部分会比表头多几个像素,视觉上会突出去 + verticalBorderWidth: 0 }, text: { fill: DEFAULT_COLOR_CASE.tableHeaderFontColor, @@ -130,9 +130,9 @@ export function getCustomTheme(chart) { theme.rowCell.cell.backgroundColor = i_c // 这个参数其实只对开启序号列的行头生效 theme.rowCell.cell.horizontalBorderColor = i_c theme.rowCell.cell.verticalBorderColor = i_c - theme.rowCell.bolderText.fill = c.tableHeaderFontColor ? c.tableHeaderFontColor : c.tableFontColor - theme.rowCell.text.fill = c.tableHeaderFontColor ? c.tableHeaderFontColor : c.tableFontColor - theme.rowCell.measureText.fill = c.tableHeaderFontColor ? c.tableHeaderFontColor : c.tableFontColor + theme.rowCell.bolderText.fill = c.tableFontColor + theme.rowCell.text.fill = c.tableFontColor + theme.rowCell.measureText.fill = c.tableFontColor theme.colCell.cell.backgroundColor = h_c theme.colCell.cell.horizontalBorderColor = b_c @@ -162,11 +162,11 @@ export function getCustomTheme(chart) { theme.cornerCell.measureText.textAlign = h_a // 序号列的数字单元格内容样式使用指标的内容样式而不是表头的内容样式 - theme.rowCell.bolderText.fontSize = parseInt(s.tableTitleFontSize) + theme.rowCell.bolderText.fontSize = parseInt(s.tableItemFontSize) theme.rowCell.bolderText.textAlign = i_a - theme.rowCell.text.fontSize = parseInt(s.tableTitleFontSize) + theme.rowCell.text.fontSize = parseInt(s.tableItemFontSize) theme.rowCell.text.textAlign = i_a - theme.rowCell.measureText.fontSize = parseInt(s.tableTitleFontSize) + theme.rowCell.measureText.fontSize = parseInt(s.tableItemFontSize) theme.rowCell.measureText.textAlign = i_a theme.colCell.bolderText.fontSize = parseInt(s.tableTitleFontSize) diff --git a/frontend/src/views/chart/chart/liquid/liquid.js b/frontend/src/views/chart/chart/liquid/liquid.js index 2e228ca0f1..09b9dfe645 100644 --- a/frontend/src/views/chart/chart/liquid/liquid.js +++ b/frontend/src/views/chart/chart/liquid/liquid.js @@ -9,10 +9,8 @@ export function baseLiquid(plot, container, chart) { let value = 0 const colors = [] let max, radius, bgColor, shape, labelContent - if (chart.data) { - if (chart.data.series.length > 0) { - value = chart.data.series[0].data[0] - } + if (chart.data?.series.length > 0) { + value = chart.data.series[0].data[0] } let customAttr = {} if (chart.customAttr) { @@ -27,7 +25,11 @@ export function baseLiquid(plot, container, chart) { // size if (customAttr.size) { const size = JSON.parse(JSON.stringify(customAttr.size)) - max = size.liquidMax ? size.liquidMax : DEFAULT_SIZE.liquidMax + if (size.liquidMaxType === 'dynamic') { + max = chart.data?.series[chart.data?.series.length - 1]?.data[0] + } else { + max = size.liquidMax ? size.liquidMax : DEFAULT_SIZE.liquidMax + } radius = parseFloat((size.liquidSize ? size.liquidSize : DEFAULT_SIZE.liquidSize) / 100) shape = size.liquidShape ? size.liquidShape : DEFAULT_SIZE.liquidShape } diff --git a/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue b/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue index 23093b7bc8..7001b74d50 100644 --- a/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue +++ b/frontend/src/views/chart/components/shape-attr/SizeSelectorAntV.vue @@ -592,37 +592,37 @@ @change="changeQuotaField('min')" > + + {{ $t('chart.fix') }} + {{ $t('chart.dynamic') }} + + + + + + + + + + + + + {{ item.name }} + + + + + + + + + + + + + + { // 视图为编辑状态才进行转换 - if (this.editStatue) { + if (this.editStatus) { this.convertChart(this.chart) this.convertChart(this.view) } @@ -3088,13 +3086,15 @@ export default { customAttr.label.show = true customAttr.label.position = 'outer' } - // 环形图默认内径,玫瑰图为 外径 * 0.5,饼图为 外径 * 0.7 if (type === 'pie-donut') { customAttr.size.pieInnerRadius = Math.round(customAttr.size.pieOuterRadius * 0.7) } if (type === 'pie-donut-rose') { customAttr.size.pieInnerRadius = Math.round(customAttr.size.pieOuterRadius * 0.5) } + if (equalsAny(type, 'pie', 'pie-rose')) { + customAttr.size.pieInnerRadius = 0 + } } else if (type.includes('line')) { this.view.customAttr.label.position = 'top' } else if (type.includes('treemap')) { diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index d278aa21da..dcb854ccb8 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -272,7 +272,7 @@
From 9db2228f8c92fe0c5143ad0a79275237a190153b Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Fri, 21 Oct 2022 13:06:45 +0800 Subject: [PATCH 06/14] =?UTF-8?q?fix(=E8=A7=84=E8=8C=83=E4=BB=A3=E7=A0=81)?= =?UTF-8?q?:=20=E6=A0=B9=E6=8D=AEtypos=E5=B7=A5=E5=85=B7=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/DeViewSelect/index.bak.vue | 260 ------------------ .../src/components/DeViewSelect/index.vue | 2 +- .../src/components/ElTreeSelect/index.vue | 2 +- .../src/components/ElVisualSelect/index.vue | 16 +- .../GradientColorSelector/index.vue | 12 +- .../canvas/components/Editor/MarkLine.vue | 4 +- .../components/canvas/components/TextAttr.vue | 6 +- .../components/canvas/components/Toolbar.vue | 2 +- .../components/cron/cron/secondAndMinute.vue | 10 +- .../src/components/dataease/DeOutWidget.vue | 8 +- frontend/src/components/gridTable/index.vue | 14 +- .../widget/DeWidget/DeNumberRange.vue | 6 +- .../components/widget/DeWidget/DeSelect.vue | 26 +- .../widget/DeWidget/DeSelectGrid.vue | 52 ++-- .../widget/DeWidget/DeSelectTree.vue | 34 +-- .../src/components/widget/DeWidget/DeTabs.vue | 14 +- .../widget/DeWidget/DeTreeSelect.vue | 2 +- .../{TitlePostion.vue => TitlePosition.vue} | 0 .../widget/DeWidget/sources/ElQuarter.vue | 2 +- .../NumberSelectGridServiceImpl.js | 8 +- .../serviceImpl/NumberSelectServiceImpl.js | 8 +- .../serviceImpl/TextSelectGridServiceImpl.js | 8 +- .../serviceImpl/TextSelectServiceImpl.js | 8 +- .../serviceImpl/TextSelectTreeServiceImpl.js | 8 +- .../icons/svg/{warn-tre.svg => warn-tree.svg} | 0 frontend/src/lang/en.js | 22 +- frontend/src/lang/es.js | 4 +- frontend/src/lang/tw.js | 10 +- frontend/src/lang/zh.js | 10 +- frontend/src/permission.js | 12 +- frontend/src/styles/index.scss | 2 +- .../components/filter/ResultFilterEditor.vue | 8 +- .../chart/components/senior/MapMapping.vue | 18 +- .../chart/components/table/TableNormal.vue | 16 +- frontend/src/views/dataset/add/AddApi.vue | 6 +- frontend/src/views/dataset/add/AddCustom.vue | 8 +- frontend/src/views/dataset/add/AddDB.vue | 6 +- frontend/src/views/dataset/add/AddSQL.vue | 10 +- frontend/src/views/dataset/add/AddUnion.vue | 10 +- .../views/dataset/add/union/UnionPreview.vue | 8 +- .../views/dataset/common/DatasetTableData.vue | 4 +- .../src/views/dataset/data/CalcFieldEdit.vue | 4 +- .../src/views/dataset/data/TabDataPreview.vue | 4 +- frontend/src/views/msg/all.vue | 2 +- frontend/src/views/msg/setting.vue | 6 +- .../views/panel/GrantAuth/ShareHead/index.vue | 15 +- .../src/views/panel/GrantAuth/dept/index.vue | 6 +- .../src/views/panel/GrantAuth/shareTree.vue | 18 +- .../panel/ViewSelect/index-with-drag.vue | 6 +- frontend/src/views/panel/ViewSelect/index.vue | 6 +- .../panel/appTemplateMarket/log/index.vue | 2 +- frontend/src/views/panel/edit/index.vue | 2 +- frontend/src/views/panel/enshrine/index.vue | 6 +- .../src/views/panel/filter/ButtonDialog.vue | 6 +- .../src/views/panel/filter/filterDialog.vue | 117 ++++---- frontend/src/views/system/about/index.vue | 2 +- .../src/views/system/datasource/ApiBody.vue | 2 +- .../views/system/datasource/ApiVariable.vue | 2 +- .../src/views/system/datasource/CodeEdit.vue | 6 +- .../system/datasource/DsConfiguration.vue | 8 +- .../src/views/system/datasource/DsTree.vue | 8 +- .../src/views/system/datasource/convert.js | 5 - .../src/views/system/datasource/dsTable.vue | 2 +- frontend/src/views/system/log/filterUser.vue | 18 +- frontend/src/views/system/log/index.vue | 2 +- frontend/src/views/system/map/index.vue | 6 +- .../views/system/sysParam/BasicSetting.vue | 8 +- .../system/sysParam/ClusterModeSetting.vue | 8 +- .../views/system/sysParam/EmailSetting.vue | 8 +- .../sysParam/MapSetting/MapSettingLeft.vue | 4 +- .../sysParam/MapSetting/MapSettingRight.vue | 6 +- .../system/sysParam/MapSetting/index.vue | 12 +- .../sysParam/{Operater.vue => Operator.vue} | 4 +- .../src/views/system/task/DatasetTaskList.vue | 6 +- frontend/src/views/system/task/FilterUser.vue | 26 +- .../views/system/task/FilterUserRecord.vue | 26 +- .../src/views/system/task/TableSelector.vue | 6 +- frontend/src/views/system/task/TaskRecord.vue | 2 +- frontend/src/views/system/user/FilterUser.vue | 40 +-- .../src/views/system/user/PrivateForm.vue | 2 +- frontend/src/views/system/user/UserEditer.vue | 2 +- frontend/src/views/system/user/index.vue | 6 +- 82 files changed, 413 insertions(+), 680 deletions(-) delete mode 100644 frontend/src/components/DeViewSelect/index.bak.vue rename frontend/src/components/widget/DeWidget/{TitlePostion.vue => TitlePosition.vue} (100%) rename frontend/src/icons/svg/{warn-tre.svg => warn-tree.svg} (100%) rename frontend/src/views/system/sysParam/{Operater.vue => Operator.vue} (91%) diff --git a/frontend/src/components/DeViewSelect/index.bak.vue b/frontend/src/components/DeViewSelect/index.bak.vue deleted file mode 100644 index 93c850e5c6..0000000000 --- a/frontend/src/components/DeViewSelect/index.bak.vue +++ /dev/null @@ -1,260 +0,0 @@ - - - - - diff --git a/frontend/src/components/DeViewSelect/index.vue b/frontend/src/components/DeViewSelect/index.vue index 9603cbaa65..2995c8bec5 100644 --- a/frontend/src/components/DeViewSelect/index.vue +++ b/frontend/src/components/DeViewSelect/index.vue @@ -171,7 +171,7 @@ export default { _popoverShowFun(val) { this.openDialog() this._updateH() - this.$emit('onFoucs') + this.$emit('onFocus') }, _selectRemoveTag(viewId) { diff --git a/frontend/src/components/ElTreeSelect/index.vue b/frontend/src/components/ElTreeSelect/index.vue index 184a769a03..91cbcef2d6 100644 --- a/frontend/src/components/ElTreeSelect/index.vue +++ b/frontend/src/components/ElTreeSelect/index.vue @@ -535,7 +535,7 @@ export default { }, _popoverShowFun(val) { this._updateH() - this.$emit('onFoucs') + this.$emit('onFocus') }, _popoverHideFun(e) { const path = this._getEventPath(e) diff --git a/frontend/src/components/ElVisualSelect/index.vue b/frontend/src/components/ElVisualSelect/index.vue index 58adbbd6ea..8295986d58 100644 --- a/frontend/src/components/ElVisualSelect/index.vue +++ b/frontend/src/components/ElVisualSelect/index.vue @@ -74,7 +74,7 @@ export default { selectValue: this.value, options: [], domList: null, - slectBoxDom: null, + selectBoxDom: null, scrollbar: null, startIndex: 0, endIndex: 0, @@ -154,9 +154,9 @@ export default { reCacularHeight() { this.maxHeightDom.style.height = this.newList.length * this.itemHeight + 'px' }, - resetList(arrys) { - if (Array.isArray(arrys)) { - this.newList = arrys.slice() + resetList(arrays) { + if (Array.isArray(arrays)) { + this.newList = arrays.slice() this.domList.style.paddingTop = 0 + 'px' this.scrollbar.scrollTop = 0 this.callback() @@ -183,13 +183,13 @@ export default { `.${this.classId} .el-select-dropdown .el-select-dropdown__wrap` ) this.scrollbar = document.querySelector(`.${this.classId} .el-select-dropdown .el-scrollbar`) - this.slectBoxDom = document.querySelector(`.${this.classId} .el-select-dropdown__wrap`) - this.slectBoxDom.style.display = 'flex' - this.slectBoxDom.style.flexDirection = 'row' + this.selectBoxDom = document.querySelector(`.${this.classId} .el-select-dropdown__wrap`) + this.selectBoxDom.style.display = 'flex' + this.selectBoxDom.style.flexDirection = 'row' this.domList = selectDom.querySelector( `.${this.classId} .el-select-dropdown__wrap .el-select-dropdown__list` ) - this.addScrollDiv(this.slectBoxDom) + this.addScrollDiv(this.selectBoxDom) this.scrollFn() this.customInputStyle() diff --git a/frontend/src/components/GradientColorSelector/index.vue b/frontend/src/components/GradientColorSelector/index.vue index e770b40f41..48da711b0d 100644 --- a/frontend/src/components/GradientColorSelector/index.vue +++ b/frontend/src/components/GradientColorSelector/index.vue @@ -58,7 +58,7 @@ @click="handler" >
item.value === this.colorDto.value) ? 'simple' : 'gradient' if (haspPropValue) { - this.tabPanes[this.activeName === 'simple' ? 0 : 1].datas.forEach(item => { + this.tabPanes[this.activeName === 'simple' ? 0 : 1].data.forEach(item => { if (item.value === this.colorDto.value) { item.colors = JSON.parse(JSON.stringify(this.colorDto.colors)) } @@ -261,7 +261,7 @@ export default { }, _popoverShowFun(val) { this._updateH() - this.$emit('onFoucs') + this.$emit('onFocus') }, fillGradientColor() { this.gradientColorCases.forEach(item => { @@ -270,7 +270,7 @@ export default { return str }) }) - this.tabPanes[1].datas = JSON.parse(JSON.stringify(this.gradientColorCases)) + this.tabPanes[1].data = JSON.parse(JSON.stringify(this.gradientColorCases)) }, formatBgColor(color, useValue) { let activeName = this.activeName diff --git a/frontend/src/components/canvas/components/Editor/MarkLine.vue b/frontend/src/components/canvas/components/Editor/MarkLine.vue index 4dc67b4d43..2ab53b91b8 100644 --- a/frontend/src/components/canvas/components/Editor/MarkLine.vue +++ b/frontend/src/components/canvas/components/Editor/MarkLine.vue @@ -166,7 +166,7 @@ export default { // 同一方向上同时显示三条线可能不太美观,因此才有了这个解决方案 // 同一方向上的线只显示一条,例如多条横条只显示一条横线 if (needToShow.length) { - this.chooseTheTureLine(needToShow, isDownward, isRightward) + this.chooseTheTrueLine(needToShow, isDownward, isRightward) } }) }, @@ -180,7 +180,7 @@ export default { return Math.round(condition.dragShift - (width - curComponentStyle.width) / 2) }, - chooseTheTureLine(needToShow, isDownward, isRightward) { + chooseTheTrueLine(needToShow, isDownward, isRightward) { // 如果鼠标向右移动 则按从右到左的顺序显示竖线 否则按相反顺序显示 // 如果鼠标向下移动 则按从下到上的顺序显示横线 否则按相反顺序显示 if (isRightward) { diff --git a/frontend/src/components/canvas/components/TextAttr.vue b/frontend/src/components/canvas/components/TextAttr.vue index 7c0fe79921..ac15062e93 100644 --- a/frontend/src/components/canvas/components/TextAttr.vue +++ b/frontend/src/components/canvas/components/TextAttr.vue @@ -333,11 +333,11 @@
- diff --git a/frontend/src/components/cron/cron/secondAndMinute.vue b/frontend/src/components/cron/cron/secondAndMinute.vue index d56077ccd4..b7125e4ea2 100644 --- a/frontend/src/components/cron/cron/secondAndMinute.vue +++ b/frontend/src/components/cron/cron/secondAndMinute.vue @@ -7,7 +7,7 @@ label="1" size="mini" border - >{{ $t('cron.every') }}{{ lable }} + >{{ $t('cron.every') }}{{ label }}
- {{ lable }} + {{ label }}
- {{ lable }}{{ $t('cron.every_begin') }} + {{ label }}{{ $t('cron.every_begin') }} - {{ lable }}{{ $t('cron.every_exec') }} + {{ label }}{{ $t('cron.every_exec') }}
@@ -56,7 +56,7 @@ export default { data() { return { paginationEvent: {}, - paginationDefalut: { + paginationDefault: { currentPage: 1, pageSizes: [10, 20, 50, 100], pageSize: 10, @@ -75,8 +75,8 @@ export default { watch: { pagination: { handler() { - this.paginationDefalut = { - ...this.paginationDefalut, + this.paginationDefault = { + ...this.paginationDefault, ...this.pagination } }, @@ -122,15 +122,15 @@ export default { (ele) => ele[this.selectedFlags] ) // 当前页的选中项索引 - const notCurrenArr = [] + const notCurrentArr = [] this.tableData.forEach((ele) => { const resultIndex = flags.indexOf(ele[this.selectedFlags]) if (resultIndex !== -1) { this.$refs.table.toggleRowSelection(ele, true) - notCurrenArr.push(resultIndex) + notCurrentArr.push(resultIndex) } }) - notCurrenArr.sort().reduceRight((pre, next) => { + notCurrentArr.sort().reduceRight((pre, next) => { this.multipleSelectionCach.splice(next, 1) }, 0) }, diff --git a/frontend/src/components/widget/DeWidget/DeNumberRange.vue b/frontend/src/components/widget/DeWidget/DeNumberRange.vue index bc0ce6c281..cbaca4a51d 100644 --- a/frontend/src/components/widget/DeWidget/DeNumberRange.vue +++ b/frontend/src/components/widget/DeWidget/DeNumberRange.vue @@ -116,7 +116,7 @@ export default { }, form: { handler(value) { - this.destryTimeMachine() + this.destroyTimeMachine() this.changeIndex++ this.searchWithKey(this.changeIndex) }, @@ -161,10 +161,10 @@ export default { if (index === this.changeIndex) { this.search() } - this.destryTimeMachine() + this.destroyTimeMachine() }, 1000) }, - destryTimeMachine() { + destroyTimeMachine() { this.timeMachine && clearTimeout(this.timeMachine) this.timeMachine = null }, diff --git a/frontend/src/components/widget/DeWidget/DeSelect.vue b/frontend/src/components/widget/DeWidget/DeSelect.vue index 2d4079f2b0..e63f7bcb96 100644 --- a/frontend/src/components/widget/DeWidget/DeSelect.vue +++ b/frontend/src/components/widget/DeWidget/DeSelect.vue @@ -15,7 +15,7 @@ :filter-method="filterMethod" :key-word="keyWord" popper-class="coustom-de-select" - :list="datas" + :list="data" :custom-style="customStyle" @change="changeValue" @focus="setOptionWidth" @@ -24,7 +24,7 @@ @handleShowNumber="handleShowNumber" > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) bus.$emit('valid-values-change', true) }).catch(e => { bus.$emit('valid-values-change', false) @@ -171,7 +171,7 @@ export default { if (value === null || typeof value === 'undefined' || value === old || isSameVueObj(value, old)) return this.show = false - this.datas = [] + this.data = [] let method = multFieldValues const token = this.$store.getters.token || getToken() @@ -186,7 +186,7 @@ export default { this.element.options.attrs.fieldId && this.element.options.attrs.fieldId.length > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.$nextTick(() => { this.show = true this.handleCoustomStyle() @@ -248,7 +248,7 @@ export default { }, initLoad() { this.value = this.fillValueDerfault() - this.datas = [] + this.data = [] if (this.element.options.attrs.fieldId) { let method = multFieldValues const token = this.$store.getters.token || getToken() @@ -257,7 +257,7 @@ export default { method = linkMultFieldValues } method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) bus.$emit('valid-values-change', true) }).catch(e => { bus.$emit('valid-values-change', false) @@ -336,9 +336,9 @@ export default { return defaultV.split(',')[0] } }, - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue index a43db7df16..d4f4c57ec4 100644 --- a/frontend/src/components/widget/DeWidget/DeSelectGrid.vue +++ b/frontend/src/components/widget/DeWidget/DeSelectGrid.vue @@ -32,7 +32,7 @@ @change="handleCheckedChange" > {{ item.id }} @@ -48,7 +48,7 @@ @change="changeRadioBox" > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } }, 'element.options.attrs.fieldId': function(value, old) { if (typeof value === 'undefined' || value === old) return - this.datas = [] + this.data = [] let method = multFieldValues const token = this.$store.getters.token || getToken() const linkToken = this.$store.getters.linkToken || getLinkToken() @@ -168,11 +168,11 @@ export default { this.element.options.attrs.fieldId && this.element.options.attrs.fieldId.length > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.changeInputStyle() if (this.element.options.attrs.multiple) { - this.checkAll = this.value.length === this.datas.length - this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } }) || (this.element.options.value = '') }, @@ -189,15 +189,15 @@ export default { this.$nextTick(() => { this.show = true if (value) { - this.checkAll = this.value.length === this.datas.length - this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } this.changeInputStyle() }) }, 'element.options.attrs.sort': function(value, old) { if (typeof value === 'undefined' || value === old) return - this.datas = [] + this.data = [] let method = multFieldValues const token = this.$store.getters.token || getToken() const linkToken = this.$store.getters.linkToken || getLinkToken() @@ -211,11 +211,11 @@ export default { this.element.options.attrs.fieldId && this.element.options.attrs.fieldId.length > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.changeInputStyle() if (this.element.options.attrs.multiple) { - this.checkAll = this.value.length === this.datas.length - this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } }) || (this.element.options.value = '') }, @@ -251,8 +251,8 @@ export default { this.changeValue(this.value) if (this.element.options.attrs.multiple) { - this.checkAll = this.value.length === this.datas.length - this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } } }, @@ -284,11 +284,11 @@ export default { method = linkMultFieldValues } method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.changeInputStyle() if (this.element.options.attrs.multiple) { - this.checkAll = this.value.length === this.datas.length - this.isIndeterminate = this.value.length > 0 && this.value.length < this.datas.length + this.checkAll = this.value.length === this.data.length + this.isIndeterminate = this.value.length > 0 && this.value.length < this.data.length } }) } @@ -337,9 +337,9 @@ export default { return defaultV.split(',')[0] } }, - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item @@ -350,14 +350,14 @@ export default { this.changeValue(value) }, handleCheckAllChange(val) { - this.value = val ? this.datas.map(item => item.id) : [] + this.value = val ? this.data.map(item => item.id) : [] this.isIndeterminate = false this.changeValue(this.value) }, handleCheckedChange(values) { const checkedCount = values.length - this.checkAll = checkedCount === this.datas.length - this.isIndeterminate = checkedCount > 0 && checkedCount < this.datas.length + this.checkAll = checkedCount === this.data.length + this.isIndeterminate = checkedCount > 0 && checkedCount < this.data.length this.changeValue(values) }, testChange(item) { diff --git a/frontend/src/components/widget/DeWidget/DeSelectTree.vue b/frontend/src/components/widget/DeWidget/DeSelectTree.vue index 12dea5b69b..96232638f2 100644 --- a/frontend/src/components/widget/DeWidget/DeSelectTree.vue +++ b/frontend/src/components/widget/DeWidget/DeSelectTree.vue @@ -5,7 +5,7 @@ ref="deSelectTree" v-model="value" popover-class="test-class-wrap" - :data="datas" + :data="data" :select-params="selectParams" :tree-params="treeParams" :filter-node-method="_filterFun" @@ -17,7 +17,7 @@ @removeTag="changeNodeIds" @check="changeCheckNode" @select-clear="selectClear" - @onFoucs="onFoucs" + @onFocus="onFocus" @treeCheckChange="handleElTagStyle" /> @@ -59,7 +59,7 @@ export default { return { show: true, selectOptionWidth: 0, - datas: [], + data: [], // eslint-disable-next-line value: this.isSingle ? '' : [], selectParams: { @@ -128,7 +128,7 @@ export default { }, 'element.options.attrs.fieldId': function(value, old) { if (value === null || typeof value === 'undefined' || value === old) return - this.datas = [] + this.data = [] let method = mappingFieldValues const token = this.$store.getters.token || getToken() @@ -143,9 +143,9 @@ export default { this.element.options.attrs.fieldId && this.element.options.attrs.fieldId.length > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.$nextTick(() => { - this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) + this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.data) }) }) this.element.options.value = '' @@ -177,13 +177,13 @@ export default { this.value = defaultV.split(',')[0] } } - this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) + this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.data) }) }) }, 'element.options.attrs.sort': function(value, old) { if (value === null || typeof value === 'undefined' || value === old || isSameVueObj(value, old)) return - this.datas = [] + this.data = [] let method = mappingFieldValues const token = this.$store.getters.token || getToken() @@ -198,9 +198,9 @@ export default { this.element.options.attrs.fieldId && this.element.options.attrs.fieldId.length > 0 && method(param).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.$nextTick(() => { - this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) + this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.data) }) }) this.element.options.value = '' @@ -233,7 +233,7 @@ export default { this.changeValue(this.value) } }, - onFoucs() { + onFocus() { this.$nextTick(() => { this.handleCoustomStyle() }) @@ -260,7 +260,7 @@ export default { }, initLoad() { this.value = this.fillValueDerfault() - this.datas = [] + this.data = [] if (this.element.options.attrs.fieldId) { let method = mappingFieldValues const token = this.$store.getters.token || getToken() @@ -269,9 +269,9 @@ export default { method = linkMappingFieldValues } method({ fieldIds: this.element.options.attrs.fieldId.split(','), sort: this.element.options.attrs.sort }).then(res => { - this.datas = this.optionDatas(res.data) + this.data = this.optionData(res.data) this.$nextTick(() => { - this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas) + this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.data) }) }) } @@ -355,10 +355,10 @@ export default { return defaultV.split(',')[0] } }, - optionDatas(datas) { - if (!datas) return null + optionData(data) { + if (!data) return null - return datas.filter(item => !!item) + return data.filter(item => !!item) }, /* 下面是树的渲染方法 */ diff --git a/frontend/src/components/widget/DeWidget/DeTabs.vue b/frontend/src/components/widget/DeWidget/DeTabs.vue index 81f480e970..b9c32f817a 100644 --- a/frontend/src/components/widget/DeWidget/DeTabs.vue +++ b/frontend/src/components/widget/DeWidget/DeTabs.vue @@ -41,21 +41,21 @@ - + {{ $t('detabs.eidttitle') }} - + {{ $t('detabs.selectview') }} - + {{ $t('detabs.selectOthers') }} {{ $t('table.delete') }} @@ -348,7 +348,7 @@ export default { } }) }, - beforeHandleCommond(item, param) { + beforeHandleCommand(item, param) { return { 'command': item, 'param': param @@ -477,8 +477,8 @@ export default { if (this.element.options.tabList[len].name === param.name) { this.element.options.tabList.splice(len, 1) - const activIndex = (len - 1 + this.element.options.tabList.length) % this.element.options.tabList.length - this.activeTabName = this.element.options.tabList[activIndex].name + const activeIndex = (len - 1 + this.element.options.tabList.length) % this.element.options.tabList.length + this.activeTabName = this.element.options.tabList[activeIndex].name } } this.$store.dispatch('chart/setViewId', null) diff --git a/frontend/src/components/widget/DeWidget/DeTreeSelect.vue b/frontend/src/components/widget/DeWidget/DeTreeSelect.vue index 01203f379b..c9f2e689f5 100644 --- a/frontend/src/components/widget/DeWidget/DeTreeSelect.vue +++ b/frontend/src/components/widget/DeWidget/DeTreeSelect.vue @@ -10,7 +10,7 @@ @change="changeValue" > !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js b/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js index 6707f530c7..3dcc29a6f6 100644 --- a/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/NumberSelectServiceImpl.js @@ -12,7 +12,7 @@ const dialogPanel = { attrs: { multiple: false, placeholder: 'denumberselect.placeholder', - datas: [], + data: [], viewIds: [], parameters: [], key: 'id', @@ -75,9 +75,9 @@ class NumberSelectServiceImpl extends WidgetService { }) } - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js index 9c7644b1d5..1014d2b17d 100644 --- a/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TextSelectGridServiceImpl.js @@ -14,7 +14,7 @@ const dialogPanel = { placeholder: 'detextgridselect.placeholder', viewIds: [], parameters: [], - datas: [], + data: [], key: 'id', label: 'text', value: 'id', @@ -74,9 +74,9 @@ class TextSelectGridServiceImpl extends WidgetService { }) } - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js index c1bd366db9..ab8cd690df 100644 --- a/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js @@ -13,7 +13,7 @@ const dialogPanel = { placeholder: 'detextselect.placeholder', viewIds: [], parameters: [], - datas: [], + data: [], key: 'id', label: 'text', value: 'id', @@ -77,9 +77,9 @@ class TextSelectServiceImpl extends WidgetService { }) } - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/components/widget/serviceImpl/TextSelectTreeServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextSelectTreeServiceImpl.js index 441f334b75..4f6d02afac 100644 --- a/frontend/src/components/widget/serviceImpl/TextSelectTreeServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TextSelectTreeServiceImpl.js @@ -13,7 +13,7 @@ const dialogPanel = { placeholder: 'detextselectTree.placeholder', viewIds: [], parameters: [], - datas: [], + data: [], key: 'id', label: 'text', value: 'id', @@ -76,9 +76,9 @@ class TextSelectTreeServiceImpl extends WidgetService { }) } - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/icons/svg/warn-tre.svg b/frontend/src/icons/svg/warn-tree.svg similarity index 100% rename from frontend/src/icons/svg/warn-tre.svg rename to frontend/src/icons/svg/warn-tree.svg diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 8a35b14753..f1a6c2e47e 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -35,7 +35,7 @@ export default { custom_table_fields_desc: 'Fixed field is not in the selection range' }, steps: { - cancel: 'Cancle', + cancel: 'Cancel', next: 'next', prev: 'Last step', finish: 'Finish' @@ -613,7 +613,7 @@ export default { member: { create: 'Add members', modify: 'Modify members', - delete_confirm: 'Comfirm to delete this user?', + delete_confirm: 'Confirm to delete this user?', please_choose_member: 'Please choose member', search_by_name: 'Search by name', modify_personal_info: 'Modify personal info', @@ -792,12 +792,12 @@ export default { move_success: 'Removed successfully', user: 'user', add_organization: 'Add organization', - defalut_organization_canot_move: 'The default organization cannot be deleted', + default_organization_cannot_move: 'The default organization cannot be deleted', organization_name: 'Organization name', input_organization_name: 'Please enter the organization name', relate_top_organization: 'Associated parent organization', organization_name_exist: 'Organization name already exists', - canot_delete: 'Cannot delete', + cannot_delete: 'Cannot delete', remove_user_first: 'Please remove all users in the organization before deleting the organization', sure_delete_organization: 'Are you sure to delete this organization?', add_child_org: 'Add sub organization', @@ -1721,7 +1721,7 @@ export default { please_input_user_name: 'Please enter user name', please_input_password: 'Please enter Password', please_input_host: 'Please enter host', - please_input_url: 'Please enter url adress', + please_input_url: 'Please enter url address', please_input_port: 'Please enter port', modify: 'Edit data Source', validate_success: 'Verification successful', @@ -1960,7 +1960,7 @@ export default { confirm_delete: 'Confirm Delete', delete_success: 'Delete Success', confirm: 'Confirm', - cancel: 'Cancle', + cancel: 'Cancel', search: 'Search', back: 'Back', view: 'Chart', @@ -2165,7 +2165,7 @@ export default { install_time: 'Install Time', release_time: 'Time', un_install: 'Uninstall', - uninstall_confirm: 'Comfirm to uninstall the plugin?', + uninstall_confirm: 'Confirm to uninstall the plugin?', uninstall_cancel: 'Cancel uninstall plugin', un_install_success: 'Uninstall is successful and restart takes effect', un_install_error: 'Uninstall failed, please contact the administrator' @@ -2253,7 +2253,7 @@ export default { screen_method: 'Screening method', select: 'Please select', fixed_value: 'Fixed value', - defalut_method: 'Default condition', + default_method: 'Default condition', select_all: 'Select all', added: 'Added', manual_input: 'Manual input', @@ -2273,7 +2273,7 @@ export default { version_num: 'Version number', standard: 'Standard', enterprise: 'Enterprise', - suport: 'Get technical support', + support: 'Get technical support', update_success: 'Update Success' }, template: { @@ -2353,7 +2353,7 @@ export default { i18n_msg_type_panel_share_cacnel: 'Dashboard unshared', i18n_msg_type_dataset_sync: 'Data set synchronization', i18n_msg_type_dataset_sync_success: 'Dataset synchronization successful', - i18n_msg_type_dataset_sync_faild: 'Dataset synchronization failed', + i18n_msg_type_dataset_sync_failed: 'Dataset synchronization failed', i18n_msg_type_all: 'All type', i18n_msg_type_ds_invalid: 'Datasource invalid', channel_inner_msg: 'On site', @@ -2369,7 +2369,7 @@ export default { please_key_max: 'Please key max value', out_of_min: 'The min value cannot be less than the min integer -2³²', out_of_max: 'The max value cannot be more than the max integer 2³²-1', - must_int: 'Please key interger', + must_int: 'Please key integer', min_out_max: 'The min value must be less than the max value', max_out_min: 'The max value must be more than the min value' }, diff --git a/frontend/src/lang/es.js b/frontend/src/lang/es.js index 8187bfe706..477af736cb 100755 --- a/frontend/src/lang/es.js +++ b/frontend/src/lang/es.js @@ -8,7 +8,7 @@ export default { pagePermission: 'Permisos de la página', directivePermission: 'Permisos de la directiva', icons: 'Iconos', - components: 'Componentes', + components: 'Components', tinymce: 'Tinymce', markdown: 'Markdown', jsonEditor: 'Editor JSON', @@ -123,7 +123,7 @@ export default { reviewer: 'reviewer', id: 'ID', date: 'Fecha', - author: 'Autor', + author: 'Author', readings: 'Lector', status: 'Estado', actions: 'Acciones', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 190436c596..495c17ae5f 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -791,12 +791,12 @@ export default { move_success: '移除成功', user: '用戶', add_organization: '添加組織', - defalut_organization_canot_move: '默認組織無法刪除', + default_organization_cannot_move: '默認組織無法刪除', organization_name: '組織名稱', input_organization_name: '請輸入組織名稱', relate_top_organization: '關聯上級組織', organization_name_exist: '組織名稱已存在', - canot_delete: '無法刪除', + cannot_delete: '無法刪除', remove_user_first: '請先移除組織中所有用戶,再進行刪除組織操作。', sure_delete_organization: '確定刪除該組織嗎?', delete: '刪除', @@ -2254,7 +2254,7 @@ export default { screen_method: '篩選方式', select: '請選擇', fixed_value: '固定值', - defalut_method: '默認條件', + default_method: '默認條件', select_all: '全 選', added: '已添加', manual_input: '手工輸入', @@ -2274,7 +2274,7 @@ export default { version_num: '版本號', standard: '標準版', enterprise: '企業版', - suport: '獲取技術支持', + support: '獲取技術支持', update_success: '更新成功' }, template: { @@ -2354,7 +2354,7 @@ export default { i18n_msg_type_panel_share_cacnel: '儀表闆取消分享', i18n_msg_type_dataset_sync: '數據集同步', i18n_msg_type_dataset_sync_success: '數據集同步成功', - i18n_msg_type_dataset_sync_faild: '數據集同步失敗', + i18n_msg_type_dataset_sync_failed: '數據集同步失敗', i18n_msg_type_ds_invalid: '數據源失效', i18n_msg_type_all: '全部類型', channel_inner_msg: '站內消息', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 0722d9c43f..9f696b1aef 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -790,12 +790,12 @@ export default { move_success: '移除成功', user: '用户', add_organization: '添加组织', - defalut_organization_canot_move: '默认组织无法删除', + default_organization_cannot_move: '默认组织无法删除', organization_name: '组织名称', input_organization_name: '请输入组织名称', relate_top_organization: '关联上级组织', organization_name_exist: '组织名称已存在', - canot_delete: '无法删除', + cannot_delete: '无法删除', remove_user_first: '请先移除组织中所有用户,再进行删除组织操作。', sure_delete_organization: '确定删除该组织吗?', delete: '删除', @@ -2254,7 +2254,7 @@ export default { screen_method: '筛选方式', select: '请选择', fixed_value: '固定值', - defalut_method: '默认条件', + default_method: '默认条件', select_all: '全 选', added: '已添加', manual_input: '手工输入', @@ -2274,7 +2274,7 @@ export default { version_num: '版本号', standard: '标准版', enterprise: '企业版', - suport: '获取技术支持', + support: '获取技术支持', update_success: '更新成功' }, template: { @@ -2354,7 +2354,7 @@ export default { i18n_msg_type_panel_share_cacnel: '仪表板取消分享', i18n_msg_type_dataset_sync: '数据集同步', i18n_msg_type_dataset_sync_success: '数据集同步成功', - i18n_msg_type_dataset_sync_faild: '数据集同步失败', + i18n_msg_type_dataset_sync_failed: '数据集同步失败', i18n_msg_type_ds_invalid: '数据源失效', i18n_msg_type_all: '全部类型', channel_inner_msg: '站内消息', diff --git a/frontend/src/permission.js b/frontend/src/permission.js index 8b983c5449..990658e5ef 100644 --- a/frontend/src/permission.js +++ b/frontend/src/permission.js @@ -126,11 +126,11 @@ router.beforeEach(async(to, from, next) => routeBefore(() => { })) export const loadMenus = (next, to) => { buildMenus().then(res => { - const datas = res.data - const filterDatas = filterRouter(datas) - const asyncRouter = filterAsyncRouter(filterDatas) + const data = res.data + const filterData = filterRouter(data) + const asyncRouter = filterAsyncRouter(filterData) // 如果包含首页 则默认页面是 首页 否则默认页面是仪表板页面 - if (JSON.stringify(datas).indexOf('wizard') > -1) { + if (JSON.stringify(data).indexOf('wizard') > -1) { asyncRouter.push({ path: '/', component: Layout, @@ -234,8 +234,8 @@ const hasPermission = (router, user_permissions) => { } // 如果有字菜单 则 判断是否满足 ‘任意一个子菜单有权限’ if (router.children && router.children.length) { - const permissionChilds = router.children.filter(item => hasPermission(item, user_permissions)) - router.children = permissionChilds + const permissionChildren = router.children.filter(item => hasPermission(item, user_permissions)) + router.children = permissionChildren return router.children.length > 0 } return true diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index 8e4f24cc91..ac082f7053 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -1400,7 +1400,7 @@ div:focus { } } -.de-serach-table { +.de-search-table { .top-operate { margin-bottom: 16px; diff --git a/frontend/src/views/chart/components/filter/ResultFilterEditor.vue b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue index e6f4824845..f9f3c77fdf 100644 --- a/frontend/src/views/chart/components/filter/ResultFilterEditor.vue +++ b/frontend/src/views/chart/components/filter/ResultFilterEditor.vue @@ -266,13 +266,13 @@ export default { // 查找枚举值 if (this.item.deType === 0 || this.item.deType === 5) { multFieldValues({ fieldIds: [this.item.id] }).then(res => { - this.fieldOptions = this.optionDatas(res.data) + this.fieldOptions = this.optionData(res.data) }) } }, - optionDatas(datas) { - if (!datas) return null - return datas.filter(item => !!item).map(item => { + optionData(data) { + if (!data) return null + return data.filter(item => !!item).map(item => { return { id: item, text: item diff --git a/frontend/src/views/chart/components/senior/MapMapping.vue b/frontend/src/views/chart/components/senior/MapMapping.vue index e8b0c535f6..b5db2b429b 100644 --- a/frontend/src/views/chart/components/senior/MapMapping.vue +++ b/frontend/src/views/chart/components/senior/MapMapping.vue @@ -1,7 +1,7 @@