From 16983e606e5b6d2f4b7fee19c02fc6030171f258 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=98=89=E8=B1=AA?=
<42510293+ziyujiahao@users.noreply.github.com>
Date: Sun, 4 Jan 2026 17:14:28 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F?=
=?UTF-8?q?=E3=80=81=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F):=20=E5=A4=96?=
=?UTF-8?q?=E9=83=A8=E5=8F=82=E6=95=B0=E5=85=B3=E8=81=94=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E7=BB=84=E4=BB=B6=EF=BC=8C=E6=94=AF=E6=8C=81=E6=8E=A7=E5=88=B6?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=BB=84=E4=BB=B6=E9=80=89=E9=A1=B9=E5=80=BC?=
=?UTF-8?q?=E8=8C=83=E5=9B=B4=20(#17739)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...isualizationOuterParamsTargetViewInfo.java | 10 ++
...isualizationOuterParamsTargetViewInfo.java | 10 ++
.../resources/db/migration/V2.10.19__ddl.sql | 5 +
.../mybatis/ExtDataVisualizationMapper.xml | 12 +-
.../ExtVisualizationOuterParamsMapper.xml | 4 +-
.../visualization/OuterParamsSet.vue | 28 +++-
.../src/custom-component/v-query/Select.vue | 15 ++-
core/core-frontend/src/locales/en.ts | 3 +
core/core-frontend/src/locales/tw.ts | 3 +
core/core-frontend/src/locales/zh-CN.ts | 3 +
.../modules/data-visualization/dvMain.ts | 126 +++++++++---------
...ualizationOuterParamsTargetViewInfoVO.java | 3 +
12 files changed, 153 insertions(+), 69 deletions(-)
diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java
index 02048d2117..816ad9e7c1 100644
--- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java
+++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java
@@ -53,6 +53,16 @@ public class SnapshotVisualizationOuterParamsTargetViewInfo implements Serializa
*/
private String targetDsId;
+ private String matchMode;
+
+ public String getMatchMode() {
+ return matchMode;
+ }
+
+ public void setMatchMode(String matchMode) {
+ this.matchMode = matchMode;
+ }
+
public String getTargetId() {
return targetId;
}
diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java
index e36f2ea50f..596ea4976f 100644
--- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java
+++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java
@@ -53,6 +53,16 @@ public class VisualizationOuterParamsTargetViewInfo implements Serializable {
*/
private String copyId;
+ private String matchMode;
+
+ public String getMatchMode() {
+ return matchMode;
+ }
+
+ public void setMatchMode(String matchMode) {
+ this.matchMode = matchMode;
+ }
+
public String getTargetId() {
return targetId;
}
diff --git a/core/core-backend/src/main/resources/db/migration/V2.10.19__ddl.sql b/core/core-backend/src/main/resources/db/migration/V2.10.19__ddl.sql
index ac2de5c660..4e6e188d1b 100644
--- a/core/core-backend/src/main/resources/db/migration/V2.10.19__ddl.sql
+++ b/core/core-backend/src/main/resources/db/migration/V2.10.19__ddl.sql
@@ -4,3 +4,8 @@ ALTER TABLE `xpack_threshold_info`
ALTER TABLE `xpack_threshold_info_snapshot`
ADD COLUMN `show_field_value` tinyint(1) NOT NULL DEFAULT 0 COMMENT '显示字段值' AFTER `repeat_send`;
+ALTER TABLE `snapshot_visualization_outer_params_target_view_info`
+ ADD COLUMN `match_mode` varchar(255) NULL DEFAULT 'self' COMMENT '匹配方式' AFTER `target_ds_id`;
+
+ALTER TABLE `visualization_outer_params_target_view_info`
+ ADD COLUMN `match_mode` varchar(255) NULL DEFAULT 'self' COMMENT '匹配方式' AFTER `target_ds_id`;
diff --git a/core/core-backend/src/main/resources/mybatis/ExtDataVisualizationMapper.xml b/core/core-backend/src/main/resources/mybatis/ExtDataVisualizationMapper.xml
index 56d36c3d0c..3f932bc463 100644
--- a/core/core-backend/src/main/resources/mybatis/ExtDataVisualizationMapper.xml
+++ b/core/core-backend/src/main/resources/mybatis/ExtDataVisualizationMapper.xml
@@ -816,7 +816,8 @@
`target_field_id`,
`copy_from`,
`copy_id`,
- `target_ds_id`
+ `target_ds_id`,
+ `match_mode`
) SELECT
voptvi.`target_id`,
voptvi.`params_info_id`,
@@ -824,7 +825,8 @@
voptvi.`target_field_id`,
voptvi.`copy_from`,
voptvi.`copy_id`,
- voptvi.`target_ds_id`
+ voptvi.`target_ds_id`,
+ voptvi.`match_mode`
FROM
visualization_outer_params_target_view_info voptvi
LEFT JOIN visualization_outer_params_info vopi ON vopi.params_info_id = voptvi.params_info_id
@@ -1181,7 +1183,8 @@
`target_field_id`,
`copy_from`,
`copy_id`,
- `target_ds_id`
+ `target_ds_id`,
+ `match_mode`
) SELECT
voptvi.`target_id`,
voptvi.`params_info_id`,
@@ -1189,7 +1192,8 @@
voptvi.`target_field_id`,
voptvi.`copy_from`,
voptvi.`copy_id`,
- voptvi.`target_ds_id`
+ voptvi.`target_ds_id`,
+ voptvi.`match_mode`
FROM
snapshot_visualization_outer_params_target_view_info voptvi
LEFT JOIN snapshot_visualization_outer_params_info vopi ON vopi.params_info_id = voptvi.params_info_id
diff --git a/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml b/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml
index 330b4e474e..809a714d62 100644
--- a/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml
+++ b/core/core-backend/src/main/resources/mybatis/ExtVisualizationOuterParamsMapper.xml
@@ -46,6 +46,7 @@
+
@@ -71,6 +72,7 @@
ifnull( popi.checked, 0 ) AS checked,
poptvi.target_view_id,
poptvi.target_ds_id,
+ poptvi.match_mode,
poptvi.target_field_id
FROM
snapshot_visualization_outer_params pop
@@ -178,7 +180,7 @@
popi.required AS required,
popi.default_value AS default_value,
popi.enabled_default AS enabled_default,
- CONCAT( poptvi.target_view_id, '#', poptvi.target_field_id ) AS targetInfo
+ CONCAT( poptvi.target_view_id, '#', poptvi.target_field_id, '#', poptvi.match_mode ) AS targetInfo
FROM
visualization_outer_params pop
LEFT JOIN visualization_outer_params_info popi ON pop.params_id = popi.params_id
diff --git a/core/core-frontend/src/components/visualization/OuterParamsSet.vue b/core/core-frontend/src/components/visualization/OuterParamsSet.vue
index 8367ed8d2a..5b0eed8590 100644
--- a/core/core-frontend/src/components/visualization/OuterParamsSet.vue
+++ b/core/core-frontend/src/components/visualization/OuterParamsSet.vue
@@ -89,7 +89,8 @@
-
{{ t('visualization.filter_component') }}
+ {{ t('visualization.filter_component') }}
+ {{ t('visualization.outer_params_type') }}
{{ t('visualization.connection_condition') }}
@@ -101,12 +102,31 @@
:key="index"
>
-
+
{{ findFilterName(baseFilter.id) }}
+
+
+
+
+
+
+
{
const paramsCheckedAdaptor = (outerParamsInfo, newBaseFilterInfo, newBaseDatasetInfo) => {
const dsFieldIdSelected = {}
+ const dsFilterMatchMode = {}
const viewMatchIds = []
outerParamsInfo.targetViewInfoList.forEach(targetViewInfo => {
viewMatchIds.push(targetViewInfo.targetViewId)
+ dsFilterMatchMode[targetViewInfo.targetDsId] = targetViewInfo.matchMode || 'self'
dsFieldIdSelected[targetViewInfo.targetDsId] =
targetViewInfo.targetFieldId === 'empty'
? targetViewInfo.targetViewId
@@ -601,6 +623,7 @@ const paramsCheckedAdaptor = (outerParamsInfo, newBaseFilterInfo, newBaseDataset
if (newBaseFilterInfo) {
newBaseFilterInfo.forEach(filterInfo => {
filterInfo['filterSelected'] = dsFieldIdSelected[filterInfo.id]
+ filterInfo['matchMode'] = dsFilterMatchMode[filterInfo.id] || 'self'
})
}
outerParamsInfo['filterInfo'] = newBaseFilterInfo
@@ -642,6 +665,7 @@ const save = () => {
outerParamsInfo.targetViewInfoList.push({
targetViewId: baseFilterInfo.filterSelected,
targetDsId: baseFilterInfo.id,
+ matchMode: baseFilterInfo.matchMode,
targetFieldId: 'empty'
})
}
diff --git a/core/core-frontend/src/custom-component/v-query/Select.vue b/core/core-frontend/src/custom-component/v-query/Select.vue
index 47f7b94816..cc76c92f82 100644
--- a/core/core-frontend/src/custom-component/v-query/Select.vue
+++ b/core/core-frontend/src/custom-component/v-query/Select.vue
@@ -58,6 +58,7 @@ interface SelectConfig {
label: string
value: string
}[]
+ optionFilter: []
}
const { t } = useI18n()
@@ -76,7 +77,8 @@ const props = defineProps({
defaultValueCheck: false,
optionValueSource: 0,
multiple: false,
- checkedFieldsMap: {}
+ checkedFieldsMap: {},
+ optionFilter: []
}
}
},
@@ -271,7 +273,16 @@ const handleFieldIdDefaultChange = (val: string[]) => {
})
.then(res => {
options.value = (res || [])
- .filter(ele => ele !== null)
+ .filter(ele => {
+ return (
+ ele !== null &&
+ ((config.value.optionFilter &&
+ config.value.optionFilter.length > 0 &&
+ config.value.optionFilter.includes(ele)) ||
+ !config.value.optionFilter ||
+ config.value.optionFilter.length === 0)
+ )
+ })
.map(ele => {
return {
label: `${ele}`,
diff --git a/core/core-frontend/src/locales/en.ts b/core/core-frontend/src/locales/en.ts
index 996713e87e..d1a0137392 100644
--- a/core/core-frontend/src/locales/en.ts
+++ b/core/core-frontend/src/locales/en.ts
@@ -2945,6 +2945,9 @@ export default {
column_name: 'Field name'
},
visualization: {
+ outer_params_type: 'Type',
+ outer_params_type_self: 'Assignment',
+ outer_params_type_filter: 'Filter',
number_formatter: 'Number Content Format',
jump_dialog_background: 'Dialog Background Color',
jump_dialog_button: 'Dialog Font Color',
diff --git a/core/core-frontend/src/locales/tw.ts b/core/core-frontend/src/locales/tw.ts
index 09117f3bc7..0ba0f9747a 100644
--- a/core/core-frontend/src/locales/tw.ts
+++ b/core/core-frontend/src/locales/tw.ts
@@ -2864,6 +2864,9 @@ export default {
column_name: '欄位名稱'
},
visualization: {
+ outer_params_type: '類型',
+ outer_params_type_self: '賦值',
+ outer_params_type_filter: '過濾',
number_formatter: '數字內容格式',
jump_dialog_background: '彈框背景色',
jump_dialog_button: '彈框字體色',
diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts
index ad47b41bfd..6c6192039b 100644
--- a/core/core-frontend/src/locales/zh-CN.ts
+++ b/core/core-frontend/src/locales/zh-CN.ts
@@ -2870,6 +2870,9 @@ export default {
column_name: '字段名称'
},
visualization: {
+ outer_params_type: '类型',
+ outer_params_type_self: '赋值',
+ outer_params_type_filter: '过滤',
number_formatter: '数字内容格式',
jump_dialog_background: '弹框背景色',
jump_dialog_button: '弹框字体色',
diff --git a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts
index d0587e1625..71a2873b76 100644
--- a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts
+++ b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts
@@ -1265,72 +1265,78 @@ export const dvMainStore = defineStore('dataVisualization', {
element.propValue?.forEach(filterItem => {
if (filterItem.id === targetViewId) {
let queryParams = paramValue
- if (!['1', '7'].includes(filterItem.displayType)) {
- // 查询组件除了时间组件 其他入参只支持文本 这里全部转为文本
- queryParams = paramValue.map(number => String(number))
- }
- filterItem.defaultMapValue = []
- filterItem.mapValue = []
- filterItem.defaultValueCheck = true
- filterItem.defaultValueFirstItem = false
- filterItem.timeType = 'fixed'
- if (['0', '2'].includes(filterItem.displayType)) {
- const { optionValueSource, field, displayId } = filterItem
- const queryMapFlag = optionValueSource === 1 && field.id !== displayId
- let queryMapParams = queryParams
- if (queryMapFlag) {
- queryParams = filterEnumParamsReduce(queryParams, field.id)
- queryMapParams = filterEnumParams(queryParams, field.id)
+ const targetMatchMode = targetInfoArray[2] // 目标匹配模式
+ if (targetMatchMode === 'filter') {
+ // do filter
+ filterItem['optionFilter'] = queryParams
+ } else {
+ if (!['1', '7'].includes(filterItem.displayType)) {
+ // 查询组件除了时间组件 其他入参只支持文本 这里全部转为文本
+ queryParams = paramValue.map(number => String(number))
}
- // 0 文本类型 1 数字类型
- if (filterItem.multiple) {
- // multiple === true 多选
- filterItem['selectValue'] = queryParams
- filterItem['defaultValue'] = queryParams
- } else {
- // 单选
+ filterItem.defaultMapValue = []
+ filterItem.mapValue = []
+ filterItem.defaultValueCheck = true
+ filterItem.defaultValueFirstItem = false
+ filterItem.timeType = 'fixed'
+ if (['0', '2'].includes(filterItem.displayType)) {
+ const { optionValueSource, field, displayId } = filterItem
+ const queryMapFlag = optionValueSource === 1 && field.id !== displayId
+ let queryMapParams = queryParams
+ if (queryMapFlag) {
+ queryParams = filterEnumParamsReduce(queryParams, field.id)
+ queryMapParams = filterEnumParams(queryParams, field.id)
+ }
+ // 0 文本类型 1 数字类型
+ if (filterItem.multiple) {
+ // multiple === true 多选
+ filterItem['selectValue'] = queryParams
+ filterItem['defaultValue'] = queryParams
+ } else {
+ // 单选
+ filterItem['selectValue'] = queryParams[0]
+ filterItem['defaultValue'] = queryParams[0]
+ }
+ filterItem['defaultMapValue'] = queryMapParams
+ filterItem['mapValue'] = queryMapParams
+ } else if (filterItem.displayType === '1') {
+ // 1 时间类型
filterItem['selectValue'] = queryParams[0]
filterItem['defaultValue'] = queryParams[0]
- }
- filterItem['defaultMapValue'] = queryMapParams
- filterItem['mapValue'] = queryMapParams
- } else if (filterItem.displayType === '1') {
- // 1 时间类型
- filterItem['selectValue'] = queryParams[0]
- filterItem['defaultValue'] = queryParams[0]
- } else if (filterItem.displayType === '7') {
- // 7 时间范围类型
- filterItem['selectValue'] = queryParams
- filterItem['defaultValue'] = queryParams
- } else if (filterItem.displayType === '8') {
- // 8 文本搜索
- filterItem['conditionValueF'] = parmaValueSource + ''
- filterItem['defaultConditionValueF'] = parmaValueSource + ''
- } else if (filterItem.displayType === '9') {
- // 9 下拉树
- if (filterItem.multiple) {
- // multiple === true 多选
+ } else if (filterItem.displayType === '7') {
+ // 7 时间范围类型
filterItem['selectValue'] = queryParams
filterItem['defaultValue'] = queryParams
- } else {
- // 单选
- filterItem['selectValue'] = queryParams[0]
- filterItem['defaultValue'] = queryParams[0]
+ } else if (filterItem.displayType === '8') {
+ // 8 文本搜索
+ filterItem['conditionValueF'] = parmaValueSource + ''
+ filterItem['defaultConditionValueF'] = parmaValueSource + ''
+ } else if (filterItem.displayType === '9') {
+ // 9 下拉树
+ if (filterItem.multiple) {
+ // multiple === true 多选
+ filterItem['selectValue'] = queryParams
+ filterItem['defaultValue'] = queryParams
+ } else {
+ // 单选
+ filterItem['selectValue'] = queryParams[0]
+ filterItem['defaultValue'] = queryParams[0]
+ }
+ } else if (filterItem.displayType === '22') {
+ filterItem['defaultNumValueStart'] = queryParams[0]
+ filterItem['defaultNumValueEnd'] = queryParams[1]
+ filterItem['numValueStart'] = queryParams[0]
+ filterItem['numValueEnd'] = queryParams[1]
+ }
+ if ('DE_EMPTY' === paramValueStr) {
+ filterItem['selectValue'] = null
+ filterItem['defaultValue'] = null
+ filterItem['conditionValueF'] = null
+ filterItem['defaultConditionValueF'] = null
+ }
+ if (filterItem['defaultValue']) {
+ defaultValueMap[filterItem.id] = filterItem['defaultValue']
}
- } else if (filterItem.displayType === '22') {
- filterItem['defaultNumValueStart'] = queryParams[0]
- filterItem['defaultNumValueEnd'] = queryParams[1]
- filterItem['numValueStart'] = queryParams[0]
- filterItem['numValueEnd'] = queryParams[1]
- }
- if ('DE_EMPTY' === paramValueStr) {
- filterItem['selectValue'] = null
- filterItem['defaultValue'] = null
- filterItem['conditionValueF'] = null
- filterItem['defaultConditionValueF'] = null
- }
- if (filterItem['defaultValue']) {
- defaultValueMap[filterItem.id] = filterItem['defaultValue']
}
}
})
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOuterParamsTargetViewInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOuterParamsTargetViewInfoVO.java
index 314365a542..04ff879fb9 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOuterParamsTargetViewInfoVO.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationOuterParamsTargetViewInfoVO.java
@@ -51,4 +51,7 @@ public class VisualizationOuterParamsTargetViewInfoVO implements Serializable {
* 复制来源ID
*/
private String copyId;
+
+
+ private String matchMode;
}