修改复选框禁用时显示错误问题
This commit is contained in:
@@ -108,7 +108,7 @@ createApp(App).use(VXETable).mount('#app')
|
||||
|
||||
### CDN
|
||||
|
||||
不建议将公共的 CDN 地址用于生产,因为该连接随时都可能会失效,导致项目挂掉;
|
||||
不建议将第三方的 CDN 地址用于生产,因为该连接随时都可能会失效,导致项目挂掉;
|
||||
使用 CDN 方式记得锁定版本号,避免受到非兼容性更新的影响
|
||||
|
||||
```HTML
|
||||
|
||||
@@ -106,7 +106,7 @@ createApp(App).use(VXETable).mount('#app')
|
||||
|
||||
### CDN
|
||||
|
||||
不建議將公共的CDN地址用於生產,因為該連接隨時都可能會失效,導致項目掛掉;
|
||||
不建議將第三方的CDN地址用於生產,因為該連接隨時都可能會失效,導致項目掛掉;
|
||||
使用CDN管道記得鎖定版本號,避免受到非相容性更新的影響
|
||||
|
||||
```HTML
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
}],
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -170,5 +170,10 @@
|
||||
border-color: $vxe-primary-disabled-color;
|
||||
}
|
||||
}
|
||||
.vxe-checkbox--indeterminate-icon {
|
||||
&:after {
|
||||
background-color: $vxe-primary-disabled-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
8
types/plugins/pro.d.ts
vendored
8
types/plugins/pro.d.ts
vendored
@@ -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 { }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user