From 7cd4d99b58d61499e090887d45d10535a7c0d9ed Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 7 Nov 2023 12:31:00 +0800 Subject: [PATCH 01/25] =?UTF-8?q?feat:=20=E6=96=87=E6=9C=AC=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E9=80=89=E6=8B=A9=E9=A6=96=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/editor/ComponentWrapper.vue | 4 ++ .../canvas/components/editor/Preview.vue | 6 +- .../canvas/customComponent/UserView.vue | 18 +++++- .../src/components/dataease/DeOutWidget.vue | 4 ++ .../components/widget/deWidget/DeSelect.vue | 20 +++++- .../serviceImpl/TextSelectServiceImpl.js | 9 ++- core/frontend/src/utils/conditionUtil.js | 63 ++++++++++++++++--- .../src/views/panel/filter/FilterDialog.vue | 5 +- .../panel/filter/filterMain/FilterFoot.vue | 20 +++++- 9 files changed, 131 insertions(+), 18 deletions(-) diff --git a/core/frontend/src/components/canvas/components/editor/ComponentWrapper.vue b/core/frontend/src/components/canvas/components/editor/ComponentWrapper.vue index ebcfcf0084..b67ff70527 100644 --- a/core/frontend/src/components/canvas/components/editor/ComponentWrapper.vue +++ b/core/frontend/src/components/canvas/components/editor/ComponentWrapper.vue @@ -48,6 +48,7 @@ :h="config.style.height" :search-count="searchCount" :canvas-id="canvasId" + @filter-loaded="filterLoaded" /> @@ -155,7 +156,7 @@ import eventBus from '@/components/canvas/utils/eventBus' import elementResizeDetectorMaker from 'element-resize-detector' import CanvasOptBar from '@/components/canvas/components/editor/CanvasOptBar' import bus from '@/utils/bus' -import { buildFilterMap, buildViewKeyMap, formatCondition, valueValid, viewIdMatch } from '@/utils/conditionUtil' +import { buildFilterMap, buildViewKeyMap, formatCondition, valueValid, viewIdMatch, buildAfterFilterLoaded } from '@/utils/conditionUtil' import { hasDataPermission } from '@/utils/permission' import { activeWatermark } from '@/components/canvas/tools/watermark' import { proxyUserLoginInfo, userLoginInfo } from '@/api/systemInfo/userLogin' @@ -461,6 +462,9 @@ export default { bus.$off('trigger-reset-button', this.triggerResetButton) }, methods: { + filterLoaded(p) { + buildAfterFilterLoaded(this.componentData, this.filterMap, p) + }, getWrapperChildRefs() { return this.$refs['viewWrapperChild'] }, diff --git a/core/frontend/src/components/canvas/customComponent/UserView.vue b/core/frontend/src/components/canvas/customComponent/UserView.vue index 28b88e8b10..becace60e6 100644 --- a/core/frontend/src/components/canvas/customComponent/UserView.vue +++ b/core/frontend/src/components/canvas/customComponent/UserView.vue @@ -599,7 +599,23 @@ export default { this.refId = uuid.v1 if (this.element && this.element.propValue && this.element.propValue.viewId) { // 如果watch.filters 已经进行数据初始化时候,此处放弃数据初始化 - + const unReadyList = [] + const readyList = [] + this.filters.forEach(f => { + if (f instanceof Promise) { + unReadyList.push(f) + } else { + readyList.push(f) + } + }) + if (unReadyList.length) { + Promise.all(this.filters.filter(f => f instanceof Promise)).then(fList => { + readyList.concat(fList) + this.filter.filters = readyList + this.getData(this.element.propValue.viewId, false) + }) + return + } this.getData(this.element.propValue.viewId, false) } }, diff --git a/core/frontend/src/components/dataease/DeOutWidget.vue b/core/frontend/src/components/dataease/DeOutWidget.vue index 6daf889bd6..3b7cbd8e73 100644 --- a/core/frontend/src/components/dataease/DeOutWidget.vue +++ b/core/frontend/src/components/dataease/DeOutWidget.vue @@ -49,6 +49,7 @@ :element="element" :in-draw="inDraw" :in-screen="inScreen" + @filter-loaded="filterLoaded" /> @@ -180,6 +181,9 @@ export default { this.$set(this.element.style, 'innerBgColor', innerBgColor || '') }, methods: { + filterLoaded(p) { + this.$emit('filter-loaded', p) + }, getComponentId() { return this.element.id }, diff --git a/core/frontend/src/components/widget/deWidget/DeSelect.vue b/core/frontend/src/components/widget/deWidget/DeSelect.vue index 1aa8f2ba68..1a00faf14b 100644 --- a/core/frontend/src/components/widget/deWidget/DeSelect.vue +++ b/core/frontend/src/components/widget/deWidget/DeSelect.vue @@ -133,6 +133,9 @@ export default { }, isCustomSortWidget() { return this.element.serviceName === 'textSelectWidget' + }, + selectFirst() { + return this.element.serviceName === 'textSelectWidget' && this.element.options.attrs.selectFirst } }, @@ -286,16 +289,26 @@ export default { }, initLoad() { this.value = this.fillValueDerfault() - this.initOptions() - if (this.element.options.value) { + this.initOptions(this.fillFirstSelected) + if (this.element.options.value && !this.selectFirst) { this.value = this.fillValueDerfault() this.changeValue(this.value) } }, + fillFirstSelected() { + if (this.selectFirst && this.data?.length) { + this.element.options.value = this.data[0]['id'] + this.value = this.fillValueDerfault() + this.$emit('filter-loaded', { + componentId: this.element.id, + val: this.value + }) + } + }, refreshLoad() { this.initOptions() }, - initOptions() { + initOptions(cb) { this.data = [] if (this.element.options.attrs.fieldId) { let method = multFieldValues @@ -310,6 +323,7 @@ export default { }).then(res => { this.data = this.optionData(res.data) bus.$emit('valid-values-change', true) + cb && cb() }).catch(e => { bus.$emit('valid-values-change', false) }) diff --git a/core/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js b/core/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js index 3d052e2823..455db68835 100644 --- a/core/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js +++ b/core/frontend/src/components/widget/serviceImpl/TextSelectServiceImpl.js @@ -87,8 +87,13 @@ class TextSelectServiceImpl extends WidgetService { }) } - getParam(element) { - const value = this.fillValueDerfault(element) + getParam(element, val) { + let value = null + if (!val) { + value = this.fillValueDerfault(element) + } else { + value = [val] + } const param = { component: element, value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','), diff --git a/core/frontend/src/utils/conditionUtil.js b/core/frontend/src/utils/conditionUtil.js index 56a91e9b68..4a4d170278 100644 --- a/core/frontend/src/utils/conditionUtil.js +++ b/core/frontend/src/utils/conditionUtil.js @@ -79,6 +79,7 @@ export const buildViewKeyFilters = (panelItems, result) => { if (element.type !== 'custom') { return true } + const selectFirst = element.serviceName === 'textSelectWidget' && element.options.attrs.selectFirst let param = null const widget = ApplicationContext.getService(element.serviceName) @@ -88,15 +89,28 @@ export const buildViewKeyFilters = (panelItems, result) => { const filterComponentId = condition.componentId Object.keys(result).forEach(viewId => { const vidMatch = viewIdMatch(condition.viewIds, viewId) - const viewFilters = result[viewId] - let j = viewFilters.length - while (j--) { - const filter = viewFilters[j] - if (filter.componentId === filterComponentId) { - viewFilters.splice(j, 1) + if (vidMatch && selectFirst) { + + const promise = new Promise(resolve => { + cbParam => { + const newCondition = buildAfterFilterLoaded1(element, cbParam) + resolve(newCondition) + } + }) + promise.componentId = filterComponentId + // promise.cb = + result[viewId].push(promise) + } else { + const viewFilters = result[viewId] + let j = viewFilters.length + while (j--) { + const filter = viewFilters[j] + if (filter.componentId === filterComponentId) { + viewFilters.splice(j, 1) + } } + vidMatch && vValid && viewFilters.push(condition) } - vidMatch && vValid && viewFilters.push(condition) }) }) return result @@ -108,6 +122,41 @@ export const buildFilterMap = panelItems => { return result } +const getElementById = (componentId, panelItems) => { + for (let index = 0; index < panelItems.length; index++) { + const element = panelItems[index] + if (element.id === componentId) { + return element + } + } + return null +} +const buildAfterFilterLoaded1 = (element, p) => { + const widget = ApplicationContext.getService(element.serviceName) + const param = widget.getParam(element, p.val) + const condition = formatCondition(param) + return condition +} +export const buildAfterFilterLoaded = (panelItems, originMap, p) => { + const componentId = p.componentId + const element = getElementById(componentId, panelItems) + let param = null + const widget = ApplicationContext.getService(element.serviceName) + param = widget.getParam(element, p.val) + const condition = formatCondition(param) + const vValid = valueValid(condition) + Object.keys(originMap).forEach(viewId => { + const conditions = originMap[viewId] + if (conditions?.length) { + conditions.forEach(condition => { + if (condition instanceof Promise && condition.componentId === componentId && vValid) { + condition.resolve(condition) + } + }) + } + }) +} + export const fillElementsFilter = (panelItems, filterMap) => { panelItems.forEach(element => { if (element.type === 'view') { diff --git a/core/frontend/src/views/panel/filter/FilterDialog.vue b/core/frontend/src/views/panel/filter/FilterDialog.vue index 457650e75b..3d4b187d4f 100644 --- a/core/frontend/src/views/panel/filter/FilterDialog.vue +++ b/core/frontend/src/views/panel/filter/FilterDialog.vue @@ -278,7 +278,10 @@ :active-name="activeName" /> - + diff --git a/core/frontend/src/views/panel/filter/filterMain/FilterFoot.vue b/core/frontend/src/views/panel/filter/filterMain/FilterFoot.vue index 998cff9015..85a8b39a2a 100644 --- a/core/frontend/src/views/panel/filter/filterMain/FilterFoot.vue +++ b/core/frontend/src/views/panel/filter/filterMain/FilterFoot.vue @@ -8,6 +8,14 @@ >
{{ $t('dynamic_time.set_default') }} + + 首项 +
From 3cfcd5461ae43ac18a69dad3db9a4f54e161cd7e Mon Sep 17 00:00:00 2001 From: xuwei-fit2cloud Date: Tue, 7 Nov 2023 17:30:39 +0800 Subject: [PATCH 02/25] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9healthcheck?= =?UTF-8?q?=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- installer/dataease/dectl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/dataease/dectl b/installer/dataease/dectl index fe90ff84b1..532d579a8c 100755 --- a/installer/dataease/dectl +++ b/installer/dataease/dectl @@ -60,7 +60,7 @@ function _healthcheck() { container_name=$(grep "container_name" $DE_BASE/dataease/docker-compose.yml | awk -F': ' '{print $2}') sleep 1 if [ -z $(docker ps --filter "name=$container_name" -q) ];then - echo "未找到容器 $container_name,请检查配置文件。" + echo "未找到容器 $container_name。" exit 1 fi From 2d32f82c78a8095921dcad1d806fd535c1261dda Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Tue, 7 Nov 2023 17:38:53 +0800 Subject: [PATCH 03/25] =?UTF-8?q?perf:=20=E5=B0=9D=E8=AF=95=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E6=96=87=E6=9C=AC=E4=B8=8B=E6=8B=89=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E9=A6=96=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../canvas/components/editor/DeEditor.vue | 82 ++++++++++--------- .../canvas/components/editor/Preview.vue | 2 +- .../canvas/customComponent/UserView.vue | 3 +- .../src/components/elVisualSelect/index.vue | 13 ++- .../components/widget/deWidget/DeSelect.vue | 38 +++++++-- core/frontend/src/lang/en.js | 1 + core/frontend/src/lang/tw.js | 1 + core/frontend/src/lang/zh.js | 1 + core/frontend/src/utils/conditionUtil.js | 38 +++------ .../src/views/panel/filter/FilterDialog.vue | 3 + .../panel/filter/filterMain/FilterFoot.vue | 4 +- .../panel/filter/filterMain/FilterHead.vue | 1 - .../src/views/panel/outerParamsSet/index.vue | 5 +- .../system/sysParam/MapSetting/OnlineMap.vue | 1 - 14 files changed, 112 insertions(+), 81 deletions(-) diff --git a/core/frontend/src/components/canvas/components/editor/DeEditor.vue b/core/frontend/src/components/canvas/components/editor/DeEditor.vue index 1dfb9b573a..16a6b428fa 100644 --- a/core/frontend/src/components/canvas/components/editor/DeEditor.vue +++ b/core/frontend/src/components/canvas/components/editor/DeEditor.vue @@ -80,6 +80,7 @@ :out-style="getShapeStyleInt(item.style)" :active="item === curComponent" :h="getShapeStyleIntDeDrag(item.style,'height')" + @filter-loaded="filterLoaded" /> - + +