1
0
mirror of synced 2025-12-24 23:48:01 +08:00

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

This commit is contained in:
xuliangzhan
2022-01-19 21:24:16 +08:00
parent f95e33fbc1
commit c3b52f50fc
8 changed files with 50 additions and 18 deletions

View File

@@ -108,7 +108,7 @@ createApp(App).use(VXETable).mount('#app')
### CDN
不建议将公共的 CDN 地址用于生产,因为该连接随时都可能会失效,导致项目挂掉;
不建议将第三方的 CDN 地址用于生产,因为该连接随时都可能会失效,导致项目挂掉;
使用 CDN 方式记得锁定版本号,避免受到非兼容性更新的影响
```HTML

View File

@@ -106,7 +106,7 @@ createApp(App).use(VXETable).mount('#app')
### CDN
不建議將公共的CDN地址用於生產因為該連接隨時都可能會失效導致項目掛掉
不建議將第三方的CDN地址用於生產因為該連接隨時都可能會失效導致項目掛掉
使用CDN管道記得鎖定版本號避免受到非相容性更新的影響
```HTML

View File

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

View File

@@ -377,26 +377,24 @@ export const Cell = {
const { $table, column, isHidden } = params
const { reactData } = $table
const { computeIsAllCheckboxDisabled, computeCheckboxOpts } = $table.getComputeMaps()
const { isIndeterminate: isAllCheckboxIndeterminate, isAllSelected } = reactData
const { isAllSelected: isAllCheckboxSelected, isIndeterminate: isAllCheckboxIndeterminate } = reactData
const isAllCheckboxDisabled = computeIsAllCheckboxDisabled.value
const { slots } = column
const headerSlot = slots ? slots.header : null
const titleSlot = slots ? slots.title : null
const checkboxOpts = computeCheckboxOpts.value
const headerTitle = column.getTitle()
let isChecked = false
let ons
if (!isHidden) {
isChecked = isAllCheckboxDisabled ? false : isAllSelected
ons = {
onClick (evnt: MouseEvent) {
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(checkboxParams, $table.callSlot(headerSlot, checkboxParams))
}
@@ -410,7 +408,7 @@ export const Cell = {
return renderTitleContent(checkboxParams, [
h('span', {
class: ['vxe-cell--checkbox', {
'is--checked': isChecked,
'is--checked': isAllCheckboxSelected,
'is--disabled': isAllCheckboxDisabled,
'is--indeterminate': isAllCheckboxIndeterminate
}],

View File

@@ -4747,14 +4747,28 @@ export default defineComponent({
const checkboxOpts = computeCheckboxOpts.value
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 > 0 && afterFullData.every(
isAllResolve = afterFullData.every(
checkMethod
? (row) => !checkMethod({ row }) || XEUtils.get(row, checkField)
: (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) || $xetable.findRowIndexOf(treeIndeterminates, row) > -1)
@@ -4769,11 +4783,22 @@ export default defineComponent({
}
}
} else {
isAllSelected = afterFullData.length > 0 && afterFullData.every(
isAllResolve = afterFullData.every(
checkMethod
? (row) => !checkMethod({ row }) || $xetable.findRowIndexOf(selection, row) > -1
: (row) => $xetable.findRowIndexOf(selection, row) > -1
? (row) => {
if (!checkMethod({ row })) {
disableRows.push(row)
return true
}
if ($xetable.findRowIndexOf(selection, row) > -1) {
checkRows.push(row)
return true
}
return false
}
: row => $xetable.findRowIndexOf(selection, row) > -1
)
isAllSelected = isAllResolve && afterFullData.length !== disableRows.length
if (treeConfig) {
isIndeterminate = !isAllSelected && afterFullData.some((row) => $xetable.findRowIndexOf(treeIndeterminates, row) > -1 || $xetable.findRowIndexOf(selection, row) > -1)
} else {

View File

@@ -42,7 +42,7 @@
<a href="https://jsfiddle.net/9qoghkbj/" target="_blank">v4.x jsfiddle</a>
</li>
</ul>
<div style="color:red;font-size: 22px;font-weight: bold;">(注:只需提供复现问题简单 Demo不能放其他无关的代码</div>
<div style="color:red;font-size: 22px;font-weight: bold;">(注:必须提供复现问题简单 Demo不能放其他无关的代码</div>
<ul>
<li>

View File

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

View File

@@ -50,13 +50,17 @@ export interface VxeTableProMethods {
*/
setActiveCellArea(activeArea: VxeTableProDefines.ActiveCellAreaConfig): Promise<any>;
/**
* 用于 mouse-config.area打开单元格查找功能
* 打开单元格查找窗口
*/
openFind(): Promise<any>;
/**
* 用于 mouse-config.area打开单元格替换功能
* 打开单元格替换窗口
*/
openReplace(): Promise<any>;
/**
* 手动关闭查找与替换窗口
*/
closeFNR(): Promise<any>;
}
export interface VxeProPluginMethods extends VxeTableProMethods { }