forked from github/dataease
Merge pull request #2319 from dataease/pr@dev@perf_base_logic
perf: 优化树形过滤器
This commit is contained in:
commit
d1dd787198
@ -14,6 +14,7 @@
|
||||
v-model="labels"
|
||||
v-popover:popover
|
||||
:style="styles"
|
||||
:collapse-tags="showNumber"
|
||||
class="el-tree-select-input"
|
||||
:disabled="disabled"
|
||||
popper-class="select-option"
|
||||
@ -119,8 +120,10 @@ export default {
|
||||
}
|
||||
},
|
||||
// 树渲染方法,具体参考el-tree Function(h, { node, data, store }) {}
|
||||
// eslint-disable-next-line vue/require-default-prop
|
||||
treeRenderFun: Function,
|
||||
// 搜索过滤方法,具体参考el-tree Function(h, { value, data, node }) {}
|
||||
// eslint-disable-next-line vue/require-default-prop
|
||||
filterNodeMethod: Function,
|
||||
/*
|
||||
文本框参数,几乎支持el-select所有的API<br>
|
||||
@ -215,7 +218,8 @@ export default {
|
||||
ids: [], // 存储id
|
||||
visible: false, // popover v-model
|
||||
width: 150,
|
||||
showParent: false
|
||||
showParent: false,
|
||||
showNumber: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@ -241,6 +245,9 @@ export default {
|
||||
this.ids = val === '' ? [] : [val]
|
||||
}
|
||||
}
|
||||
},
|
||||
labels: function() {
|
||||
this.setShowNumber()
|
||||
}
|
||||
},
|
||||
created() {
|
||||
@ -549,6 +556,22 @@ export default {
|
||||
*/
|
||||
filterFun(val) {
|
||||
this.$refs.tree.filter(val)
|
||||
},
|
||||
|
||||
setShowNumber() {
|
||||
this.showNumber = false
|
||||
|
||||
this.$nextTick(() => {
|
||||
if (!this.selectParams.multiple || !this.$refs.select || !this.$refs.select.$refs.tags) {
|
||||
return
|
||||
}
|
||||
const kids = this.$refs.select.$refs.tags.children[0].children
|
||||
let contentWidth = 0
|
||||
kids.forEach(kid => {
|
||||
contentWidth += kid.offsetWidth
|
||||
})
|
||||
this.showNumber = contentWidth > ((this.$refs.select.$refs.tags.clientWidth - 35) * 0.9)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,6 @@
|
||||
ref="deSelectTree"
|
||||
v-model="value"
|
||||
popover-class="test-class-wrap"
|
||||
:is-single="isSingle"
|
||||
:data="datas"
|
||||
:select-params="selectParams"
|
||||
:tree-params="treeParams"
|
||||
@ -45,9 +44,8 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
showNumber: false,
|
||||
selectOptionWidth: 0,
|
||||
show: true,
|
||||
selectOptionWidth: 0,
|
||||
datas: [],
|
||||
value: this.isSingle ? '' : [],
|
||||
selectParams: {
|
||||
@ -135,14 +133,17 @@ export default {
|
||||
},
|
||||
'element.options.attrs.multiple': function(value, old) {
|
||||
if (typeof old === 'undefined' || value === old) return
|
||||
|
||||
if (!this.inDraw) {
|
||||
this.value = value ? [] : null
|
||||
this.element.options.value = ''
|
||||
}
|
||||
|
||||
this.show = false
|
||||
this.$nextTick(() => {
|
||||
this.show = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.deSelectTree && this.$refs.deSelectTree.treeDataUpdateFun(this.datas)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@ -212,25 +213,14 @@ export default {
|
||||
this.element.options.manualModify = true
|
||||
}
|
||||
this.setCondition()
|
||||
this.showNumber = false
|
||||
|
||||
this.$nextTick(() => {
|
||||
if (!this.element.options.attrs.multiple || !this.$refs.deSelect || !this.$refs.deSelect.$refs.tags) {
|
||||
return
|
||||
}
|
||||
const kids = this.$refs.deSelect.$refs.tags.children[0].children
|
||||
let contentWidth = 0
|
||||
kids.forEach(kid => {
|
||||
contentWidth += kid.offsetWidth
|
||||
})
|
||||
this.showNumber = contentWidth > ((this.$refs.deSelectTree.$refs.tags.clientWidth - 30) * 0.9)
|
||||
})
|
||||
},
|
||||
|
||||
setCondition() {
|
||||
const val = this.formatFilterValue()
|
||||
|
||||
const param = {
|
||||
component: this.element,
|
||||
value: this.formatFilterValue(),
|
||||
value: val,
|
||||
operator: this.operator,
|
||||
isTree: true
|
||||
}
|
||||
@ -267,7 +257,8 @@ export default {
|
||||
return results
|
||||
// return this.value
|
||||
}
|
||||
return this.value.split(',')
|
||||
const result = this.value.split(',').map(v => v.replaceAll(SEPARATOR, ','))
|
||||
return result
|
||||
},
|
||||
|
||||
fillValueDerfault() {
|
||||
@ -286,14 +277,6 @@ export default {
|
||||
return datas.filter(item => !!item)
|
||||
},
|
||||
|
||||
setOptionWidth(event) {
|
||||
// 下拉框弹出时,设置弹框的宽度
|
||||
this.$nextTick(() => {
|
||||
// this.selectOptionWidth = event.srcElement.offsetWidth + 'px'
|
||||
this.selectOptionWidth = event.srcElement.parentElement.parentElement.offsetWidth + 'px'
|
||||
})
|
||||
},
|
||||
|
||||
/* 下面是树的渲染方法 */
|
||||
|
||||
_filterFun(value, data, node) {
|
||||
@ -308,9 +291,9 @@ export default {
|
||||
_searchFun(value) {
|
||||
console.log(value, '<--_searchFun')
|
||||
// 自行判断 是走后台查询,还是前端过滤
|
||||
this.$refs.treeSelect.filterFun(value)
|
||||
this.$refs.deSelectTree.filterFun(value)
|
||||
// 后台查询
|
||||
// this.$refs.treeSelect.treeDataUpdateFun(treeData);
|
||||
// this.$refs.deSelectTree.treeDataUpdateFun(treeData);
|
||||
},
|
||||
// 自定义render
|
||||
_renderFun(h, { node, data, store }) {
|
||||
|
@ -88,7 +88,11 @@ class TextSelectTreeServiceImpl extends WidgetService {
|
||||
const param = {
|
||||
component: element,
|
||||
value: !value ? [] : Array.isArray(value) ? value : value.toString().split(','),
|
||||
operator: element.options.attrs.multiple ? 'in' : 'eq'
|
||||
operator: element.options.attrs.multiple ? 'in' : 'eq',
|
||||
isTree: true
|
||||
}
|
||||
if (param.value && param.value.length) {
|
||||
param.value = param.value.map(val => val.replaceAll('-de-', ','))
|
||||
}
|
||||
return param
|
||||
}
|
||||
|
@ -27,8 +27,19 @@ export const valueValid = condition => {
|
||||
|
||||
export const formatCondition = obj => {
|
||||
const { component, value, operator, isTree } = obj
|
||||
const fieldId = component.options.attrs.fieldId
|
||||
|
||||
let fieldId = component.options.attrs.fieldId
|
||||
const viewIds = component.options.attrs.viewIds
|
||||
if (isTree && !component.options.attrs.multiple && value && value.length) {
|
||||
// 单选树
|
||||
const val = value[0]
|
||||
if (val) {
|
||||
const len = val.split(',').length
|
||||
if (len) {
|
||||
fieldId = fieldId.split(',').slice(0, len).join(',')
|
||||
}
|
||||
}
|
||||
}
|
||||
const condition = new Condition(component.id, fieldId, operator, value, viewIds, isTree)
|
||||
return condition
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user