tdesign-vue-next icon indicating copy to clipboard operation
tdesign-vue-next copied to clipboard

[Tree] 树组件 选择子节点父节点 没有加入选中值的功能

Open xiaolin020223 opened this issue 1 year ago • 10 comments

tdesign-vue-next 版本

1.7,1

重现链接

No response

重现步骤

树节点, 选中子节点 (不全部选择子节点)父节点没有加入选择值里 1702890554119

期望结果

希望在选中子节点时候,(不需要全部选中,将父节点加入选中值中)

实际结果

No response

框架版本

No response

浏览器版本

No response

系统版本

No response

Node版本

16.14.0

补充说明

比如选择用户权限, 可能父节点的一半子节点有权限,另外一半无权限,导致无法获取到父节点的key值 无法绑定

xiaolin020223 avatar Dec 18 '23 09:12 xiaolin020223

👋 @xiaolin020223,感谢给 TDesign 提出了 issue。 请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

github-actions[bot] avatar Dec 18 '23 09:12 github-actions[bot]

♥️ 有劳 @LeeJim @pengYYYYY 尽快确认问题。 确认有效后将下一步计划和可能需要的时间回复给 @xiaolin020223 。

github-actions[bot] avatar Dec 18 '23 09:12 github-actions[bot]

权限管理经常用到这种半选状态,应该添加一个快捷的模式,直接把父节点半选的项目添加到选择列表中,现有的:onlyLeaf/parentFirst/all 这些模式,都不能达到这个效果,

ouyoungs avatar Dec 20 '23 06:12 ouyoungs

权限管理经常用到这种半选状态,应该添加一个快捷的模式,直接把父节点半选的项目添加到选择列表中,现有的:onlyLeaf/parentFirst/all 这些模式,都不能达到这个效果,

请问我可以直接使用 getPath 这个方法 获取全部的节点信息吗

xiaolin020223 avatar Dec 20 '23 07:12 xiaolin020223

目前的实现 all 会在子节点全部选中的情况下加上父节点 没有全部选中 则不会; 目前可以通过onchange回调事件的node 参数来获取父节点信息

uyarn avatar Dec 20 '23 10:12 uyarn

目前的实现 all 会在子节点全部选中的情况下加上父节点 没有全部选中 则不会; 目前可以通过onchange回调事件的node 参数来获取父节点信息

所以现在在模式,在实践中不是很科学,常用的权限系统,从后端来,就有既要选中父节点,有了父节点的权限,再选中子节点的功能,但是根据权限不同,不可能要全部选中子节点,才能选中父节点。

ouyoungs avatar Dec 20 '23 10:12 ouyoungs

对于添加新的 valueMode ,持谨慎态度。 因为取值后再重新设置选中态时,这个改动会引起很大混乱。 如果需要半选节点信息,可以获取所有节点遍历后取 node.indeterminate 值来过滤。

TabSpace avatar Dec 21 '23 10:12 TabSpace

对于添加新的 valueMode ,持谨慎态度。 因为取值后再重新设置选中态时,这个改动会引起很大混乱。 如果需要半选节点信息,可以获取所有节点遍历后取 node.indeterminate 值来过滤。

你好,使用了这个方法 确实获取到了父节点, 但是在编辑时(获取详情信息)因包含了父节点, 导致该父节点下 全部的子节点都被选中, 请问如何解决这个问题呢

xiaolin020223 avatar Dec 25 '23 02:12 xiaolin020223

这个问题我也碰到了,这个功能需要确实很常见,因为我一个人写前后端,所以我在后端加了个逻辑:

// 创建一个映射来记录已存在的菜单项 existingMenus := make(map[uint]bool) for _, menu := range uniqueMenus { existingMenus[menu.ID] = true }

// 遍历菜单列表,检查父菜单是否存在于 uniqueMenus 中,如果不存在则添加
for _, menu := range uniqueMenus {
	parentID := menu.ParentID
	// 检查父菜单是否存在于 uniqueMenus 中
	if parentID != 0 && !existingMenus[parentID] {
		parentMenu, err := GetMenuByID(parentID)
		if err != nil {
			return nil, err
		}
		// 将父菜单添加到 uniqueMenus 中
		uniqueMenus[parentID] = parentMenu
		existingMenus[parentID] = true
	}
}

xchao0213 avatar Jan 23 '24 01:01 xchao0213