mirror of
https://github.com/dataease/dataease.git
synced 2025-02-25 12:03:05 +08:00
feat: 过滤条件穿透到tab组件内部视图
This commit is contained in:
parent
b5c5bbb5b0
commit
a1f5deaf82
@ -2,7 +2,7 @@
|
|||||||
<div class="de-tabs-div">
|
<div class="de-tabs-div">
|
||||||
<el-tabs v-model="activeTabName" type="card" class="de-tabs">
|
<el-tabs v-model="activeTabName" type="card" class="de-tabs">
|
||||||
<el-tab-pane
|
<el-tab-pane
|
||||||
v-for="(item, index) in tabList"
|
v-for="(item, index) in element.options.tabList"
|
||||||
:key="item.name+index"
|
:key="item.name+index"
|
||||||
:lazy="true"
|
:lazy="true"
|
||||||
:name="item.name"
|
:name="item.name"
|
||||||
@ -26,7 +26,7 @@
|
|||||||
{{ $t('detabs.selectview') }}
|
{{ $t('detabs.selectview') }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
|
|
||||||
<el-dropdown-item v-if="tabList.length > 1" :command="beforeHandleCommond('deleteCur', item)">
|
<el-dropdown-item v-if=" element.options.tabList.length > 1" :command="beforeHandleCommond('deleteCur', item)">
|
||||||
{{ $t('table.delete') }}
|
{{ $t('table.delete') }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
|
|
||||||
@ -35,7 +35,7 @@
|
|||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div v-if="activeTabName === item.name" class="de-tab-content">
|
<div v-if="activeTabName === item.name" class="de-tab-content">
|
||||||
<user-view v-if="item.content && item.content.propValue && item.content.propValue.viewId" :ref="item.name" :in-tab="true" :is-edit="isEdit" :active="active" :element="item.content" :out-style="outStyle" />
|
<user-view v-if="item.content && item.content.propValue && item.content.propValue.viewId" :ref="item.name" :in-tab="true" :is-edit="isEdit" :active="active" :element="item.content" :filters="item.content.filters" :out-style="outStyle" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
@ -130,14 +130,15 @@ export default {
|
|||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
textarea: '',
|
textarea: '',
|
||||||
curItem: null,
|
curItem: null,
|
||||||
viewDialogVisible: false,
|
viewDialogVisible: false
|
||||||
tabList: []
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
dropdownShow() {
|
dropdownShow() {
|
||||||
return this.isEdit && !this.mobileLayoutStatus
|
return this.isEdit && !this.mobileLayoutStatus
|
||||||
},
|
},
|
||||||
|
|
||||||
...mapState([
|
...mapState([
|
||||||
'curComponent',
|
'curComponent',
|
||||||
'mobileLayoutStatus'
|
'mobileLayoutStatus'
|
||||||
@ -152,8 +153,7 @@ export default {
|
|||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
bus.$on('add-new-tab', this.addNewTab)
|
bus.$on('add-new-tab', this.addNewTab)
|
||||||
this.tabList = this.element.options && this.element.options.tabList
|
this.activeTabName = this.element.options.tabList[0].name
|
||||||
this.activeTabName = this.tabList[0].name
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
beforeHandleCommond(item, param) {
|
beforeHandleCommond(item, param) {
|
||||||
@ -192,7 +192,8 @@ export default {
|
|||||||
const newComponentId = uuid.v1()
|
const newComponentId = uuid.v1()
|
||||||
const componentInfo = {
|
const componentInfo = {
|
||||||
type: 'view',
|
type: 'view',
|
||||||
id: node.id
|
/* id: node.id */
|
||||||
|
id: node.innerId
|
||||||
}
|
}
|
||||||
|
|
||||||
componentList.forEach(componentTemp => {
|
componentList.forEach(componentTemp => {
|
||||||
@ -239,7 +240,7 @@ export default {
|
|||||||
while (len--) {
|
while (len--) {
|
||||||
if (this.element.options.tabList[len].name === param.name) {
|
if (this.element.options.tabList[len].name === param.name) {
|
||||||
this.element.options.tabList.splice(len, 1)
|
this.element.options.tabList.splice(len, 1)
|
||||||
this.tabList = this.element.options.tabList
|
|
||||||
const activIndex = (len - 1 + this.element.options.tabList.length) % this.element.options.tabList.length
|
const activIndex = (len - 1 + this.element.options.tabList.length) % this.element.options.tabList.length
|
||||||
this.activeTabName = this.element.options.tabList[activIndex].name
|
this.activeTabName = this.element.options.tabList[activIndex].name
|
||||||
}
|
}
|
||||||
@ -256,7 +257,7 @@ export default {
|
|||||||
content: null
|
content: null
|
||||||
}
|
}
|
||||||
this.element.options.tabList.push(tab)
|
this.element.options.tabList.push(tab)
|
||||||
this.tabList = this.element.options.tabList
|
|
||||||
this.styleChange()
|
this.styleChange()
|
||||||
},
|
},
|
||||||
styleChange() {
|
styleChange() {
|
||||||
|
@ -203,20 +203,35 @@ const data = {
|
|||||||
|
|
||||||
for (let index = 0; index < state.componentData.length; index++) {
|
for (let index = 0; index < state.componentData.length; index++) {
|
||||||
const element = state.componentData[index]
|
const element = state.componentData[index]
|
||||||
|
if (element.type && element.type === 'de-tabs') {
|
||||||
|
for (let idx = 0; idx < element.options.tabList.length; idx++) {
|
||||||
|
const ele = element.options.tabList[idx].content
|
||||||
|
if (!ele.type || ele.type !== 'view') continue
|
||||||
|
const currentFilters = ele.filters || []
|
||||||
|
const vidMatch = viewIdMatch(condition.viewIds, ele.propValue.viewId)
|
||||||
|
|
||||||
|
let jdx = currentFilters.length
|
||||||
|
while (jdx--) {
|
||||||
|
const filter = currentFilters[jdx]
|
||||||
|
if (filter.componentId === filterComponentId) {
|
||||||
|
currentFilters.splice(jdx, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 不存在该条件 且 条件有效 直接保存该条件
|
||||||
|
// !filterExist && vValid && currentFilters.push(condition)
|
||||||
|
vidMatch && vValid && currentFilters.push(condition)
|
||||||
|
ele.filters = currentFilters
|
||||||
|
}
|
||||||
|
state.componentData[index] = element
|
||||||
|
}
|
||||||
if (!element.type || element.type !== 'view') continue
|
if (!element.type || element.type !== 'view') continue
|
||||||
const currentFilters = element.filters || []
|
const currentFilters = element.filters || []
|
||||||
const vidMatch = viewIdMatch(condition.viewIds, element.propValue.viewId)
|
const vidMatch = viewIdMatch(condition.viewIds, element.propValue.viewId)
|
||||||
|
|
||||||
let j = currentFilters.length
|
let j = currentFilters.length
|
||||||
// let filterExist = false
|
|
||||||
while (j--) {
|
while (j--) {
|
||||||
const filter = currentFilters[j]
|
const filter = currentFilters[j]
|
||||||
if (filter.componentId === filterComponentId) {
|
if (filter.componentId === filterComponentId) {
|
||||||
// filterExist = true
|
|
||||||
// 已存在该条件 且 条件值有效 直接替换原体检
|
|
||||||
// vidMatch && vValid && (currentFilters[j] = condition)
|
|
||||||
// 已存在该条件 且 条件值无效 直接删除原条件
|
|
||||||
// vidMatch && !vValid && (currentFilters.splice(j, 1))
|
|
||||||
currentFilters.splice(j, 1)
|
currentFilters.splice(j, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,11 +387,28 @@ export default {
|
|||||||
return roots
|
return roots
|
||||||
},
|
},
|
||||||
loadViews() {
|
loadViews() {
|
||||||
const viewIds = this.componentData
|
/* const viewIds = this.componentData
|
||||||
.filter(item => item.type === 'view' && item.propValue && item.propValue.viewId)
|
.filter(item => item.type === 'view' && item.propValue && item.propValue.viewId)
|
||||||
.map(item => item.propValue.viewId)
|
.map(item => item.propValue.viewId) */
|
||||||
|
let viewIds = []; let tabViewIds = []
|
||||||
|
for (let index = 0; index < this.componentData.length; index++) {
|
||||||
|
const element = this.componentData[index]
|
||||||
|
if (element.type && element.propValue && element.propValue.viewId && element.type === 'view') {
|
||||||
|
viewIds.push(element.propValue.viewId)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.type && element.type === 'de-tabs') {
|
||||||
|
tabViewIds = element.options.tabList.filter(item => item.content && item.content.type === 'view' && item.content.propValue && item.content.propValue.viewId).map(item => item.content.propValue.viewId)
|
||||||
|
}
|
||||||
|
viewIds = [...viewIds, ...tabViewIds]
|
||||||
|
}
|
||||||
viewIds && viewIds.length > 0 && viewsWithIds(viewIds).then(res => {
|
viewIds && viewIds.length > 0 && viewsWithIds(viewIds).then(res => {
|
||||||
const datas = res.data
|
const datas = res.data
|
||||||
|
/* datas.forEach(item => {
|
||||||
|
if (tabViewIds.includes(item.id)) {
|
||||||
|
item.name = 'tabs(' + item.name + ')'
|
||||||
|
}
|
||||||
|
}) */
|
||||||
this.viewInfos = datas
|
this.viewInfos = datas
|
||||||
this.childViews.viewInfos = datas
|
this.childViews.viewInfos = datas
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user