复选框指定行选择功能
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
border
|
||||
ref="xTable1"
|
||||
:data="demo1.tableData"
|
||||
:checkbox-config="{isShiftKey: true}"
|
||||
@checkbox-all="selectAllChangeEvent1"
|
||||
@checkbox-change="selectChangeEvent1">
|
||||
<vxe-column type="checkbox" width="60"></vxe-column>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "vxe-table",
|
||||
"version": "4.5.0-beta.19",
|
||||
"version": "4.5.0-beta.20",
|
||||
"description": "一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式为零代码而设计...",
|
||||
"scripts": {
|
||||
"update": "npm install --legacy-peer-deps",
|
||||
|
||||
@@ -5545,10 +5545,27 @@ export default defineComponent({
|
||||
tablePrivateMethods.handleSelectRow(params, value)
|
||||
}
|
||||
},
|
||||
triggerCheckRowEvent (evnt, params, value) {
|
||||
triggerCheckRowEvent (evnt: MouseEvent, params, value) {
|
||||
const checkboxOpts = computeCheckboxOpts.value
|
||||
const { row } = params
|
||||
const { afterFullData } = internalData
|
||||
const { checkMethod } = checkboxOpts
|
||||
if (!checkMethod || checkMethod({ row: params.row })) {
|
||||
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
||||
const checkboxRecords = tableMethods.getCheckboxRecords()
|
||||
if (checkboxRecords.length) {
|
||||
const firstRow = checkboxRecords[0]
|
||||
const _rowIndex = tableMethods.getVTRowIndex(row)
|
||||
const _firstRowIndex = tableMethods.getVTRowIndex(firstRow)
|
||||
if (_rowIndex !== _firstRowIndex) {
|
||||
tableMethods.setAllCheckboxRow(false)
|
||||
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
|
||||
handleCheckedCheckboxRow(rangeRows, true, false)
|
||||
tableMethods.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!checkMethod || checkMethod({ row })) {
|
||||
tablePrivateMethods.handleSelectRow(params, value)
|
||||
tableMethods.dispatchEvent('checkbox-change', Object.assign({
|
||||
records: tableMethods.getCheckboxRecords(),
|
||||
@@ -6260,6 +6277,9 @@ export default defineComponent({
|
||||
if (props.editConfig && editOpts.activeMethod) {
|
||||
warnLog('vxe.error.delProp', ['edit-config.activeMethod', 'edit-config.beforeEditMethod'])
|
||||
}
|
||||
if (props.treeConfig && checkboxOpts.isShiftKey) {
|
||||
errLog('vxe.error.errConflicts', ['tree-config', 'checkbox-config.isShiftKey'])
|
||||
}
|
||||
}
|
||||
|
||||
// 检查是否有安装需要的模块
|
||||
|
||||
10
types/table.d.ts
vendored
10
types/table.d.ts
vendored
@@ -1539,6 +1539,7 @@ export namespace VxeTablePropTypes {
|
||||
checkRowKeys?: string[] | number[]
|
||||
checkStrictly?: boolean
|
||||
strict?: boolean
|
||||
isShiftKey?: boolean
|
||||
checkMethod?(params: {
|
||||
row: D
|
||||
}): boolean
|
||||
@@ -2710,6 +2711,7 @@ export type VxeTableEmits = [
|
||||
'checkbox-range-start',
|
||||
'checkbox-range-change',
|
||||
'checkbox-range-end',
|
||||
'checkbox-range-select',
|
||||
'cell-click',
|
||||
'cell-dblclick',
|
||||
'cell-menu',
|
||||
@@ -3022,6 +3024,11 @@ export namespace VxeTableDefines {
|
||||
|
||||
export interface CheckboxRangeEndEventParams<D = VxeTableDataRow> extends TableEventParams<D>, CheckboxRangeEndParams<D> { }
|
||||
|
||||
export interface CheckboxRangeSelectParams<D = VxeTableDataRow> {
|
||||
rangeRecords: D[]
|
||||
}
|
||||
export interface CheckboxRangeSelectEventParams<D = VxeTableDataRow> extends TableEventParams<D>, CheckboxRangeSelectParams<D> { }
|
||||
|
||||
export interface CellClickParams<D = VxeTableDataRow> extends TableBaseCellParams<D> {
|
||||
triggerRadio: boolean
|
||||
triggerCheckbox: boolean
|
||||
@@ -3163,6 +3170,7 @@ export interface VxeTableEventProps<D = VxeTableDataRow> {
|
||||
onCheckboxRangeStart?: VxeTableEvents.CheckboxRangeStart<D>
|
||||
onCheckboxRangeChange?: VxeTableEvents.CheckboxRangeChange<D>
|
||||
onCheckboxRangeEnd?: VxeTableEvents.CheckboxRangeEnd<D>
|
||||
onCheckboxRangeSelect?: VxeTableEvents.CheckboxRangeSelect<D>
|
||||
onCellClick?: VxeTableEvents.CellClick<D>
|
||||
onCellDblclick?: VxeTableEvents.CellDblclick<D>
|
||||
onCellMenu?: VxeTableEvents.CellMenu<D>
|
||||
@@ -3212,6 +3220,7 @@ export interface VxeTableListeners<D = VxeTableDataRow> {
|
||||
checkboxRangeStart?: VxeTableEvents.CheckboxRangeStart<D>
|
||||
checkboxRangeChange?: VxeTableEvents.CheckboxRangeChange<D>
|
||||
checkboxRangeEnd?: VxeTableEvents.CheckboxRangeEnd<D>
|
||||
checkboxRangeSelect?: VxeTableEvents.CheckboxRangeSelect<D>
|
||||
cellClick?: VxeTableEvents.CellClick<D>
|
||||
cellDblclick?: VxeTableEvents.CellDblclick<D>
|
||||
cellMenu?: VxeTableEvents.CellMenu<D>
|
||||
@@ -3260,6 +3269,7 @@ export namespace VxeTableEvents {
|
||||
export type CheckboxRangeStart<D = any> = (params: VxeTableDefines.CheckboxRangeStartEventParams<D>) => void
|
||||
export type CheckboxRangeChange<D = any> = (params: VxeTableDefines.CheckboxRangeChangeEventParams<D>) => void
|
||||
export type CheckboxRangeEnd<D = any> = (params: VxeTableDefines.CheckboxRangeEndEventParams<D>) => void
|
||||
export type CheckboxRangeSelect<D = any> = (params: VxeTableDefines.CheckboxRangeSelectEventParams<D>) => void
|
||||
export type CellClick<D = any> = (params: VxeTableDefines.CellClickEventParams<D>) => void
|
||||
export type CellDblclick<D = any> = (params: VxeTableDefines.CellDblclickEventParams<D>) => void
|
||||
export type CellMenu<D = any> = (params: VxeTableDefines.CellMenuEventParams<D>) => void
|
||||
|
||||
Reference in New Issue
Block a user