mirror of
https://github.com/dataease/dataease.git
synced 2026-06-12 16:31:11 +08:00
feat(数据大屏、数据大屏): 外部参数关联查询组件,支持控制查询组件选项值范围 (#17739)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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`;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
<collection property="targetViewInfoList" ofType="io.dataease.visualization.dao.auto.entity.VisualizationOuterParamsTargetViewInfo">
|
||||
<result column="target_view_id" jdbcType="VARCHAR" property="targetViewId"/>
|
||||
<result column="target_ds_id" jdbcType="VARCHAR" property="targetDsId"/>
|
||||
<result column="match_mode" jdbcType="VARCHAR" property="matchMode"/>
|
||||
<result column="target_field_id" jdbcType="VARCHAR" property="targetFieldId"/>
|
||||
</collection>
|
||||
</resultMap>
|
||||
@@ -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
|
||||
|
||||
@@ -89,7 +89,8 @@
|
||||
</el-icon>
|
||||
</div>
|
||||
</div>
|
||||
<div style="flex: 1">{{ t('visualization.filter_component') }}</div>
|
||||
<div style="width: 120px">{{ t('visualization.filter_component') }}</div>
|
||||
<div style="width: 160px">{{ t('visualization.outer_params_type') }}</div>
|
||||
<div style="flex: 1">{{ t('visualization.connection_condition') }}</div>
|
||||
</div>
|
||||
<div class="outer-filter-content">
|
||||
@@ -101,12 +102,31 @@
|
||||
:key="index"
|
||||
>
|
||||
<div style="width: 16px"></div>
|
||||
<div style="flex: 1; line-height: 32px">
|
||||
<div style="width: 120px; line-height: 32px">
|
||||
<Icon name="filter-params"
|
||||
><filterParams style="margin-top: 4px" class="svg-icon view-type-icon"
|
||||
/></Icon>
|
||||
<span>{{ findFilterName(baseFilter.id) }}</span>
|
||||
</div>
|
||||
<div style="width: 152px; margin-right: 12px">
|
||||
<el-select
|
||||
v-model="baseFilter.matchMode"
|
||||
filterable
|
||||
style="width: 100%"
|
||||
:placeholder="t('v_query.select_query_condition')"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
:label="t('visualization.outer_params_type_self')"
|
||||
value="self"
|
||||
></el-option>
|
||||
<el-option
|
||||
:label="t('visualization.outer_params_type_filter')"
|
||||
value="filter"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div style="flex: 1">
|
||||
<el-select
|
||||
v-model="baseFilter.filterSelected"
|
||||
@@ -567,9 +587,11 @@ const datasetInfoChange = datasetInfo => {
|
||||
|
||||
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'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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}`,
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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: '彈框字體色',
|
||||
|
||||
@@ -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: '弹框字体色',
|
||||
|
||||
@@ -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']
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -51,4 +51,7 @@ public class VisualizationOuterParamsTargetViewInfoVO implements Serializable {
|
||||
* 复制来源ID
|
||||
*/
|
||||
private String copyId;
|
||||
|
||||
|
||||
private String matchMode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user