|
|
|
@ -232,23 +232,39 @@ export default {
|
|
|
|
|
load () {
|
|
|
|
|
const { renderParams, getI18n } = this
|
|
|
|
|
const { $table, column } = renderParams
|
|
|
|
|
//修改筛选功能,显示可筛选数据内容
|
|
|
|
|
// const visibleData = $table.data
|
|
|
|
|
// const { visibleData } = $table.getTableData()
|
|
|
|
|
// const visibleData = $table.data
|
|
|
|
|
|
|
|
|
|
const { visibleData } = $table.getTableData()
|
|
|
|
|
const { fullData,visibleData } = $table.getTableData()
|
|
|
|
|
const option = column.filters[0]
|
|
|
|
|
const { checks } = option.data
|
|
|
|
|
const colValMaps = {}
|
|
|
|
|
const colValList = []
|
|
|
|
|
|
|
|
|
|
let data=fullData;
|
|
|
|
|
|
|
|
|
|
const _filters=this.getAllFilters($table)
|
|
|
|
|
|
|
|
|
|
let columnIndex=0;
|
|
|
|
|
if(option.data.index>1||!option.data.index){
|
|
|
|
|
for (const item of _filters) {
|
|
|
|
|
if (item.columnName===column.field){
|
|
|
|
|
columnIndex=item.index
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
data=data.filter((data)=>item.checks.indexOf(data[item.columnName])>-1)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//const { vals } = option.data
|
|
|
|
|
const vals=Object.keys(XEUtils.groupBy(visibleData, column.field)).map((val) => {
|
|
|
|
|
return val
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 根据显示的数据,生成可搜索的列表
|
|
|
|
|
visibleData.forEach((item, index) => {
|
|
|
|
|
data.forEach((item, index) => {
|
|
|
|
|
const value = XEUtils.toString(XEUtils.get(item, column.property))
|
|
|
|
|
if (!colValMaps[value]) {
|
|
|
|
|
const vItem = {
|
|
|
|
|
key: index,
|
|
|
|
|
checked: checks.includes(value),
|
|
|
|
|
checked: option.checked?vals.includes(value):true,
|
|
|
|
|
value,
|
|
|
|
|
label: $table.getCellLabel(item, column) || getI18n('vxe.renderer.combination.empty')
|
|
|
|
|
}
|
|
|
|
@ -262,33 +278,9 @@ export default {
|
|
|
|
|
})
|
|
|
|
|
// 将相关的信息记录
|
|
|
|
|
this.column = column
|
|
|
|
|
|
|
|
|
|
this.option = option
|
|
|
|
|
|
|
|
|
|
this.colValList = colValList
|
|
|
|
|
console.log(this.colValList)
|
|
|
|
|
this.valList = colValList.sort(function(a, b) {
|
|
|
|
|
// 先按照 value.length() 排序升序
|
|
|
|
|
if (a.value.length < b.value.length) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else if (a.value.length > b.value.length) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// 如果 value.length() 相等,则按照 value 排序升序
|
|
|
|
|
if (a.value < b.value) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else if (a.value > b.value) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
this.valList = colValList
|
|
|
|
|
this.hasFilter = $table.isFilter(column.property)
|
|
|
|
|
},
|
|
|
|
|
getI18n (key, args) {
|
|
|
|
@ -323,18 +315,71 @@ export default {
|
|
|
|
|
confirmFilterEvent (evnt) {
|
|
|
|
|
const { renderParams, option, valList } = this
|
|
|
|
|
const { data } = option
|
|
|
|
|
const { $panel } = renderParams
|
|
|
|
|
const { $panel,$table,column } = renderParams
|
|
|
|
|
const filters=$table.getCheckedFilters()
|
|
|
|
|
const _filters=[]
|
|
|
|
|
filters.forEach((filter)=>{
|
|
|
|
|
filter.datas.forEach((item)=>{
|
|
|
|
|
_filters.push(item)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
data.f1 = ''
|
|
|
|
|
data.f2 = ''
|
|
|
|
|
data.fType1 = ''
|
|
|
|
|
data.fType2 = ''
|
|
|
|
|
data.sMenu = ''
|
|
|
|
|
data.checks = valList.filter(item => item.checked).map(item => item.value)
|
|
|
|
|
data.columnName=column.field
|
|
|
|
|
data.valList=valList
|
|
|
|
|
|
|
|
|
|
if (!data.index){
|
|
|
|
|
data.index=this.getMaxIndex($table)+1
|
|
|
|
|
}else{
|
|
|
|
|
const { fullData,visibleData } = $table.getTableData()
|
|
|
|
|
let _data=fullData;
|
|
|
|
|
for (let i=0;i<data.index;i++){
|
|
|
|
|
const item=_filters[i];
|
|
|
|
|
_data=_data.filter((data)=>item.checks.indexOf(data[item.columnName])>-1)
|
|
|
|
|
}
|
|
|
|
|
//除最后一次筛选列以外的增加算法
|
|
|
|
|
if (data.index!==this.getMaxIndex($table)){
|
|
|
|
|
for (let j=data.index;j<_filters.length;j++){
|
|
|
|
|
const item=_filters[j];
|
|
|
|
|
const _column=$table.getColumnByField(item.columnName)
|
|
|
|
|
const option = _column.filters[0]
|
|
|
|
|
_data.forEach(d=>{
|
|
|
|
|
if (option.data.checks.indexOf(d[item.columnName])===-1){
|
|
|
|
|
if (option.data.valList.indexOf(d[item.columnName])===-1){
|
|
|
|
|
option.data.checks.push(d[item.columnName])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
$table.setFilter(item.columnName,[option]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 调佣筛选面板的 changeOption 方法,用于改变当前选项
|
|
|
|
|
$panel.changeOption(evnt, true, option)
|
|
|
|
|
// 最后触发确认筛选按钮
|
|
|
|
|
$panel.confirmFilter(evnt)
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
getAllFilters($table){
|
|
|
|
|
const filters=$table.getCheckedFilters()
|
|
|
|
|
const _filters=[]
|
|
|
|
|
filters.forEach((filter)=>{
|
|
|
|
|
filter.datas.forEach((item)=>{
|
|
|
|
|
_filters.push(item)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
return _filters;
|
|
|
|
|
},
|
|
|
|
|
getMaxIndex($table){
|
|
|
|
|
const _filters=this.getAllFilters($table)
|
|
|
|
|
return XEUtils.max(_filters,(item)=>item.index)?.index||0
|
|
|
|
|
},
|
|
|
|
|
resetFilterEvent (evnt) {
|
|
|
|
|
const { renderParams } = this
|
|
|
|
|
const { $panel } = renderParams
|
|
|
|
@ -634,7 +679,7 @@ export default {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
}
|
|
|
|
|
.vxe-tmpl-filter-combination {
|
|
|
|
|
width: 340px;
|
|
|
|
|
width: 240px;
|
|
|
|
|
user-select: none;
|
|
|
|
|
.combination-search {
|
|
|
|
|
padding: 0 10px 0 30px;
|
|
|
|
@ -654,7 +699,6 @@ export default {
|
|
|
|
|
.combination-search-list-body {
|
|
|
|
|
.vxe-list--virtual-wrapper {
|
|
|
|
|
height: 120px;
|
|
|
|
|
width: 340px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.combination-search-item {
|
|
|
|
@ -664,7 +708,7 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
.combination-search-checkbox {
|
|
|
|
|
.vxe-checkbox--label {
|
|
|
|
|
max-width: 340px;
|
|
|
|
|
max-width: 140px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.combination-search-body-empty {
|
|
|
|
|