1
0
mirror of synced 2025-12-07 22:28:34 +08:00

复选框指定行选择功能

This commit is contained in:
xuliangzhan
2023-08-04 08:37:23 +08:00
parent cbf6aae1c9
commit ca32f591de
4 changed files with 34 additions and 3 deletions

View File

@@ -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>

View File

@@ -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",

View File

@@ -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
View File

@@ -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