修改复选框禁用时显示错误问题

This commit is contained in:
xuliangzhan
2022-01-19 21:23:24 +08:00
parent 58e2d6e067
commit 18b0773386
4 changed files with 39 additions and 11 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "vxe-table",
"version": "3.4.14-beta.0",
"version": "3.4.14-beta.1",
"description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、贼灵活的配置项、扩展接口等...",
"scripts": {
"serve": "vue-cli-service serve",

View File

@@ -352,25 +352,23 @@ export const Cell = {
*/
renderCheckboxHeader (h, params) {
const { $table, column, isHidden } = params
const { isIndeterminate: isAllCheckboxIndeterminate, isAllCheckboxDisabled } = $table
const { isAllSelected: isAllCheckboxSelected, isIndeterminate: isAllCheckboxIndeterminate, isAllCheckboxDisabled } = $table
const { slots } = column
const headerSlot = slots ? slots.header : null
const titleSlot = slots ? slots.title : null
const checkboxOpts = $table.checkboxOpts
const headerTitle = column.getTitle()
let isChecked = false
let on
if (!isHidden) {
isChecked = isAllCheckboxDisabled ? false : $table.isAllSelected
on = {
click (evnt) {
if (!isAllCheckboxDisabled) {
$table.triggerCheckAllEvent(evnt, !isChecked)
$table.triggerCheckAllEvent(evnt, !isAllCheckboxSelected)
}
}
}
}
const checkboxParams = { ...params, checked: isChecked, disabled: isAllCheckboxDisabled, indeterminate: isAllCheckboxIndeterminate }
const checkboxParams = { ...params, checked: isAllCheckboxSelected, disabled: isAllCheckboxDisabled, indeterminate: isAllCheckboxIndeterminate }
if (headerSlot) {
return renderTitleContent(h, checkboxParams, $table.callSlot(headerSlot, checkboxParams, h))
}
@@ -384,7 +382,7 @@ export const Cell = {
return renderTitleContent(h, checkboxParams, [
h('span', {
class: ['vxe-cell--checkbox', {
'is--checked': isChecked,
'is--checked': isAllCheckboxSelected,
'is--disabled': isAllCheckboxDisabled,
'is--indeterminate': isAllCheckboxIndeterminate
}],

View File

@@ -2964,14 +2964,28 @@ const Methods = {
const { afterFullData, selection, treeIndeterminates, checkboxOpts, treeConfig } = this
const { checkField, halfField, checkStrictly, checkMethod } = checkboxOpts
if (!checkStrictly) {
const disableRows = []
const checkRows = []
let isAllResolve = false
let isAllSelected = false
let isIndeterminate = false
if (checkField) {
isAllSelected = afterFullData.length && afterFullData.every(
isAllResolve = afterFullData.every(
checkMethod
? (row) => !checkMethod({ row }) || XEUtils.get(row, checkField)
? (row) => {
if (!checkMethod({ row })) {
disableRows.push(row)
return true
}
if (XEUtils.get(row, checkField)) {
checkRows.push(row)
return true
}
return false
}
: row => XEUtils.get(row, checkField)
)
isAllSelected = isAllResolve && afterFullData.length !== disableRows.length
if (treeConfig) {
if (halfField) {
isIndeterminate = !isAllSelected && afterFullData.some(row => XEUtils.get(row, checkField) || XEUtils.get(row, halfField) || treeIndeterminates.indexOf(row) > -1)
@@ -2986,11 +3000,22 @@ const Methods = {
}
}
} else {
isAllSelected = afterFullData.length && afterFullData.every(
isAllResolve = afterFullData.every(
checkMethod
? (row) => !checkMethod({ row }) || selection.indexOf(row) > -1
? (row) => {
if (!checkMethod({ row })) {
disableRows.push(row)
return true
}
if (selection.indexOf(row) > -1) {
checkRows.push(row)
return true
}
return false
}
: row => selection.indexOf(row) > -1
)
isAllSelected = isAllResolve && afterFullData.length !== disableRows.length
if (treeConfig) {
isIndeterminate = !isAllSelected && afterFullData.some(row => treeIndeterminates.indexOf(row) > -1 || selection.indexOf(row) > -1)
} else {

View File

@@ -170,5 +170,10 @@
border-color: $vxe-primary-disabled-color;
}
}
.vxe-checkbox--indeterminate-icon {
&:after {
background-color: $vxe-primary-disabled-color;
}
}
}
}