Skip to content

部门管理修改树状结构的父子级时可能会出现数据环形 #803

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
luocheng0208 opened this issue Jul 7, 2023 · 2 comments
Labels
bug Something isn't working Fixed

Comments

@luocheng0208
Copy link

luocheng0208 commented Jul 7, 2023

复现步骤
image
如上图红框所示,有个三层树结构:
顶级
——111
————222

现在我想要将111的父级设置成为222,系统会提示成功,如下图所示
image
但是此时就会导致111的父级是222(即111的pid=222的id),但原本222的父级就是111(即222的pid=111的id)。如此一来111的父级是222,222的父级又是111,这样一来就导致了父子之间的数据环形,界面上已经无法展示111和222之间的树状关系,如下图修改成功后的界面:
image

但是实际数据库中这两条数据还存在,但是由于111和222的两者的pid导致了数据环形,界面上却无法显示,数据库截图如下:
image

总的来说:就是当修改一行数据的所属父级时,只要选择的父级是该行数据下的子级,就会发生这样的错误,一旦错误,就会导致该行数据以及它下面的子级数据形成数据环形,无法形成树状结构,且导致数据库的数据成为脏数据。

此问题所有地方有树状结构编辑的地方都可能发生,例如菜单管理也是树状结构,可以检查所有有树状结构编辑的地方,以免遗漏。

@elunez elunez added the bug Something isn't working label Jul 7, 2023
@elunez elunez closed this as completed in 484785c Jul 7, 2023
@elunez elunez added wontfix This will not be worked on Fixed and removed wontfix This will not be worked on labels Jul 7, 2023
@luocheng0208
Copy link
Author

@elunez 您好,你这样做虽然避免了在界面上操作出现错误的可能,但实际上这个错误还是存在的(治标不治本),比如直接调用接口,不从界面进行操作,这是存在于业务逻辑上的错误。是不是在业务代码中多添加一层逻辑上的判断,判读它选的pid不能是它自己子级的id。个人见解,望君参考,如有不同见解,还请指点一二。

@elunez
Copy link
Owner

elunez commented Jul 7, 2023

之前写代码修复了下,父子节点互换是没问题,但是父节点换到子节点的子节点还是会出现问题,于是就弄成了这种方式。
如果加判断,编辑会变得复杂化。而且后台管理一般不会存在 api 调用接口去修改这个东西,以后如果有时间再改改这个

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Fixed
Projects
None yet
Development

No branches or pull requests

2 participants