bufanyun/hotgo

生成代码按默认配置提交生成后,前端点击进入菜单目录,控制台中提示“路由错误”

Opened this issue · 10 comments

djun commented

系统版本:Windows 11 22H2

Node 版本:v18.16

Go 版本:1.20.7

数据库已使用 MySQL 8,后端 Go 编译正常。

如图所示,生成代码按默认配置提交生成后,前端点击进入菜单目录,控制台中提示“路由错误”

image

请协助解决问题,非常感谢!

新建个目录试试

djun commented

您好,新建目录后依然是同样情况:

image

djun commented

您好,这边再测了一下,如果“上级菜单”选“根目录”不改动,那可以正常生成进入;如果选了别的目录层级,例如我新建的目录、Dashboard之类的,那么会遇到前面截图出现的bug。

image

image

我也按你说的测了一下,没有复现,即使是Dashboard下也是正常的。有兴趣可以先排查下是什么原因导致的

djun commented

我也按你说的测了一下,没有复现,即使是Dashboard下也是正常的。有兴趣可以先排查下是什么原因导致的

您好,先感谢答复!这边花了好几天时间排查,由于对整个项目源码尚不大熟悉,目前排查起来较为吃力,抱歉。

根据 console 报错提示,个人直觉感觉是在动态路由那里,有一条加载组件出错。重新试了下加菜单在 Dashboard 下面,代码中 routerGenerator 里面加 console log 把每个 currentRouter 都打印出来,发现有报错对应的 component: undefined 如下所示:
image
image
image

根据个人猜想:如果加在根目录,新加菜单的最上级那一项 在数据库里面 component 写的是 LAYOUT ,在动态路由读取解析这里可以正常获取到对应的 Layout 组件;但如果我选择了加在已有目录例如 Dashboard 下面,新加菜单的最上级那一项 在数据库里面 component 写的是 ParentLayout ,但在前端解析时 import 不到对应的 parentLayout 组件(虽然看到相应代码文件似乎是存在的),导致变成 undefined。

个人感觉也有点奇怪的是,数据库里预置的多层级的菜单目录数据,似乎也没用上 ParentLayout ,为什么反而生成代码时用上了呢?

暂时不明确下一步怎样继续排查,请您多多指点!

djun commented

最新进展:
在数据库中把component字段ParentLayout值置空,前端动态路由刷新后就可以获取到对应的 parentLayout 组件了!

image
image

表示大受震撼哈哈哈,定位到 Go 这边生成代码对应代码是 server/internal/library/hggen/views/curd.go tplData["mainComponent"] = "ParentLayout" ,恳请您确认一下是否可以修复这里、发布新版本。不胜感激!

image

djun commented

附上自带初始数据里面,排查到 开发工具-生成演示-生成演示列表,这个菜单在我这边点击进入也是产生同样的问题,
数据库中对应数据确实也是用了 component = ParentLayout

如图所示:

image
image
image

多级目录使用ParentLayout是对的,问题出在component: undefined。从你打印的位置来看是刚获取到菜单列表后component仅进行了一次转换,可以看看component是在哪里变成了undefined

djun commented

多级目录使用ParentLayout是对的,问题出在component: undefined。从你打印的位置来看是刚获取到菜单列表后component仅进行了一次转换,可以看看component是在哪里变成了undefined

您好,最近忙,来晚了,经过排查,在如图 generator-routers.ts 的这个位置开始出现了 undefined
请协助解决,谢谢!

image

asyncImportRoute方法是最后执行的,而你之前截图发现undefined是在执行asyncImportRoute前,所以继续在asyncImportRoute里打印肯定还是undefined

应该先确认API返回是否正常,然后逐步向下排查,下面为你提供一些这边的数据作为参考,希望能帮到你。

API响应数据,接口地址:/admin/role/dynamic
image

打印到的路由数据
image

image