- 源字段
-
-
- {{ t('visualization.link_view_field') }}
-
-
+ 源条件
+
+ 联动外部参数
@@ -357,7 +359,7 @@
v-for="(
targetViewInfo, index
) in state.linkJumpInfo.targetViewInfoList.filter(
- item => item.type === 'outerParams'
+ item => item.targetType === 'outerParams'
)"
:key="index"
>
@@ -368,23 +370,22 @@
style="width: 100%"
>
{{ curViewField.name }}{{ curFilterField.name }}
@@ -445,7 +446,7 @@
type="primary"
icon="Plus"
text
- @click="addLinkJumpField"
+ @click="addLinkJumpField('outerParams')"
>
{{ t('visualization.add_jump_field') }}
@@ -627,6 +628,7 @@ const state = reactive({
linkJumpInfoArray: [],
linkJumpInfoXArray: [],
linkJumpCurViewFieldArray: [],
+ linkJumpCurFilterFieldArray: [], //当前过滤条件明细
mapJumpInfoArray: {},
panelList: [],
linkJumpInfo: null,
@@ -663,6 +665,7 @@ const dialogInit = viewItem => {
const init = viewItem => {
state.initState = false
state.viewId = viewItem.id
+ state.activeCollapse = 'view'
const chartDetails = canvasViewInfo.value[state.viewId] as ChartObj
state.curJumpViewInfo = chartDetails
let checkAllAxisStr =
@@ -701,12 +704,27 @@ const init = viewItem => {
state.panelList = filterEmptyFolderTree(state.panelList)
})
+ // 获取当前过滤条件明细 过滤原则:1.在当前仪表板或者大屏 2.作用于当前图表
+ state.linkJumpCurFilterFieldArray = []
+ componentData.value.forEach(componentItem => {
+ if (componentItem.component === 'VQuery') {
+ componentItem.propValue.forEach(filterItem => {
+ if (filterItem.checkedFields.includes(state.viewId)) {
+ state.linkJumpCurFilterFieldArray.push({
+ id: filterItem.id,
+ name: filterItem.name,
+ deType: 'filter'
+ })
+ }
+ })
+ }
+ })
+
if (chartDetails.tableId) {
// 获取当前数据集信息
getDatasetDetails(chartDetails.tableId).then(res => {
state.curDatasetInfo = res || {}
})
-
// 获取当前图表的字段信息
listFieldByDatasetGroup(chartDetails.tableId).then(rsp => {
state.linkJumpCurViewFieldArray = []
@@ -864,9 +882,10 @@ const dvNodeClick = data => {
getPanelViewList(data.id)
}
}
-const addLinkJumpField = () => {
+const addLinkJumpField = (type = 'view') => {
state.linkJumpInfo.targetViewInfoList.push({
targetViewId: '',
+ targetType: type,
targetFieldId: ''
})
}
diff --git a/core/core-frontend/src/hooks/web/useFilter.ts b/core/core-frontend/src/hooks/web/useFilter.ts
index 6f36602a5a..3160e72a43 100644
--- a/core/core-frontend/src/hooks/web/useFilter.ts
+++ b/core/core-frontend/src/hooks/web/useFilter.ts
@@ -254,6 +254,7 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
if (item.checkedFields.includes(curComponentId) && item.checkedFieldsMap[curComponentId]) {
let selectValue
const {
+ id,
selectValue: value,
timeGranularityMultiple,
defaultNumValueEnd,
@@ -471,6 +472,7 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
}
filter.push({
+ filterId: id,
componentId: ele.id,
fieldId,
operator,
diff --git a/core/core-frontend/src/views/chart/components/views/index.vue b/core/core-frontend/src/views/chart/components/views/index.vue
index 22819a90eb..856d49a1e0 100644
--- a/core/core-frontend/src/views/chart/components/views/index.vue
+++ b/core/core-frontend/src/views/chart/components/views/index.vue
@@ -466,14 +466,42 @@ const jumpClick = param => {
// 内部仪表板跳转
if (jumpInfo.linkType === 'inner') {
if (jumpInfo.targetDvId) {
+ const filterOuterParams = {}
+ const curFilter = dvMainStore.getLastViewRequestInfo(param.viewId)
+ const targetViewInfoList = jumpInfo.targetViewInfoList
+ if (
+ curFilter &&
+ curFilter.filter &&
+ curFilter.filter.length > 0 &&
+ targetViewInfoList &&
+ targetViewInfoList.length > 0
+ ) {
+ // do filter
+ curFilter.filter.forEach(filterItem => {
+ targetViewInfoList.forEach(targetViewInfo => {
+ if (targetViewInfo.sourceFieldActiveId === filterItem.filterId) {
+ filterOuterParams[targetViewInfo.outerParamsName] = filterItem.value
+ }
+ })
+ })
+ }
+ let attachParamsInfo
+ if (Object.keys(filterOuterParams).length > 0) {
+ attachParamsInfo =
+ '&attachParams=' + encodeURIComponent(Base64.encode(JSON.stringify(filterOuterParams)))
+ }
+ // 携带外部参数
if (publicLinkStatus.value) {
// 判断是否有公共链接ID
if (jumpInfo.publicJumpId) {
- const url = `${embeddedBaseUrl}#/de-link/${
+ let url = `${embeddedBaseUrl}#/de-link/${
jumpInfo.publicJumpId
}?fromLink=true&jumpInfoParam=${encodeURIComponent(
Base64.encode(JSON.stringify(param))
)}`
+ if (attachParamsInfo) {
+ url = url + attachParamsInfo
+ }
const currentUrl = window.location.href
localStorage.setItem('beforeJumpUrl', currentUrl)
windowsJump(url, jumpInfo.jumpType, jumpInfo.windowSize)
@@ -481,9 +509,12 @@ const jumpClick = param => {
ElMessage.warning(t('visualization.public_link_tips'))
}
} else {
- const url = `${embeddedBaseUrl}#/preview?dvId=${
+ let url = `${embeddedBaseUrl}#/preview?dvId=${
jumpInfo.targetDvId
}&fromLink=true&jumpInfoParam=${encodeURIComponent(Base64.encode(JSON.stringify(param)))}`
+ if (attachParamsInfo) {
+ url = url + attachParamsInfo
+ }
const currentUrl = window.location.href
localStorage.setItem('beforeJumpUrl', currentUrl)
if (isIframe.value || isDataEaseBi.value) {
diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java
index bc78f82fc5..d1ed15e49f 100644
--- a/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java
+++ b/sdk/api/api-base/src/main/java/io/dataease/api/visualization/vo/VisualizationLinkJumpTargetViewInfoVO.java
@@ -30,4 +30,9 @@ public class VisualizationLinkJumpTargetViewInfoVO {
* 联动目标类型 view 图表 filter 过滤组件 outParams 外部参数
*/
private String targetType;
+
+ /**
+ * 外部参数名称 当targetType==outParams时 实时查询对应名称
+ */
+ private String outerParamsName;
}