From ee78f99edebd04ad4f796aeea5d8fd7214670dca Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Wed, 15 May 2024 15:03:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E8=BF=87=E6=BB=A4=E5=99=A8=E6=94=AF=E6=8C=81=E5=A4=8D?= =?UTF-8?q?=E6=9D=82=E7=9A=84=E4=B8=8E=E6=88=96=E6=9D=A1=E4=BB=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/editor/filter/FilterTree.vue | 116 ++++++++++++++++++ .../views/chart/components/editor/index.vue | 114 ++++++----------- .../data/dataset/auth-tree/FilterFiled.vue | 2 +- 3 files changed, 157 insertions(+), 75 deletions(-) create mode 100644 core/core-frontend/src/views/chart/components/editor/filter/FilterTree.vue diff --git a/core/core-frontend/src/views/chart/components/editor/filter/FilterTree.vue b/core/core-frontend/src/views/chart/components/editor/filter/FilterTree.vue new file mode 100644 index 0000000000..81fd3dc9e8 --- /dev/null +++ b/core/core-frontend/src/views/chart/components/editor/filter/FilterTree.vue @@ -0,0 +1,116 @@ + + + diff --git a/core/core-frontend/src/views/chart/components/editor/index.vue b/core/core-frontend/src/views/chart/components/editor/index.vue index 5112ae7d92..bbcb8db5de 100644 --- a/core/core-frontend/src/views/chart/components/editor/index.vue +++ b/core/core-frontend/src/views/chart/components/editor/index.vue @@ -24,7 +24,7 @@ import DimensionItem from './drag-item/DimensionItem.vue' import { fieldType } from '@/utils/attr' import QuotaItem from '@/views/chart/components/editor/drag-item/QuotaItem.vue' import DragPlaceholder from '@/views/chart/components/editor/drag-item/DragPlaceholder.vue' -import FilterItem from '@/views/chart/components/editor/drag-item/FilterItem.vue' +import FilterTree from './filter/FilterTree.vue' import ChartStyle from '@/views/chart/components/editor/editor-style/ChartStyle.vue' import VQueryChartStyle from '@/views/chart/components/editor/editor-style/VQueryChartStyle.vue' import Senior from '@/views/chart/components/editor/editor-senior/Senior.vue' @@ -63,7 +63,6 @@ const router = useRouter() const { t } = useI18n() const loading = ref(false) const tabActive = ref('data') -const tabActiveVQuery = ref('style') const datasetSelector = ref(null) const curDatasetWeight = ref(0) const renameForm = ref() @@ -111,8 +110,6 @@ onBeforeMount(() => { const appStore = useAppStoreWithOut() const isDataEaseBi = computed(() => appStore.getIsDataEaseBi) -const dsFieldDragOptions = { group: { name: 'drag', pull: 'clone' }, sort: true } - const itemFormRules = reactive({ chartShowName: [ { required: true, message: t('commons.input_content'), trigger: 'change' }, @@ -154,6 +151,11 @@ const state = reactive({ useless: null }) +const filedList = computed(() => { + return [...state.dimension, ...state.quota].filter(ele => ele.id !== 'count') +}) + +provide('filedList', () => filedList.value) watch( [() => view.value['tableId']], () => { @@ -654,34 +656,6 @@ const addDrill = e => { dragRemoveAggField(view.value.drillFields, e) } -const addCustomFilter = e => { - // 记录数等自动生成字段不做为过滤条件 - if (view.value.customFilter && view.value.customFilter.length > 0) { - for (let i = 0; i < view.value.customFilter.length; i++) { - if (view.value.customFilter[i].id === 'count') { - view.value.customFilter.splice(i, 1) - } - } - } - view.value.customFilter[e.newDraggableIndex].filter = [] - dragMoveDuplicate(view.value.customFilter, e, '') - dragRemoveAggField(view.value.customFilter, e) -} -const filterItemRemove = item => { - recordSnapshotInfo('calcData') - view.value.customFilter.splice(item.index, 1) -} - -const cloneItem = param => { - return cloneDeep(param) -} -const moveToDimension = e => { - dragMoveDuplicate(state.dimensionData, e, 'ds') -} -const moveToQuota = e => { - dragMoveDuplicate(state.quotaData, e, 'ds') -} - const onAxisChange = (e, axis: AxisType) => { if (e.removed) { const { element } = e.removed @@ -1078,21 +1052,13 @@ const saveQuotaFilter = () => { } closeQuotaFilter() } +const changeFilterData = customFilter => { + view.value.customFilter = cloneDeep(customFilter) +} +const filterTree = ref() -const showEditFilter = item => { - recordSnapshotInfo('calcData') - state.filterItem = JSON.parse(JSON.stringify(item)) - state.chartForFilter = JSON.parse(JSON.stringify(view.value)) - if (!state.filterItem.logic) { - state.filterItem.logic = 'and' - } - if (!state.filterItem.filterType) { - state.filterItem.filterType = 'logic' - } - if (!state.filterItem.enumCheckField) { - state.filterItem.enumCheckField = [] - } - state.resultFilterEdit = true +const openTreeFilter = () => { + filterTree.value.init(cloneDeep(view.value.customFilter)) } const closeResultFilter = () => { state.resultFilterEdit = false @@ -1478,8 +1444,6 @@ const drop = (ev: MouseEvent, type = 'xAxis') => { const e = { newDraggableIndex: view.value[type].length - 1 } if ('drillFields' === type) { addDrill(e) - } else if (type === 'customFilter') { - addCustomFilter(e) } else { addAxis(e, type as AxisType) } @@ -2164,33 +2128,15 @@ const drop = (ev: MouseEvent, type = 'xAxis') => {
- - - - + + + + + {{ $t('chart.filter') }}
@@ -2899,6 +2845,7 @@ const drop = (ev: MouseEvent, type = 'xAxis') => { {{ t('dataset.confirm') }} + @@ -3475,6 +3422,25 @@ span { padding-top: 8px; padding-bottom: 16px; + .tree-btn { + width: 100%; + background: #fff; + height: 32px; + border-radius: 4px; + border: 1px solid #dcdfe6; + display: flex; + color: #cccccc; + align-items: center; + cursor: pointer; + justify-content: center; + font-size: 12px; + + &.active { + color: #3370ff; + border-color: #3370ff; + } + } + &.no-top-border { border-top: none !important; } diff --git a/core/core-frontend/src/views/visualized/data/dataset/auth-tree/FilterFiled.vue b/core/core-frontend/src/views/visualized/data/dataset/auth-tree/FilterFiled.vue index f110e748b9..9995640e20 100644 --- a/core/core-frontend/src/views/visualized/data/dataset/auth-tree/FilterFiled.vue +++ b/core/core-frontend/src/views/visualized/data/dataset/auth-tree/FilterFiled.vue @@ -112,7 +112,7 @@ watch(checkResult, () => { const authTargetType = ref('') watch( - () => getAuthTargetType.authTargetType, + () => getAuthTargetType?.authTargetType, value => { if (authTargetType.value === value || !value) return authTargetType.value = value