mirror of
https://github.com/jumpserver/lina.git
synced 2026-01-14 11:55:34 +00:00
Compare commits
1 Commits
v3.10.21
...
pr@v3@fixe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e009c17fd |
@@ -34,12 +34,14 @@ class StrategyNormal extends StrategyAbstract {
|
|||||||
onSelectionChange(val) {
|
onSelectionChange(val) {
|
||||||
this.elDataTable.selected = val
|
this.elDataTable.selected = val
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* toggleRowSelection和clearSelection的表现与el-table一致
|
* toggleRowSelection和clearSelection的表现与el-table一致
|
||||||
*/
|
*/
|
||||||
toggleRowSelection(...args) {
|
toggleRowSelection(...args) {
|
||||||
return this.elTable.toggleRowSelection(...args)
|
return this.elTable.toggleRowSelection(...args)
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSelection() {
|
clearSelection() {
|
||||||
return this.elTable.clearSelection()
|
return this.elTable.clearSelection()
|
||||||
}
|
}
|
||||||
@@ -50,12 +52,12 @@ class StrategyNormal extends StrategyAbstract {
|
|||||||
*/
|
*/
|
||||||
class StrategyPersistSelection extends StrategyAbstract {
|
class StrategyPersistSelection extends StrategyAbstract {
|
||||||
/**
|
/**
|
||||||
* el-table的selection-change事件不适用于开启跨页保存的情况。
|
* el-table 的 selection-change 事件不适用于开启跨页保存的情况。
|
||||||
* 比如,当开启persistSelection时,发生以下两个场景:
|
* 比如,当开启 persistSelection时,发生以下两个场景:
|
||||||
* 1. 用户点击翻页
|
* 1. 用户点击翻页
|
||||||
* 2. 用户点击行首的切换全选项按钮,清空当前页多选项数据
|
* 2. 用户点击行首的切换全选项按钮,清空当前页多选项数据
|
||||||
* 其中场景1应该保持selected不变;而场景2只应该从selected移除当前页所有行,保留其他页面的多选状态。
|
* 其中场景 1 应该保持 selected 不变;而场景 2 只应该从 selected 移除当前页所有行,保留其他页面的多选状态。
|
||||||
* 但el-table的selection-change事件在两个场景中无差别发生,所以这里不处理这个事件
|
* 但 el-table 的 selection-change 事件在两个场景中无差别发生,所以这里不处理这个事件
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -63,13 +65,19 @@ class StrategyPersistSelection extends StrategyAbstract {
|
|||||||
*/
|
*/
|
||||||
onSelect(selection, row) {
|
onSelect(selection, row) {
|
||||||
const isChosen = selection.indexOf(row) > -1
|
const isChosen = selection.indexOf(row) > -1
|
||||||
|
|
||||||
this.toggleRowSelection(row, isChosen)
|
this.toggleRowSelection(row, isChosen)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 用户切换当前页的多选
|
* 用户切换当前页的多选
|
||||||
*/
|
*/
|
||||||
onSelectAll(selection, selectable = () => true) {
|
onSelectAll(selection, selectable = () => true) {
|
||||||
const isSelected = !!selection.length
|
// 获取当前所有已选择的项
|
||||||
|
const selectedRows = this.elDataTable.data.filter(r => selection.includes(r))
|
||||||
|
|
||||||
|
// 判断是否已全选
|
||||||
|
const isSelected = this.elDataTable.data.every(r => selectable(r) && selectedRows.includes(r))
|
||||||
|
|
||||||
this.elDataTable.data.forEach(r => {
|
this.elDataTable.data.forEach(r => {
|
||||||
if (selectable(r)) {
|
if (selectable(r)) {
|
||||||
this.toggleRowSelection(r, isSelected)
|
this.toggleRowSelection(r, isSelected)
|
||||||
@@ -83,33 +91,42 @@ class StrategyPersistSelection extends StrategyAbstract {
|
|||||||
toggleRowSelection(row, isSelected) {
|
toggleRowSelection(row, isSelected) {
|
||||||
const { id, selected } = this.elDataTable
|
const { id, selected } = this.elDataTable
|
||||||
const foundIndex = selected.findIndex(r => r[id] === row[id])
|
const foundIndex = selected.findIndex(r => r[id] === row[id])
|
||||||
|
|
||||||
if (typeof isSelected === 'undefined') {
|
if (typeof isSelected === 'undefined') {
|
||||||
isSelected = foundIndex <= -1
|
isSelected = foundIndex <= -1
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSelected && foundIndex === -1) {
|
if (isSelected && foundIndex === -1) {
|
||||||
selected.push(row)
|
selected.push(row)
|
||||||
} else if (!isSelected && foundIndex > -1) {
|
} else if (!isSelected && foundIndex > -1) {
|
||||||
selected.splice(foundIndex, 1)
|
selected.splice(foundIndex, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.elDataTable.$emit('toggle-row-selection', isSelected, row)
|
this.elDataTable.$emit('toggle-row-selection', isSelected, row)
|
||||||
this.updateElTableSelection()
|
this.updateElTableSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
clearSelection() {
|
clearSelection() {
|
||||||
this.elDataTable.selected = []
|
this.elDataTable.selected = []
|
||||||
this.updateElTableSelection()
|
this.updateElTableSelection()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将selected状态同步到el-table中
|
* 将selected状态同步到el-table中
|
||||||
*/
|
*/
|
||||||
updateElTableSelection() {
|
updateElTableSelection() {
|
||||||
const { data, id, selected } = this.elDataTable
|
const { data, id, selected } = this.elDataTable
|
||||||
|
|
||||||
// 历史勾选的行已经不在当前页了,所以要将当前页的行数据和selected合并
|
// 历史勾选的行已经不在当前页了,所以要将当前页的行数据和selected合并
|
||||||
const mergeData = _.uniqWith([...data, ...selected], _.isEqual)
|
const mergeData = _.uniqWith([...data, ...selected], _.isEqual)
|
||||||
|
|
||||||
mergeData.forEach(r => {
|
mergeData.forEach(r => {
|
||||||
const isSelected = !!selected.find(r2 => r[id] === r2[id])
|
const isSelected = !!selected.find(r2 => r[id] === r2[id])
|
||||||
|
|
||||||
if (!this.elTable) {
|
if (!this.elTable) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this.elTable.toggleRowSelection(r, isSelected)
|
this.elTable.toggleRowSelection(r, isSelected)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user