### 关联 - 测试覆盖率专项:Tencent/tdesign-vue-next#5631 - Checkbox 测试分支:`test/checkbox-coverage`(PR 创建后补充链接) ### 问题描述 CheckboxGroup 的 `max` 在两类边界下可以被绕过: 1. `maxExceeded` 只判断 `value.length === max`,当外部受控值已经大于 max 时,未选项会重新变为可选; 2. 全选时按变更前的 `maxExceeded` 判断是否停止遍历,没有按正在收集的结果限制数量。 相关源码: ```ts const maxExceeded = computed( () => !isUndefined(props.max) && innerValue.value.length === props.max, ); // getAllCheckboxValue 内 checkAllVal.add(item.value); if (maxExceeded.value) break; ``` ### 复现一:已有值超过 max ```tsx <CheckboxGroup value={['a', 'b']} max={1} options={['a', 'b', 'c']} /> ``` 点击 `c` 后仍会发出 `['a', 'b', 'c']`。 ### 复现二:全选 ```tsx <CheckboxGroup max={1} options={[ { label: '全选', checkAll: true }, { label: 'A', value: 'a' }, { label: 'B', value: 'b' }, ]} /> ``` 点击全选会得到 `['a', 'b']`;`max={0}` 时也会选中第一个普通选项。 ### 预期结果 - 达到或超过 max 后不能继续增加选中项; - 全选结果不超过 max,并正确处理 max 为 0 的情况; - 受控异常值不会让限制失效。 ### 补充说明 该问题是在基于最新 `develop`(`9e47c828a`)完全重写 Checkbox 单元测试时发现。测试 PR 不修改源码,会按当前真实行为保留特征测试;源码修复时应同步更新断言。
Activity
github-actions commentedon Aug 1, 2026
👋 @zhangpaopao0609,感谢给 TDesign 提出了 issue。
请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。
zhangpaopao0609 commentedon Aug 1, 2026
关联测试 PR:#6855。该 PR 不修改源码,按当前真实行为保留特征测试;源码修复时请同步更新对应断言。
kyui-azusa commentedon Aug 3, 2026
我来处理这个问题,会修复受控值已达到/超过 max 时仍可继续选择,以及全选结果超过 max(含 max=0)的边界,并补充回归测试。