diff --git a/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java b/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java index 5a55d50488..079b4253b8 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java +++ b/core/backend/src/main/java/io/dataease/service/chart/build/SelectBuild.java @@ -1,11 +1,18 @@ package io.dataease.service.chart.build; +import cn.hutool.core.bean.BeanUtil; +import io.dataease.commons.utils.LogUtil; +import io.dataease.controller.dataset.DataSetTableFieldController; +import io.dataease.controller.request.dataset.MultFieldValuesRequest; import io.dataease.dto.chart.FilterParamTO; +import io.dataease.dto.dataset.DeSortDTO; 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 org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -14,6 +21,10 @@ import java.util.stream.Collectors; @Service("selectWidget") public class SelectBuild extends FilterBuildTemplate { + + @Resource + private DataSetTableFieldController dataSetTableFieldController; + @Override protected FilterParamTO buildParam(Map component) { FilterParamTO result = new FilterParamTO(); @@ -23,30 +34,34 @@ public class SelectBuild extends FilterBuildTemplate { Object valueObj = null; List realValues = null; - if(ObjectUtils.isEmpty(component.get("options"))) return result; - Map options = (Map)component.get("options"); + if (ObjectUtils.isEmpty(component.get("options"))) return result; + Map options = (Map) component.get("options"); valueObj = options.get("value"); String defaultValue = ""; Map attrs = (Map) options.get("attrs"); boolean multiple = (boolean) attrs.get("multiple"); - if(!ObjectUtils.isEmpty(valueObj)) { - if(valueObj instanceof List) { + if (!ObjectUtils.isEmpty(valueObj)) { + if (valueObj instanceof List) { defaultValue = ""; - }else { + } else { defaultValue = valueObj.toString(); } } - if(multiple) { + boolean isSelectFirst = StringUtils.equals("custom", component.get("type").toString()) && ObjectUtils.isNotEmpty(attrs.get("selectFirst")) && (boolean) attrs.get("selectFirst"); + if (isSelectFirst) { + defaultValue = getFirst(attrs); + } + if (multiple) { if (StringUtils.isBlank(defaultValue)) { realValues = new ArrayList<>(); - }else { + } else { realValues = Arrays.asList(defaultValue.split(",")); } } else { if (StringUtils.isBlank(defaultValue)) { realValues = new ArrayList<>(); - }else { + } else { realValues = Arrays.asList(defaultValue.split(",")).stream().limit(1).collect(Collectors.toList()); } } @@ -54,4 +69,22 @@ public class SelectBuild extends FilterBuildTemplate { result.setValue(realValues); return result; } + + private String getFirst(Map attrs) { + MultFieldValuesRequest request = new MultFieldValuesRequest(); + request.setFieldIds(Arrays.stream(attrs.get("fieldId").toString().split(",")).collect(Collectors.toList())); + if (ObjectUtils.isNotEmpty(attrs.get("sort"))) { + DeSortDTO sort = BeanUtil.copyProperties(attrs.get("sort"), DeSortDTO.class); + request.setSort(sort); + } + List list = null; + try { + list = dataSetTableFieldController.multFieldValues(request); + } catch (Exception e) { + LogUtil.error(e.getMessage()); + return null; + } + if (CollectionUtils.isEmpty(list)) return null; + return list.get(0).toString(); + } } diff --git a/core/frontend/src/components/canvas/customComponent/UserView.vue b/core/frontend/src/components/canvas/customComponent/UserView.vue index 28f71b70da..05e2de9579 100644 --- a/core/frontend/src/components/canvas/customComponent/UserView.vue +++ b/core/frontend/src/components/canvas/customComponent/UserView.vue @@ -827,6 +827,9 @@ export default { } }, getData(id, cache = true, dataBroadcast = false) { + if (this.requestStatus === 'waiting') { + return + } if (id) { const filters = this.filter.filter const group = this.groupRequiredInvalid(filters) @@ -933,6 +936,12 @@ export default { return true }).catch(err => { console.error('err-' + err) + // 还没有构内部刷新 + if (!this.innerRefreshTimer) { + setTimeout(() => { + this.getData(this.element.propValue.viewId) + }, 5000) + } this.requestStatus = 'error' if (err.message && err.message.indexOf('timeout') > -1) { this.message = this.$t('panel.timeout_refresh') diff --git a/core/frontend/src/components/widget/deWidget/DeSelect.vue b/core/frontend/src/components/widget/deWidget/DeSelect.vue index a4795c5a66..94f7eabab2 100644 --- a/core/frontend/src/components/widget/deWidget/DeSelect.vue +++ b/core/frontend/src/components/widget/deWidget/DeSelect.vue @@ -164,8 +164,10 @@ export default { 'defaultValueStr': function(value, old) { if (value === old) return this.$nextTick(() => { - this.value = this.fillValueDerfault() - this.changeValue(value) + if (!this.selectFirst) { + this.value = this.fillValueDerfault() + this.changeValue(value) + } }) }, 'element.options.attrs.fieldId': function(value, old) { @@ -363,8 +365,8 @@ export default { const id = ele.id const eleVal = ele.options.value.toString() if (this.inDraw && this.manualModify && this.element.id === id) { - if (this.selectFirst) { - this.fillFirstValue() + if (ele.options.attrs.selectFirst) { + this.fillFirstValue(true) this.firstChange(this.value) return } @@ -503,8 +505,8 @@ export default { } return this.value.split(',') }, - fillFirstValue() { - if (!this.selectFirst) { + fillFirstValue(isSelectFirst) { + if (!this.selectFirst && !isSelectFirst) { return } let defaultV = this.data[0].id diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 5a561a72cf..8c652bdea0 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -1112,6 +1112,7 @@ export default { desc: 'Descending Order', sort: 'Sort', filter: 'Filter', + is_set: 'Is Set', none: 'None', background: 'Background', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index 7c07f95526..1051ba935c 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -1112,6 +1112,7 @@ export default { desc: '降序', sort: '排序', filter: '過濾', + is_set: '已設定', none: '無', background: '背景', border: '邊角', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 2c3915f3c0..74828f46dd 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -1111,6 +1111,7 @@ export default { desc: '降序', sort: '排序', filter: '过滤', + is_set: '已设置', none: '无', background: '背景', border: '边角', diff --git a/core/frontend/src/store/index.js b/core/frontend/src/store/index.js index 79d5cb63c6..d8ee5e643f 100644 --- a/core/frontend/src/store/index.js +++ b/core/frontend/src/store/index.js @@ -452,7 +452,11 @@ const data = { currentFilters.push(condition) } if (element.type === 'custom' && element.id === targetViewId) { // 过滤组件处理 - element.options.value = [dimension.value] + if (['de-select-tree'].includes(element.component)) { + element.options.value = dimension.value + } else { + element.options.value = [dimension.value] + } // 去掉动态时间 if (element.options.manualModify) { element.options.manualModify = false @@ -486,10 +490,20 @@ const data = { Object.keys(params).forEach(function(sourceInfo) { // 获取外部参数的值 sourceInfo 是外部参数名称 支持数组传入 let paramValue = params[sourceInfo] + let paramValueStr = params[sourceInfo] let operator = 'in' if (paramValue && !Array.isArray(paramValue)) { paramValue = [paramValue] operator = 'eq' + } else if (paramValue && Array.isArray(paramValue)) { + paramValueStr = '' + paramValue.forEach((innerValue, index) => { + if (index === 0) { + paramValueStr = innerValue + } else { + paramValueStr = paramValueStr + ',' + innerValue + } + }) } // 获取所有目标联动信息 const targetInfoList = trackInfo[sourceInfo] || [] @@ -513,7 +527,11 @@ const data = { currentFilters.push(condition) } if (element.type === 'custom' && element.id === targetViewId) { // 过滤组件处理 - element.options.value = paramValue + if (['de-select-tree'].includes(element.component)) { + element.options.value = paramValueStr + } else { + element.options.value = paramValue + } // 去掉动态时间 if (element.options.manualModify) { element.options.manualModify = false diff --git a/core/frontend/src/views/chart/view/ChartEdit.vue b/core/frontend/src/views/chart/view/ChartEdit.vue index 62c546f8e8..674265486d 100644 --- a/core/frontend/src/views/chart/view/ChartEdit.vue +++ b/core/frontend/src/views/chart/view/ChartEdit.vue @@ -1121,7 +1121,7 @@ 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} diff --git a/extensions/dataease-extensions-view/view-bubblemap/view-bubblemap-frontend/src/views/echarts/map/buddle/data.vue b/extensions/dataease-extensions-view/view-bubblemap/view-bubblemap-frontend/src/views/echarts/map/buddle/data.vue index c6cf9eae40..ca8d0c8b10 100644 --- a/extensions/dataease-extensions-view/view-bubblemap/view-bubblemap-frontend/src/views/echarts/map/buddle/data.vue +++ b/extensions/dataease-extensions-view/view-bubblemap/view-bubblemap-frontend/src/views/echarts/map/buddle/data.vue @@ -96,7 +96,7 @@ 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} diff --git a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue index 5466118a33..9c5d016740 100644 --- a/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue +++ b/extensions/dataease-extensions-view/view-chartmix/view-chartmix-frontend/src/views/antv/chartmix/data.vue @@ -116,7 +116,7 @@ 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }} 已设置 + >{{ $t('chart.is_set') }} - 过滤 + {{ $t('chart.filter') }}