vxe-table icon indicating copy to clipboard operation
vxe-table copied to clipboard

Checkfield 模式的树形 勾选应重构为多种状态

Open adoin opened this issue 2 years ago • 5 comments

这个需求解决了什么问题:

现有逻辑,勾选 true 不勾选和半选都是false 或者undefined 然而维护起来难受,很多时候需要半选状态为true之类的有效统计。

重构建议是废弃checkField 使用checkStatusField 默认='checkStatus' 勾选为1 不选为0 半选为2 维护数值渲染checkbox样式。 这块的代码应该会好维护很多很多。 甚至飞checkField模式

建议的 API 是什么样的:

checkboxConfig:{checkStatusField :'checkStatus'}

获取半选和勾选数据 Xe-utils.map(treeData,row=>!!row.checkStatus) 获取勾选数据 Xe-utils.map(treeData,row=>1===row.checkStatus) 。。。

是否已有其他不错的替代方案:

现有解决类似问题的挣扎:

  const checkHalf = (row: VxeTableDataRow) =>
    row.children &&
    row.children.length &&
    (row.children.some((s: VxeTableDataRow) => checkHalf(s)) ||
      (row.children.some((r: VxeTableDataRow) => r.selected) &&
        row.children.some((r: VxeTableDataRow) => !r.selected)));
 const treeData: Partial<Access>[] = await fetchAccessTree();
    XEUtils.eachTree(treeData, (item) => {
      if (item.selected) {
        item.selected = !checkHalf(item);
      }
    });
    accessTreeData.value = treeData;
  const selectedIds: string[] = [];
    XEUtils.eachTree(distributionData.value, (row) => {
      if (row.selected || checkHalf(row)) {
        selectedIds.push(row.resCode || '');
      }
    });
    bindResources({ id: permissionId.value, resCodes: selectedIds }).then((res) => {
      console.log(res);
    });

adoin avatar Aug 08 '23 08:08 adoin

v4.5 开始默认的方式已经接近 checkbox-config.checkField 的渲染性能,2种方式都能用,渲染性能差别不太大

xuliangzhan avatar Aug 09 '23 04:08 xuliangzhan

v4.5 开始 checkbox-config.checkField 的渲染性能已经不如默认的了,所以也没有必要再用了

并不是用checkField 他的问题很大我知道的,只是希望逻辑上有更好区分半选状态的。 当默认模式下也无法很精确拿到带半选的树形选择结果。 但是status这套是可以的。 因为看到最近的代码在重构这方面,但是还有一些问题,我本地的版本适配checkField过程中发现其实一个多状态的field能解决很多问题,所以有了这个需求

adoin avatar Aug 09 '23 05:08 adoin

如果需要属性绑定可以使用 checkbox-config.checkFieldcheckbox-config.indeterminateField

xuliangzhan avatar Aug 19 '23 17:08 xuliangzhan

如果需要属性绑定可以使用 checkbox-config.checkFieldcheckbox-config.indeterminateField

但是回显的时候只有选中的回显 半选的不回显

gradendripar avatar Jan 30 '24 08:01 gradendripar

但是回显的时候只有选中的回显 半选的不回显 又解决吗,3.8.7的版本

soluationsign avatar Jun 21 '24 03:06 soluationsign