From a24c181f76cc44c71d07f447ec9b5e1cc5e553b2 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Thu, 22 Aug 2024 13:03:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E4=BB=AA=E8=A1=A8=E6=9D=BF=E3=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F):=20=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E9=85=8D=E7=BD=AE=E6=A0=B7=E5=BC=8F=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VisualizationOuterParamsService.java | 40 ++- .../ExtVisualizationOuterParamsMapper.xml | 26 +- .../api/visualization/dataVisualization.ts | 2 +- .../visualization/OuterParamsSet.vue | 302 ++++++++++++++---- .../api/dataset/vo/CoreDatasetGroupVO.java | 3 + .../dataset/vo/CoreDatasetTableFieldVO.java | 8 + 6 files changed, 302 insertions(+), 79 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java index 426eb7687d..56ec45a7d9 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java @@ -1,12 +1,18 @@ package io.dataease.visualization.server; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.core.type.TypeReference; +import com.ibm.icu.impl.coll.CollationLoader; import io.dataease.api.dataset.vo.CoreDatasetGroupVO; +import io.dataease.api.dataset.vo.CoreDatasetTableFieldVO; import io.dataease.api.visualization.VisualizationOuterParamsApi; import io.dataease.api.visualization.dto.VisualizationOuterParamsDTO; import io.dataease.api.visualization.dto.VisualizationOuterParamsInfoDTO; import io.dataease.api.visualization.response.VisualizationOuterParamsBaseResponse; -import io.dataease.api.visualization.vo.DataVisualizationVO; +import io.dataease.dataset.dao.auto.entity.CoreDatasetTable; +import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableMapper; +import io.dataease.engine.constant.DeTypeConstants; +import io.dataease.extensions.view.dto.SqlVariableDetails; import io.dataease.utils.BeanUtils; import io.dataease.utils.JsonUtil; import io.dataease.visualization.dao.auto.entity.VisualizationOuterParams; @@ -15,11 +21,11 @@ import io.dataease.visualization.dao.auto.entity.VisualizationOuterParamsTargetV import io.dataease.visualization.dao.auto.mapper.VisualizationOuterParamsInfoMapper; import io.dataease.visualization.dao.auto.mapper.VisualizationOuterParamsMapper; import io.dataease.visualization.dao.auto.mapper.VisualizationOuterParamsTargetViewInfoMapper; -import io.dataease.visualization.dao.ext.mapper.ExtDataVisualizationMapper; import io.dataease.visualization.dao.ext.mapper.ExtVisualizationOuterParamsMapper; import jakarta.annotation.Resource; -import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -44,6 +50,9 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams @Resource private VisualizationOuterParamsTargetViewInfoMapper outerParamsTargetViewInfoMapper; + @Resource + private CoreDatasetTableMapper coreDatasetTableMapper; + @Override public VisualizationOuterParamsDTO queryWithVisualizationId(String visualizationId) { @@ -97,6 +106,29 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams @Override public List queryDsWithVisualizationId(String visualizationId) { - return extOuterParamsMapper.queryDsWithVisualizationId(visualizationId); + List result = extOuterParamsMapper.queryDsWithVisualizationId(visualizationId); + if(!CollectionUtils.isEmpty(result)){ + result.forEach(coreDatasetGroupVO -> { + List fields = coreDatasetGroupVO.getDatasetFields(); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("dataset_group_id", coreDatasetGroupVO.getId()); + List tableResult = coreDatasetTableMapper.selectList(wrapper); + if(!CollectionUtils.isEmpty(tableResult)){ + tableResult.forEach(coreDatasetTable -> { + String sqlVarDetail = coreDatasetTable.getSqlVariableDetails(); + if(StringUtils.isNotEmpty(sqlVarDetail)){ + TypeReference> listTypeReference = new TypeReference>() { + }; + List defaultsSqlVariableDetails = JsonUtil.parseList(sqlVarDetail, listTypeReference); + defaultsSqlVariableDetails.forEach(sqlVariableDetails -> { + String varFieldId = coreDatasetTable.getId()+"|DE|"+sqlVariableDetails.getVariableName(); + fields.add(new CoreDatasetTableFieldVO(varFieldId,sqlVariableDetails.getVariableName(), DeTypeConstants.DE_STRING)); + }); + } + }); + } + }); + } + return result; } } diff --git a/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml b/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml index 1e7a75463e..a9e2b82c55 100644 --- a/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml +++ b/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml @@ -33,11 +33,16 @@ column="{dataset_group_id=id}" select="getDsFieldInfo"> + + + @@ -124,21 +129,32 @@ + + diff --git a/core/core-frontend/src/api/visualization/dataVisualization.ts b/core/core-frontend/src/api/visualization/dataVisualization.ts index 6df17c54a5..16ea48a45f 100644 --- a/core/core-frontend/src/api/visualization/dataVisualization.ts +++ b/core/core-frontend/src/api/visualization/dataVisualization.ts @@ -110,7 +110,7 @@ export const export2AppCheck = params => { export const queryOuterParamsDsInfo = async dvId => { return request.get({ - url: '/dataVisualization/queryDsWithVisualizationId/' + dvId, + url: '/outerParams/queryDsWithVisualizationId/' + dvId, method: 'get', loading: false }) diff --git a/core/core-frontend/src/components/visualization/OuterParamsSet.vue b/core/core-frontend/src/components/visualization/OuterParamsSet.vue index 42f3b43086..8cb75187e4 100644 --- a/core/core-frontend/src/components/visualization/OuterParamsSet.vue +++ b/core/core-frontend/src/components/visualization/OuterParamsSet.vue @@ -70,91 +70,140 @@ - + 选择参数关联组件 +
-
联动组件
-
-
联动组件字段
-
+
+
+ + + +
+
+
查询组件
+
关联条件
-
+
+
+
+ + {{ baseFilter.label }} +
-
+ + + {{ item.name }} + + +
+
+
+ + +
+
+
+ + + +
+
+
图表
+
关联字段或参数
+
+
+
+
+
+ + + +
+
+ + + + {{ baseDatasetInfo.name }} +
+
- - {{ item.title }} - - -
-
- - - -
-
- - - {{ viewField.name }} + {{ item.name }}
- - - - - + +
+
+ 选择关联的图表 + 全选 +
+
+
+ + + {{ viewInfo.chartName }} +
+
+
- - - - {{ t('visualization.add_param_link_field') }} - -
@@ -177,7 +226,7 @@ import { ref, reactive, computed, nextTick } from 'vue' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' -import { ElMessage } from 'element-plus-secondary' +import { ElCol, ElMessage } from 'element-plus-secondary' import { useI18n } from '@/hooks/web/useI18n' import { deepCopy } from '@/utils/utils' import generateID from '@/utils/generateID' @@ -196,6 +245,8 @@ const curEditDataId = ref(null) const snapshotStore = snapshotStoreWithOut() const state = reactive({ + filterExpand: true, + datasetExpand: true, loading: false, outerParamsSetVisible: false, optMenu: [ @@ -220,6 +271,7 @@ const state = reactive({ outerParamsInfoArray: [] }, baseDatasetInfo: [], + baseFilterInfo: [], outerParamsInfoArray: [], mapOuterParamsInfoArray: {}, panelList: [], @@ -286,12 +338,27 @@ const getFieldArray = id => { } const initParams = async () => { + state.baseFilterInfo = [] + state.baseDatasetInfo = [] + // 同步过滤组件信息 + componentData.value.forEach(componentItem => { + if (componentItem.component === 'VQuery') { + state.baseFilterInfo.push(componentItem) + } + }) + // 同步基础数据集信息 + await queryOuterParamsDsInfo(dvInfo.value.id).then(rsp => { + state.baseDatasetInfo = rsp.data + }) // 获取当前仪表板外部跳转信息 queryWithVisualizationId(dvInfo.value.id).then(rsp => { state.outerParams = rsp.data state.outerParamsInfoArray = state.outerParams?.outerParamsInfoArray if (state.outerParamsInfoArray.length >= 1) { state.outerParamsInfoArray.forEach(outerParamsInfo => { + const newBaseFilterInfo = deepCopy(state.baseFilterInfo) + const newBaseDatasetInfo = deepCopy(state.baseDatasetInfo) + paramsCheckedAdaptor(outerParamsInfo, newBaseFilterInfo, newBaseDatasetInfo) state.mapOuterParamsInfoArray[outerParamsInfo.paramsInfoId] = outerParamsInfo }) state.curNodeId = null @@ -301,12 +368,52 @@ const initParams = async () => { }) } }) - await queryOuterParamsDsInfo(dvInfo.value.id).then(rsp => { - state.baseDatasetInfo = rsp.data - }) + getPanelViewList(dvInfo.value.id) } +const paramsCheckedAdaptor = (outerParamsInfo, newBaseFilterInfo, newBaseDatasetInfo) => { + const dsFieldIdSelected = {} + const viewMatchIds = [] + outerParamsInfo.targetViewInfoList.forEach(targetViewInfo => { + viewMatchIds.push(targetViewInfo.targetViewId) + dsFieldIdSelected[targetViewInfo.targetDsId] = + targetViewInfo.targetFieldId === 'empty' + ? targetViewInfo.targetViewId + : targetViewInfo.targetFieldId + }) + if (newBaseDatasetInfo) { + newBaseDatasetInfo.forEach(datasetInfo => { + datasetInfo['fieldIdSelected'] = dsFieldIdSelected[datasetInfo.id] + datasetInfo['viewExpand'] = true + let viewCheckCount = 0 + datasetInfo.datasetViews.forEach(dsView => { + if (viewMatchIds.includes(dsView.chartId)) { + dsView['checked'] = true + viewCheckCount++ + } else { + dsView['checked'] = false + } + }) + datasetInfo['checkAll'] = viewCheckCount === datasetInfo.datasetViews.length + datasetInfo['checkAllIsIndeterminate'] = + viewCheckCount > 0 && viewCheckCount < datasetInfo.datasetViews.length + }) + } + if (newBaseFilterInfo) { + newBaseFilterInfo.forEach(filterInfo => { + filterInfo['filterSelected'] = dsFieldIdSelected[filterInfo.id] + }) + } + outerParamsInfo['filterInfo'] = newBaseFilterInfo + outerParamsInfo['datasetInfo'] = newBaseDatasetInfo + console.log('outerParamsInfo=' + JSON.stringify(outerParamsInfo)) + console.log('newBaseFilterInfo=' + JSON.stringify(newBaseFilterInfo)) + console.log('newBaseDatasetInfo=' + JSON.stringify(newBaseDatasetInfo)) + console.log('dsFieldIdSelected=' + JSON.stringify(dsFieldIdSelected)) + console.log('viewMatchIds=' + JSON.stringify(viewMatchIds)) +} + const cancel = () => { state.outerParamsSetVisible = false } @@ -414,6 +521,14 @@ const removeOuterParamsInfo = (node, data) => { state.curNodeId = null } } +const batchSelectChange = (value, baseDatasetInfo) => { + // do change + baseDatasetInfo.datasetViews.forEach(viewInfo => { + viewInfo.checked = value + }) + baseDatasetInfo.checkAll = value + baseDatasetInfo.checkAllIsIndeterminate = false +} const optInit = () => { state.outerParamsSetVisible = true @@ -497,7 +612,7 @@ defineExpose({ .view-type-icon { color: var(--ed-color-primary); width: 22px; - height: 16px; + height: 14px; } .custom-tree { @@ -533,8 +648,21 @@ defineExpose({ .inner-content { width: 100%; - padding: 16px 16px 8px 16px; - font-size: 14px !important; + font-size: 14px; +} + +.outer-filter-content { + width: 100%; +} + +.inner-filter-content { + width: 100%; + margin-top: 12px; +} + +.inner-dataset-content { + width: 100%; + margin-top: 12px; } .slot-class { @@ -648,4 +776,40 @@ defineExpose({ .params-class ::deep(.ed-dialog__body) { padding: 10px 20px 20px; } + +.new-params-title { + height: 56px; + font-size: 14px; + font-weight: 500; + padding: 16px; + border-bottom: 1px solid rgba(31, 35, 41, 0.15); +} + +.new-params-filter { + padding: 16px; + border-bottom: 1px solid rgba(31, 35, 41, 0.15); +} + +.new-params-ds { + padding: 16px; +} + +.expand-custom { + width: 16px; + height: 16px; + border-radius: 4px; + padding: 0px 1px; + &:hover { + background: rgba(31, 35, 41, 0.1); + cursor: pointer; + } +} + +.ds-view-content { + width: 100%; + border-radius: 4px; + margin-top: 8px; + padding: 12px; + background: rgba(245, 246, 247, 1); +} diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetGroupVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetGroupVO.java index 30e3abea5a..f45f24f295 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetGroupVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetGroupVO.java @@ -2,6 +2,7 @@ package io.dataease.api.dataset.vo; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import io.dataease.api.chart.vo.ChartBaseVO; import lombok.Data; import java.io.Serializable; @@ -88,4 +89,6 @@ public class CoreDatasetGroupVO implements Serializable { private String unionSql; private List datasetFields = new ArrayList<>(); + + private List datasetViews = new ArrayList<>(); } diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetTableFieldVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetTableFieldVO.java index f8b0f615a1..3810db5c3e 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetTableFieldVO.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/dataset/vo/CoreDatasetTableFieldVO.java @@ -3,10 +3,12 @@ package io.dataease.api.dataset.vo; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; @Data +@NoArgsConstructor public class CoreDatasetTableFieldVO implements Serializable { private static final long serialVersionUID = 1L; @@ -121,4 +123,10 @@ public class CoreDatasetTableFieldVO implements Serializable { // 附加ID 兼容自定义参数ID private String attachId; + + public CoreDatasetTableFieldVO(String attachId, String name, Integer deType) { + this.attachId = attachId; + this.name = name; + this.deType = deType; + } }